Pull to refresh

Comments 117

Вот интересно, эта статья — частитично реклама sublime или мне показалось? Аж 2 упоминания что только он спас.
Я открыл «babel-core» в VIM, потом перезагрузил компьютер, потому что сочетание Ctrl-C не работало, затем открыл «babel-core» в Sublime.

kill из соседней консоли не пробовали?) Первый раз такое слышу что бы комп перегружали из-за vim в котором ctrl-c не сработал.
Ну а по делу, интересно обстоят ли так дела только с npm или в composer, pip, gem(подставить нужное) та же история. Спасибо за статью
Блин надо было читать теги)
А чего его рекламировать? Те, кто пробовали открыть несколько метров текстовыми редакторами, знают как печально это может закончится. И сублайм — один из немногих, кто это стойчески переносит. Комментарии автора внесли свою каплю юмора «для тех, кто в теме», не более.
Когда я писал коммент, я еще не видел тегов )
2002-й год, Visual Fox Pro 6.0, Windows 98, 16 МБайт ОЗУ
Спокойно открывается текстовый файл на 100 МБайт в режиме редактирования.

Напьются смузи, напрограммируют мышкой, а потом у людей текстовый редактор зависает…
nano на ARM девайсе с 32 метрами оперы… Спокойно ковыряюсь в гигабайтных логах одной кривой софтины…

Более того, я делаю то же самое на MIPS, и… в VIM!
// просто оригинальный автор статьи загадил вим кучей бандлов-плагинов, которые имеют ту же самую, описанную самой статье проблему :)

Я полагаю, что шутка тут была про то, что он не смог выйти из VIM, а не что VIM завис.
UFO landed and left these words here
Я позанудствую…
Исходник здорового человека крайне редко больше 1000 строчек. Поэтому у меня вим настроен со всеми возможными свистоперделками и работает быстро пока не попадется такая вот загогулина.

А потом да — если резет не нажать — день программирования потерян.
Да ладно! А что, там нет плагина автосохранения?
Я не нажимал Ctrl+S уже лет 7 — с тех пор, как пересел на Intellij IDEA. Всё само сохраняется. День программирования никогда не будет потерян.
Это была ирония — вим висит, работать невозможно.
Notepad++ вот кто стоически переносит что угодно, когда угодно и где угодно.

Не всегда. Мне случалось nodejs-ом резать файлы на куски вменяемого размера...

Нет, Notepad++ дамп sql на 500 мб или чуть больше он уже отказывается открывать (он выкидывает какое-то ограничение на размер файла). А вот FAR (total comander и т.п.) открывает все мгновенно и в куда большем размере.

Он самый. Дамп. У меня — просто рушится.

image

Хоть сам пользуюсь Notepad++ но sublime с большими файлами справляется лучше (быстрее в том числе).
Сайблайм на файлах 50-100+ МБ тоже становится на колени.
UFO landed and left these words here

Вим открывает гигабайтные файлы. Так что странно, что так вышло.

Плагины и бандлы — подсветка синтаксиса и автодополнения… Если привычным движением открыть что-то непривычное — можно очень долго ждать.
А вы разве не знали, что из vim можно выйти только перезагрузкой? Иначе он будет пищать и всё портить:-)
Это было утро. Я еще не проснулся и принял сей материал за чистую правду. Вот и набросился. Каюсь.
Случай с express поразил меня больше всего.
Само собой :) Даже в команде Ember сидят не настолько прагматики, чтобы тащить Британнику ради одного определения. Но с чувством юмора у автора все круто — такое еще надо было придумать :D
Т.е. вы поверили в Гая Фиери и Британнику и вас поразил только авто-твит?
Здесь бывают не только js-разработчики. :)
Я вот, лично, поверил вообще всему, и реально пошел эту фотку искать.

В это реально несложно поверить. Такое ощущение что 95% процентов ноды делают конченные малолетние идиоты, причем специально делают не так как все, чтобы посердить папу. А 95% потребителей ноды и библиотек — это неизбалованные нормальным языком и библиотеками PHP-шники.

