Задать вопрос
  • Какую фантастику порекомендуете, где главный герой программист/инженер?

    @GeraldIstar
    Frontend
    Криптономикон. Не фантастика, но ГГ инженер/прогер. Очень крутая книжка.
    Ответ написан
    2 комментария
  • Попросили проверить код, на что смотреть нужно?

    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 комментариев
  • Как добыть и какую лучше иностранную дебетовую карту?

    @mv200580
    Интересный британский стартап https://revolut.com/

    Делают физическую UK MasterCard, высылают её по почте, на адрес в РФ пришла за 10 дней
    Выпуск бесплатный
    Обслуживание бесплатное (первый год)
    Пополнение бесплатное с их стороны. МСС 6012 - ваш банк может брать комиссию
    Снятие наличных в любом АТМ бесплатное
    Пока идет карта, можно пользоваться виртуальной в приложении

    здесь можно почитать подробности blogbankir.ru/revolut.html
    в частности:
    — Точно россиянам не нужно извещать налоговую об открытии счета?
    — Уведомление налоговой об открытии счетов регулируется Статьей 12 закона о Валютном регулировании и валютном контроле. В данном случае банковский счет за рубежом не открывается. Согласно «Революту» с деньгами работает Optimal Payments, это «Optimal Payments Limited is authorised by the Financial Conduct Authority under the Electronic Money Regulations 2011 (FRN: 900015) for the issuing of electronic money and payment instruments.»
    Т.е., это электронный кошелёк.
    Ответ написан
    3 комментария
  • Какие есть хорошие видеокурсы по PHP фреймворках?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    https://laracasts.com/ - море полезных и качественных уроков (и целых серий) за смешные деньги.
    Ответ написан
    Комментировать
  • Как можно протестировать верстку сайта во всех размерах и браузерах?

    baskerville42
    @baskerville42
    Учусь работать (Junior)
    www.browserstack.com - платно, но круто
    https://modern.ie/ru-ru - бесплатные виртуальные машины от макрософаков.
    А вообще-то для проверки на разных разрешениях экранов (подходит только для ПК) можно банально сжать окно браузера до нужных размеров.
    Ответ написан
    Комментировать
  • Как можно протестировать верстку сайта во всех размерах и браузерах?

    @slavik_210
    Сходить в ближайший магазин техники и там протестировать. Я так всегда делаю. Консультанты никогда не будут против.
    Ответ написан
    Комментировать
  • Куда в России податься gamedev-разработчику?

    NikMelnikov
    @NikMelnikov
    Вот у них есть офис в Питере - ru.wargaming.net
    Ответ написан
    Комментировать
  • Как явно задать тип переменной PHP в PhpStorm?

    Scat
    @Scat
    Так же можно настроить meta инструкцию на фабрику
    confluence.jetbrains.com/display/PhpStorm/PhpStorm...

    После написания .phpstorm.meta.php файла обязательно перезапустите шторм (в старых версиях без перезапуска не работает)
    Ответ написан
    Комментировать
  • Интерактивная инструкция для пользователей

    @kxyu
    Когда дело касается библиотек на javascript, можете сразу спршивать github:
    Ответ написан
    Комментировать
  • Узнать белый IP-адрес роутера с сервера, который за NAT-ом?

    FilimoniC
    @FilimoniC
    Поставь DynDns на сервер. Так ты будешь хотя бы знать что там происходит
    Ответ написан
    4 комментария
  • Git (BitBucket) + JIRA + PhpStorm — План работы?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    Не-не-не. Вы совсем не туда думаете.
    Каждая фича в отдельный бранч и желательно в нём всего один коммит, апдейты делаются амендом, это позволит легко тягать ваши коммиты черри пиком вместо мержа, что особенно удобно когда ведётся несколько стабильных релизов.
    Соотвественно разработчик пушит всё в свой репозиторий, делает пулл реквест. Затем собирается билд посредством мержа основного репозитория и ветки из репа разработчика. Если всё ок, то принимаем пулл реквест. Дальше ветки разраба никому не мешают, могут и полежать. Оснвной реп относительно чист.

    Надеюсь понятно пояснил, мы так очень большой проект с кучей версий делали и апособо зарекомендовал себя очень хорошо.
    Ответ написан
    1 комментарий
  • Мой сайт заставляют переехать

    Sterhel
    @Sterhel
    Да че за тупняк.

    Если вам этого не достаточно то я могу подключить в дело адвоката чтобы он Вам обосновал а вы ему. А это уже очень дорогой вопрос.

    Стандартная такая разводка, рассчитанная на то, что народ априори боится судов и страшного слова «адвокат». Ну да, это иногда дорого. Дорого будет платить тот чувак, чтобы адвокат (если он есть) разъяснил вам проблемы (если они есть). Слушать-то и бесплатно можно.

    Тем более, «сниппет» — это же вообще термин.

    Как мне быть? Переезжать мне не хочется, а что ответить и как себя вести не знаю.

    а) не переезжайте
    б) кончайте кормить тролля.
    Ответ написан
    3 комментария
  • Мой сайт заставляют переехать

    Talyutin
    @Talyutin
    Мне кажется, лучше всего в этой ситуации, это обратиться к юристу за консультацией. А вообще, судя по snippets.ru, можно просто забить на него.
    Ответ написан
    Комментировать
  • Обязательно ли закрывать файлы после операций?

    @gelas
    Насколько я понимаю в таком варианте, файл закроется, только тогда, когда прийдет сборщик мусора.
    И это может отличатся в зависимости от интерпретатора.
    Лучше использовать так
    with open('file', 'w') as f:
        f.write(SomeStr)
    
    Ответ написан
    Комментировать
  • Монитор — 24 или 27 дюйма? Делл (U2713HM / U2412M)

    AGvin
    @AGvin
    вы бы переплатили вдвойне (как минимум) за лишние 3 дюйма

    Я бы, на Вашем месте, в таком случае, взял бы, лучше, 2 монитора.
    Ответ написан
    3 комментария
  • Программы для разработки web-приложений из-под linux

    Что-то серьезное — IDE, в частности IDE от JetBrains (WebSrotm, PhpStorm, RubyMine и т.п). По быстрому что-то набросать — vim/emacs/sublime на любителя. Хотя и в gedit можно плагинов понаставить. Это в плане управления кодом.

    Дев-окружение для запуска или аналогичное продакшену (стандартные пакеты, например apt-get install apache2 php5 mysql-server), или встроенное в среде выполнения/фреймворка (php -s), или вообще запуск на VDS.

    Ну и консоль, куда без неё, даже с IDE.
    Ответ написан
    2 комментария
  • Посоветуйте книжку с основами C# студенту

    KvanTTT
    @KvanTTT
    CLR via C# в последнем издании на английском.
    Ответ написан
    Комментировать
  • Посоветуйте книжку с основами C# студенту

    PoN
    @PoN
    Game Developer, Full-stack developer.
    CLR via C# 3rd Edition, Jeffrey Richter
    Ответ написан
    Комментировать