В сообществе разработчиков на языке JavaScript, использующих пакетный менеджер NPM (https://www.npmjs.com/), произошёл (http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/) инцидент с необоснованным захватом (https://medium.com/@azerbike/i-ve-just-liberated-my-mod...) прав на один из модулей, размещённых в репозитории NPM. В последующем, реакция автора захваченного модуля привела к нарушению работы ряда крупных проектов, в том числе Node (https://nodejs.org/en/) и Babel (https://babeljs.io/).
Конфликт развернулся вокруг размещённого в репозитории NPM модуля kik (https://github.com/starters/kik), предоставляющего инструменты для быстрого создания новых проектов на языке JavaScript. С автором модуля связался юрист компании, развивающей программу для мгновенного обмена сообщениями Kik (http://www.kik.com/) и потребовал переименовать модуль, так как его имя пересекается с зарегистрированной торговой маркой. Автор модуля (Azer Koçulu) отказался, так как имя модуля основано на термине "Kickstart", функциональность не имеет ничего общего с обменом сообщениями, а сервис Kik.com запущен уже после создания модуля kik.
После отказа юрист обратился к администраторам репозитория NPM, которые не стали вступать в конфликт и передали права на модуль компании Kik Interactive Inc. Автор модуля потерял веру в открытость проекта NPM и удалил все свои разработки из NPM. Проблема в том, что Azer Koçulu является достаточно известным разработчиком, подготовившим более 250 модулей для NPM. Так как многие модули используются в различных проектах, из-за потери зависимостей возможность сборки этих проектов при помощи NPM была блокирована.
Особенно существенные проблемы возникли из-за удаления модуля left-pad (https://github.com/azer/left-pad), который выполняет простейшую функцию добавления лидирующих пробелов для доведения строки до заданного размера и содержит всего 11 строк кода (https://github.com/azer/left-pad/blob/master/index.js). Среди зависимых от left-pad проектов оказались Node, React и Babel.
Удалением ряда известных модулей воспользовались (http://www.drinchev.com/blog/alert-npm-modules-hijacked/) предприимчивые деятели, которые разместили в NPM собственные подставные модули с именами, совпадающими с удалёнными модулями. Не исключено, что эти модули совершают скрытую вредоносную активность. Неработоспособность (https://github.com/azer/left-pad/issues/4) многих крупных проектов подтолкнула администраторов NPM совершить второе злоупотребление - они восстановили left-pad в репозитории, вопреки решению автора модуля.Итогами инцидента стали размышления о степени независимости NPM и необходимости создания действительно свободной альтернативы. Кроме того, привлечено (http://www.haneycodes.net/npm-left-pad-have-we-forgotten-how.../) внимание к порочности практики необдуманного использования модулей, в условия продемонстрированной простоты захвата контроля над разработкой и вхождения в зависимость от решений автора модуля, который может удалить свой модуль и нарушить необходимую для сборки цепочку зависимостей. Вопросы также вызывает целесообразность использования простейших модулей, написание функциональности которых занимает несколько минут. Например, модуль isArray (https://www.npmjs.com/package/isarray) содержим всего одру строчку кода, но используется в 72 других пакетах и бешено популярен, например, только в течение февраля он загружен более 18 млн. раз.
URL: https://news.ycombinator.com/item?id=11348798
Новость: http://www.opennet.me/opennews/art.shtml?num=44104
Взять и отобрать.
Так и надо хипсторам.Развели, панимаешь, тут модно,стильно,молодежно...
Пакетный менежер по обезьяньи. Кто следующий? Питон? Go? Ruby? Rust? Кто там еще местное подобие пакетного менеджера притаскивает?
> Пакетный менежер по обезьяньи. Кто следующий? Питон? Go? Ruby? Rust? Кто там
> еще местное подобие пакетного менеджера притаскивает?И правда, лучше по старинке, ручками зависимости собирать.
Или, на худой конец, велосипедным скриптом автора софтины.
админы npm прогнулись под копираста и сломали всю инфраструктуру. сами виноваты.
Сломали уверенность в жепосрипте, теперь надо весь проект npm заменять на человеческую альтернативу без копирастических шавок в администрации и с подписями пакетов.
Кто ж его тогда оплачивать будет на регулярной основе?..PS А вообще JS в топку надо бы запихать целиком.
Кого оплачивать? Альтернативу npm? А кто npm оплачивает?
> админы npm прогнулисьДа уж, подарок ещё тот получился. А если к ним придут со словарной атакой -- сразу из окон прыгать начнут или сперва всё раздадут кому попало?
что нового? в 3-м рейхе людей убивали потому что "исполняли приказ". добро позаловать в реальный мир
Да собственно ничего нового совершенно. Я лишь говорю уважаемым коллегам играющим в дартаньяна, что "тут дартаньянов немае, все в этом самом по самую маковку".
> привела к нарушению работы ряда крупных проектов, в том числе Node и Babel.и правильно, мы вот держим свои либы при себе и обновляем руками
Вот, теперь я понял почему в Enterprise не используют maven и все библиотеки не меняют версии годами, если в них нет критических уязвимостей.
Если есть уязвимости тоже не меняют.
> в Enterprise не используют maven и все библиотеки не меняют версии годамиАх если бы. ;)
Ага, только Maven вылез из IBM, который самый что ни на есть enterprise.
И ещё имеет неплохие возможности настройки, в части версий и их обновлений, и не потрёт вам библиотеку если она вдруг пропала в репозитории :)
У нас в ынтырпрайзе Gradle, с нами что-то не так? И да, чтоб девы не тянули левого г-на с инторнетов есть Nexus, Artifactory, etc.
>> Enterprise не используют mavenЧто за глупость. Более чем использует.
Хваленый JavaScript и его инфраструктура - не нужен, что мы и видим на этом примере.
"Из жизни хомячков"Особенно порадовала "зависимость от модуля в 11 строк"
Это ты не дочитал про модуль из 1 строки с 18 млн загрузок.
ну может там строка из 65535 символов ?
> ну может там строка из 65535 символов ?
var toString = {}.toString;module.exports = Array.isArray || function (arr) {
return toString.call(arr) == '[object Array]';
};
Проблема не в зависимости, а в источнике модуля.
В блокчейне держать нужно?
А ведь Столлман предупреждал.
> Сорь, npmjs.com - это про бизнес. А бизнес всегда на стороне правообладателей.
> Если GNU/Бомжи сами не в состоянии поддерживать свою инфраструктуру для распространения
> пакетов, то кто им виноват?Автор пакета kik - не правообладатель?
Кто первым зарегистрировал трейдмарк и отвалил за это бабла с целью защитить свой бизнес - тот и правообладатель.
> Кто первым зарегистрировал трейдмарк и отвалил за это бабла с целью защитить
> свой бизнес - тот и правообладатель.Марка зарегистрирована в узкой области, которая не касается кикстарта проектов. Азер их правильно послал, и суд признал бы его правоту. Но NPM перепугались и сдались без сопротивления. Закон нарушили они.
> и отвалил за это бабла с целью защитить свой бизнесНе смешите мои тапочки своей доверчивостью.
PS: поскольку в халупах вряд ли лекции по "ИС" читают -- тот, кто проводил экспертизу проекта ТЗ, спорол лажу и, по-хорошему, должен бы за это быть наказан. Другое дело, что с трёхбуквенными обозначениями хлопот при проверке по уму не оберёшься... ну так и не брался бы.
Хрен там.В европе продаются женские трусики Microsoft. И как вы думаете, кто правообладатель, Microsoft?
А вот и нет - области не пересекаются, поэтому MS идет лесом.
> В европе продаются женские трусики Microsoft. И как вы думаете, кто правообладатель,
> Microsoft?А вот этот линукс ставят на/под стиральные машинки, да еще и обзывают "микро&cофтным":
http://www.source-center.de/forum/attachment.php?s=bfa6e5a5d...
Отчего тогда CPAN, PECL, RubyGems, PyPi коммерческими не стали?
Оттого, что проектами руководят некоммерческие организации? Опять же, кто вам виноват, что Joyent Inc. и прочие занимаются развитием проекта Node.js? Поднять и поддержать некоммерческую инфраструктуру кишка тонка?
> Оттого, что проектами руководят некоммерческие организации? Опять же, кто вам виноват,
> что Joyent Inc. и прочие занимаются развитием проекта Node.js? Поднять и
> поддержать некоммерческую инфраструктуру кишка тонка?Ну я поднимал и поддерживал. И _такого_ мы ни разу за десять лет себе не позволяли.
Вы всерьёз не понимаете, что защищать тут нечего, т.к. продолб примерно такого же плана, что у нас в альте не так давно с той самой лицензией был, только с гораздо более серьёзными _прямыми_ последствиями? Или раз околоSun, надо набрасываться на амбразуру?
Я всерьез не понимаю, чего многие раскудахтались, что NPM плохой, если знали, что проект поддерживается коммерческой организацией. Раз организация коммерческая - следовательно, она будет преследовать свои интересы в первую очередь. Или наивные розовые слоники считали, что если в NPM можно хостить щвабодный код, то им до самой смерти жаваскрипта будут попки подтирать?
> Раз организация коммерческая - следовательно,
> она будет преследовать свои интересы в первую очередь.Вы хоть раз вообще пытались эти самые интересы организации преследовать, не говорю уже балансировать? Да что там -- хотя бы осознать и сформулировать, что организации хорошо, что плохо, а что -- смерти подобно?
Это модель бизнеса "наш клиент всегда виноват". GoDaddy этим славится. Большинство компаний при обвинениях третьей стороны хотя бы исходят из презумпции невиновности клиента.Имеет смысл завалить NPM претензиями на имена, якобы пересекающиеся с торговыми марками. И утопить эту ошарашенную контору пока они ещё больше вреда не принесли.
> Это модель бизнеса "наш клиент всегда виноват". GoDaddy этим славится. Большинство компаний
> при обвинениях третьей стороны хотя бы исходят из презумпции невиновности клиента.В святейшей демократии, что в северной америке, законы не позволяют мелким компаниям рисковать попасть под судебный наезд, до окончания суда большинство не доживёт, т.к. дорого, вот и выходит что ради хоть какой-то возможности заниматься своим делом они вынуждены выбирать ту или иную линию поведения в таких случаях. По сути дилема тут в основном - быть под юрисдикцией святейшей демократии и надеяться что тебя не затронут такие претензии, быть готовым к долгим судам и тяжбам ( иметь штат юристов и деньги ) либо менять юрисдикцию.
Red Hat в 2000 году были большой компанией, или мелкой? Они уже тогда обеспечивали защиту клиентов от наездов потенциальных правообладателей.
Ага, и Нострадамус предсказал.
Всегдя удивляло: обычный проект на node.js тянет в зависимости 50-70 разных пакетов. Это ж охренеть! Когда за ними всеми следить?
> Всегдя удивляло: обычный проект на node.js тянет в зависимости 50-70 разных пакетов.
> Это ж охренеть! Когда за ними всеми следить?ненадо было за ними следить пока было доверие npm
Ну так node.js относительно молодой проект, столько граблей еще впереди. А учится на чужом опыте они не хотят.
Ещё один школьник слышал звон? mirror.yandex.ru это дебиян или центось?
Это арч
> Ещё один школьник слышал звон?Если Вы школьник и слышали звон, вовсе не обязательно об этом сообщать здесь.
> mirror.yandex.ru это дебиян или центось?
Вероятно, федора (судя по tigro).
>> mirror.yandex.ru это дебиян или центось?
> Вероятно, федора (судя по tigro).Ну точно не debian. В debian nginx версии 1.8.1 нету.
А tigro - это tigro.info имеется в виду?
> А tigro - это tigro.info имеется в виду?Угу.
в чём проблема nginx-репу подключить?
Какая взаимосвязь между node.js, npm и mirror.yandex.ru?
Сколько я сталкивался с теми, кто делает что-то с нодой они этим и не парятся, раз кое как запустилось то всё нормально, шевелиться начнут только когда что-то отвалится.
Что там мне говорили: релизы либ не нужны, требование версии либы не нужно? И в сишечку тянут свои холёные хипстерские ручонки. Сидите в своем js, пилите однодневки, и не суётесь в нормальную разработку.
это вы еще, батенька, руби на рельсах не видели -- там обычное дело иметь неколько сотен внешних модулей
> это вы еще, батенька, руби на рельсах не видели -- там обычное
> дело иметь неколько сотен внешних модулейК сожалению и Rust туда-же будет...
Утилита leftpad на Си: gopher://sdf.org/0/users/saahriktu/filez/utils/leftpad.c .
>gopherСкажи, а быть сумасшедшим весело?
Вы так говорите, как будто это я сам один пилю такие проекты как gofish, geomyidae, gophernicus, bucktooth, pygopherd, OverbiteFF (плагин к Firefox'у),... и т.д., а также сам своими руками впилил поддержку gopher'а в curl и lynx, поднял полторы сотни gopher серверов по всему миру, и сам единолично всё это юзаю. http://gopher.floodgap.com/overbite/relevance.htmlУ gopher'а своя ниша. В т.ч. и среди юзеров lynx'а. Конечно, http в lynx'е тоже текстовый, но многие сайты, разумеется, заточены совсем не под текстовые консоли, а потому перегружены лишними элементами. gopher ресурсы, наоборот, выглядят красиво и аккуратно.
>полторы сотни gopher серверовслишком много
Эм. А что это FF из коробки gopher не открывает? Обычный lynx и то умеет, а тут такой жирный браузер - и никакой тебе поддержки...Эдак они ftp следующим шагом удалят. Скажут мол, древний стандарт, с кодировками проблема, преимуществ перед http нет - выкидываем.
Да, из коробки не умеет. Потому и существует такой плагин - https://addons.mozilla.org/ru/firefox/addon/overbiteff/ .
> Эм. А что это FF из коробки gopher не открывает? Обычный lynx
> и то умеет, а тут такой жирный браузер - и никакой
> тебе поддержки...Был же шум не так давно, что выбросили в плагин.
> Эдак они ftp следующим шагом удалят. Скажут мол, древний стандарт, с кодировками
> проблема, преимуществ перед http нет - выкидываем.Когда его популярность упадёт до сотни-другой серверов на весь мир -- удалят.
Забавно и не более. На практике всем от домохозяек до крутых разработчиков операционных систем удобнее использовать обычный web (ftp, http, https). А хороших дизайн и динамическое скрытие элементов (реакции на события) сильно повышают удобство чтения и использования. Если так нужно избавиться от "лишнего" проще просто отключить js в браузере.
Напоминаю, что я говорил про lynx, в котором JavaScript'а и так нет. И не в случаях шрифтов с символами 8x8 пикселей на 8K мониторах.На практике даже в консоли 120x30 даже одни только шапки и меню многих сайтов расползаются на много страниц, накрывая собой всё остальное. А уж если вебдизайнер предполагал, что всё это будет скрыто, а потому можно для удобства юзера заодно добавить первое, второе, пятое, десятое,... выискивать в этих дебрях полезный контент не так уж и просто.
http://saahriktu.org/tmp/scr1458824527.png , http://saahriktu.org/tmp/scr1458824582.png , http://saahriktu.org/tmp/scr1458824657.png , http://saahriktu.org/tmp/scr1458824732.png , http://saahriktu.org/tmp/scr1458824783.png , http://saahriktu.org/tmp/scr1458824816.png , http://saahriktu.org/tmp/scr1458824882.png , http://saahriktu.org/tmp/scr1458824930.png .
> и динамическое скрытие элементов (реакции на события) сильно повышают удобство чтения и использования.Да-да, об этом твердят чуть ли не с двухтысячных. А на деле давно пихают js повсюду, куда только можно – вон, даже умудряются подсветку синтаксиса на js сделать, чтобы каждый посетитель грузил под это дело жирную либу и "подсвечивал" сам.
При этом "несогласные" без JS вместо простого текста получают кукиш.> Забавно и не более. На практике всем от домохозяек до крутых разработчиков
Ага, а мейл-листы разработчики читают преимущественно в браузере …
И вообще, что за привычка говорить за "всех"? Тайный Император Всея Земли?Хотя
https://www.opennet.me/openforum/vsluhforumID3/107265.html?n...
> nekrolik
> Win10 x64, Sumatra PDF - открылся за 1-1.5 сек.,ясненько, понятненько.
Будь то админы, разработчики и т.д. они носят с собой ноуты. А не смотрят доку на тех же машинах что и обслуживают. Факт в том, что кое-кто занимается бессмысленной работой откапывая труп мертвой технологии, которой есть адекватная замена. Не хотите js? Ну и бог с вами, сделайте сайт без него и открывайте. Вообще чистый .txt файл напишите и на сервер положите, эффект будет тот же.
Глядя на hp.com и пытаясь выдернуть из него нужные дрова под нужную ось мысль одна - "лучше бы txt положили". Ибо было бы, действительно, проще.
> Глядя на hp.com и пытаясь выдернуть из него нужные дрова под нужную
> ось мысль одна - "лучше бы txt положили". Ибо было бы,
> действительно, проще.+100 500
> Будь то админы, разработчики и т.д. они носят с собой ноуты. А
> не смотрят доку на тех же машинах что и обслуживают.Причем тут это?
> Не хотите js? Ну и бог с
> вами, сделайте сайт без него и открывайте. Вообще чистый .txt файл
> напишите и на сервер положите, эффект будет тот же.Ну, вот демка:
http://pygments.org/demo/
http://pygments.org/demo/4167137/код парсится один раз, при добавлении. Генерирует
<span class="cp">#define CAP_BSET (void *)1</span>
<span class="cp">#define CAP_PI (void *)2</span>
А цвета и т.д. идут через CSS.И получаем:
Сама страничка работает прекрасно без JS. Там даже стили без него менять можно
http://pygments.org/demo/4167137/?style=trac
Поддерживаются больше сотни форматов, выхлоп не только в хтмл, но и tex, jpg или терминал …И в чем профит от того же самого, с помощью JS, на стороне клиента, как сейчас модно стало во всяких бложиках? Разве что не молодежно, да …
> Вообще чистый .txt файл
> напишите и на сервер положите, эффект будет тот же.Прикольно – нагромоздили со временем прямо таки гигантскую кучу костылей и подпорок по названием "молодежный веб". Да так, что поддерживать нормальный веб-движок стало делом далеко не тривиальным – остались лишь гугл, мозилла (далеко не мелочь, с парой сотен миллионов зелененьких в год), эппл и МС.
Изобрели супер-пупир джиты, оптимизации в браузерах, обмазались расширениями (вспомним флэш) и т.д. и т.п.А в реальности любая обвязка на простом питоне и гтк/qt даст фору "вээб приложениям" и по потреблению ресурсов и по общей шустрости и по простоте написания и поддерживания.
$ curl gopher://sdf.org/0/users/saahriktu/filez/utils/leftpad.c
curl: (7) Failed to connect to sdf.org port 70: Время ожидания соединения истеклоИнтересно, как удивятся админы, если я к ним пойду просить открыть порт для gopher :)
> curl gopher://sdf.org/0/users/saahriktu/filez/utils/leftpad.c > leftpad.c% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 537 0 537 0 0 666 0 --:--:-- --:--:-- --:--:-- 671
> $ curl gopher://sdf.org/0/users/saahriktu/filez/utils/leftpad.c#include <stdio.h>
#include <string.h>
#include <stdlib.h>char *buf;
char *leftpad(char *str, unsigned int len, char ch){
unsigned int i;
buf = (char *) malloc ((len + 1 + strlen(str)) * (sizeof(char)));
for(i = 0; i < len; i++) buf[i] = ch;
return strcat(buf, str);
}int main(int argc, char **argv){
if(argc < 4){
printf("usage: leftpad string length char\n");
return 1;
}
unsigned int al = (unsigned int) atol(argv[2]);
printf("%s\n", leftpad(argv[1], al, argv[3][0]));
free(buf);
return 0;
}
> sizeof(char)ясно, понятно.
atol, strlen, sizeofchar, strcat …
*facepalm.jpg*
О таких мелочах как глобальная переменная на ровном месте или отсутствие каких-либо проверок и говорить не стоит.
программисты с опытом, объясните пожалуйста: зачем писать функцию, которую нельзя вызвать дважды? зачем автору кода переменная buf нужна именно глобальная, а не s = leftpad(...); printf("%s\n", s); free(s); ?
Несмотря на малый размер кода, это ещё то legacy. Но, рабочее. Сначала появился просто демонстрационный набросок функции для примера, к которому был прикручен main() кусок для теста. А потом я левой пяткой допилил до полноценной утилиты и пофиксил пару указанных багов. Поскольку, строку нужно возвращать, то почистить буфер можно только после его использования. А это в main(). Вот для этого и пришлось вынести указатель. Можно было этого и не делать, но, видите ли, утечка памяти.
> программисты с опытом, объясните пожалуйста: зачем писать функцию, которую нельзя вызвать
> дважды? зачем автору кода переменная buf нужна именно глобальная, а не
> s = leftpad(...); printf("%s\n", s); free(s); ?Это Java-ненавистники экономят память я так думаю.
$ ./leftpad 'crash please' -1 ' '
Segmentation fault
После устранения наследия прошлого код стал таким:
// v0.2 by Saahriktu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char **argv)
{
if (argc < 4) {
printf("usage: leftpad string length char\n");
return 1;
}
long i, al = atol(argv[2]);
if (al < 0)
al = 0;
char *buf = (char *)malloc((al + 1 + strlen(argv[1])) * (sizeof(char)));
if (buf == NULL)
return 1;
for (i = 0; i < al; i++)
buf[i] = argv[3][0];
printf("%s\n", strcat(buf, argv[1]));
free(buf);
return 0;
}
> (sizeof(char)www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
---------
> 2 The sizeof operator yields the size (in bytes) of its operand
>
> 3 When applied to an operand that has type char, unsigned char, or signed char, (or a qualif ied version thereof) the result is 1.--------
> strcat(buf, argv[1]));man malloc
> The malloc() function allocates size bytes and returns a pointer to the allocated memory.
> The memory is not initialized.
1) Зато так будет работать и в нестандартных средах. 2) И? Это тоже самое, что и, например, "int var;" не инициализирует переменную. Поэтому перед использованием надо записывать данные, да. Данные записывается в цикле. Хотя, я тут уже ещё улучшил, заменив цикл на
memset(buf, argv[3][0], al);
> 2) И? Это
> тоже самое, что и, например, "int var;" не инициализирует переменную. Поэтому
> перед использованием надо записывать данные, да.А ноль в конце buf, для/перед strcat, Александр Сергеевич добавлять будет?
А, Вы про это. Для надёжности добавить можно, да. Другой вопрос, что при использовании glibc наехать на эти грабли практически крайне сложно.
> Другой вопрос, что
> при использовании glibc наехать на эти грабли практически крайне сложно.Ну, во первых – вы уж определитесь, "работать в нестандартных ситуациях" или "при использовани glibc" ;)
Во-вторых, насчет граблей – проще, чем вы думаете:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc < 4) {
printf("usage: leftpad string length char\n");
return 1;
}
long i, al = atol(argv[2]);
if (al < 0)
al = 0;
const char *rakes = "This is Rake-Field!!";
char *rakes_buf = malloc(strlen(rakes) + 1);
if (rakes_buf) {
strcpy(rakes_buf, rakes);
free(rakes_buf);
}char *buf = (char *)malloc((al + 1 + strlen(argv[1])) * (sizeof(char)));
if (buf == NULL)
return 1;
for (i = 0; i < al; i++)
buf[i] = argv[3][0];
printf("%s\n", strcat(buf, argv[1]));
free(buf);
return 0;
}Выхлоп
# gcc leftpad2.c -o leftpad -O3 -std=c99 -Wall -Wextra
% ./leftpad 'h' 10 '1'
1111111111ke-Field!!h
Перечесал код до версии 0.6. В соседнем комментарии.
> Перечесал код до версии 0.6. В соседнем комментарии.Вот для того чтобы не заниматься несколько дней причёсыванием люди и импортят сторонние либки, которые уже давно причёсаны, типа NPM-овского leftpad.
Основная ошибка этого кода - это то, что он решает какую-то задачу, заметно отличающуюся от задачи которую решал lefp_pad на js.Исходный left_pad вписывал строку в поле заданной ширины, заполняя пространство слева указанными символами (или пробелами). Представленный код добавляет в начало строки заданное количество символов.
Ещё есть главная ошибка - представленный код на C не будет правильно работать в случае если для кодирования текста используется UTF-8.
Вообще-то, первая версия кода потому и была такой кривой, что являлась портом оригинального кода на JavaScript. Он именно это - добавление n-е кол-во заданного символа в начало строки - и делал. Единственное отличие - добавление символа '\n' в конец строки при выводе. И, да, работа с юникодом не предполагалась изначально.
Хех. Присмотрелся к оригинальному коду ещё раз. Да, проморгал один момент, но разница не велика. p = w - l; - где, w - требуемая ширина, l - длина строки, p - кол-во добавляемых символов. При текущей реализации это p не вычисляется, да, за него сразу воспринимается аргумент.
Вот эта версия теперь работает как положено:
// v0.6 by Saahriktu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char **argv)
{
long int a2, al;
char *buf;
if (argc < 4) {
printf("usage: leftpad string width char\n");
return 1;
}
a2 = atol(argv[2]);
al = a2 - strlen(argv[1]);
if (al < 1) {
printf("%s\n", argv[1]);
return 0;
}
buf = (char *)malloc((a2 + 1));
if (buf == NULL)
return 1;
memset(buf, argv[3][0], al);
buf[al] = '\0';
printf("%s\n", strcat(buf, argv[1]));
free(buf);
return 0;
}
> У gopher'а своя ниша. В т.ч. и среди юзеров lynx'а. Конечно, http
> в lynx'е тоже текстовый, но многие сайты, разумеется, заточены совсем не
> под текстовые консоли, а потому перегружены лишними элементами. gopher ресурсы, наоборот,
> выглядят красиво и аккуратно.Неужели где-то ещё есть web без js? Спасибо. Сегодня вечером обязательно посмотрю. Я-то думал, что оно мёртво, а оказывается ещё шевелится.
мах 150 сайтов на весь Ынтернет ... если это не мёртвое, то смерти нет вообще ...
Иметь протокол, который естественным образом фильрует контингент (просто браузером не зайдешь) - бесценно.
Жто заменитель девушек для ботанов с ЧСВ, чего бы они не говорили :) Так что "в гофер!" :)))
Развалилась чья-то маркетинговая фантазия.
А чо он на гитхабе библиотеки разместил? Забыл что ли историю с WhatsApp? Им самое место на savannah.gnu.org, раз он такой принципиальный.
весеннее обострение
http://left-pad.io/
> http://left-pad.io/Характерненько :)
> ## Can I buy an enterprise license?
> Yes. Email <> with your account and ABA routing numbers.
>http://left-pad.io/Спасибо, поржал. Ребятки оказывается с юморком. Особенно хорошо про третий квартал 17 года.
Походу надо в списке зависимостей проекта жёстко прописывать не только версию пакета, но и его контрольную сумму.
Guix?
Рано или поздно нечто подобное должно было случиться. Я фанат ноды, но эти проблемы с npm были вполне очевидны.
Юристы совсем обнаглели. Хочешь вредить людям и оставаться чистым перед законом? Становись юристом.
Лучше законотворцем.
Отойдя от темы "жавоменеджер провалился, амыжговорили!!111", за автора (пусть и семнадцатистрочников) очень обидно, когда вот так твоим вкладом в сообщество подтираются.
Пусть скажет спасибо, что с ним хотя бы разговаривать начали. В гитхабе(кстати, где он сейчас и держит свои пакетики) удаляют репозитории молча и без разбору по желанию правообладателей.
>Пусть скажет спасибо, что с ним хотя бы разговаривать начали.Разве? Вроде же точно так же отрубили. Просто, в отличии от гитхаба, у него была возможность ответить им асимметрично. :)
Ну и ответ привлек внимание.
Поспорю.
На одну нашу поделку подала репорт какая-то большая айтишная компания из англии, что бы им отдали бразды, мол название их и код их.
Репу сразу заблочили, да. Но не отдали. Всё что нужно было, это написать в гитхаб около буквально "не-а, мы не согласны", на что был получен ответ в стиле "ну поскольку ситуация неясная, репу разблокируем, а "истец" пусть предоставит вывод суда на этот счёт". Всё.
То есть позорные истории с WhatsApp и Qualcomm уже все забыли? Значит не так много денег было у той вашей "большой организации".
> Пусть скажет спасибо, что с ним хотя бы разговаривать начали. В гитхабе(кстати,
> где он сейчас и держит свои пакетики) удаляют репозитории молча и
> без разбору по желанию правообладателей.Из принципа ничего не читаем при регистрации?
https://help.github.com/articles/github-terms-of-service/
> GitHub in connection with any such claim, demand, suit or proceeding; provided, that GitHub
> (a) promptly gives You written notice of the claim, demand, suit or proceeding;
> (b) gives You sole control of the defense and settlement of the claim, demand, suit or proceeding (provided that You may not settle any claim, demand, suit or proceeding unless the settlement unconditionally releases GitHub of all liability); and
> (c) provides to You all reasonable assistance, at Your expense.https://help.github.com/articles/dmca-takedown-policy/
> Copyright Owner Sends A Notice. After conducting an investigation, a copyright owner prepares and sends a takedown notice to GitHub...
> GitHub Asks User to Make Changes..
> User Notifies GitHub of Changes. If the user chooses to make the specified changes, they must tell us so within the approximately 24-hour window. If they don't, we will disable the repository (as described in Step 6)...
> GitHub May Disable Access to the Content...
>User May Send A Counter Notice. We encourage users who have had content disabled to consult with a lawyer about their options. If a user believes that their content was disabled as a result of a mistake or misidentification, they may send us a counter notice...
> Copyright Owner May File a Legal Action. If a copyright owner wishes to keep the content disabled after receiving a counter notice, they will need to initiate a legal action seeking a court order
...> Конфликт развернулся вокруг размещённого в репозитории NPM модуля kik (https://github.com/starters/kik),
> предоставляющего инструменты для быстрого создания новых проектов на языке Ja.....
Вот интересено,
когда в бpayзерах появятся вcтpoeнные мeнeджepы js (вроде apt-js, yum-js, etc),
со всеми "плюxaми старших кoмpaдов": repami, цифровыми подписями и прочими поэтессами...???
> когда в бpayзерахЭто серверное.
>> когда в бpayзерах
> Это серверное.Эт-то, не совсем порядок:
- подгружаемые/запускаемые/.. js - скрипты из неведомо каких источников(похлеще Active-X и пр.)
- скрипты не сертефицированы ни в одной из гос. структур и/или ни одним из уполномоченных юр.лиц
- опять таки, встает ребром вопрос "монетизации":
1. права на вождения интepнетoфф
2. обязательно полис ОСИГО(ОСАГО) на 50,100, 1000 js - как на клиентской так и на серверной части
...
N... в порядке юмора.
Это просто праздник какой-то! ©
И всё это только ради того, чтобы какой-то копираст мог вводить npm install kik вместо npm install kik-messenger
Так этот копираст даже иска не предъявлял, npm сам любезно прогнулся, [!] дважды.
> И всё это только ради того, чтобы какой-то копираст мог вводить npm
> install kik вместо npm install kik-messengerСкорее всего, даже не так -- лоер тупо вбил в гугль и пошёл ковровой бомбардировкой cease'n'desist-ить.
this
тут прикол ещё в том, что новые средства разработки для броузеров Mozilla - основаны на node.js https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm
Драчек какой-то психанул. Просто бы узнал когда зареган этот kik, если не раньше чем его модуль, то написал бы про это на тематических ресурсах про опенсорс и ноде.жс. Они бы сами потом извинялись и бабло платили.P.S. возможность удалять что-то самому из нпм ввели относительно недавно. И зря.
Если автор против того, чтобы ты что-то из его творчества распространял, а ты продолжаешь, то может возникнуть юридический казус похлеще произошедшего.
> Если автор против того, чтобы ты что-то из его творчества распространял, а
> ты продолжаешь, то может возникнуть юридический казус похлеще произошедшего.Мда, вот такой вот опенсорс у тебя в голове?
> Если автор против того, чтобы ты что-то из его творчества распространял, а
> ты продолжаешь, то может возникнуть юридический казус похлеще произошедшего.Он распространяет в соответствии с лицензией выданной автором всем. Автор не может её обратно забрать и сказать что передумал.
> Драчек какой-то психанул. Просто бы узнал когда зареган этот kik, если не
> раньше чем его модуль, то написал бы про это на тематических
> ресурсах про опенсорс и ноде.жс. Они бы сами потом извинялись и
> бабло платили.
> P.S. возможность удалять что-то самому из нпм ввели относительно недавно. И зря.на каких таких тематических ресурсах писать? сегодня большинство посетителей таких ресурсов - это глупый планктон мнящий себя ит-шниками. у меня, вот, сегодня удалили тему на реддиде, в которой я написал, что у странички нет https аналога http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
> Драчек какой-то психанул. Просто бы узнал когда зареган этот kik, если не
> раньше чем его модуль, тоИ тебе, и автору новости выще сообщаю: в _торговых_марках_ приоритет не у "того, кто раньше", а у "того, кто раньше _зарегистрировал_".
Система работает на то, чтобы тот, у кого много денег, "зарабатывал" их ещё больше.
>инцидент с необоснованным захватом правТогда новость вводит в заблуждение. Можно было бы и исправить, а не писать желтизну. Не все тут юристы и знают законы юса.
Я тебе сообщаю. Торговая марка работает только в той сфере деятельности в которой она зарегистрирована. Цели у модулей разные, а значит могут иметь одно название.
> И тебе, и автору новости выще сообщаю: в _торговых_марках_ приоритет не у
> "того, кто раньше", а у "того, кто раньше _зарегистрировал_".Тем не менее формальные стопоры (как вот "широко известное" уже существующее) есть.
> Система работает на то, чтобы тот, у кого много денег, "зарабатывал" их
> ещё больше.Это да, вся т.н. "интеллектуальная собственность" сильно напоминает ещё один пузырь для расчёта дутого ВВП одной страны, прошляпившей даже то, что в это было поверили другие...
осталось понять какое отношение торговая марка сосальной сети имеет к имени модуля на жабаскрипе. этак и к oracle.h домотаться можно.
Я задаюсь вопросом: что лучше, "изобретать велосипед" или использовать готовый из 4-х строк? )
Развивать стандартную библиотеку Javascript.
> Развивать стандартную библиотеку Javascript.и сколько времени, по-вашему, заняли бы все прения по включению этого кода в стандарт? - то-то, а людям работать надо!
Да я, в общем, не против. Работайте, страдайте. Только на Javascript потом не пеняйте, лады?
Array.isArray давно уже включен включен в стандарт
https://developer.mozilla.org/en/docs/Web/JavaScript/Referen...
> Array.isArray давно уже включен включен в стандарт
> https://developer.mozilla.org/en/docs/Web/JavaScript/Referen...А ещё стоит напомнить про существование полифилов.
Пошли, однако, "программисты" - четыре строки у них уже велосипед.
> Пошли, однако, "программисты" - четыре строки у них уже велосипед.это дубляж кода. такое даже в Питоне порицается
К чему приводит бездумное следование паттерну можно посмотреть на примере этой новости. Неужели никогда не слышали такую замечательную житейскую мудрость как "все хорошо в меру"?
>бездумное следование ритуалу можно посмотреть на примере этой новости.Можешь благодарить --> [+]
Вы превратно понимаете "питоновый" принцип DRY, рекомендую перечитать PEP20 вдумчиво.
В вопросе уже есть ответ. Когда некая функциональность реализуется несколькими сотнями строк обычного кода или парой десятков хитрого кода, то лучше оформить ее в отдельный модуль. Если же она может быть реализована без проблем рядовым программистом в десятке строчек, то ее лучше встраивать в основной код. Также хорошим вариантом явлется собрать несколько десятков таких простеньких, но часто нужных функций и оформить в один модуль.
http://left-pad.io/
Еще одни пижоны коварные!## Can I buy an enterprise license?
Yes. Email root@… with your account and ABA routing numbers.
Блин, плохо. Че делать теперь?
> Блин, плохо. Че делать теперь?Лучше переписать проект под другой язык )0))
Мораль сей басни такова: прогибаться под корпорации и посылпть нахй мейнтейнеров - может плохо кончиться.
Рассадник вирусов как и SourceForge... без подписей и баланса
Вообще, давно пора бы что-то человеческое на замену сделать. Есил верить главной странице сайта, сейчас там 258300 модулей. Вот вы с ходу найдёте нужный вам модуль, и поймёте его отличия от 100500 модулей с подобной функциональностью? И у вас есть какие-нибудь гарантии, что модуль и дальше будет поддерживаться?
> Вообще, давно пора бы что-то человеческое на замену сделать. Есил верить главной
> странице сайта, сейчас там 258300 модулей. Вот вы с ходу найдёте
> нужный вам модуль, и поймёте его отличия от 100500 модулей с
> подобной функциональностью? И у вас есть какие-нибудь гарантии, что модуль и
> дальше будет поддерживаться?В интернете много сайтов разных, вот вы сходу найдёте нужный? Давно пора бы что-то человеческое на замену сделать.
А вообще, где-то читал про наблюдение, что когда кто-то говорит "с этим нужно сделать что-то", или "они должны с этим разобраться", но не уточняет что именно -- то правильно ничего не делать с этим.
"...Не исключено, что эти модули совершают скрытую вредоносную активность."
Также не исключено, что любой другой модуль не от "предприимчивых деятелей" может совершать скрытую вредоносную активность.
Редактор Atom аттакует сайт Правительства, качает порно и заказывает пиццу за одно обновление.
Фичасто...
Maven пошёл по правильному пути -- кому принадлежит домен, тот и хозяин.
Ну вот, пора io.js из закромов доставать.
Печальная история. Копирасты(что ожидаемо), повели себя крайне не корректно. Но основная вина за данный инцидент должна быть возложена на юристов npm, Inc так как именно они безосновательно передали права на репу kik копирастам. Наличие торговой марки ничего не означает, так как она применима только к какой-то области(в данном случае к захудалом мессенджеру), и её действие не может распространяться на продукты, не связанные с их сферой деятельности. Надеюсь доверия к нехорошим людям из npm, Inc у сообщества станет меньше и оно начнёт создавать альтернативу npm, не привязанную к одному вендору.
Демагогия
а корпорасты понимают только
Silent enim leges inter arma(Законы молчат во время войны) — Цицерон
Вообще-то честно говоря, эта история высветила очень интересную особенность программирования, как сферы деятельности человека и его авторских прав, а именно, написанный вами код может быть уже кем то создан, и вы об этом даже не догадываетесь, и кто вы после этого, когда это вскроется, воришка или честный человек...