Сентябрь 2008

vim: old-skool h0tkeyz

23.09.2008
  1.  
  2. " F2 = Save file
  3. map <silent> <f2> :write<cr>
  4. imap <silent> <f2> <esc>:write<cr>
  5.  
  6. " F10 = Exit without save
  7. map <silent> <f10> :quit<cr>
  8. imap <silent> <f10> <esc>:q<cr>
  9.  

Firefox + linux: идеальные шрифты

21.09.2008

Идеальные шрифты для Firefox под *nix на данный момент это семейство Bitstream Vera *:
- Bitstream Vera Sans (без засечек, типа Arial/Verdana)
- Bitstream Vera Serif (с засечками, типа Times)
- Bitstream Vera Sans Mono (моноширинный)

В Firefox это живет в меню Правка -> Настройки -> Содержимое -> Шрифты и цвета:
лучшие шрифты для firefox под linux

Некоторые сайты, однако, жестко предписывают отображение текстов шрифтом Times:

  1. BODY{font-family: Times, serif;}

Результат может выглядеть примерно так:

firefox strange fonts

Это произошло из-за того, что настройки fontconfig по-умолчанию заменяют кривой системный Times на некий более удобный для восприятия шрифт.

Используя утилиту fc-match из набора fontconfig убеждаемся, что Times у нас в системе заменяется на "Nimbus Roman No9 L":

  1. ~$ fc-match times
  2. n021003l.pfb: "Nimbus Roman No9 L" "Regular"

Выкорчевываем корень зла:

  1. ~$ sudo rm /etc/fonts/conf.d/30-urw-aliases.conf
  2. ~$ sudo rm /etc/fonts/conf.d/30-metric-aliases.conf

(Если захочется восстановить статус кво, можно взять 30-urw-aliases.conf и 30-metric-aliases.conf из /etc/fonts/conf.avail)

Теперь настроим fontconfig так, чтобы при попытке отобразить шрифт Times автоматически выбирался Times New Roman (очевидно, именно он имелся в виду создателями). Для в своей домашней директории создаем файл ~/.fonts.conf с примерно таким содержимым:

  1. <fontconfig>
  2. <match target="pattern">
  3. <test qual="any" name="family">
  4. <string>Times</string>
  5. </test>
  6. <edit name="family" mode="assign">
  7. <string>Times New Roman</string>
  8. </edit>
  9. </match>
  10. </fontconfig>

Сам шрифт Times New Roman следует установить в составе пакета шрифтов от MS.

Смотрим на результат:

  1. ~$ fc-match times
  2. Times_New_Roman.ttf: "Times New Roman" "Normal"

Готово.

Инструкция по установке Ruby + Gems + Rails на Ubuntu

19.09.2008

Ставим Ruby через менеджер пакетов apt-get:

  1. ~$ sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby ruby1.8-dev build-essential

Пакеты rdoc и irb не входят в зависимости, хотя и необходимы для Gem и Rails.

Ставим RubyGems из исходников. Это позволит в дальнейшем RubyGems спокойно само-обновляться:

  1. ~$ wget "http://rubyforge.org/frs/download.php/38646/rubygems-x.x.x.tgz"
  2. ~$ tar -xvzf rubygems-x.x.x.tgz
  3. ~$ rm rubygems-x.x.x.tgz
  4. ~$ cd rubygems-x.x.x
  5. ~$ sudo ruby setup.rb
  6. ~$ cd ..
  7. ~$ rm -r rubygems-x.x.x

(НЕЛЬЗЯ запускать установку снаружи, типа use sudo ruby rubygemsx.x.x/setup.rb)

Теперь можно обновить RubyGems

  1. ~$ sudo gem update --system

Если эта команда не сработала, то, возможно, нужно создать симлинк /usr/bin/gem1.8 -> /usr/bin/gem

  1. ~$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Ставим Rails и mongrel через RubyGems:

  1. ~$ sudo gem install rails mongrel

Добавляем /var/lib/gems/1.8/bin/ в пути, и все готово!

  1. ~$ PATH=${PATH}:/var/lib/gems/1.8/bin/
  2. ~$ export PATH

[источник]

Харитон Мизгирь пишет: NB! если при установке какого-нибудь gem'а выдается ошибка
"no such file to load — mkmf"
это значит, что не установлен ruby1.8-dev, libsqlite3-dev
или еще какой-нибудь *-dev

  1. ~$ sudo apt-get install ruby1.8-dev libsqlite3-dev

