Christian Heilmann

Author Archive

The (very) short story of “Ideasoft”

Thursday, December 22nd, 2022

When I was a kid, access to computers was at a premium. We had a few in school, and there were department stores that had them on display. You could do whatever you wanted with those, as the sales people in the store had no idea what they are or do (think Best Buy but without the Polo shirts – this was the 80s).

When we learned a bit of BASIC and Pascal in school, I was hooked and went to the library to get more information and to do my own things. I was terrible at painting and writing due to a bout of Meningitis as a kid leaving me with a few minor motor issues. So I thought I can make computers do that stuff for me and turn my ideas into visuals and texts. Incidentally, once I got better, programming my own solutions almost totally replaced my interest in Maths, and I donated my programs to the school library, which pleased my teacher so much he led it slip that I skipped lessons.

Whilst school computing, back then called “Informatik” or “Elektronische Datenverarbeitung” was very academic or scientific (one thing we programmed was a tool to move the school’s observatory) I already felt at the age of 11 that there is a living in this, too. My parents violently disagreed, and urged me to work in the same factory as my dad instead – albeit as an engineer to design machines. So there was a bit of overlap and trust in my abilities. Or distrust in my manual abilities, who knows.

One thing I wanted was a brand. To tell people that the program they see and use was by me, but also a company. Surely that makes it so much more important. And companies need logos. Lacking a graphics program all I got was some Math knowledge, BASIC and a line algorithm to paint on the screen, so I went for it.

The first logo idea was for a company called “Newsoft” and here is what I came up with :

Newsoft logo - a circle made from vertical lines connected to two anchor points


See the Pen
First Logo
by Christian Heilmann (@codepo8)
on CodePen.

I then got fancier and moved on to “Ideasoft”, which was a logo painted by moving around a circle and painting lines to the diagonal cosine wave :

Idea soft logo - the shape of an I made from a mesh inside a circle


See the Pen
second logo
by Christian Heilmann (@codepo8)
on CodePen.


Bear in mind that in JS and canvas this is instantaneous, but back then on the Thomson TO7-70 and later on the Commodore 64, both of those were a cool animation as the machines were that slow.

Now, as you can see, both my Math and design skills were a tad lacking (I am no Lea Verou or Ana Tudor) but it was fun to remember those days and me proudly thinking I could be a company with a few lines of code. I hope people think the same these days and don’t let them be hindered by what they would need to achieve a goal, but rather just giving it a go.

I was a freelancer for a while, and terrible at it (I hate paperwork), and Ideasoft never came to life. Ah, the things that could have been had I not frittered my life away working in a radio station and for unknowns like BMW, interAd, eToys, Agilisys, Yahoo, Mozilla and Microsoft…

Microdosing burnout – on working remote and in a different time zone

Monday, December 19th, 2022

Car engine running in very low revolutions

I’ve been working remotely in the EU for US companies for the last 15 years. On paper, this sounds like an excellent gig. You get the salaries and bleeding edge work of a US employee but you also get the job security that comes with a European contract.

If used correctly, an 8-9 hour time difference can also be a massive production boost. As someone in the EU, you can act as a communications hub between offices in China, India, Europe and the US. That way you can assure 24/7 coverage of your product. I’ve successfully managed to have that in some of the companies I worked at. But it requires a lot of factors to go right and you have to stand your ground and demand that your company works globally across time zones using processes that do not require people to sit in a room and stare at a wall together.

Interestingly the Covid pandemic helped to a degree with this. As people transitioned from going to the office to working from home a lot of the things that seem not to be a big deal but are poison for remote workers also became issues for everyone. Having to dial into the company VPN to access a file that doesn’t contain any secrets, not sitting on a fat connection next to the datacenter and not being able to constantly update your environment are just a few examples.

Where it gets tricky – work factors

