neděle 11. května 2014

SGTimer - nejlepší automatický uspávač pecí již také v ppa

Když už jsem se kvůli vám naučil krmit ppa, nacpal jsem tam před pár dny i poslední SGTimer, který přepisuju do Vala. Má zatím funkční jen modul časovače, ale jinak umí všechno, co běžný uživatel využije, včetně ukládání presetů, které se dají spouštět přímo z launcheru přes Quicklist, rozšířených akcí pro spuštění příkazu, zobrazení zprávy/notifikace a přehrání zvuku, indikátor s možností zobrazovat zbývající čas v panelu, podrobně nastavitelný widget pro zobrazení téhož kdekoliv na obrazovce, ... I když je to polotovar, je to velmi použitelné. Ostatně co na linuxovém desktopu není polotovar, že? ...


Z původního Shutdown GTimer jsem již definitivně udělal SGTimer, takže se tak jmenuje i instalační balík. Stejnojmenný balík jsem nenšel ani mezi více než 252 tisíci, které registruje Ubuntu popularity contest, takže by to neměl být problém.

Balíky mám zatím jen pro Ubuntu 13.10 a 14.04, protože mi to trochu ulítlo a použil jsem z GTK novější věci, než jsou v Ubuntu 12.04. Asi to "opravím", přeci jen má stále podporu. Update: Vyměnil jsem nový dialog pro výběr barev Widgetu za starý a již je SGTimer v repozitáři i pro U12.04.

Instalace:


sudo add-apt-repository ppa:georgdh/gdh
sudo apt-get update
sudo apt-get install sgtimer

Je to ten samý repozitář, v jakém je svátkový indikátor.
Uživatelům starší Pythonní verze doporučuji nejprve její odinstalaci a smazání souboru
~/.sgtimer/presets.cfg
Nebo se na to vykašlat, protože poslední deb s Pythonní verzí 0.4.1 umí zatím víc. Co neumí, je využívat služeb systemd, takže potřebuje od Ubutnu 13.10 doinstalovat ConsoleKit a UPower. Ale pár vylepšení tu přeci jen je.

