[Перевод] Новости из мира Node: Tint, Redbird

Original author: Alex Young
  • Translation

Tint


image

Сегодня можно констатировать взлет такой под-области node-ориентированных разработок как написание десктопных приложений на node-webkit или похожих фреймворках. Идея такого подхода выглядит достаточно просто: запаковываем среду исполнения Node вместе с небольшой программой, которая предназначена для запуска вашего Node приложения как если бы оно было родным, десктопным.



Tint это альтернатива. Он использует модифицированную версию Node, привязанную к родным компонентам, это подразумевает что вы можете разрабатывая на JavaScript создавать нативные компоненты osx*, такие как окна, кнопки, встроенные web view, диалоги и многое другое.

Компания занимающаяся данным проектом, выпускает его под лицензией MIT. Если вы разработчик Objective-C вам может показаться интересным Main_mac.mm, он представляет собой интеграцию циклов событий Node с Objective-C++.

Я собрал все это дело из исходников и создал небольшое тестовое приложение, для того что бы посмотреть на что же похожи API в Tint.

require('Application');

var Window = require('Window');
var Button = require('Button');

var mainWindow = new Window();
var button = new Button();

mainWindow.title = 'DailyJS';

button.title = 'Hello';
button.addEventListener('mousedown', function() {
  button.title = '^_^';
});

button.addEventListener('mouseup', function() {
  button.title = 'Hello';
});

mainWindow.appendChild(button);

mainWindow.addLayoutConstraint({
  priority: 'required',
  relationship: '=',
  firstItem: button,
  firstAttribute: 'top',
  secondItem: mainWindow,
  secondAttribute: 'bottom',
  multiplier: 0.0,
  constant: 0.0
});

setInterval(function() {
  button.title = Math.random();
}, 1000);



Я запустил скрипт при помощи ./build/Release/tint example.js и получил окошко с кнопочкой. Я написал данный скрипт глядя на тестовые примеры, для того что бы ознакомиться с функционалом.

Мне кажется что это крутой проект и мне реально хотелось бы выполнить настоящее osx приложение используя Tint, но на сегодняшний день я не имею представления о том как скомпоновать мой проект так что бы финальные пользователи не имели головняков с установкой моего приложения. Я продолжу играться с данным фреймворком и попробую написать более детальную справку если обнаружу что либо полезное.

Redbird


Еще один проект на сегодня — Redbrid, доступен под лицензией BSD и известен в npm как redbird . Данный проект представляет собой обратный прокси (reverse proxy) для работы с виртуальными динамическими хостами, балансировкой нагрузки, проксификацией веб сокетов и SSL шифрованием.

var proxy = require('redbird')({port: 80});

// Route to any global ip
proxy.register('optimalbits.com', 'http://167.23.42.67:8000');

// Route to any local ip, for example from docker containers.
proxy.register('example.com', 'http://172.17.42.1:8001');


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

Заметки переводчика


* На момент написания статьи Tint работал только с osx, поддержка других операционных систем только планировалась.
** Наверное речь идет о неполной поддержке с последующим улучшением.
Share post

