Тут дело не в сложности. Просто задача довольно муторная — в каждом методе придется проверять данные и вместо того, чтобы обмениваться целыми объектами, упаковывать их на одном конце, принимать и распаковывать на другом (с DBus, конечно, легче, но все равно придется «нарезать» объекты на массу простых: числа, массивы строк и т. п.). Вот если бы я писал его на Python (привет Deluge :) ), то все было бы гораздо проще, т. к. в Python'е можно производить автоматическую сериализацию и десериализацию объектов. В C++ же придется все писать руками…
Хотя исходники тоже могут пригодится — наверняка там можно найти какие-нибудь интересные идеи.
Кстати, может действительно стоит связаться с разработчиками дистрибутива Ubuntu? По-моему, очень приятно, когда твоё приложение включают в ОС.
Кто же спорит, конечно приятно. :) Надо будет действительно попробовать, хотя, чувствую я, это тот еще квест. :) К примеру, недавно совершенно случайно обнаружил, что версии < 0.4 с точки зрения лицензионной чистоты были некорректны: libtorrent-rasterbar зависит от OpenSSL, у которой лицензия не совместима с GPL в результате чего пользователи не имели права собирать Flush без специального на то разрешения в copyright с моей стороны. :)
Кстати, по поводу больших кнопок. Раз уж вы, как и я, не разделяете общей любви к ним, возможно вам пригодится следующий совет:
Чтобы кнопки были по-меньше можете создать собственную тему оформления на основе стандартной, но уменьшив размеры этих самых кнопок. Я, к примеру сделал это, создав файл ~/.themes/My/gtk-2.0/gtkrc со следующим содержимым:
Вы не первый, кто мне советует разнести серверную и клиентскую часть. Возможность, бесспорно интересная. На уровне кода я это сделал изначально — есть объект, представляющий из себя клиента, объект, представляющий из себя демона, и между ними proxy-объект. Сейчас они общаются между собой посредством вызова методов proxy-объекта, но, в принципе, внутрь proxy-объекта можно воткнуть DBus или сокеты… Вот только тогда в каждом методе придется упаковывать данные, делать проверку всех получаемых из внешней среды данных, обрабатывать таймауты (вдруг клиент отвалится) и, возможно, делать асинхронную работу, чтобы не подвешивать GUI… Честно говоря, у меня пока что на это просто банально нет времени. Не знаю, возможно, в будущем я это и сделаю, но вряд ли подобный функционал стоит ждать в ближайшее время.
Да, возможно. Вот только не знаю, если я заменю «Total download» и «Всего скачано» на «Download» и «Скачано», то, возможно, кто-нибудь скажет, что название колонок не отражает того, что они отображают (как будто речь идет о скачанном за текущую сессию, а не за все время). Хотя, наверное, вы правы и все-таки стоит это «Всего» убрать…
> установка ограничения отдачи из трея не плохо бы
Эээ… Так есть же — «Set upload rate limit».
> настройку бы связанную с шифрованием трафика бы иметь еще.
Мне вот просто интересно, а зачем? :) Может быть, я что-то не понимаю, но:
1) Если вы опасаетесь того, что вас осудят за скачивание какого-либо нелицензионного контента с трекера, то шифрование здесь не поможет. Если вас захотят уличить в раздаче подобного контента, то достаточно просто с вас что-либо скачать — тут уж шифрование ничем не поможет, т. к. клиент с радостью отдаст все, что у него попросят.
2) Шифрование имеет смысл разве что в том случае, когда провайдер режет BitTorrent траффик. У нас в России, вроде, до этого пока не дошло… Или я отстал от жизни?
Это вы про "-1" в окне настроек? =) HIG — это, конечно, хорошо, но только, честно говоря, не всегда есть желание сидеть и вылизывать интерфейс только ради того, чтобы он соответствовал каким-либо правилам. Т. к. я не могу уделять очень много времени разработке, то приходится чем-то жертвовать.
По поводу Glade… Честно говоря, никогда не был сторонником различного рода «формошлёпства», будь то Glade или MSVC. На мой взгляд, «размазывание» кода по *.cpp и глейдовским *.xml файлам только все усложняет. Я конечно понимаю, что использование Glade дает возможность юзабилистам помогать в разработке приложения, совершенно не зная языка программирования, но вот только стоит ли ради этого повсеместно использовать Glade? К примеру, убирать те же "-1" все равно придется программисту. Юзабилист может разве что помочь нарисовать шаблон, но лично мне было бы проще один раз перегнать этот шаблон в код, чем каждый раз при программировании лезть в Glade, чтобы посмотреть, какие элементы имеет окно, как они называются, и прыгать по различным меню, ища, какие свойства установлены у каждого виджета — в коде же все это сразу же бросается в глаза, т. к. программист специально выделяет (отступами, комментариями) и объединяет в блоки код так, чтобы его потом было удобно читать.
Это из той же серии, что и создание документации в Doxygen: документация должна создаваться не отдельно от продукта, а вместе с ним и находиться в самом коде, т. к. код, в отличие от всего остального, всегда находится в актуальном состоянии.
Кнопочек не хватает потому, что я предпочитаю GUI, которые занимают как можно меньше места, оставляя его для полезной информации. Мне как-то вполне хватает всплывающих меню по правой кнопке мыши, поэтому о панели инструментов я как-то и забыл… Хорошо, добавлю панель инструментов с кнопочками, но обязательно сделаю, чтобы ее можно было убирать. =)
Насчет фильтров (скачанные, качающиеся и т. п.) тоже согласен — надо будет добавить.
Его можно скачать здесь, перейдя по ссылке libconfig. Если же у вас нет желания возиться с пакетами, то можете просто поставить flush_0.4_bundle_ubuntu_8.10_i386.deb — в bundle-версии исполняемый файл статически слинкован с libconfig и libtorrent.
P.S.: Предвидя вопрос «Почему пакет, содержащий libconfig, называется libconfigduo?», отвечаю: в репозитории Ubuntu уже существует пакет libconfig, который содержит совсем другую библиотеку. Тот libconfig, который использую я, обычно при сборке пакетов именуют как libconfigduo, поэтому я назвал его именно так.
Хм, Debian Lenny… Я так понимаю, у вас стоит glibmm-2.16.4. Оказывается, что Glib::ustring::compose, на который я перешел с boost::format в flush-0.4, появился только в glibmm-2.16, ну и, соответственно, в первой версии был реализован не так хорошо как сейчас…
Вообщем сделал на скорую руку патч, после применения которого у меня все скомпилировалось с glibmm-2.16.4. Патч можно взять здесь — ifolder.ru/11312835. Для его применения необходимо выполнить команду
patch -p0 < flush-0.4.patch
в директории, в которую вы распаковали архив с исходными текстами (после распаковки архива в ней должна была появится директория flush-0.4).
P.S.: Пока что я проверил компиляцию только с glibmm-2.16.4. Надеюсь, с той версией gtkmm, которая установлена у вас, проблем не будет. Как только появится свободное время, попробую также скомпилировать и с той версией gtkmm, которая установлена у вас (в Debian Lenny).
Может быть, я что-то упустил, но в них не рассказывается, как именно добавить свои пакеты в официальный репозиторий. Или, если я создам свой репозиторий на Launchpad, то со временем его пакеты переместят в официальный?
Под "смотреть" я имел в виду "смотреть их содержимое". В любом случае, думаю, вы поняли, что я имел в виду. FTP может заменить флэшка или другой носитель... Именно из-за такого "дефолтного" подключения конфигов сегодня, работая под Windows, воткнуть флэшку в компьютер и заразиться вирусом - обычное дело.
Это небезопасно. К примеру, я могу залить вам на FTP сервер .vim/ide.vim, в котором будет что-нибудь вроде silent !rm -rf ~, и вы при просмотре файлов Upload директории потрете весь свой хом. :)
Ваше удивление вполне обосновано, т. к., пожалуй, любому пользователю, не видевшему режимных текстовых редакторов все это кажется ненужным и лишним. Но поверьте, если вы работаете программистом и проводите 80% своего рабочего времени в текстовом редакторе, то вам действительно стоит основательно подойти к выбору этого самого редактора и изучить его очень основательно, чтобы максимально повысить продуктивность вашей работы. Как показывает практика, Vim в этой области очень уверенно держит свои позиции вот уже более 30 лет (!). Один только возраст редактора внушает уважение и заставляет задуматься - ведь не просто же так его используют люди, значит, что-то в нем все-таки есть... И это что-то действительно есть, уж поверьте - просто в двух словах это не опишешь, надо самому почувствовать его возможность, а это возможно только после прочтения подобного рода HowTo и хотя бы недели работы в Vim.
Ну да. :) Только не все, а те, над которыми я в данный момент работаю. Ну и при необходимости нажимаю <C-W>_, чтобы развернуть на весь экран файл с исходником, если в течении какого-то времени предполагаю работать только с ним. Как правило, редактировать больше 3-4 файлов одновременно у меня не возникает необходимости (все-таки для того программа и разбивается на файлы, чтобы при внесении изменений затрагивать как можно меньше кода), поэтому такой режим работы меня вполне устраивает.
Хотя исходники тоже могут пригодится — наверняка там можно найти какие-нибудь интересные идеи.
Кто же спорит, конечно приятно. :) Надо будет действительно попробовать, хотя, чувствую я, это тот еще квест. :) К примеру, недавно совершенно случайно обнаружил, что версии < 0.4 с точки зрения лицензионной чистоты были некорректны: libtorrent-rasterbar зависит от OpenSSL, у которой лицензия не совместима с GPL в результате чего пользователи не имели права собирать Flush без специального на то разрешения в copyright с моей стороны. :)
Кстати, по поводу больших кнопок. Раз уж вы, как и я, не разделяете общей любви к ним, возможно вам пригодится следующий совет:
Чтобы кнопки были по-меньше можете создать собственную тему оформления на основе стандартной, но уменьшив размеры этих самых кнопок. Я, к примеру сделал это, создав файл ~/.themes/My/gtk-2.0/gtkrc со следующим содержимым: и задал в качестве темы оформления тему My.
Либо, можно воспользоваться какой-нибудь специальной компактной темой, например, Human Compact.
Эээ… Так есть же — «Set upload rate limit».
> настройку бы связанную с шифрованием трафика бы иметь еще.
Мне вот просто интересно, а зачем? :) Может быть, я что-то не понимаю, но:
1) Если вы опасаетесь того, что вас осудят за скачивание какого-либо нелицензионного контента с трекера, то шифрование здесь не поможет. Если вас захотят уличить в раздаче подобного контента, то достаточно просто с вас что-либо скачать — тут уж шифрование ничем не поможет, т. к. клиент с радостью отдаст все, что у него попросят.
2) Шифрование имеет смысл разве что в том случае, когда провайдер режет BitTorrent траффик. У нас в России, вроде, до этого пока не дошло… Или я отстал от жизни?
По поводу Glade… Честно говоря, никогда не был сторонником различного рода «формошлёпства», будь то Glade или MSVC. На мой взгляд, «размазывание» кода по *.cpp и глейдовским *.xml файлам только все усложняет. Я конечно понимаю, что использование Glade дает возможность юзабилистам помогать в разработке приложения, совершенно не зная языка программирования, но вот только стоит ли ради этого повсеместно использовать Glade? К примеру, убирать те же "-1" все равно придется программисту. Юзабилист может разве что помочь нарисовать шаблон, но лично мне было бы проще один раз перегнать этот шаблон в код, чем каждый раз при программировании лезть в Glade, чтобы посмотреть, какие элементы имеет окно, как они называются, и прыгать по различным меню, ища, какие свойства установлены у каждого виджета — в коде же все это сразу же бросается в глаза, т. к. программист специально выделяет (отступами, комментариями) и объединяет в блоки код так, чтобы его потом было удобно читать.
Это из той же серии, что и создание документации в Doxygen: документация должна создаваться не отдельно от продукта, а вместе с ним и находиться в самом коде, т. к. код, в отличие от всего остального, всегда находится в актуальном состоянии.
Естественно, все вышесказанное — ИМХО.
Насчет фильтров (скачанные, качающиеся и т. п.) тоже согласен — надо будет добавить.
P.S.: Предвидя вопрос «Почему пакет, содержащий libconfig, называется libconfigduo?», отвечаю: в репозитории Ubuntu уже существует пакет libconfig, который содержит совсем другую библиотеку. Тот libconfig, который использую я, обычно при сборке пакетов именуют как libconfigduo, поэтому я назвал его именно так.
Вообщем сделал на скорую руку патч, после применения которого у меня все скомпилировалось с glibmm-2.16.4. Патч можно взять здесь — ifolder.ru/11312835. Для его применения необходимо выполнить команду
patch -p0 < flush-0.4.patch
в директории, в которую вы распаковали архив с исходными текстами (после распаковки архива в ней должна была появится директория flush-0.4).
P.S.: Пока что я проверил компиляцию только с glibmm-2.16.4. Надеюсь, с той версией gtkmm, которая установлена у вас, проблем не будет. Как только появится свободное время, попробую также скомпилировать и с той версией gtkmm, которая установлена у вас (в Debian Lenny).
P.S.: Спасибо, кстати, за функцию полного восстановления позиции курсора из вашего .vimrc - скопипастил себе в конфиг. =)