Zmínil bych následující vlastnosti:
  • Detekce služeb systému pro správu napájení a sezení podporuje i nejnovějšího správce systemd, netahá do systému staré věci.
  • Modul Timer nabízí možnost přímého zadávání času v hodinách a minutách jak pro trvání odpočtu, tak pro nastavení cílového času, z klávesnice:
    14:25 - nastavení cílového času
    -14:25 - nastavení trvání odpočtu
    Místo dvojtečky je možné použít čárku, nebo tečku, které jsou podle lokalizace na numerickém bloku klávesnice. Po stisknutí klávesy Enter je zadání přepočítáno na minuty a timer přenastaven. Další stisk Enteru již klasicky spouští odpočet k defaultní akci, kterou si můžete nastavit v menu Settings.
  • Rozsah Timeru je přesně týden (0-10080 minut ), myslím, že je to tak akorát pro tento typ aplikace.
  • Číslice do vstupního pole minut můžete psát i horní řadou kláves s českou diakritikou bez přepínání klávesnice, nebo držení Shiftu, SGTimer si české znaky přeloží na číslice sám.
  • Klávesy PgUp/PgDown ve vstupním poli minut nastavují čas po deseti minutách, šipky nahoru/dolu po minutách.
  • Vstupní pole pro zadání času vždy aktivujete zkratkou Alt+M. Přes Alt můžete aktivovat i další prvky okna, po stisku Altu se vám podtrhnou písmena v popiscích jednotlivých prvků.
  • Presety s nastavením celé aplikace si můžete ukládat pod libovolné názvy a při ukládání určit, zda se mají při načtení automaticky spustit s vybranou akcí.
  • Presety výchozího modulu Timer je možné ukládat ve třech formátech
    Duration (Trvání odpočtu) - nepotřebuje vysvětlovat
    Target time (Cílový čas) - uloží se cílový čas a po načtení presetu se timer přepočítá tak, aby skončil v daný čas v rámci jednoho dne
    Target time & day (Cílový čas a den) -k předchozímu uloží i den v týdnu, můžete mít tedy preset třeba na 9:50 ve čtvrtek.
  • SGTimer automaticky vytváří v $HOME adresáři uživatele spouštěč s Quicklistem se všemi uloženými presety. Z launcheru pak můžete přes pravé tlačítko spouštět rovnou konkrétní preset.
  • V menu presetů je i volba Last Setup, jejíž aktivace zajistí uložení nastavení při ukončení aplikace a obnoví ho po opětovném spuštění (pokud nebude spuštěn s jiným presetem). Zrovna tak si můžete klávesou Insert, nebo otočením kolečka myši, označit jako výchozí jakýkoli váš uložený preset, ten pak SGTimer načítá po startu, pokud jste ho nespustili s jiným třeba z quicklistu.
  • Uložené presety se dají mazat přímo z menu klávesou Delete.
  • Každá položka timeru, včetně dne v týdnu, se dá nastavovat otáčením kolečka myši a klikáním pravým/levým tlačítkem myši.
  • Extra rozšíření Sound, Message a Command jsou, po skončení odpočtu prováděny v pořadí, v jakém jste si je naklikali v menu Extras a při použití jakékoliv jiné akce, než Extras, se spouští sériově, tudíž každá aktivovaná Extra akce čeká na skončení té předchozí a hlavní akce se spustí až na konec. Samostatně, přes tlačítko akce Extras, se spouští na pozadí. Ale asi přidám časem volbu uživateli.
  • Procesy spuštěné pomocí rozšíření Command (v Bashi), jsou nezávislé na SGTimeru. Můžete ho nechat spustit aplikaci a rovnou se automaticky ukončit (zaškrtávátko Quit).
  • Zaškrtávátko Widget aktivuje mini okénko bez dekorace se zobrazením času Timeru, který můžete přetáhnout myší kamkoliv. Má menu na pravý klik, kde můžete změnit barvy pozadí i textu, včetně alfa kanálu (průhlednosti), písmo, dá se nastavit automatické schovávání po najetí myši s prodlevou půl sekundy, abyste měli čas volbu zase změnit. Do presetu se ukládá i pozice widgetu na obrazovce a to relativně, takže pokud pak preset spustíte na jiném monitoru, widget si podle rozlišení obrazovky spočítá pozici.
  • Rozšíření Sound pro přehrání zvuku nepoužívá oproti předchozím Python verzím externí aplikaci, ale využívá knihovnu gstreamer, přes kterou je schopno přehrát zvukovou stopu i z videosouborů. Hlasitost lze kdykoliv měnit otáčením kolečka nad tlačítkem Test, nastavení je lineární od 10 do 200 %.
  • Na žádost sachyho jsem dopsal i volbu Survive Reboot do nastavení Timeru, která zajistí automatické spuštění SGTimeru a pokračování odpočtu i po restartu systému, třeba v případě nějaké nepředvídatelné události, jaká se v poslední době stane třeba při restartování služby networking.
Spouštěč SGTimeru nastavuje proměnnou prostředí UBUNTU_MENUPROXY, aby zabránil ukradení menu z okna do panelu, nebo horní lišty okna, protože taková přenesená menu neumí zpět do aplikace posílat události z klávesnice a myši, čehož využívám především pro správu presetů. Je to sice nestandardní přístup, ale zobrazit kliknutím menu Presets, ukázat na položku a stisknout klávesu Delete pro smazání, nebo Insert, či otočit kolečkem myši, pro označení výchozí, je prostě pohodlné. Tento princip používám všude, kde má uživatel položky menu pod svou kontrolou. U každé takové položky se po najetí myši zobrazí tooltip, který napoví. Otáčení kolečka myši pro označování položek menu používám také všude, kde má smysl označovat položky bez zavření menu, jako to dělá klávesa Space. Každopádně to tak nebude fungovat po spuštění z terminálu přímo příkazem sgtimer.

A teď trochu vykecávání

