Не правды ради, а токмо говновоза для

16 views
Skip to first unread message

Fedor Panasenko

unread,
Feb 10, 2012, 4:40:46 AM2/10/12
to cnc-d...@googlegroups.com
В тему NodeJS и прочих интересных и перспективных технологий в продакшене:
http://blog.safeshepherd.com/post/12175941935/how-one-missing-var-ruined-our-launch

Aleksey Derkach

unread,
Feb 10, 2012, 4:43:21 AM2/10/12
to cnc-d...@googlegroups.com
Тю, так это же javascript.

10 февраля 2012 г. 11:40 пользователь Fedor Panasenko
<fpana...@gmail.com> написал:


> В тему NodeJS и прочих интересных и перспективных технологий в продакшене:
> http://blog.safeshepherd.com/post/12175941935/how-one-missing-var-ruined-our-launch
>

> --
> Вы получили это сообщение, поскольку подписаны на группу Coffee'n'code Donetsk.
>
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу cnc-d...@googlegroups.com.
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу cnc-donetsk...@googlegroups.com.
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/cnc-donetsk?hl=ru.
>

Roman Bolgov

unread,
Feb 10, 2012, 4:48:22 AM2/10/12
to cnc-d...@googlegroups.com
для предотвращения таких косяков уже придумали JSLint и JSHint, все IDE и популярные текстовые редакторы их поддерживают. Парни ССЗБ в общем.

2012/2/10 Fedor Panasenko <fpana...@gmail.com>
В тему NodeJS и прочих интересных и перспективных технологий в продакшене:
http://blog.safeshepherd.com/post/12175941935/how-one-missing-var-ruined-our-launch

Roman Bolgov

unread,
Feb 10, 2012, 5:24:20 AM2/10/12
to cnc-d...@googlegroups.com
Слабенький вброс. Парни явно не понимают какую технологию они используют и какие приняты стандарты использования этой технологии:

On top of that, again, our system does some extensive session checking (for security), and so as upset users logged in and out on different tabs, there were a ton of “Unauthorized” errors bubbling up (that muddled any attempt to see if real errors were being hit). 

Молодцы, че, в single thread кидать exception на каждый чих, при том что во всех мануалах для начинающих описано что в ноде используется стандарт CommonJS, а стандарт CommonJS предписывает не делать throw ошибке, а передавать её первым параметром в функцию callback(либо функции обработчику события)

Yes, I should have load testing, but I wouldn’t feel secure that it would catch the race condition that had ensued.

Поймать race condition в *однопоточном* приложении, где каждая функция выполняется, по факту, последовательно(не определен лишь порядок выполнения), нужно тоже неслабо так постараться.

I’m not an expert in JavaScript, but let me explain it as best I can (or maybe see here).  In JavaScript, you declare variables either in the function scope or the global scope (with some intricacies on walking up the scope chain for declaration / reference until global scope).  When I created initial without using var, it walked up the scope chain until it quickly reached global scope and created a global variable initial

А изучать технологию или язык перед тем как её использовать уже не модно, да? Для "не экспертов", которые неспособны с одно взгляда на исходники увидеть пропущеный var (число которых стойко держится около отметки 99.999%) давным давно придумали линтеры, о чем я писал ранее.

3\5

2012/2/10 Roman Bolgov <bol...@gmail.com>

Andrey Kutejko

unread,
Feb 10, 2012, 6:02:13 AM2/10/12
to cnc-d...@googlegroups.com


10 февраля 2012 г. 12:24 пользователь Roman Bolgov <bol...@gmail.com> написал:

Слабенький вброс. Парни явно не понимают какую технологию они используют и какие приняты стандарты использования этой технологии:

On top of that, again, our system does some extensive session checking (for security), and so as upset users logged in and out on different tabs, there were a ton of “Unauthorized” errors bubbling up (that muddled any attempt to see if real errors were being hit). 

Молодцы, че, в single thread кидать exception на каждый чих, при том что во всех мануалах для начинающих описано что в ноде используется стандарт CommonJS, а стандарт CommonJS предписывает не делать throw ошибке, а передавать её первым параметром в функцию callback(либо функции обработчику события)


