понедельник, 29 марта 2010 г.

Котлеты и конфиги - раздельно

Оказывается, не только меня достает множество жужжащих мух среди котлет... то есть пользовательских данных. Ссылка: libetc

What is libetc ?
On my system I had way too much dotfiles:

% ls -d ~/.* | wc -l
421

For easier maintenance I wrote libetc. It is a LD_PRELOAD-able shared library that intercepts file operations: if a program tries to open a dotfile in $HOME, it is redirected to $XDG_CONFIG_HOME (as defined by freedesktop).

You can then store all your config files in $XDG_CONFIG_HOME instead of using zillions dotfiles in $HOME

If $XDG_CONFIG_HOME is not defined, the dotfiles are stored in $HOME/.config/

суббота, 27 марта 2010 г.

О Tokyo Cabinet

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

Введение в мир СУБД без поддержки SQL для тех, кто совсем "не в теме": Alternatives to SQL Databases
Краткий обзор: Tokyo Cabinet: Beyond Key-Value Store
Видеопрезентация: Tokyo Cabinet in One Hour
Обзор от автора: Tokyo Cabinet: a modern implementation of DBM
Спецификация: Fundamental Specifications of Tokyo Cabinet Version 1

Презентация от автора по токиокабинет и важному к ней дополнению - сетевому серверу Tokyo Tyrant: Tokyo Cabinet and Tokyo Tyrant Presentation

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

Привожу тест для тех, кто плачет, что токиокабинет у него тормозит - посмотрите, что означает второй параметр и да будет вам просветление. Результат получен на ноутбуке с обычным для такового жестким диском - проще говоря, хреновым, на десктопе будет существенно шустрее.
$ tchtest write test.db 20000000 20000000

  path=test.db  rnum=20000000  bnum=20000000  apow=-1  fpow=-1  mt=0  opts=0  rcnum=0  omode=0  as=0

......................... (02000000)
......................... (04000000)
......................... (06000000)
......................... (08000000)
......................... (10000000)
......................... (12000000)
......................... (14000000)
......................... (16000000)
......................... (18000000)
......................... (20000000)
record number: 20000000
size: 723890448
bucket number: 20971507
used bucket number: 13880741
cnt_writerec: 20000000
cnt_reuserec: 0
cnt_moverec: 0
cnt_readrec: 6909116
cnt_searchfbp: 20000000
cnt_insertfbp: 0
cnt_splicefbp: 0
cnt_dividefbp: 0
cnt_mergefbp: 0
cnt_reducefbp: 0
cnt_appenddrp: 0
cnt_deferdrp: 0
cnt_flushdrp: 0
cnt_adjrecc: 0
time: 197.216
ok

вторник, 23 марта 2010 г.

Починка надувного матраса Intex

Дело было так - мой кот, прыгнув с окна на край матраса, внезапно обнаружил, что под его лапами - о, ужас - что-то зашевелилось! В ответ ласковый и пушистый зверь выпустил все свои 18 остро наточенных гарпунов и поспешил спрыгнуть с погибающей жертвы. Матрас сказал "пш-ш-ш" и весело засвистел выходящим воздухом. Высказав вслед коту все, что я о нем думаю, я занялся спасением сдувающихся. Беглый осмотр выявил как минимум 3 "очага поражения". Первое, с чего я начал, это хорошенько надул матрас и заклеил отверстия скотчем :-) Сей метод оказался на удивление действенным, но только на не слишком продолжительное время - примерно часов на 6, после чего приходилось хорошенько подкачивать. Через несколько дней раны матраса, как ни странно, сами собой частично затянулись. Для полного излечения я решил прибегнуть к помощи товарища-велосипедиста, который и поделился со мной ремкомплектом. Долго ли коротко ли, я наконец добрался забежать к нему и забрать сей чудодейственный комплект и попробовать его применить. Что ж, немного помучившись и заклеив две пробоины, удалось добиться того, что накачанный перед сном матрас утром вполне себе в порядке, лишь немного потеряв в упругости. Осталось обнаружить и заделать последний прокол - его совсем не видно, а по выходящей струйке воздуха распознать сложно, надо при хорошем дневном освещении заняться.

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

