Andri Krämer

Discover the projects I’ve brought to life over the years! Some may be a bit dated, but I found it fascinating to journey back in time and revisit the challenges that felt essential to tackle back then.

Projects

G Patient Patient Ohr Ohr Teltax Teltax PublicSecrets PublicSecrets WiiMIDIi WiiMIDIi Gschichtefritz Gschichtefritz Gschichtefritz App Gschichtefritz App Gschichtefritz--Gschichtefritz App gschichtefritz.ch legacy gschichtefritz.ch legacy Gschichtefritz--gschichtefritz.ch legacy gschichtefritz.ch current gschichtefritz.ch current Gschichtefritz--gschichtefritz.ch current VisualMix VisualMix Gschichtefritz--VisualMix Dino Stampf Deep Learning Dino Stampf Deep Learning Gschichtefritz--Dino Stampf Deep Learning Gschichtefritz App--gschichtefritz.ch legacy Gschichtefritz App--gschichtefritz.ch current Brainwaver: Pink Noise Brainwaver: Pink Noise batGPT batGPT

Patient

1991 - 1994

Early DOS software for patient management

My first software that was used productively was called ‘Patient’. I wrote it as a teenager in Turbo Pascal for my mother, who, in addition to being a housewife, also worked part-time as a self-employed physiotherapist. The DOS application was multicolored and could be operated with a mouse. We had an Intel 80386 DX 20 MHz computer with a 1 GB hard drive and a simple dot-matrix printer. With my patient management software, one could not only schedule appointments and do the accounting, but also directly fill out the yellow forms that had to be submitted to the disability insurance (IV) for billing. At the time, my mother was probably the only physiotherapist who sent forms to the insurance not handwritten but neatly filled out by a printer 😀.

Patient menu screenshot

The completely exaggerated title ‘Physikalisch-Therapeutisches Institut Ruth Krämer & Co.’ was, of course, meant as a family insider joke.

Patient detail screenshot

Ohr

1992 - 1994

Ear trainer for musicians

Music was always my great love. After high school, I went to the Jazz School in Lucerne, but later decided to pursue a degree in computer science at ETH Zurich. Ear training is essential in music, so I programmed ‘Ohr’, a software for ear training, which allowed users to practice recognizing intervals, chords and their inversions, scales, and so on. To make it possible to practice on the go (laptops didn’t exist yet), the software included a feature for creating exercises that could be recorded directly onto cassette. In parallel, the solutions were printed out so that one could practice with a Walkman and a sheet of paper wherever they wanted. The Sound Blaster card was the first to support speech synthesis and could be used with a text-to-speech command-line tool c:\sb\sbtalker\say.exe. So, to keep track during practice, every 10 exercises were announced.

Soundblaster

Teltax

1995 - 1999

Dial-In modem costs calculator and splitter

To access the internet back then, you had to dial in via a modem over the phone line. There was a basic charge for establishing the connection and a per-minute fee with three different time-based pricing levels. Internet costs could quickly become very high, and if you lived in a shared apartment or worked remotely for an employer, you needed to know for each ‘internet session’ when it happened, how long it lasted, and who would be responsible for paying at the end of the month.

That’s exactly why I wrote Teltax. It was activated each time a modem connection ended, allowing you to specify whose account the costs should be charged to. The details were read from the technical log of the Win95 modem driver (e.g., c:\win95\ModemLog_Zeus 336E External 33600 Fax Modem.txt). Then, the costs were calculated based on the three different price levels and written into a log file. At the end of the billing period, a total cost per user was calculated. Additionally, the data volume was analyzed, and the cost per megabyte was calculated. Since charges were based on time rather than data volume back then, the goal was, of course, to keep the cost per megabyte as low as possible by truly using the connection and not keeping it open for too long.

Teltax summary screenshot

PublicSecrets

1997 - 2007

The really social network before social networks

The World Wide Web was still in its infancy. There was no Google, no PHP, no WordPress, and no Facebook. But there was PublicSecrets—a blend of social networking and productivity platform. I began developing PublicSecrets in 1997 and continued to expand it over the years. It was used by all of my friends and even friends of friends

Features

