My previous job was maintaining the zfcp device driver in the Linux kernel. Among cleaning up the code, implementing new features and answering support requests, i also gave presentations about using SCSI attachment with the s390 platform. Here are a few links to the publicly available slides and recordings:
- SCSI over FCP for Linux on System z – Introduction and New Features (SHARE 111, San Jose, California, August 2008)
- Additional Feet for the Penguin – SCSI over FCP, Multipathing for Linux on System z (SHARE 111, San Jose, California, August 2008)
- Introduction to SCSI over FCP for Linux on System z (Webcast, October 2010)
The team authoring the Performance Measurement and Tuning Redbook kindly thanked me for contributing. While working in this position, i also co-authored the article IBM zEnterprise storage I/O advancements in the IBM Journal of Research and Development.
Being interested in technology and having played with voice over IP before, i came across the Disruptive Telephony blog. The article “Slides: How The Hidden Secret of TCP/IP Affects Real-time Communications” references the presentation “The hidden secret of TCP/IP and the internet” which raises an important point: TCP/IP and the internet enable communication from anywhere to anywhere. But the reality is that communication is divided in islands, each controlled by a different company. Communication between the islands is almost impossible. Maybe it is time to demand more interoperable solutions. The presentation focuses on telephony, but the same is true for other aspects like social networking.
script is a useful command for quickly capturing a terminal session, as i just learned here:
$ script test.log Script started, file is test.log $ mkdir x $ ls x/ $ exit exit Script done, file is test.log $ cat test.log Script started on Wed 03 Aug 2011 02:33:36 PM MST $ mkdir x $ ls x/ $ exit exit Script done on Wed 03 Aug 2011 02:33:41 PM MST
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.
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:
#!/usr/bin/python # 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 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # 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 http://www.gnu.org/licenses/. # This script parses the output of 'google contacts list' # (http://code.google.com/p/googlecl/wiki/ExampleScripts#list) and # prints the queried email address in the format required by mutt # (http://www.mutt.org/doc/manual/manual-4.html#ss4.5). # # Usage: Install googlecl from # http://code.google.com/p/googlecl/downloads/list 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 sys.exit(1) 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' sys.exit(2) 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 else: # with only one address, there is no type field print email + '\t' + name