О рекламе в рунете

Давненько я не игрался с гугловой рекламой, и вот сегодня решил посмотреть, что же на этом фронте нового. Итак, включил в блоге, смотрю. Объявления пока "не в тему"- по условиям программы Ad Sense в течении суток должны стать релевантными. Но уже сейчас вижу, что большинство рекламных блоков - флэшовые. Шут их знает, что там на них показывается, т.к. у меня флэш выключен по дефолту :-) Ладно, через день посмотрим.

Да, стоит сказать, почему меня эта тема снова заинтересовала. Дело в том, что можно создать множество полезных и не очень веб-сервисов, но их полезность сильно уменьшается, если их делать платными. Дело даже не столько в плате как таковой, сколько в том, что в рунете нет удобных и общедоступных средств для микроплатежей. Если же реклама будет приносить хоть какой-то доход разработчику, то такие сервисы вполне можно и нужно создавать. Два-три года назад я уже пробовал, и безрезультатно, но тогда интернет был доступен только в Москве, а в регионах пользователей было мало и те старались ставить "баннерорезки". Сегодня же средний пользователь с рекламой не борется, ибо в большинстве своем сидит на анлиме. Важный вопрос, насколько адекватна современная реклама - в те времена, о которых я упомянул, было слишком мало рекламных объявлений в рунете и все какие-то баннеры о выведении глист показывались, что для технического сайта явно смахивало на издевательство.

Полагаю, по результатам текущего исследования будет небесполезным сей пост дополнить. Не знаю, насколько многих из моих читателей интересует данная тема, но это читается легче, чем статьи о разработке СУБД (точнее сказать, эти статьи читают, но не в рунете, что весьма печально характеризует уровень рунет сообщества) :-D

Upd. Прошло всего лишь полчаса, а рекламные объявления уже релевантные - linux, языки программирования, ПО, регистрация доменов и прочее. Самое приятное - есть объявления от тематических сайтов, которые на досуге и мне самому будет интересно посетить.

Upd.Так-с, что-то проясняется. Какая-то реклама в рунете на ИТ-тематику появилась, но с англоязычным сегментом лучше даже не сравнивать.

Upd.Окончательное резюме по истечению месяца тестирования - гугловая реклама в рунете полный отстой, а именно: бредовая и часто повторяется. Ничего похожего на англоязычный интернет нет и в помине, где контекстная реклама бывает зачастую полезнее самой страниц в плане поиска нужной информации. Что самое интригующее, так это то, что сразу после включения появлялись более-менее интересные рекламные сообщения, но через сутки пропали, видимо, это была так называемая социальная реклама. Отключаю это безобразие.

На заметку рекламодателям: если вы недовольны эффективностью своей рекламы (не только в интернет), подумайте, не платите ли вы за размещение рекламного объявления, от которого возникает отвращение при первом же взгляде. Может, стоит сделать интересное и стильное объявление или баннер?..

понедельник, 22 марта 2010 г.

Система "Анкет-Мастер: Мерчендайзинг"

В связи с появлением множества мобильных устройств с вполне вменяемыми характеристиками принято решение о выпуске новой версии нашего ПО "Анкет-мастер: Мерчендайзинг". В настоящее время ПО эксплуатируется в компании МТС (35 КПК) в Поволжье (основной офис в Нижнем Новгороде), за 5 лет накоплена большая база результатов, так что производительность и функциональность системы хорошо отлажены.

Для использования системы мелкими и средними компаниями мы решили упростить интерфейс, а также разделить при входе в систему страницы выбора компании и логина. Сам "движок" при этом сохранится, включая встроенный скриптовый язык для создания отчетов.

Прототип интерфейса:



Интерфейс для мобильных устройств практически сохранится. Функциональность будет расширена добавлением возможности не только выполнять назначенные задания, но и выбирать произвольные маршруты и анкеты, что удобно для работы квалифицированных специалистов или для выборочной проверки результатов, собираемых мерчендайзерами. Внизу представлен вариант оформления страницы выбора маршрутов с возможностью перехода к определенному адресу:



Планируется две версии - бесплатная, без возможности создавать собственные алгоритмы анализа и некоторыми ограничениями на количество обрабатываемых "за раз" в отчетах данных, и платная без указанных ограничений. В бесплатной версии возможно наличие некоторого количества рекламы, но без фанатизма, с минимумом неудобств для тех, кто рекламу смотреть не хочет. Ограничение на интервал, за который строятся отчеты, вызвано тем, что, к примеру, в МТС отчет за квартал требует обработки данных о 15 000 проверок торговых точек, причем в каждой проверке порядка сотни вопросов, - это создает ощутимую нагрузку на сервер (при том, что мы стараемся обеспечить время построения любого отчета не более 10 секунд). Так как в бесплатной версии предложить такие же ресурсы мы не можем, взамен предлагаем пользователям построить отчеты, например, за каждую неделю отдельно. Впрочем, эти ограничения в основном актуальны для крупных контор, с десятками мерчендайзеров и большим количеством собранных данных и сложными отчетами.

New linux kernel 2.6.33

Итак, ставлю сабж в дебиане из experimental. Мне предложено перейти на использование меток или идентификаторов устройств вместо наименований. Соглашаюсь, установщик радостно рапортует, что переписаны следующие конфиги:

/etc/fstab, /boot/grub/menu.lst, /etc/initramfs-tools/conf.d/resume, /etc/uswsusp.conf

Что получили - /dev/cdrom не изменился, своп у меня лежал в файле /swap и там остался, упоминания /dev/mapper/что-то-там сохранились неизменными, а все устройства вида /dev/что-то-там подключены по идентификаторам. Вроде все ок, но не оставляет ощущение подвоха. И так оно и есть - конфиг /etc/crypttab не преобразован. "Нафига мне эта самодеятельность". Простейший способ узнать UUID для устройств следующий:
$ ls -l /dev/disk/by-uuid/
Впрочем, для любителей извращений есть и другие способы, требующие установки дополнительных утилит. Теперь правим /etc/crypttab ручками.

Ну, вроде все готово к перезагрузке. В ближайшие дни я перезагружаться не планирую (ибо оно мне незачем - есть спящий режим), а как попробую, отпишусь о результатах.

Upd. Перезагрузка прошла без проблем. А пакеты ядра поправили и теперь /etc/crypttab тоже обрабатывается автоматически при замене идентификаторов.

Создание прототипов

Вариантов много, например, сервис gomockingbird.com, статья о нем здесь: Когда картинка красноречивее 1024 слов – прототипирование с MockingBird. Сам попробовал - достаточно удобно, альтернативы не смотрел, поскольку вполне устраивает названный сервис.

суббота, 20 марта 2010 г.

zlib-enabled FTS3 for SQLite 2.6.23

Выложил свои патчи для zlib-сжатия в модуле полнотекстового поиска FTS3 для SQLite, теперь база данных с полнотекстовым индексом примерно вчетверо компактнее. Патч брать здесь:
http://sqlite.mobigroup.ru/src/vinfo/d3d9906674
и функции сжатия/распаковки здесь:
http://sqlite.mobigroup.ru/src/dir?name=ext/compress
Или качать последнюю версию моей сборки деб-пакета SQLite.

Имеется одна неприятность - запрос count(*) выполняется медленно, т.к. приводит к распаковке всего контента базы, так уж в эскулайт работает интерфейс виртуальных таблиц. Решения пока не нашел, но есть обходной путь - обращаться напрямую к таблице %_content:

sqlite> select count(*) from file_text;
8430
CPU Time: user 0.508032 sys 0.012000
sqlite> select count(*) from file_text_content;
8430
CPU Time: user 0.004000 sys 0.000000

