• Какова архитектура крупных приложений на низкоуровневых языках?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    ООП это не архитектура, а парадигма. Скорее всего Вы хотели спросить, какие есть паттерны проектирования в парадигмах процедурного и структурного программирования. Перечислю кратко: модули (структурные блоки, библиотеки, часто построенные в иерархическую систему при помощи dependency injection), интерфейсы (наборы экспортируемых функций, которые видны снаружи модуля), шаблоны (функции, абстрагированные от типов данных, при помощи которых парадигма обобщенного программирования позволяет порождать типизированные реализации), слои (как ни странно, но до ООП тоже были абстракции, они реализовывались при помощи принципа разделения модулей на слои, т.е. группы модулей, реализующие более низкоуровневые или более высокоуровневые задачи, программирование обычно начинается с самого высокого слоя абстракций, из него можно использовать только вызовы на 1 слой ниже, но не на 2 слоя, т.е. нельзя смешивать абстракции и пропускать слои, обращаясь, грубо говоря, от нажатия кнопки сразу к кластеру на диске), заглушки (должны Вам должны быть известны, это функции и модули без реализации, необходимые чтобы запускать и отлаживать еще не дописанную программу, они могут выводить вызовы к ним на экран или в логи, а состоять только из возврата правдоподобных но не настоящих данных). Так же есть много паттернов структур данных, которые тоже очень сильно упрощают жизнь, если выбрать определенную их реализацию для своего проекта и придерживаться принципа однородности структур данных, например, не использовать две разные реализации двусвязных списков в одной программе (или модуле). Структуры данных вполне заменяют объекты, более того, работают они несравнимо быстрее, не создают проблемы неоднозначности моделирования, как в ООП например, когда Вы не можете решить, где должен находиться метод "сесть" у "жопы", у "стула" или у их общего контейнера "мир", в котором это происходит. Распространенные структуры данных: набор полей, список (в т.к. односвязный, двусвязный, циклический и т.д.), стек, дерево (тоже может быть от односвязного до пятисвязного с вариациями), множество, очередь, ассоциативный массив и хеш-таблица. Все, устал писать, рекомендую почитать Дэйкстру, Вирта, Кнута. А смириться с отсутствием ООП может помочь занятная статья в стиле холиварного срача: blogerator.ru/page/oop_why-objects-have-failed
    Ответ написан
    Комментировать
  • Как программировать опросы, анкеты?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Разумных вариантов миллиарды. А идиотских еще больше. Это как спросить, как лучше сделать автомобиль? Если бы был ответ на это вопрос, то была бы одна марка и одна модель.
    Я бы советовал сделать описание вопросов на JSON, загружать эти данные со страницей или отдельным запросом, а потом рендерить на клиенте HTML из данных.
    [
      { question: "Как Вас зовут?", type: "input" },
      { question: "Существует ли истина?", type: "select", answers: ["да", "нет"] },
      { question: "Как возможна справедливось?", type: "select", answers: ["легко", "трудно", "ни как"] }
    ]

    Еще посмотрите React, чтобы узнать как нужно и Angular, чтобы узнать как не нужно, поколупайте разные клиентские шаблонизаторы. Нужно набраться опыта, чтобы спроектировать это лучьше других.
    Ответ написан
    Комментировать
  • Как вычистить шлак из npm пакетов?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    find . -name "*.txt" -type f -delete
    и так со всеми расширениями, если без ключа
    -delete
    то сначала посмотрите списком, что оно есть и перепроверите, нужно ли грохать.
    Ответ написан
    Комментировать
  • Как бороться со страхом использовать Javascript на сервере?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Бороться со страхом бесполезно, так вся жизнь на борьбу уйдет.
    Если они боятся или не хотят, то им уже ни чем не помочь, кроме своего примера.
    Только личным опытом и примером переубедите.
    Ответ написан
    Комментировать
  • Can't set headers after they are sent?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Если делаете redirect, то next уже не нужен. Цепочки мидлверов на том и стоят, что передавать дальше нужно только в том случае, если запрос еще не обработан.
    Ответ написан
    Комментировать
  • В чем отличие сервисной шины предприятия(ESB) от брокеров сообщений (например RabbitMQ)?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    ESB это обычно API в сервисной архитектуре, это RPC или REST, но принцип - атомарный вызов и получение ответов в виде кусков данных, это диалог в стиле клиент-сервер. А вот MQ - это совсем другое, это шины сообщений, тут вообще не происходит диалога в стиле запрос-ответ, а обмен данными происходит по принципу очередей сообщений, которые распределяются между каналами обработки (используется для масштабирования). По сути MQ - это реализация СМО (системы массового обслуживания), по которым можно найти много теории и которые уже давно широко используются в автоматизации технологических процессов на производстве, для транспорта и перевозок, в других сферах. RabbitMQ я не использовал, а про ZeroMQ могу сказать, что это гораздо больше, чем MQ. ZeroMQ - это не только шина событий, но и множество других паттернов обмена данными, как запрос-ответ, публикация-подписка и т.д. Посмотрите полный список этих паттернов: zguide.zeromq.org/page:all Из них можно собирать различные коммуникационные конфигурации. Шины сообщений и броккеры могут использоваться для построения ESB, но как одна из вспомогательных технологий.
    Ответ написан
    3 комментария
  • C чем могут быть связаны тормоза NodeJS?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я большой любитель консолей, и разработки в фаре. Когда-то были похожие тормоза из-за ConEmu, долго создавалась новая консоль с нодой, но как решил не могу вспомнить. А Вы пробовали в обычном cmd.exe и в powershell запускать? Нужно поэксперементировать и сравнить. За наводку на cmder спасибо, попробую использовать, если что накопаю - отпишу.
    Ответ написан
    Комментировать
  • Как запустить команду в node на coffee, "#!/usr/bin/env node"?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Это не команда JS и не команда Coffe, это команда шела. Ее нужно добавлять в файл после трансляции из Coffe в JS или вместо node нужно запускать через coffee. Вот тут см. https://www.npmjs.com/package/coffee-script
    Ответ написан
  • Как получить доступ к драйверу на node-webkit в windows?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    А описание DLL вообще есть? Если есть, то из C/C++ удается же вызвать? А уже C/C++ просто вызывать из ноды.
    Ответ написан
    1 комментарий
  • Нужно ли включать маршрутизатор в изоморфную часть?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    С дублированием сложно смириться морально. Но есть три пути, два Вы описали, дублировать и изоморфить. Но мне больше по душе третий, когда серверная часть содержит все в себе, обобщенную решаемую задачу и динамически порождает клиентскую часть. То есть, нужно не 2 раза писать, а используя метапрограммирование подняться на такой слой абстракции, где нет клиента и сервера и там решать задачу, а потом транслировать ее в клиент и сервер, в шаблоны и маршруты в конкретику.
    Ответ написан
    1 комментарий
  • В чём разница между проектированием и архитектурой?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Если коротко, то архитектура - это смесь науки и искусства, а проектирование - это смесь технологий и дизайна.

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

    Что есть архитектура?

    Это архитектурная задача:
    • Выделить и назвать модули, построить связи
    • Скомпоновать подсистемы в систему

    Выбор идей и инструментов:
    • Парадигмы, стандарты, модели данных
    • Технологии, фреймворки, паттерны
    • Модели взаимодействия модулей
    • Выбор топологии
    • Протоколы и форматы данных

    Задача интеграции:
    • Стыковка модулей еще до их разработки
    • Определить внешние интерфейсы (связи)

    Что есть проектирование?

    Инженерная задача:
    • Планирование и детализация модулей
    • Спецификация модулей, компонентов, вплоть до классов, методов и функций
    • Моделирование данных (ООП или структуры памяти)
    • Разрабока ER-моделей и структур БД
    • Оптимизация

    Задача моделирования:
    • Сделать прототип, макет, пилотный или пробный экземпляр
    • Математическое моделирование
    • Тестирование и апробация моделей
    • Проверка идей и алгоритмов
    • Нагрузочное тестирование

    Задачи эксплуатации:
    • Подготовка системы к эксплуатации
    • Внедрение
    • Инженерная поддержка
    Ответ написан
    Комментировать
  • Какие связки лучше для web проекта (SAAS)?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Напишите на знамени "минимализм" и займитесь архитектурой еще до того, как будете выбирать технологии. Отсылаю вот к этому ответу: Есть какие-нибудь ресурсы по построению правильной серверной архитектуры на node.js/io.js?
    А по технологиям: Node.js + React
    Не берите Angular habrahabr.ru/post/246905
    Не берите jQuery - он ничего не решает, он привычен, удобен, но приучивает повсеместно писать селекторы, вместо того, чтобы при запуске забрать все необходимые ссылки на DOM в переменные, связать их с объектами и вызывать по мере надобности. Кроме того, селекторы уже давно есть в HTML5 slides.html5rocks.com/#new-selectors
    Не берите express.js если хотите в дальнейшем развить проект до больших масштабов. Он годится только для прототипирования. habrahabr.ru/post/243945 в особенности см. мой коммент: habrahabr.ru/post/243945/#comment_8141311
    Вместо CoffeeScript берите TypeScript, а лучше пишите все на ES6. Пока напишете SAAS, то он будет везде.
    Ответ написан
    2 комментария
  • Диалог между двумя пользователями. Что выбрать, как решить?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Замените Apache на nginx и найдете сотни шаблонов развертывания вида: nginx + php + node. Или поставьте nginx перед Apache и отдавайте из него статику, а остальные запросы через реверс-прокси в Apache и на другой порт в node.js.
    Ответ написан
    1 комментарий
  • Как в Node.JS получить GET параметр из htaccess?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Это у Вас апач смотрит во внешний мир на 80, лучше конечно использовать для этого nginx, но в апаче тоже можно сделать реверс-прокси, установите mod_proxy, поднимите ноду на 8080 порту, и потом в .htaccess пишите:
    RewriteEngine on
    RewriteBase /
    RewriteRule ^node/index.php\?do=(.*)$ http://127.0.0.1:8080/$1 [P]
    ProxyPassReverse /node/ http://127.0.0.1:8080/
    Ответ написан
    Комментировать
  • Kак исправить такую ошыбку в nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Похоже это ошибка в пуле запросов библиотеки kontroller. Вот тут говорят, что ее уже поправили https://github.com/1602/compound/issues/568 Проверьте версии зависимостей, возможно Вы используете старую версию этой библиотеки. Но вообще, по стеку видно, что там целый зоопарк технологий и я бы советовал упростить набор инструментов.
    Ответ написан
    Комментировать
  • Как правильно организовать загрузку файла через форму в NodeJs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Ради Аллаха, возьмите библиотеку multiparty, там же может быть много файлов в одной форме и много файлов даже в одном файловом поле. Там сложный формат, MIME, нельзя просто писать все в стрим. Все это нужно парсать https://www.npmjs.com/package/multiparty примеры там есть.
    Ответ написан
  • Как создать службу для запуска node.js на windows?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Комментировать
  • Как делать кроссдоменные запросы на node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Добавьте заголовки:
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept');
    Ответ написан
    1 комментарий
  • Какие есть advanced книги по Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Нескромно предложу послушать мою лекцию и почитать статьи, хотябы потому, что они очень отличаются от всего, что Вы найдете про ноду у других авторов.
    1. Архитектура программных систем на Node.js https://youtu.be/Try7lmWikao
    2. Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC habrahabr.ru/post/204958
    3. Метапрограммирование (с примерами на JavaScript) habrahabr.ru/post/227753
    4. Impress Application Server простыми словами habrahabr.ru/post/247543
    Ответ написан
    Комментировать
  • Сложно ли написать свой блог на nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Блог это конечно же решаемая задача для ноды, но эта ниша уже занята другими языками и фреймворками, поэтому блоги на ноде пишут редко, подробнее посмотрите вот этот мой ответ о том, что лучше писать на ноде, что имеет смысл, а что нет: Что можно написать на Node.js?
    Мой Вам совет, учите сначала платформу, смотрите видеоуроки тут https://learn.javascript.ru/nodejs-screencast пробуйте свои сыли на практике тут nodeschool.io и выбирайте готовый движек для блогов тут https://github.com/sindresorhus/awesome-nodejs
    Сделать блог это может означать:
    1. Взять движек блогов и сделать на нем блог
    2. Написать движек блогов и сделать на нем блог
    Делать блог на голом экспрессе, это почти то же, делать блог вообще на голой ноде, это можно только если Вы уже профессионал и хорошо понимаете, что делаете. Иначе нужно идти по первому варианту и брать все готовое, вот еще одно место где это готовое можно поискать: nodeframework.com
    Например: https://ghost.org/ или hexo.io
    Ответ написан
    Комментировать