Zápisník

// Odesílání denních přehledů ze služby Wunderlist emailem

Nějakou dobu používám jako úkolovníček službu Wunderlist (yup, taky jedu na GTD vlně). V některých aspektech předčí svého největšího konkurenta, Todoist (minimálně má notifikace v tarifu zadarmo a trošku přehlednější design). Jedinou věcí, která mi opravdu chybí, je automaticky zasílaný denní přehled (což prý Todoist má).

Naštěstí před nějakou dobou Wunderlist uvolnil API, které umožňuje aplikacím třetích stran přístupovat a spravovat obsah uživatelského profilu.

Napsal jsem si jednoduchý skript, který ze služby stáhne nedokončené úkoly a pošle email s denním přehledem. Nazval jsem jej Wudd. Nenabízím jej jako online službu (zatím?), každý si jej musí rozchodit na svém stroji (viz soubor README).

Hlavní vlastnosti:

  • 3 sekce: Dnešní úkoly, nezatříděné úkoly v inboxu bez data splnění, úkoly s datem splnění v příštích 7 dnech. Generická struktura s lambda podmínkami dovoluje snadno definovat další sekce.
  • HTML i plaintextová verze emailu.
  • Stručný souhrn v předmětu zprávy.
  • V současnosti je výpis v češtině. I18n zatím není podporováno.
  • Odešle email přes lokální SMTP server (autorizace & SSL zatím není podporováno).

Pro stažení navštivte moje Bitbucket repo. Na stejném místě lze hlásit chyby. Enjoy!

// Překlad UI a resource souborů v PyQt

PyQt je knihovna pro integraci populární knihovny Qt (u které byla nedávno změněna open-source licence z GPL na LGPL) do Pythonu. Pokud používáte nástroj Qt Designer na návrh uživatelského rozhraní, potřebujete následně přeložit XML popis UI a resourců do kódu pro Python, abyste jej mohli použít.

V C++ variantě Qt je možno jednoduše použít nástroj qmake nebo Automake pro vygenerování příslušného Makefile, který se o překlad do C++ postará. V případě Pythonu není standardně Makefile potřeba, jelikož se moduly kompilují samy při jejich zavádění. S PyQt můžete použít modul uic a XML soubory zkompilovat, nebo je přímo nahrát jako třídy Pythonu.

Alternativně lze použít nástroje do příkazové řádky pyuic4 and pyrcc4 úplně stejně jako jejich originály z knihovny Qt (uic, rcc). Pro své projekty jsem si zvolil tento způsob. Použití nástrojů je jednoduché. Stačí napsat, že chceme přeložit soubor A na soubor B. Příklad následuje.

#compile ui file from Qt Designer
pyuic4 ui_file.ui -o compiled_ui_file.py
#compile resource file (icons, etc..)
pyrcc4 resource_file.qrc -o compiled_resource_file.py

Původně jsem měl jeden jediný shellový skript, který vždy kompiloval všechny soubory najednou (byl jsem příliš líný). Tohle řešení mělo dvě výrazné nevýhody. Jednak kompilace všech souborů sežere nějaký čas, takže tato vlastnost představuje problém v závislosti na množství překládaných resource souborů. Za druhé, a to je pro mě otravnější vlastnost, generátor pyuic4 v hlavičkách vygenerovaného kódu zanechá aktuální čas a datum. Jelikož ze zatím neznámého důvodu uchovávám v Mercurialu i zkompilované verze UI, způsobovalo to pokaždé změnu všech zkompilovaných souboru. Takže jsem osvěžil svoje chabé znalosti tvorby Makefile (a použil taháky z dob minulých) a vytvořil jsem si Makefile pro separátní kompilaci resource souborů.

###### EDIT ##################### 
#Directory with ui and resource files
RESOURCE_DIR = src/resources
 
#Directory for compiled resources
COMPILED_DIR = src/ui
 
#UI files to compile
UI_FILES = confirm.ui main.ui repair.ui settings.ui statistics.ui
#Qt resource files to compile
RESOURCES = images.qrc 
 
#pyuic4 and pyrcc4 binaries
PYUIC = pyuic4.bat
PYRCC = pyrcc4
 
#################################
# DO NOT EDIT FOLLOWING
 
COMPILED_UI = $(UI_FILES:%.ui=$(COMPILED_DIR)/ui_%.py)
COMPILED_RESOURCES = $(RESOURCES:%.qrc=$(COMPILED_DIR)/%_rc.py)
 
all : resources ui 
 
resources : $(COMPILED_RESOURCES) 
 
ui : $(COMPILED_UI)
 
$(COMPILED_DIR)/ui_%.py : $(RESOURCE_DIR)/%.ui
	$(PYUIC) $< -o $@
 
$(COMPILED_DIR)/%_rc.py : $(RESOURCE_DIR)/%.qrc
	$(PYRCC) $< -o $@
 
clean : 
	$(RM) $(COMPILED_UI) $(COMPILED_RESOURCES) $(COMPILED_UI:.py=.pyc) $(COMPILED_RESOURCES:.py=.pyc)  

Funguje s GNU Make (na Windows například v Cygwinu nebo MinGW). Je potřeba poeditovat horní řádky souboru, především upravit cesty k souborům a jejich seznam. Skript překládá soubory následovně (příklad):

  • okno.ui –> ui_okno.py (definice GUI)
  • obrazky.qrc –> obrazky_rc.py (resources)

Teď se kompilují už jen ty změněné, stačí napsat make do konzole. Samozřejmě v pracovním adresáři shodným s umístěním Makefile souboru.

O mně
SW developer, amateur tennis player, rock'n'roll & heavy metal fan.