С учетом размеров современных электронных библиотек считаю, что сжатие критически необходимо, потому и выкладываю патч с вышеназванной недоработкой.

среда, 17 марта 2010 г.

Как скачать видеоролик из liveinternet.ru

Озадачили меня поиском композиции, звучавшей однажды в 80-х и где были слова "Случайные взгляды не знают преграды" и "Какая награда случайному взгляду? Случайному взгляду - награда - любовь!"

Гугление привело меня сюда:
Ирина Понаровская - Случайные взгляды

Замечательно, но хотелось бы сохранить ролик. Повторное гугление решило вопрос: сайт videosaver.ru съел вышеприведенную ссылку (именно ссылку, которая отображается в адресной строке браузера и начинается с http://) и выдал ссылку "скачать файл".

Вуаля!

Upd. А вот вдогонку ссылка на неофициальный сайт Понаровской.

Как скачать музыку из "Мой Мир"

Задали мне тут дома вопрос, как бы скачать музыку из Моего Мира. Во избежание дальнейших вопросов на эту же тему описываю решение:

1. Зайти на страницу просмотра композиции. Для этого в списке композиций ткнуть мышкой на нужную и попадете на страницу с единственной композицией и комментариями к ней.

2. В адресную строку браузера нужно ввести нижеприведенную команду вместо того, что там отображается сейчас.

javascript:document.write("<html><body><a href='"+document.getElementById ("the_player").getAttribute('url')+"'>"+document.getElementById ("the_player").getAttribute
('title')+"</a></body></html>");


3. Нажать клавишу Enter.

4. Страница браузера очистится и на ней появится единственная строчка текста, содержащая название композиции. Правой клавишей мышки кликните на ней и выберите в контекстном меню "Сохранить как" или аналогичный пункт (название пункта меню может отличаться в разных браузерах).

Примечание: можно в пункте 4 сразу скопировать название композиции и при сохранении вставить его в качестве имени файла, но это уж кому как будет удобнее.

Проверено в браузерах Google Chrome и Firefox. Вероятно, в Opera тоже будет работать, а в Internet Explorer не будет.

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

Распределенные базы данных

Предупреждение: написано в стиле заметок на полях и воспроизводит ход размышлений автора, у читателей процесс размышления, равно как и наличие этого самого процесса и его результаты, могут отличаться!

Посещавшие меня мысли о распределенных базах данных и их применимости начинают обретать законченные черты, а значит, самое время сделать соответствующую реализацию. Поскольку я уже знаю ответ на вопросы "что, как, зачем", то можно погуглить для ознакомления с уже существующими реализациями и лежащими в их основе концепциями.

Основная идея состоит в том, что распределенная БД отнюдь не предполагает и не требует распределенную СУБД. Посмотрим на это утверждение с такой стороны - информация первична, а способ ее представления - вторичен. Например, из споры можно "восстановить" бактерию, а бактерии вовсе незачем раздуваться до размеров материка, когда можно просто превратить себя в спору и с попутным ветром этот материк перелететь, после чего "ожить". А дальше - интереснее. Процесс репликации базы данных вполне себе аналог полового размножения (т.е. обмен генетической информацией), к примеру, инфузорий, а создание копии базы, разумеется, - бесполого. Поскольку и образование цисты предусмотрено природой, получается, что инфузория вполне достойный ориентир для нас. Из аналогии сразу получаем практическое следствие - результат скрещивания двух БД может быть идентичен одному из "родителей" или иметь признаки обоих. Весьма доступно и возражений не вызывает. Так и хочется сразу же проанализировать доминантные признаки, но это уже детали реализиции алгоритма разрешения конфликтов при репликации. Есть чему порадоваться - мы нашли простой и хорошо изученный аналог того, что обычно представляется в совершенно запутанном виде.

А теперь самое время поискать аналог инфузории в программном обеспечении. Уже понятно, что распределенные именно СУБД - ошибка эволюции и на них мы смотреть не будем.

Гугл сразу же выдал ссылку, да еще перевод предложил, притом забавный:

Ископаемое: размышления по поводу дизайна ископаемой DVCS
Исходный язык: английский
Мы утверждаем, что ископаемые не основывается на SQLite на всех и что ископаемые не основывается на распределенной базы данных, поскольку NoSQL ископаемого представляет собой распределенную NoSQL...

Fossil: Thoughts On The Design Of The Fossil DVCS
We claim that Fossil is not based on SQLite at all and that Fossil is not based on a distributed NoSQL database because Fossil is a distributed NoSQL ...
www.fossil-scm.org/index.html/doc/tip/www/theory1.wiki

Кликабельная ссылка: Thoughts On The Design Of The Fossil DVCS

В свете наших биологических аналогий ошибка перевода очень "даже в тему" оказалась. Каким-то образом гугл сделал потрясающую вещь, сумев найти в тексте ключевую фразу:
We claim that Fossil is not based on SQLite at all and that Fossil is not based on a distributed NoSQL database because Fossil is a distributed NoSQL database.

Подробности можем прочитать по ссылке, хотя процитированная выше фраза исчерпывающе объясняет концепцию.

Таким образом, вместо решения сложнейшей и бесполезной задачи создания распределенной СУБД широко известный в узких кругах DRH сделал распределенную БД. Интересно, как он мыслил, явно ведь каким-то другим путем шел.

Можно и других примеров поискать, но как раз с fossil и SQLite я близко знаком, да и программистов, способных излагать идеи настолько доступно, как это делает DRH, долго по сусекам скрести.

Кандидат на распределенную реализацию у меня уже давно напрашивается, и это будет веб-сервис. В настоящий момент реализация существует и уже лет 5 верой и правдой служит одному из сотовых провайдеров. Попробую решить следующую задачу - реализовать втрое больший функционал за втрое меньшее время, на втрое более простой схеме БД и втрое меньшим объемом кода - причем так, чтобы новой версией было втрое легче пользоваться. А почему бы и нет?

воскресенье, 14 марта 2010 г.

Google Gears под linux

Сабж живет здесь: gears.google.com. О нем знает вики. См. линки в вики и узнаете много нового.

Но в линуксе не ставится, грязно ругаясь: "Google Gears" could not be installed because it is not compatible with your Firefox build type (Linux_x86-gcc3). Грязно - это потому что сабж собран в 32-бит версии, но выдает себя за 64-битного.

Или правим версию целевой платформы в install.rdf, или для iceweasel 3.5.8 работающий сабж можно взять здесь:
wget "http://gears.googlecode.com/issues/attachment?aid=-8070727757150286122&name=gears-linux-new.xpi"

Результат можно проверить, посмотрев примеры.

среда, 10 марта 2010 г.

О технопарках

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

Вот ведь экспериментаторы - знают, что дерьмо сделают, но им очень интересен вкус этого дерьма, причем сами пробовать не будут, заставят это делать неких "выдающихся специалистов", на которых прямо-таки загонную охоту организовывают. Если в ГУЛАГе интеллигенты, простите, подыхали под тачками, то теперь, по мнению сами знаете кого, интеллигенты должны подыхать рядом с компьютерами. Просто потому, что кое-кому, видите ли, это любопытно видеть, а более безобидные развлечения, вроде обкрадывания некогда великой державы, приелись. Видимо, очень хочется проделать с последними из могикан отечественной науки нечто зрелищное, примерно так, как это было сделано со спортом.

вторник, 9 марта 2010 г.

ПО MBG Offline Service

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

Все слайды кликабельные, а оригинал презентации расположен здесь.

Кстати, программа для работы с веб-камерой (слайд 14) работает под всеми виндоус, начиная от 98-го и заканчивая виндоус 7. И это при том, что программа написана под linux debian, а последний виндоус, в котором мне довелось работать - winXP. Лично я рассматриваю это как хороший пример оптимизации расходов на поддержку ПО. Впрочем, это уже тема для отдельной статьи об ИТ- бизнесе.































понедельник, 8 марта 2010 г.

Коллекции электронных книг

$ aptitude show calibre

Описание: e-book converter and library management
Calibre is meant to be a complete e-library solution. It includes library management, format conversion, news feeds to ebook conversion as well as e-book reader sync features.

Calibre is primarily a ebook cataloging program. It manages your ebook collection for you. It is designed around the concept of the logical book, i.e. a single entry in the database that
may correspond to ebooks in several formats. It also upports conversion from a dozen different ebook formats to LRF and EPUB. A graphical interface to the conversion software can be
accessed easily by just clicking the "Convert E-books" button.

Supported input formats are: MOBI, LIT, PRC, EPUB, ODT, HTML, CBR, CBZ, RTF, TXT, PDF and LRS.

Calibre has a modular device driver design that makes adding support for different e-reader devices easy. At the moment, it has support for the SONY PRS 500/505/700 and the iPhone (with
the stanza reader software). Syncing supports updating metadata on the device from metadata in the library and the creation of collections on the device based on the tags defined in the
library view. If an book has more than one format available, calibre automatically chooses the best format when uploading to the device.

Calibre can automatically fetch news from a number of websites/RSS feeds, format the news into a ebook and upload to a connected device. There is support for generating LRF/EPUB ebooks.
The ebooks include the *full* versions of the articles, not just the summaries.

Calibre has also a built-in ebook viewer that can display all the major ebook formats.
Сайт: http://calibre.kovidgoyal.net/

Ставить следует с офсайта командой:
sudo python -c "import urllib2; exec urllib2.urlopen(\
'http://status.calibre-ebook.com/linux_installer'\
).read(); main()"
Note: вытягивает архив около 33 Мб размером.

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

Upd. Обновляется calibre регулярно и с каждой версией становится удобнее. Так что теперь пользуюсь только этой программой со своим ридером Sony PRS-505. Конвертирует она в lrf или pdf временами очень криво, так что см. следующие онлайн-конверторы:
Convert a file to the Sony LRF ebook format
Convert text to the ePub ebook format
Этот сайт имеет свойство временами не работать, но тем не менее приведу и на него ссылку сайт предназначен для конвертирования электронных книг из формата fb2 в формат lrf

Капча

  ___
 / _ \
| | | |
| | | |
| |_| |
 \___/
 _____
|  __ \
| |  | |
| |  | |
| |__| |
|_____/
 ______
|  ____|
| |__
|  __|
| |____
|______|
 
    /\
   /  \
  / /\ \
 / ____ \
/_/    \_\
 _____
|  __ \
| |  | |
| |  | |
| |__| |
|_____/
 ______
|  ____|
| |__
|  __|
| |
|_|
  ___
 / _ \
| (_) |
 \__, |
   / /
  /_/
 _____
|  __ \
| |  | |
| |  | |
| |__| |
|_____/


# Random Number in Tcl
# http://wiki.tcl.tk/13120

# hex and decimal values in Tcl
# http://www.wellho.net/resources/ex.php4?item=t202/hddh

# hex and decimal values in javascript
# http://javascript.about.com/library/blh2d.htm

# captcha generation see in fossil
# <input type="button" value="Fill out captcha" onclick="document.getElementById('u').value='anonymous'; document.getElementById('p').value='b0b67076';"/>>

namespace eval captcha {}
set ::captcha::symbols {
"
  ___
 / _ \\
| | | |
| | | |
| |_| |
 \\___/
" "
 __
/_ |
 | |
 | |
 | |
 |_|
" "
 ___
|__ \\
   ) |
  / /
 / /_
|____|
" "
 ____
|___ \\
  __) |
 |__ <
 ___) |
