QCDemu 0.2.4

Po ostatnim ogłoszeniu postanowiłem jednak nie czekać na dalsze zmiany i wydać aktualny kod jako nową wersję. QCDemu 0.2.4 to więc głównie niewidoczne zmiany pod maską, choć nie tylko. Korzystając z okazji postanowiłem nieco zmienić sposób paczkowania i usunąć parę nieużywanych plików. Porzucone zostały definicje typów mime na rzecz tych dostarczanych przez libmirage (są kompletniejsze i już powinniście je mieć w systemie, więc po co dublować pracę?) i integracja z d3lphinem (który nie jest rozwijany od dłuższego czasu). Nową wersję możecie pobrać z mojego mirrora lub z Gitoriousa. Użytkownicy Gentoo znajdą ebuild w roslin uberlay.

QCDemu @ Gitorious

Ostatni nadmiar czasu i ciekawości sprawił, że postanowiłem sprawdzić co ma mi do zaoferowania Git, zachwalany przez wielu deweloperów system kontroli wersji. Cóż, muszę przyznać, że chyba złapałem bakcyla :) Na fali entuzjazmu przekonwertowałem więc stare, lokalne repozytorium z kodem QCDemu i zaimportowałem je z całą historią na serwis społecznościowy Gitorious. Od tej pory stamtąd możecie pobrać najnowszy kod. Losy projektu możecie też śledzić na CIA. W ostatnim czasie zaszło trochę zmian, choć większość z nich nie będzie widoczna dla końcowego użytkownika :) Głównie poprawiałem estetykę kodu i przepisywałem fragmenty, z których nie byłem szczególnie dumny. Usunąłem też pliki od mimetype'ów, bo okazuje się, że libmirage od jakiegoś czasu dostarcza dużo lepszych odpowiedników. Jeśli więc w najbliższej przyszłości wydam nową wersję, będzie to jedynie maintanance release. No, chyba, że ktoś z was ma jakieś ciekawe i możliwe do zrealizowania pomysły :)

Z pawlacza mziaba

Od dłuższego czasu zamierzałem opublikować tu parę łatek, które popełniłem. Ze względów czasowych odleżały się na dysku dużo dłużej niż myślałem. Przejdźmy więc od razu do rzeczy:

kdeplasma-addons-pastebin-wklejorg-and-wstaworg.patch
Jakiś czas temu zrobiłem łatkę do plazmoida Pastebin, która dodawała wsparcie dla Imageshack.us. Później nawet została zaakceptowana i dopracowana przez upstream. Poszedłem więc za ciosem i zrobiłem kolejną łatkę do tego plazmoida, tym razem dodającą wsparcie dla rodzimych wklej.org i wstaw.org. Mam wątpliwości czy upstream przyjmie tę łatkę, bo grono odbiorców tej łatki jest nieco węższe niż poprzedniej, stąd wrzucam ją tutaj. Używam jej od dobrych kilku miesięcy i działa w porządku pod KDE 4.3. Nie próbowałem jeszcze bety KDE 4.4, więc nie wypowiem się na temat kompatybilności z tą wersją.

mc-4.7.0-udar.patch
Już od jakiegoś czasu dar służy mi za główne narzędzie do backupów rzeczy, nad którymi pracuję. Dla wygody używałem więc małego dodatku do Midnight Commandera o nazwie udar, pozwalającego na przeglądanie kopii podobnie jak innych archiwów. Sęk w tym, że wraz z aktualizacją mc do wersji 4.7.0_* skrypt ten zaczął szaleć. Konkretnie chodzi o złe rozpoznawanie daty. Zdaje się, że stary, numeryczny format miesięcy nie jest już akceptowany. Nie jestem pewien. W każdym razie, przeglądając kod mc i używając mojej podstawowej znajomości awk, postanowiłem załatać skrypt. Efektem jest ta łatka, powstała na bazie łatki z ALT Linux. Pewnie można to zrobić jakoś ładniej, ale u mnie działa :)

