Представляю проект Perl 5 Maven по-русски

06.04.2013

Начата работа по переводу учебника Gabor Szabo по Perl, Perl Maven.

Переведена вводная статья, Установка и начало работы с Perl:

В ней вы узнаете, как установить Perl на Microsoft Windows и как начать использовать его на Windows, Linux или Mac.

Вы узнаете, как установить и настроить среду разработки, или, говоря простым языком: какой редактор или IDE использовать для Perl-программирования?

Также мы увидим стандартный пример "Hello World".

Читать дальше

Буду весьма признателен за конструктивную критику.

vim: внешние фильтры

29.04.2010

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

Выполнение внешней команды на диапазоне:

  1. :{диапазон} ! {команда}

При этом на STDIN команды подается содержимое диапазона, а затем диапазон заменяется выводом STDOUT команды.

Несколько примеров.

Форматирование всего исходного текста на perl с помощью perltidy:

  1. :% ! perltidy -es=4 -t -st

Отфильтровать с помощью команды grep все строки, содержащие символ "#" из строк 14-24:

  1. :14,24 ! grep -v "\#"

vim: сортировка

20.04.2010

Сортировать в vim очень просто:

  1. :{диапазон}sort

Диапазон подставится автоматически, если в визуальном режиме (V) выделить блок, а затем перейти в командный режим (:):

  1. :'<,'>

Или для сортировки всего файла:

  1. :%sort

Сортировка в обратном порядке:

  1. :%sort!

Сортировка в прямом порядке, удаляя все дубликаты:

  1. :%sort -u

Также для сортировки можно использовать внешние утилиты, например стандартный юниксовый sort:

  1. :%!sort --numeric-sort --reverse

Ну и как обычно, читаем маны:

  1. :help :sort

debian: ошибка при сборке apache 1.3.41

06.12.2009

При сборке apache 1.3.41 под debian 5.0 lenny возникает ошибка: отсутствует ndbm.h:

  1. $ ./configure \
  2. --prefix=/usr/local/apache \
  3. --enable-module=most \
  4. --enable-shared=max \
  5. $ make
  6. ...
  7. mod_auth_dbm.c:42:18: error: ndbm.h: No such file or directory
  8. mod_auth_dbm.c: In function ‘get_dbm_pw’:
  9. mod_auth_dbm.c:110: error: ‘DBM’ undeclared (first use in this function)
  10. mod_auth_dbm.c:110: error: (Each undeclared identifier is reported only once
  11. mod_auth_dbm.c:110: error: for each function it appears in.)
  12. mod_auth_dbm.c:110: error: ‘f’ undeclared (first use in this function)
  13. mod_auth_dbm.c:111: error: ‘datum’ undeclared (first use in this function)
  14. mod_auth_dbm.c:111: error: expected ‘;’ before ‘d’
  15. mod_auth_dbm.c:114: error: ‘q’ undeclared (first use in this function)
  16. mod_auth_dbm.c:128: error: ‘d’ undeclared (first use in this function)
  17. make[4]: *** [mod_auth_dbm.so] Error 1
  18. make[3]: *** [all] Error 1
  19. make[2]: *** [subdirs] Error 1
  20. make[2]: Leaving directory `/usr/src/apache_1.3.41/src'
  21. make[1]: *** [build-std] Error 2
  22. make[1]: Leaving directory `/usr/src/apache_1.3.41'
  23. make: *** [build] Error 2

Поиск по содержимому пакетов показывает, что такого файла в пакетах debian нет. Пишут, что раньше он входил в состав libc6. В одном из листов рассылки было найдено такое решение:

  1. $ sudo apt-get install libgdbm-dev
  2. $ ln -s /usr/include/gdbm-ndbm.h /usr/include/ndbm.h

Что интересно, работает.

ssl: генератор csr

03.12.2009

Добавлен раздел инструменты, в нем первый инструмент - Генератор CSR (OpenSSL). Помимо CSR генерит также и Private Key. Делал для себя, как удобную обертку для консольного openssl, но может быть еще кому-то понадобится?

nvidia в ubuntu: реанимация

20.11.2009

Внезапно умерли иксы. Как в анекдоте: шел ежик ubuntu по лесу, забыл как дышать грузить драйвер nvidia и умер.

Шел ежик по лесу, и вдруг забыл как дышать

Шел ежик по лесу, и вдруг забыл как дышать

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

