All streams
Search
Write a publication
Pull to refresh
61
0
David Klassen @f0rk

Программист

Send message
А в чем причина отказа от хранения node_modules в репе?
Ухты, не знал :)

Но тем не менее, в описании shrinkwrap есть:

If you wish to lock down the specific bytes included in a package, for example to have 100% confidence in being able to reproduce a deployment or build, then you ought to check your dependencies into source control, or pursue some other mechanism that can verify contents rather than versions.
У композера не иерархическая структура модулей, в нем нельзя иметь две версии одной библиотеки в проекте, иерархическая система модулей в npm дает такую возможность.

Модуль A может зависеть от модуля C v1.7, а модуль B от C v2.0.11 при этом оба модуля А и В бесконфликтно установятся в проект и подтянут свои зависимости локально.

В моем комменте выше акцент был на том, что мы имеем 2 различные версии библиотеки through. Это кстати пример из реального проекта, с актуальными версиями.

Но суть даже не в том, что мы можем лочить или нет версии зависимых библиотек, суть в том, что этого вообще не требуется, т.к. можно безбоязненно коммитить node_modules в реп и быть уверенным в том, что проект получит одни и те же библиотеки на всех инсталляциях.
А как вы вообще представляете реализацию? Хранить версии для всего дерева? типа:

{
  'brfs': '0.0.5',
  'brfs/through': '2.2.7',
  'browserify': '2.22.0',
  'browserify/through': '2.3.4',
  'foo/bar/buzz': '123'
}


Ну может быть это и реализуется технически, но зачем? Ведь можно просто добавить в реп node_modules и не иметь проблем.
lock был актуален для плоской схемы, в которой нельзя было иметь 2 версии одной и той же библиотеки, а глобальные модули имели приоритет. С npm это проблемы просто нет.
Не верно, в package.json вполне можно фиксировать версии, и npm install --save так и делает, суть в другом, т.к. локальные модули имеют приоритет перед глобальными, наличие кода модулей в репе, гарантирует то, что они будут использоваться.
А lock для _всех_ модулей создать в npm нельзя, так как они имеют иерархическую структуру, и каждая зависимость имеет свой package.json на содержимое которого мы влиять не можем.
Почитайте внимательнее, все очень подробно расписано, в том числе и вопрос фиксации версий.
Сам то логотип может и ничего, но такое ощущение, что его программист вырезал :)
А какое отношение имеют средства ЯП к костылям? Мне кажется тут наблюдается некоторое непонимание того, что называют «костылем» :)
Костыль — это быстрое, некрасивое и противоречащее архитектуре решение, сделанное для того чтобы «просто работало».

Вот например у себя в коде нашел, сначала клиент получал один набор событий, потом добавили еще, и вместо того что бы менять логику приложения просто нафигачили кода в EventEmitter-е:

было:
emit: function (event, users, options) {
  users.forEach(function (user) {
    SessionRepository.find({ uid: user.id }).then(function (sids) {
      sids.forEach(function (sid) {
        publisher.publish(sid, event, options);
      });
    });
  });
}


стало:
emit: function (event, users, options) {
  users.forEach(function (user) {
    if (~[this.EVENT_NEW_SHOT, this.EVENT_SHOT_FAIL, this.EVENT_SHOT_SUCCESS].indexOf(event.id)
        && user.id === event.data.sourceUser.id) {
      if (event.id === this.EVENT_SHOT_SUCCESS) {
        event.id = this.EVENT_GET_FRAG;
      } else if (event.id === this.EVENT_SHOT_FAIL) {
        event.id = this.EVENT_YOU_FAIL;
      }
    }
  
    SessionRepository.find({ uid: user.id }).then(function (sids) {
      sids.forEach(function (sid) {
        publisher.publish(sid, event, options);
      });
    });
  });
}


Красиво? — нет. Работает? — да. :)
Я вот не соглашусь с тем, что не стоит комментировать код в котором можно разобраться и так. Можно, но с комментариями проще. Хороший пример — backbonejs.org/backbone.js. Библиотека обильно прокомментирована и разобраться в ее внутренностях достаточно просто, попробуйте удалить все комменты и почитать код, станет гораздо грустнее.
Джеймс Роджерс — фейк? Википедия такого не знает.

altsarev.livejournal.com/499347.html
Кстати, в каких типичных случаях приложение может кинуть исключение в асинхронном вызове не по вине программиста? На сколько я знаю, все популярные библиотеки пробрасывают ошибки первым аргументом в callback, разве что JSON.parse() в try/catch приходится оборачивать. Есть еще какие-нибудь юзкейсы?
Хм… знатоки ES6 расскажите, я правильно понимаю, что с появлением генераторов можно будет писать так:

try {
  var res = yield asyncCall();
} catch (e) {
  logger.log(e);
}


и это решит все проблемы с обработкой асинхронных ошибок?
Хм… в ubuntu 13.04 странно себя повел, просто намертво повесил систему. Ядро 3.8.0-19-generic.

PS: Правда собирал gcc-4.7 а не 4.6 может версия компилятора не та…
Есть предположение, что это его акк на хабре conscell
Я бы сказал, что в последнее время erlang и clojure набирают обороты, так что я не настолько пессимистично настроен и в свободное от работы время почитываю SICP, чтоб в нужный момент быть в форме.
Вброшу цитатку из него для того чтобы интерес подогреть, тем более что к содержанию поста она некоторое отношение имеет :)
C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений. Человек, который хорошо в нем ориентируется — это хорошее зубрилко а не хороший программист. Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современно мире ценится разве что только среди прыщавых сосок. Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
© Xenocephal
Ох что вспомнили :) Вот кстати ссылка на тред, очень советую к прочтению www.sql.ru/forum/466654/s
В том то и дело, что он мой user_id в табличке Actions добавляет в первичный автоматом, а если я потом снимаю PK с user_id руками, галочка id-relation тоже снимается, и связь fk_user опять становится пунктирной.
Кстати, возник у меня вопросик по workbench-у делал я в нем схемку, в которой две сущности были связаны M-N через две таблички, одна агрегирует всякие действия пользователя, другая собственно показывает относительно чего производилось действия, типа лайков коментов и т.д. Проблема следующая — по сути это ID-зависимость, но т.к. внешние ключи в разных таблицах, мне не нужно чтоб внешний ключ был частью первичного. Но когда я проставляю галочку ID в релейшене, workbench автоматически добавляет внешний ключ в первичный. Надеюсь, понятно описал проблему :) Можно ли это как-то побороть?
Дискретка — чрезвычайно полезный курс. Чуть ли не единственный предмет, знание которого требуется программисту практически ежедневно. Не стоит ей пренебрегать.

Information

Rating
Does not participate
Location
Таиланд
Date of birth
Registered
Activity

Specialization

Backend Developer, Software Architect
Lead
From 12,000 $