• Почему Gulp медленно работает?

    voidnugget
    @voidnugget
    Программист-прагматик
    Ну во первых - нужно возвращать promise с функции что бы корректно отображалось время выполнения и задачи могли быть нормально синхронизированы.
    gulp.task('stuff', function() {
      return gulp.src([]).pipe(gulp.dest('whatever'));
    });

    Во вторых gulp.run() устарел, корректнее запускать задачи через watch:
    gulp.task('watch', function() {
      gulp.watch('*.stuff', ['aJob']);
    });

    А в третих - это не Gulp медленный, а компас каждый раз с нуля рестартует.
    Лучше отдельно оформить задачу с compass watch'ем - там в конфиге gulp-compass'a есть отдельно опция task.

    А я слез на stylus - там нет таких проблем.
    Сейчас подумываю об uncss.

    Обязательно нужно почитать про синхронизацию в gulp'e - мало кто понимает как её правильно выполнять.

    Для референса можно взять мой старый gulp-seed, правда я его давно не обновлял.
    Ответ написан
    Комментировать
  • Как найти команду для реализации стартапа?

    voidnugget
    @voidnugget
    Программист-прагматик
    Проблема с фрилансом №1 - у людей слишком узкая специализация, кроме того что программировать люди ещё должны как-то вникать в воронку продаж, дифференциацию рынка сбыта, понимать как масштабировать продукты, мотивировать людей, масштабировать решение, знать об распространённых организационных антипаттернах и разрешать различные когнитивные искажения и компенсаторный процессы при выработке требований и непосредственной реализации продукта. Хоть инвестиции это и "План Я", но привлекать их в подобных условиях довольно просто.

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

    Проще всего мотивировать людей посредством их же самореализации.
    Сейчас существуют очень много проблем в разработке и нет нормальных инструментов которые соответствовали текущим требованиям рынка. Но для большинства "простых смертных" и "фанатиков" эта точка зрения просто недоступна. Можно спокойно оформить пару OpenSource проектов, собрать сообщество, и на основе этого же сообщества развивать собственные продукты. Таким образом отсеивается 98% дилетантов и можно дать гарантии создания действительно инновационного и конкурентоспособного продукта.

    Пишите в скайп - может чего интересного подскажу.
    Сотрудничал с довольно успешными стартапами (Uber), но большая часть проектов были заведомо провальны ещё на этапе выработки требований, знаю очень много примеров "как не нужно делать".
    Ответ написан
    Комментировать
  • Хотим на сайте перейти на webp, стоит ли?

    voidnugget
    @voidnugget
    Программист-прагматик
    Стоит.
    Ничего не мешает откатится на jpeg / png по потребности.
    Ответ написан
    2 комментария
  • Как из Team Lead вырасти до CTO?

    voidnugget
    @voidnugget
    Программист-прагматик
    Нужно
    1. Хорошо понимать как масштабировать приложения, как вертикально так и горизонтально. Как на запись так и на чтение. Внедрять различные наукоемкие вещи по потребности.
    2. Понимать недостатки всех существующих решений и как их можно разрешить. Как правило 80% всего-всего - банальный CRUD, и в большинстве случаев это тонны копи-постного кода аля "одна табличка - один контроллер" без 3-4 нормальной формы модели БД. Со стороны браузеров тоже очень много нюансов. Нужно понимать все эти проблемы, некоторые из них пытаться решить - привлекать людей и создавать новые проекты и сообщества.
    3. Поддерживать реюзабельность, относительно простую поддержку и внедрение всех компонентов системы, внедрять SOA с хорошим покрытием тестами, не пренебрегая профилированием, фаззингом и нагрузочными тестами. Профилировать всё и вся нужно уже с самого начала работ.
    4. Правильно расставлять приоритеты и производить детальную выработку всех требований. Очень много времени в пустую тратится из-за неправильно сформулированных требований и плохо подобранные инструменты.
    5. Понимать как мотивировать существующий персонал, пытаться понять что побуждает людей к работе и какие у них внутренние цели, как правило деньги людей не мотивируют. Относится ко всем как к "ослам и морковке" очень глупо.
    6. Понимать возможные когнитивные искажения и психологические компенсаторные процессы у существующего руководства и коллектива, быть ключевым звеном на пути к их разрешению.
    7. Правильно делегировать свои собственные полномочия - иногда на всё это вас не хватит, нужно давать возможность другим решать все вышеописанные вопросы и проявлять инициативу.
    8. Нанимать и работать с людьми которые заинтересованы в развитии и перспективах вашего продукта, а не просто "делать что скажут за деньги" - так вы не сможете построить действительно конкурентоспособный продукт.
    9. Вдохновение не вечно - люди не смогут постоянно делать одно и тоже, нужно понимать что программисту лучше чувствовать себя художником нежели мясником в цеху рыбообработки.
    10. Понимать что названия должности не должны решать как будет работать коллектив - люди должны быть взаимозаменяемы, и они должны уметь анализировать и предлагать варианты решения задач для других. Чем больше мнений - тем точнее сформулированы требования и подобраны инструменты. Зацикливаясь на специализации и должностях - ваш BusFactor всегда будет 1-2, и в сложную минуту это сыграет злую шутку с вами и вашим коллективом.

    Если у вас будет подобный опыт организации - для вас не важно будет название вашей должности, вы просто создадите контору в которой всем будет приятно работать. И если вам не отдадут CTO, или около того, я уж и не знаю что там за тараканы в головах CEO и стейкхолдеров.

    А вообще дело обстоит так что 80% проектов работают без вменяемого руководства и индивидуального подхода, не имеют жизнеспособной бизнес-модели и MVP, часто продают вакуум, плодят "грибных менеджеров" и "менеджеров-чаек".

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

    p.s. мне предлагали CTO, но на практике все обстоит так что организовывать всё-всё приходится с нуля без каких либо гарантий нормального сотрудничества.
    Ответ написан
    3 комментария
  • Какой язык учить первым С++ или Java?

    voidnugget
    @voidnugget
    Программист-прагматик
    С++ на много сложнее.
    А что подразумевается под "базовыми знаниями синтаксиса", что не понятно ?
    Ответ написан
    Комментировать
  • Есть ли на практике нынче отдельный "чистый" верстальщик в продакшене при разработке FrontEnd'a web-приложений?

    voidnugget
    @voidnugget
    Программист-прагматик
    Сейчас современная вёрстка не обходится без кучи сторонних инструментов типа gulp, stylus, sass, csslint и прочего, которые мало того что и время экономят так и очень пересекаются с фронтом. Хотя, на практике, даже стабильных полифилов для относительных метрик, да и для анимации, сейчас нет :( А отзывчивость в пикселях - неуважение к себе (адаптивность немного с другой оперы).
    Ответ написан
    1 комментарий
  • Стоит ли переходить с Proxmox на Docker? Какая архитектура более удобна для множества highload проектов?

    voidnugget
    @voidnugget
    Программист-прагматик
    Ну как-бэ до 100Мбит трафика на ноду - ну совсем не Highload.
    Нужно понимать что вопрос сформирован достаточно плохо и сразу видно общее недопонимание темы деплоя и непрерывной интеграции. Советую сначала разобраться с особенностями современных систем оркестрации и управления инфраструктурой: Puppet, Chef, Ansible, SaltStack и OpenStack, потом разобраться как с этим дружить виртуалки и системы управления контейнерами типа XEN, KVM и LXC (Docker). Также советую разобраться с понятием Test Driven Deployment и как оно соотносится с Continuous Integration в целом.

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

    В общем большая часть вышеописанного вообще не ассоциируется с реальным highload'ом - от 10ти и до 40Гбит на ноду (чистого REST трафика). PHP для такого - ну совсем не тортъ, но есть проблески типа Phalcon, правда там есть проблемы со стабильностью.

    Docker сам по себе не имеет никакого отношения к микросервисным архитектурам, но часто используется для менеджмента контейнеров в таких случаях, хотя можно использовать любое решение для этого. А вообще у микросервисных архитектур есть куча недостатков, и они совершенно не подходят для задач около-реального времени.
    Ответ написан
    1 комментарий
  • Будущее у RestFull сайтов?

    voidnugget
    @voidnugget
    Программист-прагматик
    Я лично выбрал для себя реакт, так как он спокойно пререндерится в node.js и с небольшими плясками с cqrs-es'ом его можно заставить очень и очень хорошо работать, но это не для простых смертных и большинству адептов недоступно. Будущее есть - нормальных инструментов нет.
    Ответ написан
  • Где ошибка в работе gulp task: watch?

    voidnugget
    @voidnugget
    Программист-прагматик
    Так уже очень давно не работает...
    Надо так
    gulp.task('doStuff', function(done) {done();});
    gulp.task('watch', function(){
        gulp.watch(['dist/**'], 'doStuff')
                .on('change', function(file) {
                    fileChanged(file.path);
                });
    });
    Ответ написан
  • Как работает react js?

    voidnugget
    @voidnugget
    Программист-прагматик
    1. Грубо-говоря есть 1 страница в которую данные приходят по REST интерфейсу с ModX и он не участвует, непосредственно, в рендере. Сам по себе реакт рендерит страничку по кусочкам(компонентам), но вот внутри нет хорошего механизма для проверки нужно ли менять эти кусочки в DOM дереве - есть PureRenderMixin, но часто нужно городить руками.
    2. Нет эта страница не должна перегружаться и от реакта в таком случае толку 0. Реакт - это шаблонизатор в MVC, он не занимается работой с моделью и в нём нет бизнес-логики.
    3. Flux - это православный CQRS-ES, и непосредственно к modx отношения не имеет. Полноценной реализации этого паттерна, по всем канонам и с SOA, сейчас нет. Так что не стоит заморачиваться. Для работы с подобными вещами РНР / Python / Ruby довольно плохо подходят, так как там нужна асинхронность / многопоточность прямо с коробки, и без костылей типа gearmand или celery.
    4. Надо ковыряться в самом реакте - там много недочётов и недоделок, но сейчас это наиболее полноценное и типобезопасное решение для рендеринга посредством VirtualDOM.
    Ответ написан
    9 комментариев
  • Почему потоки в Java ведут себя так неочевидно?

    voidnugget
    @voidnugget
    Программист-прагматик
    bromzh прав, от себя добавлю что есть ещё состояние гонки и оба потока могут обращаться к одному и тому же файловому дескриптору, в данном случае STDOUT, - нет гарантии что оба потока не будут писать EGG и END одновременно и не получится абракадабра типа EEGNG !D ;)

    Подобное поведение характерно для любой многопоточности, и Java тут не причём.
    Для избавления от головной боли используют модели актёров и Share nothing подходы типа всяких Akka, Greenlet'ов или процессов в Erlang'е, но на определённом этапе и с ними начинаются проблемы.
    Ответ написан
    2 комментария
  • Удобно и практично ли использовать шаблонизаторы (Jade и т.п.) в мелких проектах?

    voidnugget
    @voidnugget
    Программист-прагматик
    Конкретно в случае с Jade - очень целесообразно в проектах разнообразной сложности.
    При условно низком пороге вхождения он очень сильно упрощает и ускоряет разработку.
    Хотя если это сайт на 3 страницы, то и emmet справится )
    Ответ написан
    Комментировать
  • Есть ли смысл SSD платы над 2,5" SSD при работе с Ultra HD 4K?

    voidnugget
    @voidnugget
    Программист-прагматик
    Да, имеет, причём очень большой. Аппаратно, подобная платка - уже собранный RAID из двух SSD.
    Кингстон сам по себе видён как интегрированный RAID контроллер, можно ещё из двух таких ещё долепить программный RAID по желанию :( Должен выйти plextor m7e - тогда будет видно как куда и что.
    В идеале, желательно ещё иметь двухпроцессорную материнку с XEON'ами.
    Ответ написан
    6 комментариев
  • Помогает ли gulp при верстке обычных сайтов?

    voidnugget
    @voidnugget
    Программист-прагматик
    Да.
    Обычно заводится отдельный gulp таск, который получает реквизиты для заливки с переменных окружения, и с его помощью уже происходит заливка после сборки. Особенно удобно для aws и heroku, но и sftp покатит.
    Кроме всего прочего можно подключить автопрефиксер с uncss и csslint для подсказок о возможных недочётах.
    ИМХО проще всего и быстрее всего сейчас с stylus'ом, ибо node-sass и медленее и не особо стабильный, а гонять отдельно compass вообще сверхслоупочно, хотя некоторые местные предпочитают чистый uncss.
    Ответ написан
    1 комментарий
  • Symfony2 в dev режиме грузиться 1.5-2 секунды это нормально?

    voidnugget
    @voidnugget
    Программист-прагматик
    Да.
    Не нравится - стоит подумать о Phalcon.
    Ответ написан
  • Какая IDE для обычной C?

    voidnugget
    @voidnugget
    Программист-прагматик
    Atom с ctags тоже хорошо работает.
    Ответ написан
    3 комментария
  • Apache Curator - как(best practices)?

    voidnugget
    @voidnugget
    Программист-прагматик
    1. Нужно понимать что накладные расходы на коммуникацию очень сильно снижают общую отзывчивость проекта, иногда это бывает слишком критично. Первым делом нужно разобраться с Discovery, и имхо лучше слезть на gradle.
    2. Этот вариант работает в случае с использованием Discovery расширения - в рамках приложения работает куча сервисов которые регистрируются и происходит последующий роутинг в зависимости от текущей нагрузки. В рамках Curator частично реализован raft алгоритм задачи консенсуса, но не полностью, некоторые вещи обычно приходится дописывать руками в зависимости от требований проекта.
    3. Для начала стоит разобраться с ZooKeeper, а потом пытаться пилить Curator.
    Ответ написан
    Комментировать
  • Можно ли назвать человека программистом, если он занимается геймдевом?

    voidnugget
    @voidnugget
    Программист-прагматик
    Берём
    1. Среднестатистические алгоритмы используемые в современных играх
    2. Мат модели шейдеров и прочего графического барахла
    3. Стохастические сетевые алгоритмы для стабильного мультиплеера
    4. Генетические алгоритмы для тестирования в песочницах
    5. Алгоритмы передачи и упаковки ресурсов по приоритетам, ещё и в Р2Р сетях

    Понимаем что это выходит далеко за рамки любого распространенного CRUD'a, которым занимается 80% "реальных программистов".

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

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

    Людей, способных начать игру и довести до конца - тоже единицы.
    Если ваших родителей не устраивает зарплата в 1000-2000$ со старту, с расчёта в 10-12$ в час, то я уж и не знаю как лучше им так объяснить ...

    Сейчас ситуация такая, что университеты дают очень мало знаний, которые реально можно использовать на практике, а то что даётся - инициатива самих преподавателей, и в общем, получается "как повезёт". Всё что сам со школы выучил - то и использовалось до сегодняшнего дня, а университет лишь стал "списком литературы", и не более. Благо есть тостер и другие проекты - есть знающие люди которые могут подсказать что куда и как. Но при выезде за бугор наличие образования играет очень важную роль, так что им очень сильно пренебрегать не стоит, но и надеяться на него глупо.
    Ответ написан
  • Нормальна ли долгая загрузка MacBook Pro от нажтия кнопки включения до появления яблока?

    voidnugget
    @voidnugget
    Программист-прагматик
    Нет, это ненормально.
    MacBook Pro 15" 2014 - 7 сек загрузка
    MacBook Pro 13 2015 - 5 сек загрузка
    Ответ написан
    Комментировать
  • Почему не определяется USB хаб?

    voidnugget
    @voidnugget
    Программист-прагматик
    Контроллер криво прошит, либо мёртв - нужно искать заводские утилиты.
    Потому что VID/PID прошивается, и его отсутствие свидетельствует о том что кто-то это забыл или не смог сделать.
    Могу лишь отправить на флэшбут.ру - там есть самая большая подборка заводских утилит, либо нужно искать самостоятельно.

    UPD MA8601 USB 2.0 High Speed 4-Port Hub Controller
    Так что это вообще не USB 3.0 изделие.

    Вот этим можно попробовать задать VID/PID вручную
    В принципе там должна быть EEPROM'ка которую можно попробовать перешить и заставить эту штуку работать.
    Ответ написан