Skip to content

Category: News


Bildschirmtext (BTX)

Being a kid from the 80ies, i never came around using the german Bildschirmtext service. Luckily I found a recent implementation of the BTX protocol with some pages from the late 80ies and early 90ies.

Run the BTX server

brew install socat
git clone
cd bildschirmtext
python3 -m virtualenv env
source env/bin/activate
pip install -r requirements.txt
cd server
socat TCP-LISTEN:20000,reuseaddr,fork 'exec:python'

Compile and run the client

brew install sdl2
git clone
cd btx_decoder/sdl


The guest user (user 0, co-user 1) has an empty password, so you can log in as a guest by pressing “#” 3x at startup (or DCT once). You can define your own users by creating files in users/ and secrets/.

*00#: Retransmit page (in case of transmission errors)
*09#: create page again (or reload from database)
*#: return to the previous page
*page number#: navigation to a specific page
[0-9] and #: navigation to a following page
**: deletes the input
*9#: logs off the user
Comments closed

A modern toolchain for Vectrex development

Recently i read an article about the Vectrex game console. I kew the system a bit, also played it when it came out in the early 80s at a friends house. But i never really hat a connection to the system, like i have for the SNES or the Amiga computer.

Since writing an emulator is on my programming bucketlist, i recenlty took a look at simple platforms that i could start to write an emulator for. I looked into stuff like Chip8 and the GameBoy that seemed easy to emulate, in comparison to a PS1 or N64.

So the Vectrex got interested. I started reading its specification. It all seemed straigth forward to me. The Vectrex uses a Motorola 6809 CPU, which is not a super common 8bit CPU, but was used in the Dragon home computers. Otherwise there is an AY-3-8912 for the sound and 1KB RAM and 8KB ROM.

To get started i took a look into homebrew scene, to figure out getting own code runing on the machine. As usual for systems from that time it was mainly programmed using machine code. Which i kind of like, but also implicates a higher learning curve. There is typically no middleware or frameworks that helps you with anyhting, so you have to learn all the HW registers and figure out how to stuff.

So i was surpised to find a of modern c toolchain with some libc and bios support. I ended up following the instructions for a modern c based toolchain.

The toolchain basically consists of a c compiler, assmbler & linker and a emulator. It also came with and SDL based Emulator, but it would not run on current MacOS because of the unmaintained/bugfixed SDL library. So i decided to port the the emulator to SDL2, which was fun learning the render contexts of SDL2.

So thats what iam using

  • CMOC – The C compiler
  • LWTOOLS – Assembler and linker for the 6809
  • VecX – Vectrex emulator

I started off modifying the c examples that came from Johan who ported the CMOC compiler suite to the Vectrex system.

This is what i came with, you can find the code in my sample repo.

VecX Emulator

Comments closed

Update about my company

Its been a while since I blogged about the development of my company Userlike that I co-founded in 2011. Last update was 2 years ago

As you might expect running a company needs a lot of time and energy. So my left free time is mostly reserved for my family and social activities. You could say that free time for my hobbies became a rare thing. The last couple of years I saw a definite shift that I tend to spent more time on not computer related stuff during my free time. Lately I spent more time playing the guitar, re-booting an old hobby of mine. Actually this one involved also a bit computer work, since I figured I need to build my own Midi Controller for my amp modelling software.

Between Christmas and New Years I went on a vaction where I got some unexpected free afternoons on my hand, and I felt the itch to look into my old console projects I had been working. I re-booted some old PSP code, for which I used to development a couple of projects. I started writing an amiga style intro. I re-used some old Future Composer player routine that I ported ages ago to the PSP. Revisiting PSP development, brought some nice changes.You can run your toolchain in a docker image, which makes cross development easier.

Getting back to initial topic of this blog post. A big step for the company’s development was our move into a new office space. We grew out the old 120 square meter office space. The last couple of month in that space we were using the officw with up to 14 people in 3 rooms. That demanded a lot of discipline and smart approach to our work schedule. But we survived it 🙂

Peter & Jörn

Office with a view

Finally we found a nice office space not to far away from the old office, still very close to the center of cologne. Everything is in 10 minutes walking disctance, eihter to the main station or into the center of the city.
The office is bit over 400 square meetinfs consisting of 5 rooms. Three big open space loft offices, a meeting room, a lounge area and a kitchen.

After we moved in and exchanged all our office furniture, we gave our office a new look with the help of Grafit. The office make over was celebrated at our Summer party.

Like switching office we also replaced our website, multiple time. When we moved in the old office the website looked kind of like this.

Our old website like 4 years ago from 2015

And we transitioned to a new style. Next version website from 2017

And right we are in the process of releasing a new website again. Latest version website from 2019

Latest version website from 2019

Latest version website from 2019

Its been a crazy time developing the company. Our headcount grew from around 15 people working at the old Userlike office to arround 40 people today. My development team grew from a 3 people (including me) to 10 developers.

Which also means a shift in my line of work, that I transitioned coding to managing a team. It’s been challeging 2 years for me because we mostly grew the development team to build a new big iteration of our product.