mednafen-latest-save-and-increment.patch
Mimo braku jakiegokolwiek interfejsu, Mednafen jest jednym z moich ulubionych linuksowych emulatorów. Brakowało mi w nim jednak dwóch rzeczy, do których przyzwyczaił mnie ZSNES - automatycznej inkrementacji slotu przy zapisywaniu (przydatne, jeśli zapisywanie stanu mamy przypisane pod przycisk joypada i nie chcemy używać klawiatury) i automatycznego wyboru najnowszego zapisu przy uruchamianiu gry. Ta część kodu Mednafena była na szczęście bardzo czytelna i dość szybko udało mi się dodać obie funkcje. Łatka dodaje dwie nowe opcje konfiguracyjne - autoincrement i latestsave, domyślnie wyłączone. Slot jest inkrementowany przed zapisem, ale tylko, gdy aktualny jest pusty. Myślę, że to najlogiczniejszy sposób. Łatka sprawdzona u siebie, działa jak należy.

snes9x-fix-defaults.patch
Jeśli ktoś z was jeszcze używa oryginalnego linuksowego portu snes9x'a 1.51, pewnie zauważył, że na dzień dobry używa on niewłaściwych ścieżek do joypadów i wypluwa za każdym razem błąd o nieistniejącej opcji w konfiguracji. Tak, mnie to też irytuje. Stąd ten prosty patch. Ale ogólnie (jeśli nie używacie debuggera) raczej polecam przestawić się na snes9x-gtk :)

opera-systemstyle.patch
Używacie Opery 10 z Qt4 i chcecie, żeby używała ładnego stylu z KDE4? Ten banalny patch dodaje odpowiedni parametr do skryptu odpalającego Operę i wszystko wygląda pięknie :)

To tyle łatek, które chomikowałem na dysku. Mam nadzieję, że komuś się coś z tego przyda. Wesołych Świąt!

QCDemu 0.2.3

Prawie 3 miesiące od ostatniego wpisu chciałbym ogłosić dostępność nowej wersji mojej nakładki. Doszło do małego uporządkowania kodu inicjalizującego połączenie DBus. Poprawiłem też segfault występujący z Qt 4.6_rc1 (podziękowania dla lazy_buma za zgłoszenie usterki). Dodałem też jedną nową funkcję - automatyczną detekcję czy CDemu odpalono globalnie czy lokalnie. Przedtem program wyświetlał komunikat o braku urządzeń, licząc na interwencję ze strony użytkownika. Teraz próbuje najpierw drugiej szyny i dopiero, jeśli to się nie uda, wyświetla błąd. Krótko mówiąc, o ile odpaliliście cdemud i nie ma problemów z uprawnieniami, stary komunikat błędu nie powinien się już pokazywać :) Nie przedłużając, zapraszam do pobrania źródeł lub (użytkownicy Gentoo) do skorzystania z ebuilda z zaprzyjaźnionego roslin uberlay.

P.S. W związku z ostatnimi prośbami, poszukuję osoby, która zechciałaby przygotować paczkę dla (K)Ubuntu. Zainteresowanych proszę o kontakt w komentarzach albo drogą mailową.

QCDemu 0.2.2

Jakiś czas temu wyszła nowa wersja CDemu, więc postanowiłem sprawdzić czy moja nakładka nadal działa. Okazało się, że jest inaczej, bo kolejny raz został zmieniony interfejs DBus, a konkretnie metody DeviceGetStatus i DeviceLoad. Niekompatybilność bezzwłocznie usunąłem, a korzystając z okazji poprawiłem też obsługę ścieżek relatywnych w interfejsie cli. Nowa wersja sprawdza też czy zainstalowany jest daemon w odpowiedniej wersji. Myślę, że to wystarczający powód, by wydać nową wersję :) Zainteresowanych zapraszam do pobrania źródeł lub skorzystania z zaprzyjaźnionego roslin uberlay.

