[#] начали - ориг текст
51t(lenina,1) — All
2014-07-16 05:12:15


g2k14: World of KDE4, Vadim Zhukov (zhuk@)
Contributed by pitrh on Tue Jul 15 09:43:45 2014 (GMT)
from the dragons or cogwheels dept.

Hot on the heels of a successful hackathon, Vadim Zhukov (zhuk@) wrote in with this report on his efforts:

I came to hackathon with a short but heavy TODO list:

1. Finish KDE 4.13.2 and prepare 4.13.3 (official announce to be done Jul 15);
2. Import at least some stuff from semi-official openbsd-wip ports repository to official CVS;
3. Fix the long-standing issue with kded4 constantly eating CPU;
4. Continue hacking on Samba 4.x;
5. Enable ext2fs in RAMDISK_CD for amd64.
6. Put in CVS some stuff under ports/infrastructure/ I've developed for last months.
7. Put in CVS the man-pages-posix port.

But in fact hackathon starts from meeting people you didn't met before. Given that the only OpenBSD event I was before was EuroBSDCon 2013, there were many new faces. I'm afraid that I didn't remembered everyone at once, but that's not because I don't respect them or their work and just due to my shortcoming. :)

So the hackathon started. Both me and kirby@ - another OpenBSD porter from Russia - sat in front of each other. And this was very helpful - he helped me with testing ext2fs kernel build and gave an idea about libinotify (see below), and I helped him in updating rawtherapee port.

My first hackathon commit was importing books/man-pages-posix port. This is a handy tool for developers, I received some positive feedback even before the port was imported. But this was not my work - a lot of invaluable input was given by schwarze@ and others. I learned many new things about mandoc, groff and pkg_create magic while working on this port. But, again, this was just for starting.

Most of the time I was sitting and doing four things, though: running make, tweaking patches, pushing them upstream and spamming landry@ with new ports. I should thank him again for his patience in this process. Thanks to his reviews we now have the following KDE4 software: Calligra suite, Digikam, K3b, Kdenlive, KDevelop, KMyMoney, KTorrent, Tellico and Yakuake (together with a couple of their dependencies like Eigen 3.x).

The only KDE4 ports left in WIP repository is audio/cantata: it has somewhat wry KDE4 integration layer, so I quickly loose interest in spending time on it, given number of audio players out there, including KDE ones. I hope Rafael Sadowski, who assisted me many times, don't feel offended. :)

The KDE 4.13.2 update part is boring and uninteresting. You have 200+ ports, you type 200+ times "make configure update-plist port-lib-depends-check package clean", you push some patches upstream, you're done. That's all. Really. Hard parts were initial work and making KDE3 and KDE4 co-exist; maintaining KDE4 is not that hard.

And then came a really interesting part related to kded4. If you're not aware of details, here they are. kded4, which stands for "KDE 4 Daemon", is an app started (usually) by kdeinit - i.e., either at the beginning of KDE session or together with first KDE app you run during any X session. This daemon hosts so-called KDE modules - if you seen services.exe on Windows, you'll get the idea, it's almost the same. Also, another function of kded4 is monitoring of system configuration files, especially MIME-related .desktop ones. When you install/configure/deinstall application, .desktop files are tweaked, either system ones (under /usr/local) or your personal (under $KDEHOME). Many programs, especially different desktop widgets (read: KDE menu and similar), are interested in notifications about such changes. Thus, kded4 monitors a couple of directories for addition/modification/removal of .desktop files.

This process was very ineffective on OpenBSD. And the reason is that kded4 internally uses KDirWatch, which defaults to inotify-based mechanism on Linux and to QFSWatch-based mechanism on other systems. It also supports FAM, but I already tried to use the latter once and I was unsatisfied. I started to think about implementing kqueue backend, and at this time I remembered kirby@'s work on getting in libinotify. Which is actually what I wanted - an inotify API based on kqueue. So I wrote a FindInotify.cmake which should work on both Linux and non-Linux OSes, tweaked a few #ifdef's in the code, rebuilt kdelibs... and here we are! kded4 checks files at startup and the remains totally silent!

Even more, this also helped to stop akonadi_maildir_resource eating CPU as well - it looks like, they suffered from the same problem. Two problems gone for the price of one! So libinotify was a really good deal. :)

