LINUX.ORG.RU
ФорумTalks

О тяжелой жизни жаваскриптеров

 ,


7

0

Великолепная драма развернулась сегодня вокруг npm и его публичного репозитория.

Один разработчик держал на npm гору своих модулей, один из которых по случаю назывался так же как и какой-то никому не нужный instant messenger: kek kik. Юристы компании, владеющей этим IM, потребовали убрать модуль, а после того как автор отказался, нажаловались администрации NPM. Те струхнули и убрали модуль сами.

Автор обиделся и удалил в отместку все остальные свои пакеты, среди которых затесался 10-строчный скриптик для добавления к строке слева нулей или пробелов. От этого скриптика, как оказалось, зависят тысячи проектов, включая node и babel. И так как npm любит ходить в интернет, тысячи проектов немедленно сломались.

Админы npm испугались еще раз и вручную удаленный модуль восстановили, опять же не советуясь с автором. А освобожденные имена от других пакетов оказались заняты подозрительными лицами (неймспейсов нет, имена раздаются по принципу first come-first serve)

Мне кажется, это прекрасно.

★★★★★

Последнее исправление: Midael (всего исправлений: 2)

Кстати, а все посмотрели этот офигительный код: https://github.com/azer/left-pad/blob/master/index.js

module.exports = leftpad;

function leftpad (str, len, ch) {
  str = String(str);

  var i = -1;                 /* о боже, этот код такой влажный, что у меня аж с монитора закапало */

  if (!ch && ch !== 0) ch = ' ';

  len = len - str.length;

  while (++i < len) {
    str = ch + str;           /* здесь я заплакал от хайлоада */
  }

  return str;
}

Серьезно, вся эта экосистема говна зависит от такого вот ублюдочного кода?

kawaii_neko ★★★★
()
Ответ на: комментарий от stevejobs

Причем для гитхаба достаточно указать источником строку «username/repo» и всё

И он будет инсталлировать последний коммит из мастера. Хороший совет, да.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Те же централизованные яйцы

А есть вообще не централизованные? apt-get, CPAN, pip, gem... что там еще?

которые можно проабузить.

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

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А есть вообще не централизованные? apt-get, CPAN, pip, gem... что там еще?

Нормальных и рабочих я не видел. Речь в принципе не о централизации, а об абузоустойчивости + удобстве. Почему npm так быстро и тупо слился - ХЗ.

Таки мне всё еще нужны грязные подробности.

Ты о чем вообще, Пятачок? Какие локальные сервисы? У народа Continuous Integration стоит, там нормальное дело ставить свежак с интернетов. Наверняка это в первую очередь и посыпалось.

Vit ★★★★★
()
Ответ на: комментарий от Vit

У народа Continuous Integration стоит, там нормальное дело ставить свежак с интернетов.

в зале смех, переходящий в истерику.

vostrik ★★★☆
()
Ответ на: комментарий от Vit

Речь в принципе не о централизации, а об абузоустойчивости + удобстве

Хм. А я было подумал, что речь идет о локальных зеркалах.

У народа Continuous Integration стоит, там нормальное дело ставить свежак с интернетов

А, окей. Тогда я не понимаю, чего народ так возбудился из-за «broken builds and failed installations». Подумаешь, CI сломался.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А, окей. Тогда я не понимаю, чего народ так возбудился из-за «broken builds and failed installations». Подумаешь, CI сломался.

npm not trusted же, пердаки срезонировали. IMHO автор который заделистил свои поделки - красфчег.

Vit ★★★★★
()
Ответ на: комментарий от EXL
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *leftpad(char *str, unsigned int len, char ch){
        char *buf;
        unsigned int i;
        buf = (char *) malloc ((len + 1) * sizeof(char));
        for(i = 0; i < len; i++) buf[i] = ch;
        return strcat(buf, str);
}

int main(){
        printf("%s\n", leftpad("test", 7, '_'));
        return 0;
}
> ./leftpad
_______test
saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

То есть, ты считаешь, что так правильно, да? С утеканием памяти и записью в 8-байтовый буфер 12 байт?

Deleted
()
Ответ на: комментарий от leave

Доктор, вы определитесь сначала, кто там сосет, ci или npm

Vit ★★★★★
()
Ответ на: комментарий от saahriktu

В питоне это как-то всё логичнее выглядит

>>> ch='_'
>>> max_len = 10
>>> s='test'
>>> x = ch*(max_len - len(s)) + s
>>> x
'______test'
>>> s='test1234567890'
>>> x = ch*(max_len - len(s)) + s
>>> x
'test1234567890'

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

Можно более человечески:

def left_pad(string, length, char=' '):
    with_max_padding = char * length + string
    return with_max_padding[-length:]

In [1]: left_pad('test', 10, '---')
Out[1]: '------test'
In [2]: left_pad('test!', 10)
Out[2]: '     test!'
holuiitipun
()
Ответ на: комментарий от holuiitipun

Можно еще проще:

In [1]: 'test'.rjust(10, '-')
Out[1]: '------test'

