понедельник, 22 октября 2012 г.

psh - библиотека для запуска процессов (Python)

В последнее время я очень много пишу на Python: начиная с больших систем типа облаков на работе и заканчивая маленькими скриптами дома. И одновременно с этим я стал за собой замечать, что многие вещи, которые я раньше писал на shell, мне гораздо приятнее писать на Python. Вот только когда пишешь какие-нибудь административные утилиты, зачастую возникает необходимость запускать из них другие программы, в результате чего приходится городить свои обвязки вокруг subprocess, который, на мой взгляд, не очень удобен.

Все свои скрипты и программы я всегда пишу со здравым уровнем паранои, поэтому каждый раз, когда вижу конструкции вида `grep word some_file | wc -l`, мне всегда хочется не только получить вывод `wc -l`, но и проверить, завершился ли нормально grep (вдруг он, к примеру, не смог открыть файл). Делать это каждый раз вручную в shell быстро надоест, а в Python есть исключения, которые как раз могут тут очень помочь.

В общем, захотел я себе максимально удобную запускалку процессов для Python. :) Посмотрев на то, что уже написано, сначала остановил свой выбор на sh, но, глянув внутрь нее и посмотрев, как оно на самом деле работает, я понял..., что этим я пользоваться не буду. :) В итоге решил написать такую библиотеку сам, благо не так уж много времени на это надо, да и напишу так, как будет наиболее удобно для меня. :)

вторник, 13 сентября 2011 г.

Чтение стен ВКонтакте через RSS

Недавно возникло желание читать пару групп ВКонтакте. Регулярно заходить туда и проверять, не появилось ли чего нового - это не наш путь. Поэтому, узрев в этом желании отличную возможность поиграться с Google App Engine и Python'овским HTMLParser'ом, написал себе небольшой "велосипед" - vkontakte-feed.appspot.com. :)

Отдает посты с публичных стен в RSS. Пользуйтесь, если кому надо.

суббота, 11 сентября 2010 г.

Автоматическое скачивание субтитров для сериалов

Ранее я уже писал о том, как можно автоматически скачивать субтитры для сериалов при помощи Subdownloader. И все бы хорошо, но вот только субтитры он берет с www.opensubtitles.org, чьи серверы в последнее время работают очень нестабильно. Поэтому, получив в очередной раз от Subdownloader'а сообщение об ошибке, я понял, что мне это уже начинает порядком надоедать и решил поискать какую-нибудь альтернативу в виде скрипта для скачивания с www.TVsubtitles.net. Как это часто бывает, ничего дельного мне найти не удалось, поэтому пришлось писать самому. :)

Получился небольшой Python'овский скрипт, который принимает через опции командной строки список интересующих вас языков и путь к дирректории(ям) и/или файлу(ам), для которых необходимо скачать субтитры, поэтому можно настроить его запуск в cron и навсегда забыть о том, что субтитры, как правило, не скачиваются вместе с торрент-файлами. :) Поскольку это было совсем несложно, я также добавил и поддержку www.opensubtitles.org, но по-умолчанию скрипт его не использует, по вышеописанным причинам.

Вообщем, если кому-то нужно, то скачать его можно тут.

суббота, 1 мая 2010 г.

Просмотр новостей из Google Reader без доступа в Интернет

Я тут недавно поменял работу, и если раньше она была в 15 минутах ходьбы от дома, то теперь придется каждый день ездить в Москву. Соответственно, встал резонный вопрос, как потратить проведенное в электричке время с пользой (а времени на дорогу туда-обратно уйдет немало). Обычно такое время я заполняю подкастами и чтением Google Reader'а и бумажных книг. С подкастами и книгами никаких проблем нет, но вот с Google Reader все очень грустно - мало того, что 3G в Подмосковье пока что не особо собирается, так еще и при движении электрички ужасно медленное EDGE-соединение рвется чуть ли не каждую минуту, что делает чтение даже мобильной версии Google Reader настоящей пыткой.

