neděle 4. srpna 2013

Svátkový indikátor je ve Vala lepší. Aktualizováno 11.8.13

Po přestávce pokračuju v seznamování s Vala a začíná se mi to líbit čím dál tím víc. Pochopil jsem pár základních myšlének typových jazyků a s void už mě nerozházíte. Pro bastlení v GNOME prostředí (což je stále i Ubuntu, Debian, Mint, Fedora, OpenSUSE) je to velmi zajímavý jazyk. Pravdou je, že při přepisování svátkového indikátoru jsem kompromisy netrpěl vůbec, program je to tak jednoduchý, že to vlastně nemá kde dřít. Je tu sice nějaká ta režie navíc, musím řešit typy, statické / dynamické metody, přetypování a další záludnosti, ale je to menší opruz, než jsem si ze začátku představoval. A někdy si i dokonce říkám "ha, tohle je jednodušší, než v Pythonu/PyGObject/PyGTK". Některé záležitosti ale Vala fakt neumí...

Každopádně jsem přepsal svátkový indikátor pro Unity, který je použitelný i v GNOME Shell s rozšířením AppIndicator Support a pokud by to někoho zajímalo, přidám pár postřehů a lehce komentovaný funkční kód. ...

Aktualizace: Do vyhledávání přibyl kalendář, který ukáže dohledané datum pro zvolený rok, takže se dozvíte i na který den v týdnu připadá a kliknutí na den v kalendáři naopak vyhledá svátek pro tento den. Do budoucna bych chtěl přidat možnost kterýkoliv den dvojklikem v kalendáři označit a případně si přidat vlastní poznámku. Na takový den by indikátor upozornil blikající ikonou vedle jména. Uvidíme, řeším rozumný způsob zpracování dat, přecijen je to pro mě trochu komplikovanější ve Vala, než v Pythonu. Ano už je to tu, už to lehce drhne :) Dílo je ke stažení na konci článku.


Vala má nějaká ta omezení, krom toho, že neumí nic navíc, co by nezvládlo C, do kterého se překládá. První problém, na který jsem narazil, je neschopnost vytvořit dvourozměrné pole... na kterém se pase šestirozměrná kráva. Pardon, to se mi zas vybavil náš matikář. Nicméně pole "rok", ve kterém je 12 dalších polí "leden,..,prosinec", která obsahují nestejný počet členů v podobě jmen/svátků, nedá. Pokud chcete takové pole vytvořit, musíte každý neodpovídající měsíc doplnit o mrtvé členy, aby si pole v poli byla rovna. Přitom samotné pole může mít členy různých velikostí. Ovšem nikoliv typů. Vala také těžko vytvoří slovník, kde klíč bude třeba string a hodnota reference na objekty (nedej bože různých typů). Vlastně jsem slovník nenašel vůbec.. Jsou tu snad nějaké knihovny, které tyto nedostatky řeší, ale tak daleko ještě nejsem. Na druhou stranu nedostanete kritickou chybu při čtení z neexistující buňky pole, prostě se vrátí null.

Dopsal jsem tedy základní předělávku svátkového indikátoru. Sice jsem se ještě nedopracoval k realizaci smělých plánů z minulého roku, umí to v podstatě to samé, co poslední verze v Pythonu, ale začal jsem to psát znovu, volil trochu jiné postupy (který matlák psal předchozí verzi.. :) a drobnosti jsem vylepšil. Přehled svátků na další dny nyní obsahuje i předchozí tři dny, vyhledávací okno je jednodušší a praktičtější, vyhledávání funguje okamžitě jak píšete a dostáváte až dva výsledky, což stačí k tomu, abyste našli i dvojitého Petra. Velikonoční pondělí počítám podle Gaussova vzorce, protože speciální knihovnu jsem nenašel (to je super, alespoň jsem se zas něco nového dozvěděl) a pro vyhledání data pro konkrétní rok stačí do vyhledávání zadat jen letopočet. V přehledu dnů pracovního klidu se nyní automaticky doplňuje datum Velikonočního pondělí pro aktuální rok.

Nic zásadního pro běžné uživatele, ty s nedostatkem paměti (RAM) by mohla zajímat úspora, žere to třetinu (32bit po startu 2MiB vs 6,4MiB, po použití menu a vyhledávacího okna je to 2,5MiB vs 7,1MiB, na 64bit jsou čísla o více než polovinu vyšší, v případě Pythonu skoro 2x hned po startu), ale pokud by někoho Vala zajímal, dám sem lehce okomentovaný kód, který jsem vytvořil. Možná to může trochu pomoct těm, kteří začali se skriptováním a chtěli by se posunout trochu dále. Nakonec, pokud někdo prošel peklem Bashe, musí ocenit i Vala.

Takže pro stažení archivovaného zdrojového kódu klikněte na tento odkaz: indicator-nameday.0.3.3.vala.

V úvodním komentáři zdrojáku je i příkaz pro instalaci potřebných komponent, i kompilaci v Ubuntu (a Fedoře 19 s GS a nainstalovaným rozšířením AppIndicator Support). Po úspěšné kompilaci (varování si všímat nemusíte) je možno výsledný binární soubor spustit odkudkoli, po zaškrtnutí "Spustit při přihlášení" ale nesmíte soubor dále přemisťovat (spouštěč v autostartu by ho nenašel) nebo po přesunu odškrtnout a zaškrtnout znovu, aby se přepsal.