UPDATE: Została wydana nowa wersja.

KDE 4.3 beta 2

Po dłuższej zwłoce spowodowanej brakiem weny do pisania nadszedł czas na kolejny post ze spostrzeżeniami na temat nowego snapshotu KDE4. Z powodu paru irytujących bugów, które zostały poprawione zaraz po wydaniu tejże darowałem sobie opisywanie wrażeń z pierwszej bety KDE 4.3. Nie było znowu tak źle, ale po co mam psioczyć na błędy, których już nie ma, prawda? :)

Cóż więc zmieniło się w porównaniu z KDE 4.2? O ile zmiany między 4.0 a 4.1 i 4.1 a 4.2 nazwałbym rewolucyjnymi, w 4.3 jest już dużo bardziej ewolucyjnie. Dostajemy z grubsza to samo, ale tu i ówdzie jest ładniej, szybciej czy też pojawiły się nowe opcje.

Ze zmian na plus mogę wymienić:
+ Popupy przy zmianie pulpitu w końcu działają i są ładne w moim osobistym odczuciu
+ Poprawiono wygląd KRunnera, wprowadzając przy okazji podpowiedzi na temat składni
+ Klasyczny aplet menu ma teraz więcej opcji, w tym wyświetlanie ostatnio używanych aplikacji i dokumentów oraz obsługę prawokliku dla wpisów
+ Dolphin ma dodatkowy panel z drzewem katalogów i pasek wyszukiwania używający
+ KWin ma kilka nowych efektów, w tym Fade i Highlight Window
+ Dodano panel do ustawiania działań Solida
+ Dopracowane powiadomienia: informacja o aktywnych zadaniach, grupowanie, wybór jakie typy mają być wyświetlane
+ Upiększony i rozbudowany plazmoid Pastebin (tu dołożyłem swoją cegiełkę, podsyłając jakiś czas temu łatkę ze wstępną obsługą Imageshack)
+ Wyeliminowano w pewnym stopniu marnotrawstwo pamięci spowodowane ładowaniem wielu libGL z nvidia-drivers (nawet 40MB oszczędności)
+ Płyty CD/DVD można znowu odmontowywać wciskając eject na napędzie, jeśli ktoś ma taki nawyk

Co mi się podoba trochę mniej:
- Dymki w Folder View są może i przydatne, ale nie można ich wyłączyć, co mnie lekko irytuje przy szybkim klikaniu ikon
- Ikona od powiadomień siedzi cały czas w zasobniku i nie bardzo daje się wyłączyć
- KRunner przy pierwszym uruchomieniu lubi wyskoczyć w losowym miejscu, a dopiero potem przesuwa się na środek
- Nadal nie można przypisać appmenu pod prawoklik na pulpicie. Na szczęście funkcja ta ma szansę pojawić się w KDE 4.4.

Poza tym wytropiłem dwa bugi, które już załatano:
- Pasek zadań lubi się powiesić, jeśli odmontowywanie urządzenia za pomocą przycisku eject się nie powiodło
- Zegar analogowy przy pierwszym wejściu do konfiguracji pokazywał strefę czasową wbrew ustawieniom (problem zależny od locale)

Ogólnie nie jest źle. Używam u siebie snapshotu KDE 4.2.91 + dwóch backportów na wyżej wymienione bugi. Po aktualizacji do Qt 4.5 wszystko zaczęło chodzić jeszcze szybciej. Niech znajdzie się jeszcze jakiś w miarę elegancki sposób na wyłączenie tych tooltipów i prawoklikowe menu rodem z fluxboksa, a nie będę miał na co narzekać :)

Distcc i różne wersje GCC

