SoftwareProjects

From HerzbubeWiki
Jump to: navigation, search

Overview

This page is an informal list of software projects that keep me busy at the moment, have interested me in the past, or might come up in the future.

For things that have produced a useful result in the past, I keep a more robust "software projects" page on my main web site: http://www.herzbube.ch/software.

I am also the maintainer of a couple of packages in the Fink project. See this wiki page for details.


Links

Bugtracker 
http://www.herzbube.ch/bugzilla3/
gitweb 
http://git.herzbube.ch/gitweb.cgi
git-over-http 
http://git.herzbube.ch/


Current Projects

Projects listed in this section are more or less actively developed by me. For each project I try to state some goals. These statement are intended to help me planning how I should distribute my free time between projects.


python-aprmd5

Purpose: Python interface to the MD5 routines of the Apache Portable Runtime Utility Library (libaprutil). The main purpose of python-aprmd5 is to expose a single function, apr_md5_encode(), from among libaprutil's MD5 routines. That function is used to generate salted crypt-style hashes using a version of the MD5 hash algorithm that was modified for Apache.


Technical challenges / learning goals:

  • learn how to implement a Python module that is an extension written in C


Motivation: I wanted to include Apache's MD5-based hash algorithm in my mkroesti project, but couldn't find any Python module that already did this for me. I decided to develop my own Python module, but instead of re-implementing the algorithm (which would have allowed the module to be written in Python) I wanted to re-use the algorithm implementation from libaprutil. All in all another small project that would keep me focused on a single objective.


Project state:

  • It works (tm)
  • I personally believe the module is stable, but officially (on PyPi) it is still marked as Beta
  • Needs a bit of work so that it automatically builds on different platforms


mkroesti

Purpose: Command line and web tool that is able to generate a wide array of cryptographic (and other) hashes from a given input.


Technical challenges / learning goals:

  • learn to program with Python
  • learn how to use a Python program as CGI script
  • learn about cryptographic hashes


Motivation: During my effort to integrate Samba with LDAP, I found that Samba wants to store a user's password twice in the LDAP directory: the NT password hash and the LM password hash. I was looking for information on how to generate these two kinds of hashes, but found no readily available tool. It occurred to me that it would make a nice little and focused project to create a command line tool that would be able to generate a wide array of hashes from a given input, including of course NT and LM password hashes.


Why "mkroesti"? Well, this is just another convoluted pun made up by a programmer with a weird sense of humor. This is an attempt at decryption :-)

  • "roesti" is transcribed from "Rösti", which contains the German umlaut "ö" (ö as an HTML entity reference)
  • Rösti is a potato dish from Switzerland. I associate Rösti with the English translation "hash browns", therefore, "make hashes" for me is "make rösti" :-)
  • so it all boils down to saying "make hashes"


doxystub

Purpose: Eclipse plugin that generates Doxygen comment stubs.


Technical challenges / learning goals:

  • Learn to use Eclipse
  • Learn Java
  • Learn about OSGi
  • Learn to write an Eclipse plugin
  • Learn to use SWT + various Eclipse APIs


Project state:

  • It works on a very basic, proof-of-concept level
  • UI issues need to be addressed immediately for the next release (also on the Preferences page)
  • Should integrate with eclox
  • regexp approach should be replaced with a more intelligent, parser-based approach


dgsmonX

Purpose: A Mac OS X utility to monitor Dragon Go Server (DGS) game states.


Technical challenges / learning goals:

  • Writing a "faceless" application ("user agent" in more modern terms)
  • Learn to use "Cocoa Bindings"
  • Learn to use NSConnection to communicate between threads
  • Learn to use the "URL Loading System"


Motivation: For a very short time I was trying to play Go over the Internet. I found the Dragon Go Server, and saw on Sensei's Library that there were several tools capable of monitoring the state of a player's games on DGS, but none of them was a Mac OS X tool. dgsmonX was born.


Project state:

  • It works (tm)
  • But it still requires substantial work to make it more usable


AceXpander

Purpose: A Mac OS X graphical user interface to the unace command line utility.


Technical challenges / learning goals:

  • First Cocoa project (initially Cocoa/Java)
  • Learn Objective-C
  • Learn about basic threading issues


