PyInstaller and Selenium

I was working on a small desktop application a while ago to automate a few tasks using web browser. I chose to go with Python, Selenium for browser interaction, pyquery to work with the data, and use PyInstaller to build a standalone executable so end user won't have to have Python installed.

I called PyInstaller to build the application:


Programming is a creative and challenging process, and this makes it interesting. There is so much to learn and there is so much to do. But this is common to get lost in this ocean and forget what was the original destination. Software programs exist to solve problems and empower ideas. Easing communications and sharing knowledge, helps to spread the ideas so people would have the chance to add up to them.


Mini PyCon MY 2014

We had a great time at Mini PyCon MY this March. Here are the slides from my talk about concurrency in Python.


Graphite is an open source project to collect and graph data that changes over time. It contains three components: a network server to receive the data, a special data storage format, and a web interface to show graphs. Graphite is developed in Python programming language and is designed to be scalable and to handle high volume data.



This guide sets up a solution using statsd to collect detailed statistics from a system. For an introduction to the concept, please read "measurement with statsd". The process is to send data from within the application to statsd server. Statsd server sends data to Graphite for storage and visualization.

Measurement with statsd

Developing and maintaining any system requires many decisions about what to do, where to invest time and energy to get the maximum benefits fast. To make correct decisions accurate information is required. It is not a valid argument (although might be common) to say "I feel our DB interaction is slow, lets optimize our data access layer", or "To make our website super fast, I think we should start using CDN services". These decisions could improve performance for sure, but they might not be the best places to start. There is a difference between "feeling" and "actually knowing" something.


Ntop Service On CentOS

We needed a network analysis tool and decided to use ntop. Official ntop website provides binary packages for Ubuntu and CentOS.

Ubuntu has an official package for ntop but the package is version 3 and we preferred to use the latest version, so package repositories were no good for us.

We set up a CentOS 6 server and installed ntop rpm package. But the package did not include an init script. Here is an init script to start/stop ntop in CentOS:


Courier IMAP error: filesystem notification initialization

After configuring a Courier mail server on Debain squeeze, I got this error on my mail client:

Filesystem notification initialization error — contact your mail administrator (check for configuration errors with the FAM/Gamin library)

The problem is related to libfam0. FAM is a service for system processes that need to watch file system alternations. Courier uses this library to update IMAP clients on folder status updates.


Malware advertised as a networking utility on behalf of ISPs

Recently I received reports regarding an email advertising a network utility developed by ParsOnline to help the customers monitor their accounts and usage. The email had a link to ZIP file on a file sharing web site. I downloaded the file and inspected its contents. It was a malware that installed a keylogger on the victim's machine. The keylogger would capture every keystroke of the user and took screenshots of the desktop every often, then send them to a gmail account.

The ZIP file contained 2 files:

Subscribe to Farzad Ghanei RSS