Стоит ли сыпать сахар? Underscore vs sugar

9492743
Уже неделю не могу определится с toolkit-фреймверком. Ыыыы...!!!

На выбор есть underscore.js и  sugar.js.

С одной стороны, underscore меньше весит и не занимается греховным делом ака влезание в прототипы базовых объектов.

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

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

И вот эта ритмика, мать ее, похоже станет ключевым фактором в выборе sugar, ведь программы пишутся для того, чтобы их читали люди. В этом весь смысл.

Все остальное не так важно, ИМХО.

CoffeeScript няшечка!

Mokona-coffee-time-tsubasa-reservoir-chronicles-7331726-800-600
Чем больше вожусь с CoffeeScript, тем больше нравится.

Простой пример на CS и raw-JS

Ну, че, все еще ковыляете по скобочкам?

Проба пера на Ruby, cli для пачкового репака аудио в mkv

Plums_volunteerlg
Решил потихоньку осваиваться с Ruby, все-же он гораздо приятнее "на ощупь", чем Perl.

Ну и конечно же РЕЛЬСЫ, великие и ужасные. Mojolicious - хороший лисапед, но RoR умеет все это уже пару лет. Да и модель там хороша.

Короче, накидал на пробу мелкий скриптик для массового впендюривания внешней аудиодорожки в mkv-контейнер.

Сыро и страшно, но переделывать не буду, это просто макет, полировать его смысла нет.

Лежит тут https://github.com/Meettya/MKV-audio-repacker .

Работает так

audio_repacker.rb ./sound_dir/

Для работы требует установленного mkvmerge в системе.

PS. Я в курсе, что то-же самое можно на bash или perl сделать, было интересно покрутить именно ruby.

Filed under  //   Ruby   cli  

Observer pattern in CoffeeScript

Satellite_space_2067

 

CoffeeScript чудесен!

Вот примерно так выглядит Observer

Зачем оно нужно? Custom events, почитать можно вот эту статью - Creating Custom Events with JavaScript: Decoupling

Filed under  //   coffeescript   event-driven   observer  

Установка Ruby на MacOS X 10.6.6 - немало магии

Razzledazzleruby

Image CC by Masha D'yans

MacOS, если кто не в курсе, это такой *nix с приветом.

И многие вещи делаются в этой оси красиво и черз жопу (в отличии от Win, в которой через жопу и убого).

Сегодня я выяснил, что установка ruby из-под rvm - задача тоже интересная, потому как прямой способ 

rvm install 1.9.3

Сутки спустя - тупо не работает! Ну т.е. вообще не работает, невозможно собрать 32 битную версию Ruby. Сможешь пройти один уровень - застрянешь на следующем. Постоянно какие-то ошибки, иногда одинаковые, иногда разные. Обычно на readline ругань, как бы я на нее не ссылался. И откуда бы и через что не ставил.

Единственный вариант получить обновленую версию - поставить из homebrew.

brew install ruby

Это дает нам 1.9.2 что-то там, а рузруливать версии далее проще всего через rbenv, настроив девелоперскую папку на новую версию.

Вот же жопа...

Мелкий bash скрипт для ресайза картинок

Bonnie_pink_bath_process_by_elsevilla

Image CC by elsevilla

Иногда бывает полезно быстренько отресайзить много картинок скопом.

Можно примерно как-то так:

Или вот так, прогрессивнее:

 

Filed under  //   bash   bath   imagemagick   resize  

Пингвины в снегах

Pings

Еще летом выселил нафик домашнюю файлопомойку на лоджиюю. Закинул туда витуху и наступила в доме авиационная тишина, но об этом как-нить потом.

Так вот, летом-то тепло и я о серваке вообще не думал.

А сейчас -20 С за окном, не мерзнут ли харды при таком дубаке?

Оказалось, что им вполне комфортно:

meettya@desktop:~$ sudo hddtemp /dev/sd[abcdef]
 /dev/sda: SAMSUNG HD501LJ: 24°C
 /dev/sdb: WDC WD1600JD-00FYB0: 21°C
 /dev/sdc: ST3500630AS: 30°C
 /dev/sdd: ST3500641AS: 31°C
 /dev/sde: WDC WD3000JB-00KFA0: 17°C
 /dev/sdf: WDC WD800BB-00JHC0: 23°C