OpenAlbum
Put your photos online. Select from different style templates. Decide whether the album should be public, restricted to PublicSecrets users, restricted to your friends, to a list of friends or private (‘secret’). Create slideshows. Get user comments. Add ‘order picture’ button (for print orders) and even use an album as gift list for weddings or birthdays (add ‘I give this to you as a present’ button that disappears when somebody has already clicked it). OpenAlbum provides detailed access statistics.

Years later, similar services such as Picasa (acquired by Google in 2004) were launched.

Address Book
Add entries and decide which of your friends you want to share each entry with. Duplicates are actively avoided: If you add an address that a friend has already added, you’ll gain access to the existing record instead of creating a duplicate. All friends have read and write access to shared records, ensuring that the data remains well-maintained and up-to-date. You’ll never forget a friend’s birthday, as PublicSecrets sends you email reminders and displays a list of upcoming birthdays after you log in. Addresses can also be grouped into address lists.
Bookmarks
Individual bookmarks / links can be shared and grouped hierarchically. The bookmark check tool reports invalid/outdated bookmarks.

PublicSecrets Bookmarks screenshot. btw: the color theme was customizable…
Notes
Manage your personal notes.
PSMail
PublicSecrets Mail is a webmail client allowing you to create new mail accounts or registering existing (third-party) e-mail accounts. It provides full text search capabilities, shared e-mail accounts, aliases, mailing list management, virus scanning, spam filtering and folders.

PSMail was available long before Gmail or Yahoo Mail.

PSFile
Files can be shared with other PublicSecrets users. All uploads are scanned for viruses. Files can be encrypted using individual passphrases. PSFiles can also be attached to PSMail messages.

The PSFile cloud file store was already available when the word ‘cloud’ had no other meaning and there was no Google Drive, Dropbox or Microsoft OneDrive.

PSEvent
For the legendary Würstli Wednesday events, I built a somewhat sophisticated event management system into PublicSecrets. It works like this: You can define a new event in PS, including a description, date, time, etc. Afterwards, you add items (e.g., beer, potato chips, potato salad) to the event and determine how many participants are needed per item (e.g., potato chips for every 3 participants, potato salad for every 10 participants, etc.). Using the PS address book, you can invite guests and send them an invitation via PSMail. On the event homepage, guests can sign up or opt-out. For events with gadgets, each guest can see which gadgets are currently needed and select which one(s) they would like to bring themselves. All guests can see who has signed up or opted out and who is bringing what. The ultimate tool for “self-organizing parties”.
PSAccounting
Create a cash book, assign people from your address book as members and start your shared accounting. Each entry has a date, an amount, a member involved as creditor and one or more involved as debtors. At each moment, any member can see the current total of expenses and debts and how much who would have to pay to whom in order to re-balance the account (pay off all debts with the smallest number of transactions).
This was exactly what later became popular with apps like Splittr - but years before the iPhone was invented.
PSDocs
Upload any zipped documentation. It gets unzipped and indexed by the built-in full-text search engine.
The best thing, software develpers could dream of at that time to quickly browse JavaDocs etc.
PS GarbageAlert
Reminds you of the waste paper or cardboard collection dates for the district you live in. Only for Zurich.

Years later, ERZ (Entsorgung + Recycling Zürich) came up with a similar service.

PSVote
Ideas for extensions are proposed here and all users can vote on them.

PublicSecrets was written in ColdFusion and ran on a Windows NT server.

WiiMIDIi

2007 - 2008

Using a Nintendo Wiimote for guitar motion sensing and converting accelerometer data to MIDI

For our concerts with Amtsbladt, a Swiss electro-pop duo where I was responsible for composition and music, and my friend Phil handled lyrics and vocals, I wrote software to convert the movements of the guitar neck into MIDI signals. I had attached a Wiimote to the guitar head. With quick movements in different directions, I could trigger samples, and with slower movements, I could control parameters of the guitar effects. In addition, I could use the Wiimote buttons to control Ableton Live (start tracks). There’s nothing more boring at concerts than guys on stage sitting behind a laptop. As an audience member, you have no idea if what they’re doing has anything to do with what you’re hearing or if they’re just checking their emails or stock prices. That’s why I was behind the guitar and not behind a computer.