The main issue with being separated from your colleagues is that you can’t work together in real time. When your role is one of delivery, that’s not that much of an issue. You triage the workload, you use version control and you leave good documentation and all is well. When your role is one of advocacy or marketing it is also not an issue. You plan for getting the information you need with a 24 hour buffer and create your materials while the colleagues are sleeping. You review them early in the day and get them out ready for your US audience to take it in.

The problems start when your career progresses and you need to do long-term planning in agreement with your team, you go into product ownership or you go into management of teams. Then you being halfway around the globe becomes a real issue.

Scrum meetings early in the day you should be part of are at the end of your day. Getting telemetry numbers and access to the latest statistics is important to keep your scores up to date. When the dashboard is unavailable to you and you need to wait 9 hours for the engineer to fix the issue you are already 24 hours behind on your reporting.

Being visible and available to your team is important. When all your engineering peers see of you is demands, you are not likely to be a cherished colleague they like to work with. It feels more like working for a client than a colleague. It is also frustrating to them as you are not immediately available to answer questions. Depending on how empowered the people delivering your product are to make their own judgement calls, or whether that is even something they feel comfortable to do, this can mean your product is stalled at least for a day as they get stuck. The other PM that owns one item down on their backlog is available – so let’s work on that instead. Meaning that PM will also do a better job than you.

Another problem is one of career and competition. A lot of the factors that get people promoted are based on knowledge and showing immediate decision making visible to your peers. There is a lot of knowledge in companies only available during lunch breaks, watercooler moments or when commuting together. None of this is available to you as a remote employee.

You are also in trouble, when your role requires you to work across departments. Say you are a product manager and your task is to do user research to validate your ideas. You can do online surveys, polls, but, if your company is big enough, you are very likely to have a user research department. You have to find a peer there to work with in the time zone of the HQ and you then have to trust them to run the study and help you collate the results. As you haven’t been part of the user research all you get is video recordings you hopefully can access and watch in a non-endless-buffering manner. And more importantly, you often get lots of pointless data as the researcher isn’t a subject matter expert and interview candidates that turn out to be completely unrelated to the users you’re looking for still get interviewed for half an hour. You could do local user research, but most of the time the user numbers and the happiness to consume is much higher in the US market than where you are.

Where it gets really tricky – personal factors

Humans are social animals. Humans also have limited brain power that is directly tied to their health and how tired they are. It is easy to say that you shift your work day, get up later, do all your chores and then start working at four until midnight. But it doesn’t work that way.

You will check your email earlier and do work – after all you tell people that the benefit of you not being where they are is that you can prepare everything they need by the time they show up for work. Which does mean that effectively, albeit having lots of time in between, you do work all day. This doesn’t work.

Unless you slept, meditated, did some sports and generally blocked everything out your brain will be slower late at night. You will not be able to make snap decisions and whilst it may be a good idea to question their validity in general, in a high paced environment working towards constant growth, this is what people will expect of you. So you try to appear all bushy tailed and ready for anything coming your way in these late night meetings but your brain complains and tells you a different story. You forget things, you can’t concentrate on all people’s demands in the meeting and that makes you ineffective. As you most likely also like them and don’t want to let them down, you feel like a bad team member and/or leader. Or you feel like an actor/impostor in a place where people are ready to seize the day and you actually are all out for the day.

With humans being social animals working remote and time-delayed also means you miss out a lot on human interaction. You need a forgiving partner, you will miss out on social events “at the end of the work day” as they are technically the beginning of your work day. It worked for Rubin Carter to show his conviction of innocence that he was up when others were in bed and vice versa but you also effectively are not available for friends and family in your own time. This whittles away on you over time and unless you want to be outside of normal life and society, it can be quite a toll on your happiness.

What to do?

It is tricky to find solutions for these issues. The main thing to work on is to keep confusion to a minimum. Instead of being in every late night meeting, you define office hours once a week where you are available for a few hours in your evening and their mornings.