Budu rád, když vyzkoušíte a případně okomentujete, či zkritizujete. Instalační balíky, případně repozitář (jednou to chci určitě vyzkoušet..) snad časem. Rozhodně ještě doplním odkaz přímo na zdroják a přidám hotové binárky pro 32bit U12.04, 64bit U13.04 a 64bit Fedoru 19, jiné platformy momentálně nemám.

Update (11.8.13):

64bit: indicator-nameday.0.3.3_amd64.tar.gz
binárka kompilovaná na Ubutnu 13.04, ale funguje normálně i na Fedoře 19 a pravděpodobně na dalších verzích Ubuntu od 12.04 výš.

32bit: indicator-nameday.0.3.3_i686.tar.gz
binárka kompilovaná na Ubuntu 12.04, ale funguje i v 13.10, tudíž by měla fungovat i na všech ostatních, co mezitím vyšly.

Pokud máte již instalaci předchozí Pythonní verze 0.2.4, stačí tímto novým souborem indicator-nameday nahradit stejnojmenný soubor v /usr/bin/ a jediné co se změní bude méně sežrané paměti a lepší vyhledávání. Až dostuduju to ppa, bude snad repozitář pro všechny aktuální verze Ubuntu a tudíž i automatické aktualizace..


Stačí stáhnout, někam rozbalit a spustit.

S Adwaita vzhledem je okno o poznání atraktivnější na pohled...




10 komentářů:

  1. Pěkné, opravdu pěkné... Jak moc je složité protlačit takovou věc do USC?

    ps: Jedna technická, "Hledat datum" Ehmm... Nebylo by lepší "Hledat jméno"?

    OdpovědětVymazat
    Odpovědi
    1. Ještě jsem nic neprotlačoval, ale v zásadě se to opatří náležitostmi, vrazí ke schválení a počká se.. :)

      Vstupem je jméno a výstupem datum, to je hlavní poslání vyhledávacího okna. Pravdou je, že můžeš klidně hledat, která jména začínají "p" a končí na "a" ( ^p.*a$ ), ale to už je jen pro nadšence a výstup je omezen jen na dva výsledky ;)

      Vymazat
    2. Asi nejlépe by znělo "Hledat datum podle jména" Jenže to je moc dlouhé... Asi nejlepší by bylo to zkrátit na pouhé "Hledat..."

      Zkus to protlačit na USC, zajímalo by mě jestli to půjde... Udělal bych ti pak banner na forum.ubuntu.cz ;)
      Mohl by jsi pak napsat článek "Aneb jak jsem se tlačil do USC" :-D

      Vymazat
    3. Nechám to jak to je, logicky to sedí a kontext je zřejmý :) Přepsal jsem jen to vyhledávací okno. Jinak opět funguje otáčení kolečkem myši nad indikátorem pro procházení svátků po dnech, oproti Pythonní verzi, kde je nahlášená chyba v bindingu už zase rok.

      Podívám se na to a třeba se to tam i pošlu. Hlavně zkusím naplnit ten vlastní ppa, vytvořen je už roky, tak ho konečně zkusím použít. Teď když je to kompilovaný, bude to potřeba kompilovat pro různé verze systému.

      Vymazat
  2. Další update, přidal jsem akční kalendář - dá se do něj klikat pro zobrazení svátku na daný den a naopak ukazuje datum svátku nalezeného z vyhledávacího pole. V budoucnu to (snad) bude i upozorňovat na dny, které si označíte a případně i doplníte vlastním komentářem.

    Jinak Ubuntu 13.10 už nějakou dobu násilně zobrazuje ikonu (znázorňující, že není ikona) vedle jména, když žádnou nedostane, což mě pěkně štvere. Musí do toho prostě stále sahat a kurvit to.. :) Nakonec budu muset nějakou decentní ikonu vyrobit, napadlo mě ">", to zvládnu v inkscape i sám, upozorňovací bude červená a blikat :)

    OdpovědětVymazat
    Odpovědi
    1. Nechceš udělat alespoň PPA když už to nemáš v USC? Kdo má hlídat kdy ti vyjde nová verze. :-/
      Jinak je to parádní, už mi to zachránilo dvě jinak zapomenuté přání k svátku. :-)

      Vymazat
    2. Sorry nečetl jsem znovu co jsi tam dopisovala a že na PPA pracuješ... ;-)

      Vymazat
    3. O ppa jsem psal od začátku, vynasnažím se, aby to bylo co nejdřív, ale času je teď méně.

      Vymazat
  3. Ahoj,

    jak to vidíš s tím PPAčkem? ;) Tahle appka by si ho zasloužila.

    OdpovědětVymazat
    Odpovědi
    1. Hoj, máš recht, už bych se to měl konečně naučit, dělat balíky pro launchpad, tři roky je slušný zpoždění. Ale mě to nebavilo, přišlo mi to složitý :)

      Vymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.