/var/log/Xorg.0.log:

  1. (II) LoadModule: "nvidia"
  2. (WW) Warning, couldn't open module nvidia
  3. (II) UnloadModule: "nvidia"
  4. (EE) Failed to load module "nvidia" (module does not exist, 0)

Примерно такие сообщения я увидел в логах, войдя с ноута по ssh на терпящую бедствие рабочую станцию.

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

Тут позволю себе немного лирики.

Линукс дома стоит у меня уже давно, и проблем с ним никогда особо не было.Смешные случаи были. Вот например жена, человек максимально далекий от компов, по радио как-то услышала, что есть такой Линукс, и под ним нет ни вирусов, ни троянов, и вообще чудо-система! И так ей эта идея понравилась, что говорит мне: «Слушай, а давай нам тоже этот Линукс поставим! Я в нем может тоже разберусь». Я ей говорю, «Мать, а ты не заметила что последние полгода ты на моем компе сидишь на этом самом Линуксе?» Это при том, что она не только по интернетам ходила, но и проги под Wine запускала, в Open Office чего-то та ваяла, GIMP-ом фотки редактировала ("странный у тебя фотошоп"). Посмеялись, удивлению её не было предела..

В общем, Линукс в целом был надежной домашней системой. А тут, после обновления Ubuntu до 9.10, начался сплошной гемор: то тут отвалится, то там. Ни кино посмотреть, ни в инет выйти. И вот сегодня женщина предложила снести к ебеням Ubuntu и поставить «нормальный виндовс».

Парни из Canonical! Я понимаю, что выпускать новый релиз каждые полгода — это ужасно круто, и ваши боссы наверняка гордятся вами и тем, что все идет по плану, но блин, чуваки! Мне ужасно неудобно перед женой, что вместо того, чтобы провести с ней вечер, я сижу и тупо втыкаю в десятки сообщений на форумах, где такие же бедняги сидят и тупо не знают что делать с сошедшей с ума железкой.

На этом с лирикой закончим.

В общем, гугль не помог, пришлось действовать по наитию.

Сначала смотрим, что у нас есть в системе:

  1. $ sudo dpkg --get-selections|grep nvidia
  2. nvidia-173-modaliases install
  3. nvidia-180-modaliases install
  4. nvidia-185-libvdpau deinstall
  5. nvidia-185-modaliases install
  6. nvidia-190-kernel-source install
  7. nvidia-190-libvdpau install
  8. nvidia-190-modaliases install
  9. nvidia-96-modaliases install
  10. nvidia-common install
  11. nvidia-glx deinstall
  12. nvidia-glx-173 deinstall
  13. nvidia-glx-177 deinstall
  14. nvidia-glx-185 deinstall
  15. nvidia-glx-190 deinstall
  16. nvidia-glx-new deinstall
  17. nvidia-glx-new-envy deinstall
  18. nvidia-kernel-common install
  19. nvidia-settings deinstall
  20. nvidia-settings-190 install

Как видно, много всего. Удаляем всё:

  1. $ sudo dpkg --get-selections | grep nvidia | grep -v deinstall | awk '{print $1}' | xargs sudo apt-get remove

Проверяем, что все удалено:

  1. $ sudo dpkg --get-selections | grep nvidia | grep -v deinstall

И ставим только то, что нужно, а именно последний официальный драйвер от Canonical:

  1. $ sudo apt-get install nvidia-glx-185

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

Тот самый ежик (картинка с сайта photo.ejik-land.ru)

Тот самый ежик (картинка с сайта photo.ejik-land.ru)

ubuntu 9.10: проклятие Фантомаса

09.11.2009

Все началось с того, что я решил посмотреть кино — Луна 2112. Поскольку действие происходит на Луну, да еще в 2112 году, то голубой цвет кожи, и зеленоватая кровь меня, хоть и удивили, но не сильно:

Прекрасные синие лица

Прекрасные синие лица

Фильм досмотрел, понравилось.

На следующий день я включил не менее фантастичное кино - Часто задаваемые вопросы о путешествии во времени, и когда и здесь все герои выглядели как Фантомас, я честно сказать напрягся!

Часто задаваемые вопросы о путешествиях во времени: и здесь синева

Часто задаваемые вопросы о путешествиях во времени: и здесь синева

