Planet Openmoko

October 18, 2020

Michael "mickeyl" Lauer

SPM-ifying YapDatabase

Converting an existing Objective-C/Swift framework to Swift Package Manager I'm a big fan of the database library YapDatabase, which is a collection/key/value store for macOS, iOS, tvOS & watchOS. It comes with many high level features and is built atop sqlite. In the last 5 years, I have used this successfully for many of my projects. It is written in Objective-C and comes with a bunch of Swift files for more Swifty use. Since I recently announced to go all-in with Swift, I want to convert all my dependencies to the Swift Package Management system. I have never been a fan of CocoaPods or Carthage as I found them too invasive. As this point of time though, YapDatabase is not Swift Package Manager (SPM) compatible and all approaches to do this using the current source layout did fail. So I had a fresh look at it and decided to do it slightly differently: If you don't have to work with the constraints of an existing tree layout, the process is relatively straightforward. Read on to find out what I did. Prerequisites Use swift package init to create a package named YapDatabase. Edit Package.swift to make the package create two libraries with associated targets ObjCYapDatabase is going to hold the Objective-C part in Sources/ObjCYapDatabase, SwiftYapDatabase is going to hold the Swift parts in Sources/SwiftYapDatabase. I couldn't name the Objective-C library simply YapDatabase, since this would have required to rename the (then umbrella) header file YapDatabase.h, which I didn't want to. Swift vs. Objective-C At the moment, SPM is not capable of handling mixed language targets, i.e., you either have only Swift files or no Swift files at all in your target – therefore I split the repository accordingly and moved Swift files below Sources/SwiftYapDatabase. Source and Header file locations SPM is pretty rigid when it comes to the location of source and header files. This is the reason why I unfortunately could not deliver this work on top of the original source repository. Fortunately though, the source repository was very well structured. To layout the files in a way that makes SPM happy, I Created two header file directory, include for public headers, privateInclude for private headers. Moved all header files from Internal directories and those with private in their name to the privateInclude directory. Moved the remaining header files to the public include directory. Swift The aforementioned steps were enough to make SPM compile the ObjCYapDatabase. To make the Swift part compile, I had to Edit all Swift files to import ObjCYapDatabase instead of Foundation via sed -i -e s,Foundation,ObjCYapDatabase,g *.swift. This made the SwiftYapDatabase compile. What's Next There are some parts missing: I didn't include the example programs, the tests, and the Xcode project. I don't know Robbie Hanson's (creator of YapDatabase) plans. As it stands, this shuffling around was merely a proof-of-concept to find out whether such an approach is sufficient to SPM-ify YapDatabase or whether to there are more problems to consider. I will incorporate this in one of my projects to put it through a real world test. I have published the repository as mickeyl/SwiftYapDatabase and will report this work via the YapDatabase issue tracker. Let's see what happens next.

by Mickey at October 18, 2020 12:00 PM

October 04, 2020


An early unfair first comparison of the Radiona ULX3S and the Olimex iCE40HX8K-EVB

Why unfair?


Well when I obtained the iCE40HX8K-EVB it had already existed for quite some time the ULX3S I had just received the unit from the Crowd Supply campaign.
And Olimex therefore had lots of time to “perfect” the documentation Radiona on the other hand has not yet had the luxury of time yet.


Well I’m not really going to… The FPGA on the ULX3S is quite powerful and the board itself has more features as well, lets just call them different classes of products.


Well both FPGAs are supported by the open source command line friendly toolchains.
Xilinx years ago sort of cured me of any desire for using huge closed source applications for programmable logic.
Many thanks to the developers of yosys, icestorm, nextpnr, prjtrellis, writers of programmer software and GNU / libre-software in general.

Getting started documentation

I must admit that I’m not that impressed with the getting started experience.

The Radiona wiki links to what they call the ULX3S official site.
And at the time of writing this I find it somewhat lacking in getting started information.
Things I miss:

  • How to power the board (without frying it or having to look closely at the schematic).
  • Precompiled “hello world” bit streams for the different variants of the FPGA on there boards.
  • A simple guide on flashing said bit stream using the build in programmer on the board.

Eventually one does find the, and gets around to compiling the toolchain for ECP5 (I previously only compiled it for ICE40)
However when trying to flash the bitstream (after changing the makefile to suit the 85F variant that I got)
The pre build binary of ujprog that comes with the example code fails with the message

ULX2S / ULX3S JTAG programmer v 3.0.92 (built Oct 3 2020 19:32:10)
Cannot find JTAG cable.

I have try to specify the port using -P and it does get a LED flashing but no blinking LEDs.
I also try to build ujprog from the sources, but I get the same massage including the version number.

Longer down the road I stumble across which from the get go targets my variant of FPGA (let doubt that I just compile the bitcode the wrong way)
It uses OpenOCD to do the flashing and best of all it WORKS 🙂

The OpenOCD flashing does seem to be a bit slow though… So I keep looking and finds a manual of sorts it has a list of programming options and even a description of how to power the board.
The list contains a different programmer openFPGALoader that seems to have more resent updates than ujprog, and the schematic does have a note about them changing the wiring of the programmer in a revision of the board.
Compiles the code, fingers crossed that they have updated it to match the production PCB…

Success 2: openFPGALoader –board=ulx3s bitstream.bit also works


Is the current documentation a bit rough around the edges? Probably yes.
Is the board amassing?
Probably also yes…
I mean the FPGA is large enough to hold an entire Amiga “implementation”.
The quality of the hardware looks nice too.
And the board contains an integrated programmer and a selection of peripherals to keep me busy for a while.

Would I recommend the board… Well I haven’t spend enough time with it just yet, but it does seem likely.

If you do get the 85F I would recommend the ulx3s-foss-blinky as a hello world.
And if you have a production PCB i would recommend checking out openFPGALoader for flashing the bit stream.

by talpadk at October 04, 2020 09:23 AM

October 03, 2020

Michael "mickeyl" Lauer

Programming Languages

