2 сервера на Python
Интересные открытия ждут новичков при исследовании функциональности Python интерпретатора и состава библиотек.
SMTP сервер для разработчика
Команда:
python -m smtpd -c DebuggingServer -n
Что делает:
Выводит всё, что приходит по стандартному smtp протоколу на стандартный вывод. Можете перенаправить в файл, можете смотреть так, в терминале. По умолчанию ожидает соединения на порт 8025 (стандартный 25 порт использовать без повышения привилегий нельзя). Для дополнительных опций и возможностей смотрите документацию.
Веб сервер для статики или передачи файлов
Бывает так, что надо посмотреть что-то по http протоколу, т.к. политики браузера не разрешают это через file://. А бывает, что надо что-то большое передать по сети коллеге, что выкладывать на друпбоксы долго, а расшаривать папки муторно (или запрещено файерволами).
Команда:
python -m SimpleHTTPServer
Что делает:
Даёт доступ по http ко всем файлам в текущем каталоге. index.html работает, список файлов при его отсутствии выдаёт. По умолчанию использует 8000 порт (стандартный 80 порт использовать без повышения привилегий нельзя). На стандартный вывод пишутся логи запросов, что также удобно. Для дополнительных опций и возможностей смотрите документацию.
Забыть md5
Интересно, но я до сих пор считал, что md5 хеш в текстовом представлении (32 символа) для идентификации объектов — весьма не плохо. И коллизии маловероятны. Тем не менее, если не нужно привязываться к контенту объектов (как в git, к примеру, который, к слову, использует более длинный sha1), то можно поискать что-то более интересное и короткое.
Например, почитав статью Размещение, можно заключить, что у md5 при длине 32 символа возможно 16^32 вариантов. Это отлично! Однако не всегда нужно, поэтому могу предложить более простую реализацию: используя все символы английского алфавита и цифры можно получить достаточное количество вариантов ключей, надо лишь подобрать нужную длину для вашей задачи. При 5 (пяти, всего пяти!) знаках — это уже почти миллиард вариантов.
Это не моя идея, сервисы сокращения интернет ссылок используют этот механизм уже давно, но задуматься об эффективности перехода с md5 меня заставили собственные текущие задачи.
Регистрационный код по электронной почте, верификационный код какой-либо купонной системы, ссылка на информационный UGC элемент… Тут есть выигрыш при использовании более короткого кода. Хотя бы от того, что сам код становится менее страшным для человека (психологический момент использования сервиса) или ссылки в коде страницы станут короче (в случае UGC) — страница меньше и быстрее.
Это всё копейки. Но по копейкам набегают миллионы
/*
* Пример генерации кода на PHP
*/
function makeCode() {
$a = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 62 символа
$l = strlen($a) - 1;
$c = $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] .
$a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)] . $a[rand(0, $l)]; // 10 знаков
return $c; // число возможных размещений: 62^10 = 8,392993659*10^17
}
PS: На коллизии не забывайте проверять!
Коды ОК 004-93
Замучался искать в сети коды по общероссийскому классификатору видов экономической деятельности, продукции и услуг (ОКДП) ОК 004-93. Работать с текстами законов невозможно, есть ли бесплатные (хотя бы, не говоря уж об открытых) программы для Linux — не ведаю, сразу не нашел.
Озадачился и за час причесал базу кодов из открытых источников в формат <код> <табуляция> <описание>. Можно открыть в текстовом редакторе, табличном процессоре, загрузить в базу данных или сделать удобную программу для поиска — на ваше усмотрение.
Внимание: Я уверен, что там не все коды!
Обновление 2011-03-24 17:45: заполнен раздел 7200000 (УСЛУГИ, СВЯЗАННЫЕ С ДЕЯТЕЛЬНОСТЬЮ ПО ИСПОЛЬЗОВАНИЮ КОМПЬЮТЕРОВ).
Написал bash скриптик для поиска по кодам с выводом иерархии. А то иногда вроде смотришь, код правильный, а оно совсем из другой оперы.
#!/bin/bash
CODE=$1
DB="OK-004-93.csv"
function use {
echo "$0 CODE"
exit
}
[ -z "$CODE" ] && use
echo `grep "^${CODE:0:2}00000" $DB`
echo " "`grep "^${CODE:0:4}000" $DB`
echo " "`grep "^${CODE:0:6}0" $DB`
echo " "`grep "^${CODE}" $DB`
Тупо, но эффективно
Вот пример использования:
$ ./OK-004-93-SEARCH.sh 1512242 1500000 ПИЩЕВЫЕ ПРОДУКТЫ И НАПИТКИ 1512000 РЫБА И РЫБНЫЕ ПРОДУКТЫ ПЕРЕРАБОТАННЫЕ И КОНСЕРВИРОВАННЫЕ 1512240 Рыба крепкосоленая (без сельди) 1512242 Рыба крепкосоленая потрошеная с головой $ ./OK-004-93-SEARCH.sh 7260011 7200000 УСЛУГИ, СВЯЗАННЫЕ С ДЕЯТЕЛЬНОСТЬЮ ПО ИСПОЛЬЗОВАНИЮ КОМПЬЮТЕРОВ 7260000 СИСТЕМНЫЕ И ПРИКЛАДНЫЕ ПРОГРАММНЫЕ СРЕДСТВА 7260010 Системные программные средства 7260011 Операционные системы и средства их расширения
Python
Сколько не сопротивляйся, прогресс настигает…
Давно ли я изучал perl? Как казалось, самый крутой и развитый язык для всего-на-свете (и самый мозгодробильный, ага). Хотя, должен признать, язык и среда выполнения очень стабильные, библиотеками покрыты все предметные области, простые проекты делать легко, сложные — интересно, а работает оно годами и без сбоев.
Давно ли я изучал php? Самый продвинутый и простой язык для web-разработок. Как классно создавать на нём что-то: раз, два и готово! Сколько вокруг приложений на нём — бери, изменяй под себя и используй.
Но, вот уже довольно продолжительное время рядом со мной ширилось использование другого, нового и любопытного языка — python-а. Со времён моего знакомства с RedHat 8 я видел интересный процесс перехода в системных задачах от perl-а к python-у. Сам язык практически стабилизировался, появилось невообразимое количество библиотек. Использование сервисами Google, развитие приложений для web и другие применения — всё это не оставило выбора.
Начал изучать python. Не могу больше сопротивляться
Зачем изучать? Для меня есть минимум 3 причины: саморазвитие, быстрая разработка кросс-платформенных приложений, причём, как серверных, так и с графическим интерфейсом, а также разработка для web. А вообще — что-то очень много всего на python вокруг стало в моей любимой Ubuntu, да и вообще.
В голове есть идеи, реализация которых начата в процессе обучения, вероятно напишу про результаты позже. Как показал опыт, самая эффективная форма обучения — использование изучаемого. Тем не менее читать документацию, статьи и книги очень полезно. Поэтому посылаю:
- http://python.org/
- http://www.python.ru/
- http://www.djangoproject.com/
- http://www.djbook.ru/
- http://softwaremaniacs.org/blog/category/django/
- http://habrahabr.ru/blogs/django/
- https://launchpad.net/quickly
Принимаю ссылки от освоивших. Особенно интересны обзоры хороших практик применения особенностей языка и вообще описание этих особенностей и отличий от.
PS: Python — это не про рептилию (хотя в логотипе намекают), а про Monthy Python-ов, так что «улыбаемся и кодим, улыбаемся и кодим»!
Мультиязычный html документ
Иногда необходимо в одном html документе иметь несколько языков. Например, для хостинговой площадки ubuntu-eu.org мне пришлось делать заглушку с сообщениями на всех языках стран, размещающих там свои предстаительства Ubuntu Linux.


Что-то заинтересовало?