You need to be incredibly diligent in your documentation, note taking and in using the systems that work asynchronously. Your backlog scenarios need to be spot on and define what you want from people and by when. You need to work with your lead peers to ensure that what you defined gets done and not more. You need to be in control of the delivery as ultimately it is your job, and any decision that you haven’t been part of will show up as a “why wasn’t this done in time” when your job is assessed.

It is a lot of work, and it needs a lot of energy to deal with frustration and not getting things done as fast as you want to. It is even more frustrating when simple processes that would cut down on confusion don’t get followed as there seems to be no benefit to people who sit in the same office anyways. All you can do is be diligent and be a great example yourself. If people benefit from great documentation, meeting notes and clear instructions in work items that you deliver, maybe, just maybe you can get the whole team to work like this.

I still think we are missing out on a huge productivity opportunity by not embracing the idea that people working on a digital product could be anywhere and anytime on this planet. But I also get a massive feeling that post-pandemic now the pendulum swings back to being super excited to lock people in a building doing a 8 to 4 again. Let’s hope I am wrong.

Photo by Chris Liverani on Unsplash

What’s new in DevTools 108 video and blooper reel

Friday, December 16th, 2022

Whenever we release a new (stable channel) version of Microsoft Edge, we also create a short video showing all the new features. This time in 108, it was my job to record it and it features my glorious flat and a Kurzgesagt hoodie.

What's new in Microsoft Edge 108 video in the browser developer tools

You can see it in the browser or on the Microsoft Edge YouTube channel .

The things I am covering are:

00:00 Introduction
00:09 Agenda
00:37 Improved navigation in Command Palette
01:08 High-contrast mode fixes
01:30 Disabled JavaScript warning
02:05 See inactive CSS properties
02:53 New documentation to create your own tools
03:58 WebDriver available on macOS on Apple M1
04:29 Use Detached Elements to find DOM leaks

It’s great to see the final product after post production, but to give you a glimpse on what’s happening behind the scenes, here is the outtake reel from my own recording :

Barrierefreiheit mit Computern 1985 – ein faszinierender Artikel

Friday, December 16th, 2022

Beim stöbern nach alten Artikeln im 64er Magazin, das 1985 bis 1993 in Deutschland erschienen ist und suich mit dem Commodore 64 Heimcomputer beschäftigt hat, bin ich auf einen faszinierenden alten Artikel gestossen. Dieser erklärt, wie ein Computerclub in Graz mittels der Symbolsprache Bliss von 1949 und dedizierter Hardware für den C64 es behinderten Nutzern ermöglicht, die Lichter ihrer Wohnung zu steuern und auch per Kopfschalter Briefe zu schreiben.

Hier sind die scans als PDF und anschliessend als Text konvertiert:

Seite 1

Seite 2

Text des Artikels:

So machen’s andere – Computer fur Behinderte

Der Computer Club Graz schreibt für den C 64 Programme, die Behinderten das Leben erleichtern. Mit der Symbolsprache Bliss ist fur Behinderte sogar ein Schreiben von Briefen moglich.

Jeder, der ein körperliches Gebrechen hat oder geistig behindert ist, paßt nicht in unsere gesellschaftliche Norm. Eine Norm, die willkürlich von der Mehrzahl der Menschen bestimmt wird. Von uns allen!

Das Schicksal tausender Mitbürger kann jeden von uns treffen, ein (schuldloser) Unfall, eine heimtückische Krankheit oder ein von Geburt an behindertes Kind. Was in Amerika und Kanada selbstverständlich ist, ist bei uns Zukunftshoffnung einer Minderheit. Sie wollen kein Mitleid, keine milden Gaben, sie wollen Integration in allen Lebensbereichen. Eine abgerundete Bordsteinkante, ein rollstuhlfähiges (Amts-) Gebäude sind nur kleine Beispiele. Viele könnten vollwertige Arbeits kollegen sein, mit etwas gutem Willen und behindertengerechten Arbeitsplätzen. Es gibt ein paar Ansätze in dieser Richtung, doch sind elektronische Spezialanfertigungen so teuer, daß schon allein der Preis Planungen zunichte macht.