While I never got much into natural languages (beyond my native tounge, a halfway solid english, and some bits and pieces of french), I have always been fascinated by (some) programming languages – I even wrote books about some of them. I (literally) grew up with BASIC and 6502/6510 ASSEMBLER – on the VC20 and the C64. Later on, learned to hate C and love 680x0 ASSEMBLER – on the AMIGA. During the 90s, I enjoyed PASCAL and MODULA II, and then found a preliminary home in Python. The 2000s were largely affected by C++ (which I always found much more interesting than JAVA) until I got acquainted with Objective-C – which later rised to the 2nd place in my top list – shared with Vala, which I still have a sweet spot for, since it liberated me from having to use C. As I grew older (and suddenly realized that my lifetime is actually limited, imagine my surprise…), I learned to embrace higher abstractions and being able to formulate algorithms clear and concise. While Python allowed me to do that, its reliance on runtime errors as opposed to compile-time always bugged me. During the 2010s, I settled on using Python on the server, and Objective-C on the client – still dreaming about a language I could use for both. Fast-forward to 2020. I have been a vocal critic of Apple's new language, Swift, since its debut – for reasons which I'm not going to repeat. Three months have passed since I started learning Swift and I think it's time for a first preliminary report. TLDR: I like it – a lot more than I have ever thought – and will from now on try to use it pretty much everywhere. Before moving on with some details, let me also confess that I'm pretty glad having waited for so long. Judging from the outside, the road to Swift 5 was a very rocky ride. Were I to begin with an earlier version, I might have given up or wasted many hours following a language that was such a moving target – changing every year in more ways than I would have been willing to participate. Syntax, Semantics, and Idioms Swift is very expressive and rich in syntax, semantics, and idioms – and it has a tough learning curve. As someone who has written Objective-C for almost a decade now, let me tell you that whoever told you that Swift is more accessible than Objective-C is a downright lier. Objective-C is a very simple language, as it adds one (yes, just one) construct (and some decorators) on top of another simple language – C. Once I was beyond my reluctance to look into it, I finally see the beauty. Swift has almost everything I have ever wanted in a programming language. Among many other features, it has type safety, generics, multiple inheritance (in the disguise of protocols with default implementation), closures, type inference, namespaces (ok, not first class, but think enums without cases), rich enums, … On top of that it has a REPL (Read-Eval-Print-Loop), which can't be praised enough – it is the #1 missing feature in most compiled languages – and syntax for building DSLs (Domain Specific Languages). And: It is Open Source – which is the #1 feature that has always irritated me with Objective-C. Interoperability I hate repeating myself. I love generic solutions. Over the last decade, I created a number of reusable frameworks that powered all the apps I wrote. It has accumulated quite a bit of stuff, as you can see here (generated using David A Wheeler's SLOCCount): SLOC Directory SLOC-by-Language (Sorted) 2110719 LTSupportCore objc=2063905,ansic=31423,java=5914,cs=3822,cpp=2772, python=2397,sh=486 106939 LTSupportDB objc=106108,sh=831 35669 LTSupportTracking objc=17443,ansic=12219,cpp=4922,java=902,sh=128, python=55 30331 LTSupportUI objc=30053,sh=278 27116 LTSupportDRM objc=27116 9499 LTSupportBluetooth objc=9365,python=134 6143 LTSupportAutomotive objc=6143 5141 LTSupportAudio objc=5141 4510 LTSupportVideo objc=4510 3324 LTSupportCommonControls objc=3324 679 LTSupportDBUI objc=679 340 LTSupportMidi objc=340 271 LTSupportDiagnostics objc=271 One of the things contributing to scare me before switching to Swift was that I may had to rewrite all that again. But it ain't necessarily so. Calling Objective-C from Swift Being probably the company that has the largest Objective-C codebase in the world, Apple worked hard on interoperability. Calling Objective-C from Swift is a breeze – they'll even convert method names for you. Not much to complain here. Almost every Objective-C construct is visible to Swift. Calling Swift from Objective-C Calling Swift from Objective-C is a tad bit harder. Apart from having to including (generated) extra headers, the whole plane of types with value semantics is more or less invisible to Objective-C. There are ways to bridge (AnyObject), but it's cumbersome and sometimes very for generic code (__SwiftValue__). Beyond Apple In a surprising move, Apple released Swift as an open source project. And although the struggle of combining a product oriented software release cycle with a community oriented evolution process is sometimes obvious (you can follow the tension if you read some of the evolution threads on the Swift forums), they manage it quite well. What catched my attention in particular was the invention of Server-side Swift and the Swift Package Manager, since these two projects have the power to replace my use of Python forever. Foreign Platforms My new set of swift-frameworks will be open source and also support UNIX-like platforms (to a certain degree, since Apple still has their crown jewels like UIKit and AppKit closed), hence finally I can use my reusable solutions both on the client and the server. Unfortunately Google backed somewhat out of using Swift. For quite some time it looked like they would embrace it as another first-class language for their forthcoming Android successor. This would have been the icing on the cake, but let's see – Kotlin is pretty similar Swift, but not it. Conclusion I'm now familiar enough with Swift that I made the decision to go all-in, helping to improve the server-side ecosystem as I go. Speaking about which – I still miss a bunch of features, in particular first-class coroutines for asynchronous algorithms, a proper database abstraction, and a cross-platform logging solution. But what I enjoy the most is to be a part of a vibrant (language) community again. People are way more excited when it comes to Swift as they ever were with Objective-C. And this is great!

by Mickey at October 03, 2020 12:00 PM

September 13, 2020


How to prevent Microsoft Flight Simulator 2020 from bsod when started on a virtual Windows PC using KVM

I assume you already have a working virtual machine that uses pci passthrough and that it works just fine with other games.

BUT very time you start up MS Flight Simulator 2020 Windows crashes with a blue screen of death.
It took me some time to figure out, so I’m writing this in the hope that it saves some other poor souls time.

The fix is quite simple you need to give the option “ignore_msrs=1” to the kvm kernel module.
Create the file “/etc/modprobe.d/kvm.conf
Containing the line “options kvm ignore_msrs=1
And reboot the host.

See: for a slightly more in depth explanation of this.

by talpadk at September 13, 2020 06:56 AM

June 25, 2020

Michael "mickeyl" Lauer

Feeling like Don Quixote

For some years now, I have been feeling like Don Quixote fighting against windmills. This is a multidimensional feeling that has its roots in both personal and professional circumstances. With regards to personal issues, I won't go into details as I want to keep this blog free from politics, society, and economics. With regards to professional circumstances, something that bugs me a lot is that I seem to engage in fighting wars that can't be won. Free software lost a lot of wars, most notably though in the mobile sector. As I have complained more than once before, over the last decade, the phone and tablet world has become much less free. Even big companies struggle these days and it looks like we're stuck with a duopoly for a long long time. Today though I want to complain about one of these two players, namely the Apple development platforms. By 2013, software development for Apple devices was a lot of fun. We had a great mature language, nice frameworks, and a big market to try out all kinds of ideas and ways to make a living. For some reason though this changed, when Apple introduced the Swift programming language. It split the developer world and alienated a lot of the veterans. The claims of better readability, performance, and what not could not be achieved. In fact, I (and a lot of people not wearing rose-colored glasses agree with me) think, what has been proposed as a way to flatten the learning curve is actually harder to learn and less readable. For the major part of the last years I ignored everything Swift, hoping that for the remainder of my professional career (lets say 20 more years, if all goes well) Objective-C would be at least well enough supported that I could continue writing programs -- even without a vibrant open source community (since most folks have switched to Swift immediately and despite popular belief mix and match is not a thing) and proper API docs. Last year though the first swift-only frameworks and a whole new approach for semi-declarative UIs appeared. SwiftUI -- they even named it like the programming language sigh. This year they are "moving forward" by deprecating more Objective-C frameworks and introducing SwiftUI as the one and only way in some places. It's now clear to me: It's either I leave the platform or I stop trying to achieve perfection with a certain -- restricted -- set of tools but rather walking their rocky road. And I must confess, I still love the Apple platform so much that I give up fighting aginst the windmills and start from scratch. Learning SwiftUI. Learning Swift. On a slightly related note: For a new contract, I have to revisit the successful build system I co-founded 20 years ago: OpenEmbedded. Though being quite rusty (left the project 11 years ago), I'm looking forward to finding out what the community made out of it. Stay safe and healthy.

by Mickey at June 25, 2020 12:00 PM

February 10, 2020

Michael "mickeyl" Lauer

Welcome, 2020

Here's the new decade. 2019 went by as an important year where I regained some of my health, discipline, and motivation. Next to the inevitable iOS development, the most important milestones were the release of the 2nd edition of my Vala book and my first music album after more than two decades of inactiveness. I'm looking forward to this decade. The best is yet to come.

by Mickey at February 10, 2020 12:00 PM

January 04, 2020

