• Где вести записи разработчику?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    Ответ написан
    Комментировать
  • Как лучше разбить логику?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Пытаюсь понять SRP


    Давайте думать. Вот есть у вас класс который:

    - занимается аутентификацией пользователя
    - занимается регистрацией пользователя
    - занимается восстановлением пароля

    На лицо три сценария использования, три зоны ответственности. Причем каждая из этих фич может быть реализована отдельно друг от друга, отдельно друг от друга протестирована и изменения могут быть в каждой из этих вещей.

    С другой стороны, давайте думать дальше. Если мы поместим все эти операции в рамках юзера - то как бы... все клево) юзер умеет менять свой пароль, юзер умеет логиниться, а регистрация - это просто создание нового юзера. То есть с точки зрения ООП все круто, и нам не нужно ломать инкапсуляцию юзера. Да, юзер много чего будет уметь и возможно даже знать о чем-то о чем не особо должен - но это уже решается инверсией зависимостей и делегированием.

    Давайте думать дальше... например та же регистрация как минимум требует отдельного класса, который будет содержать логику регистрации. Нам же помимо создания юзера надо email ему отправить, а возможно еще что-то сделать.

    p.s. маленький вброс: https://gist.github.com/fesor/33f041e3f362beff8d0e...
    Ответ написан
    1 комментарий
  • Java script удоляет сам себя?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    document.currentScript.remove();

    Только вот зачем?
    Ответ написан
    7 комментариев
  • В какой базе данных хранить одну большую таблицу?

    @lega
    У Яндекса есть clickhouse для метрик, можете попробовать.

    Какое железо хотите под это дело использовать?
    миллиарды строк
    например 10 миллиардов могут занять 600Гб на диске, один индекс 100-600Гб (оперативы), больше индексов - больше памяти. Т.е. тут стандартные подходы не рулят.

    Я для подобного делал партицирование + сжатие + пред-кеширование, итого 600Гб превратились бы в 10Гб на диске и 0,4Гб на индексы. Ну и скорость выборки выросла в ~100 раз по сравнению с обычным подходом (выбирать по строкам из таблицы).
    Ответ написан
    2 комментария
  • Должен ли Web-разработчик уметь администрировать сервера?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Администрировать - нет. В нормальных компаниях это делают отдельные люди, хотя бы по соображениям безопасности.

    Пользоваться консолью на уровне "скопировать файл / запустить скрипт", уметь отредактировать crontab, знать чем хардлинк отличается от софтлинка итд - да.
    Но не надо называть это администрированием.
    Ответ написан
    Комментировать
  • Как создать json строку на php?

    Mayzer
    @Mayzer
    Yes it is!
    Делай объект (массив массивов). Не важно сколько масивов будет. Пользуйся json.parser.online.fr для парсинга и просмотра результатов.

    $test = array();
    
    foreach($products as $product){
        $test[] = array(
            "id"=>$product->id,
            "title"=>$product->title,
            "param"=>array(
                "param1"=>21,
                "param2"=>2,
            ),
        );
    }
    
    echo json_encode($test);
    Ответ написан
    9 комментариев
  • Есть ли смысл платить Yandex.Direct за запросы по которым мы и так на 1, 2, 4 месте?

    reaferon
    @reaferon
    Увы и ах, мне приходится платить, хотя два моих сайта находятся на 1 и 2 местах по ключевым запросам.
    Потому что наша ЦА совершенно не знает разницу между органической выдачей и рекламным блоком. А если весь рекламный блок занимают конкуренты, то наша ЦА просто не доходит до нашего честного первого органического места.
    Ответ написан
    Комментировать
  • Какими методами можно узнать доставлено ли email письмо?

    1. Основной метод контроля доставки - слежение за ошибками отправки (bounce). Ошибка чаще всего дается непосредственно в SMTP-сессию. В некоторых случаях сервер получателя принимает письмо, но в дальнейшем формирует сообщение о невозможности доставки (NDR).
    По стандартам, выдача сообщения о невозможности доставки в SMTP-сессию или отправка NDR являются обязательными, если ваше письмо прошло авторизацию (SPF и/или DKIM) - вы можете быть уверены, что получите баунс в SMTP-сессию или NDR если письмо не будет доставлено практически на 100%. Поэтому если на письмо в разумное время не получено отлупа, можно считать его доставленным. Сообщения о невозможности доставки идут на адрес отправителя SMTP-конверта (envelope-from). Чтобы точно знать, на какой адрес какое письмо не было доставлено, можно для каждого отправляемого письма формировать уникальный envelope-from.

    2. Есть расширение SMTP которое называется delivery status notification
    https://tools.ietf.org/html/rfc3461
    при отправке письма можно запросить, чтобы подтверждение доставки письма в ящик или на сервер получателя, не поддерживающего DSN пришло в явном виде. Подтверждения формирует MTA без участия пользователя. Поддерживается не всеми (например, postfix поддерживает, exim нет).

    3. Есть нестандартный заголовок Return-Receipt-To, который работает примерно так же как DSN. Но поскольку он нестандартный, его поддержка крайне ограничена.

    4. Есть стандартный (RFC 3798) заголовок Disposition-Notification-To упомянутый выше, это не уведомление о доставке, а уведомление о прочтении. Запрос на это уведомление как правило показывается пользователю и требует его подтверждения. Не надо использовать этот заголовок, если вы не хотите, чтобы вас прокляли.

    5. Пиксель в письме - не поможет проверить доставляемость, но в некоторых случаях позволить узнать что письмо было прочитано.

    6. (привет модератору). Таки есть службы типа postmaster.mail.ru и postmaster.yandex.ru, которые позволяют отслеживать доставляемость писем получателям данных сервисов, а это порядка 70-80% всех получателей. В данных службах можно смотреть статистику по доставляемости писем, попаданию в папку спам, действия с письмами (чтение, помечания спамом, удаления с прочтением/без прочтения). Причем можно задавать категории писем через специальный заголовок или селекторы DKIM и получать статистику раздельно по категориям писем. Это позволяет получить информацию даже по отдельному письму, задав ему отдельную категорию. Но делать так массово не стоит.
    Это основной источник данных по попаданию в спам / удалению без прочтений, etc.

    Немного не в тему, но может помочь:

    7. Можно (и нужно, если вы организуете массовые рассылки) завести ящики-ловушки на разных сервисах, добавлять их в рассылки и отслеживать доставляемость писем до этих ящиков, в частности попало ли письмо в inbox.

    8. Почти все крупные сервисы поддерживают FBL. Вы можете в реальном времени узнавать, если на вашу рассылку идут жалобы пользователей.
    Ответ написан
    2 комментария
  • Как провести нагрузочное тестирование сайта на Yii2?

    @fluid
    Лучше запустить проект, если не запущен, собрать access log и на основе его оптимизировать(смотреть какие запросы на этих урлах выполняются и что можно оптимизировать). А то обычно все сразу хватаются оптимизировать запросы > 1c, хотя они выполняются 1н раз в сутки, а запросы 0.2с, которые запускаются очень часто не трогают:). Как вариант запустить логирование всех запросов, потом объеденить одинаковые и выставить приоритеты, по частоте.

    Нагрузочные тесты - пыль в глаза заказчиков, если они построены не на основе активности пользователей.
    Ответ написан
    Комментировать
  • Как эффективнее всего изучать yii2?

    @vkdv
    Прости что лезу не в свое дело, но мое мнение, что yii2 лучше вообще не изучать. Изучай Laravel/Symphony etc

    Приведу несколько аргументов (в сравнении с laravel):

    1) Yii2 довольно слабо следует принципам SOLID и более того, не предоставляет в достаточной мере архитектурного решения разработчику, чтобы он сам им следовал
    2) Yii2 Костылен, а его исходники мягко говоря не очень. Например behaviors (костыль) против middlware(прозрачное решение)
    3) Yii2 Имеет устаревшие сервисы из коробки относительно Laravel , который развивается куда более активно.
    Помимо прочего в Laravel намного больше готовых сервисов (Elixir , scheduling, Queue , Blade, Storage, Broadcast , Notifications) Вместо этого в yii2 есть только bower assets - который представляет с собой дикий костыль и откровенно ужасен, да еще и не безопасен, а также вроде в yii2 есть сервис для работы с файловой системой, но я с ним не работал. Остальные сервисы типа bootstrap , console etc есть и там и там
    4) Магия Yii2 не способствует контролю за кодом и прозрачности
    5) Yii2 имеет довольно плохо продуманную архитектуру, о чем говорит например тот факт, что jquery вшит в ядро фреймворка (возможно и некоторые другие ассеты) и это очень странно. Особенно когда тебе нужно запускать консольные приложения
    6) ActiveRecord в yii2 доволбно запутан, по сравнению с https://laravel.com/docs/5.3/queries (кончено это субъективно)
    7) Yii2 не особо популярен в мире, у него плохая документация и я думаю он серьезно отстоет от конкурентов.

    Есть конечно у него и плюсы, например он быстрее laravel и у него есть поддержка модулей(что решается в laravel подключением пакета)
    Ответ написан
    9 комментариев
  • Как реализовать поиск похожих фото на сервере?

    @SharuPoNemnogu
    не язык плохой, программисты такие...
    вот из этой статьи писал класс на основе дискретных косинусных преобразований, который высчитывал хэш, его хранил в базе и высчитывал расстояние Хемминга, на основе которого определялась степень похожести. Алгоритм не быстрый правда, зато изменение цвета, ресайз и небольшой наклон в принципе не помеха. Для пыха вроде есть расширение pHash
    Ответ написан
    Комментировать
  • Почему фрилансеры готовы общаться только в чате?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ответ прост: перепродажа услуг ничего непонимающим человеком в 99.99% случаев: режим "роутера" => ведение двусторонней переписки в двух чат-окнах.

    Задать протокол ведения диалога - можно всегда после первого созвона и вступительной беседы, чтобы понимать квалификационный уровень исполнителя.

    Если человек не хочет общаться голосом - он не компетентен в данном вопросе и просто этого избегает. (другие, еще хуже: только по почте общаются)

    Итог: отказались поговорить и ответить на Ваши вопросы голосом - сразу же ищите следующего исполнителя. (или ориентируйтесь на скорость ответа в чате + время суток, что не советую)
    Ответ написан
    6 комментариев
  • Почему фрилансеры готовы общаться только в чате?

    sadisme
    @sadisme
    font-size:30rem
    Всё просто. В 99% ситуаций общения голосом, желают типичные "гуманитарии", которые от темы разработки бесконечно далеко. Ты им говоришь "напишите ТЗ", а они в ответ "давайте я лучше вам всё по телефону расскажу". Они думают если не разбираются в вопросе и не могут ТЗ написать, то уж голосом точно всё объяснят как надо. И не дай бог вам согласиться (а просят как правило настойчиво, ибо самим лень разбираться в вопросе и что-то писать), вынесут вам мозг по полной.
    Ответ написан
    6 комментариев
  • Как защищать авторские права на код?

    2ord
    @2ord
    Как минимум, необходимо хранить историю изменений кода в системе контроля версий (СКВ, англ. VCS) с указанием имени пользователя и эл. почты. Желательно также с цифровой подписью GPG.
    Держать хранилище СКВ можно как доступным публично, так и закрытым от публики.

    Я полагаю, что для доказательства прав на код необходимо доказывать что:
    1. код написан вами, а не другим
    2. код написан ранее других
    3. код написан в нерабочее время, чтобы работодатель не мог предъявить на него свои права
    Нужно понимать, что данный ответ не заменяет юридическую консультацию.
    Ответ написан
    7 комментариев
  • Как защищать авторские права на код?

    @lubezniy
    Как вариант - распечатать исходники или готовый код, вложить в конверт, запечатать оный и отправить себе же заказным письмом, чтобы почта на конверте проставила штемпель с датой. Конверт потом при необходимости предъявить в суде невскрытым. По идее, должно сойти за доказательство первенства, если право попытаются оспорить.
    Ответ написан
    3 комментария
  • Как отследить ajax запрос, который отсылается сторонним скриптом?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Можно с помощью метода $.ajaxSetup(). Только учитывайте, что настройки определенные в нём, будут применяться ко всем ajax-запросам.
    $.ajaxSetup({
        beforeSend: function(jqXHR, settings) {
            console.log(settings.data);
        }
    });

    Если нужно вывести данные только конкретного запроса, то можно ориентироваться на его url:
    $.ajaxSetup({
        beforeSend: function(jqXHR, settings) {
            if ('http://site.com'.indexOf(settings.url) !== -1) {
                console.log(settings.data);
            }
        }
    });

    Примерчик
    Ответ написан
    Комментировать
  • Как правильно хранить ИНН в бд MySQL?

    возможно с ведущим нулём

    Но это всё равно строка

    вы сами ответили на свой вопрос.

    char(12) charset latin1

    Да, это хороший совет. Абсолютно бессмысленно и глупо использовать varchar для строк постоянной длины.

    а искать по строкам я не люблю

    А если перейти от личных предпочтений к реальным измерениям - действительно ли будут проблемы?
    Ответ написан
  • Почему MySQL сам редактирует данные?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вариантов несколько:
    1. MySQL сам редактирует данные. Ваша БД была выбрана для проведения секретного правительственного эксперимента в области искусственного интеллекта и возможности его применения в качестве оружия массового поражения (не щадит ни одного пользователя, а ведь среди них, наверняка, есть женщины и дети!).
    2. Вашу БД кто-то взломал и балуется.
    3. В вашем коде есть ошибка, из-за которой при изменении значения этого поля для одного или нескольких пользователей используется некорректное условие фильтрации и обновляются все пользователи.

    На всякий случай уточню, что возможные причины перечислены в порядке возрастания вероятности того, что дело обстоит именно так.
    Ответ написан
    5 комментариев
  • Как сохранить бихевером после кропа?

    kimono
    @kimono
    Web developer
    Отнаследуйтесь от него и дополните/измените методы при сохранении изображений.
    В частности:
    /**
         * After file save event handler.
         */
        public function afterFileSave()
        {
            if ($this->createThumbsOnSave == true)
                $this->createThumbs();
        }

    И конкретно:
    /**
         * After file save event handler.
         */
        public function createThumbs()
        {
          //...
        }
    Ответ написан
    3 комментария