Blog

// Sending daily digest emails from Wunderlist

For some time, I am using Wunderlist as my to-do task manager (yup, I am surfing on GTD wave now). In some aspects, it is superior to its biggest competitor, Todoist (at least it has notifications for free and cleaner design). One feature I am missing the most is some kind of automatic daily digest sent to my email address every morning (and evening).

Fortunately, they have published their API some time ago. This allows 3rd party application to access and manage the whole content of user's profile.

I wrote simple script which grabs all unfinished tasks via API and sends an email with daily overview. I call it Wudd. I do not offer it as a service (yet?) so everyone has to deploy it on their own machine (See README file).

Main features:

  • 3 sections: Today tasks, unsorted (inbox) tasks without a date, tasks to be finished in 7 days. Generic definition structure allows to add another sections easily.
  • Both HTML and plaintext version for people who remember 90's.
  • Quick summary in subject.
  • Currently it uses Czech locale but it's easy to modify it (few strings only). I18n not supported yet.
  • Sends email via local SMTP (authorization & SSL support not supported yet).

Visit my Bitbucket repo to download Wudd. Also, you can post issues there. Enjoy!

// Compiling UI and resource files with PyQt

PyQt is a python binding for popular Qt library (which became LGPLed for non-commercial purposes recently). If you use Qt Designer, you have to compile XML description of UI or Qt resource files to Python code to use them in your application.

In C++, you can easily use qmake tool or Automake for creating suitable Makefile. For Python, there is no Makefile needed since Python compiles modules as they are loaded into VM. With PyQt, you can use uic module for compiling ui files or loading them as a Python class.

Alternatively, you can use pyuic4 and pyrcc4 command line tools in the similar way as appropriate Qt tools (uic, rcc). I'm using this way to produce Python code. Both tools have similar usage:

#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

Formerly, I had one shell script to compile all my resource files in project at once (because I was too lazy). This solution has two main disadvantages. At first, compilation of all resources takes more time than compiling of modified files only. This varies with amount of resource files your project has. The second one is more annoying to me. Since I also track compiled versions of UI and resource files (for no particular reason yet) with Mercurial, it always creates new changeset because pyuic4 tool adds information about compile time to Python code comments. So I refreshed my Makefile knowledge (and also used some old code snippets) and created following Makefile for compiling UI and resource files separately.

###### 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)  

It works with GNU Make (from Cygwin or MigGW on Windows). It compiles files in following manner:

  • window.ui –> ui_window.py (GUI definition)
  • images.qrc –> images_rc.py (resources)

Now you can easily compile only modified files by only typing make in console. Make sure that your current working directory contains Makefile shown above.

About me
SW developer, amateur tennis player, rock'n'roll & heavy metal fan.