Exception -- это быстрый способ прекратить заниматься хуитой в глубоко вложенном вызове. Если на каждом уровне проверять if (error) то можно потратить много времени на ненужные действия. Если в CommonJS так заведено, то это только проблемы CommonJS.
 
Yes, I should have load testing, but I wouldn’t feel secure that it would catch the race condition that had ensued.

Поймать race condition в *однопоточном* приложении, где каждая функция выполняется, по факту, последовательно(не определен лишь порядок выполнения), нужно тоже неслабо так постараться.


На однопроцессорной машине тоже весь код выполняется последовательно, а поди ж, тоже гонки бывают.
Гонка будет если lock и unlock разнесены в разные функции. А если не разнесены, то это, очевидно, синхронный код, и -- надевай трусы/снимай крестик.
 
I’m not an expert in JavaScript, but let me explain it as best I can (or maybe see here).  In JavaScript, you declare variables either in the function scope or the global scope (with some intricacies on walking up the scope chain for declaration / reference until global scope).  When I created initial without using var, it walked up the scope chain until it quickly reached global scope and created a global variable initial

А изучать технологию или язык перед тем как её использовать уже не модно, да? Для "не экспертов", которые неспособны с одно взгляда на исходники увидеть пропущеный var (число которых стойко держится около отметки 99.999%) давным давно придумали линтеры, о чем я писал ранее.


Изучать и критиковать -- это вовсе не разные полюсы. Можно "совмещать". Ну так судя по твоим цифрам этих "не экспертов" -- 99.999%. Что какбе намекае.
 
3\5


Roman Bolgov

unread,
Feb 10, 2012, 6:38:22 AM2/10/12
to cnc-d...@googlegroups.com
Exception -- это быстрый способ прекратить заниматься хуитой в глубоко вложенном вызове. Если на каждом уровне проверять if (error) то можно потратить много времени на ненужные действия. Если в CommonJS так заведено, то это только проблемы CommonJS.

в JSe есть более элегантные способы прекратить заниматься хуитой в глубоко вложенном вызове чем на каждом уровне if(error) писать или кидать Exception.

На однопроцессорной машине тоже весь код выполняется последовательно, а поди ж, тоже гонки бывают.
Гонка будет если lock и unlock разнесены в разные функции. А если не разнесены, то это, очевидно, синхронный код, и -- надевай трусы/снимай крестик.

Если lock и unlock вообще будут присутствовать в JS коде - то это знак что устав не соответствует монастырю.
 
Изучать и критиковать -- это вовсе не разные полюсы. Можно "совмещать". Ну так судя по твоим цифрам этих "не экспертов" -- 99.999%. Что какбе намекае.

"не эксперты" это люди неспособные с одного взгляда найти в файле произвольного размера пропущенный var, это задача линтеров и IDE. В других языках похожая ситуация - ты не сможешь быстро взглянув на исходник сказать - скомпилируется он или нет. Критиковать - писать на javascript используя java style и жаловаться что javascript не java?
 

2012/2/10 Andrey Kutejko <andy...@gmail.com>

Andrey Kutejko

unread,
Feb 10, 2012, 7:08:26 AM2/10/12
to cnc-d...@googlegroups.com


10 февраля 2012 г. 13:38 пользователь Roman Bolgov <bol...@gmail.com> написал:

Exception -- это быстрый способ прекратить заниматься хуитой в глубоко вложенном вызове. Если на каждом уровне проверять if (error) то можно потратить много времени на ненужные действия. Если в CommonJS так заведено, то это только проблемы CommonJS.

в JSe есть более элегантные способы прекратить заниматься хуитой в глубоко вложенном вызове чем на каждом уровне if(error) писать или кидать Exception.


Это какие же? Просвети.
 
На однопроцессорной машине тоже весь код выполняется последовательно, а поди ж, тоже гонки бывают.
Гонка будет если lock и unlock разнесены в разные функции. А если не разнесены, то это, очевидно, синхронный код, и -- надевай трусы/снимай крестик.

Если lock и unlock вообще будут присутствовать в JS коде - то это знак что устав не соответствует монастырю.
 

