• Как с помощью underscore разделить массив по 10 элементов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    не совсем при помощи lodash... но

    function chunk(arr, n) {
        var chunks = [];
        while(arr.length > n) {
           chunks.push(arr.slice(0, n));
           arr = arr.slice(n, arr.length);
        }
        chunks.push(arr);
    
        return chunks;    
    }
    Ответ написан
    Комментировать
  • Что за магия в symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что-то как-то теряется смысл контроллера, как посредника между моделью и видом.


    1) Symfony - не MVC фреймворк, это request/response фреймворк. Более правильная терминология для HTTP фреймворка.

    2) Контроллеры - это не один класс, это в данном случае весь слой от точки входа, фронт контроллера, до непосредственно экшена контроллера. View в этом случае - это HTTP, пассивная вьюшка и только. Сама по себе она ничего не умеет, это тупо представление данных собранное контроллером.

    У этого подхода есть название - Model-View-Adapter или Mediating-controller MVC, но все это лишь бесполезные детали.

    3) ParamConverter-ы здорово уменьшают дублирование кода в контроллерах, однако работа с сущностями в контроллерах дело довольно опасное. Это своего рода компромис между "правильной архитектурой" и "стоимостью разработки.
    Ответ написан
    Комментировать
  • Какой смысл от синглтона, когда есть статика?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ведь в любом случае мы получаем глобальное состояние


    А глобальное состояние что? Правильно, плохо. У меня тут недалеко есть один небольшой проектик под iOS где ребята решили повесилиться, и сделали сингелтон с сотней публичных свойств. И вся система работает с этим глобальным состоянием плодя побочные эффекты. Инкапсуляция? не, не слышали.

    Какой смысл использовать именно singleton?


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

    В PHP, где не не особо популярна идея многопоточного программирования, и процветает "умирающая" модель выполнения, в сингелтонах вообще нет смысла. И используют их потому что... внимание... хотят иметь глобальный доступ к различной фигне, в том числе организация глобального состояния.
    Ответ написан
    6 комментариев
  • Паттерн Repository и Active Record?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что такое репозиторий? Это что-то что отвечает за хранение данных. Целиком и полностью. То есть вот простенький интерфейс простенького репозитория:

    interface UserRepository {
        public User getUser(UserID id);
        public void add(User user);
        public void remove(User user);
    }


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

    Репозиторий который умеет только выборки делать - это не репозиторий. Это штука для выборок, Finder. Так же мы должны тут заметить, что "строками таблиц" является объект типа User, а репозиторий представляет собой абстракцию от таблицы (очень упрощенно. есть еще паттерн table data gateway который отвечает именно за одну таблицу, репозиторий же может хэндлить и связи между таблицами и вообще оперирует именно объектами предметной области а не их отображением на базу).

    Active Record же делает именно то, что говорит название. Это объект, который представляет собой одну строку из таблицы. Он сам может себя вставить, обновить или удалить из таблицы. Однако "найти себя" он не может к примеру, за это отвечает какой-то другой объект (мне нравится название Finder, поскольку это именно то что делает объект - ищет наши строки таблиц). Частенько для упрощения методы файдеров делаются как статические методы.

    По сути ActiveRecord есть ничто иное как упрощенная комбинация из Domain Object + Row Data Gateway.
    Ответ написан
    Комментировать
  • Как написать собственный протокол беспроводной связи?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    итак, давайте все же определимся что вы хотите сделать.

    Как написать собственный протокол беспроводной связи?


    Беспроводной протокол это как раз таки WiFi (стандарты ieee 802.11) и BlueTooth. Эти протоколы описывают протоколы на физическом уровне модели OSI. То есть "протокол беспроводной связи" это мега сложно и вы хотите сделать не это.

    Требуется элементарно передать данные от устройства А к устройству Б через Wi-Fi, или хотябы BlueTooth.


    Для этого вы должны наладить канал данных между двумя устройствами. Для wifi это означает объеденить их в одну сеть или подключить друг к другу через wifi-direct. Для bluetooth - сопряжение устройств.

    При подключении обоих устройств в одну сеть (через wifi, ethernet или как-то еще - это не важно) - всем самым сложным будет заниматься операционная система. Вам же на выборк 2 транспортных протокола, TCP и UDP, юзай не хочу. Или любой готовый протокол для передачи данных поверх TCP/UDP.

    В случае с wifi direct или bluetooth есть примеры на гитхабе как организовать общение устройств меджу собой.

    Вопрос не совсем по теме: можно ли для этого использовать ssh подключение между устройствами?


    SSH это протокол прикладного уровня, который работает поверх TCP. Так что в случае с подключением в одну сеть - да. Есть еще netcat, который чуть по проще если нужно простые данные отправлять.
    Ответ написан
    1 комментарий
  • Как включить пробуждение по USB для беспроводной мыши?

    Frankenstine
    @Frankenstine
    Сисадмин
    Помимо настройки в БИОСе, нужно ещё перемычкой разрешить питание на PS/2 и USB в выключенном состоянии на материнке. Примерно так:
    kb.stonegroup.co.uk/index.php?View=entry&EntryID=259
    msi_h81m_usbpwr1.PNG
    Ответ написан
    Комментировать
  • В чем моя причина провала тестового задания Яндекса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну давайте я покритикую:

    возьмем файлик

    1) вы не разобрались как объявлять методы у прототипов с новой нотацией `class`:

    class Travelsort {
        constructor() {}
        sortTickets(tickets) {}
    }


    2) вы не умеете пользоваться исключениями.
    if (!Array.isArray(cards)) {
        throw new ValueError('Wrong input');
    }


    3) использование let там где должен использоваться const

    4) в принципе использование переменных там где их быть не должно

    5) вы зачем-то реализовали свою функцию сортировки, я не увидел в требованиях отсутствия возможности использовать старый добрый Array.prototype.sort

    6) Общие замечания по кодинг стайлу. snake_case там где должен быть camelCase, пишите с большой буквы то что должно быть с маленькой и т.д.

    7) нарушения принципа единой ответственности. У вас объеткт умеет и сортировать и писать куда-то. Это категорически плохо.

    8) Если исправить 7-ой пункт то наш класс превращается просто в функцию.

    Далее... берем следующий файлик

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

    2) вы зачем-то тут в прототип объекта строки впихиваете функции для парсинга CSS. Таким образом мы нарушаем принцип единой ответственности. Да и в целом расширять без надобности прототипы объектов как-то не ок.

    Чуть дальше проскролил - вы пытаетесь расширить прототип строк для того что бы добиться API jquery? ух, батенька.

    3) очень много дублирования.

    4) очень плохо с protected variations.

    Справедливости ради, ваш код входит в категорию ">50% JS кода", так что не расстраивайтесь. Просто для работы в яндексе нужен чуть более высокий уровень и понимание вещей.
    Ответ написан
    17 комментариев
  • Что за шаблон Декоратор, и зачем он нужен?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    То что вы реализовали - не декоратор. Декоратор это интерфейсы а не абстрактные классы.

    суть шаблона Декоратор


    Декоратор, это такой шаблон, при котором мы "расширяем" поведение объекта без изменения оного. При этом важная состовляющая - интерфейс объекта не меняется.

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

    К примеру при использовании контейнера зависимостей, мы можем обернуть какой-то сервис в декоратор временно, и в декораторе логировать аргументы и результат выполнения методов. Скажем это нужно только для быстрого дебага. Делаем быстренько декоратор, подсовываем его вместо настоящей реализации (обычно это одна строчка в di-конфиге) и вуаля. Мы не вносили изменений в код а стало быть не могли ничего сломать случайно. История изменений будет выглядеть красиво. Да и тестировать такие вещи намного проще.
    Ответ написан
    Комментировать
  • Выбор hdd, raid0 из двух hdd(5400) vs один hdd(7200)?

    a13xsus
    @a13xsus
    Lazy developer
    RAID0 из 2х5400 удвоит производительность одного диска на 5400 rpm, но будет примерно на 50% быстрее по скорости передачи, чем 7200. Но при этом медленнее на 30% во времени доступа (это очень важно), и других ттх (например, чем выше количество пластин, тем ниже производительность). Их тоже нужно учитывать. Также нужно учитывать формфактор и размер кеша (Вы это не указали) -- 2,5" 5400 диски медленнее в скорости передачи данных, чем их 3,5" братья.

    К тому же один диск тише, чем два, да и потребляет меньше энергии. И к одному 7200 можно в дальнейшем купить второй. Я бы предпочел 7200.
    Ответ написан
    1 комментарий
  • Как использовать Docker для разработки?

    Preemiere
    @Preemiere
    Symfony developer
    О каких шорткатах речь?
    Для всех cli операций я запускаю контейнер в интерактивном режиме и делаю всё там.
    docker-compose run --rm -ti php-cli bash

    К вопросу о времени запуска контейнеров. Недавно установил SSD, оверхед при запуске контейнера пропал. Compose из nginx, php-fpm, mysql, redis, thumor стартует менее чем за 3 сек.

    А профит в разработке это идентичность версий сервисов с prod окружением. Один проект приходится разрабатывать под php 5.5, другой под 5.6, третий под 7. Под каждый проект у меня нужное окружение, хотя на хосте php вообще не установлен.
    Ответ написан
    Комментировать
  • Продуктивно ли состояние потока (flow, the zone)?

    riky
    @riky
    Laravel
    Вопрос наверное в первую очередь относится к тому какой продукт вы делаете, нужна ли в нем креативность.

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

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

    Если вы делаете очередной инет магазин, то творчества там минимум. Если придумываете новый, реалистичный алгоритм движения юнитов по игровой локации, то эта задача может быть творческой, а может быть типовой - зависит от того есть ли готовое решение.
    Ответ написан
    Комментировать
  • Продуктивно ли состояние потока (flow, the zone)?

    Nekto_Habr
    @Nekto_Habr
    Чат дизайнеров: https://t.me/figma_life
    Давайте у всех отнимем состояние вдохновения, пусть методично и планомерно клепают по шаблону коммерческие продукты научным методом - у музыкантов, дизайнеров, художников, программистов, актеров, ученых, да в общем всех, кто зарабатывает на жизнь своей головой.

    И не будем думать, как стимулировать это вдохновение, проще его отнять.
    Ответ написан
    2 комментария
  • Сколько должна занять учёба?

    riky
    @riky
    Laravel
    не смотри ни на кого, просто учись и делай.

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

    ps всегда сравнивай себя только с собой в прошлом.
    Ответ написан
    Комментировать
  • Зачем нужны абстрактные классы (PHP)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    типичный юзкейс для абстрактный классов - базовая реализация, уменьшение дублирования кода при появлении общего решения и т.д. Например у вас есть интерфейс с несколькими методами, и только 2-3 из них реализуются по разному. Выгодно вынести общую реализацию в базовый абстрактный класс.
    Ответ написан
    1 комментарий
  • Структура проекта Angualr?

    есть ли какие нибудь рекомендации ?

    Да есть.
    Ответ написан
    Комментировать
  • Как вы повышаете собственную продуктивность?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    ну тебе собственно везде одно и тоже посоветуют -> определиться с приоритетами, правило парето типа 20% труда дают 80% результата, выкини не приоритетные 80% труда, и потеряешь только 20% результата, зато сможешь сосредоточиться на более важных вещах.
    вобщем учись отбрасывать не нужное, концентрироваться на важных задачах, не отвлекаться на тостер или вконтактик, и будет тебе счастье.
    планирование обычно для этого и используют, чтоб наглядно расписать задачи, сколько на что уходит времени, чтоб увидеть от чего можно избавиться, а чему наоборот больше внимания уделить, ну и делегируй другим часть своих задач)
    Ответ написан
    Комментировать
  • Каковы стандарты кроссбраузерности на 2015 год?

    sim3x
    @sim3x
    У тебя есть сайт, к которому подключена гугланалитика
    На него заходят пользователи
    заходим на
    caniuse.com
    Settings->From Google Analytics: -> import

    теперь можно смотреть что могут, а что не могут твои пользователи

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) все просто, не используйте git для деплоя (git pull на сервере), для этого есть другие штуки, капистрано, капифони и т.д.

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

    2) можно в bitbucket поставить действия на push хуки, что бы например дергать вашу CI-ку, там прогонять тесты (вы же пишите тесты?) и деплоить. Тогда что бы выкатить версию надо будет всего-лишь сделать git push, а дальше магия. Ну и опять же если мы разделили репозитории на отдельыне ориджены, мы так же можем контролировать кто может деплоить а кто нет.
    Ответ написан
    3 комментария