Im Juni 1985 begannen Mitglieder des Computer Club Graz, zusammen mit Lehrerinnen der “Landessonderschule für körperbehinderte und mehrfach behinderte Kinder”, die internationale nonverbale Kommunikationssprache “Bliss” auf Computer umzusetzen. Bliss wird nicht verbal gesprochen, sondern bildlich dargestellt und gezeigt. Menschen mit cerebralen Lähmungen, die nicht sprechen können, haben keine Möglichkeit, sich aktiv an Gesprächen zu beteiligen. Kommunikation beschränkt sich auf das Stellen von Fragen wie “Willst Du essen?” oder “Willst Du trinken«, in Zusammenhang mit Zustimmungs- beziehungsweise Ablehnungsgesten. Gefühle können überhaupt nicht genauer artikuliert werden. Die Symbolsprache Bliss wurde vom Österreicher Karl Blitz (Charles Bliss) bereits 1949 entwickelt und seit 1975 vom “Blissymbolics Communication Institute” des “Ontario Crippled Children’s Cen-tre”, Kanada, weltweit verbreitet. Die Zeichen sind etwa mit dem Prinzip der chinesischen Schriftbildsymbole zu vergleichen. Sie sind aus einer geringen Anzahl von Einzelelementen zusammengesetzt und so logisch aufgebaut, daß sie leicht im Gedächtnis behalten werden können. Um es auch Symbolunkundigen zu ermöglichen, die Bedeutung zu verstehen, ist unter jedem Begriff die Übersetzung geschrieben. So wird aus dem Zeichen “Mann” und “Schutz” der “Vater”, der “Rock” macht das Zeichen zur “Frau” und weiter zur “Mutter”. Obwohl die Sprache etwas holprig klingt, werden die Anwender zu einer grammatikalischen Sprache geführt, was durch die syntaxgemäße Anordnung der Symbole auf der Tafel und ihre unterschiedliche Färbung erreicht wird. Zeitwörter werden grün, Hauptwörter rot, Eigenschaftswörter blau dargestellt. Für viele Kinder oder auch Unfallopfer ist das die erste Möglichkeit, sich zu artikulieren. Sei es nun, daß sie mit der Hand oder einem Kopfstab auf das entsprechende Symbol deuten, wobei diese Art der Kommunikation aber immer an die Anwesenheit einer Kontaktperson gebunden ist, die die Zeichen interpretieren muß. Diese Kontaktperson muß auch das Schreiben von Briefen übernehmen.

Bild 1. Dieser Sensor stellt die Schnittstelle Computer Behinderte dar

