проблема с Wake on LAN и nvidia mcp51
Оказывается, драйвер forcedeth для сетевых интерфейсов в чипсетах nvidia недоделан: не удаётся включить компьютер с помощью Wake on LAN пакета. Нашёл решение: проблема в том что при выключении (или переходе в режим сна) машины MAC-адрес переворачивается примерно так как сатанисты переворачивают Библию. Поэтому если MAC-адрес интерфейса 00:24:21:dd:1f:90 — то будить её надо командойetherwake 90:1f:dd:21:24:00
(конечно, не забудьте включить WoL в BIOS и добавить строчку
ethtool -s eth0 wol g
в /etc/rc.local)
анимированный gif и imagemagick
Понадобилась мне в одном проекте функциональность кропа (обрезки) и ресайза картинок, в том числе анимированных. Оказалось что imagemagick не до конца очевидно работает с форматом GIF: нельзя просто сказатьconvert -crop 100x100+20+50 1.gif 2.gif и получить вырезанную область из анимации; нужно разложить анимацию на кадры, проделать над ними нужные операции, а потом собрать анимацию вновь, но и при этом получится фигня потому что в заголовке файла останется старая информация про размеры изображения. Помогает опция -page, следующий набор команд вырезает из анимации orig.gif область размерами 200x300 пикселей (отступая от верхнего и левого краёв картинки по 20 пикселей) и пропорционально уменьшает её до размера 100x100. Результат записывается в файл new.gif:
> convert orig.gif -coalesce +adjoin frame%04d.gif
> mogrify -crop 200x300+20+20 frame*.gif
> mogrify -page 200x300+0+0 frame*.gif
> mogrify -resize 100x100 frame*.gif
> convert -loop 0 -deconstruct frame*.gif new.gif
> rm frame*.gif
ubuntu + nvidia
Если в убунту не удаётся установить драйвер для nvidia (nvidia-glx-180 устанавливается, но в "Аппаратных драйверах" активировать его не удаётся и после перезапуска Иксы дают ошибку "Failed to load the NVIDIA kernel module") -- нужно установить linux-headers версии, соответствующей версии ядра. Типа, если последнее из установленных ядер -- linux-image-2.6.28-15-generic -- то нужно установить linux-headers-2.6.28-15-generic и тогда всё получится.Дело в том что linux-headers должен быть зависимостью пакета nvidia-glx, но почему-то ею не является.
консольный twitter-клиент
Twiter API это не просто, а очень просто — как и любой хороший API. Для экономии трафика (я сейчас подключён к инету через GPRS) написал простенький консольный твиттер-клиент на PHP. Из возможностей -- чтение своей ленты (при запуске без параметров) и постинг статуса при запуске с параметрами, постинг пока глючный. Использую возможности ANSI-консоли для расцветки текста — облегчает чтение.
исходник, он же бинарник: http://dl.getdropbox.com/u/1647792/twi.tar.gz
UPD: версия 0.2, теперь отображается возраст сообщения (ну, типа 2 hours ago): http://dl.getdropbox.com/u/1647792/twi-0.2.tar.gz
В исходнике нужно только подставить в переменную $pair свои логин и пароль от тви, кодированные функцией base64_encode(), получить кодированную строку можно, например, так:
$ php -r "echo base64_encode('login:password').\"\\n\";"
Осталось нормально доделать механизм постинга и перевести всё с XML на JSON для ещё большей экономии трафика, а без остальных возможных функций можно и обойтись.
Ubuntu 9.04 Jaunty Jackalope amd64: Opera, Firefox + Flash + Java
Итак, я установил новую Убунту. Как всегда, установка проста до безобразия, но при настройке 64-битной версии (процессоры Intel Core, Core 2, AMD64 и круче) есть два нюанса касательно браузерных плагинов, их и опишу.
Первое — Flash-плагин для браузера. как только вы в файрфоксе посетите веб-страничку с флешем — убунта предложит вам установить флеш-плагин, причём по умолчанию будет выбран не плагин от Adobe, а опенсорсный swfdec. Этой какашкой пусть Столлман пользуется, а нам нужен нормальный флеш. Покажется что в списке предложенных плагинов есть и нормальный адобовский флеш, но это иллюзия потому что он на самом деле 32-битный. А система у нас 64-битная и если установить 32-битный плагин — он будет работать через гнусный nspluginwrapper, лично у меня вызывающий лишь аритмию.
Итак, для установки нормального 64-битного флеш-плагина отказываемся от автоматической установки флеш-плагина, качаем десятый флеш (ура, поддержка HD-видео!) с http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-10.0.22.87.linux-x86_64.so.tar.gz, создаём директорию ~/.mozilla/plugins/ и ложим туда файл libflashplayer.so из скачанного архива. После перезапуска браузера флеш будет работать.
Если же я опоздал с донесением этого мессаджа до вас и вы таки установили swfdec или девятый 32-битный флеш-плагин — удалите его с помощью Synaptic.
Чтобы флеш заработал ещё и Опере -- нужно сделать симлинк на файл libflashplayer.so в директорию /usr/lib/opera/plugins/ :
sudo ln -s ~/.mozilla/plugins/libflashplayer.so /usr/lib/opera/plugins/
Ну и не забудьте включить плагины в опере (F12, Enable Plug-Ins).
Второе — Java-плагин. Он редко может понадобиться, но бывает. Например, на фейсбуке загрузка фотографий сделана как раз таки на джаве.
Аналогично отказываемся от автоматической установки Java-плагина, и качаем "Linux self-extracting JRE file" для Linux x64 отсюда: http://download.java.net/jdk6/index.html. Допустим, файл скачан в домашнюю директорию (~/) и называется "jre-6u14-ea-bin-b05-linux-amd64-23_apr_2009.bin". Запускаем консоль и:
chmod +x jre-6u14-ea-bin-b05-linux-amd64-23_apr_2009.bin
sudo ./jre-6u14-ea-bin-b05-linux-amd64-23_apr_2009.bin
Принимаем лицензионное соглашение (q, yes, Enter), затем:
sudo mv jre1.6.0_14 /opt/
ln -s /opt/jre1.6.0_14/lib/amd64/libnpjp2.so ~/.mozilla/plugins/
Готово, перезапускаем браузер и тестируем.
flac2mp3
Написал простенький bash-скрипт для конвертации директории с файлами FLAC в MP3.Конечно, это несложно делается одной строчкой в консоли, но если при этом стараться сохранить ID3 теги -- строчка получается очень длинной.
Как отметил gds, у скрипта будет проблема если в каком-либо теге трека встретится символ "=". Учитывайте это, а я исправлю как-нибудь потом.
балансировка аплинков в linux + проверка связи
Настроил в офисе балансировку нагрузки между двумя интернет-каналами по лартцу. Отлично работает, но при падении одного из каналов все шедшие через этот канал соединения обрываются и восстанавливаться не хотят потому что маршруты кешируются. Для решения этой проблемы написал скриптик, который определяет состояние интернет-соединения пингом. Более красивого решения определить "наличие интернета" я не придумал..Если пинг через интерфейс не идёт -- скрипт считает соединение дохлым и модифицирует таблицу маршрутизации.
#!/bin/sh
# interface
dev1=eth1
# gateway
p1=Шлюз_провайдера_1
name1=Имя_провайдера_1
dev2=eth2
p2=Шлюз_провайдера_2
name2=Имя_провайдера_2
test_host=91.194.(спрятанные цифры).129
ping_c=3
ip=/sbin/ip
test1=`ping -I $dev1 -c $ping_c $test_host | grep "64 bytes" | wc -l`
test2=`ping -I $dev2 -c $ping_c $test_host | grep "64 bytes" | wc -l`
cur_date=`date "+%Y %b %d %H:%M"`
$ip route del default
if [ $test1 -gt 0 ]; then
if [ $test2 -gt 0 ]; then
echo "$cur_date all links is Ok"
$ip route add default scope global nexthop via $p1 dev $dev1 weight 1 nexthop via $p2 dev $dev2 weight 1
else
echo "$cur_date link to $name2 is down"
$ip route add default scope global nexthop via $p1 dev $dev1
fi
else
if [ $test2 -gt 0 ]; then
echo "$cur_date link to $name1 is down"
$ip route add default scope global nexthop via $p2 dev $dev2
else
echo "$cur_date all links is down"
$ip route add default scope global nexthop via $p1 dev $dev1 weight 1 nexthop via $p2 dev $dev2 weight 1
fi
fi
(этот же скрипт на pastebin)
Переменной test_host нужно присвоить IP-адрес хоста в интернете, в надёжности которого вы почти уверены. Я вписал адрес нашего сервера, расположенного в датацентре.
Этот скриптик я сохранил как /root/check_uplinks.sh и добавил в кронтаб для запуска с периодичностью в пять минут. В принципе, если оставить ping_c (количество пингов) равным трём, можно и раз в минуту запускать.
*/5 * * * * /root/check_uplinks.sh >> /var/log/check_uplinks.log
В /var/log/check_uplinks.log, понятное дело, пишется состояние линков при каждом запуске скрипта.
UPD: Обнаружилось что ICQ постоянно отваливается при работе через такой сбалансированный интернет. Пришлось пустить её трафик через один из аплинков:
iptables -t magle -A PREROUTING -s 192.168.2.0/24 -p udp -m udp --dport 5190 -j MARK --set-mark 0x5e
iptables -t magle -A PREROUTING -s 192.168.2.0/24 -p tcp -m tcp --dport 5190 -j MARK --set-mark 0x5e
ip rule add fwmark 0x5e table uplink2
веб-программерское
давно уже пользуюсь Eclipse PDT для написания сайтов с шаблонизатором Smarty. нашёл плугин для эклипса, добавляющий как минимум подсветку синтаксиса Smarty -- smartypdt. вроде ещё code completion обещают.. плагин пока развивается, но даже только с подсветкой синтаксиса -- намного круче работается.28 июня 2006
по вечерам я завариваю в чашке черный чай, щепотку мате и одну - три капли экстракта элеутерококка колючего. получается очень вкусный напиток (классно пить его через трубочку), который позволяет не спать всю ночь (можно читать, писать, программировать, играть, лазать по сайтам -- ночью все это очень кайфово), стимулирует работу мозга и вообще чрезвычайно полезен..untitled
У меня есть привычка: сидя в трамвае или троллейбусе я сворачиваю свой билетик в трубочку. Всю дорогу я прокатываю этот клочок бумаги между пальцами чтобы он превратился в твердый стерженек.Однажды я захотел проткнуть этим стержнем стекло. Я почувствовал что если я действительно поверю в свою способность проткнуть стекло бумажной палочкой, то это удастся сделать. Ведь мы сами творим мир вокруг себя и чтобы изменить что-то нужно поверить в себя и дейсвовать без сомнений. Но как поверить в то, что кажется невозможным, как поверить в чудо?
Я прислонил кончик свернутого билетика к стеклу и надавил. В голове мелькнула ироничная мысль: "ничего не получится". Билетик согнулся.
5.11.2005