Motivation: When I was unable to get at the files inside an .ace archive on my Mac, and I could not find any utility that would do the job for me, I decided to do something about it. I contacted Marcel Lemke, the developer of the .ace format on Windows, who then referred me to Kolja Koischwitz who at the time was porting the unace command line utility to the Mac. AceXpander grew as a GUI front-end around this command line utility.


Project state:

  • The program is almost feature complete
  • I consider the program to be usable and stable
  • The main danger for the future is that the unace command line utility wrapped by AceXpander is compiled for PowerPC. So far, it has still been working thanks to Apple's Rosetta technology, but Rosetta will be disabled by default on Mac systems starting with Mac OS X 10.6. On 10.6 users can still enable Rosetta on a case-by-case basis, but I fear that at some time in the future, Rosetta will disappear entirely. See Bugzilla issue 73.


Aqua Crystal Ball

Purpose: A plugin script for the Gimp that can be used to create Mac OS X icons with a (surprise!) "Aqua Crystal Ball" effect.

Technical challenges / learning goals:

  • Learn how to write plugins for the Gimp


Project state:

  • The plugin is feature complete
  • I maintain the project so that the plugin keeps working with newer versions of the Gimp


Old projects

Projects listed in this section are no longer actively developed by me. If a project is listed here, it does not necessarily follow that the software resulting from the project is defunct. The only conclusion is that I no longer spend my time actively on the project at the moment.


NDS-I

Purpose: Extend an existing unit testing framework so that it gets possible to generate POSIX compliant test reports.

The project came about as the final paper for some kind of "master of advanced studies" degree (NDS-I = "Nachdiplomstudium in Informatik"). The unit testing framework was being used by the company that I was working for at the time of writing the final paper. I have no idea whether or not my employer actually started using the framework modifications I did for my paper. I myself have never used the framework at all.


Project ideas / Future Projects

This section lists ideas for new projects.


Convert the image of a Go board into an .sgf file

Imagine you have an interesting game of Go going on, and suddenly you need to clear the board for some reason. Probably the quickest way how you can save the state of the game is by taking a picture of the board, possibly using the iPhone you might happen to carry around with you. Now, digital images are not exactly the most efficient way for storing the state of a game of Go:

  • Depending on the file format and the resolution you used for taking the picture, the size of the image file might be quite large.
  • Also, you can't do much with the image except looking at it (which is fine if all you want to do is recreate the game situation on a physical board)


Enter a nice and friendly helper application that is capable of analyzing the image and creating an .sgf file for further useful processing. I can imagine a few additional features, but the conversion functionality should remain the core purpose of the software.


Challenges:

  • Analysis of image data (if possible some sort of library should be used for this)
  • Do the job without human interaction, i.e. the user should not need to specify stuff like "where are the corners", or "what is the stone radius"
  • Make the converter a library that is reusable and platform independent, i.e. this probably should be written in C/C++


Notes:

  • Create both an iPhone app and a regular Mac OS X application that use the core library
  • photo2sgf or something like this might be a good name


Other software already solving the problem:


iPhone game and Games framework

Purpose: Implement an iPhone game based on a Games framework.


Motivation:

  • Framework development is cool
  • Game development hopefully is fun
  • Developing with a friend is definitely fun!
  • Good opportunity for getting to know the iPhone development environment
  • Possible business opportunity


Managing image metadata

When I return from a holiday or vacation I usually bring home some digital pictures that I would like to label with metadata to help my own memories in the future, but also to help other people understand what they see when they look at my pictures in a photo gallery.

Unfortunately I use my digital pictures in 2 different applications:

  • iPhoto to collect and organize the pictures
  • Gallery2 to share the pictures on the Web

Of course, iPhoto and Gallery2 do not exchange image metadata kept in their own format very well. Placing the metadata inside the image files through the EXIF and/or IPCT metadata also does not work since the EXIF/IPCT metadata is not sufficient to store everything that I like. In addition, the two programs interprete EXIF/IPCT metadata differently, and iPhoto even destroys the data when it saves a modified version of the image.

