<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Home on cat /dev/snapshot</title><link>https://rumpf.eu/michael/</link><description>Recent content in Home on cat /dev/snapshot</description><generator>Hugo -- 0.154.5</generator><language>en</language><lastBuildDate>Mon, 24 Feb 2014 00:25:00 +0100</lastBuildDate><atom:link href="https://rumpf.eu/michael/index.xml" rel="self" type="application/rss+xml"/><item><title>Integrating Jenkins, SonarQube, and Nexus</title><link>https://rumpf.eu/michael/posts/2014-02-24-integrating-jenkins-sonarqube-and-nexus/</link><pubDate>Mon, 24 Feb 2014 00:25:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2014-02-24-integrating-jenkins-sonarqube-and-nexus/</guid><description>&lt;p&gt;In this post I will describe a solution to add a portal page, a common header and a dynamic panel to
each of the three tools Jenkins, SonarQube, and Nexus. Those modifications lead to a better visual
integration and intensifies the impression that the tools belong together.&lt;/p&gt;
&lt;p&gt;As a pre-requisite you need an Apache HTTP server, configured as reverse proxy and the tools accessible
via the following context path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/jenkins&lt;/li&gt;
&lt;li&gt;/sonarqube&lt;/li&gt;
&lt;li&gt;/nexus&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The folder structure which contains the portal page and the customization fragments looks like this:&lt;/p&gt;</description></item><item><title>Page decoration plugins for Jenkins, SonarQube, and Nexus</title><link>https://rumpf.eu/michael/posts/2014-02-23-page-decoration-plugins-for-jenkins/</link><pubDate>Sun, 23 Feb 2014 18:34:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2014-02-23-page-decoration-plugins-for-jenkins/</guid><description>&lt;p&gt;While trying to apply a unified visual layout to the tools &lt;a href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt;, 
&lt;a href="http://www.sonarqube.org/"&gt;SonarQube&lt;/a&gt;, and &lt;a href="http://www.sonatype.org/nexus/"&gt;Nexus&lt;/a&gt; I learned that
there are some plugins available, but none of them really fits the intended purpose.&lt;/p&gt;
&lt;p&gt;Jenkins has no easy way of changing its appearance and the 
&lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Simple+Theme+Plugin"&gt;Simple Theme plugin&lt;/a&gt; comes only
close to what is needed. In SonarQube there is a
&lt;a href="http://docs.codehaus.org/display/SONAR/Branding+Plugin"&gt;Branding plugin&lt;/a&gt; with which you can display
an image at the top of each page, but that&amp;rsquo;s basically all. The Nexus plugin to change the
&lt;a href="http://blog.sonatype.com/2010/02/custom-logo-nxpro/"&gt;Sonatype Nexus logo is available for the professional version only&lt;/a&gt;,
but buying the professional version just for being able to change the logo is not really an option.&lt;/p&gt;</description></item><item><title>Music Player Daemon on Raspberry Pi</title><link>https://rumpf.eu/michael/posts/2013-06-10-music-player-daemon-on-raspberry-pi/</link><pubDate>Mon, 10 Jun 2013 21:06:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2013-06-10-music-player-daemon-on-raspberry-pi/</guid><description>&lt;p&gt;This is not yet another &amp;ldquo;how to configure &lt;a href="http://www.musicpd.org/"&gt;MPD&lt;/a&gt; on the Raspberry Pi&amp;rdquo; article,
because there are a lot of excellent &lt;a href="http://www.musicpd.org/"&gt;MPD&lt;/a&gt; HOWTOs already available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://hempeldesigngroup.com/embedded/stories/raspberry-pi-setup-as-mpd-sever/"&gt;http://hempeldesigngroup.com/embedded/stories/raspberry-pi-setup-as-mpd-sever/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.t3node.com/blog/streaming-audio-with-mpd-and-icecast2-on-raspberry-pi/"&gt;http://www.t3node.com/blog/streaming-audio-with-mpd-and-icecast2-on-raspberry-pi/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lesbonscomptes.com/pages/raspmpd.html"&gt;http://lesbonscomptes.com/pages/raspmpd.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, I experienced a bottleneck with the configuration described by those articles. The load
was slightly over 1 but it was high enough to cause some stuttering every 30 seconds.&lt;/p&gt;
&lt;p&gt;The first optimization is to avoid using a separate streaming solution like icecast&lt;/p&gt;
&lt;p&gt;MPD has its own, built-in streaming plugin which can be configured like this:&lt;/p&gt;</description></item><item><title>Debugging UPnP/DLNA traffic to a Sony LCD TV</title><link>https://rumpf.eu/michael/posts/2012-10-08-debugging-upnpdlna-traffic-to-sony-lcd/</link><pubDate>Mon, 08 Oct 2012 14:27:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2012-10-08-debugging-upnpdlna-traffic-to-sony-lcd/</guid><description>&lt;p&gt;The issue I have is that my Sony LCD TV seems to be very picky regarding the UPnP/DLNA protocol when playing
media from a control point to the television. The Android App
&lt;a href="https://play.google.com/store/apps/details?id=com.bubblesoft.android.bubbleupnp&amp;amp;hl=en"&gt;BubbleUPnP&lt;/a&gt; does a
good job here as playing music works out of the box. Initial tests with the &lt;a href="http://4thline.org/projects/cling/"&gt;Cling Java library&lt;/a&gt;
to play music does not work out of the box. Therefore I wanted to debug the HTTP SOAP protocol in order to see where the differences are.&lt;/p&gt;</description></item><item><title>Use Java 7 on Buildhive</title><link>https://rumpf.eu/michael/posts/2012-08-14-use-java-7-on-buildhive/</link><pubDate>Tue, 14 Aug 2012 14:09:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2012-08-14-use-java-7-on-buildhive/</guid><description>&lt;p&gt;Changing source and target version to 1.7 is not sufficient to enable Java 7 on Buildhive at the moment.&lt;br&gt;
Adding the following profile to your Maven POM makes sure that your local build is not affected by
the special configuration and when running on Buildhive, JDK 7 is used for both build and test-run.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;  &amp;lt;profiles&amp;gt;
    &amp;lt;profile&amp;gt;
      &amp;lt;id&amp;gt;buildhive&amp;lt;/id&amp;gt;
      &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;2.5.1&amp;lt;/version&amp;gt;
            &amp;lt;configuration&amp;gt;
              &amp;lt;source&amp;gt;1.7&amp;lt;/source&amp;gt;
              &amp;lt;target&amp;gt;1.7&amp;lt;/target&amp;gt;
              &amp;lt;showDeprecation&amp;gt;true&amp;lt;/showDeprecation&amp;gt;
              &amp;lt;showWarnings&amp;gt;true&amp;lt;/showWarnings&amp;gt;
              &amp;lt;encoding&amp;gt;UTF-8&amp;lt;/encoding&amp;gt;
              &amp;lt;executable&amp;gt;/opt/jdk/jdk1.7.0/bin/javac&amp;lt;/executable&amp;gt;
              &amp;lt;fork&amp;gt;true&amp;lt;/fork&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;configuration&amp;gt;
              &amp;lt;jvm&amp;gt;/opt/jdk/jdk1.7.0/bin/java&amp;lt;/jvm&amp;gt;
              &amp;lt;forkMode&amp;gt;once&amp;lt;/forkMode&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
      &amp;lt;/build&amp;gt;
    &amp;lt;/profile&amp;gt;
  &amp;lt;/profiles&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The profile can be selected by adding the following line to the configuration of your Buildhive job:&lt;/p&gt;</description></item><item><title>Raspberry Pi</title><link>https://rumpf.eu/michael/posts/2012-06-30-raspberry-pi/</link><pubDate>Sat, 30 Jun 2012 12:26:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2012-06-30-raspberry-pi/</guid><description>&lt;p&gt;My Raspberry Pi finally arrived after 4 months:&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="http://lh4.ggpht.com/-d4He0twcz6g/T-7UaBINYfI/AAAAAAAAJTQ/2exhKrF50Ck/1341051972105.png"&gt;&lt;/p&gt;
&lt;p&gt;The stable Debian distribution &amp;ldquo;Squeeze&amp;rdquo; does not contain support for all of the Raspberry Pi
features. That means there is no way around the the latest Debian &amp;ldquo;Wheezy&amp;rdquo; image: 
&lt;a href="http://www.raspberrypi.org/archives/1435"&gt;http://www.raspberrypi.org/archives/1435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But even with the latest image version there is still some configuration effort left&amp;hellip;&lt;/p&gt;
&lt;h2 id="wlan-stick"&gt;WLAN Stick&lt;/h2&gt;
&lt;p&gt;For network connectivity I have chosen the Conrad WLAN Stick N150 Nano, which is based on the following chipset: USB: 0BDA:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter.&lt;br&gt;
Unfortunately this chipset has some issues with the current drivers from both Debian Linux images as discussed in the forum thread &lt;a href="http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&amp;amp;t=6256&amp;amp;sid=85adf66d944a48285a706d8cb6884190&amp;amp;start=350"&gt;Automatic setup for RTL8188CUS based wifi adapters&lt;/a&gt;. By executing the script install-rtl8188cus-latest.sh from the forum thread, the adapter started working immediately after the script was finished.&lt;br&gt;
The general WLAN configuration is described in detail in the Debian Wiki: &lt;a href="http://wiki.debian.org/WiFi/HowToUse#Command_Line"&gt;http://wiki.debian.org/WiFi/HowToUse#Command_Line&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Wake On LAN</title><link>https://rumpf.eu/michael/posts/2012-03-03-wake-on-lan/</link><pubDate>Sat, 03 Mar 2012 22:50:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2012-03-03-wake-on-lan/</guid><description>&lt;p&gt;Under Ubuntu I chose the following way to activate wake on LAN on the eth0 device:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Install ethtool
sudo apt-get install ethtool
# Create init script to set the wol bit on the device
sudo vi /etc/init.d/wakeonlan
#!/bin/sh
ethtool -s eth0 wol g
exit
# Make the script executable
sudo chmod a+x /etc/init.d/wakeonlan
# Create the init links
sudo update-rc.d wakeonlan defaults
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Under Debian the following approach has been chosen:&lt;/p&gt;</description></item><item><title>Deploying weld-osgi to jcoderz.org repository</title><link>https://rumpf.eu/michael/posts/2011-12-31-for-deploying-weld-osgi-to-jcoderz/</link><pubDate>Sat, 31 Dec 2011 16:36:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2011-12-31-for-deploying-weld-osgi-to-jcoderz/</guid><description>&lt;p&gt;For deploying weld-osgi to the jcoderz.org repository the following modifications to the &lt;code&gt;pom.xml&lt;/code&gt;
files are necessary (after applying the wagon-ssh extensions to the your Maven installation, see previous post):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Deploy the WELD API packages&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone -b WELD-963 http://github.com/mathieuancelin/api.git WELD-963
cd WELD-963
vi pom.xml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Add the following XMl fragment to the maven-deploy-plugin&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;   &amp;lt;build&amp;gt;
      &amp;lt;plugins&amp;gt;
         &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-deploy-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;configuration&amp;gt;
               &amp;lt;skip&amp;gt;true&amp;lt;/skip&amp;gt;
            &amp;lt;/configuration&amp;gt;
            &amp;lt;dependencies&amp;gt;
              &amp;lt;dependency&amp;gt;
                &amp;lt;groupId&amp;gt;org.apache.maven.wagon&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;wagon-ssh&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;2.2&amp;lt;/version&amp;gt;
              &amp;lt;/dependency&amp;gt;
            &amp;lt;/dependencies&amp;gt;
         &amp;lt;/plugin&amp;gt;
      &amp;lt;/plugins&amp;gt;
   &amp;lt;/build&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;mvn -e clean install -Dmaven.test.skip=true