Na innym komputerze nadal mam GCC 4.1.2 i coś czuję, że nieprędko to się zmieni. Nie stracić korzyści wynikających z distcc tylko dlatego, że na najmocniejszej maszynie zaktualizowałem GCC do 4.3. Musiałem więc coś wymyślić. I tak dzięki wujkowi Google i własnej inwencji powstał poniższe rozwiązanie. Jest nim wrapper dla klienta distcc, który zmusza do używania konkretnej wersji GCC. Rzecz jasna, żeby to zadziałało, na serwerze distcc musi być zainstalowana odpowiednia wersja GCC (w tym przykładzie 4.1.2). Wszystkie komputery muszą też rzecz jasna używać tej samej architektury. Jeśli interesuje was kompilacja skrośna, możecie posiłkować się pierwotnym HOWTO.

Jak to zrobić:
1) Tworzymy plik /usr/lib/distcc/bin/wrapper.sh o treści:

#!/bin/bash
exec distcc i686-pc-linux-gnu-g${0:$[-2]}-4.1.2 "$@"

2) Zastępujemy wszystkie symlinki z katalogu /usr/lib/distcc/bin symlinkami do wrapper.sh

Przed:

lrwxrwxrwx 1 root root 15 wrz 18  2006 c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 cc -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 gcc -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 i686-pc-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 i686-pc-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx 1 root root 15 wrz 18  2006 i686-pc-linux-gnu-gcc -> /usr/bin/distcc

Po:

lrwxrwxrwx 1 root root   10 lut 20 19:17 c++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 cc -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 g++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 gcc -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 i686-pc-linux-gnu-c++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 i686-pc-linux-gnu-g++ -> wrapper.sh
lrwxrwxrwx 1 root root   10 lut 20 19:17 i686-pc-linux-gnu-gcc -> wrapper.sh
-rwxr-xr-x 1 root root   65 lut 20 19:39 wrapper.sh

To wszystko, po wykonaniu tych kroków klient distcc powinien używać właściwej wersji GCC :)

GCC 4.3.3

Już jakiś czas temu doszedłem do wniosku, że GCC 4.3.3 powinno być dostatecznie bezpieczne do codziennego użytku i kusiła mnie migracja na tę wersję. Większość bugów na bugzilli Gentoo jest zamknięta, a niedobitki to pakiety, których w życiu nie używałem. Postanowiłem więc zakasać rękawy i przystąpić do aktualizacji i przebudowy systemu :)

Spostrzeżenia i uwagi:
* Odmaskowałem glibc 2.8*, bo nie chciałem się pakować od razu w 2.9
* Najpierw odmaskowałem nowe wersje boost, boost-build i aspella. Wersje ze stable rzekomo nie lubią się z GCC 4.3
* Dodatkowo zaktualizowałem VirtualBoksa do wersji 2.1.4 z overlaya jokey. Wersje 2.1.0+ dodają wsparcie dla GCC 4.3
* Po przełączeniu kompilatora zmieniłem -march na -march=native, żeby przerzucić dobór optymalizacji na kompilator :)
* emerge -e @system przebiegło bezboleśnie
* Pierwszy problematycznym pakietem przy emerge -e @world okazała się enca. Wystarczyło odmaskować enca i jej zależność - recode
* Dużo później wyłożył się dev86, zależność m.in. VirtualBoksa i kernelowego uvesafb. Wystarczyło odmaskować.
* Dzięki -march=native wyłożyła się oczywiście (z racji boostrapowania) rekompilacja starego GCC, ale to już rozwiązałem za pomocą portage-bashrc-ng i package.*flags.
* Wyłożyła się też Stepmania z roslina. Dodałem do repo stosowną łatkę, głównie dodającą brakujące nagłówki.
* Na koniec wyłożył się stary Amarok. I to byłby najdziwniejszy problem. Po zmniejszeniu MAKEOPTS na -j1 przeszło bez problemu (choć pod GCC 4.1.2 i -j5 było wszystko cacy). Mało tego, później na -j5 i GCC 4.3 poszło jak gdyby nigdy nic. Nie będę nawet starał się tego zrozumieć. Tak będzie lepiej :)
* Na koniec na wszelki wypadek przekompilowałem kernel i zrobiłem module-rebuild.
* Stary kompilator zostawiłem na potrzeby distcc (o pewnej sztuczce z tym związanej napiszę w późniejszym poście)