Ололо. Ну не лок, а, например, выборка соединения к базе из пула этих соединений. Ну и вообще любой ограниченный ресурс.
 
Изучать и критиковать -- это вовсе не разные полюсы. Можно "совмещать". Ну так судя по твоим цифрам этих "не экспертов" -- 99.999%. Что какбе намекае.

"не эксперты" это люди неспособные с одного взгляда найти в файле произвольного размера пропущенный var, это задача линтеров и IDE. В других языках похожая ситуация - ты не сможешь быстро взглянув на исходник сказать - скомпилируется он или нет. Критиковать - писать на javascript используя java style и жаловаться что javascript не java?
 

Нету никаких style. Есть только ветвления, циклы и подпрограммы. Мне в школе рассказывали.
Exception -- базовый механизм языка и если у commonjs с этим проблемы, то на лицо утечка абстракции. Это плохая, негодная библиотека.

Alex Litovchenko

unread,
Feb 10, 2012, 10:03:44 AM2/10/12
to cnc-d...@googlegroups.com
Нету никаких style. Есть только ветвления, циклы и подпрограммы. Мне в школе рассказывали.

Хватит это тер... (зачеркнуто) троллить Рому своей хунтой. Тем более что рассказывали неправильно.
Циклов, ветвлений и подпрограмм тоже нет.
Есть условные и безусловные переходы которые имеют возможность,
при желании, записать текущий EIP/RIP в стек, а потом его достать.

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


Andrey Kutejko

unread,
Feb 10, 2012, 10:21:48 AM2/10/12
to cnc-d...@googlegroups.com
Ок. Троллить не буду.  А про "более элегантные способы" всё же хотел бы услышать. А то я растерялся прям.
Неужели в JavaScript есть setjmp/longjmp или call-cc?

10 февраля 2012 г. 17:03 пользователь Alex Litovchenko <alex.lit...@gmail.com> написал:

Alex Litovchenko

unread,
Feb 10, 2012, 10:29:58 AM2/10/12
to cnc-d...@googlegroups.com
2012/2/10 Andrey Kutejko <andy...@gmail.com>

Ок. Троллить не буду.  А про "более элегантные способы" всё же хотел бы услышать. А то я растерялся прям.
Неужели в JavaScript есть setjmp/longjmp или call-cc?

Вопрос про setjmp/longjmp и call-cc в проекции на JS (даже серверный) это УЖЕ троллинг :)
Не смей даже заикаться, что ты не знаешь в каких языках платформах ЕСТЬ setjmp/longjmp/call-cc
и зачем они там.


Andrey Kutejko

unread,
Feb 10, 2012, 10:31:46 AM2/10/12
to cnc-d...@googlegroups.com
Ну Рома ж сказал, что есть способы. Вот мне и любопытно. Может я чего не знаю?

10 февраля 2012 г. 17:29 пользователь Alex Litovchenko <alex.lit...@gmail.com> написал:
35229-000037-130ee93c79ee23eb921ad136029b7b97.jpg

Roman Bolgov

unread,
Feb 10, 2012, 11:17:08 AM2/10/12
to cnc-d...@googlegroups.com
Это какие же? Просвети.

Более элегантные по сравнению с киданием исключений в однопоточном приложении, естественно, мы же, надеюсь о JS говорим?

Использование библиотек для control flow(они позоволяют быстро выйти из любой задницы с остановкой последующих функций) если код на callback или запуск и обработка нужного эвента если код на ивентах. Использования механизма Exception в качестве транспорта для сообщений о том что пользователь не найден в базе данных...кхм...странно.   

Exception -- базовый механизм языка и если у commonjs с этим проблемы, то на лицо утечка абстракции. Это плохая, негодная библиотека.

CommonJS это стандарт которого желательно придерживаться если нет желания получать дополнительный геморрой и оставаться без обеда. И если уж на то пошло то Exception это базовый механизм языка для проброса исключительных ситуаций. Отсутствие пользователя в базе или неверный логин/пароль это не исключительная ситуация.



2012/2/10 Andrey Kutejko <andy...@gmail.com>
Reply all
Reply to author
Forward
0 new messages