Harald "LaF0rge" Welte

36C3 Talks on SIM card technology / Mitel DECT

At 36C3 in December 2019 I had the pleasure of presenting: One full talk about SIM card technology from A to Z and another talk where I presented together with eventphone team members about Security issues in the Mitel SIP-DECT system.

The SIM card talk was surprisingly successful, both in terms of a full audience on-site, as well as in terms of the number of viewers of the recordings on SIM cards are a rather niche topic in the wider IT industry, and my talk was not covering any vulnerabilities or the like. Also, there was nothing novel in the talk: SIM cards have been around for decades, and not much has changed (except maybe eSIM and TLS) in recent years.

In any case, I'm of course happy that it was well received. So far I've received lots of positive feedback.

As I'm working [more than] full time in cellular technology for almost 15 years now, it's sometimes hard to imagine what kind of topics people might be interested in. If you have some kind of suggestion on what kind of subject within my area of expertise you'd like me to talk about, please don't hesitate to reach out.

The Mitel DECT talk also went quite well. I covered about 10 minutes of technical details regarding the reverse engineering of the firmware and the communication protocols of the device. Thanks again to Dieter Spaar for helping with that. He is and remains the best reverse engineer I have met, and it's always a privilege to collaborate on any project. It was of course also nice to see what kind of useful (and/or fun) things the eventphone team have built on top of the knowledge that was gained by protocol-level reverse engineering.

If you want to know more low-level technical detail than the 36C3 talk, I recommend my earlier talk at the OsmoDevCon 2019 about Aastra/Mitel DET base station dissection.

If only I had more time, I would love to work on improving the lack of Free / Open Source Software realted to the DECT protocol family. There's the abandoned, and the equally abandoned project. The former only deals with the loewst levels of DECT (PHY/MAC). The latter is to a large extent implemented as part of an ancient version of the Linux kernel (I would say this should all run in userspace, like we run all of GSM/UMTS/LTE in userspace today).

If anyone wants to help out, I still think working on the DECT DLC and NWK dissectors for wireshark is the best way to start. It will create a tool that's important for anyone working with the DECT protocols, and it will be more or less a requirement for development and debugging should anyone ever go further in terms of implementing those protocols on either the PP or FP side. You can find my humble beginnings of the related dissectors in the laforge/dect branch of

by Harald Welte at January 04, 2020 11:00 PM

Retronetworking / BBS-Revival setup at #36C3

After many years of being involved in various projects at the annual Chaos Communication Congress (starting from the audio/vidoe recording team at 15C3), I've finally also departed the GSM team, i.e. the people who operate (Osmocom based) cellular networks at CCC events.

The CCC Camp in August 2019 was slightly different: Instead of helping an Osmocom based 2G/3G network, I decided to put up a nextepc-based LTE network and make that use the 2G/3G HLR (osmo-hlr) via a newly-written DIAMETER-to-GSUP proxy. After lots of hacking on that proxy and fixing various bugs in nextepc (see my laforge/cccamp2019 branch here) this was working rather fine.

For 36C3 in December 2019 I had something different in mind: It was supposed to be the first actual demo of the retronetworking / bbs-revival setup I've been working on during past months. This setup in turn is sort-of a continuation of my talk at 34C3 two years ago: BBSs and early Intenet access in the 1990ies.

Rather than just talking about it, I wanted to be able to show people the real thing: Actual client PCs running (mainly) DOS, dialling over analog modems and phone lines as well as ISDN-TAs and ISDN lines into BBSs, together with early Interent access using SLIP and PPP over the same dial-up lines.

The actual setup can be seen at the Dialup Network In A Box wiki page, together with the 36C3 specific wiki page.

What took most of the time was - interestingly - mainly two topics:

  1. A 1U rack-mount system with four E1 ports. I had lots of old Sangoma Quad-E1 cards in PCI form-factor available, but wanted to use a PC with a more modern/faster CPU than those old first-generation Atom boxes that still had actual PCI slots. Those new mainboards don't have PCI but PCIe. There are plenty of PCIe to PCI bridges and associated products on the market, which worked fine with virtually any PCI card I could find, but not with the Sangoma AFT PCI cards I wanted to use. Seconds to minutes after boot, the PCI-PCIe bridges would always forget their secondary bus number. I suspected excessive power consumption or glitches, but couldn't find anything wrong when looking at the power rails with a scope. Adding additional capacitors on every rail also didn't change it. The !RESET line is also clean. It remains a mystery. I then finally decided to but a new (expensive) DAHDI 4-port E1 PCIe card to move ahead. What a waste of money if you have tons of other E1 cards around.

  2. Various trouble with FreeSWITCH. All I wanted/needed was some simple emulation of a PSTN/ISDN switch, operating in NT mode towards both the Livingston Portmaster 3 RAS and the Auerswald PBX. I would have used lcr, but it supports neither DAHDI nor Sangoma, but only mISDN - and there are no mISDN cards with four E1 ports :( So I decided to go for FreeSWITCH, knowing it has had a long history of ISDN/PRI/E1 support. However, it was a big disappointment. First, there were some segfaults due to a classic pointer deref before NULL-check. Next, libpri and FreeSWITCH have a different idea how channel (timeslot) numbers are structured, rendering any call attempt to fail. Finally, FreeSWITCH decided to blindly overwrite any bearer capabilities IE with 'speech', even if an ISDN dialup call (unrestricted digital information) was being handled. The FreeSWITCH documentation contains tons of references on channel input/output variables related to that - but it turns out their libpri integration doesn't set any of those, nor use any of them on the outbound side.

Anyway, after a lot more time than expected the setup was operational, and we could establish modem calls as well as ISDN dialup calls between the clients and the Portmaster3. The PM3 in turn then was configured to forward the dialup sessions via telnet to a variety of BBSs around the internet. Some exist still (or again) on the public internet. Some others were explicitly (re)created by 36C3 participants for this very BBS-Revival setup.

My personal favorite was finding ACiD Underworld 2.0, one of the few BBSs out there today who support RIPscrip, a protocol used to render vector graphics, text and even mouse-clickable UI via modem connection to a DOS/EGA client program called RIPterm. So we had one RIPterm installation on Novell DOS7 that was just used for dialling into ACiD Underworld 2.0.

Among other things we also tested interoperability between the 1980ies CCC DIY accoustic coupler "Datenklo" and the Portmaster, and confirmed that Windows 2000 could establish multilink-PPP not only over two B-channels (128 kbps) but also over 3 B-Channels (192).

Running this setup for four days meant 36C3 was a quite different experience than many previous CCC congresses:

  • I was less stressed as I wasn't involved in operating a service that many people would want to use (GSM).

  • I got engaged with many more people with whom I would normally not have entered a conversation, as they were watching the exhibits/demos and we got to chat about the technology involved and the 'good old days'.

So all in all, despite the last minute FreeSWITCH-patching, it was a much more relaxing and rewarding experience for me.

Special thanks to

  • Sylvain "tnt" Munaut for spending a lot of time with me at the retronetworking assembly. The fact that I had an E1 interface around was a good way for him to continue development on his ICE40 based bi-directional E1 wiretap. He also helped with setup and teardown.

  • miaoski and evanslify for reviving two of their old BBSs from Taiwan so we could use them at this event

The retronetworking setup is intended to operate at many other future events, whether CCC related, Vintage Computing or otherwise. It's relatively small and portable.

I'm very much looking forward to the next incarnations. Until then, I will hopefully have more software configured and operational, including a variety of local BBSs (running in VMs/containers), together with the respective networking (FTN, ZConnect, ...) and point software like CrossPoint.

If you are interested in helping out with this project: I'm very much looking for help. It doesn't matter if you're old and have had BBS experience back in the day, or if you're a younger person who wants to learn about communications history. Any help is appreciated. Please reach out to the mailing list, or directly to me via e-mail.

by Harald Welte at January 04, 2020 11:00 PM

December 19, 2019

Harald "LaF0rge" Welte

Software Freedom Podcast #3 about Free Software mobile phone communication

Recently I had the pleasure of being part of the 3rd incarnation of a new podcast series by the Free Software Foundation Europe: The Software Freedom Podcast.

In episode 3, Matthias and Bonnie of the FSFE are interviewing me about various high-level topics related to [the lack of] Free Software in cellular telephony, as well as some of the projects that I was involved in (Openmoko, Osmocom).

We've also touched the current mainstream / political debate about Huawei and 5G networks, where my position can only be summarized as: It doesn't matter much in which country the related proprietary software is being developed. What we need is Free / Open Source software that can be publicly audited, and we need a method by which the operator can ensure that a given version of that FOSS software is actually executing on his equipment.

Thanks to the FSFE for covering such underdeveloped areas of Free Software, and to use their podcast to distribute related information and ideas.

by Harald Welte at December 19, 2019 11:00 PM

December 03, 2019



Wir reden alle immer davon das die Welt so schrecklich schnell geworden ist. Alles ist so stressig und laut. Ganz ehrlich wer dieser Tage durch die Dresdner Innenstadt geht ist bescheuert.

Am Nachmittag meide ich den Fußweg zum Hauptbahnhof um dem Gedrängel zu entgehen. Am Morgen ist es eigentlich noch still und es liegt ein diffuser Geruch von vergammelter Bratwurst und kaltem Glühwein in der Luft aber dann ist er da der Weihnachtscountdown, riesig groß und einfach zum kotzen.

December 03, 2019 07:10 PM

November 26, 2019


Liberatings Structures

Die Liberating Structures sind gerade ganz hip. Zumindest 1-2-4 All hat vermutlich inzwischen jeder in seinem Methodenkoffer.

Um den Überblick zu behalten oder sich seinen eigenen String zu basteln gibt es ausführliche Beschreibungen im Internet (deutsch / englisch) oder in Buchform. Für die digitalen Menschen die ständig ihr Smartphone oder Tablet griffbereit haben gibts eine App (Android / Apple) und wer will kann auch Geld für schicke Karten ausgeben oder diese eben selber drucken.

Für jeden Geschmack etwas dabei :)

