• Почему говорят что jquery не нужен?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    jQuery был хорош, но ничто не стоит на месте. Раньше фронтенд никто особо не воспринимал всерьез. Все считали, что фронтенд - это несколько скриптов, которые принципиально погоды не делают. Все изменилось с ростом популярность SPA, в т.ч. и благодаря бурному развитию JS.

    В любом приложении очень важно прозрачно и понятно управлять состоянием, очень желательно делать это централизованно. Былой подход с участием jQuery делает это невозможным. Кто угодно может менять что угодно на странице, когда угодно, и приложение об этом ничего не знает без очень хитровыдуманных методов. Например в первом ангуляре для этого постоянно бегал по элементам и проверял что там изменилось, это называется "грязные проверки" (dirty checking). Мягко говоря это ни разу не оптимальный способ контроля состояния, но, на тот момент, вариантов особо не было.

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

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

    Но что-то чуть более сложное уже требует совершенно иного подхода.
    Ответ написан
    Комментировать
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    @xfg
    Любой фреймворк с инверсией зависимостей подойдет. На Symfony и Yii2 точно можно сделать. На русскоязычном форуме Yii по теме DDD очень много обсуждений. Но если не увидели единого согласия по DDD, то скорее всего не читали книгу Эванса или Вернона. Если так, то лучше начать с кого-нибудь из них.

    Многоуровневая архитектура рассказывает нам о слоях presentation, application, domain и infrastructure. С однонаправленным потоком данных. Нижестоящий слой, никогда не должен вызывать вышестоящий. Это значит, что к примеру можно выбросить presentation слой и не придется ничего изменять в оставшихся 3.

    Фактически выходит, что в любой момент можно выбросить фреймворк и заменить другим, так как это presentation layer в многоуровневой архитектуре. Можно даже сначала написать application/domain, проверить их юнит-тестами, а только потом уже задуматься о фреймворке. Application/domain слои никогда ни при каких обстоятельствах не должны вызывать методы фреймворка. Контроллеры фреймворка работают с доменной моделью, через вызовы методов application layer.

    Соответственно, при миграции на другой фреймворк, всё что потребуется, это переписать контроллеры (методы очень простые 1-5 строк) и реализации классов в infrastructure layer если вы завязывали их на фреймворк. Хотя лично я бы, не советовал этого делать. Лучше найти/написать отдельные библиотеки/компоненты под инфраструктурный слой, тем самым облегчив себе жизнь в будущем, когда фреймворк умрет или при очередном релизе мажорной версии.

    Symfony под DDD наилучший выбор, он компонентный, можно подтянуть только то, что нужно. С другой стороны Yii2, он монолитный и вы затяните Active Record и кучу всего еще, чем не будете пользоваться, но джуниор придет и обязательно понавызывает AR или чего-нибудь еще в application/domain слоях, чего вы явно не ожидаете. Поэтому в случае с Yii2 нужен будет тотальный контроль. :)

    Про Laravel не пишу ничего, так как не работал с ним. Но судя по беглому просмотру документации, никаких проблем сделать на нем DDD также нет.
    Ответ написан
    4 комментария
  • Книга о том как правильно должен работать программист?

    un1t
    @un1t
    Чед Фаулер "Программист фанатик"
    Джоэл Спольски "Джоэл о программировании"
    Роберт Мартин "Идеальный программист"
    Том ДеМарко, "Вальсируя с Медведями: управление рисками в проектах по разработке программного обеспечения"
    Том ДеМарко "Человеческий фактор. Успешные проекты и команды"
    Роберт Гласс "Факты и заблуждения профессионального программирования"
    Игорь Савчук "Отъявленный программист. Лайфхакинг из первых рук"
    Питер Сейбел "Кодеры за работой. Размышления о ремесле программиста"
    Хант Эндрю, Томас Дэвид "Программист прагматик"
    Ответ написан
    1 комментарий
  • Ведете ли вы документацию для проектируемого сайта или приложения?

    Делаем с помощью notion.so - храним там базовую документацию, глоссарий понятий, очень краткие описания административных процедур, объяснения почему и как работают некоторые вещи, и конечно - документы на отдельные задачи (если задача крупная и писать полное описание в баг-трекере неудобно). Важно, что с этими документами работает сторона клиента, то есть они сами пишут задачи, вставляют туда скриншоты, etc. После чего написанное ими можно доработать, добавить разъяснения для разработчика - и в процесс.

    Но вопрос документации в коде, о котором тут писали, меня сильно беспокоит; нам надо озаботиться этим. Именно для того, чтобы разработчики, особенно новые, видели в более понятном виде общую картину. Конечно, есть какая-то навигация в IDE, но всё равно это не вполне то.

    Всю документацию держать в коде нельзя, по моему мнению, поскольку мы хотим привлечь клиента к работе над ней. Но и для разработчика отдельно писать код и отдельно доки - тоже проблема, лишние затраты времени и переключение контекста. Делать это никто не любит. Поэтому и думаю, что нужно иметь два комплекта документации - сугубо для разработки, автогенерированная из кода, и в базе знаний, ориентированная на клиента. Notion мне в этом смысле нравится неимоверно, ничего подобного в других местах я не видел. Хотя нет предела совершенству и хочется ещё большего :)

    P. S. Евгений: по поводу literary programming... я пробовал нечто подобное делать в студенческом хобби-проекте, баловался. Но не очень получилось, поскольку линейная последовательность документа вступает в конфликт со структурой программы, имеющей вид графа.

    Однако, мне доставляло изрядное удовольствие, что в результате получается не только код на Python, но и неимоверно красивый PDF, сделанный LaTeX, с картинками и формулами. А если исхитриться - можно ведь и прямо из кода всякие картинки генерировать, схемы БД например; красиво ведь будет. Надо как-нибудь вернуться к этой теме, очень уж она интересна.
    Ответ написан
    2 комментария
  • Что такое Redux простыми словами?

    copist
    @copist
    Empower people to give
    jQuery - это принцип событий и модификации DOM, а сохранение состояний - дело второстепенное
    Типичный механизм: что-то произошло (клик/скрол) -> что-то изменить в DOM, возможно что-то запомнить в JS

    React - это принцип состояний, а изменение DOM или события - дело второстепенное
    Возможно произошло событие -> обновить специальный объект (его называют модель)
    Что-то изменилось в модели -> возможно обновить DOM, если модель как-то связана с HTML
    Ответ написан
    Комментировать
  • В чем суть интерфейсов в программировании?

    @ZzZero
    Я делаю систему контроля яркости.
    Я хочу настраивать яркость всего (гирлянды, люстры, фонарика, экрана телефона).
    В коде выглядит примерно так
    class BrightControl
       public void setDefaultBright(Object obj){
             obj.setBright(10);
       }
    }

    Метод setDefaultBright принимает любой объект. Ведь мне всё равно яркость чего настраивать.
    Мой код используют другие разработчики, я не могу контролировать их.
    Как мне убедиться, что у объекта, который мне пришел в качестве аргумента, есть метод setBright?
    Я пишу интерфейс, и говорю, что метод setDefaultBright принимает только объекты, которые реализуют этот интерфейс.

    Если кроме меня самого никто не будет использовать эту систему контроля яркости. То я просто буду держать у себя в голове, что в метод setDefaultBright можно отправлять только объекты, у которых есть метод setBright, но поддержка кода усложняется, через год и не вспомнишь...
    Ответ написан
    3 комментария
  • Как поставить неубиваемую вечную куку (cookie)?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    https://github.com/samyk/evercookie/
    только переименуйте скрипты и swf, иначе adblock не даст отработать.
    Также рекомендую отключить в настройках silverlight, java и CSS History Knocking
    Ответ написан
    Комментировать
  • Как сделать пишущийся текст?

    DevMan
    @DevMan
    Ответ написан
    Комментировать
  • Где найти самое простое объяснение Dependency Injection паттерна?

    iximiuz
    @iximiuz
    Мартин Фаулер круто пишет обо всех паттернах. Про DI можно почитать тут. Вообще у него отличный блог. И он же автор книги P of EAA. Правда русский ее перевод крайне не рекомендую читать, можно только запутаться, так что читайте в оригинале.

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

    Применительно к PHP - вот лучшая книга про шаблоны (и не только), которую я видел PHP. Объекты, шаблоны и методики программирования от Мэт Зандстра.

    Порядок прочтения рекомендую следующий: Фриман&Фриман, затем Мэт Зандстра, и на десерт Фаулера P of EAA.

    UPD:
    Важно отличать паттерн Dependency Injection от Dependency Injection Container.
    Простейший пример внедрения зависимости:
    interface IEngine {}
     
    class V8Engine implements IEngine {}
     
    class Car {
      public function __constructor(IEngine $engine) {
        $this->engine = $engine;
      }
    }
     
    $car = new Car(new V8Engine());

    Простейший пример игнорирования явного внедрения (для такого кода трудно писать unit-тесты, его труднее понимать и править):
    class V8Engine {}
    
    class Car {
      public function __constructor() {
        $this->engine = new V8Engine();
      }
    }
    
    $car = new Car();

    Отличный (и легковесный) пример DIC - это pimple:
    // define some services
    $container['session_storage'] = function ($c) {
        return new SessionStorage('SESSION_ID');
    };
    
    $container['session'] = function ($c) {
        return new Session($c['session_storage']);
    };

    Советую прочитать и понять его исходники, чтобы убедиться, что в DIC (во всяком случае для PHP) нет никакой магии. Первая версия была всего ~100 строк. Необходимо также отметить, что класс Session использует шаблон Dependency Injection, явно определяя свою зависимость от SessionStorage. А контейнер делает лишь правильную связку.

    И да, контейнер сам по себе можно использовать как service locator, если к нему, например, есть глобальный доступ. Но это очень плохая практика, потому что если что-то обращается к сервис локатору, то формально оно начинает зависеть сразу от всех компонентов системы.
    Ответ написан
    4 комментария
  • Как устроена система инвестиций?

    karaboz
    @karaboz
    Директор продуктов в Хабре.
    Чтобы понять, как строится бизнес и что такое инвестиции, рекомендую ознакомиться с концепцией бизнес-модели. Первое, о чем спрашивают инвесторы и чем в основном интересуются — это как раз то, как устроен бизнес: какую пользу приносит людям, на каком рынке работает, каковы издержки бизнеса, каковы источники прибыли, какова текущая динамика. На основе этих данных инвестор принимает решение о вхождении в бизнес.

    Надо отметить, что большинство инвестров — особенно на западе — это «спекулянты». Вкладываясь в проект, они не ждут от него непосредственых доходов, а стараются вывести его на некоторый новый уровень (скорее по объему операций, нежели по прибыли) и перепродать свою долю уже за большие деньги. Т.е. для инвестора всегда важна текущая динамика, а не конечный результат. Перепродается именно эта динамика, а не готовый бизнес. Самые важные показатели, по которым инвестор меряет динамику в интернет-проектах: рост аудитории и рост денежных поступлений от клиентов. Часто важным оказывается только рост аудитории и понимание того, откуда в дальнейшем пойдут деньги.

    Когда мы видим, что тот или иной проект привлек очередные инвестиции, это как раз и означает, что старые инвесторы перепродали свои доли новым. При этом проект чаще всего остается неприбыльным.
    Ответ написан
    2 комментария
  • Что спрашивают на позицию middle/senior php?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    Спрашивали на senior (всё, что удалось вспомнить):
    можно ли взломать ssl
    для чего нужны интерфейсы и абстрактные классы
    чем отличается сервисно-ориентированная разработка от доменно-ориентированной
    как сделать так, чтобы никто не смог угнать куки через джаваскрипт, как сделать чтобы нельзя было перехватить куки
    кроссдоменные запросы
    как добавить поле в высоконагруженную базу в таблицу на продакшене где 100 миллионов записей, без отказа бля базы
    что такое партиционирование, шардинг, репликация
    как работает http
    что такое rest и soap
    что такое репликация и как передаются данные при репликации между серверами, виды репликаций
    триггеры, процедуры в базе
    про способы кеширования веб приложений
    джоины в базе
    просили написать функцию нахождения ближайшего числа в массиве, для заданного числа
    что такое рефакторинг
    DIC, ServiceLocator
    Какие паттерны знаешь и т.д.
    Ответ написан
    29 комментариев