Other things I finished at hackathon, were:
* New portbump(1) utility for port developers, in conjuction with sqlports it could save a lot of time on massive updates.
* Addition of TEST_ENV and ALL_TEST_ENV variables to bsd.port.mk: TEST_FLAGS was not enough because some ports, like CMake-based (read: using Ninja) ones won't understand TEST_FLAGS at all
* Documentation for devel/cmake and x11/kde4 modules. I don't plan to document x11/kde module because noone is developing for it anyway, and there are enough people already knowing it well to maintain existing KDE3 ports.

Unfortunately, I didn't got time to hack on Samba4. There are tricky problems involving ld.so and compiler internals which I hoped to manage at hackathon, but you can't have it all at once. And KDE was my priority anyway.

On the bright side, I was involved in some discussions and tested a few patches flying around. And even in case of errors it made me happy that I can help other OpenBSD developers directly, which is usually problematic in my day life.

In conclusion, I want (need, should) thank Mitja Muženič & and Dijaski dom Tabor for hosting this wonderful event. It was my first hackathon and it's amazing how much stuff happened in a few days. And Ljubljana is such a lovely place... But I hope someone who knows English better than me would portray this cozy city and people there. Everything were excellent - thanks, thanks and thanks again!

[#] Re: начали - ориг текст
51t(lenina,1) — 51t
2014-07-16 05:21:54


g2k14: World of KDE4, Vadim Zhukov (zhuk@)

По горячим следам успешного хакафона, Вадим Жуков (zhuk@) отчитался о своих успехах:

Я прибыл на хакафон с коротким, но суровым списком задач:

1. Закончить KDE 4.13.2 и приготовить 4.13.3 (официальный анонс (чего?) - 15 июля)

2. Наконец-то портировать несколько приложений из openbsd-wip в официальный cvs?

3. Исправить давнюю проблему с усиленным поеданием процессора в kded4

4. Продолжить работу над Samba 4.x

5. Исправить проблему с отсутствием ext2fs в установщике для amd64 (RAMDISK_CD)

6 и 7. что-то про политику, про Путина :)

6. Занести в CVS некоторые вещи для ports/infrastructure, которые я разбабатывал последние месяцы (ничё не понял, потом разберусь)
\
7. Занести в CVS порт man-pages-posix

[#] Re: начали - ориг текст
51t(lenina,1) — 51t
2014-07-16 08:04:21


6. Некоторые вещи, которые я разбабатывал последние месяцы для ports/infrastructure, занести в CVS

Но, по факту, хакафон для вас начинается со знакомства с людьми, с которыми вы не были прежде знакомы. Учитывая, что до этого единственным мероприятием по openbsd, где я был, было EuroBSDCon 2013, было много новых лиц. Я боюсь, что я не запомнил их всех, но не потому, что я не уважаю их илиих работа, это просто мой недостаток :)

Итак, хакафон начался. Мы с kirby@ - другим портером OpenBSD из России - сели друг напротив друга. И это нам очень помогло - он помог мне тестить сборку ядра с ext2fs и дал мне идею насчёт libinotify (см. ниже), а я помог ему обновить порт rawtherapee.

Мой первый коммит на этом хакафоне был импортированием books/man-pages-posix. Это полезная вещь для разработчиков, и я получил положительные отзывы ещё до того, как начал импортирование [мне не нравится вообще слово импортирование, надо как-то заменить в обоих случаях].

Но это не моя работа - неоценимый вклад внёс schwarze@ и другие. Я узнал много нового о mandoc, groff и pkg_create [узнал много нового о магии mandoc, groff и pkg_create, или только о pkg_create? ох уж этот английский язык] во время работы над этим портом. Но, опять же, это было только для начала.

[#] Re: начали - ориг текст
51t(lenina,1) — 51t
2014-07-16 08:16:30


Большую часть времени я сидел и делал четыре вещи: запускал make, твикал патчи, пушил их в апстрим и спамил landry@ о новых портах. Я благодарен ему за терпение. Благодаря его замечаниям, у нас теперь есть следующие приложения из KDE4: Calligra suite, Digikam, K3b, Kdenlive, KDevelop, KMyMoney, KTorrent, Tellico и Yakuake (вместе с зависимостями, типа Eigen 3.x и другими).

Из kde4 в openbsd-wip осталась только audio/cantata: она имеет несколько кривую интеграцию с KDE4, так что мне быстро это надоело - плееров, в том числе для kde4, и так хватает. Надеюсь, что Рафаэль Садовский, который постоянно мне помогал, не обидится. :)