In [2]: 'test!'.rjust(10, '-')
Out[2]: '-----test!'
cheerfulboy
()
Последнее исправление: cheerfulboy (всего исправлений: 1)
Ответ на: комментарий от EXL

Да как угодно, лишь бы работало. Проблема-то здесь не в коде.

// ES2015
function leftpad(str, len, ch = ' ') {
  return ch.repeat(len) + str;
}

// IE friendly
function leftpad(str, len, ch) {
  ch = (undefined !== ch) ? ch : ' ';
  return Array(len + 1).join(ch) + str;
}
nekonymous
()
Ответ на: комментарий от tailgunner

А есть вообще не централизованные?

А дело не в централизации. Дело в том, что нужно жестко отделять процесс получения зависимостей от собственно процесса сборки. Люди, которые по умолчанию эти два процесса слепили воедино (авторы cargo), они ... кхм, как ты там писал ... «я рекомедую пользователям носить дробовик заряженным и направленным в промежность, и смакуя предвкушение порохового запаха и воплей, наблюдаю за ними»

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

жестко отделять

Я имею ввиду, что сборка должна оперировать *только* локальными файлами, и ни в коем случае в сеть не ломиться. Ей должно быть абсолютно безразлично, откуда эти локальные файлы взялись.

Если хочется облегчить пользователю высасывание зависимостей из облачков, это высасывание должно быть реализовано отдельным инструментом (как насчет списка url, на которые тупо дается wget ?). Результатом высасывания должна быть более-менее плоская директория с tarballs: так, чтобы пользователю было легко и просто тарболлы эти прикопать, и тем самым от облачков отвязаться на 100%.

Manhunt ★★★★★
()

Вывод: нельзя пользователям разрешать самостоятельно удалять пакеты, пока эти пакеты участвуют в зависимостях.А то они понаудаляют, а претензии потом к репозиторию будут.

Wizard_ ★★★★★
()
Ответ на: комментарий от Vit

для дева - отличный :) Сразу видишь что посыпалось с апгрейдом, и адаптируешься.

Ну я-то не на npm, а на джаве - так умилительно смотреть на анскиледов, для которых переход на новую джаву - это судный день. Кое-кто все еще на Java6. А все почему? Потому что люди не гоняют свои проекты на early access версиях джавы. Например, я сейчас собрал Java9 из исходников, и кусок проекта стал тормозить - изучаю как исправить это.

stevejobs ★★★★☆
()

Этапять!

Отличная организация труда, рабочего процесса и прочего.

Camel ★★★★★
()
Ответ на: комментарий от uin

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

Shadow ★★★★★
()

Неужели кто выкладывает пакеты состоящие из 10 строчек и доб нули к строке ? Жабаскрипт кодеры совсем обленились ?

Jopich
()
Ответ на: комментарий от Manhunt

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

Так отделяй.

Люди, которые по умолчанию эти два процесса слепили воедино (авторы cargo)

Можно еще обвинить авторов apt-get, что они слепили процесс установки и процесс получения зависимостей. Но можно просто сделать локальное зеркало. Что тебе ближе - выбирай сам.

tailgunner ★★★★★
()
Ответ на: комментарий от Jopich

There’s a package called isArray that has 880,000 downloads a day, and 18 million downloads in February of 2016. It has 72 dependent NPM packages. Here’s it’s entire 1 line of code:

return toString.call(arr) == '[object Array]';

There’s a package called is-positive-integer (GitHub) that is 4 lines long and as of yesterday required 3 dependencies to use. The author has since refactored it to require 0 dependencies, but I have to wonder why it wasn’t that way in the first place.

vostrik ★★★☆
()
Ответ на: комментарий от vostrik

Кстати код если я правильно понимаю написан отнюдь не по фэн-шую ? :)

Jopich
()
Ответ на: комментарий от uin

Ну и в чем же суть?

JS не знаю, но подозреваю что строки там immutable. Как и в соседе по ембеду Lua. Складывание с пробелом надолго уйдёт в себя из-за переаллокаций и переливаний из пустого в порожнее в цикле.

d_a ★★★★★
()
Ответ на: комментарий от vostrik

Остаётся только авторизацию прикрутить и взымать плату за кол-во запросов/символов.

Kilte ★★★★★
()
Ответ на: комментарий от stevejobs

для дева - отличный :) Сразу видишь что посыпалось с апгрейдом, и адаптируешься.

Не угадал. Будешь каждый день чинить изменения вместо того чтобы заниматься разработкой.

Vit ★★★★★
()
Ответ на: комментарий от int13h

Оно точно умеет собирать пользователей в одной комнате? Мне очень нравится, но не нравится быть убитым из за тормозов. Перепишите кто-нибуть на нативном. Эту игру ждет успех.

Esteban_Garcia
()
Ответ на: комментарий от EXL

Ого, значит это не по невнимательности сделано, а по банальному неосиляторству и тотальной технической безграмотности :D

Сначала конструируешь отдельную строчку из нужного числа пробелов, а потом return padding + original_string

kawaii_neko ★★★★
()
Ответ на: комментарий от tailgunner

А есть вообще не централизованные? apt-get,

Нюанс аптгета в том, что репозиторий может быть у меня на тостере

а вот npm?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.