Bildquelle: Learning moments

November 26, 2019 07:12 PM

October 14, 2019


Der Wahnsinn mit der Geschwindigkeit

Warum zur Hölle wollen Menschen immer die Geschwindigkeit von Teams vergleichen?

Vielleicht weil der Begriff Geschwindigkeit dazu verleitet ein langsames Auto als Trabbi und ein schnelles als Porsche zu verbuchen. Dabei messen wir zwar immer das gleiche, nämlich in einem Sprint erledigte Arbeit. Die Maßeinheit sind in der Regel Storypunkte, welche aber keine über Teamgrenzen hinweg normierte Größe darstellen.

Das schmieren eines Brötchens kann von einem Team mit 1 Storypunkt geschätzt und von einem anderen mit 2 Storypunkten geschätzt werden, während ein drittes Team die Aufgabe die Aufgabe der Trivialität halber gar nicht schätzt. Jedes Team braucht am Ende die gleiche Zeit für die Arbeit, welches Teams aber hat nun die höchste Velocity?

Keines. Velocity und Schätzungen mit Storypunkten sind eine Hilfe für das Team um das aufteilen von Arbeit zu erlernen. Möchte ich wirklich Teams vergleichen, dann muss man auf andere Metriken, wie zum Beispiel Lead- und Cycletimes, ausweichen.

Mein Standpunkt: Die Velocity ist immer eine Teamvelocity und ein Storypunkt eben ein Teamstorypunkt. Beides Einheiten die für das Team einen Wert haben, im Unternehmen und über Teamgrenzen hinweg aber keine Vergleichbarkeit ermöglichen (sollen).


October 14, 2019 07:20 PM

October 12, 2019


Gelobt ist auch Geschimpft

Ich habe meine Kinder nie geschimpft wenn sie schlechte Noten hatten. Ich gebe nicht viel auf Zahlen die unreflektiert und oft kontextfrei versuchen die Leistung von Menschen abzubilden. Und doch konnte ich immer wieder die Wirkung von Leistungsdruck spüren.

Vor Tests, Klassenarbeiten und mündlichen Kontrollen war sie da die Angst und Unsicherheit. Sorge es nicht zu können, zu viel berichtigen zu müssen, schlechter zu sein als die Klassenkameraden. Das gleiche vor dem Zeugnis, Angst vor der Drei auf dem Papier.

Natürlich spielt hier das direkte Lernumfeld eine Rolle. Der Lehrer als Person des Vertrauens gibt schließlich eine Wertung ab. Unter die gute Note kommt ein Smiley unter die schlechte eben nicht. Beim Austeilen wird gelobt oder gemahnt, und sei es nur das Kopfschütteln des Lehrers.

Ich erinnere mich noch an eine Diskussion aus den Elternabend, es ging darum ob ein Notenspiegel unter die Arbeit geschrieben werden soll. Die Lehrerin machte das eh immer so und es wurde abgestimmt das ein Notenspiegel wichtig sei damit man wisse wie das Kind in Vergleich zum Rest der Klasse steht. Das man damit den Kindern im hinteren Drittel des Notenspektrums ein schlechtes Gefühl vermittle war egal. Im Gegenteil, das sollte ja ein Ansporn sein besser zu werden?!

Bei allem Meckern über andere kam mir aber selbst eine Einsicht. Ich habe meine Kinder nie geschimpft bei schlechten Noten. Ich habe sie aber gelobt wenn es gute Noten gab…

Ich sorgte also für gute Gefühle wenn sie der Norm entsprechen. Bei einem Unterschreiten der Norm blieb mir nur das Trösten, das Bestärken und das Aufzeigen der guten Leistungen im Test. Dem Endorphinrausch des Lobes gegenüber aber kein Vergleich.

Eine Situation in der man nur verlieren kann, denn man zeigt dem Kind eben doch das eine gute Note wertvoller ist als eine schlechte Note.

Die einzige Sinnvolle Lösung, welche ich sehe ist das komplette weglassen einer Benotung. Für mich heißt das nicht keine Lernziele zu definieren, sondern es geht einher mit dem formulieren, erreichen und evaluieren von Lernzielen.

Die schlechte Note ist am Ende ja nur ein Symptom nicht aber die Ursache von fehlender Kompetenz. Das Resultat ist aber meist keine reflexion von Können und Bedarf sondern schlicht ein Stempel das etwas nicht stimmt.

October 12, 2019 11:50 AM

October 05, 2019


Erster Monat - Schule von Morgen

Hinter den großen Kindern liegt jetzt ein reichlicher Monat in einer neuen Universitätsschule Dresden. Einer Schule in der Alles und Alle neu sind. Alle müssen sich eingewöhnen, Kindergartenkinder die das erste Mal eine Schule besuchen, dazu Grund- und Oberschüler die vorher an anderen Einrichtungen beschult wurden. Aber nicht nur Kinder, auch Pädagogen müssen sich und das neue Konzept, Umgebung und Schüler kennenlernen.

