Новый модуль — WWW::Ruler

Сегодня разместил на CPAN свой второй open source модуль — WWW::Ruler. Не буду описывать то, как с ним работать. Напишу лишь краткое его представление.

WWW::Ruler помогает легко формировать рулетку стиля Google (её функционирование) , а также помогает программисту получить нужные смещения для обрезания массива данных. То есть, мы указываем модулю размер всего массива, что мы имеем (например сколько всего товаров в категории), количество элементов на одной странице (категория разбита на страницы), желаемое количество кнопок «рулетки» и номер текущей страницы, для которой надо показать релетку. Модуль формирует массив элементов рулетки и вычисляет start & end позиции в массиве, которые можно использовать для вырезания данных из массива. Массив рулетки проходится обычным for оператором и отталкиваясь от значений, легко рисуются кнопки [<], [>], […] и [1], [2] и т.п..

Где взять:

CPANhttp://search.cpan.org/dist/WWW-Ruler/

GitHub репозитарий — https://github.com/Perlover/WWW-Ruler.git

CHI::Cascade — небольшое введение

Много месяцев у меня ушло на разработку этого модуля — CHI::Cascade. Теперь решил рассказать о нём здесь, в блоге, и о его концепции, чтобы те, кто испытывает в нём потребность, но ещё не знают о его существовании, подумали об его использовании. Итак, кэширование на основе зависимостей.

Концепция make

Вообщем, если вы программер, вам навярняка известна такая полезная утилита, как make. Вкратце — make получает файл с описаниями зависимостей и их командами, и выполняет только те команды shell, которые вычислены «для выполнения» на основе этих зависимостей. Это очень классная концепция, которую можно использовать как в программировании, так и для автоматизации работы в Unix. То есть, эта концепция зависимостей сводит к минимуму исполнение каких либо кодов/команд/скриптов для получения результата. Вообще, идеология «дерева» замечательная вещь, а если к этому приделать зависимости — что от чего зависит и как — то вообще это сила. Если что то мы изменили где-то в дереве, то перестраиваются те узлы, которые как либо зависимы, а остальное не трогается.

Концепция — кэш (cache)

Теперь о второй полезной вещи — кэше. Читать далее CHI::Cascade — небольшое введение

Визуализация графиков на JavaScript

Сегодня решил немножко «пробить» вопрос визуализации на JavaScript разного рода графиков. Самые лучшие графики получаются средствами HTML5 и её расширением SVG. Также нашёл отличный пост про 20 библиотек визуализации. Вот ссылка на тот пост:

http://sixrevisions.com/javascript/20-fresh-javascript-data-visualization-libraries/

А также вот сам несколько демок разных библиотек. И всё это без всякого Flash, работает в Firefox! 🙂

http://www.highcharts.com/demo/
http://www.highcharts.com/stock/demo/

И ещё классную библиотечку нашёл сейчас — http://raphaeljs.com/ — там даже есть 3D шутер, типа Quake 🙂

Перед началом использования какой либо библиотеки обратите внимание на лицензии — тема новая, инструментов мало, и сильно коммерцианализирована. Многие разработчики дают free версии только как Demo. Простой пример такой библиотеки — http://wijmo.com/demos/

Цитаты о языке Perl

«Perl — это единственный язык, программы на котором выглядят одинаково до и после RSA-шифрования.»

Keith Bostic. Программист, создатель Sleepycat, конрибьютор BSD.

«PHP — это малое зло, созданное некомпетентными любителями, а Perl — это громадное и хитроумное зло, созданное опытными и извращёнными профессионалами.»

Jon Ribbens. Программист.

Цитаты предоставлены любителем языка Lua (для которого цитаты ещё не придуманы кем либо). Может быть хотите стать первыми?

Perl — создание дистрибутива

Как приятно, когда кому то надо то, о чём ты пишешь. Вот решил исправить ситуацию и продолжить цикл своих статеек по perl. На этот раз про создание дистрибутива perl проекта.

Итак, с чего же начать создание Perl дистрибутива своего проекта?

Для начала, давайте рассмотрим общие принципы построение дистрибутива на Perl. Читать далее Perl — создание дистрибутива

Почему они называются I18N и L10n?

Ух, давно не писал я в свой блог. Решил немного встряхнуть его этим мелким постом 😉

Итак, в мире программирования есть такие два понятия — I18N и L10N. Это абревиатуры Internationalization и Localization соотвественно. Но что за цифры в них? Я очень долго не знал ответа на этот вопрос и он меня иногда пугал. Я даже как то думал, что по началу интернационализация в Unix была сделана для 18-ти языков, и от туда название…

