Задать вопрос
  • Книги для изучения symfony?

    "Один год с Symfony" перевели на русский язык.
    hudson.su/kniga-odin-god-s-symfony
    Ответ написан
    Комментировать
  • В ubuntu через какое-то время заедает звук, если не трогать мышь. Как исправить?

    terrier
    @terrier
    Настоящий линуксоид бы автоматизировал подергивание мышкой каждые 30 секунд.
    Ответ написан
    Комментировать
  • Хорошая программа для проектирования БД?

    XXX
    @XXX
    Решение где-то рядом
    iluxa1810 посмотрите MySQL workbench

    MySQL_Workbench_Visual_Design_Mac.png
    Ответ написан
    Комментировать
  • Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    un1t
    @un1t
    Делаешь одну модель, добавляшь ей поле role например. И по ней потом даешь доступы.
    Ответ написан
    2 комментария
  • Как вытащить id из ссылки при помощи регулярных выражений php?

    miraage
    @miraage
    Старый прогер
    Любят люди использовать регулярки там, где они не нужны.

    <?php
    
    $url = 'example.com/index?id=7safx145ds7wef4ewf4dsf';
    parse_str(parse_url($url, PHP_URL_QUERY), $query);
    
    var_dump($query['id']);


    string(22) "7safx145ds7wef4ewf4dsf"
    Ответ написан
    Комментировать
  • Как быстро создавать типовые сайты на Laravel?

    @Kostik_1993
    Web Developer
    Можно же это все в виде composer пакетов сделать и прописать в composer.json все что нужно
    Ответ написан
    5 комментариев
  • С какого действия начинается вёрстка сайта?

    andykov
    @andykov
    Shit happens
    Радуюсь новому проекту
    200.webp#7-grid1
    Оцениваю макет на глаз
    200w.webp#30-grid1
    Херачу
    200w.webp#0-grid1
    Профит
    200.webp#5-grid1
    Ответ написан
    1 комментарий
  • Как устанавливать пакеты на мак?

    Prognosticator
    @Prognosticator
    TODO: Здесь будут ворованные умные мысли, типа мои
    Ответ написан
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    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 комментариев
  • Как в коньках рисовать график температуры процессора?

    Prognosticator
    @Prognosticator
    TODO: Здесь будут ворованные умные мысли, типа мои
    Снимите коньки, рисовать будет легче (кстати на лыжах рисовать поустойчивее будет).
    Ответ написан
    Комментировать
  • Споры с менеджером?

    terrier
    @terrier
    опыта у меня достаточно что бы прикинуть реалистичное время которое в 90 процентах совпадает с рельностью

    Если это действительно так, то вы чудо и сокровище для подавляющего большинства it-компаний.

    Дальше начинается : че так много?

    Нууу, разумный вопрос. И что вы на него отвечаете? Потому что, если отвечаете "#опой чую", то очевидно тут ваше слово против слова менеджера и побеждает тот, кто увереннее стоит на своем ( по контексту вопроса понятно, что это не вы).
    По идее должно быть примерно так:
    Вы: оценка на задачу T - X дней.
    Менеджер: а чо так много-то?
    В: Сначала мне нужно сделать подзадачу t1, это по опыту займет x1 дней, потом нужно дождаться пока Вася сделает такую-то свою задачу, по опыту меньше чем за x2 он не справится. Ну а потом еще добавить подзадачу t3 ... давай-ка посмотрим за сколько делается такая задача .. а, вот - за x3. Плюс риски, общим счетом получается X, как я тебе и сказал ( не забудь, что я попадаю с оценкой в 90: случаев )
    М: не ну долго как-то, можно же быстрее, наверное ...
    В: мы же разобрали из чего получается такая оценка. Что тебе непонятно?
    <уточняем все что непонятно>
    М: не ну ... слушай ... все-таки долго ... на меня давят, нужно 0.8 * X по времени.
    В: окей, не проблема. Что если ты попросишь Васю со своей задачей начать пораньше? Или может не будем делать t3? Или еще как-нибудь подумаем, как нам изменить размер задачи. и уменьшить сроки.

    Итого - менеджер, конечно, должен поинтересоваться, можно ли сделать "дешевле", то есть быстрее, но если ваша оценка обоснована, то просто так поменяться она не может.

    На митингах когда делятся таски между девелоперами тоже звучат эстимейты с потолка.

    Это их проблемы. Я так понимаю, вы их линейный коллега - ну значит воздействовать вы на них можете только просвещением, да и то, только заработав всеми признанный авторитет. То есть "Слушай Вася, как ты знаешь, я даю правильные оценки в 90% случаев, а ты, как известно, в 90% случаев ошибаешься. Так что позволь дать тебе добрый совет ..."
    Ответ написан
    2 комментария
  • Споры с менеджером?

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

    @xfg
    Не думайте о доменах. Вы смешали администрирование и программирование. Не нужно никакого dev сервера. Делайте работу на локальной dev машине, отправляйте изменения в удаленный репозиторий и всё. Можете вообще не устанавливать nginx/apache и т.д. на локальную dev машину, чтобы не забивать голову всякими доменами, а проект запускать под встроенным PHP сервером например из корня проекта и тогда будете обращаться к вашим сервисам по адресу localhost:port/service1/index.php, localhost:port/service2/index.php и т.д.

    Домены будете создавать уже на продакшене. В простейшем случае склонируете на продакшн машину удаленный репозиторий проекта и в конфигах nginx нужно будет написать что-то типа такого

    server {
      server_name company.com;
      root /home/www/company/frontend;
     ...
    }
    server {
      server_name admin.company.com;
      root /home/www/company/backend;
     ...
    }
    server {
      server_name service1.company.com;
      root /home/www/company/service1;
     ...
    }
    server {
      server_name service2.company.com;
      root /home/www/company/service2;
     ...
    }


    Есть еще мнение, что каждый разраб должен разворачивать себе локальное окружение на своем компе, но хз...

    Так и делают. Разработчикам не нужен никакой dev сервер. Они клонируют репозиторий, делают что-то локально у себя и отправляют изменения в удаленный репозиторий. Для тестеров и всяких менеджеров просто поднимают так называемый stage-сервер где они и тестируют приложение, но это тоже самое что и продакшн сервер, просто доступ к нему только внутри компании. Можно настроить continuous integration чтобы все изменения из репозитория в master ветке автоматически бы приводили к деплою приложения на stage и продакшн сервера. Примерно так в общих словах устроена веб разработка.
    Ответ написан
    22 комментария
  • Кто ни будь видел сайты с примерами рефакторинга?

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

    @Mercury13
    Программист на «си с крестами» и не только
    В Си++03 константа — это та же переменная, про которую говорится: её нельзя менять, с одним дополнением.
    Если эта переменная ещё и целая, при определённых условиях её значение вычисляется при компиляции и может использоваться, например, в шаблонах или массивах.

    В Си++11 понятия «нельзя менять» и «вычисляется при компиляции» разделили, добавив ключевое слово constexpr.

    Для чего?
    1. Обозвать число. Например, 3,1416 — это пи, −128 — минимум signed char, а 16384 — ёмкость промежуточного буфера.
    2. Наладить какую-нибудь таблицу данных, которую нельзя менять.
    const int FIBONACCI_TABLE[] = { 0, 1, 1, 2, 3, 5, 8, 13 };

    3. Сказать: эта переменная передана по указателю/ссылке, но мы её менять не будем.
    void sayHello(const std::string& name);
    void sayHello(const char* name);


    О преобразовании типов. Если мы подали в какую-нибудь операцию или функцию слегка не тот тип, какой хотели, компилятор способен наладить преобразование.
    float oneAndHalf = 1.5f;
    int one = oneAndHalf; // 1

    Это и есть неявное преобразование типа. В данном случае вредное :)

    Явное преобразование типа нужно, когда неявное не прокатывает. А именно…
    • Компилятор не понимает, какую использовать перегрузку.
    • При сравнении знакового числа с беззнаковым — это сравнение можно проводить в знаковом типе, в беззнаковом или в более широком. Не ошибка, но предупреждение.
    • Программист запретил неявное преобразование ключевым словом explicit.
    • Нужна цепочка из двух преобразований типа.

    Явное преобразование бывает тремя способами: вызов конструктора int(1.5), преобразование как в Си (int)1.5 и ключевое слово static_cast static_cast<int>(1.5).
    Ответ написан
  • Найти и заменить php из массива?

    thewind
    @thewind
    php программист, front / backend developer
    sprintf, vsprintf
    Только вместо ? Используйте %s
    Ответ написан
    Комментировать
  • Когда стоит использовать js фреймворки?

    dom1n1k
    @dom1n1k
    Когда между элементами интерфейса много сложных взаимосвязей.
    Если веб-интерфейс можно разделить на простые слабосвязанные кирпичи по типу "нажал кнопку - панелька развернулась, нажал ещё раз - свернулась, и ей чихать, что творится во всех прочих элементах" - фреймворк не нужен.
    Если же между ними есть связи в духе "если я нажал эту кнопку, то нужно посмотреть состояние того чекбокса и если он true, то сделать A и B, если false, то X, Y и Z, а потом ещё в соседнем списке что-то отфильтровать и по результатам, возможно, некоторые элементы задизейблить" - никуда не денешься. С ростом количества таких связей объем кода и всяческих проверок растёт экспоненциально, всё запутывается в гордиев узел.
    Ответ написан
    Комментировать