и т.д.

grep+awk: запросто вынимаем значение параметра из конфига

18.09.2008

Задача: передать в sh-скрипт значение параметра PidFile из конфига apache.

Решение:

  1. CONF="/usr/local/apache/conf/httpd.conf"
  2. PIDFILE=`grep -i ^[[:space:]]*pidfile $CONF | tail -n 1 | awk '{ print $2 }'`

Где:

  1. grep -i ^[[:space:]]*pidfile $CONF

- выбираем из конфига все строки, начинающиеся сPidFile

  1. tail -n 1

- берем последнюю из них

  1. awk '{ print $2 }'

- выбираем из нее второе поле (значение)

tar.gz: извлечение конкретного файла

17.09.2008

Если из архива .tar(.gz) нужно извлечь конкретные файлы, то просто надо просто перечислить их в параметрах. Например, из архива archive.tar.gz надо извлечь файл public_html/index.html. Используем заклинание:

  1. [email protected]test:~$ tar zxvf archive.tar.gz public_html/index.html

VIM + Perl : .vimrc, perl-support

16.09.2008

Мой .vimrc + плагины (perl, tt2).

Для комфортной разработки на Perl рекомендуется также плагин perl-support .

Перенастройка Perl CPAN

15.09.2008

Чтобы перенастроить конфиги модуля CPAN, нужно использовать команду 'o conf init':

  1. ~$ perl -MCPAN -e shell
  2. Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan> o conf init

/home/alex/.cpan/CPAN/MyConfig.pm initialized.

CPAN is the world-wide archive of perl resources. It consists of about
100 sites that all replicate the same contents all around the globe.
Many countries have at least one CPAN site already. The resources
found on CPAN are easily accessible with the CPAN.pm module. If you
want to use CPAN.pm, you have to configure it properly.

If you do not want to enter a dialog now, you can answer 'no' to this
question and I'll try to autoconfigure. (Note: you can revisit this
dialog anytime later by typing 'o conf init' at the cpan prompt.)

Are you ready for manual configuration? [yes]

The Feynman Problem Solving Algorithm

08.09.2008

According to The Feynman Problem Solving Algorithm steps you need to undertake to solve any problem are really simple:

  1. Write down the problem.
  2. Think real hard.
  3. Write down the answer.

Виндовые шрифты в Ubuntu

07.09.2008

Установка TTF windows проста до неприличия:
~$ sudo apt-get install msttcorefonts

Переименовать все файлы в нижний регистр

07.09.2008

Переименовать все файлы в текущей и во всех вложенных директориях в нижний регистр:

~$ find ./ -type f | awk '{ print $1 " " tolower($1) }' | xargs -L 1 mv

Харитон Мизгирь пишет: Чтобы обрабатывались пути с пробелами и проч. непечатностями надо использовать конструкцию типа:
~$ find -print0 | xargs -0

Объяснение по поводу параметра -print0 (find'а) и -0 (xargs'а)

В имени файла может попасться символ, который требует экранирования при обработке (single or double quotes, spaces or newlines). print0 заставляет выводить список найденных файлов разделяя их через нуль-символ ('\0', в духе языка C, где он используется для декларации конца строки). xargs тоже должен быть готов к такому разделителю, для этого служит -0.

find и xargs по разному себя ведет когда ищут из текущей директории или когда ищут из родительской (в родительской прекрасно обрабатывал директории с пробелами и любыми кавычками, которые находились в дочерней директории). newlines не обрабатывается нигде.

Провел такой эксперимент. Создал скрипт (в файле):

mkdir "Bad \
bad \
bad \
dir"

– получил директорию с newlines.

Создал там файл README.txt и попытался его найти:

touch README.txt
cd ..
find . -name README.txt | xargs -I % ls %

Получил ошибку:

xargs: unmatched одинарная quote; by default quotes are special to xargs unless you use the -0 option
(загадочное сообщение: "по умолчанию кавычки обрабатываются xargs, если только вы не используете параметр -0")

Та же команда в связке print0-0 работает нормально:

find . -name README.txt -print0 | xargs -0 -I % ls %

Ошибки, которые возникали в текущей директории (в родительской все было нормально):

ls: ./Временнаяnдиректория/README.txt: No such file or directory

То есть использование связки print0 ... -0 желательно всегда. Можно прописать через alias'ы.