Insgeheim haben wir natürlich, wie viele andere Eltern auch, auf eine fertige Schule gehofft. Mit fertigen Strukturen, Konzepten und wo alles flutscht. Dem ist aber nicht so und das ist in Ordnung.

All die Lücken im Online-Schulportal, der Ausstattung oder der Schulhofgestaltung werden wett gemacht durch engagierte Pädagogen, die Großartiges leisten und dabei bis an ihre Leistunggrenzen gehen. Dafür kann ich nur danken, denn man spürt das hier der Wille lebt das Projekt zum Erfolg zu führen, das man bereit ist den Plan zu ändern wenn man merkt das der alte in eine Sackgasse führt.

Versuchte die Schule initial mit maximaler Freiheit in die Projektarbeit zu starten mussten die Pädagogen schnell feststellen das Jahre des Frontalunterrichts nicht einfach ausgeblendet werden können. Die Kinder müssen erst einmal wieder lernen Fragen zu stellen. Müssen lernen Arbeit gemeinsam zu erledigen und den Pädagogen nicht als Gegenspieler sondern als Unterstützer zu sehen. Das dazu noch grundlegende sozial Defizite einiger Schüler kommen mal außen vor.

Aktuell ist es nun so das die Universitätsschüler etwas mehr “Fachunterricht” haben. Zwei Stunden täglich altershomogene Betreuung in Mathe, Lesen und Schreiben, Sprachen, Kunst und Sport. Zwischen diesen Werkstätten wird frei an Projekten gearbeitet. Unseren Kindern hat das viel gebracht, etwas Struktur an der man sich orientieren kann und etwas Abstand zu den älteren Kindern aus Klassenstufe Fünf.

Ich finde es toll wie hier reagiert wurde. Ein Problem wurde identifiziert und adressiert. Es ist keine endgültige Lösung und auch nicht das wohin wir wollen aber es ist eine Basis auf der man aufbauen kann und die allen eine Verschnaufpause verschafft.

Ich bin sehr gespannt wie sich die Schule nun weiter entwickelt! Sorgen mache ich mich aber um die Pädagogen die ein hohes Pensum an Mehrarbeit leisten und vermutlich erst einmal weiter leisten müssen. Denn das Versprechen mit dem gleichen Personalschlüssel auszukommen wie eine Frontale Regelschule wird erst tragbar wenn die Mehrzahl der Kinder in der Lage ist eigenständig zu lernen.

Mein Fazit nach dem ersten Monat, es war kein Fehler unsere Kinder auf die Unischule zu bringen. Auch wenn alte Klassenkameraden bereits ihren ersten Test in Englisch geschrieben haben, so haben meine Kinder schon viel fürs Leben gelernt.

Universitätsschule Dresden

October 05, 2019 09:23 PM

September 28, 2019

Harald "LaF0rge" Welte

Sometimes software development is a struggle

I'm currently working on the firmware for a new project, an 8-slot smart card reader. I will share more about the architecture and design ideas behind this project soon, but today I'll simply write about how hard it sometimes is to actually get software development done. Seemingly trivial things suddenly take ages. I guess everyone writing code knows this, but today I felt like I had to share this story.

Chapter 1 - Introduction

As I'm quite convinced of test-driven development these days, I don't want to simply write firmware code that can only execute in the target, but I'm actually working on a USB CCID (USb Class for Smart Card readers) stack which is hardware-independent, and which can also run entirely in userspace on a Linux device with USB gadget (device) controller. This way it's much easier to instrument, trace, introspect and test the code base, and tests with actual target board hardware are limited to those functions provided by the board.

So the current architecture for development of the CCID implementation looks like this:

  • Implement the USB CCID device using FunctionFS (I did this some months ago, and in fact developing this was a similarly much more time consuming task than expected, maybe I find time to expand on that)

  • Attach this USB gadget to a virtual USB bus + host controller using the Linux kernel dummy_hcd module

  • Talk to a dumb phoenix style serial SIM card reader attached to a USB UART, which is connected to an actual SIM card (or any smart card, for that matter)

By using a "stupid" UART based smart card reader, I am very close to the target environment on a Cortex-M microcntroller, where I also have to talk to a UART and hence implement all the beauty of ISO 7816-3. Hence, the test / mock / development environment is as close as possible to the target environment.

So I implemented the various bits and pieces and ended up at a point where I wanted to test. And I'm not getting any response from the UART / SIM card at all. I check all my code, add lots of debugging, play around with various RTS / DTR / ... handshake settings (which sometimes control power) - no avail.

In the end, after many hours of trial + error I actually inserted a different SIM card and finally, I got an ATR from the card. In more than 20 years of working with smart cards and SIM cards, this is the first time I've actually seen a SIM card die in front of me, with no response whatsoever from the card.

Chapter 2 - Linux is broken

Anyway, the next step was to get the T=0 protocol of ISO 7816-3 going. Since there is only one I/O line between SIM card and reader for both directions, the protocol is a half-duplex protocol. This is unlike "normal" RS232-style UART communication, where you have a separate Rx and Tx line.

On the hardware side, this is most often implemented by simply connecting both the Rx and Tx line of the UART to the SIM I/O pin. This in turn means that you're always getting an echo back for every byte you write.

One could discard such bytes, but then I'm targeting a microcontroller, which should be running eight cards in parallel, at preferably baud-rates up to ~1 megabit speeds, so having to read and discard all those bytes seems like a big waste of resources.

The obvious solution around that is to disable the receiver inside the UART before you start transmitting, and re-enable it after you're done transmitting. This is typically done rather easily, as most UART registers in hardware provide some way to selectively enable transmitter and/or receiver independently.

But since I'm working in Linux userspace in my development environment: How do I approximate this kind of behavior? At least the older readers of this blog will remember something called the CREAD flag of termios. Clearing that flag will disable the receiver. Back in the 1990ies, I did tons of work with serial ports, and I remembered there was such a flag.

So I implement my userspace UART backend and somehow it simply doesn't want to work. Again of course I assume I must be doing something wrong. I'm using strace, I'm single-stepping through code - no avail.

In the end, it turns out that I've just found a bug in the Linux kernel, one that appears to be there at least ever since the git history of linux-2.6.git started. Almost all USB serial device drivers do not implement CREAD, and there is no sotware fall-back implemented in the core serial (or usb-serial) handling that would discard any received bytes inside the kernel if CREAD is cleared. Interestingly, the non-USB serial drivers for classic UARTs attached to local bus, PCI, ... seem to support it.

The problem would be half as much of a problem if the syscall to clear CREAD would actually fail with an error. But no, it simply returns success but bytes continue to be received from the UART/tty :/

So that's the second big surprise of this weekend...

Chapter 3 - Again a broken card?

So I settle for implementing the 'receive as many characters as you wrote' work-around. Once that is done, I continue to test the code. And what happens? Somehow my state machine (implemented using osmo-fsm, of course) for reading the ATR (code found here) somehow never wants to complete. The last byte of the ATR always is missing. How can that be?

Well, guess what, the second SIM card I used is sending a broken, non-spec compliant ATR where the header indicates 9 historical bytes are present, but then in reality only 8 bytes are sent by the card.

Of course every reader has a timeout at that point, but that timeout was not yet implemented in my code, and I also wasn't expecting to hit that timeout.