Kommunizieren nun Behinderte, die das Alphabet nur unvollkommen beherrschen, müssen Briefe sogar gezeichnet werden. Das Lernen und Anwenden von Symbo- len ist wesentlich leichter als das Erlernen eines abstrakten Alphabets. Theoretisch ist es nur eine Frage des Geldes, eine Zeichensprache auf einen Computer umzusetzen. Aber Geräte mit 10-MByte-Festplattenspeicher, Farbe und Grafik verlangen ihren Preis. Das Programmpaket, das entstand, wurde für den Commodore 64 mit zwei “Schaltkontakten”, einem Floppy-Laufwerk, einem Commodore-kompatiblen, grafikfähigen Drucker und einem Farbfernseher geschrieben. Jedes Bildsymbol entspricht einer Matrix von 56×32 Punkten und wird auf einem Diskettenblock zusammen mit der Übersetzung codiert abgelegt. Es stehen also maximal 664 Zeichen zur Verfügung. Von den 1500 existieren den Zeichen werden im Durch schnitt nicht mehr als 200 verwen det, da sie einfach zu neuen Begriffen verknüpft werden können. Das Programm, das zum Großteil in Maschinensprache geschrieben ist, wurde von Gerhard Pachler geschrieben. Die Menüsteuerung, der wohl kritischste Punkt der ganzen Entwicklung, entstand nach wo- chenlangen Versuchen der Sonderschullehrerinnen Elisabeth Amschl und Barbara Pichler. Behinderte haben ja keine Möglichkeit, über eine normale Tastatur einen Computer zu bedienen. So werden über den Joystick-Port 1 (Pin 0 und 1) die Antworten der zwei Berührtaster abgefragt (Bild 1); “Stimmt” oder “Stimmt nicht” beziehungsweise “Das will ich”, “Das will ich nicht”. Die Frage dazu stellt der Computer am Bildschirm durch die Steuerpfeile. Zuerst zeigt der Pfeil auf das Eingabefeld. Wird die Abfrage mit “Ja” be antwortet, wird die erste Symbolfarbe (gelb für personenbezogene Wörter) zur Auswahl gestellt. Kommt als Eingabe “Nein”, werden Hauptwörter angeboten und so weiter. Ist die Farbe der Wortgruppe (Hauptwort, Zeitwort ect.) entsprechend eingestellt, wird die erste Ziffer einer zweistelligen Zahl abgefragt. Jedes Symbol hat neben einer Farbe noch eine zweistellige Ziffer in der linken oberen Ecke (Bild 2).

Es wird nur auf Übereinstimmung geprüft. Die Kenntnis des Wertes von “99” ist unerheblich, da einfach das Aussehen der Ziffern verglichen wird. Nach der zweiten Ziffer wird das Symbol in das rechte Überprüfungsfeld von Diskette gelesen und der C 64 fragt nach der Richtigkeit der Wahl. Bei einer positiven Antwort wird es in den Textabschnitt am oberen Rand des Bildschirms geschrieben. Maximal fünf Zeichen in zwei Zeilen werden gleichzeitig am Bildschirm dargestellt, dann wird zeilenweise nach oben verschoben. Das Menü bietet die Editierfunktionen Absatz, Zeichen löschen und wird Zeile für Zeile zur Korrektur noch einmal dargestellt. Maximal 800 Zeichen passen auf einen “Brief” Ausdrucken an. Vor dem Ausdruck (Bild 3). Das klingt sehr kompliziert, doch haben wir in Graz noch kein behindertes Kind gefunden, das länger als zwei Stunden Einarbeitungszeit benötigt hätte. Voraussetzungen sind: Grundkenntnisse in Bliss, das Erkennen von Farben, die Fähigkeit, Ziffern von 0 bis 9 unterscheiden zu können und Menüfragen mit »Ja« (Kopfstab zum linken Schalter) oder “Nein” (Kopfstab zum rechten Schalter) beantworten zu können.

Ein eigenes Editor-Programm ermöglicht es Eltern und Lehrern, eigene, auf die Erlebniswelt des Behinderten abgestimmte Symbole zu erstellen und zu speichern. Alles, was sich mit 56×32 Punkten darstellen läßt, ist machbar. Die Schalter waren lange Zeit der Pferdefuß der Entwicklung. Erstens sollten Sie nicht allzu teuer sein, andererseits darf keine Kraftaufwendung anfallen. Gelöst wurde das Problem mit zwei kammartig ineinandergreifenden Leiterbahnnetzen, die über eine Sicherheitsschaltung mit dem Joystick-Port 1 verbunden sind. Der Vorteil dieser Belegung ist, daß die Tasten SPACE und I der Commodore-Tastatur zur Steuerung für Betreuer dienen können. Das Programm, das derzeit bereits in Graz angewendet wird, au hat sich auch im Familiensinsatz bewährt. Die Philosophie, die dahinter steckt, ist, Kommunikation in schriftlicher Form zu ermöglichen, ohne vom Betreuer abhängig zu sein. Für das Bliss-Programm gibt es bereits Folgeprogramme. Beispielsweise Bliss-Bilderbücher am Computer, in de nen bis zu 18 Bilder je Diskettenseite mit Bliss-Texten versehen sind. Die Bilder werden entweder zuerst digitalisiert (Printtechnik-Digitizer) oder gleich mit “Blazzing-Paddles” gezeichnet.

