Subversion я пользуюсь уже около года. До этого был CVS, но преимущества SVN перед CVS'ом были настолько очевидны, что я нераздумывая перевел все свои репозитории на Subversion. С тех пор я как-то больше не оглядывался на другие системы контроля версий, но вот недавно на Хабрахабре наткнулся на пост с переводом выступления Линуса Торвальдса, посвященного Git - системе контроля версий, которую он написал, чтобы использовать при разработке ядра.
Не буду перечислять недостатки/достоинства Git - все это уже давно написано/сказано за меня, но скажу лишь, что теперь я начал переводить свои SVN-репозитории на Git. В связи с этим я предлагаю вам ознакомиться с данным видеовыступлением - наверняка многие из вас сочтут очень привлекательной идею распределенных систем контроля версий. В таком случае вы не пожалеете.
Цель данной заметки - заставить вас усомниться в вашем выборе системы контроля версий и подкинуть несколько ссылок, чтобы сэкономить вам время на поиске необходимой информации. Правда, сам я тоже особо время на поиск не тратил, т. к. довольно быстро нашел несколько статей, которые предоставили мне всю необходимую для ознакомления с Git информацию. На начальном этапе, я думаю, их будет вполне достаточно. Прочитав/прослушав/просмотрев данную информацию вы получите достаточно знаний, чтобы более или менее уверенно работать в Git. И лишь поработав с ней хотя бы месяц, поняв, что именно вам от нее нужно и в каком виде, можно будет приступить к чтению более обширной официальной документации. А пока...
Читать полностью...
суббота, 17 октября 2009 г.
Git: так ли хорош Subversion?
Автор:
Конищев Дмитрий
11
comments
вторник, 26 мая 2009 г.
Просмотр одновременно нескольких субтитров при проигрывании фильма
Недавно решил попробовать подтянуть свои знания английского языка общеизвестным методом просмотра зарубежных сериалов в оригинальной озвучке с английскими и русскими субтитрами. Полез в Synaptic и стал искать там подходящий для этого плеер. Собственно что хотелось:
- Возможность одновременного просмотра нескольких субтитров на разных языках;
- Возможность выделять текст субтитров, чтобы вставить его в словарь.
К моему удивлению, ничего подходящего мне найти не удалось. Да, есть, например, gnome-subtitles, который позволяет это сделать, но почему-то разработчики не добавили в него такую вроде-бы совершенно необходимую функциональность, как прокручивание текста субтитров при воспроизведении фильма. Т. е. в gnome-subtitles следить за тем, какие субтитры должны быть активны в данный момент, приходится самому.
В итоге, не долго думая, я сел и написал собственный велосипед, благо мой любимый MPlayer довольно дружественен к пользователю тем, что не стесняясь выдает на свой стандартный вывод все, что в нем происходит. Поэтому все, что мне было нужно - это написать обертку над MPlayer'ом, которая будет подглядывать за его выводом и отображать нужные мне субтитры так, как я этого хочу.
Получилось вот что:

submplayer работает в точности как MPlayer, разве что путь к видеофайлу лучше передавать в командной строке первым аргументом, т. к. при запуске он просматривает список переданных аргументов и принимает в качестве пути к файлу, который необходимо воспроизвести, первый встретившийся аргумент, начинающийся не на "-". Определив путь к видеофайлу, как ${parent_directory}/${file_name}.${file_ext}, submplayer ищет и открывает все найденные субтитры вида ${parent_directory}/${file_name}*.srt.
Программа из серии "покодил на выходных" - писал для себя на скорую руку и поэтому сделал ее очень простой: в случае ошибок выводит их на консоль, а не с помощью диалоговых окон, поддерживает работу только с одним видеофайлом и т. д. Кроме того, обладает довольно большим количеством зависимостей для такой небольшой программы - я просто не стал париться и взял библиотеку, которую писал для Flush, чтобы лишний раз не писать то, что уже давно написано.
Вообщем, результат меня устроил. :) Ну и как всегда, выкладываю сие творение в общий доступ на случай, если она пригодится кому-то кроме меня: submplayer.
P.S.: Субтитры беру с www.tvsubtitles.net, но, честно говоря, их качество меня не очень устраивает, к тому же, если говорить о сериале Scrubs, то русские субтитры там есть только для 6-8 сезонов. Вообщем, если кто подскажет, где еще можно найти субтитры хорошего качества, буду очень благодарен. Или, может быть, существуют какие-либо релиз-группы вроде lostfilm.tv и novafilm.tv, но выпускающие вместо озвучки профессионально составленные русские и английские субтитры?
Читать полностью...
Автор:
Конищев Дмитрий
11
comments
Теги: linux, mplayer, submplayer, subtitles, video, видео, субтитры
воскресенье, 29 марта 2009 г.
Flush 0.4 released (GTK-based BitTorrent клиент)
Несколько месяцев назад я писал о выходе первой (0.1) версии своего BitTorrent клиента. С тех пор Flush дорос до версии 0.4. Т. к. первую версию, скорее всего, поставить решится далеко не каждый, да и в ней могло не быть каких-либо функций, отсутствие которых помешало бы использовать Flush, я решил, что настало время еще раз напомнить о существовании данного BitTorrent клиента. Я использую его с первой версии и сделал таким, каким, как я считаю, должен быть BitTorrent клиент. Если ваши предпочтения совпадают с моими, то, возможно, он вам придется по душе.
Причины, которые заставили меня написать собственный BitTorrent клиент, я изложил здесь, так что повторяться не буду. Думаю, лучше всего будет привести список изменений по сравнению с Flush 0.1 и скриншоты, которые зачастую могут сказать гораздо больше, чем любой Changelog. :)
Основные изменения (с полным списком изменений можно ознакомиться, почитав Changelog):
Скриншоты:

Как и раньше, исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь: http://sourceforge.net/projects/flush/.
Читать полностью...
Автор:
Конищев Дмитрий
83
comments
Теги: bittorrent, flush, linux
вторник, 17 марта 2009 г.
Что почитать UNIX C/C++ программисту
Опыт программирования на C/C++ у меня относительно небольшой и, возможно, поэтому я еще помню, как в самом начале было тяжело определиться, с чего начинать свое изучение программирования под UNIX на C/C++. Поэтому попытаюсь слегка облегчить вам жизнь, приведя список книг (о которых удалось вспомнить), которые я прочитал, и какие впечатления у меня от них остались.
Хочу отметить, что книги - это не единственный источник информации. Если вы регулярно читаете различные статьи в Интернете, то у вас зачастую есть шанс найти в них что-то такое, о чем не напишут ни в одной книге и наоборот. Поэтому я бы советовал вам подписаться на RSS каких-нибудь новостных ресурсов, на которых время от времени пробегают интересные статьи. Например:
Также я бы посоветовал не лениться и читать все комментарии к заинтересовавшим вас статьям - нередки случаи, когда комментарии оказывались ценнее самой статьи. :)
Помимо книг я попытался вспомнить хотя бы несколько статей, которые мне в свое время показались наиболее интересными, и привел ссылки на них.
Не знаю, насколько данный список подойдет вам, но лично я был бы очень рад, если бы кто-нибудь дал мне его пару лет назад. Книги я расположил в таком порядке, в котором читал их сам. Порядок, я считаю, правильный и лучше придерживаться его.
Книги
Б. Керниган, Д. Ритчи - Язык программирования Си.
Эту книгу вам посоветуют на любом форуме, если вы спросите "Что почитать начинающему C программисту", и, пожалуй, будут правы. Для начинающего это, скорее всего, лучший вариант.
Х.М. Дейтел, П.Дж. Дейтел - Как программировать на C++.
Так получилось, что "Язык программирования Си" - это, если не ошибаюсь, единственная книга по С (не C++), которую я прочитал. После нее я продолжил свое обучение с "Как программировать на C++", в которой узнал много нового о C, о чем не говорилось в "Языке программирования Си" и основные возможности C++. На мой взгляд, очень неплохая книга для начинающих. Авторы постепенно вводят читателя в мир C/C++, не забывая при этом останавливаться на вопросах совместимости, быстродействия и хорошего стиля программирования, что является несомненным плюсом данной книги.
Андрей Робачевский - Операционная система UNIX.
Читал довольно давно, так что уже и не помню насколько это стоящая книга, но в целом впечатления от нее остались хорошие.
Эрик С. Реймонд - Искусство программирования для UNIX.
Если не ошибаюсь, данная книга не содержит ни одной строчки кода, но это не делает ее менее интересной. Автор анализирует философию UNIX и основные принципы написания программ. Читается на одном дыхании. Очень советую.
С. Макконнелл - Совершенный код.
Совершенный код мне не понравился. Обычно, если я покупаю книгу, то читаю ее от корки до корки. Эта же книга, пожалуй, единственная, которую я не прочитал и до середины. Такое впечатление, что автор стремился сделать ее как можно толще и поэтому мусолит любую, даже самую очевидную проблему, которая может встретиться программисту - просто скучно читать. На мой взгляд, если вы прочитаете пару хороших книг по C/C++ и "Искусство программирования для UNIX", то не найдете в ней ничего нового.
Ричард Стивенс, Стивен Раго - UNIX. Профессиональное программирование.
Ричард Стивенс - UNIX. Разработка сетевых приложений.
Отличные книги. Читать обязательно. После их прочтения действительно начинаешь понимать, как "оно" работает.
Бьерн Страуструп - Язык программирования C++.
Обожаю книги, в которых авторы уделяют большое внимание деталям, а не останавливаются только на общем описании проблемы. "Язык программирования C++" - одна из немногих таких книг. Получил огромное удовольствие от прочтения данной книги. Всем советую. Однако, новичкам перед ее прочтением я бы порекомендовал сначала прочитать "Как программировать на C++".
Крис Касперски - Техника оптимизации программ. Эффективное использование памяти.
К моему удивлению, я ни разу не слышал упоминания данной книги на форумах (может быть, не туда ходил) и считаю, что ее незаслуженно обошли стороной. Ее нам порекомендовал преподаватель в институте, за что ему огромное спасибо. Прочитав данную книгу, вы поймете, что, оказывается, для написания хороших программ одного только знания языка порой оказывается недостаточно - так же важно иметь хотя бы базовое представление о том, как устроен компьютер. Пусть вы, скорее всего, и не будете применять большинство методов, описанных в данной книге в силу их слишком агрессивной оптимизации под конкретную архитектуру, но, прочитав ее, вы впоследствии при разработке программ будете учитывать хотя бы базовые принципы, которые могут значительно повысить скорость работы программы, при этом не отняв у вас времени на оптимизацию (принцип использования "как можно более локальных" данных и т. п.). Да, и пусть слова "Эффективное использование памяти" вас не смущают - речь в данной книге пойдет отнюдь не о ее экономии, а именно о эффективном ее использовании. В качестве затравки могу порекомендовать статью "Разработка на PC и производительность — Memory Latency" (см. ссылку в разделе статьи).
Конечно, это далеко не весь список книг, которые я прочитал. :) Но когда я начал вспоминать, какие из них посоветовать для изучения программирования на C/C++ по UNIX, то мне почему-то вспомнились именно они.
Статьи
Программирование в Linux с нуля
Программирование для Unix/Linux
Using GNU C __attribute__
Reading C type declarations
Ключевое слово volatile
Функциональное программирование для всех
Основы написания переносимого кода (обязательно почитайте комментарии к статье)
20 ловушек переноса Си++ - кода на 64-битную платформу
Data alignment: Straighten up and fly right
Разработка на PC и производительность — Memory Latency
Что дальше?
Если говорить о C++, то, судя по отзывам, дальше надо браться за Скотта Майерса, Герба Саттера и Андрея Александреску. Вообщем, думаю, скучать не придется. :)
Пожелания
Если вам есть что добавить в данный список (книг, статей, сайтов), или у вас есть какие-то советы с высоты вашего опыта - буду вам очень рад в комментариях.
Читать полностью...
воскресенье, 18 января 2009 г.
QGtkStyle - заставляем Qt4 приложения использовать оформление GTK
Оказывается, можно заставить Qt (>= 4.4) приложения выглядеть так же, как и GTK, причем сделать для этого нужно совсем немного:
svn co svn://labs.trolltech.com/svn/styles/gtkstyleДалее запускаем, к примеру, systemsettings и выбираем в Appearance->Style стиль GTK.
cd gtkstyle/
qmake-qt4 && make
sudo make install
В результате Qt4 приложения примут примерно следующий вид:
Читать полностью...
Автор:
Конищев Дмитрий
6
comments
четверг, 15 января 2009 г.
Интересный способ передачи файлов с одного компьютера на другой
Вот за что я всегда любил Linux, так это за то, что он предоставляет возможность решать возникающие задачи невообразимым количеством различных и зачастую очень интересных способов. Я понимаю, что не открыл ничего нового, наверняка данный способ многим известен (особенно среди системных администраторов), но я почему-то о нем ни разу не слышал.
Недавно мне потребовалось передать по локальной сети репозиторий Ubuntu 8.10 с одного компьютера на другой. 44000 файлов и папок - это довольно много. Заливать их, к примеру, по FTP - очень долго, т. к. для каждого файла будет открываться новое соединение. scp и rsync тоже, насколько я знаю, довольно медленно работают с большим количеством файлов.
И я уже начал запаковывать его в tar архив, чтобы передать по FTP, как вспомнил, что есть такая вещь как netcat. Раньше я им никогда не пользовался - просто где-то слышал о нем и запомнил о его существовании, т. к. он может очень пригодиться при написании скриптов.
Открыл man, почитал и запустил на одной машине командуnc -q0 -l -p 6000 | tar -x
а на другойtar -c Ubuntu.8.10.i386.repository | nc -q0 192.168.0.1 6000
Все! Файлы потекли бурным потоком с одной машины на другую.
Кстати, кроме красоты реализации и скорости работы он также имеет следующие преимущества перед остальными способами (FTP, scp, rsync):
Читать полностью...
Автор:
Конищев Дмитрий
13
comments
Теги: linux, netcat, tar, передача файлов
суббота, 3 января 2009 г.
Flush - еще один GTK-based BitTorrent клиент
Вступление
Единственный BitTorrent клиент под Linux, который пришелся мне по душе - это KTorrent. Не скажу, что он меня полностью устраивал, но при его использовании я не испытывал особых неудобств.
Хотя некоторого функционала мне в нем все же не хватало. Что-то я реализовал скриптами, что-то продолжал делать руками... Вообщем нужного мне уровня автоматизма, которого я пытаюсь добиться со всеми приложениями, которые использую более или менее регулярно, и которые время от времени требуют выполнения каких-либо рутинных операций, мне достичь не удалось.
На самом деле мне не так уж и много надо. Мне не нужен огромный комбайн, который умеет, например, читать RSS, поддерживать надстройки в виде плагинов и т. п.
Попробую объяснить, что мне нужно от BitTorrent клиента, и зачем мне это нужно...
Вот, к примеру, на некоторых трекерах стоит ограничение на максимальное количество торрентов, которые вы раздаете. При превышении лимита вам грозят баном или прочими видами ограничений. Даже если банить вас никто не собирается, то все равно правила нарушать не стоит хотя бы из соображений взаимного уважения, но вручную отслеживать количество раздаваемых торрентов - довольно утомительное занятие. Почему бы не возложить эту работу на BitTorrent клиент?
Далее. Если уж говорить обо мне, то у меня все устроено следующим образом: есть старый диск на 160 Гб, на котором у меня хранятся зеркала репозиториев и скачанные торренты, т. е. наиболее часто изменяемые данные. Не смотря на то, что скачивание торрентов из локальной сети требует очень активной работы с диском, система не тормозит, т. к. находится на другом диске + если из-за сильного износа скачиванием и раздачей торрентов диск выйдет из строя, то никакие ценные данные не потеряются - только торренты и зеркала репозиториев, которые всегда можно скачать заново.
Так вот. Опять-таки правило хорошего тона при использовании peer-to-peer сетей гласит: скачал файл - не уходи с раздачи, дай скачать другим. Тут я предпочитаю следующую схему: при открытии BitTorrent клиентом *.torrent файла, файлы торрента скачиваются на тот самый старый диск. По завершении скачивания всех файлов они копируются в специальную директорию типа "Посмотреть в свободное время", в которой они будут лежать бесконечно долгое время, пока я их не посмотрю и не удалю. Раздача же торрента продолжается с моего старого диска, работа с которым, напомню еще раз, практически не замедляет работу системы. Как только время раздачи торрента превысит, к примеру, неделю, его раздача прекращается и он удаляется с диска.
Торренты я скачиваю не только из интернета, но и из локальной сети. В связи с очень большой разницей в скоростях мне нужна возможность запускать несколько копий одного и того же клиента (для интернета и для локальной сети), но с разными конфигами. KTorrent не позволяет это сделать. При работе с ним мне приходилось запускать вторую копию из под другого пользователя.
Ну и, конечно же, необходима возможность контролировать максимальную скорость скачивания/отдачи в зависимости от времени суток, т. к., к примеру, у моего провайдера ночью скорость скачивания и отдачи увеличивается в 2 раза. Самый удобный, на мой взгляд, способ такого контроля - запуск при помощи cron'а какой-нибудь программы, которая будет передавать указанные опции командной строки уже запущенной копии.
Кроме этого, хотелось бы, чтобы клиент был написан на GTK, т. к. KTorrent - это единственное Qt приложение, которое я использую в повседневной работе - зачем же в таком случае постоянно держать в памяти различные Qt/KDE библиотеки?
На работе, в силу ее специфики, я программирую только на C, поэтому получать опыт программирования на других языках и изучать далекие от специфики работы технологии с целью повышения квалификации приходится дома. :) В итоге, как и в случае с PyVSB, неудовлетворенность имеющимися средствами и желание попрограммировать на C++ параллельно с чтением "Язык программирования C++" Б. Страуструпа сподвигли меня на написание собственного торрент клиента.
Знакомьтесь, Flush
Основные возможности:
Flush использует библиотеку libtorrent от Rasterbar Software.
Скриншоты:



Отговорки, отказ от ответственности и прочее
Как уже было сказано выше, Flush писался исключительно для того, чтобы "написать что-нибудь на C++", поэтому возгласы типа "зачем еще один велосипед?" не имеют смысла.
Версия первая, а значит, возможно, не совсем стабильная. Но, т. к. я им пользуюсь уже достаточно длительное время, то можно считать, что предварительное тестирование он уже прошел. Да, некоторых возможностей, которые могут иногда пригодиться, в нем нет, есть небольшие недостатки, которые мне известны, но до их исправления руки пока не дошли - в конце концов на то версия и 0.1, чтобы быть далеко не идеальной. Просто захотелось выложить по-раньше на всеобщее обозрение, т. к. в таком случае, возможно, мне посчастливится услышать осмысленную критику. Возможно, кто-то даже не поленится залезть в код и дать советы, как лучше реализовать ту или иную функцию. К примеру, текущая реализация работы с DBus меня не устраивает - если вдруг кто-то решит запустить новую сессию DBus, то станет возможным запуск нескольких копий с одним конфигом, и сломается передача параметров уже запущенной копии. Как это сделать более правильно - пока не знаю, особо над этим еще не задумывался, т. к. считаю, что для первой версии это вполне рабочая схема. Единственное что удручает - так это практически полное отсутствие документации по DBus, а изучать его по комментариям в исходных текстах, честно говоря, просто жалко время.
libtorrent-rasterbar-0.14 я пока не поддерживаю - в ней довольно сильно изменился API по сравнению с 0.13, и внести изменения в код я пока не успел.
Да, и самое главное: никакой гарантии, что Flush будет активно поддерживаться и развиваться я не даю. :)
Где скачать?
Естественно, эту статью я написал не просто так. Если мне потребовался такой BitTorrent клиент, то наверняка он также придется по душе и кому-то другому, чему я буду очень рад. Несмотря на существующие недостатки и недоработки, я Flush'ем вполне доволен и KTorrent'ом больше не пользуюсь.
Исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь:
http://sourceforge.net/projects/flush/
Читать полностью...
Автор:
Конищев Дмитрий
53
comments
Теги: bittorrent, flush, gtk, gtkmm, linux

