Python vs Perl — продолжение
Доисторические времена
Perl появился в 1988 году (строго говоря, в декабре 1987-го).
Какие основные идеи легли в основу Perl?
Основная объективная идея состояла в объединении возможностей различных средств для манипулирования текстовыми файлами: sh, awk, sed, tr. На тот момент такого единого средства не существовало, а необходимость в нём была.
Прочитать остальную часть записи »
Python vs Perl: Python против Perl
Читатель спросит: «Зачем сравнивать два таких несравнимых языка?» Отвечу. Perl и Python, будучи очень разными языками, всё же имеют много общего. Они универсальны (в отличии от, скажем, PHP), очень развиты (в отличии от shell, awk и подобных) и они оба являются скриптовыми языками (в отличии от не менее мощных C/C++, Pascal и других). Таким образом, они часто соперничают на одной территории и сравнивать их приходится.
Прочитать остальную часть записи »
Проблема остановки: доказательство неразрешимости
Последнее время (начало 2009 года) мне довелось принять участие в обсуждении различных способов организации грамматического разбора (спасибо habrahabr). Эти обсуждения натолкнули меня на мысль о том, что очень многие программисты склонны разделять существующие задачи на сложные и простые. Они (программисты) находятся во власти наивных иллюзий, что любую задачу можно решить, надо только найти алгоритм. Из-за этого большинству даже не приходит в голову, что задачи можно (и нужно!) систематизировать; очень часто безосновательно делаются очень общие высказывания; неуместно используются слова «всегда», «никогда», «любой»; используются наивные характеристики типа «достаточно сложный». Всё это подтолкнуло меня к написанию заметки о неразрешимых задачах.
Прочитать остальную часть записи »
О пользе рекурсии: примеры использования рекурсии
Эту заметку о пользе рекурсии я написал после прочтения соответствующей части книги С. Макконнелла «Совершенный код». Книга прекрасная, но, на мой взгляд, автор совершенно напрасно обещает уволить сотрудника, использующего рекурсию. Мне рекурсия помогала много раз, и я видел множество превосходных примеров её использования.
Прочитать остальную часть записи »
C++: Памятка C++, конструкторы, копирование, присвоение, деструкторы
Очень долго собирался написать памятку по разным приёмам программирования на C++. Но никак не мог выбрать достаточно компактный способ изложения. Получалось либо непонятно, либо очень длинно. В конце концов, я решил написать небольшой пример, снабжённый комментариями. Здесь, конечно, представлено далеко не всё, что стоило бы включить в памятку, но за-то то, что есть, изложено очень сжато, компактно и, мне кажется, что понятно. Я не планирую останавливаться на этом примере, для других аспектов программирования на C++ я постараюсь придумать другие примеры. Пока же, жду замечаний, предложений и критики этой первой заметки.
Прочитать остальную часть записи »
Алгебра логики : правила построения и преобразования логических выражений
Алгебра логики позволяет легко преобразовывать логические выражения, что бывает очень полезно. В этой заметке я хочу максимально просто, без математических обозначений, которые непривычны большинству людей, рассказать об этих простых и мощных правилах.
Обозначения
Я буду придерживаться обозначений, ясных большинству людей и привычных для программистов.
• «Истина» — true
• «Ложь» — false
• Логическое «и» — and
• Логическое «или» — or
• Логическое отрицание — not
Прочитать остальную часть записи »
Настройка редактора vi: макросы, русификация, настройки
Настройка редактора vi
Привожу здесь свой файл настроек vi — ~/.exrc
Но обратите внимание на то, что если его просто скопипаситить, то работать будет не всё(!) Читайте ниже о том, как правильно создать свой .exrc.
" ————— setup
set autoindent
set backup="vi.bak"
set showmode
set exrc
set extended
set ruler
set verbose
set sw=2
" ————— macro
" F1 sh
map OPsh 1Gi#!/bin/sh^M^M^[«
" F1 py
map OPpy 1Gi#!/usr/local/bin/python^M^M^[«
" F1 pl
map OPpl 1Gi#!/usr/local/bin/perl^M^M^[«
" F2
map OQ :w^M
" F3
map OR :wq^M
" esc-esc
map ^[^[ :q^M
" ————— ru
map й q
map ц w
map у e
map к r
map е t
map н y
map г u
map ш i
map щ o
map з p
map х [
map ъ ]
map ф a
map ы s
map в d
map а f
map п g
map р h
map о j
map л k
map д l
map ж ;
map э '
map я z
map ч x
map с c
map м v
map и b
map т n
map ь m
map Й Q
map Ц W
map У E
map К R
map Е T
map Н Y
map Г U
map Ш I
map Щ O
map З P
map Х {
map Ъ }
map Ф A
map Ы S
map В D
map А F
map П G
map Р H
map О J
map Л K
map Д L
map Ж :
map Э "
map Я Z
map Ч X
map С C
map М V
map И B
map Т N
map Ь M
map Б <
map Ю >
" эти две пары конфликтуют
" можно оставить либо одну, либо другую
"map б ,
"map ю .
map . /
map , ?
Команды vi: Краткая справка по командам редактора vi
Несколько слов об этом руководстве. При его создании я руководствовался следующими целями: На первом месте должна быть компактность. Руководство описывает только суть команд. Детали можно прочитать в полном руководстве или просто попробовать, запустив vi. Во-вторых, руководство должно быть полным. Это не краткое руководство «как выйти из vi», а полное описание всех возможностей. Пока описано не всё, но те аспекты работы в vi, которые затронуты в этом руководстве, освещены с максимальной детальностью.
Прочитать остальную часть записи »
Сборка evilwm: Xorg, оконный менеджер, панель управления
evilwm — лучший оконный менеджер
За десять лет использования X Window System я перепробовал множество оконных менеджеров. Под какими-то работал годами, какие-то просто попробовал на один зуб. И общее направление моей «эволюции» практически всегда шло к упрощению оформления рабочего стола. В конце концов, я фактически сделал свой собственный оконный менеджер. Сделан он из evilwm 0.99.25 (http://www.6809.org.uk/evilwm/).
Прочитать остальную часть записи »
Сборка PHP: PHP, MySQL, графическая библиотека GD, jpeg, png, ttf
Общие замечания
Эти советы не годятся для настройки рабочего сервера. Они написаны для создания Apache/PHP-среды на локальной машине для разработки и тестирования. Больше того, PHP устанавливается в максимально «гостевом» режиме — так, чтобы (i) он не вступил в конфликт ни с одним проектом, из тех, что уже есть на машине; и (ii) его можно было безболезненно удалить как только в нём пропадёт необходимость.
Прочитать остальную часть записи »
Сборка Perl и mod_perl: Сборка Perl и mod_perl, утечки памяти, настройка
Общие замечания
Эта заметка относится к Apache 1.3. Версия 2.0 заметно отличается.
При установке ПО из исходников, я предпочитаю не «портить» систему. На большинстве серверов вы обнаружите ПО, собранное именно с общепринятыми опциями.
Поэтому я собираю ПО из-под пользователя (не root) и устанавливаю в домашней папке этого пользователя.
Прочитать остальную часть записи »
Сборка mod_python: связка Python — Apache
Общие замечания
Современный mod_python не поддерживает Apache 1.3. Вам понадобится Apache старше 2.0.
Сборка mod_python
В сборке mod_python очень прост.
Наиболее ценными являются две опции конфигурирования:
./configure —prefix=$inst_pref \
—with-apxs=$ap_pref/bin/apxs
Сборка Python 2.6 под FreeBSD : Установка Python из исходных кодов
Решил я тут установить себе Python 2.6. В портах его нет, а из исходных текстов Python под FreeBSD всегда ставился не охотно. Пришлось разобраться.
Проблема
При сборке Python под FreeBSD make выдаёт сообщение:
gcc -shared build/[…]/Modules/_cursesmodule.o \
-L/usr/local/lib -lncursesw -o build/[…]/_curses.so
Segmentation fault (core dumped)
*** Error code 139
Qemu: Windows под UNIX: виртуальная машина qemu (kqemu) под FreeBSD
Какие задачи решаем (запуск Winodws под FreeBSD)
Qemu — универсальное средство (официальный сайт Qemu). Он создаёт виртуальные машину, на которой можно запустить любую ОС. Я его использую для запуска Windows (XP) на FreeBSD. Как это сделать я и собираюсь вкратце рассказать.
Установка qemu под FreeBSD
Прочитать остальную часть записи »
Загрузочный CD/DVD с GRUB : boot CD/DVD disk, GRUB
Здесь я расскажу только как сделать диск загрузочным. Мы не будем размещать на диске никакую ОС — это не LiveCD, но используя этот диск можно загрузить любую ОС, если загрузчик этой ОС утрачен. Например Windows, при установке, всегда переписывает MBR под себя.
Прочитать остальную часть записи »
FreeBSD: звук : FreeBSD запись wav, mp3, CD
Пишем звук с микрофона
Прежде всего запустите команду aumix и убедитесь, что чувствительность микрофона не на нуле. Программа имеет очень понятный интерфейс, а канал микрофона показан красной буквой R, так-что вы не запутаетесь.
Кстати, эта же программа позволяет регулировать и другие каналы, включая такую полезную вещь, как миксер. Вы можете подать сигнал с микрофона сразу на колонки или на линейный выход. Здесь же вы можете отрегулировать баланс левого и правого канала и многое другое. Кроме того, программа aumix может работать не только в интерактивном режиме, загляните в man 1 aumix.
Прочитать остальную часть записи »
Работа с CD/DVD : Записать, прочитать, стереть, дописать под FreeBSD CD, DVD, boot, bootable, GRUB, eltorito
Информация рассчитана в первую очередь на пользователей FreeBSD, но большая её часть справедлива и для других UNIX.
Монтируем диски и образы
Монтируем CD и DVD одинаково:
mount_cd9660 -o ro /mnt /dev/acd0
Смонтировать образ можно в две команды:
mdconfig -a -t vnode -f file.iso -u 0 -o readonly
mount -t cd9660 /dev/md0 /mnt/iso
ftpd через rc.d : Настройка демона ftpd во FreeBSD
rc.d-скрипт для запуска ftpd
Те, кто интересовался вопросом запуска ftpd под FreeBSD 6.0 и ниже, конечно знают, что для этого демона не предусмотрено запускающего скрипта (он появился в версии 6.1). Предполагается, что служба FTP может запускаться только через inetd. На сколько это разумно — судить не мне, но лично я не понимаю, почему я должен запускать и настраивать inetd+ftpd, если мне нужен только ftpd.
Прочитать остальную часть записи »
Элементарная безопасность : FreeBSD безопасность syslogd, lpd, xorg, mysql
Эта информация может быть полезна всем пользователям FreeBSD и других UNIX-подобных систем. Проще всего обезопасить свою систему, просто запретив демонам «слушать» внешний мир. Если в вашей системе много демонов, то вы можете воспользоваться более сложным, но и более гибким решением — настроить FireWall.
Прочитать остальную часть записи »
Различные UNIX-утилиты: ssh-инструменты, генерация md5, subshell.c-ошибки на консоли, ntpdate – синхронизация времени
Здесь я собрал небольшую коллекцию информационных и вспомогательных утилит и различных приёмов, которые бывают очень полезны, но пользуешься ими редко и названия и ключи забываются.
(Честно говоря, информация стала уже слишком разношёрстна, надо бы её уже разделить на несколько страниц, но всё руки не дойдут.)
Прочитать остальную часть записи »
FreeBSD и bluetooth : приём и передача файлов через USB-bluetooth-адаптер
Про работу с bluetooth-устройствами под FreeBSD сказано очень много… я бы сказал: очень много лишнего. На самом деле всё гораздо проще, чем пишут в блогах и даже в handbook. Я думаю, это связано с тем, что информация устаревает. Я опишу как работать с USB-bluetooth адаптером под FreeBSD 6.1, возможно на более старых версиях этих действий будет недостаточно.
Прочитать остальную часть записи »
Subversion: svn+ssh : Доступ к SVN по ssh-туннелю
Существует множество развитых средств работы с Subversion. Но иногда необходимо поднять хранилище так чтобы: это не заняло много времени, не требовало бы сложного администрирования, хранилище было бы доступно удалённо и доступ это был бы надёжно защищён. Это совсем не сложно.
Прочитать остальную часть записи »
Настройка OpenVPN : OpenVPN, ключ, key, firewall
В большинстве Internet-источников рассказано, как настроить OpenVPN с X.509. Это процедура, сложность которой далеко не всегда оправдана. Но есть и более простой способ, который нигде толком не описан (я нашёл хорошее HOWTO только на английском языке). Вот его-то я и хочу описать.
Прочитать остальную часть записи »
Настройка ipfw (FireWall) : firewall на FreeBSD, включая dummynet
В Интернете есть много пространных рассказов про то как настроить межсетевые фильтры, экраны, объединить сети и прочие сложности. Я про это писать не буду. Я напишу несколько простых рецептов и примеров, вполне готовых к использованию и рассчитанных на рядового пользователя, которые помогут ему защититься от внешнего вторжения.
Прочитать остальную часть записи »
FreeBSD: начальная настройка
Здесь вы найдёте некоторые рецепты, выработанные мною. Учтите, это просто памятка, а не руководство. Я просто цитирую куски своих настроечных файлов и даю минимальные комментарии.
Права на устройства в devfs
Права на устройства проще всего настроить в /etc/devfs.conf. Там есть примеры на все случаи жизни. Но devfs.conf не может влиять на устройства, которые появляются уже после загрузки системы. Это обычно USB-устройства.
Прочитать остальную часть записи »
Настройка Xorg : Графический интерфейс, Xnest, xterm, кодировка
Начальная настройка Xorg
Конфигурационный файл составляется автоматически по команде
Xorg -configure
Далее прописываем определённую моду в секцию "Screen", например так:
Modes "1280×1024"
Кодировка в MySQL 4.1 : русские кодировки koi8r, windows 1251
Несколько слов о кодировках в MySQL 4.1 (но не 4.0).
Самое приятное в версии 4.1 то, что кодировки в которых работают клиент и сервер можно указывать отдельно. Поэтому для смены кодировки пересобирать сервер совсем не обязательно.
Настройка клиентов через my.cnf
Прочитать остальную часть записи »
Протоколирование SQL-запросов : log-file, протокол, MySQL запросы, отладка
Иногда, при отладке, очень хочется посмотреть, какие запросы получает MySQL-сервер. Узнать это очень просто: надо включить режим протоколирования.
Включаем протоколирование SQL-запросов
Пишем в /etc/my.cnf в секцию mysqld строчку:
[mysqld]
log = /var/log/MySQL.log
Брошюруем djvu – как сделать djvu книгу
Есть места (например, трамвай), где очень кстати бывает почитать книжку, но читать с экрана в таких местах так же невозможно, как и с листов А4. В конце концов, я решил преобразовать djvu в удобную брошюру. Процесс это достаточно творческий, зависит от качества книги, от её объёма и размера листов… поэтому универсального инструмента я так пока и не нашёл (не сделал). Здесь я описываю набор приёмов, комбинируя которые можно быстро добиться желаемого результата.
djvu книга
Прочитать остальную часть записи »
Преобразование pod в pdf, perl old documentation, text, latex, postscript, pdf
Для преобразование pod в pdf понадобятся некоторые системы. Проще всего воспользоваться системой LaTeX.
Сперва делаем PostScript:
#!/bin/sh
f=DBI
pod2latex -out $f.t $f.pm
( cat doc-head-12pt.tex
perl -pe 's/section\*/section/g' $f.t.tex
cat doc-tail.tex ) > $f.tex
latex $f.tex
latex $f.tex
dvips -o $f.ps $f.dvi