|____/
" "
 _  _
| || |
| || |_
|__   _|
   | |
   |_|
" "
 _____
| ____|
| |__
|___ \\
 ___) |
|____/
" "
   __
  / /
 / /_
| '_ \\
| (_) |
 \\___/
" "
 ______
|____  |
    / /
   / /
  / /
 /_/
" "
  ___
 / _ \\
| (_) |
 >> _ <
| (_) |
 \\___/
" "
  ___
 / _ \\
| (_) |
 \\__, |
   / /
  /_/
" "

    /\\
   /  \\
  / /\\ \\
 / ____ \\
/_/    \\_\\
" "
 ____
|  _ \\
| |_) |
|  _ <
| |_) |
|____/
" "
  _____
 / ____|
| |
| |
| |____
 \\_____|
" "
 _____
|  __ \\
| |  | |
| |  | |
| |__| |
|_____/
" "
 ______
|  ____|
| |__
|  __|
| |____
|______|
" "
 ______
|  ____|
| |__
|  __|
| |
|_|
"}

############################################ 
# http://dev.aolserver.com/wiki/AOLserver_Cookbook#Generating_random_passwords 
# Generating random passwords 
# puts [password 8] 
proc captcha::random_string {{iStringLength 8}} {
  # iStringLength - desired length of random string 
  # characters allowed to appear in the string 
  set sAllowableCharacters "0123456789ABCDEF"
  # get length one time 
  set iAllowableCharacters [string length $sAllowableCharacters]
  # begin random string as empty 
  set sRandomString ""
  # loop until desired length is achieved 
  for {set ii 0} {$ii < $iStringLength} {incr ii} {
    # get next random between 0 and length of allowed characters 
    set iRandomInt [ns_rand $iAllowableCharacters]
    # retrieve this random character 
    set sRandomCharacter [string index $sAllowableCharacters $iRandomInt]
    # append the character to our random string 
    append sRandomString $sRandomCharacter
  }
  return $sRandomString
}