Потому что если человек хоть на чем-нибудь кроме PHP писал в жизни, он реально не поймет предложение писать сервер на ноде. Ну реально — это же самое дно из всего что есть вообще (кроме может PHP того же)
Сколько обиды, в одном то комментарии :)
Есть обида, да. Потому что мне приходится с этим говном пересекаться, из-за фронтенд-тулчейна (webpack, typescript, npm, и т.п.). Там деваться особо некуда. Сервер на C#.

И я в шоке от инженерной культуры вокруг node.js. Например, прилетают мажорные релизы библиотек с critical-багами. NPM недетерменировано раскладывает модули по папкам. Все это весит сотни мегабайт, и отжирает гигабайты памяти просто чтобы собрать 1 мегабайт JS-ников. Авторы библиотек ломают совместимость API по три раза за год. Я уж молчу что в NPM-2 папки в винде стереть нельзя было из-за длины имен, спасибо хоть это починили.

На фоне .NET-а (в котором тоже местами адище) — от node волосы на жопе шевелятся. А если уж JS-ники склеить — уже проблема, то я не могу себе даже преставить что творится у тех кто сервера на ноде делает.

есть такое, я вот так привык к культуре кода в руби-сообществе, что прям офигел, когда открыл исходник какого-то npm пакета, а там ни одного коментария =)

Ага. Я хоть и JavaScript-ер, не люблю микромодули. Благо, пока ничего большого писать на nodejs не случалось, пока могу всё просматривать. А у нас-то во front-end'e всё по другому, чисто, аккуратно, без внешних зависимостей (требования — возможность работы в интранате), и в продакшене — пожато в небольшое количество файлов.

В качестве шутки и не очень:
npm install -g rimraf

Прекрасно справляется с удалением своих же длинных папок)
Осмелюсь вступиться за PHP.

Современный PHP это уже не тот язык, что был в далёком 2008. Здесь тоже есть кровавый энтерпрайз (привет, Симфони!) с декомпозицией всего и вся, с поддержкой статической типизации и хорошим пакетным менеджером.

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

Экосистема в целом напоминает «зону» Стругацких: поверх враждебной для пользователя среды выросла защита в виде Symfony и иже с ними, но когда приходится выходить за ее пределы, даже старые прожженые сталкеры нет-нет да и напорются на какой-нибудь нежданчик.
Почему даже статья про JS вызывает холивары про пых?)
Я абсолютно согласен и не отрицаю, что у языка есть существенные недостатки, связанные с тяжёлым грузом легаси, но всё ведь ненастолько печально, как описываете это вы и в своей нише ему сложно найти конкурентов :)

К слову, о нежданчиках. В самом начале своей карьеры, помнится, я читал об этом нюансе, но случев «неправильного использования» было крайне мало и эта подробность забылась.

> $var['smth'] = null;
> isset($var['smth']) // false
> array_key_exists('smth', $var) // true

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

Удивительно как много людей не читают чужих сообщений.

Наверное, нужно повторить.

> В самом начале своей карьеры, помнится, я читал об этом нюансе