Попробовал запустить фильм в других проигрывателях: vlc, xine, mplayer. Безрезультатно - цвета при воспроизведении видео искажены до неузнаваемости. Покрутил настройки NVIDIA X Server Settings: не помогает, можно сделать только хуже. Искаженные цвета при проигрывании видео не удавалось исправить.

Тут вспомнил, что при обновлении Ubuntu до 9.10 драйвер NVIDIA обновлялся до версии 185. Откатился до не-рекомендуемой версии 173. Ага! Заработало! Цвета стали нормальными. В качестве побочного эффекта получил тормоза в других приложениях. Не понравилось, вручную обновился до версии 190. Цвета снова поплыли...

Нашлось решение насколько же простое, насколько неочевидное:

В Видеопроигрывателе (Totem) идем в Правка -> Параметры -> Показ и жмем кнопку [Установить настройки по умолчанию]. Вауля! Все цвета пришли в норму во всех проигрывателях.

Как любит говорить в таких случаях мой знакомый-художник:

— Нет повода не выпить!

..и немедленно выпил.

..и немедленно выпил.

ubuntu 9.10: прощай, init. привет, upstart

06.11.2009

Еще одно важное нововведение, которое тихой сапой появилось при агрейде системы до 9.10, стал новый демон upstart, который заменил собой старый, хорошо изученный SysV init.

Теперь запуск сервисов настраивается не через скрипты в /etc/init.d (хотя в целях обратной совместимости обвязка для их запуска имеется), а через конфигурационные файлы в /etc/init.

Вот, скажем, конфигурация для cron, /etc/init/cron.conf:

  1. # cron - regular background program processing daemon
  2. #
  3. # cron is a standard UNIX program that runs user-specified programs at
  4. # periodic scheduled times
  5.  
  6. description "regular background program processing daemon"
  7.  
  8. start on runlevel [2345]
  9. stop on runlevel [!2345]
  10.  
  11. expect fork
  12. respawn
  13.  
  14. exec cron
  15.  

Управление сервисами ('Jobs' в терминологии upstart) производится утилитой initctl:

  1. alexx@cubana:/etc/init$ sudo initctl stop cron
  2. cron stop/waiting
  3. alexx@cubana:/etc/init$ sudo initctl stop cron
  4. initctl: Unknown instance:
  5. alexx@cubana:/etc/init$ sudo initctl start cron
  6. cron start/running, process 13430
  7. alexx@cubana:/etc/init$ sudo initctl start cron
  8. initctl: Job is already running: cro

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

ubuntu 9.10: новый вид gdm

02.11.2009

После обновления Ubuntu до релиза 9.10 настройки окна входа в систему gdm сбросились на дефолтные, теперь при загрузке нас встречает некий коричневый кошмар. В настройках Gnome выбрать оформление gdm теперь невозможно.

Было:

3903346203_c96a2a59a8_o

Стало:

gdm-config

Гугление результатов не дало.

debian: добавляем в iptables поддержку ip sets (ipset)

27.10.2009

IP Sets – расширение пакетного фильтра ядра iptables, которое позволяет комфортно работать с большими наборами адресов/сетей. При написании правил iptables при этом мы оперируем именованными списками.

Это, пожалуй, единственный на сегодняшний день доступный способ писать правила для большого количества хостов/сетей, не перечисляя каждый из них в отдельном правиле. Если ваш сайт, работающий под linux, подвергается DDOS, вы наверняка уже знаете про IP Sets. Если нет - http://ipset.netfilter.org/.

Утилита ipset живет в одноименном пакете, а все необходимые патчи ядра входят в состав пакета netfilter-extensions-source, который собирается и устанавливается при помощи утилиты module-assistant (которая для удобства имеет более короткое имя: m-a).

Примерный сценарий установки ip sets выглядит так:

  1. $ sudo apt-get install ipset
  2. $ sudo apt-get install netfilter-extensions-source
  3. $ uname -a
  4. Linux host.domain.tld 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686 GNU/Linux
  5. # версия пакета linux-headers должна совпадать с версией ядра, для которого собирается netfilter-extensions
  6. $ sudo apt-get install linux-headers-2.6.26-1-686
  7. $ sudo m-a build netfilter-extensions
  8. $ sudo m-a update && m-a a-i netfilter-extensions

Версия пакета заголовков ядра должна точно соответствовать версии активного ядра, для которого собирается ipset.