Два самых главных заблуждения

fixxxer

К.О.
Партнер клуба
Ragazzo
с node.js я ничего не сравниваю, я не могу к этому поделию относиться серьезно, все попытки сделать из этого костыля что-то удобоваримое меня только улыбают. :)

Сравнивать же jquery-лапшу с php-лапшой и js-фреймворки с php-фреймворками мне кажется вполне уместным: задача фреймворка - создать расширяемую инфраструктуру приложения прежде всего. Тестируемость как критерий, кстати, вполне OK.
 

hell0w0rd

Продвинутый новичок
Ragazzo
с node.js я ничего не сравниваю, я не могу к этому поделию относиться серьезно, все попытки сделать из этого костыля что-то удобоваримое меня только улыбают. :)
еще даже не зарелизился ни разу)
А вот на счет анугуляра и прочих - я все понять не могу, нахрена такие монстры на клиенте. Ну то есть магия с data-*="" - это вот крутая штука, но ради ее одной можно допустим ядро бустрапа выдрать и уже все ок. А вот роутинг, модели - это же жесть.
 

fixxxer

К.О.
Партнер клуба
да где там монстр-то? в ангуляре 90% кода это директивы и двусторонний биндинг, что есть его суть, а больше там считай ничего и нет - только самые базовые вещи простейшие, да и те опциональны
 

Absinthe

жожо
да просто нормальные js фреймворки типа angular только недавно появились.
А где логическая связь между отсутствием фреймворков и говнокодом?

Так-то так. Но людей, способных при отсутствии подходящего инструментария самостоятельно организовать нормальную архитектуру и инфраструктуру - намного меньше, чем тех, кто способен изучить фреймворк и следовать его good practices.

А архитектора на javascript ты вообще фиг найдешь. Клиент-сайд - не та область.
После одного целиком JS-проекта, в котором я наговнокодил лапшу, я понимаю, где ошибся, и представляю, что делать не надо. Следующий мой проект был уже не говнокодом.

Ragazzo
с node.js я ничего не сравниваю, я не могу к этому поделию относиться серьезно, все попытки сделать из этого костыля что-то удобоваримое меня только улыбают. :)
Чем его заменить?
 

fixxxer

К.О.
Партнер клуба
Ну вот глядишь был бы фреймворк, ты бы посмотрел, как делают те, кто на этом собаку съел, и уже и первый проект был бы не таким говнокодом? Вот и связь. ;)

Чем его заменить?
Чтобы что-то заменять, надо сначала это что-то где-то применить. Я серьезных применений ноджсу не вижу.
 

Absinthe

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

Чтобы что-то заменять, надо сначала это что-то где-то применить. Я серьезных применений ноджсу не вижу.
Что-то чатообразное.
 

Ragazzo

TDD interested
fixxxer
Я серьезных применений ноджсу не вижу.
не вбрасывай :D кстати у них там все ок с памятью да? А то давно очень была проблема с memory leaking, и что-то ее решали, решали, и не понятно сделали ли все ок ? :S
Absinthe
ну да, как вариант классическое pub-sub.
 

fixxxer

К.О.
Партнер клуба
Что-то чатообразное
Только если знаний на что-то серьезное не хватает. Поиграться.
Для продакшен-применения - тот же pecl/[lib]event куда более пригоден, в целом - полный спектр вариантов от C + libev[ent], через twisted и eventmachine, до erlang.

Ragazzo
С памятью там всегда все будет плохо, потому что v8 - движок для браузеров (точнее, для одного браузера), в котором не нужна управляемость сборки мусора и обработка нехватки памяти.

Я, кстати, не вбрасываю, я на полном серьезе говорю, что рассматривать как пригодную для чего-либо кроме игрушек технологию node.js могут только дилентанты, которые кроме вебдева нихрена в жизни не видели.
 

Absinthe

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

fixxxer

К.О.
Партнер клуба
Да все он прекрасно понимает - он просто троллит. :D Ты его остальные посты почитай на его блоге.

Касаемо ноды, тут две стороны вопроса.

Первая - вопрос выбора.

Если бы не было ничего более высокоуровневого, и единственной альтернативой было бы написание на c/libev[ent], можно было бы смириться. Но добровольно использовать при асинхронном программировании язык, не поддерживающий корутины, - это надо очень любить javascript (хотя любить его особо не за что - хотя надо отдать должное, для спроектированного за неделю результат неплох, могло быть намного хуже). Если мы уж хотим не просто обертку над epoll/kevent, а что-то, с чем действительно удобно работать, нужны, как минимум, либо корутины, либо такую вещь (функциональщики скажут "о, монада!"), как await (см. C#). На самый крайний случай можно все изобразить на генераторах (тот же yield) и все получится вполне неплохо - в twisted ведь обошлись:

Код:
def main(reactor, username="alice", password="secret",
         strport="ssl:host=example.com:port=993"):
    endpoint = endpoints.clientFromString(reactor, strport)
    factory = protocol.Factory()
    factory.protocol = imap4.IMAP4Client
    try:
        client = yield endpoint.connect(factory)
        yield client.login(username, password)
        yield client.select('INBOX')
        info = yield client.fetchEnvelope(imap4.MessageSet(1))
        print 'First message subject:', info[1]['ENVELOPE'][1]
    except:
        print "IMAP4 client interaction failed"
        failure.Failure().printTraceback()
Предлагаю написать то же самое на node.js и охренеть с числа вложенных коллбэков (да, я в курсе, как легким движением руки коллбэки записать линейно, по сути - меньше писанины не станет). И, кстати, в php5.5 - с пришествием генераторов - можно будет спокойненько на pecl/event изобразить аналог твистеда.

Но все же есть некоторые упорот^W упорные люди, которые готовы мужественно создавать себе проблемы и не менее мужественно их решать - берут, например, какой-нибудь, хоспади прости, кофескрипт (это поделие заслуживет отдельного обсуждения=)), добавляют в него await, пишут компилятор, который преобразует все return-ы в колбэки, и называют это IcedCoffeeScript... Не, задача даже интересная сама по себе, тут даже медаль, наверное, надо, за упорство и стремление... Но как эту портянку (уже нагеренных компилятором колбэков) отлаживать, это никто не подумал^W^W^W отложили на будущее - ну а че их дело концепция. Но тут конечно никакой sourcemap толком не поможет.