Když jsem na Silvestra roku 2011 poslal přes Sourceforge do světa verzi 3.8, domákl se to nějaký bloger, od kterého to opsal tucet dalších (stahovali především Italové, Brazilci a Indonésané). Nebyly to většinou zrovna recenze, jako spíš info, ale občas někdo něco svého i přidal. Na jednom blogu modifikoval autor můj popis k aplikaci takto:

Shutdown gtimer is an advanced shutdown timer with simple GUI which makes operating easy even for children.

Od začátku jsem se snažil udělat aplikaci, která by užívání nekomplikovala, jako všechny ostatní, které jsou k tomuto účelu dostupné. Milión roletek, zaškrtávátek a nastavovátek a přitom neflexibilní, neumožňující kombinovat to, co umí, podle potřeby. Chtěl jsem něco, co bude extrémně rychlé a jednoduché na použití a přitom nebude trpět omezeními konkurence. Když mi Me-Tv mrvilo suspend systému, chtěl jsem mít možnost ho nejprve sestřelit a pak teprve suspendovat systém. Tedy v tomto případě je dodnes lepším řešením Me-Tv odinstalovat a zapomenout na něj, ale tehdy to pro mě aktuální bylo.

Začal jsem jedním vstupním polem pro zadání počtu minut a pár tlačítky pro spuštění odpočtu ke konkrétní akci, jako je vypnutí, uspání a restart systému. Pak jsem na to začal nabalovat další funkčnosti, ale s tím, že tenhle jednoduše ovladatelný základ tím nikdy nesmí být degradován, maximálně vylepšen. Spustit aplikaci, napsat číslo a stisknout Enter, nebo kliknout na jedno z tlačítek. Nic jednoduššího přeci není. Pokud tedy není k dispozici přednastavení, které to zařídí na jeden dva kliky myškou, což v SGTimeru samozřejmě nesmí chybět.

Chtěl jsem přímý přístup ke všemu najednou, ale nechtěl jsem překombinovanou šílenost, která akorát uživatele zmate. Zmíněná verze 0.3.8 ještě měla napevno přilepená pole pro zadání zprávy a příkazu, ale když jsem přidal další tři, muselo se to změnit. Rozhodl jsem se tedy, že extra akce budou sice přímo v okně, ale jen ty, které si uživatel nakliká v menu, když je potřebuje. Když nepotřebuje žádné, aplikace bude vypadat, jako by uměla jen ten základ. Vstupní pole a pár velkých tlačítek. Tenkrát jsem složitě vypočítával velikost okna po přidání a ubrání rozšíření a ladil to pro konkrétní témata vzhledu. Šlo to jednodušeji, ostatně jako skoro všechno, s čím jsem kdysi zápasil a snažil se všemožně obcházet.

Začalo to tedy celé skriptem v Bashi, pak jsem se kvůli tomu začal učit Python 2 a GTK+ 2, protože se mi to zdálo jako nejjednodušší cesta ke GUI, později jsem přešel na GTK+ 3, vzápětí kód přepsal tak, aby fungoval jak v interpretu Pythonu 2, tak 3, pak jsem se vykašlal na Python 2, protože to znamenalo zbavit se fůry komplikací s UTF-8, pak jsem to mimo záznam (necomitoval na SF) přepisoval do objektovější podoby, aby to nebyl takový bastl a minulý rok jsem narazil na jazyk Vala, zahodil celý Python a začal od začátku znova.

SGTimer byl schopnostmi na vrcholu v polovině roku 2012 ve verzi 0.4.1, kterou jsem na podzim ubalil jako betu s tím, že dodělám překlad a vydám plnou. Nakonec jsem to nechal ležet a začal znovu.

Prý jsem puntičkář, měl jsem uživatelsky skoro dokonalou aplikaci a jen kvůli tomu, že se mi nelíbilo jak je napsaná a že žere třikrát tolik RAM, než je potřeba, jsem to zahodil a začal psát znovu. Většině uživatelů je to přeci naprosto u řiti. Jenže mně ne a díky tomu jsem se něco nového naučil a baví mě to víc. Python není špatný jazyk, ale to máte jako když si na zrcadlovku nasadíte univerzální zoom objektiv s velkým rozsahem ohnisek, nebo pevné sklo, ale s lepší světelností a kontrastem. Občas si musím popojít, ale výsledek je lepší.