Меня, естественно, такая ситуация не устраивала, и я начал искать программу, которая позволяла бы просматривать новости из Google Reader будучи offline. Подобные программы есть, но обладают огромным недостатком - они скачивают для офлайнового просмотра только описание новости из RSS и больше ничего. Все самое интересное (полный текст новости, изображения и сама страница с комментариями, на которую ссылается эта новость) остается в онлайне. Мне же хотелось, чтобы работа с такой программой в офлайне имела минимум отличий от работы с Google Reader в онлайне: чтобы я мог видеть описание новости, все изображения, присутствующие в нем, мог просматривать страницу, на которую ссылается новость (также со всеми изображениями, стилями и т. п.), ну и, конечно, чтобы была возможность помечать новости как прочитанные, star'ить, расшаривать и впоследствии синхронизировать с Google Reader.

Программы с такими возможностями мне найти не удалось - ну так не беда, напишем сами, ибо уже не впервой. :) А если учесть, что я в то время как раз изучал Qt и думал, что бы такое написать, чтобы попробовать ее в деле, то это был просто подарок судьбы. :)

воскресенье, 14 февраля 2010 г.

Восстановление позиции курсора при открытии файла в Vim

Не знаю, как я раньше жил без этого, но вот на днях залез в гугл, и оказалось, что настроить Vim так, чтобы при открытии файла он каждый раз восстанавливал позицию курсора, с которой файл был закрыт в прошлый раз, очень просто: для этого даже не надо ставить никакие плагины, достаточно прописать в ~/.vimrc следующие строки:
if has("autocmd")
    " When editing a file, always jump to the last known cursor position.
    " Don't do it when the position is invalid or when inside an event
    " handler (happens when dropping a file on gvim).
    autocmd BufReadPost *
        \ if line("'\"") > 0 && line("'\"") <= line("$") |
        \   exe "normal g`\"" |
        \ endif
endif

Update:
А еще лучше использовать следующий код:
if has("autocmd")
    set viewoptions=cursor,folds
    au BufWinLeave * mkview
    au BufWinEnter * silent loadview
endif
Он помимо курсора еще и фолдинги восстанавливает (спасибо за подсказку lyn4ed).

вторник, 12 января 2010 г.

Что такое выравнивание, и как оно влияет на работу ваших программ

Как-то раз, обсуждая с одногруппницей тему ее диплома, я посоветовал ей отличную статью Data alignment: Straighten up and fly right, посвященную выравниванию данных в оперативной памяти. Т. к. с английским у нее дела обстоят не очень хорошо, она попросила меня перевести статью на русский язык. Переведя статью, я решил, что незачем добру пропадать, и поэтому с разрешения автора выкладываю сюда перевод. Перевод довольно вольный, но в то же время достаточно точный. Вообщем, буду рад, если кому-нибудь пригодится.

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

Гранулярность доступа к памяти

Программисты привыкли думать о памяти, как о простом массиве байтов. В языке C и его языках-наследниках char* всегда означало "блок данных", и даже в Java™ есть тип byte[] для представления "сырых" данных в памяти.

Рис. 1. Как программисты видят память


Однако, процессор в вашем компьютере считывает данные из памяти блоками размером отнюдь не в одни байт. Считывание данных производится блоками по 2, 4, 8, 16 или даже 32 байта. Далее размер таких блоков мы будем называть гранулярностью доступа к памяти.

Рис. 2. Как эту же память видят процессоры


Разница в том, как программисты видят память, и как процессоры на самом деле с ней работают, приводит к интересным последствиям, которым и посвящена данная статья.

Если вы не понимаете, какое влияние выравнивание данных способно оказать на ваше программное обеспечение, то возможно возникновение следующих проблем в работе вашего ПО (в порядке возрастания пагубного воздействия):
  • Приложение будет работать медленнее.
  • Приложение может "зависнуть".
  • Операционная система может внезапно аварийно завершиться.
  • Приложение будет работать непредсказуемо, что в итоге может привести к порче ваших данных.

четверг, 19 ноября 2009 г.

StarDict: пропадание всплывающего окна с переводом

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

Мне это надоело, и я не поленился залезть в исходники StarDict, чтобы сделать так, как мне хочется. :)