This project should somehow find a solution that allows to store image metadata (esp. title, short description, long description, both in German and in English) and apply it in a way that lets different applications (esp. iPhoto and Gallery2) evaluate the data in the way that they like. A possible way:

  • Store the metadata in a database or some such container
  • Write plugins for iPhoto and Gallery2, respectively; each plugin knows how to retrieve the metadata and apply it in a way that is suitable for its respective application


Yet Another Snake Game

A learning project. Goals:

  • Hone my C++ skills
  • Write software that is driven by an engine and can have different front-ends (console, GUI)
  • Write software that uses AI techniques
  • Possibly integrate multiple programming languages in one project

Why a Snake game? Games are fun! Also, the idea is a follow-up to old, old times, when I was a teenager and tried to write a Snake game on the C64 in order to learn the computer's assembly language.


GUI to combine cmdline tools

Write a graphical front-end that lets the user combine command line tools. Inspiration is the MediaPipe project (apparently dead now).

Some ideas:

  • Based on the pipe mechanism
  • Not restricted to the pipe mechanism, i.e. it should be possible to chain tools whose output does not go into a pipe (e.g. produce/consume a file)
  • Tools are represented by plugins
  • Where possible the GUI front-end should offer a live preview so that the command chain can be tested

The software is intended to be general-purpose (unlike e.g. MediaPipe that focuses on handling media files). However, this lack of focus poses the following problems:

  • What is the benefit of the software over an also general-purpose but more flexible scripting language such as AppleScript?
  • Why should the average GUI-oriented user (who is clearly the target audience) run the software? Such a user will probably not be able to see any useful application


Graphical Diff Utility

At the time of writing (January 2008) there seems to be no graphical diff utility native to Mac OS X. I found links to fldiff (a cmdline tool that spawns a GTK frontend) and kdiff3 (a KDE comparison tool), but no native .app bundle.

An implementation could take its feature cues from WinMerge.

See also the Wikipedia article on diff.


Icon Library Organizer

At the time of writing (January 2008) I found only two native Mac OS X applications that are used to organize an icon library: the first is IconBox, the second is CandyBar. Both are shareware, which makes them unattractive to me. In addition

  • IconBox is too old: its latest version 1.5 was release >4 years ago
  • CandyBar is too new: it is available only in a version that requires Mac OS X 10.5, so I can't use it even if I wanted to
  • Unfortunately, CandyBar's predecessor (Pixadex 2) which was available for Mac OS X 10.4, can no longer be downloaded anywhere

An implementation of a free icon organizer should be as simple as possible, after all we don't want to destroy the income of those shareware people.


svnmonX

Purpose: A Mac OS X utility to monitor Subversion repositories for new commits.

It might be possible to build on the experience won with dgsmonX (see above), and to copy shamelessly from CommitMonitor.

Because I don't have a real need for this, it is better for the moment to keep my hands off it and invest my time in other stuff. If I run out of things to do, however, this project might come in handy :-)


svn2rss

Purpose: Turn Subversion repository commit log into a news feed.

Features:

  • Either monitor the log (poll), or get the log entries pushed (commit hooks)
  • It should be possible to generate the feed from more than just one repository
  • News items should be generated only once and then held in a news "database"; this allows people to tap the news feed instead of the Subversion repository, taking load off the SVN server
  • It might be interesting to let other revision control software besides Subversion (CVS, git, Mercurial) provide the input

Other applications that already do the same job:

  • Crank: Command line utility written in Ruby
  • Svn→2→Rss: Ruby library
  • SubveRSSed.py: Python script to be used as a commit hook; creates two news feeds (one with only the most recent entries) and a HTML page
  • Others (google for "svn rss" or "svn2rss")


Animated Itinerary

Often when I came back from one of my trips, I would have liked to show other people where I have been on a map. More specifically, I would have liked to show them my itinerary. Even more specifically :-) I envisioned something similar to the nice animations shown in the Indiana Jones movies.

This, then, is the basic use case:

  • I enter a series of coordinates, or location names
  • The software displays a map and paints an animation that "explains" the itinerary

Note that it should all be very automatic:

  • I don't want to handcraft the animation in a graphical tool, they must be generated automatically
  • I want to be able to change the itinerary with a minimum of effort, the software should update the animation automatically
  • I don't want to be bothered with the question "where do I get the map from?"