Einen neuen Weg beschreibt Wolfgang Resele, der für Vortgeschritten ein Textverarbeitungsprogramm geschrieben hat das entweder über einen Taster (Intervallschaltung) oder über zwei Tasten (Ja/Nein-Abfrage) gesteuert wird und alle wichtigen Funktionen einer einfachen Textverarbeitung hat.

Im unteren Teil werden Menü- und Buchstabenauswahl dargestellt, im oberen Teil der Text. Dieser kann in normaler Größe oder umschaltbar doppelt groß dargestellt werden.

Peter Lauppert entwickelte ein Interface und ein Eintasterprogramm, um die Infrastruktur einer Wohnung steuern zu können. So kann ein Querschnittgelähmter mit nur einem Taster das Licht, den Fernseher und Radio (in allen wichtigen Funk-tionen), die Heizung, die Türen etc. bedienen. Theoretisch kann er auch telefonieren (mit Wählvorgang!), nur bei der praktischen Umsetzung legt sich die österreichische Postbürokratie quer (Wozu brauchen die denn das …!). Das Bliss-Programm wurde übrigens bei einem Wettbewerb des österreichischen Radio- senders Ö3 prämiert.

Im Juni 1985 hatte der Computer Club Graz auf der TECHNOVA Messe in Graz drei Tage lang den bestbesuchten Demonstrationsstand. Ausgerüstet ist der Club mit fünf C 64 mit Farbbildschirmen, einem SX-64, zwei Bull Micral 30 und einem HP 150. Wer Näheres wissen will, sich an der Behindertenarbeit beteiligen möchte oder einfach nur Kontakte sucht, schreibt bitte an: Computer Club Graz, Annenstraße 15/1, A-8020 Graz, Tel. 031639 11 48 (in Österreich).

Code brushes for GitHub Copilot

Tuesday, December 13th, 2022

Github Next now showed a new feature in GitHub Copilot labs that allows you to change code you write to make it cleaner, more robust and document it automatically.

GitHub Copilot is incredible, and if you check what’s happening in the preview released as the Copilot Labs extension it will only get more amazing.

Check this out:

Code brushes applied to a simple JavaScript

Let’s start with a basic JavaScript that checks a string length and reports when it is empty. One with an obvious mistake, as we use a single `=` instead of the type safe `===`. This will always report the string as empty.

if (str.length = 0) {
    console.error('String is empty');
}

Using the `Fix bugs` brush, this is rectified.

if (str.length === 0) {
    console.error('String is empty');
}

Using the `Clean` brush also adds reporting when the string is not empty.

if (str.length === 0) {
    console.error('String is empty');
} else {
    console.log('String is not empty');
}

Using the `List steps` brush adds comments for step (sure, this is redundant, but it also works for much more complex code).

// check the length of the string
if (str.length === 0) {
    // if length is 0, print 'String is empty' 
    console.error('String is empty');
} else {
    // if length is not 0, print 'String is not empty'
    console.log('String is not empty');
}

Using `Make robust` adds error reporting instead of logging and an extra check to make sure that `str` is really a String and not an empty Array.

function test(str) {
    if (str.length === 0) {
        throw new Error('String is empty');
    } else if (typeof str !== 'string') {
        throw new Error('It is not a string');
    } else {
        console.log('String is not empty');
    }
}

The `Add types` brush does exactly that.

/**
 * @param {string} str
 * @returns {string}
 */
function test(str) {
    if (str.length === 0) {
        throw new Error('String is empty');
    } else if (typeof str !== 'string') {
        throw new Error('It is not a string');
    } else {
        console.log('String is not empty');
    }
}

You can also define custom brushes and there are more to come.