Но оказалось всё ещё проще. Чтобы не писать Internationalization, решили сократить — оставили первую и последнюю буквы, а цифры соответствуют количеству букв между ними, которые убрали из-за сокращения. То же и Localization — между ‘L’ и ‘N’ идёт 10 букв. Вот так всё оказывается просто получилось…

Perl: DBI & MySQL — авто реконнект (reconnect)

Если вы программист на Perl и работаете с MySQL, то вот вам совет, как обеспечить коннект к серверу, и в тоже время, обеспечить себе легкую жизнь. Ведь если истечёт таймаут при работе с сервером, $dbh (database handle) будет не актуальным и выдаст ошибку. Особенно это актуально тогда, когда ваша программа работает с MySQL, и в то же время выполняет другие длительные операции, время которых может превысить таймаут-значение (connect timeout) MySQL. В такой ситуации ваш handle будет не актуальным.

Решение есть. Но в то же время есть ещё одна тонкость. DBB::mysql драйвер имеет опцию автореконнекта (mysql_auto_reconnect) и будет следить за актальностью handle и при случае переконнектится. Но вот что делать с коммандами, которые иногда надо выполнить сразу после коннекта, например SET NAMES ‘utf8’;SET CHARACTER SET ‘utf8’ ? И тут есть решение! Хотя найти его не всегда легко в интернет 🙂

Вообщем, вот код для коннекта из под Perl к MySQL так, чтобы всё работало пучком:

$dbh = DBI->connect( "dbi:mysql:database=database_name;mysql_client_found_rows=1;mysql_enable_utf8=1;mysql_socket=/socket_of_mysql", 'user', 'password',
    {
	RaiseError		=> 1,
	AutoCommit		=> 1,
	mysql_multi_statements	=> 1,
	mysql_init_command	=> q{SET NAMES 'utf8';SET CHARACTER SET 'utf8'}
    } ) or die "Cannot connect";
$dbh->{mysql_auto_reconnect} = 1;

Код проверен мною и тщательно протестирован

Музеи бывают разные…

Вот пришла мне сегодня такая мысль: программирование — это тоже искусство, код бывает написан так, что грамотный программист может долго восхищаться тем, как он написан и потом черпать от туда идеи для вдохновления. Например, если говорить о perl — мне очень нравится, как пишет код Tatsuhiko Miyagawa, и что самое интересное — он много очень написал. Например, много полезных приёмов можно подчерпнуть даже в таком хорошем и полезном инструменте для парсинга html & xml, как Web::Scraper — простой то туда пример для программеров перла 😉

Дак вот, я о том, что раз программирование — это искусство, то почему бы, подумал я, не открыть где нибудь музей, где вместо картин были бы исходные коды. Потом моя мысль пошла дальше — мол код интереснее смотреть на экране компа, тем более в цифровом виде — чтобы легче было копипасты делать, проверить если что и т.п.. Значит, музей должен быть в интернете! И вот, подумал я, наверное, я один до этого додумался 😉 Погуглил — как бы не так… Опередили меня ровно на год! По крайней мере в русском сегменте сети.

Итак, встречайте музей программного кода! 🙂

Топология корпораций глазами ученых (заговор?)

Теорию графов применили для изучения структуры мирового рынка

Специалисты по системному анализу из Цюриха доказали, что значительная часть экономики (около 40 процентов) контролируется совсем небольшой долей компаний, куда входят преимущественно финансовые институты. Несмотря на то, что такой вывод подозрительно напоминает классическую теорию заговора, полученный результат является первой попыткой анализа структуры финансовых потоков в экономической системе в целом. Также это отличный повод напомнить читателям «Ленты.ру» о существовании теории графов.

Подробнее — читаем статью на Lenta.RU. Довольно интересно! 🙂

Также, еще здесь:

Первая пятерка самых влиятельных компаний выглядит следующим образом.

  1.  Barclays plc
  2.  Capital Group Companies Inc.
  3.  FMR Corporation
  4.  AXA
  5.  State Street Corporation

От себя: вот эта пятёрка — самое интересное. Ниодна компания мне не известна, но они правят миром

Git и ‘.’ (точка) как remote

Знаете ли вы, что в git символ точка (dot — ‘.’) как имя для remote обозначает текущий репозитарий, в котором вы работаете? Когда-то я мельком нашел ссылку в документации на это, запомнил, и вот сегодня сделал вот это:

git push . my_temp_branch:master
# А так ещё проще и лучше:
git push . HEAD:master

И это сработало! Очень кстати полезно бывает привести ветку (например, master), от которой вы начали продолжать свою временную ветвь,  в соответствие с ней. Первое, что хочется сделать: Читать далее Git и ‘.’ (точка) как remote