So after using yet another SIM card (now a sysmoUSIM-SJS1, not sure why I didn't even start with that one), it suddenly works.

After a weekend of detours, each of which I would not have assumed at all before, I finally have code that can obtain the ATR and exchange T=0 TPDUs with cards. Of course I could have had that very easily if I wanted (we do have code in pySim for this, e.g.) but not in the architecture that is as close as it gets to the firmware environment of the microcontroller of my target board.

by Harald Welte at September 28, 2019 10:00 PM

September 26, 2019


Klimastreik Dresden 2019

Nun ist es schon wieder eine Woche her das in Dresden laut den Organisatoren etwa 14.000 Menschen im Rahmen des globalen Klimastreiktages auf die Straße gingen. Deutschlandweit waren es mehr als 1.4 Millonen. Aufgerufen zum Streik hatte unter anderem Fridays for Future. Wir waren mit einigen Kollegen ab dem Dresdner Hauptbahnhof ebenfalls dabei.

Die räumliche Nähe und der Start der Demo zur Mittagszeit hat mit Sicherheit dazu beigetragen das der eine oder andere eine verlängerte Mittagspause oder einen frühen Feierabend investiert hat.

Die Demo selbst war unspektakulär, wenn keine Nazis oder Fußballerspieler angekündigt sind, dann ist auch nicht die ganze Stadt voller Robocops, dass zumindest war mal angenehm. Der Auftakt zog sich leider ganz schön in die Länge, so dass genug Zeit war selbstkritisch die Texte mancher Transparente und Schilder zu diskutieren um sich die Zeit zu vertreiben.

Auch die Organisatoren hatten wohl nicht damit gerechnet den kompletten Wiener Platz vor dem Dresdner Hauptbahnhof zu füllen. Als der Demozug dann auf Höhe des großen Gartens war ging eine Info durch die Reihe das jetzt die letzten am Hauptbahnhof gestartet seien. Das ist immerhin etwas mehr als ein Kilometer!

Da ich aus logistischen Gründen (oder fahrt ihr mit dem Auto zur Klimademo) die Kinder noch von der Schule abholen musste war die Demo für mich gegen 15 Uhr dann zu Ende. Ich staune aber dennoch das sogar eine demofaule Stadt wie Dresden so viele Menschen mobilisieren konnte! Kudos an alle die dabei waren und länger bleiben konnten als ich!

Bildquelle: Cornelius Braun

September 26, 2019 06:14 PM

Universitätsschule sucht Studierende

Die Universitätsschule ist ein Schulversuch, der neue Konzepte des Lernens in Schule erprobt. Die Schule ist eine Ganztagsschule und gelernt wird hauptsächlich in Projekten. Aktuell hat die Schule 200 Schüler*innen von der 1 bis zu 5. Klasse und wir suchen Studierende, die sich vorstellen können dieses Lernen sowohl in Projekten als auch in Werkstätten zu begleiten. Solltet Ihr/ Sie Interesse haben, freuen wir uns über eine Kontaktaufnahme.

September 26, 2019 04:59 PM

September 08, 2019


Agile Barcamp Leipzig 2019

Am vergangenen Wochenende zog es mich ins schöne Leipzig zum 4. Agile Barcamp der örtlichen Community. Rundum fand ich es ein gelungenes Event. Die Location in der alten Spinnerei allein ist eigentlich einen Trip wert, aber ich liebe so alte Gemäuer die zu neuem Leben erwachen einfach. Auch wenn ich sagen muss das ich nicht dauerhaft in einer solchen alten Fabrikhalle arbeiten wöllte. Ein dickes Dankeschön an die Orga und an alle Session OwnerInnen und Input GeberInnen, ihr wart großartig. Hier nun ein paar Gedanken die ich auf der (Un-)konferenz gesammelt habe.


Die Keynote zum Thema “New Pay – Alternative Arbeits- und Vergütungsmodelle” von Nadine Nobile, war locker gestaltet und ein guter Auftakt zu einer Veranstaltung in der immer wieder die Frage aufgeworfen wurde wo die Unterschiede zwischen alter und neuer Welt denn seien.

Kern der Keynote für mich war, dass sich mit neuer Arbeit ein neuer Anspruch verbindet. Im Kern streben wir alle nach Fairness, egal ob das Arbeitszeiten oder Entgelte betrifft.

Interessante Details waren für mich zwei Beispiele für moderne Vergütungsmodelle. So war die Erkenntnis, das sich eine eingeführte Gehaltsstufe in einem Unternehmen, welches eigentlich ein Einheitsgehalt zahlt, innerhalb von Monaten so negativ ausgewirkte das sie wieder abgewickelt wurde, schon überraschend.

Auch das die Abweichung zwischen Wunschgehältern und alten Gehältern in einer Genossenschaft nur um 15% unterschieden passt eigentlich gar nicht zu unserem raffgierigen Menschenbild.

Session - Agiles Mindset

Conrad Giller versuchte in einer Session zu erörtern was überhaupt so ein Mindset ist und schließlich zu zeigen wo der Unterschied zwischen dem traditionellen Manager Mindset und dem neuen agilen Mindset ist. Dabei definiert er das Mindset als Entscheidungshilfe beim lösen von Problemen.

Der Manager von früher fährt dabei nach dem Muster:

Ich weiß wie es geht und setze um/durch was ich brauche.

Auf der anderen Seite steht der Agilist mit seinem Team und folgt dem Credo:

Wir suchen und finden gemeinsam immer wieder die beste Lösung für alle Beteiligten.

Ich denke das ist ein sehr ideales Bild, denn ohne eine Richtung und einen Impuls von dem was gebraucht wird, läuft Wertschöpfung doch eher lustlos denn effektiv.

Session - Remote Team (building)

In einer Session die ich selbst anbot, holte ich mir einigen Input zum Handling von Remote Teams, da ich gerade selbst in die Situation gekommen bin ein solches zu bändigen.

Kredo des Inputs war durchweg das es in einem Remote Team eine der wichtigsten Sachen ist die Standorte auf einer persönlichen Ebene zusammen zu bringen. Sonst gibt es schnell Silos und Fingerpointing.

Im wesentlichen also, räumliche Nähe herstellen und sich gegenseitig besuchen, wann immer es geht. Darüber hinaus hilft regelmäßige, stabile und schnelle Kommunikation und ein gemeinsames Ziel. Die Standorte sollten nach gleichen Methoden arbeiten und auf gleichem fachlichen und technischen Stand arbeiten.

Es purzelten noch ein paar gute Methoden Vorschläge wie das Agilometer, Personal Mapping und Remote Pairing heraus die ich sicher noch einmal genauer evaluieren werde.

Session - Kampf dem Suppenkoma

Die Session von Phillip Staat widmete sich sehr praktisch und reflektierend dem Thema Energizer. Da ich diese eigentlich selbst oft als unangenehm empfinde stellte ich mich der Session und konnte ein paar Ideen mitnehmen.

Session - Personal Maps

Die schon in meiner Remote Team Session angesprochenen Personal Maps füllten später noch eine eigene Session von Florian Latzel der das Konzept vorstellte. Die Idee ist trivial, als Teambildende Maßnahme ist es die Aufgabe innerhalb des Teams von jeder Person eine mindmapartige Karte zu erstellen und verschiedene Facetten wie Hobbies, Familie, Werte, Ziele, etc. zu zeichnen und dann gemeinsamkeiten zu suchen.

Liegt sicher wieder nicht jedem aber wenn man sich zum Beispiel, das Johari Fenster bewusst macht, wird klar wie wertvoll diese Übung sein kann. Vor allem wenn man sie kollaborativ erarbeitet und nicht als schnödes Selbstvorstellungsspiel.

Nebenbei purzelte aus dem Auditorium noch eine ganze Reihe von Ideen heraus die in die gleiche Richtung gehen oder gut zur Methode selbst passen.

Session - Szenarien des agilen Wandels

Noch einmal Conrad Giller mit einer Übung zur Reflektion von Charakteren die sich schwer tun in der neuen Welt. Es wurden einige Charaktere erörtert wie der fiktive Bernie, ein Manager der viel von neuen Werten und Transparenz schwärmt, im Ernstfall aber immer das One on One Gespräch sucht.

Ziel der Übung war klar: Nicht Werten und nicht Urteilen sondern versuchen die Motive, Ängste und Werte zu erkennen. Im wesentlichen also empathisch versuchen zu verstehen warum eine Person tut was sie tut und nicht anders.

Keynote - Wird das agile doch wieder in Prozessen ertränkt?

Gunther Dueck, eigentlich schon ein Statement für sich philosophierte am Sonntag Morgen ebenfalls über die alte und die neue Welt. Vom Management und seinen Prozessen, dem Hang zur McDonaldisierung kam er schließlich zum wohl geilsten Bild des Barcamps:

Manager sind eigentlich wie Hunde, sie sind Rudeltiere die erstmal die Hierarchie ausmachen und sich dann zum Ziel dirigieren lassen, am Ende aber immer freudig mit dem Schwanz wedeln. Auf der anderen Seite sind die Agilisten die wie Katzen ihr eigenes Ding machen und ein Thema nur angehen wenn sie es selbst wollen. Katzen wedeln auch mit dem Schwanz, es bedeutet aber etwas ganz anderes.

Auf jeden Fall hatte diese Keynote einen gaaanz großen Unterhaltungsfaktor und viele Anstöße zum später nachlesen und nachdenken.

Session - Die No-Go Methode

Eine sehr praktische Session stellte den Wert von Abstimmungen in Teams in Frage. Das oft genutzte einfache Abstimmen per Dot-Voting stellt immer nur die eine Seite des Willens dar.

Die Teilnehmer sollten zunächst mittels der 6-3-5 Methode Vorschläge für ein Teamevent erstellen. Im Anschluss sollten zunächst alle abstimmen welchen der Vorschläge sie annehmen. Die Wahl war recht klar, die Mehrheit wollte einen Escape Room Ausflug machen.

Doch der zweite Schritt war anders, jetzt sollte man parallel abstimmen was man auf keinen Fall will. Und hier wendete sich das Blatt, denn es fanden sich sehr viele Stimmen, welche eben nicht in einen Escape Room wollten.

Simples Abstimmen hätte hier also Personen in eine Zwickmühle und unangenehme Situation gebracht.

Session - Erfolgsmessung in Teams

Die Eingangsfrage der Session war: Wie kann man den Erfolg von Retromaßnahmen messen. Als Mittel wurden Causal Loop Diagrams vorgestellt und ausprobiert. Leider war mir die Session etwas zu verworren, der Kern wird aber dennoch meine Toolbox berreichern.

Bildquelle: Agile Barcamp Leipzig

September 08, 2019 05:59 PM

August 23, 2019


Erste Woche - Schule von Morgen

Wie bereits in meinem Posting Reboot angeteasert haben meine Kinder die Gelegenheit seit Montag die
Universitätsschule Dresden zu besuchen. Grund für einen Schulwechsel im Allgemeinen war der katastrophale und demotivierende Unterricht den wir in der Grundschule von Bannewitz vorgefunden haben. Die Wahl auf die Universitätsschule fiel am Ende ein wenig durch die Koinzidenz von überzeugendem Konzept, richtigem Zeitpunkt und vielleicht etwas Glück.

Das Konzept der Schule sieht ein Lernen in Projekten und viel Werkstattarbeit vor. Den Kindern soll nicht mehr fest vorgegeben werden wie, woran und mit wem sie sich den Stoff des Lehrplans erarbeiten. Die Klassenstufen eins und zwei sowie drei und fünf wurden zum Schulstart jeweils zu Stammgruppen zusammengelegt. Dadurch erreicht man leichter ein Gefühl der Zusammengehörigkeit als würde man alle Kinder komplett frei laufen lassen. Für die Eltern steht somit auch immer ein Lernbegleiter zur Verfügung der das Pendent zum Klassenlehrer darstellt.

Lernbegleiter, das Wort mag sperrig klingen folgt aber dem Konzept der Schule. Die Kinder sollen lernen selbst zu lernen. Ihren Weg zum Wissen finden und an den Aufgaben wachsen statt vorgekautes Wissen ohne Widerworte zu konsumieren. Der Bruch im Worte wird soweit ich es beobachte zumindest von der Schule durchgezogen. Manch Eltern beim Schwatz auf dem Hof sprechen aber noch immer vom Lehrer und der Klasse.

Die “Klasse” existiert tatsächlich noch auf Seite der Bürokratie und in vielen elterlichen Köpfen, die Grenze zwischen Grund- und Oberschule wurde aber bereits aufgeweicht. Wobei man aber den Altersunterschied schon deutlich merkt und hier sicher noch ein gutes Stück Lernarbeit zu tun ist damit aus Oberschul- und Grundschullehrern, Lernbegleiter für die Klassenstufen 1-10 werden. Auch hier ein Bruch im Namen, nicht von Klassen sondern von Stammgruppen ist die Rede und die Kinder finden sich in Teams zusammen um an Themen in Form von Projekten zu arbeiten.

Wenn eine Schule startet, dann natürlich nicht ohne Holpern. Die Technik will nicht so wie sie soll. Sei es das Anmeldesystem im Keller das keinen WLAN Empfang hat und nach zwei Dutzend Kindern die Segel streicht, oder die Laptops die irgendwie jeden Tag startbereit sein sollen. Ärgerlicher und schwerer zu beseitigen ist da schon der langweilige Schulhof und die maroden Fenster.

Freilich ist nach einer Woche noch nicht der Zeitpunkt gekommen von einem Erfolg zu sprechen aber man spürt in der ganzen Schule das sich Pädagogen und Wissenschaftler viele Gedanken gemacht haben und eine motivierte Stimmung herrscht. Den Kindern gefällt es bis jetzt, auch wenn man ihnen als auch den Pädagogen die Erschöpfung ansieht und sie totmüde Abends in ihre Betten fallen.

Die Tochter sagt beim Abendbrot: “Ich hab mir die neue Schule eigentlich anders vorgestellt. Das da ganz viele Tische stehen wo man dann Arbeitsblätter mit anderen Kindern bearbeitet.” Und mir fällt wieder der dicke Aktenordner ein, der nach zwei Jahren Regelschule in Bannewitz tatsächlich nicht ausgereicht hat die Flut von Kopien noch zu halten. Etwas anderes als Arbeitsblätter und Einzelarbeit haben meine Kinder nicht gelernt um zu lernen. Ich vertraue darauf das die Pädagogen der Universitätsschule es schaffen den 220 Kindern die in diesem Jahr gestartet sind (und allen die noch kommen) zeigen können, dass sie fürs lernen eigentlich gar nichts brauchen als Neugier und ihren eigenen Kopf.

Universitätsschule Dresden

August 23, 2019 10:59 PM

August 19, 2019



Wer weiß schon was sich hinter einem neuen Kollegen verbirgt? Wer weiß ob die Einführung einer neuen Methode oder Technologie den erhofften Erfolg bringen wird? Die Frage steht oft im Raum, vom Management bekommt man dann gern einen Vertrauensvorschuss.

Aber was ist eigentlich ein Vertrauensvorschuss? Kann man Vertrauen eigentlich vorschießen? Ist Vertrauen so etwas wie eine Währung? Ist es ein Topf der man voller oder mal weniger voll sein kann? Oder ist Vertrauen doch eine binäre Sache?

Meine ganz persönliche Meinung: Entweder man hat Vertrauen, oder eben nicht. Vertrauen bedeutet für mich, dass ich daran glaube das Jeder sein Bestes gibt und an einem Erfolg interessiert ist. Dabei akzeptiere ich aber auf der anderen Seite, dass ein Scheitern möglich ist oder auf dem Weg zum Ziel Fehler passieren.

Ein Vertrauensvorschuss bedeutet in meinen Augen, dass ich eben nicht daran glaube das jemand ein gesetztes Ziel erreichen wird. Oder zumindest nicht den vorgeschriebenen Weg einhalten wird. Es bedeutet, dass ich eigentlich nicht vertraue und im Falle eines Scheiterns mit negativen Konsequenzen agieren werde. Ein ausgesprochener Vorschuss von Vertrauen ist für mich also in aller Regel die Ankündigung von Erfolgsdruck und Kontrolle.

August 19, 2019 07:01 PM

July 22, 2019

Michael "mickeyl" Lauer

Fabrique Noir – Space Travel

I'm enjoying creating music since 1981. First on analogue synthesizers (SIEL OPERA 6) and drum machines (ROLAND TR-505), later on with digital synths and workstations (KORG M1, KORG 01/Wfd). From 1986 to 1989 I created my music mainly on the COMMODORE AMIGA. The PC platform almost killed my motivation. Switching from hardware sequencers to a software sequencer was tough for me, later on an abundance of possibilities (I earned money and bought too many devices) somewhat paralyzed me. The birth of my doughter Lara-Marie in 2011 did add a share to my "uncreative pause". Still, I never stopped enjoying (making) music, in the meantime with Pianos, Guitars, and Ukuleles. Over three decades worth of melody and text fragments have continued to haunt me again and again ("use us, finish us, ..."). When I had health issues early this year (everything well now), I finally vowed to my self to start releasing music again. Four months later the first result of these endeavours can be seen. Originally it should've been a completely different thing, but sometimes creative processes take their own turns. My first album after three decades of mostly idling is called "Space Travel", inspired by the legendary Apollo 11 mission from 1969. It is an electronic album and available here: Spotify, Apple Music, iTunes, Bandcamp, Amazon Music, Tidal, Deezer, Youtube Music, iHeartRadio. As for the aforementioned melody and text fragments… apart from one tiny sequence, there is only new material on this album. I wanted to check whether I still have the mojo before going back in time. A bit of more info with regards to the tracks is here.

by Mickey at July 22, 2019 12:00 PM

May 17, 2019

Michael "mickeyl" Lauer


When I started this blog in 1999, it contained mostly personal stuff. Blogs were a new thing, Facebook and Twitter were five respectively seven years away, and it felt appropriate to me. Later on, I switched to english and added more about my professional projects – hence the focus moved to rather technical posts. Personal matters felt more appropriate on Facebook. In an attempt to gain back control about my content, I recently moved the blog from Wordpress to Lektor. The next step for me is reintroducing personal matters. Not many, but now and then. I won't bother with adding tags or so, so hopefully my dear readers won't mind stumbling over non-technical content here and there. This is the first personal matter entry. I used to have fairly good health. Apart from being a slight bit overweight for the most part of my life and the obligatory annual cold I never had any serious issues. I went for diet once and then, but the damn yoyo effect always cought me. My height is 165cm and in the last 18 years I went from 76kg (which was okish) to 96kg (which is way too much). Just recently I started to feel sick. I was tired more often and had a little base nervousness that had no obvious reasons. From time to time I had pressure on my ears which turned slowly into a ringing. On the 23th of March this year, I went to bed after a tabletennis match at midnight, being almost shaky. I woke up 5 hours later and felt miserable – very nervous and with an uncomfortable level of ear pressure. I drove to the emergency hospitalization and they found out that my blood pressure and my level of blood glucose were much too high. They gave me 5mg of an antihypertensive drug and released me some hours later. My family doctor dropped the truth bomb: I have the blood values of a 60 year old. I'm weighing way too much and need to start excercising as well as change my nutrition. As an interesting coincidence, I'm now at the same age (47) my father died. I was eleven years old when that happens – and now I have a little doughter and a wife who both need me. I NEED TO TAKE BETTER CARE OF MY HEALTH. This time I'm doing it for real. Since 23th of March, I lost 10kg by eating better and being more active. Here's what I did in detail: No more drinks that contain sugar or fruit sugar. There goes my beloved orange juice. Breakfast on weekdays is a natural yoghurt adding some fresh fruits. Breakfast on weekend is bread with salmon or lean cold meat. I swapped most of the usual meat with lentils, peas, and beans. I'm down to eating meat only on two days per week. I excercise between 40 and 60 minutes a day. Every day. EVERY DAY. No excuses. Usually I'm fast walking 4-6km or swimming one kilometer. Add the occasional weight lifting with dumb-bells. Besides loosing the 10kg, the net effect is I'm feeling way better. My blood values are back to normal, I'm less tired, have more energy and can concentrate better. I'm going to continue with this routine until I'm back at 76kg and then try to develop a balance so that mid-term my weight keeps being stable. So: All is good. I'm more often hungry than before, but I learned to live with it, almost embracing it, before the next meal is due. This is what I wanted to share with you. Look after your health, don't neglect it.

by Mickey at May 17, 2019 12:00 PM

January 21, 2019

Michael "mickeyl" Lauer

From Wordpress To Lektor

Every five to six years I'm revamping my website. This is now the 4th major incarnation. I created my first website somewhere in the 1990s – back then handcoded with HTML. I vaguely remember that it looked better than many others due my use of Bitstream's TrueDoc Technology. In 1999, I started my blog. It was a custom development based on the web framework Spyce, something like PHP using Python. To create a new article, I just copied a new file to a dedicated directory and it appeared after reloading the page. Some years later facilities like HTML-based live editing and a proper management interface teased me into migrating the site to Wordpress. Apart from adding content and switching themes once and then, nothing groundbreaking happened though. The longer I had used Wordpress the more I felt uneasy about the "lack of control". I missed maintaining my site with a revision control system. I also fell in love with Markdown as a more agnostic and future-proof way to format articles. And – last but not least – to be honest, I feel that a site that only changes about once a month does not need to be dynamically generated. So I made the decision to get rid of Wordpress and come back to something way more simple. In the meantime, a lot of static site generator (SSG) projects have appeared and so I had a wealth of projects to choose from. Due to my unstoppable love for Python, I chose Lektor. Although automatic export and import facilities are available, I decided to more or less rewrite the site, thus I did not integrate the older articles yet. I really plan to do this though. Until then you can get to the old site via

by Mickey at January 21, 2019 12:00 PM