• Как учиться новому после рабочего дня?

    @Yarrs
    Привет, тоже кину пять копеек.
    Во первых задай себе вопрос, чего ты хочешь, и чего тебе надо. С этого надо начать.
    Мы что-то делаем не просто так, а ради чего-то. Задай себе простые вопросы, кто ты, где ты находишься, в чем твои цели и предназначение. Программирование само по себе отстой, но с него можно начать. Когда то в 80 годы меня обуял восторг, когда я в классе третьем смог понять смысл a=a+1 Но с тех пор много воды утекло. Пойми чем ты хочешь на самом деле заниматься. Что является твоей настоящей целью, заработать денег, вырасти в социуме, поднять детей, прожить интересную жизнь. Как правило в жизни не выйдет получить всё, время это такой ресурс, который можно пустить либо туда, либо туда, либо еще куда. Делай всегда это с умом.

    Когда поймешь что тебе нужно, составь список целей, цели это не что-то постоянное, но вполне себе динамичное и постоянно меняющееся, мы меняемся, мир меняется. Следуй своим целям. Запомни один хороший принцип - возьми сначала себе. Работа хорошо, ты лучше. Как и где взять дело твое. Способы есть разные. Я ниже напишу немного конкретики. Каждый день нужно осознавать свой список целей и учитывать его в текущем дне. Ставить себе задачи на день и назначать самую важную. Если ты не выполнил эту задачу, считай что день неудачен. Каждый день выдели 15 минут времени вечером и делай анализ дня. Это вместе с пониманием своих ценностей и целей самое важное.

    Теперь немного конкретики.
    Вариантом отщепить время себе масса.
    1) Сними комнату рядом с работой.
    2) Вставай раньше. Ложись раньше
    3) Усталость, это усталость от схожего вида деятельности. Усталость можно легко побороть если заняться чем-то иным. Умственно / физически например переключается будь здоров.
    4) Первый час на работе посвяти только обучению. Обычно люди первый час тратят на котиков, чатики и прочую п-нь, будь не как все.
    5) Поговори с начальником, и скажи что тебе нужно развиваться и обучаться. Посмотри на реакцию. Если он не монстр вопрос можно решить.
    6) Всегда думай перед тем как делать. Решения существуют, часто не на поверхности.

    Теперь несколько вредных советов. Как стоит жить и работать.
    1) Если решил связать свою жизнь с программированием, стоит понимать, что платят те у кого есть деньги, и платят столько сколько готовы заплатить. Отсюда выводы. Больше получают узкие специалисты, которые работают с чем то редким и нужным тем у кого есть деньги. Работая на бедных ты заработаешь ровно чуть больше чем на спасибо. Это как у врачей, стоматологи, к которым захаживают сытые бюргеры с зубной болью на коне, кокой-нибудь травматолог / хирург имеют 90 процентов своей обычной клиентуры бомжей и нищебродов. Но процентов 10 попадается людей с деньгами. А вот анестезиолог вообще с клиентурой не работает, денег дополнительно ему вообще не приходит. Отсюда обилие медицинских анекдотов про бедных анестезиологов.
    2) Собственники и заинтересованные в бизнесе люди на платят просто так, а платят за решение проблем. Чем страшнее на первый взгляд проблема, тем больше за нее можно попросить денег. Сложные проблемы решаются разбиением на более мелкие задачки. Но переоценивать свои силы тоже не стоит. Если сделал что-то крутое скромничать не надо. Тебя будут оценивать в том числе по тому, сколько ты просишь.
    3) У предыдущего пункта есть небольшое следствие. Владельцу главное решение и сроки, ему похрен на красоту кода и прочий глупый перфекционизм.
    4) Лучше место работы для получения стартового опыта, какая-нибудь программисткая контора, но она же худшая в плане роста. Ты окружен людьми примерно твоего уровня и способностей, которые будут неизбежно грызться за место под солнцем, каждый твой начальник будет воспринимать тебе как угрозу своему месту. Прорваться в такой системе сложно. Кроме того работать надо на первое звено в пищевой цепочке. Пока линейному программисту что-то перепадет от базовой ставки 10 человек отщипнут по цепочке.
    5) Если ты работаешь в обычной конторе, постарайся выйти со своими идеями на руководителя бизнеса (гендира), он единственный кто заинтересован в проекте в целом, и может воспринять что-то от твоих мыслей лично. Люди ниже просто попытаются тебя использовать в своих целях.
    6) Люди если смотреть поверх бла бла бла всегда действуют в своих интересах, но только так как сами их понимают. Людей можно предсказывать и читать.
    7) Руководители нагружают тех лошадей что тянут. Идеальный работник тот, кто просит мало работает много. Повышения? Не слышали. Зачем повышать того кто хорош на своем месте.
    8) Добиваются чего-то только те, кто выходит за флажки. Есть загон для стада, где всегда будет скучно, обыденно и тухло, но жить можно, есть и другие возможности.
    9) Самая тупая ошибка людей верить, что если будешь хорошо и долго работать что-то изменится. Ничего не изменится.

    Ну хватит в общем, что-то я увлекся, всегда думай головой, вот мой совет.

    ПС: Забыл добавить. Обязательно надо выбираться из провинции в Москву Питер, лучше в Москву. Дальше уже можно как остаться, так и двигать дальше. Если возраст и прочие дела позволяют.
    Ответ написан
    10 комментариев
  • Как учиться новому после рабочего дня?

    spacyfox
    @spacyfox
    1. Попробуйте для начала накидать четкий план действий: что вы хотите изучить, в какие сроки, что вам для этого нужно, сколько времени в день вы готовы этому уделять.
    Когда есть четкий план, нашему мозгу легче его воспринимать и задача не кажется такой уж непосильной.
    2. Научитесь вставать рано. Когда я вставала часов в 5 утра, то к началу рабочего дня у меня уже были переделаны все бытовые дела, и после работы я со спокойной душой уделяла время саморазвитию.
    3. Делайте перерывы в рабочее время каждый час минут на 15. Это важно, иначе просто не сможете быть продуктивным.

    А вообще, все советы, которые тут написали, хороши. Если вы сможете уделять хотя бы по 2 часа в день на обучение и превратите это в систему, то, я думаю, что все у вас получится.
    Главное не превращаться в робота и давать себе отдых) Все должно быть в удовольствие!)
    Ответ написан
    2 комментария
  • Как учиться новому после рабочего дня?

    petermzg
    @petermzg
    Самый лучший программист
    Так учитесь новому, до начала рабочего дня. Вставайте раньше, учите нужное, затем на работу, а после работы отдых.
    Ответ написан
    7 комментариев
  • Как платить налоги с Яндекс.Денег?

    opium
    @opium
    Просто люблю качественно работать
    так они просто на расчетный счет выводят вам деньги платите налоги как обычно никаких отличий
    Ответ написан
    2 комментария
  • Как организовать самообучение языкам программирования?

    @ProgCS Автор вопроса
    Сначала не было видно, теперь есть.
    Ответ написан
    Комментировать
  • Как корректно передать переменны из js в php?

    alsopub
    @alsopub
    Возможно дело в пробелах в
    $mail = $_POST['mail '];
    $password = $_POST['password '];

    Попробуйте заменить на
    $mail = $_POST['mail'];
    $password = $_POST['password'];
    Ответ написан
    2 комментария
  • Как издать свою книгу онлайн?

    shapovalov_org
    @shapovalov_org
    Инженер-программист
    1. Создать сайт
    2. Выложить на нем электронную версию книги
    Ответ написан
    1 комментарий
  • Существуют ли программы или расширения для организации личного дашборда, информационного табло из разношерстных сервисов?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Вот, как раз для этих целей существует библиотека, разработанная мной.
    includeHTML
    • pure js
    • загрузка по HTML-тегу или через js в любой блок
    • система callback-ов
    • бесконечная автоматическая подгрузка вложенных в друг друга блоков
    • синхрон и асинхрон при выполнении загрузки
    • корректная работа с протоколом file:/// (т.е. можно с диска/флешки html-ку запустить и она будет работать)

    Простое описание: include() (аналог функции в PHP) на javascript.

    Создаём сетку разметки так, как необходимо и по клику вызываем загрузку новых информационных блоков в выбранную ячейку сетки разметки (layout) или сразу целыми блоками заменяем.
    Есть обработчик окончания загрузки блока: туда помещаем вызов для запроса данных.
    Сейчас - делаю загрузку различных типов файлов с реестром DOM-блоков, сохраняя простоту использования и понимания библиотеки.
    Буду благодарен за форк и лайк на гите!

    c43111450e404431bd55df71b237901c.jpg
    https://jsfiddle.net/no08Lj0w/2/


    PS: Случайно обнаружил, что подобная разметка сетки введена в AdSense от Google!
    Ответ написан
    32 комментария
  • Существует ли блогер программист?

    @frozen_coder
    Java-developer
    Ну вот, например Simple Programmer https://www.youtube.com/channel/UCFxdcuY-S6yjZGq_2...
    Как раз то, что вам нужно. И программирование, и жизнь там всякая. Он написал книгу "Путь программиста" про жизнь и развитие программиста. Об этом и снимает.
    Ответ написан
    1 комментарий
  • Есть ли какой нибудь чек-лист по обслуживанию ОС linux?

    mak_sim
    @mak_sim
    maksim77ster@gmail.com
    Я бы порекомендовал с выбора и установки системы мониторинга и использования её преднастроенных шаблонов.
    Конечно это капля в море и без реального опыта всё равно будут пробелы в обслуживании сервера. Но с другой стороны это даст стартовую точку от которой уже можно плясать дальше.

    Например Zabbix. Достаточно легко разворачивается и имеет много встроенных шаблонов (сам Linux, веб-сервер, бд) с предустановленными триггерами, что позволит вам взглянуть комплексно взглянуть на сервер и сделать какие-то выводы.
    Ответ написан
    1 комментарий
  • Есть сайты для общения начинающих программистов, или что-то подобное?

    yokotoka
    @yokotoka
    Python guru
    Вот здесь есть реальная движуха по теме: slack-ru.hexlet.io
    Уже почти 4000 разрабов и сочувствующих тут тусят.
    Ответ написан
    2 комментария
  • В какой момент пора использовать ООП?

    @roskoshinsky
    Никто не привёл ни одного сколько-нибудь весомого аргумента в пользу ООП на PHP. Всё упирается «дружище, эх, попробуй и поймёшь, как это круто»

    Если мы создаём GUI-приложение, которое работает пока пользователь его не остановит, то там ООП действительно целесообразен, как минимум в процессе программирования интерфейса. Но в случае с PHP программа работает доли секунды (пока обрабатывает запрос) и тот же интерфейс программировать не нужно. Задачи программы на PHP: быть понятной, быть быстрой. И оба эти случая не об ООП.

    Чтобы быть понятной, программе нужна простая дружелюбная логика (это самый важный уровень абстракции, о котором забывают), код без дублей и документация. Чтобы быть быстрой ей как минимум не нужен лишний синтаксис.

    Анализируя тот же Laravel я вижу пару хороших вещей, которые логичнее реализовать в функциях и кучу кода ради кода.

    Вот пример https://laravel.ru/docs/v3/database/fluent
    $users = DB::table('users')->get();

    Но ничто нам не мешает написать полиморфную по логике функцию q():

    $users = q("users");

    Эта же функция может принимать SQL-запрос или более сложную над-SQL конструкцию, но при этом более понятную, чем цепь методов. Кто-то может возразить, что функция будет привязана к одному виду базы данных, но тем я напомню, что в зависимости от типа используемой базы ничто нам не мешает загружать нужный файл с соответствующей реализацией функции, к примеру, mysql.db.php postgresql.db.php

    Если логика процедурного кода сбалансирована, если нет дублей кода, если есть документация, то процедурный код будет лучше любого ООП кода по двум критериям: доступность для понимания, скорость работы. Учитывая, что ООП-код тоже требует балансировки и документации, преимущества процедурного становятся абсолютными.
    Ответ написан
  • Где можно попрактиковаться в php?

    e_svirsky
    @e_svirsky
    Web Developer
    Лучшая практика по php ИМХО - написать свой фреймворк с нуля, разбираясь во всех нюансах и минимально копипастить с интернета.
    Недавно писал таск для своего ученика. Можете по нему попробовать по нему по шагам создать свой фреймворк.
    Тут лежит сам таск:
    https://bitbucket.org/e_svirsky/webshop/src/1e8de2...
    Тут же можно посмотреть реализацию:
    https://bitbucket.org/e_svirsky/webshop/src/1e8de2...
    По мере проверок некоторые моменты менялись, я их уже не заносил в файл таска. В любом случае это хороший старт и отличная практика. Если возникнут вопросы - задавайте.
    Ответ написан
    6 комментариев
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

    Это далеко не полный список требований, очень много зависит от проекта в целом и от принципов, заложенных в нем. Для больших мредж реквестов 200 комментариев к коду - это ок. Дерзайте.

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Какой банк выбрать фрилансеру в РФ с ИП для открытия р.с.?

    1kvi1
    @1kvi1
    Разработчик и производитель электроники
    В Alfa банке есть тариф StartUp. 850 рублей в месяц, если в течение месяца нет операций - бесплатный. 3 платежки в месяц бесплатные, больше 250 рублей за платежку. Таким образом если нет деятельности - за расчетный счет платить не нужно.
    Ответ написан
    5 комментариев
  • Как сделать Wordpress очень быстрым?

    @eskrano
    копать в штакетник и немного в сжатие исходного кода, а если глубже то, выбросить вордпресс к чертям .
    Ответ написан
    7 комментариев
  • Http аутентификация работает неправильно, почему?

    Я думаю, что проблема в том, что в первом случае вы каждый раз посылаете 401 статус, независимо от того, ввёл ли уже пользователь правильные данные или нет. Попробуйте обернуть это во что-то вроде:

    $authenticated = false;
    if (isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
      // ищем пользователя в базе
      // выставляем $authenticated в true/false в зависимости от того, нашёлся ли пользователь.
    }
    
    if ($authenticated) {
      // показываем страницу аутентифицированному пользователю
    } else {
      header('HTTP/1.1 401 Unauthorized');
      header('WWW-Authenticate:Basic realm="petrocks"');
    
      echo 'Представься, мразь', PHP_EOL;
    }
    Ответ написан
    Комментировать
  • Как грамотно анализировать массив?

    jakulov
    @jakulov
    Для обработки массива поэлементно, если не находите подходящей встроенной функции, всегда можно воспользоваться array_map, и написать свою реализацию обработчика.
    0. Учтите что у вас в вопросе написаны не массивы, а строки. массивы будут выглять так:
    <?php
    $prog = array(
        'program analiz', 'begin', 'int i, n ; {Описание переменных}', 'float sum ; {Описание переменных}', 'readln n ; {Указание количества итераций}',
        'sum:= 0.31e-1 ;', 'i:=1 ; ', 'while (i<=n)', 'begin', 'sum:=sum+(1/i);', 'i:=i+1;', 'end', 'writeln sum; {Вывод результата}', 'end.'
    );
    $oper = array('program','var','begin','end','ass','if','then','else','for','to','do','while','read','write','true','false');

    1.
    <?php
    $uncomment = array_map(function($el){
        return preg_replace('/(\{.*\})/', '', $el);
    }, $prog);

    2. Также можно фильтровать массив с помощью собственной функции.
    <?php
    $operators = array_unique(array_filter($oper, function($o) use ($prog) {
        foreach ($prog as $line) {
            if (stripos($line, $o) !== false) {
                return true;
            }
        }
        return false;
    }));

    3. Тут как и в п 1. регулярка и array_map
    <?php
    $ost = [];
    array_map(function($el) use($operators, &$ost) {
        if(preg_match_all('/(\w+)/', $el, $match)) {
            foreach($match as $m) {
                foreach($m as $word) {
                    var_dump($word);
                    if(!in_array(strtolower($word), $operators)) {
                        $ost[] = $word;
                    }
                }
            }
        }
    }, $prog);

    4. ... по аналогии с 3, регулярку только другую подобрать (и с оперторами сравнивать не надо), вот удобный сервис для этого: https://www.regex101.com/
    Ответ написан
    3 комментария
  • Как начать работать удаленно или фрилансить, если даже проекты по мизерной цене вызывают затруднения?

    MegaMufa
    @MegaMufa
    Я бы посоветовал вам устроиться на некоторое время работать в офис. Работа в команде очень сильно помогает поднять свой уровень. В этом есть несколько плюсов:
    1. У вас всегда под рукой есть ментор, который может подсказать как решить поставленую перед вами конкретную задачу. Знания, получаемые таким образом, усваиваются намного лучше. Вы лучше понимете, как применять свои навыки.
    2. К окманде работает несколько человек, каждый со своим мнением и кругозором. Общение на обеде, за кофе и на обсуждениях проектов поможет ваам расширить свой профессиональный кругозор. Вы узнаете про многие технологии. В данный момент они вам не понадобытся, но вы будете знать о них, во время принятия решений в будущем.
    3. Устраиваясь на работу в офис стажером (или новичком, в общем неопытным специализстом), вы ставите в известность своего работодателя. Он в замен на пониженый оклад (у начинающего программиста ЗП, конечно ниже), помогает вам обучаться, выделяя вам ментора и давая практику.
    4. Вы преобретаете опыт решения реальных кейсов. В дальнейшем вы будете знать, как решается большинство типовых задач.
    5. В спокойной, но реальной обстановке получите опыт обучения "на лету" и поиска нужного материала.

    Я, когда начинал, тоже страдал такой проблемой. Год работы в комманде из 7 программистов стал для меня сильнейшим рывком. За этот год я поднялся больше, чем за предядущие три года самообучения. Поработал, получил опыт (и кучу положительных эмоций от общения с коллегами), потом спокойно перешел на удаленку.

    Мой вам совет: поработайте некоторое время в команде.
    Ответ написан
    6 комментариев