Мини заметки — выпуск 1
В последнее время у меня накопилось множество мелкий наработок. В основном это скрипты и фильтры для WordPress. Какую-нибудь хитрую bash-команду я также отношу к наработкам.
Для написания полноценного поста одной такой наработки недостаточно. В то же время хранить их в текстовых файлах неудобно. Попробуй отыщи тот самый скриптик, который писался пол года назад и хранится то ли дома, то ли на работе, то ли вообще на флешке или GMail. Потому я решил собирать свои мелкие наработки в этом блоге, чтобы всегда точно знать, где их можно найти. Начнем?
1. Замедляем поисковых роботов
Как я писал в одной из своих предыдущих заметок, поисковые роботы Рамблера могут создать большую нагрузку на ваши сайты. В своих блогах на WordPress я решаю эту проблему с помощью следующего кода:
function anti_rambler() {
if(strpos($_SERVER["USER_AGENT"], "StackRambler"))
sleep(10);
}
Просто добавляем его в файл functions.php вашей темы и все!
2. Качаем видео с YouTube и вырезаем из него музыку
Существует замечательная утилита для скачивания видео с YouTube. Во FreeBSD ее можно установить из портов:
Пользоваться ею очень просто:
mplayer 1.flv
Теперь, допустим, мы хотим сохранить звук из скаченного файла в mp3. Сначала смотрим информацию о файле:
Input #0, flv, from '1.flv':
Metadata:
duration : 134
starttime : 0
totalduration : 134
width : 480
height : 360
videodatarate : 555
audiodatarate : 58
totaldatarate : 619
framerate : 25
bytelength : 10397942
canseekontime : true
sourcedata : B4A7D6C43HH1284026309763246
purl :
pmsg :
Duration: 00:02:13.84, start: 0.000000, bitrate: 627 kb/s
Stream #0.0: Video: h264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], 568 kb/s, 25 tbr, 1k tbn, 50 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 59 kb/s
At least one output file must be specified
Если звук хранился в mp3, его можно просто сохранить в отдельном файле:
Однако в нашем случае использовался кодек aac, потому звук придется перекодировать:
Обратите внимание, что битрейт задается не в Кбит/сек, а в бит/сек.
Видео можно перекодировать в .avi:
И напоследок — мой любимый прием с ffmpeg. Делаем звонок на мобильный из mp3:
Откуда и сколько резать можно выяснить с помощью mplayer или вашего любимой программы для проигрывания mp3.
Дополнение: См также мой скрипт для просмотра видео c YouTube без Flash.
3. Элементарный пример использования awk
Мне не часто приходится использовать эту утилиту, но иногда она бывает очень полезна. Чтобы сэкономить себе немного времени в следующий раз, когда она мне понадобится, я решил выложить простейший пример ее использования:
Если file.txt содержит строки с некоторыми данными, разделенными знаками табуляции, данный пример выведет первый столбец данных.
Дополнение: Как совершенно верно отписал в комментах СетевойГибитобой, команда cut справится не хуже:
4. Снимаем скринкаст во FreeBSD
С помощью ffmpeg можно захватывать видео с экрана:
Захватывать можно не весь экран, а только его часть. Размер захватываемой области задаются с помощью ключа -s, а координаты левого верхнего угла можно задать ключом -i
В приведенном примере 100 — это смещение по X, 50 — по Y. Но мне кажется, что удобнее сначала снять видео со всего экрана, а потом обрезать лишнее. Также можно прикрепить к видео комментарии или музыку:
Чтобы снимать скринкасты с помощью ffmpeg, необходимо убедится, что программа была собрана с опцией VHOOK. Порт находится в /usr/ports/multimedia/ffmpeg — переходим и говорим «make config».
Также скринкасты можно снимать с помощью recordmydesktop (/usr/ports/multimedia/recordmydesktop/):
Usage:
recordmydesktop [OPTIONS]^filename
General Options:
-h or --help Print this help and exit.
--version Print program version and exit.
--print-config Print info about options selected during compilation and exit.
Image Options:
--windowid id_of_window id of window to be recorded.
--display DISPLAY Display to connect to.
-x X Offset in x direction.
-y Y Offset in y direction.
--width N Width of recorded window.
--height N Height of recorded window.
--dummy-cursor color Color of the dummy cursor [black|white]
--no-cursor Disable drawing of the cursor.
--no-shared Disable usage of MIT-shared memory extension(Not Recommended!).
--full-shots Take full screenshot at every frame(Not recomended!).
--quick-subsampling Do subsampling of the chroma planes by discarding,not averaging.
--fps N(number>0.0) A positive number denoting desired framerate.
Sound Options:
--channels N A positive number denoting desired sound channels in recording.
--freq N A positive number denoting desired sound frequency.
--buffer-size N A positive number denoting the desired sound buffer size (in frames,when using ALSA or OSS)
--ring-buffer-size N A float number denoting the desired ring buffer size (in seconds,when using JACK only).
--device SOUND_DEVICE Sound device(default /dev/dsp).
--use-jack port1 port2... portn Record audio from the specified
list of space-separated jack ports.
--no-sound Do not record sound.
Encoding Options
--on-the-fly-encoding Encode the audio-video data, while recording.
--v_quality n A number from 0 to 63 for desired encoded video quality(default 63).
--v_bitrate n A number from 45000 to 2000000 for desired encoded video bitrate(default 45000).
--s_quality n Desired audio quality(-1 to 10).
Misc Options:
--rescue path_to_data Encode data from a previous, crashed, session.
--no-wm-check Do not try to detect the window manager(and set options according to it)
--pause-shortcut MOD+KEY Shortcut that will be used for (un)pausing(default Control+Mod1+p).
--stop-shortcut MOD+KEY Shortcut that will be used to stop the recording (default Control+Mod1+s).
--compress-cache Image data are cached with light compression.
--workdir DIR Location where a temporary directory will be created to hold project files(default $HOME).
--delay n[H|h|M|m] Number of secs(default),minutes or hours before capture starts(number can be float)
--overwrite If there is already a file with the same name, delete it
(default is to add a number postfix to the new one).
-o filename Name of recorded video(default out.ogv).
If no other options are specified, filename can be given without the -o switch.
Утилита может писать видео только в формате .ogv. Перекодировать его можно с помощью того же ffmpeg или mencoder:
Предварительно следует убедиться, что mencoder был собран с опцией THEORA.
Да, кстати, для снятия скриншотов я пользуюсь scrot — /usr/ports/graphics/scrot.
5. Постинг в ЖЖ на Perl
Есть замечательный модуль для Perl под названием Net::LiveJournal. В портах его нет, но можно поставить с помощью cpan. Как несложно догадаться, предназначен он для работы с ЖЖ.
use strict;
use Net::LiveJournal;
# ..........
my $lj = Net::LiveJournal->new(
user => $ljuser,
password => $ljpass);
my $entry = Net::LiveJournal::Entry->new(
subject => $title,
body => $data);
$lj->post($entry) or die $lj->errstr;
См также мои посты о создании ботов на Perl для WordPress и Twitter.
6. Памятка по .htaccess
Если посты с вашего блога коммуниздит какой-то говносайт, можно ограничить доступ к блогу по IP, маске сети или UserAgent:
Order Allow,Deny
Allow from all
Deny from env=ddos # баним по UserAgent
Deny from 192.168.0.1 # баним по IP
Deny from 192.168.0. # баним всю сеть 192.168.0/24
Доступ к некоторым разделам сайта (админкам, веб-шеллам и тд) желательно закрывать с помощью пароля:
AuthType Basic
AuthName "Password Required"
Require valid-user
Для генерации файла .htpasswd используется одноименная утилита:
Перенаправление с www.site.ru на site.ru:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule (.*)$ http://site.ru/$1 [R=301,L]
</IfModule>
Перенаправление с «/index.php» на «/»:
RewriteRule ^(.*)index\.php$ http://site.ru/$1 [R=301,L]
Задаем кодировку страниц:
CharsetDefault utf-8
CharsetSourceEnc utf-8
AddDefaultCharset utf-8
Если сервер вырезает из заголовков страниц
и пишет туда что-то вроде «<!— Meta http equivalent was here …», нужно прописать в .htaccess следующее:
AddHandler default-handler html
7. Крадем музыку с интернет-радио
Часто по радио можно услышать редкие треки, которые не найти в сети. Сохранить весь эфир радиостанции под UNIX можно с помощью простого wget:
Тут, правда, есть одна проблема — как потом нарезать mp3 файл на треки? В портах я нашел утилиту mp3split (/usr/ports/audio/mp3splt). Она нарезает файл на треки, находя паузы между песнями в исходном файле. К сожалению, в случае с моей любимой радиостанцией такой прием не срабатывает — переход между треками очень плавный, без пауз. Способа автоматизировать процесс мне пока неизвестно, так что делать все приходится руками (см пункт 2).
Кстати, для прослушивания интернет-радио я использую утилиту mpg123. Вот список неплохих радиостанций:
http://www.dnbradio.com/hi.m3u
http://www.bassdrive.com/v2/streams/BassDrive.pls
http://station20.ru:8000/station-128.m3u
http://radio3.promodeejay.net:8000/300kmh-192
http://16bit.fm:9500/listen.pls
А вот кусок моего .bashrc для быстрого включения музыки:
Разумеется, всю музыку я покупаю только в магазинах на CD, ниоткуда не скачиваю и никаких радиостанций не граблю. Надеюсь, вы поняли что данный пункт — просто шутка. Ха-ха.
8. Генерируем надписи в ascii art
В портах есть интересная утилита — figlet (/usr/ports/misc/figlet). С ее помощью можно генерировать надписи в ascii art:
___ _ __ __ __ __ ___
| __| /_\ \ \/ / | \/ | __|
| _| / _ \ > < _| |\/| | _|
|___/_/ \_\/_/\_(_)_| |_|___|
Полный список поддерживаемых «шрифтов» можно получить, выполнив команду
Ну и раз речь зашла об ascii art, грех будет не упомянуть про программу cowsay (/usr/ports/games/cowsay/). Пример ее работы:
___________________________
< Subscribe to my RSS feed! >
---------------------------
\ / \ //\
\ |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
9. Создаем свой словарь для Firefox/Thunderbird/SeaMonkey
По просьбам читателей блога, я отыскал на диске памятку по созданию собственного словаря для программ от Mozilla. Привожу ее как есть — думаю, вы разберетесь:
https://addons.mozilla.org/ru/firefox/browse/type:3
Ссылка на кнопке "Добавить в Firefox":
https://addons.mozilla.org/ru/firefox/downloads/latest/3497/addon-3497-latest.xpi?src=addondetail
Если убрать ?src=..., в диалоге добавления плагина firefox покажет нам, откуда лить плагин:
http://releases.mozilla.org/pub/mozilla.org/addons/3497/united_states_english_dictionary-4.0.0-fx+tb+sm.xpi
тянем wget'ом, аналогично льем русский словарь. Файлы .xpi являются обычными .zip архивами, так что распаковываем их утилитой unzip, затем
$ mkdir en-ru
$ mv en/install.rdf en-ru
$ mv en/install.js en-ru
$ cat en/dictionaries/en-US.dic ru/dictionaries/ru.dic > en-ru/dictionaries/en-ru.dic
$ cat en/dictionaries/en-US.aff ru/dictionaries/ru.aff > en-ru/dictionaries/en-ru.aff
$ cd en-ru
$ zip -r en-ru.xpi ./
Открываем в браузере URL file:///, находим полученный .xpi плагин и устанавливаем.
Полученный плагин можно также использовать в ThunderBird и SeaMonkey.
Я смутно припоминаю, что там был еще какой-то нюанс с повторяющимися строками. Например, если файлы .aff или .dic начинаются с одинаковых строк, значит после их конкатенации «заголовок» должен быть только один.
10. Заключение
Думаю, для первого выпуска достаточно. Ну как вам мои заметки? Я лично доволен — навел наконец порядок в каталоге ~/txt/.
Дополнение: Мини заметки — выпуск 2