Так что викидывать свистелки на балкон можно не боясь за данные.

PS. Хотя важные в зеркало я собрал. Так, на всяк случай.

Fat-free DI, or Kaiten::Container at dependency injection.

P_pieceofcakelogo1

Image CC by 6 ft high

My first article at English about my own new perl module Kaiten::Container.

Its very simple to understand and use implementation of DI (dependency injection) practice, contrary existing at CPAN another modules.

You know, maybe, IOCBread::BoardPeco::Container or IOC::Slinky::Container

They works, but its too complicated (to me) to use it in real project. The complexity of configurations kills any sense. I think its by huge and/or strange API.

I wish to have something easy and light. The simplicity are good.

So, this is near-to-life example to explain main idea, if you have any interest - take a look to docs.

https://github.com/Meettya/Kaiten-Container/blob/master/ex/simple_example.pl

Any questions, at English or Russian, welcomed.

Filed under  //   DI   IoC   perl  

Perl, DB и SQL - достаточное и overkill.

Kiss

Image CC by Vivianna_love

Лучший враг хорошего - стремление все упрощать сверх меры. Обычно получается сложно и не так хорошо.

На первое у нас упрощалки DBI. Собственно, глубоко не копал, но и так сойдет:

DBIx::Class

DBIx::Class - Extensible and flexible object <-> relational mapper.

Грандиозная штука, кто-то этим пользуется и доволен, но лично я напрочь теряю ощущение контроля происходящего.

DBIx::Simple

DBIx::Simple - Very complete easy-to-use OO interface to DBI

Вот это - мой выбор. Работа с DBI упрощается, но я все еще вижу кто куда и зачем идет.

DBD::AnyData

DBD::AnyData - DBI access to XML, CSV and other formats

Если нужно по-быстрому слепить тестовый прототип или иметь под рукой странное хранилище - очень хорошо подойдет.

На второе - упрощалки SQL, из тех, что нашел:

SQL::Abstract

SQL::Abstract - Generate SQL from Perl data structures

Звучит хорошо, но, черт побери - это бестолковое занятие! Ну какой смысл менять выразительность SQL на нечто такое:

Всего лишь для того, чтобы получит такое:

Ну и еще один гвоздь в крышку гроба - попробуйте изобразить запрос из 2-3 таблиц, даже на простом соединении типа user.id=message.user_id. А хитрым Join-ом? То-то же!

Абстракции становится немного больше, чем может влезть в мой мелкий мозг.

SQL::Interp

SQL::Interp - Interpolate Perl variables into SQL statements

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

Вот полновесный пример

и вывод в консоль

Чувствуется разница? Мы упрощаем то, что сложно и нуждается в упрощении (типа bind в IN - это реально головная боль), но не трогаем того, что очень хорошо и понятно выражается в SQL.

Вероятно есть еще модули для этой задачи, но меня и SQL::Interp вполне устроит, в комплекте с DBx::Simple - достаточно просто, но в любой момент можно сделать так, как нужно мне.

PS. Не устраивайте истерики при встрече SQL-кода в основном коде. SQL нужен RDBM, он - лучшее для работы с ними. Выучите SQL, это не так сложно. И применяйте с умом.

Filed under  //   RDBM   SQL    modern_perl   perl  

Natural Docs + GitHub Pages = online auto-documentation for free

У GitHub есть забавная штука, называется GitHub Pages.

Использоваться может двояко – можно или блог замутить, или сделать доки к репозитарию, в мануале об этом подробно написано.

Нас сейчас блог не интересует, а вот доки к репозитарию – тема что надо. Я для примера буду использовать javascript, но это не важно, Natural Docs поддерживает приличную пачку языков, чем и хорош.

Итак, нам понадобится сам NaturalDocs – идем, качаем, ставим, смотрим примеры.

Плюс к этому нам понадобится создать стандартный новый проект, на GitHub. Сами разберетесь, что да как. Для примера назовем его My New Cool Project (можно использовать и имеющийся, но тренироваться лучше на кошках новом).