Но за давностью ознакомления сей нюанс вылетел из головы.
Вроде бы, уже не первый год на Хабре, но всё не устаю поражаться русскоязычному коммьюнити. Все такие напыщенные и высокомерные, что стоит поделиться кусочком своих знаний (https://habrahabr.ru/post/307248/#comment_9738110) или раскаяться в незнании и забывчивости (https://habrahabr.ru/post/307822/#comment_9753478), как тебя тут же забросают фекалиями всех сортов и попытаются выставить дурачком.
> В самом начале своей карьеры, помнится, я читал об этом нюансе

Но за давностью ознакомления сей нюанс вылетел из головы.

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

«Два часа» из моего сообщения, на самом деле, длились не более 20 минут (хотелось указать на драматизм ситуации с неочевидностями PHP), и, конечно же, я полез читать документацию. Нестоит осуждать людей, если не знаете всей их истории.
А зачем вы дали ссылку на «PLEASURE BOAT ‘’HERCOGS JĒKABS”»?
Лол, вот правильная ссылка — http://php.net/manual/en/function.array-key-exists.php
В буфере оказалось не то, что я планировал.

btw Вентспилс — очень приятный город.
Вы считали, что isset() и array_key_exists() — это одна и та же функция?
Нет, что вы. Я не ожидал, что isset() вернёт false на установленное (хоть и в null) значение.
А Вас не смущает, что в SQL-е null != null? Конечно нет, это же описанно и Вы уже на это натыкались.

К чему это я? К тому, что все имеет свои нюансы и свои тонкости, вот для выявления этих аспектов и нужно читать книги и документацию.
Описание нюансов и тонкостей в документации не отменяет и не оправдывает ущербности дизайна и исполнения.
«Особенность языка», я так-же убил час, понимая разницу между empty() и !isset()
А можно было почитать документацию и потратить на 90% времени меньше…
Не очень актуальны, на самом деле.

Те неконсистентности, которые можно было исправить, не ломая обратную совместимость, исправили в PHP7.
Остальное большей частью либо исправлено на уровне фреймворков/библиотек (что, кто-то вручную пользуется curl?), либо просто вкусовщина.

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

jakobz Хм, и что же не дно по вашему? Был как-то не коференции, где главный разработчик aviasales сказал, что они перешли на python с rails (потому-что каждый запрос кушал 300Мб памяти!!!), и когда его спросили почему не node.js, он сказал что node это г… но. Это не вы случаем были:)?
запрос? не может быть. Если мы берем допустим puma, то много воркеров живут в достаточно адекватных рамках оперативной памяти.
Ну реально — это же самое дно из всего что есть вообще

Достаточно аргументировано. Могу предположить, что найдется часть людей, которые будут скидывать статью в аргументы, так как тоже поверят, но не проверят.


Скрытый текст

95% НОДЫ ДЕЛАЮТ КОНЧЕННЫЕ МАЛОЛЕТКИ-ИДИОТЫ
95% ПОТРЕБИТЕЛЕЙ НОДЫ ЖРУТ ГАВНО
НОДА САМОЕ ДНО — НУ РЕАЛЬНО
РЕАААЛЬНOOО000!!!!111
image

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

Рынок решил, что и так сойдёт.

Если мы заглянем в зависимости эмбера, то увидим библиотеку под названием glimmer. Сама эта библиотека весит 95KB (или 95% кода эмбера)

Не 95%, а (95/112*100) = 85%

На самом деле, забавно и круто (читал эту статью в оригинале). Кстати, автору тоннами сыплются комментарии по поводу того, что хоть где-то стоило упомянуть, что это стеб (ну, кроме Гая Фиери частично) — впрочем, может тогда не было бы так весело :)
У меня в проекте используется express и никакого yummy в зависимостях и в node_modules в помине нет!

Взял на себя смелость проверить доводы в статье.
express (последний релиз 2 месяца назад) не ставит yummy.
Поставил руками yummy (последний релиз 8 месяцев назад) — в нём нет like-tweet.js
Поставил ember — он не ставит glimmer (или я не тот ember поставил), окей, ставлю glimmer (релиз год назад) — в нём нет brittanica
Окей, смотрим babel-core. Есть вот такой коммит: https://github.com/babel/babel/commit/f36d07d30334f86412a9d2771880cb566a82a9b6
Что-то похожее на правду. Открываем историю файла: https://github.com/babel/babel/commits/f36d07d30334f86412a9d2771880cb566a82a9b6/packages/babel-core/src/api/node.js
Берём самую первую версию файла: https://github.com/babel/babel/blob/3ef9bffcc240e60085fbb120de07d884448fbea3/packages/babel-core/src/api/node.js
В нём нет картинки.
Итого — ни один довод из статьи я не смог подтвердить.
Судя по всему статья — просто штука, не принимайте всерьёз :)