Но, хорошо, допустим, с коллбэками мы смирились. Хорошо, есть у нас чат-сервер, приконнектился клиент, отправил запрос, он обрабатывается, и где-то внутри наших, конечно же, любовно слинеенных в chain of responsibility колбэках вылетел exception. И тут мы приходим к прекрасному вопросу - а как же его, вашу ж мать, словить, не потеряв контекст запроса, чтобы хоть отправить клиенту 500-ю, а не оставлять висеть висяком до пришествия tcp таймаута? А? Болт на. :) Пиши catch в каждом колбэке, что, конечно же, прямо таки соответствует смыслу и идеологии исключений. Не прошло и пары лет пиара ноджса как прогрессивной модной хипстерской технологии, майкрософтовское бабло освоили (выбросив к чертям заодно все posix-функции и сделав невозможной банальную демонизацию без написания сишного экстеншена) - к версии 0.8 выкрутились, придумали костыль под названием domains - в которые, опять же, ручками-ручками, надо обернуть каждый реквест. Удобно, че.

Ну и про майкрософт. Когда только вышел node.js 0.1, я быстренько для теста наваял простенький аналог fpm-а с мастером и префорк-воркерами, и был даже в некотором восторге - с одной стороны, все как обычно - вот posix-функции, вот сокеты, вот форк, и не надо рутинной фигни писать типа управления памятью, про винду, конечно, никто не думал, ведь действительно, на кой она черт кому нужна на серверах? Ну потом прискакал с чемоданом баблища microsoft, которому надо чего-то модного и хипстерского присунуть в свои студии, а то один ентерпрайз а это уже не модно - сразу же, ой, стала важна кроссплатформенность, как же мы без винды то жили, гребушки-воробушки. И начали обеспечение кроссплатформенности с того, что просто выкинули на мороз все posix/pcntl-врапперы, возможность передачи дескрипторов деткам - да и вообще, какой нафиг форк, это же не-кросс-платор-мен-но, товарищи! Ну вот потому (сколько там еще у нас лямов осталось? на датацентр хватает? на перекупить разработчиков соляриса хватает? вау, так о чем я) вот потому мы щас выпилим все, а к следующему билду - ну как фишка ляжет. Придумали в итоге кастрат под названием "кластер" (лол), который нифига не умеет вплоть до того, что даже классическую схему "запуститься рутом - детачнуться - забиндиться на 80-й - дропнуть рута - расфоркаться детками" сделать до сих пор штатного способа нет.

Это все было первое. :)

Второе - это вот эта вся хипстота. Асинхронно это быстро, вон апач медленный, потому что там эти, как их, форки, а вот nginx быстрый, потому что там... этот, ну вася, помнишь нам на парах информатики рассказывали - конечный автомат, во! И вот с таким суждением о вещах суют это куда попало. CMS на nodejs, блог на nodejs, да вашу мать. Понятно, что нечего на придурков смотреть, но всеь hype создан в основном благодаря им. Притом что тот же твистед много лет уже как был, только про него на хабрах мало писали, видимо.
 

Absinthe

жожо
Значит основные претензии к ноде из-за языка?
Ну и привязке к винде.

yield в JS появился 7 лет назад, но вот браузерами не поддерживается за исключением FF.

Второе - это вот эта вся хипстота.
А почему это проблема ноды? С таким же успехом можно обвинить PHP из-за того, что его используют новички с соответсвующим качеством кода.
 

fixxxer

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

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

Второй момент к проблемам ноды не имеет отношения, просто надо понимать, что она популярна не благодаря каким-то техническим преимуществам, а из-за массовой рекламы среди чудаков в очочках. Это и к mongodb, кстати, относится.

yield в JS появился 7 лет назад, но вот браузерами не поддерживается за исключением FF.
Ну, yield в питонах просто потому что единственный вариант (твистед же не таскает с собой свою реализацию питона), а если уж таскаем с собой v8 со своими патчами, так фигли await туда не добавить? Видимо, не осилили. :)
 

fixxxer

К.О.
Партнер клуба
Относится в смысле (по аналогии) не проблем монги, но массового неадекватного отношения к :)

1) тоже пихают куда не надо (не для eav и документов, а вместо РСУБД, потому что не осилили SQL)
2) mongodb is web scale :)
 

Absinthe

жожо
Посмотрел решения на Python и Ruby для работы http/websocket сервера с базой:
Twisted - запросы к СУБД синхронные. Можно извратиться и держать пул в соседних потоках.
Tornado - в 3 версии выпилили mysql в отдельный проект (torndb), который не хотят развивать.
EventMachine: em-mysql - 4 years ago.
Про Erlang говорить не хочу - по виду пролог, а у меня на последний острая аллергия в области ануса.

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

fixxxer

К.О.
Партнер клуба
Очевидно, что для работы с базой и вообще любым внешним ресурсом в рамках FSM нельзя использовать существующие синхронные библиотеки.
 

Absinthe

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

fixxxer

К.О.
Партнер клуба
а ты поищи питоновские врапперы на libdrizzle - она совместима с mysql-протоколом и там есть асинхронное апи
 
Сверху