For the Guitar Rig Hero Contest by Native Instruments, I demonstrated my setup in a rather silly video 🤣.

Watch WiiMIDIi demo on YouTube

Watch WiiMIDIi demo on YouTube

Gschichtefritz

2009 -

Audio stories with songs for children

Under the artist pseudonym ‘Gschichtefritz’, I wrote over 70 Swiss-German audio stories with songs. I narrated each story, sang the songs, and produced everything in my own studio. My distribution method was one of a kind: each story was prepared on-demand, complete with a personal dedication in the introduction. For example, “This story is for Anna, a gift from Uncle Fred.” The stories were available on CD and/or as MP3 downloads, with payment on a voluntary, pay-what-you-want basis. This system was supported by sophisticated software, which I developed and continuously enhanced over 15 years with new features.

However, as CDs became less popular over time and I wanted to streamline my involvement, I made a pivotal change in 2023. I decided to end the physical distribution and personal dedications. Instead, I rebuilt the software from the ground up on a new technology stack, focusing on core features. Therefore, I now distinguish between two projects: ‘gschichtefritz.ch legacy’ and ‘gschichtefritz.ch current’.

‘De Blaui Dino’ and ‘Roboter Beni’ are loved by thousands of children in Switzerland.

Gschichtefritz App

2020 -

Gschichtefritz audiobook player app for iOS and Android

Gschichtefritz offered MP3s from the very beginning. However, with the rise of streaming services, it became clear that customers were finding it increasingly challenging to download MP3s and transfer them to iPods, tablets, or smartphones. To address this issue, I developed a player app in 2020. The free Gschichtefritz App lets you download all your stories, so you can listen to them offline whenever you want. It’s also designed to be easily operated by young children, even those who can’t read yet.

Framework: Xamarin, since 2023: Maui
Programming Language: C#
Platforms: iOS and Android

Gschichtefritz App Screenshot

gschichtefritz.ch legacy

2009 - 2023

CRM, shop, CD burner automation, accounting, and more

Some numbers (2009-2023):

  • Total orders: ~55’000
  • Total CDs burned and shipped: ~75’000
  • Total stories ordered: ~200’000
  • Although payment was optional, about 80% of CDs and 70% of MP3s delivered sooner or later were paid for (with the amount chosen by the customer)

Read countless testimonials from enthusiastic customers (in German).

The legacy gschichtefritz.ch code was written in Java and included a wide range of modules and functionalities. Here’s an overview.

mindmap
  root((GF legacy))
    Shop
      Regular Shop
      Promo & Event Shops
        Live orders at events
      Coupons
      Mass Orders for institutions
      FB & Insta integration
    Website
      News: live sync from FB
      Childrens drawings album: sync from FB 
      Live Events
      Static CMS Pages
    Email
      Shop related Emails
      Newsletters
      Reminders
    App Backend
    Vaadin Admin UI
    Accounting
      Processing
        TWINT
        QR Bill
        Stripe
        Paypal
        Postfinanace
        camt files
      Double entry bookkeeping
      Reporting
      Annual financial statements
        Balance sheet
        Income statement
    Audiostore
      Audioautogram
        Recording
        Delivery
      Story
        Concatenation
        WAV & MP3 Encoding
    Delivery Factory Client
      CD Burning
      Printing Letters
    PDF
      Letters & Invoices
      Coloring pages
    Inventory

gschichtefritz.ch current

2024 -

Shop and App backend

The current gschichtefritz.ch code is written in Python, utilizing FastAPI and Pydantic. It went live in January 2024. Functionality and complexity have been minimized. Payment options have been simplified to QR bill only. Accounting continues to be managed with the legacy software. With digital delivery only and no more personalized audio autographs, the entire process now runs fully automated, without any human interaction.

Here’s an overview.

mindmap
  root((GF current))
    Shop
      Login
      QR Bill
        Delivery: PDF
        Processing: Activate order
      MP3 Download
    Website
    Email
      Shop related Emails
    App Backend
      Onboarding
      Delivery

VisualMix

2022 - 2022

