• Сервис конвертации видео с API?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    заморачивать с FFMPEG тем более нужно организовывать очередь конвертации...

    Для видеохостинга это выйдет сильно дешевле. Но на первое время можно заюзано

    https://aws.amazon.com/elastictranscoder/
    Ответ написан
    1 комментарий
  • Почему clearfix называют хаком, костылем?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    clearfix это кастыль, так как float элементы изначально не предполагалось использовать для построения лэйаута страницы. Но что поделать, flexbox-ы только появились.

    Если вы когда-нибудь видели варианты обтекания картинок текстом в вордах всяких - то думаю вы сможете уловить суть этого css свойства.
    Ответ написан
    Комментировать
  • Как реализовать множество условий?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Итак... возьмем ваш код

    if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
            if (
            $type != 'voice' and $type != 'balance1' and $type != 'balance2' and $type != 'absvoice' and $type != 'passhash' and
            $type != 'paytime' and $type != 'white1' and $type != 'exp1' and $type != 'white2' and $type != 'voice2' and
            $type != 'exp2') die("Wrong type");
            if ($action != 'set' and $action != 'get' and $action != 'add') die("Wrong action");
            if ($action == 'set' and !(preg_match("/^[0-9-.]+$/", $value)) and $type != 'passhash') die("Wrong value");
            if (($action == 'set' or $action == 'add') and ($type == 'paytime' OR $type == 'absvoice')) die("paytime/absvoice read only");
            if (($action == 'add') and ($type == 'passhash' or $type == 'white1' or $type == 'white2')) die("add not available for this");


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

    if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
    
    $availableTypes = ['voice', 'balance1', 'balance2', 'absvoice', 'passhash', 'paytime', 'white1', 'exp1', 'white2', 'voice2', 'exp2'];
    if (!in_array($type, $availableTypes)) {
        die("Wrong type");
    }
    
    if (!in_array($action, ['set', 'get', 'add'])) {
        die("Wrong action");
    }
    if ($action == 'set' and !(preg_match("/^[0-9-.]+$/", $value)) and $type != 'passhash') {
        die("Wrong value");
    }
    if (($action == 'set' or $action == 'add') and in_array($type, ['paytime', 'absvoice'])) {
        die("paytime/absvoice read only");
    }
    if (($action == 'add') and (in_array($type, ['passhash', 'white1', 'white2']))) {
        die("add not available for this");
    }


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

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

    updated: избавляемся от всех ифов (точнее заменяем на один)
    $constraints = [
        'unsupportedTypes' => !in_array($type, $availableTypes),
        'unsupportedAction' => !in_array($action, ['set', 'get', 'add']),
        'expectedNumericValue' => $action == 'set' && is_numeric($value),
        'readOnlyType' => 'get' !== $action && in_array($type, ['paytime', 'absvoice']),
        'disallowedTypes' => 'add' === $action && in_array($type, ['passhash', 'white1', 'white2']),
    ];
    
    $constraintsMessages = [
        'unsupportedTypes' => 'Type "<type>" is not supported',
        'unsupportedAction' => 'Action "<action>" is not supported',
        'expectedNumericValue' => 'Wrong value, expected numeric',
        'readOnlyType' => '<type> is read only',
        'disallowedTypes' => 'Type "<type>" is not supported for action "<action>"'
    ];
    
    $errors = array_keys(array_filter($constraints));
    if (!empty($errors)) {
    
        die(str_replace(
            ['<type>', '<action>'],
            [$type, $action],
            $constraintsMessages[reset($errors)]
        ));
    }


    это дело можно еще упростить и соорудить нормальные правила валидации + отдельную функцию которая будет проверять все это дело.
    Ответ написан
    2 комментария
  • Как отловить исключение в JS Promise без присваивания отдельной переменной?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нет возможности вернуть всю цепочку примисов

    Как так? Всегда возвращайте всю цепочку.
    Ответ написан
  • Разумно ли хранить токены в кэше?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Где лучше теперь хранить его на сервере?

    Лучше вообще не хранить его на сервере. Используйте JWT.
    Ответ написан
    Комментировать
  • Как управлять выводом в ng-repeat из другого ng-repeat?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как управлять выводом в ng-repeat из другого ng-repeat?


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

    Вы должны управлять данными, которые вы пихаете во viewmodel ($scope). И только так. То есть по изменению управлящего массива в js формируем новую табличку и ng-repeat просто эту табличку выводит. Все просто и понятно, легко дебажить, минимум кода.
    Ответ написан
    Комментировать
  • Как разобраться в исходном коде такого проекта как Mysql?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) разбираемся для чего каждый файл нужен, пытаемся прикинуть общую картину, из чего состоит проект (какие компоненты, модули и т.д.). В этом нам могут помочь многочисленные статьи и официальная документация. описывающая архитектуру проекта.

    2) далее углубляться нужно исключительно по каким-то причинам а не просто так. Скажем если вас интересуют какие-то конкретные вещи. Например... зачем вам изучать устройство MyISAM просто так если его уже мало кто использует?

    В целом же fshp правильно все сказал.
    Ответ написан
    Комментировать
  • Как правильно сделать/доработать router для MVC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Может все же написать статью "что такое MVC"... а то народ путается....

    Вот там в статье схемка допустим... занятная... две стрелочки между моделью и представлением - это одна стрелочка, вью просто забирает текущее состояние модели. И она строго в сторону view, описывает поток данных. (причем в канонической трактовке, для GUI а не для бэкэнда, это обзервабл связь, то есть view навешивает обработчики событий на модель и подстраивается под текущее состояние модели. Модель поменялось - view обновилось. Но на сервере такого быть обычно не может потому этот момент можно опустить).

    view в контексте сервера не должен дергать контроллер (да и вообще он о контроллере знать ничего не знает). Ну то есть это не тот ж view что у нас модельку дергает. Это какой-то другой view, или представление запроса, инпуты и кнопочки. http запрос.

    Только одна стрелочка правильная - что контроллер просит модель изменить состояние.

    Так, отвлекся я чойто...

    Возьмите любой готовый роутер, не пишите свой, это пустое.
    Ответ написан
    4 комментария
  • Нужен ли git веб-дизайнеру?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    как и любая система контроля версий, это дает контроль за процессом разработки.

    У вас когда-нибудь появлялась в папке проета подпапки вида version1, version2 ... version 23? Ну или может у вас есть команда дизайнеров и надо как-то синхронизировать работу?

    если да - то вам уже нужна система контроля версий.

    Ну и да, мне как разработчику это удобнее, так как всегда известно где посмотреть последнюю версию макетов.
    Ответ написан
    6 комментариев
  • Какие преимущества CISC архитектуры перед RISC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Где CISC лучше?

    Нигде. CISC старше, RISC новее. По сути RISC появился потому что увеличение количества инструкций уже сильно влияло на производительность процессоров с CISC архитектурой. Да и появление языков с трансляцией в ассемблер дало определенный толчек.
    Ответ написан
    Комментировать
  • Спасет ли меня многопоточность?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    много потоков это хорошо, но с ростом количества потоков производительность будет падать ну то есть 8 потоков будут работать не в два раза быстрее чем 4.

    У вас по сути большая часть времени - это работа с сетью, что медленно. Выход - event loop. В рамках одного потока запускаем много много неблокируемых запроса, и по мере завершения запросов обрабатываем результат.

    Комбинация нескольких потоков (по количеству ядер процессора) и event loop даст максимальную утилизацию процессора.
    Ответ написан
    5 комментариев
  • Symfony2 права доступа к функционалу сайта. Какие механизмы использовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну вот там где выводите и решайте. И где проверяете... Где удобно там и можно. В симфони есть встроенные проверки аля isGranted
    Ответ написан
    Комментировать
  • Вопрос по кукам и сессиям в php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Чем куки отличаются от сессии в PHP?

    в дополнение:
    - сессии просто можно хранить в базе и тогда хэндлинг сессий это ваша забота. Это удобно когда у нас несколько серверов и балансировщик раскидывает нас на разные сервера, тогда у нас есть единый центр сессий например. Для этих же целей можно использовать memcache или redis.
    - сессии не обязательно умирают после закрытия браузера
    Ответ написан
    4 комментария
  • Как использовать namespace внутри метода?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    protected function _methodName()
    {
        $connection = new \Abraham\TwitterOAuth\TwitterOAuth\TwitterOAuth(
             CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET
         );
    }


    ну и да, избавляемся от этого инклуда и выносим это в наш базовый автозагрузчик.
    Ответ написан
    Комментировать
  • Функция в математике?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    y = x - вот вам функция зависящая от x

    y = t - вот вам функция зависящая от t (времени)

    y = sin(t) - вот вам синусоидальная функция зависащая от времени... ну вы поняли

    Суть в том что результат работы функции зависит от аргументов.
    Ответ написан
    3 комментария
  • Как оптимизировать ionic приложение (android)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если у вас android 4.4+ то подключаем к компу по USB, открываем ремоут дебагер хрома, подключаемся к приложению и профайлим.

    Универсального решения нет, и да, вам с ionic надо было бы еще разобраться + разобраться с angular.
    Ответ написан
  • Как писать кошерные юнит тесты в symfony2 когда вся логика в контроллерах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    юнит тесты - это тесты которые тестируют юниты (то есть подразумевается хоть какая-то степень изоляции, от полной (когда все замокано) до не очень полной (если мокать все не сильно удобно)).

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

    По вашим пунктам - делайте так, как вам удобно. Ну то есть суть всего сводится к тому что бы с кодом вашего приложения было удобно работать. Тесты это способ упрощения внесения изменений в код. Если вам из-за тестов не удобно - надо придумать как сделать так что бы было удобно (либо у вас что-то не так с тестами либо с кодом, раз его не удобно тестить).
    Ответ написан
    2 комментария
  • AWS S3. Лёгкий развод(Возможный перерасход по деньгам)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    о да, они так сильно хотят вас облапошить... вот кто-нибудь со стороны кто найдет вашу ссылку с s3 может конечно сделать гадость и в циклике wget-ом потягать ваш траффик.

    Просто уточню, на AWS какое-то время располагался инстаграм. Вы для них никто и лишние 100 баксов им... ну вы поняли.

    В целом почему бы не воспользоваться каким-нибудь google drive?
    Ответ написан
    7 комментариев
  • Macbook Pro 13 Mid 2012 тормозит или нет?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) ставим SSD
    2) ставим 8 гиг оперативы
    Ответ написан
    4 комментария