Additional ideas:

  • Pick locations/coordinates by clicking on a map
  • Generate animations on 2D maps as well as in 3D (i.e. on a 3D globe à la Google Earth)
  • Attach images or movies to the itinerary (holiday pictures and movies)
  • Attach text to the itinerary (travel diary)
  • It all adds up to a travel documentary (don't lose focus on the central thing: maps and animated itinerary)
  • Web based so that the documentary can be shared with friends and colleagues
  • Need an abstract data definition that can be mapped to a database or XML
  • Attach references to other resources to the itinerary ("here I met Gloria, whose travel documentary can be found *here*", "*this* article has more information about the special Baroque style used in Lecce")
  • Integrate with other tools (Gallery 2?, Google Earth?)
  • Do not restrict itineraries to Earth (in the geographical and fictional sense), think of the following (ambitious) uses


Keep movie list in database + web front-end

Currently I keep a list with DVDs on this wiki (DVDLists). It would be nicer to store this data in a database and to have a simple web front-end that would allow to manage and query the list. An optional feature for marking a movie as having been borrowed would also be nice.

There are lots of applications that help managing one's collection of movies, but most of them are not web-based (e.g. GCstar). One web-based application that I have had a quick look at is MediaMate, but this somehow looks a little bit too much oriented towards "whom have I lent my movies to", whereas I mainly want an application whose main purpose is providing a list of movies that I have.


hashX

Purpose: Calculate the md5|sha|foo hash of a downloaded file and compare it to the hash provided on the download page to check the file's integrity.

Notes:

  • Nice and focused project
  • Of course the stated purpose does not limit the application's utility to downloaded files only, it's just what I intended it for in the first place
  • The main problem will be usability; the user should get the desired result with as few clicks/actions as possible
  • Alternate names might include the terms: signature, fingerprint, verify

Other applications that already do the same job:

  • MD5 FileCheck: The application icon is singularly unattractive :-) and the user interface is an absolute horror for a Mac user - Cmd+Q does not work (I cannot even imagine how they managed to break this) and file drag and drop is not supported
  • MD5er: Developer website does not exist
  • GU!MD5: Donationware with an initial nag screen; lacking feature: no comparison of the calculated md5 hash to another hash (e.g. taken from clipboard); features supported: drag&drop on dock icon and app window, process multiple files, save hash to clipboard/file/CSV/Excel
  • MD5: Donationware with an initial nag screen; has all the features that one would like, including drag&drop on dock icon
  • md5shot: Developer website is down
  • md5app: Developer website is taken by domain seller
  • MD5it: Developer website is not accessible (download URL itself gets a 404, less specific URL requires password)
  • MacHash: Maybe I'm stupid, but this app just does not seem to work at all (sits like a duck and does nothing)
  • MDFinder: Developer website does not exist
  • Checksum Validator: Has no unnecessary features, just calculate + compare checksums (md5 + sha1); seems pretty useful once the "check for updates" feature has been disabled (suspiciously tries to transmit system information along with the update check)

I only checked for md5 hash calculating programs on macupdate.com. It is astonishing how many pieces of software are not available or of low quality...


Replacement for GPGFileTool.app (and possibly Gpg Tools.app)

GPGFileTool.app is really dated, and I believe some people would love to see a replacement for the tool as it sometimes behaves in an annoying way, if not to say that it has bugs. I myself always found the tool cumbersome and not very intuitive, and I therefore preferred Ggp Tools.app over it. Unfortunately, for unknown reasons Gpg Tools.app does not work on my Intel MacBook, even though I have downloaded the most recent Universal Binary version 1.2.1.

In sum, it might be time for a new project.

It might be useful to first check with the Mac GNU Privacy Guard people if they invite participation in their project. On the other hand, just starting out to code something on my own might be useful to get acquainted with the domain.

It might be preferrable to attach to the MacGPG2 project. Investigate differences and/or improvements (?) of GPG 2.x over GPG 1.x.


Interactive Fiction Mapping Tool