Uwagi końcowe:
Wszystko przebiegło pomyślnie i, o ile pamięć służy, było dużo mniej wpadek niż jakiś czas temu przy przejściu na 4.1. Tym razem skończyło się na odmaskowaniu 5 pakietów (+ VirtualBoksa z overlaya) i jednej własnej łatce. Wynik uważam za korzystny. Podczas rekompilacji system był w pełni sprawny. Normalnie z niego korzystałem. Jedyną usterką, jaką zaobserwowałem była ciut ogłupiała konsola Pythona zanim ten został przekompilowany :) Nowe GCC wypluwa dużo więcej ostrzeżeń, głównie za sprawą domyślnie włączonych -D_FORTIFY_SOURCE=2 i -Wformat-security. Na razie nie zauważyłem cudownych wzrostów wydajności ani zmniejszenia rozmiaru binarek. Z drugiej strony, nie robiłem żadnych pomiarów przed i po. Niemniej jednak efekt placebo jest bardzo satysfakcjonujący :P Zresztą GCC 4.3 i tak trafi do stable w perspektywie najbliższych tygodni. Przyśpieszyłem tylko nieuniknione :) O ile jesteście gotowi odmaskować parę pakietów i przekompilować system, mogę wam z powodzeniem polecić tę wersję GCC.

UPDATE:
Nowy VirtualBox właśnie wylądował w portage. Nie jest już potrzebny overlay.
Z mniej optymistycznych wieści:
* cvs wykłada się z "*** %n in writable segment detected ***" przy cvs diff. Na szczęście wystarczyło odmaskować najnowszą wersję.
* zsnes wykłada się z powodu -D_FORTIFY_SOURCE. Jest już na to łatka. Zaraz będzie w roslinie :)

UPDATE 2:
Po odpaleniu debuggera w emulatorze snes9x odkryłem problem na linii FORTIFY_SOURCE i glibc 2.8. Ma on wpływ na programy używające sprintf (i inne jego warianty) do doklejania tekstu do końca bufora w taki sposób:

sprintf(buf, "%sfail", buf);

Teoria jest taka, że taki kod jest nieprawidłowy i nie powinno się tak pisać. W praktyce mamy wiele programów, które tego nadużywają. Kilka wystąpień znalazłem nawet w źródłach kernela. Błąd występuje tylko przy włączonym FORTIFY_SOURCE i optymalizacji -O2 (i pewnie wyższych. Na szczęście jest na to łatwe obejście. Wystarczy nałożyć tę łatkę na glibc. Przywraca on stare zachowanie. Po nałożeniu łatki nie trzeba przekompilowywać systemu, ale jeśli bardzo chcecie, to proszę bardzo :) Gdyby ktoś chciał poczytać więcej o tym bugu, zapraszam tutaj.

KDE 4.2 RC1

Jak na pewno wiecie, przed paroma dniami upubliczniono nową wersję KDE 4.2. Z kronikarskiego obowiązku postanowiłem więc napisać o niej parę słów. Będzie to jednak bardzo krótki post. Dlaczego? Poza usunięciem multum błędów, w tym zgłaszanych przeze mnie, praktycznie nic nie zmieniło się od czasu drugiej bety. Nie musiałem już nakładać żadnych łatek na Arka, Gwenview, Okulara, Pykde4 czy Plasmę. Prawie wszystkie bugi, które zgłosiłem, zostały naprawione, a reszta to sprawy tak drobne, że zupełnie mi nie przeszkadzają. Z wizualnych zmian zauważyłem tylko inną tapetę w KDMie :) Tu i ówdzie zdarzają się jeszcze brakujące polskie tłumaczenia, ale to raczej dlatego, że tłumacze czekali na string-freeze. Do do czasu wersji finalnej sprawa powinna rozwiązać się sama. KDE 4.2 RC1 i nvidia-drivers w najnowszej wersji 180.22 to naprawdę dobry tandem, który w zupełności spełnia moje oczekiwania. Mam nadzieję, że wasze odczucia będą podobne.