SGTimer v ppa, v tuto chvíli ve verzi 0.6.4, umí polovinu toho, co ve verzi 0.4.1, ale to je pravděpodobně cca 98% toho, co je skutečně relevantní pro většinu uživatelů, včetně mě. I tak mám furt ambice pokrýt co se dá i v tom zbytku. Ale motivace je slabší, rozhodně se ozvěte, když budete mít nějaký návrh. Když mi to bude dávat smysl a nebude to nemožné, máte relativně vysokou pravděpodobnost, že vám to napíšu a uspíšíte vývoj, neb mi dáte motivaci.


Na následujícím screenshotu je SGTimer ve společnosti nejoblíbenějších aplikací podobného zaměření:



Taková Sentinella má krom časovače další čtyři moduly, kterými je možné podmínit provedení nějaké akce. Můžete použít i limit provozu na síti, nebo využití RAM. Víc než jen časovač má i KShutdown, který umí čekat na ukončení procesu, nebo uživatelovu neaktivitu, jako jediný nabízí i nějaké ukládání presetů, říká tomu podivně bookmarks. Poslední SGTimer má pro další moduly připraven jednotný interface, v bližší době snad dopíšu modul WFT, který umí spouštět akce po ukončení procesů, či oken.

Jinak je většina těch aplikací napsána v Qt, takže místo stokilové aplikace si do systému můžete natahat pomalu 200MB. Na GTK je založen pouze extrémě neudržovaný polofunkční GShutdown, i když na starémm GTK 2. Polofunkční proto, že už je to opravdu mnoho let, kdy naposledy bez pomoci vypnul systém, místo toho už jen odhlašuje sezení. Plusem je jen to, že mu můžete pro jednotlivé akce definovat vlastní příkazy, čímž se dá zprovoznit.

Už bych měl přestat pindat ...

Automatické vypnutí systému po nastavené době, je stále jedním z nevyhledávanějších témat přes která se uživatelé na tento blog dostanou z googlu, i seznamu, takže nějaký potenciál toto téma má. Na druhou stranu, když se podívám na statistiky využívání tohoto typu aplikací na Ubuntu popcontest, vidím, že je má nainstalováno relativně dost lidí, ale daleko méně jich je častěji používá. Tyto statistiky zahrnují pouze uživatele, kteří si v Software Centeru povolili šmírování systému, takže reálná čísla jsou asi výrazně vyšší, každopádně je z toho vidět, že pokud někdo nabídne něco tak jednoduchého, jako je easyshutdown a opečou to nejnavštěvovanější blogy věnující se Ubuntu, začnou to lidi používat, i když to není v oficiálním repozitáři a je to dnes již tři roky neudržovaná aplikace. SGTimer ho hravě nahradí, protože jedinou předností ES je spouštění odpočtu z Quicklistu, což umí ještě lépe.

Následující tabulka ukazuje nejpoužívanější (podle toho, co jsem dohledal) aplikace podobného zaměření, jako SGTimer v Ubuntu Popularity Contest. První číslo je pořadí podle počtu instalací, druhé (za názvem balíku) počet instalací, třetí počet uživatelů, kteří aplikaci častěji využívají, předposlední je počet nedávno aktualizovaných na vyšší verzi.

8012  gshutdown         31755    86 31618    30    21
13191 kshutdown         10109    92  9987    26     4
22279 qshutdown          2706   132  2559    10     5
26410 sentinella         1725    40  1679     5     1
34313 shutdown-at-night   807    32   764     0    11
34775 easyshutdown        773    27   746     0     0
51177 complexshutdown     228     3   225     0     0
55054 shutdown-gtimer     175     4   170     1     0


Tož asi tak nějak. Nebo nějak podobně. Nechlubil jsem se moc? Ne, to určitě ne.


1 komentář:

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.