Archive for the ‘programming’ Category

hamfax 0.6.5

June 17, 2011 Leave a comment

After a very long time, i managed to update the hamfax project and create a new release, version 0.6.5. Hopefully, i will find more time to work on the backlog of requests and things that should be done. If you want to contribute, there is a mailing list and the public code repository.

Categories: Linux, programming Tags:

Using googlecl to query google contacts from mutt

June 7, 2011 5 comments

googlecl is a neat tool for accessing the Google Contacts address book from the command line. mutt is a powerful email client that allows calling external tools for accessing an address book. Unfortunately, the output from googlecl is different from the input required by mutt. Here is a simple script that wraps googlecl to be used from mutt. Simply put the code in a file mutt-google-contacts and make it executable. Then call it from mutt by adding this to the ~/.muttrc file:

set query_command = "mutt-google-contacts '%s'"

Here is the script:


# Version 0.1 Copyright (C) 2011 Christof Schmitt
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see

# This script parses the output of 'google contacts list'
# ( and
# prints the queried email address in the format required by mutt
# (
# Usage: Install googlecl from
# and add
# set query_command = "mutt-google-contacts '%s'"
# to ~/.muttrc

import subprocess
import string
import sys

if not len(sys.argv) >= 2:
    print 'Usage: %s querystring' % sys.argv[0]

sys.stdout.write('Calling "google contacts list": ')

query = ' '.join(sys.argv[1:])
args = ['/usr/bin/google', 'contacts', 'list', '--title', '(?i).*' + query,
        '--fields', 'name,email', '--delimiter=;']

google = subprocess.Popen(args, stdout=subprocess.PIPE)
stdout, stderr = google.communicate()

if google.returncode != 0:
    print 'error'

print 'success'

for line in stdout.split('\n'):
    if len(line) > 0:
        name, emails = line.split(';')
        for email in emails.split(', '):
            if string.find(email, ' ') != -1:
                # with two or more addresses there is an additional
                # type (home, work, ...)
                typeoraddr, emailaddr = string.split(email, ' ')
                print emailaddr + '\t' + name + '\t' + typeoraddr
                # with only one address, there is no type field
                print email + '\t' + name
Categories: programming Tags: , ,

Perl Programming Best Practices LCA 2011

February 6, 2011 Leave a comment

The first videos are available online. From watching the talk Perl Programming Best Practices, here are some modules and suggestions mentioned in the talk as notes to myself:

  • Always add use strict and use warnings.
  • use autodie allows omitting the or die statements for catching errors.
  • given/when is analogous to switch/case in other languages.
  • say prints a line while automatically adding the newline.
  • Try::Tiny is a CPAN module for try/catch style exception handling.
  • carp and croak should be used to report errors in modules. It is more useful to see where wrong data was passed to the module function, than the exact place where the module called die.
  • App::perlbrew allows installing perl in the home directory.
  • local::lib helps installing perl modules in local directories.
  • Test::More is a module for running tests.
  • Devel::Cover can be used to measure the code coverage.
  • Perltidy reformats perl code to make it easier to read.
  • List::Util has some helper functions for lists (e.g. max, min, sum)
  • Named captures in regular expressions allow using named variables instead of $1, $2, … to extract parts of the original string.

This list is incomplete, and i would highly recommend watching the talk to see everything mentioned there.

Categories: programming Tags:

C programming language most popular

April 22, 2010 Leave a comment

Good news for C programmers: The April 2010 update of the TIOBE index shows that C is the most popular programming language. With about 18% it is close to Java, but 0.007% ahead. Of course, there is criticism of how to measure language popularity, and there are other methods as well. But it is good to know that doing low-level work in C is staying on the popular and important side of software development.

Categories: programming Tags:

Coding in C song

March 14, 2010 Leave a comment

This is a funny song for everybody writing C code:

Categories: programming Tags: , ,