Обновление KDE 4.13.2 скучно и неинтересно. Есть 200 + портов, 200+ раз написать "make configure update-plist port-lib-depends-check package clean", запушить несколько патчей в апстрим, закончили упражнение. Вот и все. Реально всё. Проблемой было создание порта и задача совместного существования kde3 и kde4, а сама поддержка порта kde4 не так сложна.

[#] Re: начали - ориг текст
51t(lenina,1) — 51t
2014-07-16 08:38:46


И вот пришло время для действительно интересненького. kded4. Если вы не в курсе подробностей: kded4 (что означает "KDE 4 Daemon") обычно запускается с kdeinit... то есть, либо в самом начале сессии kde, либо когда вы запускаете первое приложение KDE. Этот демон hosts[содержит???] так называемые модули KDE - Если вы видели services.exe по Windows, то вы понимаете, о чём я, это почти то же самое. Другая задача kded4 - мониторить файлы конфигурации, особенно MIME .desktop файлы. При установке/настройке/удалении приложения, .destkop-файлы могут изменяться, как системные (в /usr/local), так и ваши личные (в $KDEHOME). Многие программы, особенно различные виджеты рабочего стола (читай: KDE-меню и подобное), заинтересованы в уведомлениях о таких изменениях. Таким образом, kded4 контролирует некоторые директории на предмет добавления/изменения/удаления .desktop-файлов.

[#] Re: начали - ориг текст
51t(lenina,1) — 51t
2014-07-21 08:29:58


В OpenBSD этот процесс очень неэффективен. А причина в том, что kded4 внутри использует KDirWatch, который по умолчанию ориентирован на inotify в Linux в QFSWatch в других системах. Он также поддерживает FAM, но я уже пытался его использовать, и мне не понравилось. Я уже начал было думать о реализации бэкэнда kqueue, и тут я вспомнил, что kirby@ работает над libinofity. Это то, что нужно - inotify API на базе kqueue. Так что я написал FindInotify.cmake который должен работать и в Linux и вне Linux, сделал несколько #ifdef в коде, пересобрал kdelibs ... и вот оно! Теперь kded4 проверяет файлы при запуске, и дальше живёт абсолютно не напрягаясь!

[#] Re: начали - ориг текст
51t(lenina,1) — 51t
2014-07-21 08:53:40


Ещё после этого akonadi_maildir_resource перестал жрать ресурсы: похоже, он страдал той же проблемой. Две проблемы по цене одной! Покупайте наши libinotify!

Кроме того, в этом хакафоне я успел доделать:
* новую утилиту portbump(1), в связке с sqlports это поможет сэкономить много времени на масштабных обновлениях
* добавил переменные TEST_ENV и ALL_TEST_ENV в bsd.port.mk: одного TEST_FLAGS было явно недостаточно, поскольку некоторые порты, на CMake (читай: использующие Ninja) не понимают TEST_FLAGS вообще
* документацию для devel/cmake и x11/kde4. Не имею намерения документировать x11/kde, потому что больше никто не развивает его, а те, кто знают, как его поддерживать - и так всё знают.

К сожалению, не хватило времени на samba4. Есть хитрые проблемы, связанные с ld.so и компилятором, которые я надеялся исправить на хакафоне... но не всё сразу. Так или иначе, KDE был приоритетной задачей.

С другой стороны, я был вовлечён в несколько дискуссий и протестировал несколько патчей, летающих повсюду. И, даже в случае ошибок, мне доставлял радость тот факт, что я могу помочь другим разработчикам OpenBSD напрямую, что, как правило, проблематично в обычной жизни.

И, в заключении, я хочу (точнее, обязан) сказать спасибо Mitja Muženič и Dijaski dom Tabor за организацию этого чудесного мероприятия. Это был мой первый хакафон, и было удивительно, сколько всего произошло за несколько дней. И Любляна - прекрасный город... Я надеюсь что кто-то, кто знает английский язык лучше меня, мог бы лучше в красках живоописать этот уютное место и его жителей. Всё было просто классно - спасибо, спасибо и еще раз спасибо!