We are changing couple of components in our current stack. First we unify our operator and user facing chat application to one code base using React. Also we are throwing out XMPP as our main message broker, and switching to a custom component, that is part of our new chat server. We switched to Python with
Greenlets and giving up node.js. These steps help us to share code between our apps and also reduce also the distributed state handling between application, since we have less “moving parts” in our stack. Its been a rough start. Because we didn’t realise in the beginning, that most of our problems were related to our internal protocol shortcomings and complex state handling. Once we addressed this by developing a new chat server with a new protocol, things picked up very quickly. Looking forward to release the first iteration of the product.

The new production iteration will open us a lot of new usages of our chat application. Despite an new look and improved UX, the biggest conceptional switch for us is to leave the online/offline paradigma of live chat and transition to a sync/async paradigma of a messaging application. This will improve our messenger integrations like Telegram, Facebook and WhatsApp.

We had 2 strong years of growing our product and customer base, we have a stronghold in the German market and were able to subscribe a couple of enterprise customer which we could attract with a strong product, professional onboarding services and custom integrations as well as custom tailored solution like chat bot integrations.

Looking forward to a successful 2019.

Comments closed

Building a Company

Its been some time since I blogged about the development of my company Userlike that I co-founded in 2011. It has been 5 busy years since I last blogged about Userlike.

Since then I haven’t had a lot of time to work on gaming console related hobby projects. (Despite some work on the AspectQt port and a Amiga Intro I made). I hope to find more time to work on new projects. I already have planned to update the quickdev16 software a bit.

It has been an awesome time developing the company. Our headcount grew from 3 people working at Userlike to 20 people today. The customer base grew from a couple of hundreds signups to 30k customer accounts that we are handling right now.
4 Years ago we were more or less working from home office all the time. Then we moved into our first office space in the center of Cologne like 2.5 years ago. This was a huge step for us and moved the company forward. As of today we have already outgrown the office space and started looking for a new and bigger place to call our new home.

Wasn’t slow on the technical side either. I guess its fair to say that we replaced each of our software components at least once by a either re-write or different approach. And still we are refactoring and getting rid of technical debt all the time. On of our most visible components is the chat messenger widget itself, where we are on the 3rd major iteration. Each major version introduction involves a migration phase for our customers. This is always a huge task for the development team, to make the migration smooth as possible while maintaining multiple software versions of the messenger.

Developing a SaaS can be tricky. You always have to balance between customers requests, not falling behind competition and don’t overloading your product with options that hardly anyone is using. The challenge is to find the right compromise, being pragmatic sometimes helps.

Devops side of the project wasn’t less interesting. Last year we switched our datacenter, since we had outgrown our old setup and approach of scaling we went for something new. Now we rely on automatic deployment of our system which we solved with Ansible and are very happy with it.
Another big change for our infrastructure was to switch from MySQL to Postgres. The reason for this was quite pragmatic. We used to store all business data in MySQL and stored all bulk data in a mongoDB. Over time and a growing dataset it became clear mongoDB is a hard to handle memory wasting database. So we decided to move to Postgres and merged the mongoDB bulk data using the Postgres JSON type feature. It was quite a task to do the data migration, but since then we never looked back.

We kind of matured the feature set for Userlike over the last 4 years and already branched out into new fields. We started integrating different messenger channels like Telegram and Facebook.
Another new development will be to break up the online / offline communication paradigm to a more async and sync communication which will yield to higher usability for professional support teams using Userlike.

Btw, we are hiring and extending our developer team. If you are a python and javascript person, or like building infrastructure, we might have the right job for you.

Comments closed

Bake that Book

Last Summer i gave my old Macbook Pro 15″, Late 2011 with 8GB and 160GB SSD to one of my team members at Userlike, since i got a Retina upgrade. I think the old one was still decent, since the SSD gave it that boost to make it usable, even if the laptop was 2 years old at that time. Unluckily the old Macbook Pro didn’t last long, it just died after 3 month. Wouldn’t turn on anymore. As i predicted, after bringing it to the Apple Store, they said the logic board was fried, which always means its totaled. We bought a new Macbook and moved on.

Now i got the broken Macbook back to my place and i thought i would at least sell the display, case and reuse the SSD. But i remembered reading all the Macbook baking blog articles. I already disassembled a few Macbooks down to the logic board and also did some reflow stuff for side projects. Also knowing that a friend of mine has good experience with baking old Nokia phones, i though i give it a try.

  • Go to and look up the tutorial to change the logic board
  • Disassemble the laptop, collect screws and parts in separate containers
  • Be becareful with all the ribbon cable connectors, there are a lot and some are tricky
  • Get the logic board out, remove heat pipes, ram and speakers
  • Preheat oven to 180c
  • I cleaned the board with isopropyl alcohol
  • Set board on tin foil legs on a baking tray
  • Put in the oven for 7 minutes
  • Let it cool fast at a open window
  • Clean fans and case from the inside
  • Assemble, make sure to get all cables connected
  • Boot that Book

I hoped that i had a 50/50 chance that it will work. I was confident, that i don’t mess the laptop during disassemble and assemble phase, i wasn’t sure what the result was after baking. I remembered that the laptop got quite hot while working, so there were some odds that this permanent heat would have altered the setup of the parts of the pcb. And it turned out to be worth the work, the Macbook booted up nicely.

Get your tools







1 Comment