Mix and arrangement of a song visualized

Idea

In 2022, I recorded a new song with the same friends with whom I had recorded the Dino Songs CD ten years earlier: “10 chlini Rägetropfe” (10 Little Raindrops). The song has great dynamics and a varied arrangement, making it quite tricky to hear exactly when each instrument comes in or drops out. That’s how I got the idea to make this visible for listeners in a video! During my readings at schools, I like to explain to students how multitrack recording works and then show them the video. Below, I’ll briefly explain how I did it.

Tracks

The song consists of 9 audio tracks: vocals, 3 guitar tracks, bass, accordion, piano, harmonica, and drums. Strictly speaking, the drum track is a so-called group track, which itself is made up of several individual tracks (bass drum, snare, etc.) as well as additional percussion tracks (tambourine, etc.). For simplicity (and because it’s not possible to record them separately with an acoustic drum kit), these have been combined into a single track.

Track analysis

In the first step, I calculated the volume information (RMS values) from each track, as I’ll need this for the animation later. Here’s what that looks like: Tracks and instruments The diagram shows the volume of each track over the entire duration of the song, indicating when and how loudly each one is present in the mix. I also assigned an appropriate instrument image to each track (for the vocals: a microphone). For each track, I needed coordinates for where the instrument image should appear. Since I’m using the cover illustration with the cloud and raindrops as the video background, I placed the instruments on individual “raindrops.” Instruments that are heard more on the left in stereo/headphones are assigned coordinates for raindrops on the left side. Drums and bass are centered, as is the vocal.

Generating images

In the next step, I create the images. A video essentially consists of individual images displayed in rapid succession so that the brain perceives them as continuous motion. A typical frame rate is 25, meaning 25 images per second. For the entire song, which is 231 seconds long, I need around 5,800 images. These are “assembled” one by one like a collage, with the size of each instrument at any given moment reflecting its volume—essentially, the “amplitude” shown in the track plot above. Each instrument image has a maximum square size limit so that they don’t overlap too much. For instance, when an image reaches its maximum width, it can still grow in the other dimension (height) until it forms a square. This effect can be seen with the bass guitar, which becomes thicker rather than longer during loud notes.

The 5,800 images are saved sequentially. For example, the 3,000th image, saved as frame_03000.jpg, represents the song position at 2 minutes and 0 seconds (120 seconds), because 120 seconds * 25 frames = the 3,000th image.

Sample Image from the video

To make all instruments briefly visible at the very start of the song (when the drums are still creating quiet wind and rain sounds), I replaced the images for the first two seconds with a small “instrument shrink” animation.

Creating the video

In the final step, I simply needed to convert the 5,800 images along with the fully mixed audio track into an MP4 video. The result looks like this: YouTube.

Code

Want to know exactly how I did it? You can find the program code here: GitHub link: VideoGeneratorForMultiTrackAudio.

Dino Stampf Deep Learning

2017 - 2017

Pre-LLM AI generated pseudo-Swiss German lyrics

Idea

The machine is meant to become the artist, and Gschichtefritz will present this “machine art” to explore the boundaries between artificial intelligence and artistic intelligence.

Note: The Transformer architecture, and thus the Large Language Models (LLMs) like GPT based on it, did not exist at that time.

Concept

The song Dino Stampf Stampf, now with 35 verses (from the children’s stories of the Blue Dino), will serve as a “large existing dataset” / “Big Data.” The computer is meant to learn from this text alone. It won’t receive any additional information about language, words, grammar, or anything else. Afterward, the computer should generate text on its own.

Result

I read the generated text aloud a video:

YouTube Video

YouTube Video

Occasionally, words or short phrases from the original text appeared, followed by various word mixes or entirely new words that still sounded like Swiss German. The result reminds me of Dadaism and Franz Hohler’s Totemügerli, with the difference that the text wasn’t created by a human but was written by a computer within milliseconds.

How Does It Work?