KDE 4.2 beta2

Co prawda w tak zwanym międzyczasie wyszedł jeden snapshot, a źródła drugiej bety były dostępne parę dni wcześniej, ale postanowiłem wstrzymać się z tym postem aż do oficjalnej premiery. Post ten będzie raczej moją osobistą listą zaobserwowanych zmian na plus. Ostatnio dość często bywam na bugzilli KDE i zgłaszam niedoróbki, które rzucają mi się w oczy. I muszę przyznać, że znakomita większość zgłoszonych przeze mnie usterek została usunięta w KDE 4.2 beta2 lub w trunku, a to, co pozostało to drobiazgi, na które mogę przymknąć oko.

Moje spostrzeżenia:
+ Usunięto crash Plasmy przy ponownym wejściu do konfiguracji plazmoida.
+ W nowej becie ani raz nie pojawiło mi się tajemnicze puste miejsce na panelu.
+ Nowe powiadomienia w systrayu można wyłączyć, choć na razie wymaga to edycji plasma-appletsrc.
+ Problem z dziwnym zachowaniem efektów z pełnoekranowymi oknami można obejść wyłączając "unredirect fullscreen windows".
+ Pasek zadań znowu wyładniał :)
- Nadal nie działa mi wyświetlanie nazwy pulpitu przy przełączaniu (w trybie composite, w normalnym działają).

Jest też parę innych niedoróbek, które naprawiono za późno na beta2, ale są naprawione w svn. Oto mój zestaw łatek, w większość wygenerowanych z svn:
* ark-libarchive-emit.patch - poprawka na pustą listę plików przy archiwach tar.gz/tar.gz2 w Arku, moja własna łatka
* dolphin-tabs.patch - sprawia, że nowe karty w Dolphinie respektują tryb podzielonego widoku
* kwin-screen-edges.patch - poprawka na powracające ustawienia rogów ekranu
* libkonq-copytomenu.patch - poprawka na duplikaty ostatnio wybranych katalogów w Kopiuj/Przenieś do
* okular-cbz-fix.patch - poprawka na crash przy otwieraniu archiwów CBZ
* okular-cbz-multidir.patch - poprawka na wielokatalogowe archiwa CBZ
* okular-menubar.patch - poprawka na znikające menu po wyjściu z trybu pełnoekranowego
* plasma-workspace-fix-extender.patch - poprawka na błędne ukrywanie

W moim katalogu files jest jeszcze parę innych łatek, w tym moja próba poprawienia popupów z nazwą pulpitu, poprawka na jeden niegroźny warning i obejście na niekompilujące się pykde4.

Dodam jeszcze, że pod nvidia-drivers w wersji 180.16 nie ma już wycieków pamięci, dzięki czemu daje się już całkiem normalnie pracować. Jeśli używacie 180.11 albo 180.06, upgrade jest wysoce zalecany.

KDE 4.2 beta2 działa u mnie całkiem dobrze. Nie mogę narzekać. Już nie potrafiłbym wrócić do używania KDE 3.5. Od samych screenshotów swojego starego pulpitu robi mi się strasznie dziwnie :) Po raz pierwszy od dawna mam uczucie, że mój pulpit jest ładny i funkcjonalny jednocześnie. KDE 4.2 to zaiste jedna dziesiąta odpowiedzi na życie, wszechświat i całą resztę :)