В этом и есть смысл статьи — взять и заморочиться. Открыть наконец папку node_modules и посмотреть что в ней происходит. Чтобы история с left-pad больше не повторилась.
Ну а кто с этим спорит — я про то, что и более поверхностного взгляда на статью достаточно, чтобы понять, что это стеб (для тех, кто использует эти инструменты, конечно же, хотя тема с твитом ну очень уж очевидная в любом случае).
И как это помогло бы с left-pad? Это как-то помогло бы предовратить какого-то левого разработчика удалить опубликованный пакет с npm?

Как говорится, за такие шутки...

Меж зубов бывают промежутки? :)
Ну есть коммит, где картинка таки добавляется. Может thejameskyle просто поддержал шутку? :-)
Меня только твиттер смутил. Что можно лайкать твиты без авторизации.
Блин, а ведь в начале статьи я правда думал, что это правда.
я думал, что это правда до тех пор, пока в комменты не посмотрел
Все самое интересное — в тегах :)
Мобильная версия хабра не показывает теги. =/
А еще раз я как-то открыл зависимость из node_modules и у меня ноут сгорел.
Главное, что брат от этого не умер.
читая статью, задумался о переходе на go вместо node, но потом все встало на свои места
Блин, а меня даже тэги не стразу убедили, что это шутка… :(
На небольшом проекте, который мы сейчас разрабатываем

$ ls -l frontend/app/node_modules/ | wc -l
840
Прозреваю npm@3.x. Но все равно дофига.
npm настолько страшная вещь, что я тоже подумал, что это не шутки всё. Только про эмбер не поверил. Не, ну он же на фронтенде, там не может быть столько бесцельных байтов. Если бы не это, я бы принял статью за чистую монету.
I wanted to start a simple hello world app for AngularJS 2.

When I followed the instructions in the official quickstart the installation created 32,000 files in my project.

I figured this is some mistake or I missed something, so I decided to use angular-cli, but after setting up the project I counted 41,000 files.

Where did I go wrong? Am I missing something really really obvious?

Источник. И это только фронтенд.
Ну это ж всё не тянется в браузер. Там стандартный набор адского количества зависимостей для разработки. Знаем, проходили. В статье же написано так, что мол 85% всего эмбера (из 112гзипнутых килобайт) — это энциклопедия британика.
Эмбер модульный, всё вполне можно было бы теоретически свалить на систему сборки и тесты, которые до клиента не дойдут, но при этом всё равно присутствуют в поставке эмбера по воле разработчиков.

Реальный пример: bower и многие другие пакеты npm имеют набор зависимостей, которые в определённый момент содержат пакет «wordwrap», который выставляет папку tests. А там рассказ Бертрана Рассела «In Praise of Idleness».

Apparently this module is quite popular with other NPM authors. I have 202 copies of «In Praise of Idleness» by Bertrand Russell on my computer

Занавес.
Бриттаника спроектирована не по-нодовски. Нужно было для каждого слова сделать отдельный модуль. Чтобы тот, кому нужно определение только одного слова, зависел только от модуля с этим словом.
UFO landed and left these words here
Такой вариант модуля должен быть доступен в качестве альтернативы простому. На тот случай, если кому-нибудь нужно вывести определение слова, сделав все слова кликабельными.
Как же мучаются люди без F3 в Total Commander.

А где скриншоты с glitter? В оригинале были.

в оригинале много чего еще было

Вот я об этом же — какой-то очень куцый перевод, и не так смешно получилось.

Из части про Ember куда-то пропал забавный кусок истории команд:


$ tree node_modules/ | count
zsh: command not found: count
$ tree node_modules/ | lines
zsh: command not found: lines
$ tree node_modules/ | wc -lines
wc: illegal option — i
usage: wc [-clmw] [file …]
$ tree node_modules/ | wc -countlines
wc: illegal option — o
usage: wc [-clmw] [file …]
$ man wc
$ tree node_modules/ | wc -l
  292
Шутки-шутками, но на мой взгляд (хотя я в node.js/npm скорее новичок) примерно так дела и обстоят. Возникла у меня на днях не гипотетическая а реальная необходимость уменьшить размер node_modules. Начал с разбора зависимостей модуля request, нашёл и картинки, и папки test и «толстые» .md файлы и кривые .npmignore. Не понимаю, почему нет какой-нибудь штатной опции минификации для деплоя
Это же не для деплоя в любом случае. Не могу представить людей, которые заливают весь node_modules в продакшн.
не совсем понял что значит «Это же не для деплоя в любом случае»? Node.js крутится на сервере, обрабатывает запросы, использует в своей работе ряд модулей из node_modules. Есть Backend-As-A-Service платформа(ы), которые предоставляют разработчику возможность использовать node.js, но налагают различные ограничения и квоты, в частности на общий размер кодовой базы, вместе с node_modules. Вот и приходится извращаться, в ручном режиме просеивать. Может я какой-то очевидный простой путь не знаю, поделитесь если есть?
Эм, в статье по-моему говориться про npm для фронтэнда (как минимум Ember)? Драма в том, что если ты не используешь node.js на бэкэнде, c npm все равно придется иметь дело или, еще хуже, с каким-нибудь bower. Ну и там вообщем-то знаешь какие файлы тебе нужны и выдергиваешь их из node_modules.
С бэкэндом: захотели ноду — нате, тут я считаю все честно.
Возникла у меня на днях не гипотетическая а реальная необходимость уменьшить размер node_modules.

Связанная с чем?
К тому же npm дублирует зависимости всегда устанавливая их в подкаталоги. Очень сильно увеличивает размер корневого node_modules, и порой, при очень большой вложенности делает невозможной установку модулей под win. Кому такая бредовая идея могла придти в голову?
В общем по этому поводу добавили npm dedupe — удаляет дубли и может уменьшить глубину вложенности каталогов node_modules.

Говорят, замысел был в том, чтобы иметь возможность каждому модулю поставить нужную ему версию зависимости, если разные модули зависят от разных версий одного и того же модуля. Получилось — что получилось…
Вложенность, кстати, не мешает, npm как-то справляется. А вот штатными средствами винды потом хрен удалишь.

Ну это хороший и понятный замысел, и, например, LuaRocks тоже это умеет, но он держит в папках с именем модуля подпапки с номером версии.
Я начал свое расследование, установив пакет «babel-preset-es2015». Этот пакет позволяет двадцати с лишним веб-разработчикам в мире писать на новом, худшем варианте JavaScript, который никто в их команде не знает.

Тонко подмечено. К сожалению, это не шутка. И пользуются этим недоразумением куда больше 20 человек
Я не пойму, а каким образом я закачивая express делаю что-то с твитом?
Твитор должен быть в консоли npm? или как?
Бывает. Я в только что устанновленном Wordpress в SQL базе в таблице wpha_options нашел 2 мегабайта текстового мусора. К этой таблице постоянно идут 100500 запросов как от самого Вордпресса, так и от разных плагинов. Теперь ясно почему вордпресс так тормозит.
Ну разберись там со своим мусором, потому что после установки WP, таблица wp_options весит ~ 96 KiB
UFO landed and left these words here

Простили бы, если бы она была под спойлером.

UFO landed and left these words here

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


Например, в https://habrahabr.ru/info/help/other/ есть пункт про хабраэтикет. Базовая вещь, описанная ещё в netiquette, — уважайте чужое время. Как думаете, хорошо ли грузится 1.9 MiB при пингах ~1 s по GPRS?

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

Большинству не нравятся картинки где что-то мелькает и дергается. Офигеть, да?
А можно для непонятливых, что вы хотели донести? оно мелькает и я не могу уловить смысл. Редко нпм использую что бы понять)
Only those users with full accounts are able to leave comments. Log in, please.