Не откладывая в долгий ящик сразу забацаем pages, примерно так:

cd My-New-Cool-Project
git symbolic-ref HEAD refs/heads/gh-pages
rm .git/index
git clean -fdx
echo "My GitHub Page" > index.html
git add .
git commit -a -m "First pages commit"
git push origin gh-pages

В процессе будут забавные надписи, что что-то там удаляется – это нормально :)

Попробуйте зайти на страничку http://username.github.com/My-New-Cool-Project/ , где вместо username ставим свой логин.

В теории мы должны получить чистую страничку с надписью “My GitHub Page” в верхнем левом углу. Есть? Отлично, двигаем дальше.

Займемся кодом и документацией.

Сперва проверим, где мы и вернемся в master brunch

git status

если начало выглядит вот так

# On branch gh-pages

делаем

git co master

Отлично, теперь в папке проекта в master branch создадим вот такую структуру:

mkdir lib
mkdir doc
mkdir nd_internal

Первое – директория для нашего кода, второе – место, куда будет складываться документация, последнее нужно для NaturalDocs

NB. оптимально после создания вывести папку nd_internal из-под git – в файл .git/info/exclude добавьте новую строчку nd_internal/*

Теперь пишем какой-то код, сопровождая его комментами в стиле NaturalDocs (в папке lib).

Хорошо, положим код с комментами у нас есть, нам потребуется объяснить NaturalDocs, чего мы хотим. Требуется написать примерно следующее:

naturaldocs -i ./lib/ -o HTML ./doc/ -p ./nd_internal/

Где naturaldocs – название вашего исполняемого файла NaturalDocs, может отличаться от приведеного, разберетесь.

Если все пошло хорошо, увидите что-то типа:

Finding files and detecting changes...
Parsing 1 file...
Building 1 file...
Building 2 indexes...
Updating CSS file...
Done.

Попробуйте открыть файл index.html из каталога doc – должна получится красивая страничка с документацией.

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

После коммита нам потребуется немного магии – подробное объясние что и зачем происходит пишет Dominic Mitchell в своей заметке Publishing a subdirectory to github pages, если интересно – двигайте туда. Я же просто приведу пример своего скрипта:

#!/bin/bash

doc_dir='doc' # document directory
tmp_message='tmp_mess' # temporary files for changelog message
gh_pages='refs/heads/gh-pages' # refs to pages

parent_sha=$(git show-ref -s $gh_pages)
doc_sha=$(git ls-tree -d HEAD $doc_dir | awk '{print $3}')
git log --pretty=format:'%s' -n 1 $doc_dir > $tmp_message
new_commit=$(git commit-tree $doc_sha -p $parent_sha < $tmp_message )
rm $tmp_message
git update-ref $gh_pages $new_commit

echo "Docs update done"

По идее все должно было пройти хорошо и мы получили обновление документов в ветке gh-pages.

Теперь самое время сделать

git push

В ответ у нас должно вывестись что-то типа:

Counting objects: 24, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (13/13), 1.26 KiB, done.
Total 13 (delta 5), reused 0 (delta 0)
To git@github.com:Meettya/My-New-Cool-Project.git
    f0005ad..a53b950  gh-pages -> gh-pages
    48b901d..f0b787e  master -> master

Важное в этом – последние две строки, должно быть два коммита в обе ветки.

И теперь мы идем на http://username.github.com/My-New-Cool-Project/ и проверяем, все ли на месте. В теории мы должны увидеть нашу замечательную документацию.

Теперь ничто не мешает сделат в README файле ссылку на наши доки и получить профит от автоматизированного документирования кода.

Мой тестовый проект, который можно покрутить на предмет как и что сделано – jQuery Enhance Library. Там вы сможете найти примеры доков и все скрипты а так же пример синтаксиса NaturalDocs.

Filed under  //   github   javascript   natural docs  

About

Heretic, healthy lifestyler,
runner, cyclist,
bore and grumbler.

Oh, also I`m
a convalescent geek &
perl programmer!

Twitter