puts "<html>><table>><tr>>"
foreach sym [split [ captcha::random_string 8] {}] {
    puts <td>><pre>>[lindex $::captcha::symbols [expr 0x$sym]]</pre>></td>>
}
puts "</tr>></table>></html>>"

Мини-сервер

Последнее время появились разные варианты, что радует. Сам я по старинуе - использую Linksys NSLU2 (debian lenny), но современные аналоги способны на много большее, вероятно, вскоре их можно будет ставить на хостинги как специализированные серверы.

Не успел я еще приобрести и опробовать SheevaPlug, как уже анонсирован его улучшенный вариант - GuruPlug Server — новая версия ультракомпактного Linux сервера размером с зарядное устройство. Здесь смотреть всю линейку в продаже: GuruPlug Server

Вот и еще одно устройство того же класса: Сервер в форме блока питания с Ubuntu Linux

Жаль только, что ноутбук на процессорах ARM пока остается мечтой. Что-то где-то анонсировано, но вживую - отсутствует. Впрочем, не так давно (а ведь лет 5 уже пролетело, вот дела) и Linksys NSLU2 был прорывом в своей области.

воскресенье, 7 марта 2010 г.

О торрентах

Как известно, бесплатно и без разрешения правообладателя скачивать фильмы, музыку и проч. произведения - незаконно. А делается это, по словам газеты Комменсант, вот где:

  • Torrents.ru
  • Zaycev.net
  • Torrentino.ru
  • Tfile.ru
  • Tvigle.ru

Разумеется, вы об этих ресурсах должны знать только для того, чтобы ненароком оттуда что-нибудь не скачать. Внимательно прочитайте правила использования трэкеров, т.к. незнание закона не освобождает от ответственности, так что лучше знать, в чем именно может (потенциально) состоять ваше нарушение. От себя добавлю, остерегайтесь еще и ресурса kinozal.tv Последний, кстати, посещаем весьма квалифицированными и интеллегентными грешниками ;-)

Torrents.ru в силу известных причин куда-то переехал, но продолжает работать. Кому интересно, гуглите.

(C) Alexey Pechnikov aka MBG, mobigroup.ru