jQuery. Последовательное изменение данных в обработчиках.

Неожиданно... Оказывается обработчики связанных с событием происходящим в одном объекте - последовательно изменяют данных события. Например:

// Какой-то наш jQuery-объект (вообще любой, необязательно связанный с DOM-элементом).
var $obj = $({});

// Устанавливаем обработчик, который выведет данные, а затем их изменит
$obj.on('myev', function(jqEv, data){
  console.log(data);
  data.key += '-extra';
  data.approved = true;
});
// Устанавливаем обработчик, который просто выводит данные обрабатываемого события
$obj.on('myev', function(jqEv, data){
  console.log(data);
});

// Генерируем событие с некоторыми данными
$obj.trigger('myev', {key:'val'});

Вывод:
-----------------------------
Object {key: "val"}
Object {key: "val-extra", approved: true}

В итоге на заметку - обработчиками можно последовательно изменять данных связанные с событием объекта.

Интересные особенности установки пакетов утилитой npm

Вот ставим мы допустим пакет express. Когда-то все зависимости установливались строго внутрь пакета, т.е в node_modules/express/node_modules. Теперь же зависимости устанавливаются на один уровень с пакетом, т.е. в node_modules/
А если поставим пакет, который числится в зависимостях express, но другой версии, то произойдёт следующее:
  - пакет той версии от которой зависит express - переместиться в express, а именно node_modules/express/node_modules/<пакет@x>
  - а на его место, встанет установленный пакет node_modules/<пакет@y>
И вот ещё момент - удалить последний установленный пакет
<пакет@y> - уже не получится пока мы не удалим express. Впрочем, похоже это баг и в будущем он будет исправлен.

Давно это было...

Очень-очень... В силу огромного кол-ва обстоятельств не писал сюда много лет. А вот ближайшее время очень даже может быть, появятся желание и возможность. Конечно это будут какие-то исследовательские IT посты.

Рейтинг библиотек в Quicklisp репозитории

  Вообще говоря в движении opensource есть свои плюсы и минусы. Плюсов разумеется гораздо больше! :) Но есть и некоторые минусы. Один из них, например, - качестве библиотек никто не гарантирует и надо тратить время на исследования того, годная ли библиотека вообще для использования. Как с этим бороться? Во-первых, конечно же, нужно советоваться с коллегами, если кто-то получил драгоценный опыт использования какой-либо системы, то неплохо бы его перенять. А во-вторых гарантию качества даёт кол-во библиотек использующих интересующую вас систему. Вот об этом и пойдёт речь в этой заметке.
  Итак, я рад представить сообществу ASDF-систему для оценки рейтингов open-source библиотек из репозитория Quicklisp. Рейтинг системы в данном контексте будет ничем иным, как кол-вом библиотек, которые её используют. Инструкцию по использованию читайте здесь: https://github.com/LinkFly/ql-libs-analizing/blob/master/README_ru.

Сам репозиторий: https://github.com/LinkFly/ql-libs-analizing
Проект в Redmine: http://linkfly.ru:8201/redmine/projects/ql-libs-analizing (временно изменено, см. ниже)

Считаю, это крайне полезная система особенно для тех кто строит бизнес, с упором на использование opensource решений.
Предложения по развитию и баг-репорты пишите в проект на github'е или в Redmine.

P.S. Совершенно внезапно перестал работать 1gb.ru, вместе со своими DNS-серверами, поэтому ссылка на Redmine временно будет следующая: http://178.140.218.145:8201/redmine/projects/ql-libs-analizing

Проект LISP-DEV-TOOLS. Сервис для работы с проектом в Redmine.

    И вот теперь, когда я вновь "свободный художник" займусь вероятно своими open-source проектами:)
Что касается конкретно lisp-dev-tools: вообще говоря, цель достигнута - это удобный инструмент для автоматизации разворачивания инфраструктуры для разработки на Common Lisp, я собственно сам им и пользуюсь. Судите сами: есть (по каким-либо причинам) у вас чистая ОСь (ну прямо девственно-чистая), и вам нужно получить всё самое необходимое для разработки на CL, причём не просто так - а согласно современному состоянию развития open-source инструментария для работы с Common Lisp'ом. Но вы не хотите совершать "лишних телодвижений" (я вот например, их о-о-очень не люблю делать), чтобы получить всё необходимое и обязательно сразу. Если вы пользуетесь lisp-dev-tools, то (даже в каком-нибудь jail'e с кучей ограничений) вы делаете так:

git clone https://github.com/LinkFly/lisp-dev-tools.git
cd lisp-dev-tools
./provide-slime

... И получаете ВСЁ!
Но при этом есть возможность тонко настроить версии инструментов. Например, мне в ближайшем будущем точно понадобится фича в emacs 24-ой версии, позволяющая установливать дополнительные пакеты для Emacs, устанавливаемые в духе пакетной системы дистрибутивов Linux'a и пакетной системы в Quicklisp. Я тупо наугад подобрал версию Emacs'a которая у меня успешно загрузилась/скомпилировалась и установилась внутрь lisp-dev-tools (в репозитории используемого мной дистрибутива 24-ой версии соотв. не оказалось). Номер версии я поменял в lisp-dev-tools/conf/tools.conf.

Кроме того, я иногда заглядываю в исходники sbcl'a и в этом случае, мне недостаточно простой (и быстрой) установки бинарной сборки - в этом случае, я дополнительно делаю:

./rebuild-lisp.sh

Собственно и всё. Параметры по умолчанию, безусловно можно настроить как душе угодно.

Далее, время от времени, по некоторым причинам мне нужно использовать другую лисп-систему и/или другую версию используемой лисп-системы и всё решается мгновенно, например:

./change-lisp ecl
./change-version 12.7.1

В любой момент, я временно могу запустить, например тот же SLIME с другой Лисп-системой:

LISP=sbcl ./run-slime

И так далее и тому подобное ...

А теперь у проекта появился, скажем так: "свой дом" в виде Redmine'овском сервиса по управлению проектами:

http://linkfly.ru:8201/redmine/projects/lisp-dev-tools

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

Репозиторий на github.com: https://github.com/LinkFly/lisp-dev-tools

Проект LISP-DEV-TOOLS. Новая версия - 0.0.4.

    Новая версия проекта lisp-dev-tools примечательна доведением подсистемы тестирования до очень серьёзного уровня - теперь запустив автоматическое тестирование (выполнив ./tests/run-tests.sh) есть возможность получить однозначный и качественный ответ: готова ли система для использования всего предоставляемого функционала. Впрочем, можно теперь исключать не представляющие интереса тесты или запускать только конкретные тесты (см. описание параметров --exclude и --only в конце README). Кроме того, система после тестов возвращается в своё исходное состояние! Многочисленные сообщения о содержимом каталогов и их размере до и после запуска тестов - помогут проконтролировать корректность возвращения в состояние, которое было до запуска тестов. Таким образом, до использования каких-либо возможностей системы, можно предварительно протестировать качество предоставления этих возможностей.

    И ещё одно важное добавление: к списку официально поддерживаемых дистрибутивов, прибавился ещё один, весьма актуальный на сегодняшний день - Ubuntu Server 12.04/x86-64. Правда последний релиз лисп-системы CMUCL 20c, по неизвестным пока причинам отказывается собираться на этой системе. Тестирование всего остального - показывает положительный результат, тесты при этом запускаются таким образом: ./tests/run-tests.sh --exclude=CMUCL
 
Новое в версии 0.0.4 (по сравнению с версией 0.0.3):
-----------------------------------------------------
1. Добавлена поддержка дистрибутива Ubuntu Server 12.04/x86-64. В нём сейчас всё работает кроме компиляции лисп-системы CMUCL.
2. Добавлено тестирование команды ./rebuild-lisp для SBCL (по умолчанию эта система устанавливается из бинарников).
3. Исправлена ошибка с тестом постройки и установки Emacs - если до тестов его не было, то тестируется команда ./remove-emacs, которая соответственно его удаляет.
4. Добавлен ключ --exclude для команды, запускающей тесты ./run-tests.sh, позволяющий указать что необходимо исключить из тестов.
5. Добавлен ключ --only для команды, запускающей тесты ./run-tests.sh. Если значение ключа (пример: --only="SBCL WGET") задано, то тесты, не включенные в это значение - запускаться не будут.
6. Реализовано полное восстановление системы после запуска тестов.
7. Добавлен вывод содержания директорий и их размеров (а также общего размера) перед началом тестов и после них (для того, чтобы в случае ошибки возврата системы в исходное состояние можно было найти источник несоответствия).

    ... а также:

8. Добавлены в проект (зафиксированы с помощью файла .gitignore) некоторые пустые директории, которые всё равно создаются во время работы проекта (для определённости).
9. Обновлен список задач и план проекта.
10. Большой рефакторинг кода тестов.
11. Некоторые изменения для будущей поддержки BusyBox.
12. Исправление постройки XCL на Ubuntu разные версий.
13. Обновление некоторых URL-ов для успешной загрузки поддерживающего софта.
14. Исправлена команда постройки CCL.
15. Добавлены зависимости в параметры CCL для успешной постройки и перестройки (building, rebuilding).
16. Исправлены другие ошибки.
------------------------------------------------------------------------------

Проект LISP-DEV-TOOLS. Анонс следующей версии 0.0.4.

Ближайшие дни будет оформлен следующий релиз проекта lisp-dev-tools.
Основные новые возможности проекта в поддержки ещё одного дистрибутива и усовершенствованное автоматическое тестирование. Ещё один поддерживаемый дистрибутив: Ubuntu Server 12.04 (x86-64). В части тестов: добавляется тестирование команды ./rebuild-lisp (для SBCL) и два параметра --exclude и --only для исключения некоторых тестов и соответственно для запуска конкретных тестов. А также полное восстановления состояние (и соответствующая проверка) после выполнения тестов.

Проект LISP-DEV-TOOLS. Новая версия - 0.0.3.

    Можно смело утверждать что новая версия проекта lisp-dev-tools стала гораздо более зрелой чем предыдущая. Особенно хочется отметить появление двух серьёзных возможностей: это появление обобщённого интерфейса использования (параметров командной строки --common-load --common-eval и --common-quit) и появление автоматических тестов (запукаются скриптом tests/run-tests.sh). Если в дистрибутиве, не входящим в число поддерживаемых, все тесты успешно пройдены - проект вполне можно рекомендовать к использованию в этом дистрибутиве! Если же тесты провалились, но вам нужно использовать проект в конкретном дистрибутиве - просто опишите программно-аппаратную среду (процессор, память, архитектуру, версию ядра, название/тип/версию дистрибутива ...) и вышлите мне результаты тестов из папки tests/tests-results/

Новое в версии 0.0.3 (по сравнению с версией 0.0.2):
-----------------------------------------------------
1. Добавлено автоматическое тестирование, запускается скриптом tests/run-tests.sh (рекомендуется запускать перед промышленной эксплуатацией).
2. Сделан общий интерфейс запуска для всех (за исключением XCL и WCL - они не поддерживают параметры
   запуска) лисп-систем. Он представлен тремя ключами:
     --common-load <файл_с_лисп_кодом>
     --common-eval <заключенный_в_кавычки_лисп-код>
     --common-quit
3. Осуществлено разделение на современные (modern), слишком сырые/молодые (young) лисп-системы и
    устаревшие (obsolete). Это отображено в параметрах запуска скриптов ./get-all-lisps и ./provide-all-lisps
4. Налажена работа с символическими ссылками (для управления поддерживающис софтом) теперь изменение в поддерживающих инструментах не влиют на git.
5. Удалены некоторые уже не нужные файлы.
6. Обновлён и изменён TODO: скорректировано состояние выполненных и назначенных задач, а также изменён и скорректирован план развития проекта.
7. Начаты работы по отладке работы проекта в дистрибутиве Arch Linux.
8. Скорректированы некоторые сообщения системы.
9. Удалён баг проявляющийся при постройке XCL на Ubuntu 11.04 x86_64.
10. Исправлена загрузка JRE среды для системы ABCL.
11. Устранен баг в загрузке архивов с лисп-системами.
12. Изменена версия gawk - для устранение ошибки в обеспечении лисп-системы GCL.
13. Сглаживание различий в выводе программы "file", сейчас в проверке на символическую ссылку с помощью "readlink"
14. Устранены также другие ошибки.
------------------------------------------------------------------------------