An essential part of playing Infocom games is keeping track of the rooms and places you can go, the items you can carry with you and the puzzles you must solve. Especially the task of drawing a map can be nicely assisted by a tool:

  • The map dynamically changes as you find new places and rooms
  • Connections between rooms are sometimes unidirectional
  • Maps sometimes are three-dimensional (I seem to remember a 3D maze in either Enchanter, Sorceror or Spellbreaker)

The utility should be somewhat open so that it is possible to keep track of items and notes in addition to rooms/places. If possible the program should be useful for playing interactive fiction game other than Infocom adventures.


git Plugin for Xcode

Tough.


Various fink packages

pgpdump


Cyberspace Navigator and Visualizer

Purpose: Application that lets the user navigate the Internet while visualizing the structure of the network in a fashion reminiscent of the cyberspace matrix described in the Neuromancer novel and other cyberpunk literature (e.g. Shadowrun).

Challenges:

  • Finding good ways for visualizing network structures (includes, but is not limited to, slick graphics)
  • Finding good ways for making the app useful (e.g. it should be able to actually act as a web browser)
  • Find a nice name for the app (should be a hommage to Neuromancer)

Notes:

  • Use IP addresses as the basis for navigation (grid?)
  • On the other hand it is common to have different entities on the WWW under the same IP, distinguished only by their domain name; so maybe domain names should be used for the map layout?
  • The app would, by its nature, be forced to actively scan systems for their capabilities (e.g. port scan). This would probably (and understandably) be badly received by a lot of people. It should therefore be possible to advertise a system's capabilities through the use of some pre-defined resource file
  • This could be expanded to allow the description of a system's virtual appearance

Research:

  • So far I have found no hint for a similar project that already exists
  • I certainly don't know the keywords that I should use for my search
  • Reading about the cyberpunk/cyberspace culture might reveal a "technical" reference to an already existing app


Mount archive file as volume

Purpose: Instead of decompressing an archive (e.g a .zip file) to get at its content, most of the time I would often prefer to open it transparently in the Finder (not in a separate browsing application). I could then browse around inside the archive, or copy stuff out of it, just as I would like. This would be really nice when working on a Samba network volume, as I have made the experience that extracting a Mac application or other bundle is often slow, can result in permission problems, and cleaning up afterwards is usually cumbersome ("do you really want to delete that file?").

Notes:

  • I generally imagine behaviour that is similar as with .dmg files, but treating the archive as if it were a folder could also be a solution
  • It would be useful if the application could mount many different archive formats (including .jar files, which are nothing but glorified .zip files)
  • Is FUSE (MacFUSE) our friend?

Research:

  • An ultra-quick Google session did not yield useful results


App Bundle wrapper

Purpose: Wrap a Mac OS X application bundle's executable with an arbitrary launch script or launch binary.


Motivation: It is sometimes useful to have an environment variable set to a special value for only one specific Mac OS X application. In other situations "something" neeeds to be done just before, or after, an application launches.


Use cases:

  • I prefer to run Gimp in English even though my system is a German Mac OS X installation. To achieve this, I replace the Gimp.app bundle executable with a shell script that sets the LANG environment variable to something like "en_US.UTF-8" and then launches the original bundle executable.
  • At one time in the past I had the problem that the Eclipse plugin Subclipse would not be able to find the JavaHL library it requires for the Java bindings to the Subversion library. My (temporary) solution was similar to the above Gimp hack, except that I had to set DYLD_LIBRARY_PATH with the path to the JavaHL library.
  • ssh-agent an gpg-agent both communicate their contact details to clients over environment variables. It might be useful to store those variables in a well-known user-specific location and have a wrapper script read and set the variables just before it launches its application. The application does not need to care how or where it is supposed to acquire the necessary ssh-agent or gpg-agent environment variables - in fact, the normal behaviour of Linux applications


Notes:

  • So far all use cases focus on setting environment variables. This is a common problem for me, because Mac OS X does not allow to set environment variables with special values for just one specific application. AFAIK, there is currently only a way to set environment variables for all processes spawned by the user session, and that works by creating/modifying the file ~/.MacOSX/environment.plist (e.g. through the nice preference pane RCEnvironment).
  • My usual, manual, approach is this:
cd /Application/Gimp.app/Contents/MacOS
mv Gimp Gimp-bin
ln -s Gimp.sh Gimp
vi Gimp.sh   # write the wrapper
cat Gimp.sh

!/bin/bash
export LANG=en_US.UTF-8
$(dirname "$0")/Gimp-bin
  • Other utilities such as Platypus or py2app focus on wrapping a script into an application bundle, in other words: They create a new application bundle. My utility, however, is intended for modifying an existing application bundle.
  • There is one drawback to my whole approach: If a new version of the application bundle is installed, all changes are lost


Ideas:

  • The utility should look into the application bundle's Info.plist to find the executable that should be wrapped. The key "CFBundleExecutable" possibly is the right thing to look for.
  • The utility might handle the common envvar use case by offering an envvar editor (look at how RCEnvironment does this) and automatically generating a wrapper script that sets the variables
  • The utility should remain flexible for all other use cases


Package installation manager

Use cases

  • Look at the files that a .pkg or .mpkg file is going to install on the system
  • Watch an installation process and what it's doing (files installed, files modified, ...)
  • Look at receipts in /Library/Receipts and list which files have been installed according to that receipt (inside the receipt there is a .bom file that can be examined with the lsbom command)
  • Help with uninstalling


OpenSSL GUI Front-end

Create a GUI front-end for various functions of OpenSSL. Some thoughts:

  • Right-click on a certificate file in the Finder to display the certificate details
  • Same for the various other file formats
  • Same, but QuickLook instead of right-click
  • Full-featured GUI application should be platform independent -> Qt?


Existing projects

Projects listed in this section have been established by other people and are either in need of help, improvement or have been abandoned altogether and would like to be adopted.


G/PGP Encryption Plugin for SquirrelMail

URL 
http://squirrelmail.org/plugin_view.php?id=153
Status 
Last update was on July 7 2007. Plugin does not work on my system, see issue 48 on Herzilla. Plugin seems unmaintained, so either a new maintainer would be appropriate, or a fork of the software if the original project team cannot be contacted
Pros 
  • I actually use the software and it has a real value for me
  • Good opportunity to learn more about PGP in general, GnuPG in particular, and signing and encryption of email
Cons 
  • The domain of security-related software is tricky - one grave bug and the reputation is blown

Entry barriers :

  • Completely new programming environment (PHP programming as well as SquirrelMail plugin infrastructure)


FinkCommander

URL 
http://finkcommander.sourceforge.net/
Status 
Besides a recent release to provide a Universal Binary that includes the 64 bit architecture of Snow Leopard (Mac OS X 10.6), nothing has happened in this project for several years.
Pros 
  • I feel a certain attachment because I have done some translation work for FinkCommander in the past when the project was still maintained.
  • I also use Fink on the command line as an end-user
  • The project is not huge, it should be possible to take over in a moderate amount of time
Cons 
  • Although the value provided by Fink is real and important to me, I don't use Fink on a regular basis: Once a certain set of packages has been installed on a machine, it usually stays that way for quite a long time. Does this provide sufficient motivation?
Entry barriers 
  • I need a focus, something that is clearly broken and is in need of repair or improvement
  • Courage to ask the Fink folks whether they would like the project to be more actively maintained. I have a certain feeling that the project is quasi-maintained by the Fink developer community with the policy "don't touch it as long as it works for most people". Maybe they think loose community governance is better than casual maintainership?


X-Chat Aqua

URL 
http://www.uplinklabs.net/~tycho/projects/xchat-aqua/
Status 
Project looks for a Cocoa developer, or developer team.
Pros 
  • The project actively looks for developers, so they might accept my neophyte Cocoa skills
Cons 
  • I don't feel strongly for IRC, nor do I have a real need for it at the moment


iPhotoToGallery

URL 
http://zwily.com/iphoto/
Additional links 
Status 
Project hasn't been updated since May 2008, but the suggestions page is growing larger.
Pros 
  • I actually use the software and it has a real value for me
  • Judging from the the number of suggestions, there seem to be quite a few people out there that would love to see this project being updated, i.e. hero status seems possible :-)
  • The project is not huge, it should be possible to help out with a moderate amount of time
Cons 
  • It is unclear whether the iPhoto plugin system is official.