mvn -e deploy -DaltDeploymentRepository=jcoderz-snapshots::default::scp://jcoderz.org/var/www/repos/maven2-snapshot/ -Dmaven.test.skip=true
cd ..
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt; &lt;br&gt;
2. Deploy the WELD OSGi packages&lt;/p&gt;</description></item><item><title>Maven 3: SSH deployment to foreign repository</title><link>https://rumpf.eu/michael/posts/2011-12-31-maven-3-ssh-deploy-to-foreign/</link><pubDate>Sat, 31 Dec 2011 16:08:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2011-12-31-maven-3-ssh-deploy-to-foreign/</guid><description>&lt;p&gt;Using the maven-deploy-plugin to deploy artifacts to a repository that is not the
original target repository of a project is getting complicated with Maven 3 when
the wagon SSH provider is not part of the Maven distribution. The following JAR
files must be added to the Maven distribution into the &lt;code&gt;lib/ext&lt;/code&gt; extension folder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;jsch-0.1.44-1.jar&lt;/li&gt;
&lt;li&gt;plexus-utils-3.0.jar&lt;/li&gt;
&lt;li&gt;plexus-interactivity-api-1.0-alpha-6.jar&lt;/li&gt;
&lt;li&gt;wagon-ssh-2.2.jar\n* wagon-ssh-external-2.2.jar&lt;/li&gt;
&lt;li&gt;wagon-ssh-common-2.2.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then the parent &lt;code&gt;pom.xml&lt;/code&gt; of the project must be extended by the  following lines:&lt;/p&gt;</description></item><item><title>Building weld-osgi</title><link>https://rumpf.eu/michael/posts/2011-12-06-building-weld-osgi/</link><pubDate>Tue, 06 Dec 2011 23:11:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2011-12-06-building-weld-osgi/</guid><description>&lt;p&gt;In case you want to use &lt;a href="http://seamframework.org/Weld"&gt;Weld&lt;/a&gt; inside your OSGi application you first need to compile a few branches on your own:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mathieuancelin/api/tree/WELD-963"&gt;WELD-963&lt;/a&gt; branch of the weld/api project&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mathieuancelin/core/tree/weld-osgi"&gt;weld-osgi&lt;/a&gt; branch from the weld/core project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those branches will soon be merged into the official Weld codebase. But in the meantime you need to follow the steps below in order to get the packages compiled.&lt;br&gt;
A prerequisite is that git and Maven 3 is available&lt;/p&gt;</description></item><item><title>m3player version 0.1.3 released</title><link>https://rumpf.eu/michael/posts/2011-08-20-m3player-version-013-released/</link><pubDate>Sat, 20 Aug 2011 01:45:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-08-20-m3player-version-013-released/</guid><description>&lt;p&gt;&lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3player version 0.1.3&lt;/a&gt; has the following new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;m3player can be run as a daemon with &lt;code&gt;-d&lt;/code&gt; or &lt;code&gt;--daemon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The name of the UPnP Media Renderer can be configured by &lt;code&gt;-n&lt;/code&gt; or &lt;code&gt;--name&lt;/code&gt;. This is done by copying
the XML files from &lt;code&gt;/usr/share/m3player&lt;/code&gt; to &lt;code&gt;/var/lib/m3player&lt;/code&gt; and filtering place-holders in some of the files.&lt;/li&gt;
&lt;li&gt;The version of the MediaRenderer device can be configured by &lt;code&gt;-r&lt;/code&gt; or &lt;code&gt;--root&lt;/code&gt;. The default is &lt;code&gt;MediaRendererV2.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The UPnP server can be bound to a network interface, specified by &lt;code&gt;-i&lt;/code&gt; or &lt;code&gt;--interface&lt;/code&gt;. Example: eth0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The help output shows an overview of all the parameters available:&lt;/p&gt;</description></item><item><title>Turning m3player into a daemon</title><link>https://rumpf.eu/michael/posts/2011-08-11-turning-m3player-into-daemon/</link><pubDate>Thu, 11 Aug 2011 21:29:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-08-11-turning-m3player-into-daemon/</guid><description>&lt;p&gt;As most of the public HOWTOs seem to be either incomplete or a bit outdated and because I
have no copy of the book
&lt;a href="http://www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0201563177"&gt;Advanced Programming in the UNIX Environment&lt;/a&gt;,
Instead I found the following microHOWTOs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microhowto.info/howto/cause_a_process_to_become_a_daemon.html"&gt;Cause a process to become a daemon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microhowto.info/howto/cause_a_process_to_become_a_daemon_in_c.html"&gt;Cause a process to become a daemon in c&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By following the steps, described there I was able to turn
&lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3player&lt;/a&gt; into a daemon.
The daemon behavior can be turned on by passing the &lt;code&gt;-d&lt;/code&gt; or &lt;code&gt;--daemon&lt;/code&gt; switches to the command
line. When the daemon switch is specified, all output (stdout and stderr) gets redirected into
the log file at the default location &lt;code&gt;/var/log/m3player.log&lt;/code&gt; or to the location, specified by
the &lt;code&gt;-l&lt;/code&gt; or &lt;code&gt;--logfile&lt;/code&gt; switch.&lt;/p&gt;</description></item><item><title>m3player version 0.1.2 released</title><link>https://rumpf.eu/michael/posts/2011-08-01-m3player-version-012-released/</link><pubDate>Mon, 01 Aug 2011 01:22:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-08-01-m3player-version-012-released/</guid><description>&lt;p&gt;I just released version 0.1.2 of &lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3player&lt;/a&gt;. The new version includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compilation and packaging for OpenWRT&lt;/li&gt;
&lt;li&gt;Installation of the ipkg package on the TL-WR1043ND device&lt;/li&gt;
&lt;li&gt;Support for command-line parameters:
&lt;ul&gt;
&lt;li&gt;config - Path to the config file (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/m3player/m3player.ini&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;pidfile - Location of the PID file (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/var/run/m3player.pid&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;xmlfolder - Location of the descriptor XML files (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/usr/share/m3player&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;name - Set the name of the player instance (Hostname or m3player)&lt;/li&gt;
&lt;li&gt;filename - The name of the root device file (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MediaRenderedV1.xml&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Support for an INI file (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/m3player/m3player.ini&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;Fixes to the GStreamer pipeline to work in the stripped down OpenWRT environment with only a few plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When launching the &lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3player&lt;/a&gt; it starts playing the first entry from the preset list.&lt;/p&gt;</description></item><item><title>Building a TP-Link TL-WR1043ND OpenWRT 10.03 image</title><link>https://rumpf.eu/michael/posts/2011-07-31-building-tp-link-tl-wr1043nd-openwrt/</link><pubDate>Sun, 31 Jul 2011 23:48:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-31-building-tp-link-tl-wr1043nd-openwrt/</guid><description>&lt;p&gt;This article gives a step-by-step description on how to get the
&lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3ddity-player&lt;/a&gt; working on the
TP-Link TL-WR1043ND device, using the stable version of OpenWRT 10.03 (backfire).&lt;/p&gt;
&lt;p&gt;First you need to checkout the OpenWRT 10.03 (backfire) branch:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;svn co svn://svn.openwrt.org/openwrt/branches/backfire
cd backfire
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then the feed for the &lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3ddity-player&lt;/a&gt; must be added:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cp feeds.conf.default feeds.conf
echo &amp;#34;src-svn jcoderz http://www.jcoderz.org/svn/m3dditiez/branches/openwrt-10.3/packages&amp;#34; &amp;gt;&amp;gt; feeds.conf
./scripts/feeds update ./scripts/feeds install -a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now run menuconfig and select the necessary modules:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;make menuconfig
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The following list shows only menuconfig entries where settings have been changed. Settings not shown here are left untouched.&lt;/p&gt;</description></item><item><title>Music player fully integrated into the OpenWRT build process</title><link>https://rumpf.eu/michael/posts/2011-07-25-music-player-fully-integrated-into/</link><pubDate>Mon, 25 Jul 2011 00:44:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-25-music-player-fully-integrated-into/</guid><description>&lt;p&gt;The &lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;m3ddity-player&lt;/a&gt; and the GUPnP libraries,
on which the player depends upon, can now easily be build for OpenWRT, just follow the steps below:&lt;/p&gt;
&lt;p&gt;1. Checkout the trunk version of OpenWRT&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;svn co svn://svn.openwrt.org/openwrt/trunk
cd trunk
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;Add the &lt;a href="http://www.jcoderz.org/m3dditiez/"&gt;jCoderZ&lt;/a&gt; package repository to the list of feeds &lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cp feeds.conf.default feeds.conf
echo &amp;#34;src-svn jcoderz &amp;#34; \ 
     &amp;#34;http://www.jcoderz.org/svn/m3dditiez/trunk/&amp;#34; \ 
&amp;#34;openwrt/packages&amp;#34; &amp;gt;&amp;gt; feeds.conf
./scripts/feeds update 
./scripts/feeds install -a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3. Run menuconfig and select the packages as described
&lt;a href="http://dev-snapshot.blogspot.com/2011/07/building-openwrt-image-optimized-for.html"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>jCoderZ.org</title><link>https://rumpf.eu/michael/posts/2011-07-24-jcoderzorg/</link><pubDate>Sun, 24 Jul 2011 13:31:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-24-jcoderzorg/</guid><description>&lt;p&gt;The OpenWRT music player, which I have blogged about recently, has found a 
home at &lt;a href="https://github.com/jCoderZ/m3player"&gt;https://github.com/jCoderZ/m3player&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Quest for a USB audio device part 2...</title><link>https://rumpf.eu/michael/posts/2011-07-19-quest-for-usb-audio-device-part-2/</link><pubDate>Tue, 19 Jul 2011 20:21:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-19-quest-for-usb-audio-device-part-2/</guid><description>&lt;p&gt;The new audio devices arrived but unfortunately they show the same glitches as the devices I tested
&lt;a href="http://dev-snapshot.blogspot.com/2011/07/seeking-cheap-usb-audio-device-that.html%22"&gt;before&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="%22http://www.logilink.eu/showproduct/UA0053.htm"&gt;USB Soundkarte mit Virtual 3D Soundeffekt LogiLink®&lt;/a&gt;
This device is also based on the chipset &amp;ldquo;Tenx Technology, Inc. TP6911 Audio Headset&amp;rdquo; and has the same
issues as the previous device (USB Sound Audio), i.e. the output is far too loud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="%22http://www.logilink.eu/showproduct/UA0078.htm"&gt;USB Soundkarte mit Virtual 7.1 Soundeffekt LogiLink®&lt;/a&gt;
The sound is good but as with the previous device a clicking noise is heard during reboot, power-off,
power-on, plug-in/out. The chipset is &amp;ldquo;C-Media Electronics, Inc. Audio Adapter&amp;rdquo;
So both adapters use the same chipsets and show the same issues. It seems as if there are not
too many different cheap USB audio devices on the market, just rebranded stuff from the same
manufacturer.&lt;/p&gt;</description></item><item><title>Seeking a cheap USB audio device for the TP-Link TL-WR1043ND</title><link>https://rumpf.eu/michael/posts/2011-07-13-seeking-cheap-usb-audio-device-that/</link><pubDate>Wed, 13 Jul 2011 22:48:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-13-seeking-cheap-usb-audio-device-that/</guid><description>&lt;p&gt;I&amp;rsquo;m seeking for a USB audio device that works with the TP-Link TL-WR1043ND under OpenWRT. Until now I tried 2 different devices with unacceptable issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. USB Sound Audio (Amazon)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/-qWqnVo0dbP8/Th4AOAsdarI/AAAAAAAAElw/m7Hwk4flU3U/s1600/TP6911.jpg"&gt;&lt;img loading="lazy" src="http://2.bp.blogspot.com/-qWqnVo0dbP8/Th4AOAsdarI/AAAAAAAAElw/m7Hwk4flU3U/s200/TP6911.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The device gets detected under Linux as Tenx Technology, Inc. TP6911 Audio Headset. The following warnings are reported by &lt;/p&gt;
&lt;p&gt;dmesg when connecting the device:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;usb_audio: Warning! Unlikely big volume range (=13568), cval-&amp;gt;res is probably wrong.
usb_audio: [2] FU [PCM Playback Volume] ch = 2, val = 2560/16128/1
usb_audio: Warning! Unlikely big volume range (=6096), cval-&amp;gt;res is probably wrong.
usb_audio: [5] FU [Mic Capture Volume] ch = 1, val = 0/6096/1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The issue with this device is that the volume level is so high that it cannot be controlled. Between mute and 10% the output sounds distorted. At 20% the volume level is at its maximum, with no audible change between 20% and 100%.
&lt;strong&gt;2. auvisio Visual Sound Technologies (pearl.de)&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Make ALSA settings persistent on OpenWRT</title><link>https://rumpf.eu/michael/posts/2011-07-13-make-alsa-settings-persistent-on/</link><pubDate>Wed, 13 Jul 2011 21:36:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-13-make-alsa-settings-persistent-on/</guid><description>&lt;p&gt;The command-line tool alsamixer can be used to control the volume of the USB audio output:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/-EHJmq1aKXrI/Th3tP-sqcLI/AAAAAAAAEls/SGdLN4yRHo4/s1600/alsamixer.png"&gt;&lt;img loading="lazy" src="http://2.bp.blogspot.com/-EHJmq1aKXrI/Th3tP-sqcLI/AAAAAAAAEls/SGdLN4yRHo4/s320/alsamixer.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately the setting does not survive a reboot. Another tool from the alsa-utils package can be used for this purpose: alsactl&lt;/p&gt;
&lt;p&gt;After setting the volume with alsamixer, the following command persists the current setting in the file-system for device 0:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;alsactl -f /etc/alsa/alsa0.state store 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;During startup, the state must be restored again. This can be achieved by adding the following command to /etc/rc.local:&lt;/p&gt;</description></item><item><title>Building an OpenWRT image optimized for MP3 audio playback</title><link>https://rumpf.eu/michael/posts/2011-07-13-building-openwrt-image-optimized-for/</link><pubDate>Wed, 13 Jul 2011 20:36:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-13-building-openwrt-image-optimized-for/</guid><description>&lt;p&gt;For the audio-renderer, see revious posts, I decided to switch to the trunk version of OpenWRT.&lt;br&gt;
I experienced some issues with the USB audio hardware and the trunk version should prove that there
are no issues with the USB audio drivers which are already fixed.&lt;br&gt;
The following configuration is for the bleeding-edge version, some module names have changed so it
cannot be applied to the Kamikaze (10.3) version without modification (e.g. block-mount contains the
overlay functionality and kmod-fs-ext4 has support for all ext file-system versions).&lt;br&gt;
&lt;strong&gt;NOTE: This configuration has stripped all modules which are not necessary for USB audio and Wireless LAN.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Using a password safe on multiple platforms</title><link>https://rumpf.eu/michael/posts/2011-07-09-using-password-safe-on-multiple/</link><pubDate>Sat, 09 Jul 2011 15:40:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-07-09-using-password-safe-on-multiple/</guid><description>&lt;p&gt;After the Playstation Network Hack I decided to change to secure passwords for all my accounts.
The drawback is that nobody can remember secure passwords anymore, so there is no way around using a
password safe.&lt;/p&gt;
&lt;p&gt;The only application that is available on all the different platforms I use is KeePass (V1.x on Windows,
KeePassX under Linux, and KeePassDroid on Android). Under Windows the the 1.x version must be used in
order to stick to the same file format as the KeePassX and the KeePassDroid applications.&lt;/p&gt;</description></item><item><title>Radio presets</title><link>https://rumpf.eu/michael/posts/2011-06-27-radio-presets/</link><pubDate>Mon, 27 Jun 2011 23:26:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-27-radio-presets/</guid><description>&lt;p&gt;One important feature for the audio renderer is the support for &lt;strong&gt;presets&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I do not want to search for my mobile phone in order to select a music source when I enter the kitchen in the morning. The use-case where you turn on your analog radio and the tuning wheel is right at the position of your favorite radio station is unbeatable simple.&lt;/p&gt;
&lt;p&gt;Therefore the audio-renderer has a list of MP3 streaming URLs where the first one will be played upon startup of the process. The channels can be switched by sending a signal to the server process:&lt;/p&gt;</description></item><item><title>UPnP audio renderer released</title><link>https://rumpf.eu/michael/posts/2011-06-27-upnp-audio-renderer-released/</link><pubDate>Mon, 27 Jun 2011 23:05:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-27-upnp-audio-renderer-released/</guid><description>&lt;p&gt;A very early version of my UPnP audio-renderer had been released on Gitorius &lt;a href="https://gitorious.org/gupnp-audio-renderer"&gt;https://gitorious.org/gupnp-audio-renderer&lt;/a&gt;
(&lt;strong&gt;Update 2011-08-01&lt;/strong&gt;: It has been renamed to m3player and been moved to &lt;a href="http://www.jcoderz.org/m3dditiez/wiki/m3ddity-player"&gt;here&lt;/a&gt;).
It implements the necessary parts of the UPnP MediaRenderer specification.&lt;/p&gt;
&lt;p&gt;The implementation is based on excellent frameworks like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.gupnp.org/"&gt;GUPnP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gstreamer.freedesktop.org/"&gt;GStreamer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.gnome.org/glib/"&gt;GLib&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The initial target for the renderer is the &lt;a href="http://www.openwrt.org/"&gt;OpenWRT&lt;/a&gt; platform (see previous articles about a WiFi music player).
I decided to use C instead of Vala (that was a decision against Rygel) as the memory constraints are very limited and I need to save
memory whereever possible. Although my C language skills are a bit rusty, I did not want to learn another language. Additionally, the
usage of Vala would increase the effort to port the whole vala stuff to the OpenWRT build-system. Luckily GStreamer and GLib are already
available on OpenWRT.&lt;/p&gt;</description></item><item><title>Compile a development version of GUPnP from HEAD</title><link>https://rumpf.eu/michael/posts/2011-06-13-compile-development-version-of-gupnp/</link><pubDate>Mon, 13 Jun 2011 17:53:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-13-compile-development-version-of-gupnp/</guid><description>&lt;p&gt;Follow the commands below in order to setup a local environment for working with the latest development version of the GUPNP framework.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir $(pwd)/base
git clone http://git.gnome.org/browse/gssdp
cd gssdp
./autogen.sh --prefix=$(pwd)/../base --exec-prefix=$(pwd)/../base
make &amp;amp;&amp;amp; make install
cd ..
git clone http://git.gnome.org/browse/gupnp
cd gupnp
PKG_CONFIG_PATH=$(pwd)/../base/lib/pkgconfig ./autogen.sh --prefix=$(pwd)/../base --exec-prefix=$(pwd)/../base
cd ..
git clone http://git.gnome.org/browse/gupnp-tools
cd gupnp-tools
PKG_CONFIG_PATH=$(pwd)/../base/lib/pkgconfig ./autogen.sh --prefix=$(pwd)/../base --exec-prefix=$(pwd)/../base
cd ..
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run the following commands for setting the environment to use the fresh compiled libraries instead of the OS provided ones (Empathy under Ubuntu 11.04 uses an older version of the GUPNP libraries. I ran into segmentation faults because the libraries did not match):&lt;/p&gt;</description></item><item><title>Building a custom OpenWRT image for the TP-Link TL-WR1043ND</title><link>https://rumpf.eu/michael/posts/2011-06-12-building-custom-openwrt-image-for-tp/</link><pubDate>Sun, 12 Jun 2011 16:36:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-12-building-custom-openwrt-image-for-tp/</guid><description>&lt;p&gt;[&lt;img loading="lazy" src="http://1.bp.blogspot.com/-My4aqk4nBL4/TfSaA1akJ5I/AAAAAAAAEkg/GpWbxKqabLs/s200/IMAG0292.jpg"&gt;]
[&lt;img loading="lazy" src="http://3.bp.blogspot.com/-eqzxpdUiMJ8/TfSaC26_9QI/AAAAAAAAEkk/5lGKpLAiEvs/s200/IMAG0293.jpg"&gt;]&lt;/p&gt;
&lt;p&gt;For my low-budget wireless music player I had to tweak OpenWRT in order to support my setup. For initial tests I decided to use the &lt;a href="http://mpd.wikia.com/"&gt;Music Player Daemon&lt;/a&gt; and &lt;a href="http://www.underbit.com/products/mad/"&gt;madplay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following steps describe how to setup OpenWRT on the TP-Link WR1043ND. It assumes that the OpenWRT 10.03.1-rc4 firmware has already been installed, that the IP address of the router has been set to 192.168.0.111, and that an USB audio, as well as that an USB stick has been connected to the device via an USB hub.&lt;/p&gt;</description></item><item><title>Low-budget WiFi Music Player</title><link>https://rumpf.eu/michael/posts/2011-06-12-low-budget-wifi-music-player/</link><pubDate>Sun, 12 Jun 2011 13:17:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-12-low-budget-wifi-music-player/</guid><description>&lt;p&gt;After searching the net for quite a while I could not find a pure wireless music player for small money. In case
you want to equip multiple rooms in your house with a music player it will cost you a lot of money. All products
on the market come with a lot of features, of which most are not necessary. The following links show interesting
hacks on how to build your own WiFi music player based on OpenWRT:&lt;/p&gt;</description></item><item><title>GUPNP: Failed to get SCPD: Cannot resolve hostname ((null))</title><link>https://rumpf.eu/michael/posts/2011-06-05-gupnp-failed-to-get-scpd-cannot-resolve_05/</link><pubDate>Sun, 05 Jun 2011 18:23:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-05-gupnp-failed-to-get-scpd-cannot-resolve_05/</guid><description>&lt;p&gt;The following message occurs when the &lt;code&gt;&amp;lt;urlbase&amp;gt;&amp;lt;/urlbase&amp;gt;&lt;/code&gt; tag of the root device description is empty when trying to autoconnect actions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;** (process:25888): WARNING **: Failed to get SCPD: Cannot resolve hostname ((null))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Changing it to &lt;strong&gt;http://localhost&lt;/strong&gt; fixes the issue.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;
&amp;lt;root xmlns=&amp;#34;urn:schemas-upnp-org:device-1-0&amp;#34;&amp;gt;
  &amp;lt;specVersion&amp;gt;
    &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;
    &amp;lt;minor&amp;gt;0&amp;lt;/minor&amp;gt;
  &amp;lt;/specVersion&amp;gt;
&amp;lt;URLBase&amp;gt;http://localhost&amp;lt;/URLBase&amp;gt;
  &amp;lt;device&amp;gt;
    &amp;lt;!-- ... --&amp;gt;
  &amp;lt;/device&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The message is a bit misleading. I was first trying to find an issue with my DNS configuration.&lt;/p&gt;</description></item><item><title>Compiling GUPnP on Ubuntu 11.04</title><link>https://rumpf.eu/michael/posts/2011-06-03-compiling-gupnp-on-ubuntu-1104/</link><pubDate>Fri, 03 Jun 2011 15:55:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-06-03-compiling-gupnp-on-ubuntu-1104/</guid><description>&lt;p&gt;Because the &lt;a href="http://gupnp.org/"&gt;GUPnP&lt;/a&gt; stack is lacking some documentation I describe my experiences with getting it complied under Ubuntu 11.04. &lt;br&gt;
The commands will setup an environment that does not interfere with the Ubuntu provided packages, which are older than the ones compiled here. The library files will be installed under the location:
~/workspaces/openwrt/upnp&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir -p ~/workspaces/openwrt/upnp
cd ~/workspaces/openwrt/upnp
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-igd-0.1.11.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-0.16.1.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-igd-0.1.10.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-tools-0.8.3.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-dlna-0.6.1.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-av-0.8.0.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gssdp-0.10.0.tar.gz | tar xvfz -
wget -O - http://gupnp.org/sites/all/files/sources/gupnp-vala-0.8.0.tar.gz | tar xvfz -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>VirtualBox 4.0.2 on Ubuntu 11.04</title><link>https://rumpf.eu/michael/posts/2011-05-29-virtualbox-402-on-ubuntu-1104/</link><pubDate>Sun, 29 May 2011 13:55:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2011-05-29-virtualbox-402-on-ubuntu-1104/</guid><description>&lt;p&gt;After an update to Ubuntu 11.04 VirtualBox was not running anymore. Startup fails with a hint that the kernel modules exited in error and that I should use DKMS to reconfigure the kernel module.&lt;/p&gt;
&lt;p&gt;Running the vboxdrv setup command also led to an error:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo /etc/init.d/vboxdrv setup
[sudo] password for desktop: 
 * Stopping VirtualBox kernel modules                                  *  done.
 * Uninstalling old VirtualBox DKMS kernel modules                     *  done.
 * Trying to register the VirtualBox kernel modules using DKMS                  
Error! Bad return status for module build on kernel: 2.6.38-8-generic (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/vboxhost/4.0.2/build/ for more information.
 * Failed, trying without DKMS
 * Recompiling VirtualBox kernel modules                                        
 * Look at /var/log/vbox-install.log to find out what went wrong
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The log file indicates that a header file was missing:&lt;/p&gt;</description></item><item><title>New version of smpppd-web</title><link>https://rumpf.eu/michael/posts/2006-01-12-new-version-of-smpppd-web/</link><pubDate>Thu, 12 Jan 2006 05:46:00 +0100</pubDate><guid>https://rumpf.eu/michael/posts/2006-01-12-new-version-of-smpppd-web/</guid><description>&lt;p&gt;The original versions of &lt;a href="http://www.suse.de/~cwh/"&gt;smppd-web&lt;/a&gt; by Christopher Hofmann neither support adding and removing links on the fly nor do they support dial-on-demand ISDN interfaces. That is the reason why I extended the original codebase by these features.&lt;br&gt;
Further more the users for which I developed the software are german speaking only so that gettext support was also an important feature. Initially I added  support for german and english languages.&lt;/p&gt;
&lt;p&gt;As I&amp;rsquo;m not a SuSE user in general, the new version probably does not follow the SuSE directory guidelines and it does not come packaged as a RPM. Therefore it would be great if someone with SuSE RPM packaging know-how would create a successor RPM package out of Christopher&amp;rsquo;s original version. Or even better Christopher packages a new version for &lt;a href="http://old-en.opensuse.org/User:Cwh"&gt;OpenSuSE&lt;/a&gt; ;)&lt;/p&gt;</description></item><item><title>Creating an ISDN Gateway with SuSE 9.3</title><link>https://rumpf.eu/michael/posts/2005-10-19-creating-isdn-gateway-with-suse-93/</link><pubDate>Wed, 19 Oct 2005 07:31:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2005-10-19-creating-isdn-gateway-with-suse-93/</guid><description>&lt;p&gt;In Germany flatrates are available for DSL only, so people, living in areas where DSL is not available, have to pay expensive time based fees for slowly connecting to the Internet. The problem is that M$ Windows and many of the installed tools are known for initiating internet connections although the user did not ask them to do so. Therefore it is crucial to reliably disconnect the ISDN line so that those unwanted connection attempts will not succeed. ISDN routers, which might be of help here, are hard to find nowadays and do not offer the comfort as new DSL routers do.&lt;/p&gt;</description></item><item><title>Setting up a free Microsoft debugging environment on Windows XP</title><link>https://rumpf.eu/michael/posts/2005-07-27-setting-up-free-microsoft-debugging/</link><pubDate>Wed, 27 Jul 2005 07:45:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2005-07-27-setting-up-free-microsoft-debugging/</guid><description>&lt;p&gt;This is a short guide on how to debug applications or dynamic link libraries created by the post &lt;em&gt;free Microsoft C++ compile environment&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The following tools need to be installed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.5.3.7.exe"&gt;Microsoft Debug Tools&lt;/a&gt; (13MB): &lt;strong&gt;c:\msdev\debug&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdl.microsoft.com/download/symbols/packages/windowsxp/WindowsXP-KB835935-SP2-slp-Symbols.exe"&gt;Windows XP with Service Pack 2 symbols&lt;/a&gt; (195MB)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then extend your environment&amp;rsquo;s LIB path by adding the &lt;em&gt;Visual Studio .NET 2003&lt;/em&gt; lib folder. &lt;em&gt;Visual Studio .NET 2003&lt;/em&gt; was installed during the former &lt;em&gt;.NET SDK&lt;/em&gt; installation, unfortunately the path, specified for the &lt;em&gt;.NET SDK&lt;/em&gt; is not taken as installation path for Visual Studio but the usual program folder is used instead, in my case &lt;code&gt;C:\Programme\Microsoft Visual Studio .NET 2003&lt;/code&gt;. Find out the path&amp;rsquo;s short name with &lt;code&gt;dir /X&lt;/code&gt; and add the following line with your specific path to the &lt;code&gt;setenv.cmd&lt;/code&gt; script below the three &lt;code&gt;call&lt;/code&gt; statements:&lt;/p&gt;</description></item><item><title>More Reverse Engineering</title><link>https://rumpf.eu/michael/posts/2005-07-06-more-reverse-engineering/</link><pubDate>Wed, 06 Jul 2005 09:26:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2005-07-06-more-reverse-engineering/</guid><description>&lt;p&gt;I did more reverse engineering on the &lt;em&gt;DataRecorder&lt;/em&gt; Windows tool that comes with the &lt;em&gt;TFA Klima-Logger&lt;/em&gt; hygrometer in order to find out which serial lines are used as input lines.&lt;/p&gt;
&lt;p&gt;The evaluation version of &lt;a href="http://www.hex-rays.com/idapro/"&gt;IDA Pro Disassembler and Debugger&lt;/a&gt; did a great job here. The only thing I had to do was to load the executable &lt;code&gt;DataRecorder.exe&lt;/code&gt; into the disassembler and find the places where the Win32 API function &lt;code&gt;GetCommModemStatus&lt;/code&gt; gets called. A search for the function name revealed two sub-routines inside the huge pile of Assembler code. Looking at the references to data segment constants it was quite easy to determine which of the two sub-routines was the Assembler version of &lt;code&gt;CI2CDriver::Sda()&lt;/code&gt; and which one was the Assembler version of &lt;code&gt;CI2CDriver::Scl()&lt;/code&gt;. The first sub-routine was referencing an error message&lt;/p&gt;</description></item><item><title>Intercepting Win32 API system calls</title><link>https://rumpf.eu/michael/posts/2005-07-03-intercepting-win32-api-system-calls/</link><pubDate>Sun, 03 Jul 2005 01:04:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2005-07-03-intercepting-win32-api-system-calls/</guid><description>&lt;p&gt;For reverse-engineering the Windows software of the &lt;em&gt;TFA Klima-Logger&lt;/em&gt; I tried to analyze the I2C protocol over the serial line by intercepting Win32 API system calls.&lt;/p&gt;
&lt;p&gt;Searching with Google about the topic &lt;em&gt;intercept Win32 function&lt;/em&gt; I stumbled over the Microsoft Research tool &lt;a href="http://research.microsoft.com/sn/detours/"&gt;Detours&lt;/a&gt; which was exactly what I was looking for. Version 1.5 of the tool is freely available for download and already comes with an example to intercept serial API system calls which served as a starting point for my serial communication interception library.&lt;/p&gt;</description></item><item><title>Linux support for TFA Klima-Logger</title><link>https://rumpf.eu/michael/posts/2005-07-02-linux-support-for-tfa-klima-logger/</link><pubDate>Sat, 02 Jul 2005 00:23:00 +0200</pubDate><guid>https://rumpf.eu/michael/posts/2005-07-02-linux-support-for-tfa-klima-logger/</guid><description>&lt;p&gt;&lt;strong&gt;Update 2012-03-01:&lt;/strong&gt;&lt;br&gt;
I just ordered 2 outdoor sensors and the plan is to connect the &lt;a href="http://www.tfa-dostmann.de/Bedienungsanleitungen/30.3015_e.pdf"&gt;Klima-Logger&lt;/a&gt; to a &lt;a href="http://www.raspberrypi.org/"&gt;Raspberry Pi&lt;/a&gt; Board to make the data available via browser on my home network. Here are some resources I found&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://oss.inqnet.at/trac/klimalogger/"&gt;https://oss.inqnet.at/trac/klimalogger/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://members.home.nl/xbasic/01c2249c770e62101/index.html"&gt;http://members.home.nl/xbasic/01c2249c770e62101/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/doc0670.pdf"&gt;http://www.atmel.com/dyn/resources/prod_documents/doc0670.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wetterstationsforum.de/phpBB/viewtopic.php?t=7605&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0&amp;amp;sid=472299c23b04447cc15aa92492c4a76f"&gt;http://www.wetterstationsforum.de/phpBB/viewtopic.php?t=7605&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0&amp;amp;sid=472299c23b04447cc15aa92492c4a76f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://web.student.tuwien.ac.at/~e9725348/Projects/klimalogger/"&gt;http://web.student.tuwien.ac.at/~e9725348/Projects/klimalogger/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Outdated:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I recently bought a hygrometer from &lt;a href="http://www.tfa-dostmann.de/TFA2003_englisch/"&gt;TFA-Dostmann&lt;/a&gt;, called &lt;a href="http://www.tfa-dostmann.de/Bedienungsanleitungen/30.3015_e.pdf"&gt;Klima-Logger&lt;/a&gt;. It is the cheapest thermometer and hygrometer with PC connectivity I could find on the market. Unfortunately only a Windows software is provided to get the recorded values for temperature and humidity. I thought a Linux driver would be cool and started searching for resources on the net.  Usually the Linux community is very fast in supporting new gadgets of any kind, but  nothing could be found.&lt;/p&gt;</description></item><item><title>About</title><link>https://rumpf.eu/michael/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/about/</guid><description>&lt;p&gt;I am a software engineer with over 40 years of hands-on experience, from 8-bit home computers to cloud-native microservices.&lt;/p&gt;
&lt;p&gt;My fascination for computers began in 1982 with a Sinclair &lt;a href="https://en.wikipedia.org/wiki/ZX81"&gt;ZX-81&lt;/a&gt;. After exploring home computers like the &lt;a href="https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A"&gt;TI-99 4/A&lt;/a&gt; and the &lt;a href="https://en.wikipedia.org/wiki/Commodore_VIC-20"&gt;VIC-20&lt;/a&gt;, I wrote my first BASIC program on a &lt;a href="https://en.wikipedia.org/wiki/Commodore_64"&gt;C64&lt;/a&gt; in 1985. I learned 8-bit assembler on the &lt;a href="https://en.wikipedia.org/wiki/Commodore_128"&gt;C128&lt;/a&gt;, then moved on to M68000 assembler and C on the &lt;a href="https://en.wikipedia.org/wiki/Amiga"&gt;Commodore Amiga&lt;/a&gt;, before transitioning to Turbo Pascal on PC/MS-DOS. From there I worked across many Windows and UNIX platforms, using C/C++ until adopting Java as my primary language around 2000.&lt;/p&gt;</description></item><item><title>Achievo</title><link>https://rumpf.eu/michael/projects/achievo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/achievo/</guid><description>&lt;p&gt;My role at &lt;a href="https://web.archive.org/web/20100108110134/http://www.achievo.de/"&gt;Achievo Deutschland AG&lt;/a&gt; was best described as &lt;em&gt;Technical Lead Software Development&lt;/em&gt;. My responsibilities included:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development process (offshore and nearshore)&lt;/li&gt;
&lt;li&gt;Software development guidelines&lt;/li&gt;
&lt;li&gt;Definition and compliance checking of quality gates&lt;/li&gt;
&lt;li&gt;Technical architecture&lt;/li&gt;
&lt;li&gt;Coaching of new developers&lt;/li&gt;
&lt;li&gt;Build process and continuous integration strategy&lt;/li&gt;
&lt;li&gt;WebSphere Application Server configuration and deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On customer projects I served as senior software architect.&lt;/p&gt;
&lt;h1 id="taco---transparent-analysis-and-cost-optimization"&gt;TACO - Transparent Analysis and Cost Optimization&lt;/h1&gt;
&lt;p&gt;The TACO project is a J2EE application which supports the purchasing process of car components for an automotive manufacturer.&lt;/p&gt;</description></item><item><title>Allowance</title><link>https://rumpf.eu/michael/projects/allowance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/allowance/</guid><description>&lt;p&gt;This application replaces manual paper-based allowance calculations on construction sites with computer-based data entry and reporting.&lt;/p&gt;
&lt;p&gt;At startup, the user selects a construction site before proceeding to the main menu.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/aufmassmain.png"&gt;&lt;img alt="Main Menu" loading="lazy" src="https://rumpf.eu/michael/images/aufmassmainsmall.png"&gt;&lt;/a&gt;
&lt;em&gt;Main Menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The first ten menu items provide functions for the collection of allowances. Each mask is preceded by a blueprint number and the resulting item number for the allowance.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/aufmassinfo.png"&gt;&lt;img alt="Information" loading="lazy" src="https://rumpf.eu/michael/images/aufmassinfosmall.png"&gt;&lt;/a&gt;
&lt;em&gt;Information&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/aufmasslbh.png"&gt;&lt;img alt="Input mask for length, width, and height" loading="lazy" src="https://rumpf.eu/michael/images/aufmasslbhsmall.png"&gt;&lt;/a&gt;
&lt;em&gt;Input mask for length, width, and height&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Amiga</title><link>https://rumpf.eu/michael/projects/amiga/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/amiga/</guid><description>&lt;p&gt;Several fun programs written in &lt;a href="https://en.wikipedia.org/wiki/Motorola_68000"&gt;68000 Assembler&lt;/a&gt; on the &lt;a href="https://en.wikipedia.org/wiki/Amiga"&gt;Commodore Amiga&lt;/a&gt;.
The purpose of these programs was simply to explore the Amiga&amp;rsquo;s hardware capabilities and to have fun.&lt;/p&gt;
&lt;p&gt;The programs below were tested on &lt;a href="http://www.amigaemulator.org/"&gt;Amiga Emulator UAE&lt;/a&gt; version 0.6.9 R12.&lt;/p&gt;
&lt;h1 id="misc"&gt;Misc&lt;/h1&gt;
&lt;p&gt;The small test application below moves five sprites and draws some lines using the processor only &amp;ndash; no Amiga custom chips are involved.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/5imageshuepflines.png"&gt;&lt;img alt="Five hopping sprites" loading="lazy" src="https://rumpf.eu/michael/images/5imageshuepflinessmall.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="vector"&gt;Vector&lt;/h1&gt;
&lt;p&gt;The first screenshot shows my first working vector graphics algorithm.&lt;/p&gt;</description></item><item><title>Automatic Zapit Satellite</title><link>https://rumpf.eu/michael/projects/azs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/azs/</guid><description>&lt;p&gt;This software provides a set of scripts for automatically generating DBox2 Neutrino channel lists &amp;ndash; a workaround for the automatic transponder scan, which does not work reliably on all DBox2 boxes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;utomatic &lt;strong&gt;Z&lt;/strong&gt;apit &lt;strong&gt;S&lt;/strong&gt;atellite (AZS) is a small collection of scripts that extract the &lt;a href="http://www.ses-astra.com"&gt;Astra&lt;/a&gt; digital TV and digital radio channel lists from internet sources and produce the &lt;code&gt;services.xml&lt;/code&gt; and &lt;code&gt;bouquets.xml&lt;/code&gt; files used by the Linux operating system on the DBox2 digital satellite receiver.&lt;/p&gt;</description></item><item><title>Autotexts</title><link>https://rumpf.eu/michael/projects/autotexts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/autotexts/</guid><description>&lt;p&gt;This project involved migrating WordBasic macros to VisualBasic for Applications (VBA).&lt;/p&gt;
&lt;p&gt;The company used a large set of Microsoft Word Autotext fragments to generate customer offers. Each fragment described one of their products, and an offer was simply a compilation of different fragments into a single Word document.&lt;/p&gt;
&lt;p&gt;The original program consisted of WordBasic scripts that inserted all Autotexts into a document for editing the product descriptions. My task was to convert these scripts to VisualBasic for Applications (VBA).&lt;/p&gt;</description></item><item><title>C64/C128</title><link>https://rumpf.eu/michael/projects/c64128/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/c64128/</guid><description>&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/Commodore_64"&gt;Commodore 64&lt;/a&gt; projects on this page were created while teaching myself the BASIC programming language and &lt;a href="https://en.wikipedia.org/wiki/MOS_Technology_6502"&gt;6502 Assembler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The files on this page were converted to the &amp;ldquo;Virtual Disk&amp;rdquo; format (.d64) using &lt;a href="http://sta.c64.org/cables.html"&gt;Trans64&lt;/a&gt; and an X1541 cable to connect an original C64 floppy drive to a PC.&lt;/p&gt;
&lt;h1 id="basic-arithmetics"&gt;Basic Arithmetics&lt;/h1&gt;
&lt;p&gt;This program served as both a calculator and a training tool for basic arithmetic.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/grundrechenarten1.png"&gt;&lt;img alt="Grundrechenarten 1" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten1small.png"&gt;&lt;/a&gt; &lt;a href="https://rumpf.eu/michael/images/grundrechenarten2.png"&gt;&lt;img alt="Grundrechenarten 2" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten2small.png"&gt;&lt;/a&gt; &lt;a href="https://rumpf.eu/michael/images/grundrechenarten3.png"&gt;&lt;img alt="Grundrechenarten 3" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten3small.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/grundrechenarten4.png"&gt;&lt;img alt="Grundrechenarten 4" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten4small.png"&gt;&lt;/a&gt; &lt;a href="https://rumpf.eu/michael/images/grundrechenarten5.png"&gt;&lt;img alt="Grundrechenarten 5" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten5small.png"&gt;&lt;/a&gt; &lt;a href="https://rumpf.eu/michael/images/grundrechenarten6.png"&gt;&lt;img alt="Grundrechenarten 6" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten6small.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/grundrechenarten7.png"&gt;&lt;img alt="Grundrechenarten 7" loading="lazy" src="https://rumpf.eu/michael/images/grundrechenarten7small.png"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Clearing and Settlement System</title><link>https://rumpf.eu/michael/projects/css/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/css/</guid><description>&lt;p&gt;The clearing and settlement solution was developed between September 2004 and June 2005 to process large volumes of chargeable events and produce files for carrying out the actual settlements with a bank.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/cssng.png"&gt;&lt;img alt="Architecture" loading="lazy" src="https://rumpf.eu/michael/images/cssng_small.png"&gt;&lt;/a&gt;
&lt;em&gt;Architecture&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My task in this project was to develop the Finance Calculation Service (FCS). The main design goal was to keep the interface as simple as possible and to avoid any dependencies on other components of the application. The workflow engine was responsible for orchestrating all the different services. It reads the financial base data from the database via the Finance Data Repository (FDR) and feeds those entities into the FCS API. The calculated results are then stored back into the database through the FDR. The design follows the dependency injection principle, where all data is fed into the FCS methods from the outside. This allows the service to run locally without requiring an EJB container or a database.&lt;/p&gt;</description></item><item><title>COM2CORBA</title><link>https://rumpf.eu/michael/projects/com2corba/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/com2corba/</guid><description>&lt;p&gt;An evaluation prototype for testing CORBA access from VisualBasic applications.&lt;/p&gt;
&lt;p&gt;The goal of this prototype was to evaluate whether a commercially available COM2CORBA bridge is suitable for accessing CORBA objects from a Microsoft COM application.&lt;/p&gt;
&lt;p&gt;The prototype was developed using an evaluation version of Orbix 2.3 for Windows NT and Sun Solaris, along with the IONA Orbix COMet COM2CORBA bridge.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/com2corba.png"&gt;&lt;img alt="COM2CORBA prototype architecture" loading="lazy" src="https://rumpf.eu/michael/images/com2corba_small.png"&gt;&lt;/a&gt;
&lt;em&gt;COM2CORBA prototype architecture&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The server component runs on Solaris 5 and provides access to a Fulcrum Search Server, an SGML indexing engine. The client is a VisualBasic search application running on Windows NT.&lt;/p&gt;</description></item><item><title>CORBA 2.2 Validator</title><link>https://rumpf.eu/michael/projects/validator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/validator/</guid><description>&lt;p&gt;A perl script that runs positive and negative test-cases against arbitrary IDL compilers for specification compliance checking.&lt;/p&gt;
&lt;p&gt;While learning CORBA, I wrote a set of IDL files and a script to check the compliance of an IDL parser.&lt;/p&gt;
&lt;p&gt;The files are separated into categories of valid and invalid IDL fragments. A Perl script picks up the different IDL files and feeds them to the IDL compiler. If the compiler fails on a valid file, or does not fail on an invalid file, the script terminates and reports an incompatibility in the IDL parser under test.&lt;/p&gt;</description></item><item><title>CORBA/CGI Bridge</title><link>https://rumpf.eu/michael/projects/corbacgi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/corbacgi/</guid><description>&lt;p&gt;The CORBA/CGI bridge is an evaluation prototype for testing how a CGI application can be replaced by CORBA components.&lt;/p&gt;
&lt;p&gt;The idea behind this prototype was to replace a CGI application that accessed a server-side application with a CORBA layer. The client application had to remain unchanged, as its source code was not available.&lt;/p&gt;
&lt;p&gt;In the first step, the CGI application was replaced by a Java servlet deployed on Sun&amp;rsquo;s Java Web Server. At this stage, the servlet still accessed the server application by executing a command-line script.&lt;/p&gt;</description></item><item><title>DOS International</title><link>https://rumpf.eu/michael/projects/dos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/dos/</guid><description>&lt;p&gt;This article, published in a German PC magazine called &amp;lsquo;DOS International&amp;rsquo;, was written during a summer C++ course at Saarland University.&lt;/p&gt;
&lt;p&gt;&lt;img alt="DOS International" loading="lazy" src="https://rumpf.eu/michael/images/dos993.png"&gt;&lt;/p&gt;
&lt;p&gt;Initially, it was intended as a submission for a contest to write a useful program in just 1024 bytes. The prize was 1024 Deutsche Mark, but unfortunately the program was considered too specialized to be generally useful. However, the contribution was later reused in the magazine&amp;rsquo;s programmer&amp;rsquo;s corner: &amp;rsquo;tips and tricks for programmers&amp;rsquo;.&lt;/p&gt;</description></item><item><title>Energy Cost Calculation</title><link>https://rumpf.eu/michael/projects/eccalc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/eccalc/</guid><description>&lt;p&gt;An application for comparing the cost of traditional power supply against a power generator.&lt;/p&gt;
&lt;p&gt;The &amp;lsquo;Energy Cost Calculation&amp;rsquo; application was used by the sales department of a company selling electrical generators and standby sets. A sales representative&amp;rsquo;s typical task was to compare the efficiency and potential savings of an electrical generator against a standard power supply. This application automates most of the steps that previously had to be done by hand.&lt;/p&gt;</description></item><item><title>Homepage</title><link>https://rumpf.eu/michael/projects/homepage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/homepage/</guid><description>&lt;p&gt;The Homepage project shows the evolution of this website.&lt;/p&gt;
&lt;p&gt;The first version of the homepage was simply a project to teach myself HTML. Since version 2.0 I started using it as an online reference page when applying for a new job.&lt;/p&gt;
&lt;h1 id="version-10-199---199712"&gt;Version 1.0 (199?/?? - 1997/12)&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/homepage1.png"&gt;&lt;img alt="Homepage 1.0" loading="lazy" src="https://rumpf.eu/michael/images/homepage1small.png"&gt;&lt;/a&gt;
&lt;em&gt;Homepage 1.0&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The menu in this version was rendered with the 3D ray-tracing application Lightwave 3D on the Amiga. The big disadvantage of using a full blown image as a menu, is that the menu took a long time to load at the time when 28.8 Modems were state of the art.&lt;/p&gt;</description></item><item><title>IBM</title><link>https://rumpf.eu/michael/projects/ibm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/ibm/</guid><description>&lt;h1 id="daimler-vehicle-backend"&gt;Daimler Vehicle Backend&lt;/h1&gt;
&lt;p&gt;In June 2018 I started as migration lead to move all microservices from the traditional data center to a modern cloud-based environment. The primary objective was to migrate each microservice without impacting customers. A sophisticated Netflix Eureka synchronization mechanism was established to make the transition seamless for microservices, regardless of whether their peers were still running in the data center or had already been moved to the cloud.
This also included a bridge for mirroring messaging middleware traffic from the data center to several cloud-based solutions.&lt;/p&gt;</description></item><item><title>Inventory Management</title><link>https://rumpf.eu/michael/projects/inventory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/inventory/</guid><description>&lt;p&gt;A solution to create offers from product description fragments, stored in an MS Access database.&lt;/p&gt;
&lt;p&gt;This prototype grew out of the VBA project &lt;a href="https://rumpf.eu/michael/projects/autotexts/"&gt;Autotexts&lt;/a&gt;. The Microsoft Word Autotext solution did not scale, was unsuitable for concurrent access, and made it difficult to maintain the set of Autotext fragments in a simple Word document template. The company expressed interest in a more professional solution but ultimately decided to go with an already established application.&lt;/p&gt;</description></item><item><title>Knowledge Now 2</title><link>https://rumpf.eu/michael/projects/kn2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/kn2/</guid><description>&lt;p&gt;My diploma thesis project, focused on CORBA and distributed components. The thesis paper is available as a PDF download below, unfortunately only available in German.&lt;/p&gt;
&lt;p&gt;The thesis was written in LaTeX and converted to a fully featured PDF document with pdfTeX, including links, page preview thumbnails, and a table of contents overview.&lt;/p&gt;
&lt;p&gt;While working on this project, the following smaller spin-off tools were written:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DDEExecute&lt;/strong&gt;
A command-line tool for issuing &lt;a href="http://msdn.microsoft.com/library/default.asp?url=https://rumpf.eu/michael/library/en-us/winui/winui/windowsuserinterface/dataexchange/dynamicdataexchange.asp"&gt;Dynamic Data Exchange&lt;/a&gt; (DDE) commands to applications that support this Windows API.&lt;/p&gt;</description></item><item><title>Mercedes-Benz AG</title><link>https://rumpf.eu/michael/projects/mercedesbenz/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/mercedesbenz/</guid><description>&lt;h1 id="mercedes-intelligent-cloud-mic"&gt;Mercedes Intelligent Cloud (MIC)&lt;/h1&gt;
&lt;p&gt;As Chief Architect for the Mercedes Intelligent Cloud, I am responsible for defining the platform&amp;rsquo;s technical direction and long-term architecture.&lt;/p&gt;
&lt;p&gt;The MIC follows a multicloud strategy spanning Microsoft Azure and AWS, underpinned by a true zero trust model for all inter-service communication. Rather than building central platform teams that risk becoming bottlenecks, we deliver architecture as blueprints, giving DevOps teams full autonomy over their deployments.&lt;/p&gt;
&lt;p&gt;A core principle is shift left: enabling DevOps teams to work directly with cloud services and equipping them with the right tooling to strengthen their security posture. GitLab Ultimate serves as our single-tool strategy, reducing cognitive load and allowing teams to stay focused on delivering business value.&lt;/p&gt;</description></item><item><title>Micro Aggregation Engine (MAGGIE)</title><link>https://rumpf.eu/michael/projects/maggie/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/maggie/</guid><description>&lt;p&gt;The MAGGIE prototype was developed as a showcase for the New York public transport agency, demonstrating how RFID-based credit card payments could be used to purchase subway tickets.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;M&lt;/strong&gt;icro &lt;strong&gt;AGG&lt;/strong&gt;regat&lt;strong&gt;I&lt;/strong&gt;on &lt;strong&gt;E&lt;/strong&gt;ngine prototype demonstrates the concept of aggregating small transaction amounts into larger values before settling them against a traditional payment backend such as a credit card or bank account. This kind of system is useful in markets with very low transaction amounts, where immediate settlement fees would exceed the actual transaction value.&lt;/p&gt;</description></item><item><title>MR Computer</title><link>https://rumpf.eu/michael/projects/mrcomputer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/mrcomputer/</guid><description>&lt;p&gt;This application was developed to support a small business in selling hardware.&lt;/p&gt;
&lt;p&gt;A customer orders one or more hardware items, and the user enters the order into the application.&lt;/p&gt;
&lt;p&gt;The user can choose hardware items from different dealers. The software automatically splits the order into separate orders per dealer, based on the user&amp;rsquo;s item selection.&lt;/p&gt;
&lt;p&gt;When items arrive from the dealers, they are marked as delivered and then appear on the invoices generated for each customer.&lt;/p&gt;</description></item><item><title>Offer</title><link>https://rumpf.eu/michael/projects/offer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/offer/</guid><description>&lt;p&gt;This application replaced an old, hard-to-use host-based system for creating offers for electrical power generators, providing a much simpler interface.&lt;/p&gt;
&lt;p&gt;It was developed to support a sales department in selling electrical generators and standby sets.&lt;/p&gt;
&lt;p&gt;The user chooses a generator model and selects various components from a list. The selection is driven by customer-defined requirements.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/angebot3.png"&gt;&lt;img alt="Main Menu" loading="lazy" src="https://rumpf.eu/michael/images/angebot3small.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Main Menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The menu item &amp;lsquo;Create Offer&amp;rsquo; leads the user to a screen where the selection of the generator base model and the optional components takes place.&lt;/p&gt;</description></item><item><title>Orbit Resource</title><link>https://rumpf.eu/michael/projects/orbit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/orbit/</guid><description>&lt;p&gt;A link collection which was created while doing research about the ORBit CORBA ORB.&lt;/p&gt;
&lt;p&gt;The CORBA ORB &amp;lsquo;ORBit&amp;rsquo; spawned a large number of spin-off projects, with information scattered across many different websites. That was the motivation for creating an &lt;a href="https://web.archive.org/web/20170815195940/http://orbit-resource.sourceforge.net/"&gt;ORBit resource page&lt;/a&gt; on SourceForge to serve as a central link collection for all those projects.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/orbit-resource.png"&gt;&lt;img alt="ORBit Resource Collection" loading="lazy" src="https://rumpf.eu/michael/images/orbit-resource_small.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;ORBit Resource Collection&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;With the arrival of the ORBit2 project, interest in the old ORBit version has faded, and the page is no longer maintained.&lt;/p&gt;</description></item><item><title>ORBit Time Service</title><link>https://rumpf.eu/michael/projects/time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/time/</guid><description>&lt;p&gt;A CORBA TimeService implementation developed for a CORBA ORB with C language mapping.&lt;/p&gt;
&lt;p&gt;When I started using Linux on the desktop, I got interested in the small and efficient CORBA ORB called ORBit. The distributed component architecture &lt;a href="http://www.omg.org/" title="Common Object Request Broker Architecture"&gt;CORBA&lt;/a&gt; is the default inter-process communication protocol used in the &lt;a href="http://www.gnome.org/" title="GNU Network Object Model Environment"&gt;GNOME&lt;/a&gt; desktop project.&lt;/p&gt;
&lt;p&gt;To teach myself the &lt;a href="http://www.omg.org/technology/documents/formal/c_language_mapping.htm"&gt;CORBA C Language Mapping&lt;/a&gt; that ORBit provides, I wrote the CORBA &amp;lsquo;TimeService&amp;rsquo; on top of the ORBit ORB.&lt;/p&gt;</description></item><item><title>Path Editor</title><link>https://rumpf.eu/michael/projects/patheditor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/patheditor/</guid><description>&lt;p&gt;A graphical user interface for defining vehicle pathways with real-time control features.&lt;/p&gt;
&lt;p&gt;This application was developed during a practical course on real-time systems at Saarland University. The course assignment was to build a vehicle with a real-time controller system. I was responsible for the GUI editor used to create paths for the vehicle to follow. Nikolaus Gerteis handled the hardware and Roland Schlosser developed the micro-controller application.&lt;/p&gt;
&lt;p&gt;The 80C166 micro-controller with its various I/O channels implements the fundamental real-time principle of &amp;ldquo;Input, Processing, and Output.&amp;rdquo;&lt;/p&gt;</description></item><item><title>PCon 1.2</title><link>https://rumpf.eu/michael/projects/pcon12/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/pcon12/</guid><description>&lt;p&gt;An application for monitoring productivity in small to medium-sized businesses in the manufacturing industry.&lt;/p&gt;
&lt;p&gt;The software was used to provide controlling services to customer companies, primarily regional shoe manufacturers. Collected productivity data was analyzed on a daily, monthly, quarterly, and yearly basis, helping customers improve the efficiency of their manufacturing processes.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/pcon12main.png"&gt;&lt;img alt="Main Window" loading="lazy" src="https://rumpf.eu/michael/images/pcon12mainsmall.png"&gt;&lt;/a&gt;
&lt;em&gt;Main Window&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The program uses a numbering system to classify the different data collections. The numbering encodes the hierarchical structure of the company and its departments. Each department is assigned a 3-part number, where each part represents a level in the organizational structure.&lt;/p&gt;</description></item><item><title>PCon 3.0</title><link>https://rumpf.eu/michael/projects/pcon30/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/pcon30/</guid><description>&lt;p&gt;A ground-up rewrite of the productivity controlling application 1.2 using the Microsoft Foundation Classes (MFC), aimed at achieving a more polished look and feel and simplifying the user interface.&lt;/p&gt;
&lt;p&gt;Version 3.0 introduced the following changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a flexible employee model (individual employees, groups, and machines).&lt;/li&gt;
&lt;li&gt;Added support for data terminals.&lt;/li&gt;
&lt;li&gt;Implemented a traceability system for base data.&lt;/li&gt;
&lt;li&gt;Added flexible task types (single, combined, group, and long-running).&lt;/li&gt;
&lt;li&gt;Used DAO (Data Access Objects) for database access.&lt;/li&gt;
&lt;li&gt;Implemented a streamlined installation procedure.&lt;/li&gt;
&lt;li&gt;Added employee data import from ERP systems.&lt;/li&gt;
&lt;li&gt;Used Crystal Reports V5.0 for reporting.&lt;/li&gt;
&lt;li&gt;Added flexible customer management.&lt;/li&gt;
&lt;li&gt;Extended Win32 API support.&lt;/li&gt;
&lt;li&gt;Removed the hard-to-understand numbering system.&lt;/li&gt;
&lt;li&gt;Dropped the hour type concept, as it was inconsistent with the productivity calculations.&lt;/li&gt;
&lt;li&gt;Dropped the macro system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/pcon30main.png"&gt;&lt;img alt="Main Window" loading="lazy" src="https://rumpf.eu/michael/images/pcon30main_small.png"&gt;&lt;/a&gt;
&lt;em&gt;Main Window&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PCon 3.5</title><link>https://rumpf.eu/michael/projects/pcon35/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/pcon35/</guid><description>&lt;p&gt;This extension of Productivity Controlling 3.0 added concurrent multi-user access to the application.&lt;/p&gt;
&lt;p&gt;The most important feature in version 3.5 of the &lt;a href="https://rumpf.eu/michael/projects/pcon30/"&gt;Productivity-Controlling (PCon)&lt;/a&gt; application is concurrent user support. The original design did not allow multiple users to access the Microsoft Access database at the same time. Since Access itself does not provide concurrent access capabilities, the most practical fix was to introduce a DCOM server component that monitors database access and keeps track of active connections.&lt;/p&gt;</description></item><item><title>Person to Person Payment</title><link>https://rumpf.eu/michael/projects/ppy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/ppy/</guid><description>&lt;p&gt;An application for mobile phone-based money transfers.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;P&lt;/strong&gt;erson to &lt;strong&gt;P&lt;/strong&gt;erson pa&lt;strong&gt;Y&lt;/strong&gt;ment (PPY) prototype was developed in just one week as a showcase demonstrating how a traditional money transfer system could be extended with a mobile phone channel, using SMS to send money orders.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/ppy.png"&gt;&lt;img alt="PPY Transaction List" loading="lazy" src="https://rumpf.eu/michael/images/ppy_small.png"&gt;&lt;/a&gt;
&lt;em&gt;PPY Transaction List&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My task was to build the web channel for the PPY prototype. XHTML and CSS, together with Java Server Pages (JSP) and the JSP Standard Tag Library (JSTL), were chosen for developing the page templates. The page flow was kept as simple as possible. Beyond demonstrating the functionality to end users, the prototype&amp;rsquo;s goal was to build experience with graphical user interfaces, since our team had historically focused on server-side software with little or no UI work.&lt;/p&gt;</description></item><item><title>Publish C/S</title><link>https://rumpf.eu/michael/projects/publish/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/publish/</guid><description>&lt;p&gt;Distribution of documents to a remotely hosted web application.&lt;/p&gt;
&lt;p&gt;The goal of this application was to provide an administration interface for a web-based information database for expatriates. The interface was used to upload new content to the server systems hosted in Chicago, Illinois, USA.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/publish.png"&gt;&lt;img alt="CountryNet Manager Architecture" loading="lazy" src="https://rumpf.eu/michael/images/publish_small.png"&gt;&lt;/a&gt;
&lt;em&gt;CountryNet Manager Architecture&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The information presented by the application comes from SGML documents indexed by a Fulcrum SearchServer. To update these SGML documents, an administration interface called &lt;em&gt;CountryNet Manager&lt;/em&gt; was developed.&lt;/p&gt;</description></item><item><title>Seminar</title><link>https://rumpf.eu/michael/projects/seminar/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/seminar/</guid><description>&lt;p&gt;A presentation about &amp;lsquo;Approaches for the integration of distributed computation into the WWW&amp;rsquo;&lt;/p&gt;
&lt;p&gt;This paper gives an overview of different architectures for smoothly integrating distributed computation into the World Wide Web (WWW). Of the four approaches presented, three address integration at a very basic level. The fourth deals with higher-level problems such as referential integrity and migration transparency.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;University Presentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment&lt;/td&gt;
&lt;td&gt;Sun Solaris, LaTeX, pdfTeX, vi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link&lt;/td&gt;
&lt;td&gt;&lt;a href="https://rumpf.eu/michael/files/slides.pdf"&gt;slides.pdf&lt;/a&gt; (287kB) &lt;a href="https://rumpf.eu/michael/files/report.pdf"&gt;report.pdf&lt;/a&gt; (430kB)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>SMPPPD Web</title><link>https://rumpf.eu/michael/projects/smpppd-web/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/smpppd-web/</guid><description>&lt;p&gt;An extension of the web interface to the SuSE Meta PPP Daemon.&lt;/p&gt;
&lt;p&gt;Christopher Hofmann created a web-based front-end for the SuSE Meta PPP Daemon (SMPPPD). &lt;a href="http://www.suse.de/~cwh/"&gt;smpppd-web&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://rumpf.eu/michael/images/smpppd-web1small.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://rumpf.eu/michael/images/smpppd-web2small.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://rumpf.eu/michael/images/smpppd-web3small.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://rumpf.eu/michael/images/smpppd-web4small.png"&gt;&lt;/p&gt;
&lt;p&gt;My extension to the original codebase was to support adding and removing ISDN links on the fly and allowing dial-on-demand of ISDN interfaces.&lt;/p&gt;
&lt;p&gt;My primary user only spoke German, so I added gettext support to the application and translated all texts into German as well.&lt;/p&gt;</description></item><item><title>T-Systems</title><link>https://rumpf.eu/michael/projects/tsystems/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/tsystems/</guid><description>&lt;p&gt;During my time at T-Systems I worked on the following projects:&lt;/p&gt;
&lt;h1 id="daimler-vehicle-backend"&gt;Daimler Vehicle Backend&lt;/h1&gt;
&lt;p&gt;In early 2013, I started as the architect of the Vehicle Homepage project, which is part of the Daimler Vehicle Backend. The entire solution was originally designed on top of an enterprise service bus and application server ecosystem. In 2015, we began a major refactoring of the platform, splitting the monolithic services into smaller microservices using the Spring Boot, Spring Cloud, and Netflix OSS stack. In 2018, this refactoring was completed as a prerequisite for moving the whole system from a traditionally operated data center to a hybrid cloud setup.&lt;/p&gt;</description></item><item><title>Telefax</title><link>https://rumpf.eu/michael/projects/fax/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/fax/</guid><description>&lt;p&gt;This application is a wrapper around an MS-DOS fax program, providing a set of fax templates for a fixed set of recipients.&lt;/p&gt;
&lt;p&gt;The &amp;lsquo;Telefax 1.0&amp;rsquo; application is an extension of an MS-DOS-based fax program.&lt;/p&gt;
&lt;p&gt;Recipient addresses are stored in a plain text file and loaded by the application at startup. Each record is mapped to a function key (F1-F10). This makes the application somewhat restrictive, but the requirement was that only a small number of business partners would receive faxes.&lt;/p&gt;</description></item><item><title>Twister</title><link>https://rumpf.eu/michael/projects/twister/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/twister/</guid><description>&lt;p&gt;A J2EE/C++ application server running on six different operating-system platforms.&lt;/p&gt;
&lt;p&gt;In April 2000, I joined the Twister core team of the Brokat Server Technology Division (STD), where the J2EE Application Server &amp;ldquo;Twister&amp;rdquo; was being developed.&lt;/p&gt;
&lt;p&gt;At the time, the server was sold as an independent product. Unfortunately, in 2001 the decision was made to stop competing with the big players and to use the server as a platform for internal customers only. That remained the state of the product until July 2004, when the final decision was made to discontinue development of the Twister J2EE application server and move to the BEA WebLogic platform instead.&lt;/p&gt;</description></item><item><title>WebCam</title><link>https://rumpf.eu/michael/projects/webcam/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://rumpf.eu/michael/projects/webcam/</guid><description>&lt;p&gt;A webcam based on AMIGA M-JPEG digitizer hardware and a collection of scripts to upload the images to an FTP account.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rumpf.eu/michael/images/webcamuploader.png"&gt;&lt;img alt="Main Window" loading="lazy" src="https://rumpf.eu/michael/images/webcamuploader_small.png"&gt;&lt;/a&gt;
&lt;em&gt;Main Window&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This project was an attempt to build a webcam from existing hardware, since professional webcams were very expensive at the time.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hi8 video camera&lt;/li&gt;
&lt;li&gt;Amiga 4000&lt;/li&gt;
&lt;li&gt;VLab Motion, a Motion-JPEG digitizer card&lt;/li&gt;
&lt;li&gt;Parallel port connection (PC2Amiga) to the PC&lt;/li&gt;
&lt;li&gt;Windows PC&lt;/li&gt;
&lt;li&gt;AOL &amp;lsquo;50 hours free&amp;rsquo; internet access&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The video camera is connected to the digitizer board on the Amiga. The digitizer software is controlled by an ARexx script that takes a picture every five seconds and sends it via the PC2Amiga client over the parallel port to the PC. On the PC, a VisualBasic application using the Inet ActiveX control uploads the file to an Internet FTP account. On the server, a cron job moves the uploaded file to a folder on a web server, where it can be viewed in a browser.&lt;/p&gt;</description></item></channel></rss>