30. December 2015

PF 2016

This year I have another special game for you as Pour Felicitér card.

Go to: http://www.ysofters.com/pf2016/

PF 2016 Puzzle Game

You can enjoy PF games from previous years: PF 2015, PF 2014, PF 2013,PF 2012,PF 2011, PF 2010

14. December 2015

Slides from talk at FI MUNI: C++ and Software Engineering 2015

Slides available in formats: PDFSlideShare

Source code: GitHub/ysoftdevs/cpp-examples

9. December 2015

Thunderbird and Outlook solution of problem with Courier IMAP sslv3 alert illegal parameter

E-mail clients like Thunderbird or Outlook stopped to communicate with Courier IMAP/SMTP/POP TLS after some upgrade.

The only clue in log file was this error message:

courier couriertls: accept: error:14094417:SSL routines:ssl3_read_bytes:sslv3 alert illegal parameter

The problem was that certificate for IMAP (/etc/courier/imapd.pem) and /etc/courier/dhparam.pem were containing too short key. The short key was sufficient in past for encrypted communication. Unfortunately maintainers of Debian package forgot to add fix for upgrade.

It is very simple to fix the issue. Just generate DH with sufficient length.

DH_BITS=2048 mkdhparams

This command will update /etc/courier/dhparm.pem.

Make sure to update all pem files in case that they contain DH record.

Restart services and clients should be able to reconnect without problem.

If you still experience some issues with PEM files check out article PEM routines:PEM_read_bio:no start line.

24. May 2015

How to revert no-site-packages for virtualenv on Windows with Python 3.4

Python has support for virtual environment. It’s very handy to set up isolated space where you can store specific packages for the project. You can use command virtualenv to create virtual environment.

It’s very common to add option --no-site-packages which will isolate environment from packages installed in system.

Sometimes it is necessary to revert this option.

Linux and Mac users can control it by mechanism based on one file:


When this file exists Python is ignoring packages from system.

In case of Windows there is configuration file stored in venv/pyenv.cfg and you can change configuration of global packages:

home = c:\Python34
include-system-site-packages = true
version = 3.4.3

Change the configuration and call Scripts\Activate.ps1 to load Python virtualenv to PowerShell.

23. May 2015

Flask OAuthlib Multiple Scope Values for calling Google API

Google provides myriad of APIs for invoking operations on Google App Platform. It’s possible to integrate this calls with custom app using OAuth.

One option is to write app based on Flask (Python Microframework) with OAuth support provided by Flask-OAuthlib.

There is simple example of web app in Lepture’s repo.

The key practice in OAuth world is to get user’s consent to access API on her/his behalf. Often implemented by simple consent screen.


You need to perform two steps to display consent screen:

  • enable API in Developer Console
  • define scope in your application

The second step is straightdorward:

google = oauth.remote_app(
        'scope': 'https://www.googleapis.com/auth/userinfo.email'

It works perfectly. The only problem is that this solution provides access just to one API.

The question is: How to request access to multiple scopes?

You can find many hints about OAtuh for other frameworks, that you should separate scopes by comma. That won’t work.

Correct solution is to use white space as delimiter of scopes (as suggested for HTML forms).

google = oauth.remote_app(
        'scope': 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar.readonly https://www.googleapis.com/auth/tasks'

9. May 2015

How to decode stereogram by GIMP

Sometime ago I wrote article How to decode stereogram by Photoshop.

I made small experiment and it’s possible to achieve similar results by GIMP.

Here is stereogram (Magic Eye Picture) created by Easy stereogram builder.


Open file in GIMP. Duplicate the layer.


Change layer mode to Difference.


Select Move tool from GIMP toolbox (M).


Start moving the layer to the right. You can use arrows to move the layer. If you prefer mouse then click, press and hold CTRL key to avoid shifting in both X and Y axes.

Here is the result:



6. May 2015

OpenRefine date conversions

One of common tasks for OpenRefine is conversion of dates from String.
Conversion could be performed by toDate function.

Source data:

11-04-15 9:28
12-04-15 8:56

Open Edit cell – Transform for the column and type following GREL:

value.toDate("dd-MM-yy h:mm")

Result (in Date format):


Another example. Source data

11/04/2015 09:28:25
13/04/2015 08:56:57


toDate(value, "dd/MM/yyyy hh:mm:ss")

5. May 2015

C language in our world 2015 – slides

Slides available in formats: PDFSlideShare

Source code: GitHub/ysoftdevs/cpp-examples

30. December 2014

PF 2015

This year I have another special game for you as Pour Felicitér card.

Go to: http://www.ysofters.com/pf2015/


You can enjoy PF games from previous years: PF 2014, PF 2013,PF 2012,PF 2011, PF 2010

8. December 2014

C++ in our world 2014 – slides

Slides available in formats: PDFSlideShare

Source code: GitHub/ysoftdevs/cpp-examples

  • Where’s the fish?

  • Further info

  • Twitter

    Follow @jurajmichalek on twitter.

  • Babel fish

      Translate from:

      Translate to:

  • Tags

  • Topics

  • Comments