I used a character-based Recurrent Neural Network with Long Short-Term Memory cells, or “LSTM RNN.” Character-based means that instead of feeding words into the computer, we give it individual characters. Since capitalization is irrelevant for this task, I converted all letters to lowercase. For instance, “Gmües” becomes “gmües,” reducing the song’s character vocabulary to 38 distinct symbols (lowercase letters “abcdef…z,” umlauts “üöä,” punctuation, spaces, and line breaks). The neural network is then trained to predict the next character by providing it with the current text and the correct answer, character by character. In machine learning, this is called “supervised learning,” where the network receives both input and the correct output during training.

Here’s a step-by-step example: The network should learn from the text “gmües iss ich de ganzi tag.”

Training:

  1. The first character (“g”) is provided as input, with the “correct answer”—the expected output—being the next character, “m” from “gmües.” It’s like saying, “If you want to learn what I’m teaching, you first need to know that after ‘g’ comes ‘m.’”
  2. The second character, “m,” is given as input with the expected output “ü.” It’s like telling the network, “If you see an ‘m’ and previously saw a ‘g,’ you should output ‘ü’.” The network must remember the “g” from the previous step, hence the use of a “Recurrent Neural Network,” which relies not only on the current input but also on the sequence of previous inputs. LSTM cells provide the ability to store this context information.
  3. The third character, “ü,” is given as input with “e” as the output.
  4. The fourth character, “e,” is given as input with “s” as the output.
  5. The fifth character, “s,” is given as input with a space ” ” as the output. By now, the network has learned the word “gmües” and that it should be followed by a space. This process is repeated across the entire 6,662-character song many times. I deliberately left out the chorus.

Sampling:

Next, we feed the neural network an initial sequence (e.g., “wa”) and repeatedly ask for the next character. This quickly results in a text of any desired length.

A neural network’s quality isn’t judged by how well it memorizes the input. Memorizing is trivial for a computer. The goal is to learn something general, producing fitting output even for previously unseen input. This also influences training. If the network’s settings (hyperparameters) are unsuitable or the training period is too short, it will underfit, generating short, random-looking character strings, like “wai se ee i i snnih.” At the other extreme, if the network memorizes too much and is overtrained, it will largely replicate the original text it was trained on.

Those familiar with the song may recognize in the generated output certain original phrases, alongside amusing, Swiss German-sounding words like “nürzs” or “gmüch,” or word variations like “furke” instead of “gurke.” The “denttergine” probably has something to do with an eggplant, and the “himbeerine” would certainly be something the Blue Dino would love to try.

This was inspired by Andrej Karpathy’s blog post The Unreasonable Effectiveness of Recurrent Neural Networks.

Brainwaver: Pink Noise

2013 - 2013

Nothing but binaural pink noise to get into the flow and focus

Back in the mid-90s, while studying at ETH, I always carried a cassette with self-generated pink noise for my Walkman (I used Cool Edit for that). Later, of course, it was an MP3. In 2013, there was an opportunity to release an EP for free on Spotify and other streaming platforms. I used this to publish my pink noise tracks online under the name ‘Brainwaver’, so there’s no need for copying MP3s anymore.

I listen to the tracks through headphones whenever I want to focus in a noisy environment or just unwind and relax. Pink noise masks external sounds and, unlike music, doesn’t distract. White noise has an evenly distributed intensity across the frequency spectrum (which can sound quite harsh). With pink noise, the intensity decreases as frequency increases; the lower frequencies are louder, while the higher ones are softer, creating a more pleasant sound—similar to a waterfall.

There’s a theory that the binaural modulation of noise, when listened to with headphones, can cause brain waves to synchronize with the modulation frequency, potentially inducing certain mental states (e.g., relaxation or heightened concentration). I’m not sure if that’s true, but binaurally modulated noise sounds less monotonous than pure pink noise—kind of like a helicopter circling above a waterfall.

Listen to Brainwaver: Pink Noise on Spotify or Apple Music

batGPT

2024 -

Write assessment reports for assistive technologies using AI

batGPT is an AI tool for writing assessment reports for assistive technologies, using large language models (LLMs). By selecting keywords and entering short text fragments, a draft report is generated, which can then be manually completed and refined. The screenshot shows an example of such a draft

Screenshot of batGPT: Input on the left, generated output on the right.

This application was developed for b-at Beratung assistive Technologien.