• Что за ошибки выдаёт NodeJS?

    qfox
    @qfox
    Ответы есть у меня
    Очевидно, /var/node/hello.js:1 — здесь у вас HTML, а должен быть javascript.
    /var/node/client.js — этот файл нужно пробрасывать на клиент каким-то образом (либо nginx, либо средствами express и мидлварем static).

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

    qfox
    @qfox
    Ответы есть у меня
    Возьмите, например, d3js.org

    Какой-то у вас вопрос из разряда «Пацаны в гугле забанили спасите!»
    Ответ написан
    Комментировать
  • Как в three.js разделить куб на произвольное количество кубов кратное 8?

    qfox
    @qfox
    Ответы есть у меня
    Если на входе: координаты, кол-во кубов (через коэффициент или число, кратное 8) и размеры, geometry, material.
    То: мне видится цикл вложенности 3, который можно будет оптимизировать, и который будет считать координаты для кубов для каждой размерности, ну и запускать там вашу функцию (только слегка модифицированную, ибо x, y, z не должны быть 0).

    Сделайте расчет координат отдельно, выведите их, проверьте что все правильно, и после подставьте туда отрисовку в нужных координатах вашего куба. Самое простое — это разделить задачу на несколько простых и после использовать их в правильном порядке.
    Простите, без кода ;-)
    Ответ написан
  • Запустить тригер document.ready вручную?

    qfox
    @qfox
    Ответы есть у меня
    Идея, мягко говоря, очень плохая. Лучше сделайте так:
    $(document).ready(onDOMReady);
    function onDOMReady () {
      // ваш код
    }

    И в нужном месте просто вызовите эту функцию.

    Это будет и быстрее, и надежнее.
    Ответ написан
  • Друзья, есть ли какие задачи для практики по JavaScript?

    qfox
    @qfox
    Ответы есть у меня
    Я бы еще предложил:
    - написать библиотеку промисов или монад (www.youtube.com/watch?v=b0EF0VTs9Dc);
    - поучаствовать в одном из сотен тысяч опенсорс проектов на гитхабе (https://github.com/search?q=language%3AJavaScript&...);
    - поотвечать на вопросы новичков про JS на тостере ;-), искать самому ответ, параллельно читать ответы других участников, как проверочный материал.

    А вообще — весь спектр классических задач — лучше брать те, которые самому интересны. JS таков, что ограничений на алгоритмы у него нет, хочешь используй как функциональный язык, хочешь — как императивный — простор для фантазии ;-)
    Ответ написан
    Комментировать
  • Трансляция видео стрима с помощью HTML5 Websockets?

    qfox
    @qfox
    Ответы есть у меня
    Не очень понятно зачем это делать через websocket, но даже если представить какой объем вы будете через них отправлять — качество будет того.

    Можно попробовать посмотреть в сторону решений типа https://github.com/phoboslab/jsmpeg, но это на nodejs и требует ffmpeg/VLC.
    Ответ написан
    4 комментария
  • Deploy приложений на node.js?

    qfox
    @qfox
    Ответы есть у меня
    В свое время я нашел roco ;-) Очень похож на капистрано, но уровень ниже, конечно.

    upd
    Ну и недавно появился https://github.com/pstadler/flightplan — очень активно пилится.
    Ответ написан
    Комментировать
  • Можно ли php заменить на node.js?

    qfox
    @qfox
    Ответы есть у меня
    Архитектура PHP и Node.JS разная, поэтому в общем случае — нет.

    Но в частных случаях, например, на домашних страничках или каких-то сервисных ручках — это работает на ура.

    К сожалению, пока никто не написал аналог связки apache+mod_php для node.js, чтобы можно было просто изменяя файлы тут же видеть результат в браузере, но это дело времени ;-)
    Ответ написан
    Комментировать
  • Как создать структуру Node.JS приложения?

    qfox
    @qfox
    Ответы есть у меня
    Модели лучше завернуть в абстракции, при чем, вынести общий код отдельно, код для браузера — отдельно, код для ноды — отдельно. Чтобы `require(['fs'], (fs) => fs.read)`, например, работал одинаково и в браузере, и в ноде.

    Не делать в одном файле — раскидывать по плагинам, посмотреть/попробовать пакеты architect и pym, либо использовать свой интерфейс. Еще лучше использовать какой-нибудь cluster и делать весь функционал приложения в одном потоке. Лучше много мелких, чем одно большое.
    Ответ написан
  • Не будет ли непопулярность хостингов node.js проблемой для создания попсовой CMS?

    qfox
    @qfox
    Ответы есть у меня
    Все давно перешло из разряда хостинга машины, хоть бы виртуальной, в разряд облачных сервисов.

    Не забывайте, что php это one-shot приложения, отработал и сдох, следующий придет — все заново отрабатывать. А nodejs это вполне себе долгоживущий полноценный сервис, как и java, python, ruby, etc. Платформа другая, нужен и хостинг иной.

    suse.me/apps/heroku — все решили, что можно считать CPU. На том и порешали, в общем.
    Ответ написан
  • Как сместить target index в jcarousel с первого слайда на второй?

    qfox
    @qfox
    Ответы есть у меня
    Насколько я понимаю, проще всего подписаться на событие изменения таргета и выставлять свой класс на следующий после таргета элемент. Либо же какие-то другие события посмотреть.
    Я бы читал код и документацию.

    Не очень тянет на вменяемый ответ, но уж коль ничего другого нет ;-)
    Ответ написан
  • Kind of Capistrano на Node.JS

    qfox
    @qfox
    Ответы есть у меня
    Сам капистрано хорошо справляется с задачей, но аналоги есть.

    Например, https://github.com/1602/roco
    Если будет интересно — я переписал его, чтобы его можно было пилить дальше и использовать для создания своих оберток, но остановился на тестах и процесс пока встал. Т.е. оно вроде бы работает, но без тестов МР не поставишь, а тесты были сильно завязаны на внутреннюю архитектуру, которая поменялась.
    Ну и да, кроме того, что он на nodejs, его скрипты не синхронные, как и сам nodejs, хотя таски и группы создаются аналогично.

    Сами таски описываются на coffee и очень похожи на таски capistrano.
    Ответ написан
    Комментировать
  • Какая есть альтернатива Flowy для node.js?

    qfox
    @qfox
    Ответы есть у меня
    Сходу, это Q, и Vow (именно его я чаще всего и использую, в т.ч. на клиенте).
    Еще есть менее известные then promise и bluebird
    Все это называется Промисы (обещания) или Promises/A+
    Это то, что касается промисов. Есть и другие библиотеки bit.ly/1putPFj

    Есть еще вариант использования различных библиотек для контроля потоком, которые тоже из горной лапши делают более-менее стройный код.
    В т.ч. async, более простая, но не менее эффективная обертка над стандартными колбеками.
    И другие: Step, Seq, FuturesJS.

    Кроме этого, в стандарт рано или поздно будут включены т.н. генераторы (yield) — часть harmony es6. Уже даже есть наработки в эту сторону типа koajs (замена expressjs).
    Они находятся в ветке 0.11, но требуют флага при запуске. Гарантий, что это появится в 0.12, конечно, нет, но в 0.14 или 0.16 оно появится с большой долей вероятности.
    Ответ написан
  • Существует ли в природе подобный слайдер?

    qfox
    @qfox
    Ответы есть у меня
    Имхо, это все css3, js тут мало играет.

    Делаете прямоугольный «слайдер», который загибаете, а его элементы наоборот разгибаете. При наличии какого-то класса сдвигаете, опять же, css3 свойствами и ставите нужную прозрачность (или меняете картинку), тени.

    Вариант 2: svg. В этом случае, делаете inline svg, с нужной формой элементов, классы там тоже поддерживаются и при наличии класса active на элементе двигаете его вниз и меняете прозрачность.
    Ответ написан
  • Как работает демонизация node.js в Ubuntu?

    qfox
    @qfox
    Ответы есть у меня
    Нам понравился supervisor. И для dev, и для production. Работает как master процесс, которые стартует и перестартует любые приложения, в т.ч. и такие, как node.js.

    supervisord.org
    OpenSource на гитхабе: https://github.com/Supervisor/supervisor
    Есть всякие web морды: https://github.com/Jahaja/supervisor-webctl
    Написан на питоне, но это ему не мешает ни сколько.

    Что умеет из коробки:
    Удобное API для работы (поэтому и есть возможность писать веб морды),
    Позволяет перенаправлять стандартные потоки IO, запускает как надо и под нужным пользователем,
    Сам перезапускает сервисы при падении,
    Позволяет проверять запущенные сервисы и удаленно, и через ctl, и через всякие third-party приложения,
    Позволяет собирать конфиг из кусочков, в т.ч. по wildcard, как апач/nginx, и тем самым дает возможность иметь отдельные конфиги для каждого приложения,
    Документация,
    Ну и проект живой, это очень важно https://github.com/Supervisor/supervisor/commits/master

    Очень удобно использовать вместе с чем-то типа капистрано.

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

    qfox
    @qfox
    Ответы есть у меня
    Инлайн стили это одно, а скрипты это другое, бэм собирает все вместе, и еще и html туда же при помощи i-bem.js

    Примеры — многие проекты яндекса, часть мейл.ру, ну megafon.ru респонсив часть ;-) А вообще уже достаточно много сайтов на бем переходят.
    Ответ написан
    Комментировать
  • Как реализовать БЭМ блоки для jade (pug), stylus?

    qfox
    @qfox
    Ответы есть у меня
    Пожалуй, посоветую следующее:
    1) Иметь хелперы в jade, переменную с названием блока типа b, гененрацию модификатора типа mod(b, 'name', 'val'), переменную content (у меня это объект с toString()) с содержимым блока, и т.п.
    2) Не использовать include вообще, чтобы можно было строить дерево, просчитывать в рилтайме зависимости, и даже собирать assets для страницы. Например, через какието хелперы, опять же. При большом делении на блоки все повиснет, конечно, но надо научиться их умно кешировать.
    3) На вход постарайтесь подавать bemjson-like структуру с доработками под себя. У нас в проекте сейчас это поле data, в которое кладутся любые данные, нужные для блока. Подтягивание внутренних блоков (и их последующую отрисовку) мы делаем либо в самих шаблонах, либо из объекта content, если контент состоит из массива блоков и строк.
    4) Если нужно будет где-то подтянуть блок в элемент — научите хелперы block/element из (2) подмешивать данные при прямом вызове хелпера.
    5) Если все замечательно — в конце все собранные assets можно в заголовке (css) и в подвале (js) страницы, предварительно прогнав через uglifyjs, csso, но только на продакшне, где есть их кеширование на nginx.

    У нас это все на пхп со смарти (так звезды сложились), но вполне подойдет для рантайм js с jade. Работает замечательно.

    Но вообще, если вы используете js, то удобнее использовать bemhtml свежий с js синтаксисом. На bem.info пока не обновляли доку, но базовые блоки в самой библиотеке вполне описывают синтаксис. Будет бонус — шаблоны самодостаточны, и на морде не потребуют подгрузки доп. библиотек, можно будет запускать как есть. В гульп их сборку встроить тоже можно.
    Ответ написан
    4 комментария
  • Есть ли какие-то специальные рекомендации в методологии БЭМ при верстке HTML5?

    qfox
    @qfox
    Ответы есть у меня
    Зайки кушают морковку, волки кушают овес, и все бы замечательно было бы в лесу, если бы не контекст.
    - HTML5 не идеальная штука, верстать в четком соответствии с его стандартнами — равно смертный приговор внешнему виду проекта. Это достаточно сырой продукт, который производители браузеров решили кусочно выложить в свет. Что из этого получится — будет известно через пару лет, когда все грабли познают своего на них наступившего.
    - Количество проблем с кодом будет увеличиваться линейно или даже квадратически, в зависимости от ваших навыков. В любом случае, вы никогда не уйдете от классов и элементов. И скоро работы ваших сайтов при описанном подходе (поиск по тегам, поиск по data-атрибутам, смешанные селекторы и пр.) будет влиять как на первичную отрисовку страницы, так и на все последующие перерисовки достаточно сильно просто потому, что оптимизация, конечно, есть, но от полного перебора дом дерева при его перестройке никто не уйдет.

    Я, как и некоторые, уже давно не считаю html и css чем-то, что стоит писать руками. Если в js можно просто забыть и не использовать неудачный опыт типа with, отстуствия разделителей (;) при переносе строк, и т.п., это все-таки императивная среда, то с декларативной природой css и html — можно абстрагируясь писать языки разметки, вычленять кусочки из целого и реиспользовать много раз где нужно, и прочее.
    Вам HTML5 говорит о том, что хорошо бы вычленить все описание section в отдельное место, всякие стили, скрипты, и прочее?
    Да и ваш подход, с тэг = блок, не приживется. Подойдет только для очень мелких сайтов. Просто потому, что у вас тэги кончатся. Попробуйте заверстать страничку пользуясь своим руководством, и все поймете. Я уже не упоминаю про семантику.

    Если применять БЭМ в чистом виде к HTML5 получиться избыточное количество классов, которые добавляют "независимость блокам" так где она есть или не нужна.

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

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

    Порог входа не низок, не высок, но есть. Все кто против — либо любят наступать на грабли, либо ничего долгосрочного не делали, либо фанаты w3c (а не здравого смысла), либо ваш вариант.
    Ответ написан
    Комментировать
  • В чем разница в подходах к проектированию страниц между БЭМ и GWT?

    qfox
    @qfox
    Ответы есть у меня
    Наверное тем, что в 2006 году никто не думал, как далеко зайдет веб.
    html vs bemhtml+bemjson, т.е. декларативная шаблонизация. Если чтото похожее есть в GWT (типа не html, а xslt, и на входе xml с данными), то в этом плане практически тоже не отличаются, просто осевременно и работает быстрее (xjst+json).
    В БЭМ-блоке вы можете складывать какой-то серверный функционал, документацию, и много чего еще — как с этим у GWT?
    Примешивания блоков — как с этим?
    Нативная поддержка js (как серверного так и браузерного) ?
    i-bem.js ?

    Думаю, половины из этого точно нет в GWT, но корни явно схожие, спасибо за освежение в памяти этого троебучия.

    Ну и самое главное, что это обсуждение разницы в инструментах, где у GWT застолблена поляна очень давно. А BEM себя позиционирует в первую очередь как методология, а не фреймворк.
    Ответ написан
    Комментировать
  • Как поступать с тегами, которые генерируются БЭМ?

    qfox
    @qfox
    Ответы есть у меня
    Че-то второй вопрос по бэм и опять 3 подвопроса.

    (1) Поступать с тегами нужно нежно. Лучше всего, если хотите бэм в вордпрессе, поискать готовые плагины/темы, на базе которых делать свое. В контенте без языков разметки бэму делать нечего, ибо это неудобно руками писать. В этом случае удобнее всего завернуть все в некий блок user-content, которому прописать стили для всех каскадов — таким образом у вас получится наибольшая польза от бэм с наименьшим кол-вом проблем от классического подхода. Т.е. вы все эти проблемы локализуете внутри блока user-content, все остальное будет стабильнее, в зависимости от навыков.

    (2). Обертки это немножко другое, чем то, что вы хотите. Для центровки всех элементов можно родительскому блоку пользовательского контента user-content, в который вставляется то, что приходит из админки, выставить text-align: center, и оно разойдется по всем дочерним. А вообще, если такое нужно не везде, то лучше сделать соотв. модификатор или элемент, который можно будет навешивать на тэги контента. Имя блока можно сократить до uc, например: user-content_align_center или uc_align_center, или uc__centered (если использовать, как подмешанный элемент).

    (3) Про вложенные блоки есть такая идея: создаете модификатор _level_N, или depth_K, где N, К — натуральные числа, этим модификаторам задаёте нужные цвета текста. Родительскому блоку по умолчанию выставляете тот самый одинаковый цвет. Профит.
    Про дублирование стилей 7 раз — не очень понимаю, если у вас будет один и тот же блок — просто навешиваете его и нет проблем, если разные — цвета прописываете в модификаторах.
    Кроме прочего, есть csso, который оптимизирует все это богатство и ужаса никакого не будет.
    Кроме прочего, задача какая-то вымученная, потому что color по стандарту передается в дочерние элементы, и его будет достаточно прописать в style="color: red" родительской ноды.
    Независимыми должны быть блоки, а не ноды. Разница между ними такая же, как между классом и объектом, или как между схемой и таблицей, или как между трафаретом и надписью им сделанной, и т.д. Одно — правила, второе — результат. Один и тот же блок может быть навешан на 50 хтмл нодах (тэгах), и все они будут иметь похожее или одинаковое поведение и отображение.
    Например, есть у вас на сайте яндекс.карты, а в них 100 меток, все эти метки разные, но в чем-то сходятся, например, у них одинаковые или похожие стили, а при клике на любой из них выводится попап, в котором разные данные. Так вот метка и попап — это одни блоки, а данные в попапах будут в других блоках. И стили, скрипты про вид метки и про открытие попапа мы описываем в одном месте единожды, сам попап в другом месте и тоже единожды, а когда будем выводить эти данные — это уже будет контент и там уже мы будем выводить многократно один и тот же класс (название блока) в разные дом ноды (тэги).
    В различных инструментах (bem-tools/enb) есть удобные шаблонизаторы как раз для автоматической генерации таких деревьев дом нод, чтобы было меньше путаницы: bemhtml, bh. Кроме того, такой подход позволяет генерировать шаблоны для сборки на клиенте в браузере. Но чтобы интегрировать все вместе — нужно разобраться. А чтобы еще и использовать с wordpress — неплохо знать как сам вордпресс, так и методологию, и инструменты, которыми будете все это собирать.
    Ответ написан
    Комментировать