Comments 32

    +1
    А какие ещё есть альтернативы node-webkit больно он жирный сейчас стал.
      0
      Так беря на вскидку можно сказать AppJS. Но в обще работая с node.js нужно всегда иметь ввиду — чем толще приложение тем меленее его старт. Или вас другие тормоза достали?
    • UFO just landed and posted this here
        0
        А кто-то может объяснить, почему они (node-webkit, atom-shell) именно Chromium внутрь пихают? Есть ведь на том же webkit куда как менее толстые браузеры.
      –8
      О ужас. Недавно кто то браузер на js писал, так оно оказывается не просто кучка чудаков, а аж компании этой херней маются.
      Вот какой смысл писать на JavaScript десктоп и (это вообще ппц) баллансировщик нагрузки?
      Нет, не так.
      Что JavaScript делает за пределами браузера?
        0
        С асинхронностью борется. Кстати он уже давно из браузера вышел и на серверах успешно крутится.
          +5
          И теперь, победив асинхронность на серверах, оно начинает завоевывать десктоп. А через пару лет в топе апстора будут javascript mmorpg с серверами на nodejs.
          Так как другие языки, не победившие асинхронность и не пригодные для виджетов, постепенно отомрут, не останется иных программистов, кроме JavaScript. Производители железа признают ARM и x86-64 устаревшими и массово перейдут на JavaScript -архитектуру. Unix на серверах полностью заменится абсолютно асинхронной системой NodeJS-OS. К 2020 году в РФ создадут первый в мире уникальный планшет на архитектуре JavaScript с операционной системой JavaScriptOS и облачной синхронизацией с безотказными NodeJS-OS серверами. Все мировые государственные, коммерческие и некоммерческие организации полностью перейдут на новую архитектуру и софт.
          Но в один момент все это прекратится, т.к. «Senior Node-JS OS / JavaScript developer», разрабатывающий на своем мощном JS компьютере ПО для министерства обороны, напишет строчку кода:

          if(launch_nuclear_rocket !== null)
          {
          start_nuclear_war()
          }

          а launch_nuclear_rocket будет равен «undefined».
            +2
            Kаждый язык хорош для своей области применения, и у каждого языка есть свои плохие и хорошие стороны. Кстати, от части, за (launch_nuclear_rocket !== null) === true можно смело благодарить Microsoft в первую очередь а потом и Mozilla. Хороший пример JS/CSS для десктопа это несомненно Atom. JS/CSS для настольных приложений дарить просто бешенную кросс платформенность.
          +1
          Вы лучше зайдите с другой стороны — а почему бы и нет. Вот в статье есть пример, набросайте его на своём любимом десктопном языке, сравним. Очень простой синтаксис, без излишеств, поддержка событий и возможность асинхронности. Сейчас и декстоп менеджеры во всю поощеряют разработку виджетов на js, а активный декстоп ещё в 98-й винде был.
            0
            По моему «почему бы и нет» — довольно фиговый аргумент, особенно когда дело касается технологий.
            А почему бы не заменить во всех браузерах javascript на objective-C, или не управлять станками с ЧПУ с помощью CSS анимаций?

            Можно написать «фрэймворк» на моем любибом языке, и запуск баллансировщика будет сводится к одной строке:

            (start_ballancer 80)

            при этом количество пластов кода в нем будет в разы меньше, чем аналогичном на js, да и работать будет пошустрее.
            Виджеты на то и виджеты.
              0
              G-code. Это, конечно, более низкоуровневая вещь, чем CSS, но вообще-то тот же DSL.
                0
                А чем так плох JS с точки зрения технологии?
                  +3
                  Ну здорово будет, если для браузера появится ещё один язык, вон гугл пытается сделать замену.

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

                  Плюс javascript как раз в более простом апи и плевать сколько там пластов внизу, железо в большинстве случаев дешевле кода. Тем более js же шустрый язык и его кэлбэчная сущность даёт массу простора для оптимизаций и распараллеливания.
                    –2
                    Во первых ассемблер это тоже язык программирования, во вторых js — не единственный язык программирования, не надо утрировать.

                    Тут сениоры js довелеры негодуют на меня, а на вопрос — зачем оно вне браузера — никто так ответа и не дал. Как написали выше, каждый язык хорош в своей области. Области js — это манипуляции с веб страничками, как бы кто не разглагольствовал.

                    Железо дешевле кода, но не настолько, что бы десктоп писать на js.

                      +4
                      > зачем оно вне браузера
                      Странный какой-то вопрос. Это полноценный, стандартизированный язык высокого уровня, на котором можно с успехом писать (и пишут ведь, и много) server-side и desktop-приложения. JavaScript никоим образом ни разу не заточен на «манипуляции с веб-страничками»: ни по стандарту, ни по архитектуре.
                        –2
                        Чего странного то?

                        JavaScript никоим образом ни разу не заточен на «манипуляции с веб-страничками»
                        А под что он по вашему заточен?

                        ru.wikipedia.org/wiki/JavaScript#JavaScript почитайте для чего оно было создано.

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

                        Для сервера и десктопа есть масса чудесных языков, зачастую специально заточенных под те или иные задачи. Проблема в том, что их надо учить. А Js — вот он, сегодня я клепал фронтенд на jquery, завтра я уже гордый backend/desktop разработчик на NodeJS/Какой нибудь js-хрени, нифига не понимающий чего там происхродит под миллионами слоев абстракции. Железо ведь дешевле нормального разработчика, почему бы и нет.
                          +2
                          Ну вы так и не объяснили что с JS не так. Почему вы считаете разработчиков на JS «упоротыми»? Вот что вам лично не нравится? :)
                            –2
                            Я не знаю почему вы считаете, что я считаю разработчиков js упоротыми и что с js что то не так. Если вы не понимаете, почему оно не подходит для десктопа — сочувствую.
                            Мне в общем то все нравится, в том числе писать на js, только там, где js уместен.
                        0
                        Работа с домом это лишь одна из функций языка, какая разница, с домом возиться или c api, вроде qt, даже на php это не проблема. Тем более ещё раз повторяю — javascript очень производительный язык.
                        0
                        > его кэлбэчная сущность даёт массу простора для оптимизаций и распараллеливания.

                        Я даже не знаю как на это реагировать. Я писал на node.js на чистом js вообще не возможно писать, iced coffee конечно помогал, но все превращалось в какую-то магию. Самое славное, что есть в node.js это libuv. За это спасибо, хорошо сделали, Я сейчас сам пишу на node-webkit, но только потому, что надо ogl и много стилей которые проще на css сделать.
                          0
                          > Я писал на node.js на чистом js вообще не возможно писать
                          А что конкретно было плохо? Я, например, как-то к Promise прикипел и пишу асинхронный код абсолютно спокойно, без всякой странной магии, которую предлагает IcedCoffee, типа await и defer.
                            0
                            Promise точно такая же магия. Если мы не говорим про es6.

                            Что плохо? А что может быть хорошего в языке который сделали на коленке?

                            Что мне использовать? AMD? RequireJS? CJS? Или же модули из es6?

                            Открываешь приложение на ноде и каждый раз видишь n+1 способ сделать callback hell более читабельным.

                            Вообщем мои притензии к JS это просто дело вкуса.
                              0
                              Ну я не согласен что Promise — это магия. Так и любой шаблон проектирования можно магией назвать.

                              > Что мне использовать? AMD? RequireJS? CJS? Или же модули из es6?
                              Странный вопрос. Используйте что хотите :) Я предпочитаю browserify, например ;)

                              Я не утверждаю что JavaScript — идеальный. Просто это язык который вымучен и создан практикой и все вещи которые в нем появились — появились из практических соображений. А асинхронная природа, которая появилась как раз в результате создания «на коленке» пришлась очень кстати при написании серверных приложений.
                                0
                                > Ну я не согласен что Promise — это магия. Так и любой шаблон проектирования можно магией назвать.

                                Я говорил про костыльный Promise который до es6.

                                > А асинхронная природа, которая появилась как раз в результате создания «на коленке» пришлась очень кстати при написании серверных приложений.

                                В JS'e нет ничего про асинхроность и реактор. О чем вы говорите? Асинхроность в node.js целиком и полностью находится в libuv. Node.js подходит для фронтендщиков который хотят писать серверную часть. Так вот получаются всякие web-scale и другие чудеса. Однопоточные серверные приложения не нужны.

                                > Странный вопрос. Используйте что хотите :) Я предпочитаю browserify, например ;)


                                > Просто это язык который вымучен и создан практикой и все вещи которые в нем появились — появились из практических соображений.

                                Язык практически не менялся годами. Там forEach был не сразу. Только в es6 начал приобретать человеческий вид.
                                  +1
                                  > Я говорил про костыльный Promise который до es6.
                                  Promise в ES6 это практически те же самые Promise, которые были и до этого. Просто они ушли в стандарт, не более того. Костылей там никаких никогда и не было: их и на обычном стандартном EcmaScript 3 вполне можно реализовать.

                                  > В JS'e нет ничего про асинхроность и реактор. О чем вы говорите? Асинхроность в node.js целиком и полностью находится в libuv.
                                  Асинхронность — это не стандарт, конечно же, но все популярные движки JS работают именно так. Что касается libuv — я говорил про общий подход, а не про конкретную реализацию асинхронного ввода-вывода.

                                  > Однопоточные серверные приложения не нужны.
                                  Почему? Чем вам не угодили, например, однопоточные, но многопроцессные серверные приложения, например?

                                  > Странный вопрос. Используйте что хотите :) Я предпочитаю browserify, например ;)
                                  >
                                  Я имел ввиду что не понимаю стенаний по-поводу того что использовать: AMD, CJS, RequireJS или ES6. Что вы конкретно хотели этим сказать?

                                  > Язык практически не менялся годами. Там forEach был не сразу. Только в es6 начал приобретать человеческий вид.
                                  Он начал развиваться вместе с бумом веб-приложений середины двухтысячных. Когда появилась необходимость в более продвинутых инструментах — появился и новый стандарт. Ничего необычного.
                    +2
                    Поздняк метаться. Недавно нарыл два 3д редактора на WebGL:
                    labs.sketchfab.com/sculptfab/
                    clara.io/

                    Скоро node.js можно будет запустить на любом утюге.
                  0
                  Название специально было выбрано такое же как у знаменитой панельки под линукс?

                  Only users with full accounts can post comments. Log in, please.