Проект LISP-DEV-TOOLS. Новая версия - 0.0.2.

   С радостью сообщаю о выходе новой версии проекта lisp-dev-tools анонс которого был сделан в предыдущем посте. Эта версия хоть и имеет не слишком пафосный номер, тем не менее очень серьёзно повзрослела по сравнению с предыдущей версией и неуклонно движется к мажорному релизу проекта. Отловлены неожиданные сюрпризы (что особенно важно для новичков), в смысле исправлены баги и устранены найденные неоднозначности, возникающие при работе с системой. Особенно хочется отметить добавление целых трёх поддерживаемых дистрибутивов Linux и появление совершенно прозрачной (и корректно работающей) проброске параметров к запускаемой лисп-системе, с возможностью посмотреть сформированную командную строку без её выполнения. А также возможность её сохранить для анализа и/или использования в дальнейшем (можно её скопировать и когда необходимо вставить в шелл или скрипт и выполнить, получив аналогичный запуск системы). Ниже перечислены конкретные изменения.

Новое в версии 0.0.2 (по сравнению с версией 0.0.1):
1. Создан и "закреплён" список задач и примерный план добавления возможностей в следующие версии.
2. Исправлена корректировка файла Makefile для постройки XCL.
3. Добавлена поддержка 3-ёх дистрибутивов Linux:
           - Ubuntu Server 10.10/x86-64
           - Debian 6.0.4/x86-64
           - Gentoo (из livedvd-amd64-multilib-2012)
4. Добавлена полноценная поддержка интерпретатора bash (ранее корректная обработка скриптов производилась только интерпретатором dash).
5. Удалена загрузка и компиляция софта от которого зависит поддерживающий софт, если он уже в наличии.
6. Скорректированы зависимости для постройки лисп-систем.
7. Устранена ошибка появляющаяся при перекомпиляции SBCL через ./rebuild-lisp, появляющаяся из-за попыток скрипта сборки лисп-системы - прочитать .git директорию.
8. Устранена ошибка поиска библиотеки libgmp.so.3 для постройки и запуска WCL.
9. Добавлена возможность полностью корректного проброса параметров к текущей лисп-системе, указываемых при запуске ./run-lisp <множество параметров>.
10. Добавлена специальная переменная GET_CMD_P, которая при установке в значение "yes" позволяет получить полностью корректную командную строку с которой запускается лисп-система (эту коммандную строку можно скопировать, вставить в шелл, выполнить и получить тот же результат который был бы если при выполнении "./run-lisp <какие-то параметры>", переменная GET_CMD_P была бы не равна "yes".
11. К значение переменной XDG_CONFIG_DIRS при запуске лисп-системы (через ./run-lisp ...) добавляется полный путь вида "<директория_с_lisp-dev-tools>/conf".
12. Появляющиеся сообщения системы стали более лаконичными и читабельными.
13. Для успешного использования рантайм опций лисп-систем, опции загрузки Quicklisp перенесены в конец формируемой коммандной строки.
14. Добавлена таблица в формате CSV - status.csv. В ней отображено текущее состояние поддержки lisp-dev-tools в различных дистрибутивах (имеется в виду стабильная и ожидаемая работа, без неожиданных сюрпризов).
15. Множество баг-фиксов связанных с обеспечением (загрузкой, постройкой и инсталяцией в lisp-dev-tools, при необходимости) поддерживающего софта.
16. Исправление множества багов, связанных с обеспечением и выполнением лисп-систем (в том числе, связанные с различием в дистрибутивах).

Проект LISP-DEV-TOOLS. Анонс следующей версии 0.0.2.

   Ближайшие дни оформлю следующий минорный релиз проекта lisp-dev-tools. Проект был представлен в посте Заповедник для Лисп'ов - проект LISP-DEV-TOOLS. Несмотря на весьма скромный номер версии проект серьёзно развился:
 - оттестирована работа на большем кол-ве дистрибутивов (добавились gentoo, fedora, debian 6.0.4)
 - заведена таблица в формате csv для учёта результатов тестирования работы проекта на разных дистрибутивах.
 - сделано и отлажено совершенно прозрачное "прокидывание" параметров указываемых при запуске скрипта run-lisp а также получение строки запуска текущей лисп-системы (которую можно скопировать, вставить в консоль и запустить, т.е. выводимая строка запуска в точности соотв. реально используемой строке запуска)
- уточнение и расширение инструкции по использованию и добавление дополнительных примечаний (в README, README_ru)
- повышена надёжность системы - выявлены и устранены неожиданные сюрпризы связанные с нюансами работы дистрибутивов.
- устранено множество багов и неоднозначностей в работе системы.
- сообщение системы стали более подробными и единообразными
- оформлен список задач проекта (TODO).
- и другое (подробнее - при выпуске новой версии).