Category Archives: Weblog

Making an Enigma simulator

When I was ten or so I read the book “Encyclopedia of Espionage” by Peter Wright. I was used to James Bond movies and it was of course exciting to see things explode, but I was even more excited by this book. Instead of a fictional action hero saving the world it gives examples of how a bit of smart thinking helped saving actual lives. Cool! One of the fields Wright was involved in was ELINT (Electronic Intelligence) and his book describes several efforts to break different codes and coding machines. Among them Ultra, the (successfull) British effort to break the Enigma machine (although credit for breaking the machine first should go to the Polish).

The Enigma machine was developed in Germany shortly after the First World War. There have been different versions but the central element was a system of rotors. Each rotor would scramble a letter to a different letter and this was repeated several times. After every keystroke (some of) the rotors would rotate and the encryption would change. If you type for example “AAA” it would encode to “FTZ”. This was a massive improvement over older methods where you could do for example frequency analysis to find the key (ie. count the occurance of letters to determine the key). This video gives a nice introduction to the older methods and some of the inner workings of the Enigma. I saw this video on a rainy Saturday and I was, again, fascinated. The system seemed to be straightforward enough – could I simulate how it worked?

My first choice for a simulation would be to use Python. It is an all-purpose language and I know it quite well. I use it for basically everything, from when I’m too lazy to find my pocket calculator to calculating the spectra we measure in the lab. However, I always wanted to learn Objective-C and Cocoa, the languages used to write Mac OS X and iOS apps.

Objective-C is a C-like language you can use to write independent command line apps or you can use it together with Cocoa. Cocoa is an “Application Programming Interface” with all the standard interface elements you find in Mac programs, for example the windows, buttons and textfields. This is nice because it saves the programmer a lot of work. It is also nice for the user because the same elements work the same in different programs. That most people now think “I never thought about that before” is a testament to the good job Apple did. (and if you wonder why the buttons in Matlab and some other programs behave a bit weird, it is because they don’t use Cocoa).

I don’t want to bore you with too much programming details, but it is challenging to learn a language by writing an encoder, since the letters coming out are (by definition) scrambled in seven to nine steps. Good luck finding out where you made the mistake! I also found out (again) how difficult it is to make a good user interface. Take for example one of the textfields for the rotor position. The user should type in a letter, but what if they use a number? For numbers in the range 1-26 the number will be converted to a letter, for other numbers and non-letter characters it will revert back to the old character. How do you implement something like that efficiently? And how do the textfield and the up/down buttons next to it work together? In Cocoa Apple supplies a lot of nice interface elements, but there is still a lot to do. And of course, Apple doesn’t supply a WWII-style plugboard so I had to make one myself. It is definitely the part that needs most improvement.

It is nice to play around with programming this way. Is anybody waiting for yet another enigma simulator? Nope. Is it cool to learn something new? Yes. Am I proud of what I made since that rainy Saturday? Certainly!

If you want to know more about the Enigma, you can find it here. That page also includes some links with much more information. The app (for Mac OS X 10.5 and above*) and some instructions can be found here.

*UPDATE: I changed it from 10.7 only to 10.5 and above.

New URL

robbertbloem.nl is death, long live robbert.org!

Some time ago I put some photos online and I wanted to give the URL to somebody. “Bloom? Blum?” “No, Bloem!” “Uh… okay” It also occurred that .nl may seem natural for Dutch people, but not for the rest of the world (“Nepal?”). In any case, I decided it was time to change it. And so I did!

By the way, robbertbloem.nl should still work for email.

Fietsen naar Rapperswil

Zoals iedereen inmiddels al aan heeft mogen horen heb ik een paar weken geleden een fiets gekocht. Ik had nooit de moeite genomen omdat ik natuurlijk tamelijk hoog woon (als in: 100 meter boven Zürich stad, ik woon op de eerste verdieping en ik fiets normaal sowieso niet de trap op). In ieder geval, ik was bang dat ik toch nooit de fiets zou nemen. Die vrees is wel en niet gegrond. Ik pak de fiets niet om boodschappen of andere alledaagse dingen te doen, maar wel om een beetje aan mijn conditie te werken. Ik heb nu een aardig rondje om de Zürichberg, bijna 13 km, 250 meter hoogteverschil, ongeveer drie kwartier fietsen. Prima!
Van het weekend kwamen we terug uit Faido (ten zuiden van de Gotthardtunnel) en ik kwam tot de volgende conclusies: 1. in het lab is niet veel te doen; 2. het is mooi weer en 3. het landschap ziet er niet verkeerd uit. Ik bedacht me dat ik best op de fiets zou kunnen springen en een beetje rond zou kunnen touren. En waar beter te beginnen dan met het meer het dichtst in de buurt? En zo zat ik vanochtend op de fiets.
De grootste challenge was nog Zürich zelf. Ik heb tot nu toe geprobeerd de stad zelf een beetje te mijden. Er is veel verkeer en niet zoveel duidelijke fietspaden. Maar de bebouwing werd steeds lichteren de helling een beetje steiler. Voor ik het wist zat ik alweer in Hirzel, een lullig dorpje bovenop een heuvel. Het hoogste punt van de tocht. Ik had gepland er rond lunchtijd te zijn, ik was er om 12:05. Zwitserse precisie zeg maar. Uiteraard is het ook zo’n dorpje waar de winkels om 12:00 uur dicht gaan omdat de kinderen dan van school komen. Met andere woorden, ik fietste tussen de schoolkinderen van dichte winkelde naar dichte winkel.
Ik had er al een beetje rekening mee gehouden en wat proviand meegenomen. Op een uitzichtplek heb ik wat gegeten en, belangrijker, een beetje bijgekomen van de zadelpijn.
Sindsdien ging de weg vooral omlaag. Je kan met 60+ km/u omlaag, maar eigenlijk ben ik daar te schijterig voor (zeker op een plek die ik niet ken). In Pfäffikon nog een Spinatwähe gekocht, een soort quiche. Daarna maar doorgefietst naar het hotel.
Het hotel staat in Hurden, midden op de Seedam… Het is vast heel uniek in Zwitserland maar op een Nederlander maakt het niet veel indruk.
Ik type dit nu in Rapperswil, het is een leuk oud stadje met een kasteel/vesting en zo. Ik zou natuurlijk al die trappen op kunnen klimmen, maar na 47 km fietsen ben ik meer toe aan een biertje aan de haven (wat minder romantisch is dan het klinkt want het ligt ook naast een drukke weg en een druk station). Maar het bier smaakt goed!

Onderhoud…

Op het moment ben ik bezig deze blog te updaten… Een nieuw likje verf zeg maar. Dit is een default-WordPress theme en eigenlijk vind ik ’em wel aardig (alhoewel de foto’s in de header niet van mij zijn).

Update-je: Ik heb al een hele tijd niets meer met de website gedaan en ik moet zeggen dat WordPress wel een stuk vooruit is gegaan. Het is echt een web-app geworden. Ik vraag me alleen wel af hoe snel het is…

Update 2: De foto’s zijn nu wel van mij. Toch handig als je achternaam “bloem” is :) Het past ook goed bij de rest van het kleurenschema van de site, maar dat is toeval.

Provinciale verkiezingen en het Midden Oosten

Het is een beetje vreemd om de huidige verkiezingscampagne in Nederland te volgen. Als “expat” mag je aan de verkiezingen voor de Tweede Kamer en Europa meedoen, maar natuurlijk niet aan gemeentelijke en provinciale verkiezingen. Voor de gemeentelijke verkiezingen vorig jaar maakte dat niet zoveel uit. Ik volgde wat D66’ers in Groningen (blogs, Twitter) maar dat was vooral omdat ik die mensen ken. Voor de provinciale verkiezingen geldt hetzelfde, ik ben wel geïnteresseerd maar niet betrokken. Toch hebben deze verkiezingen wel een landelijke uitwerking: de Eerste Kamer wordt gekozen door de Provinciale Statenleden.

Op Twitter zie je berichten waarin staat dat mensen positief op het flyeren reageren en waarin politici elkaar van verkiezingsretoriek beschuldigen. Uitzondering is Thom de Graaf, die gisteren twitterde: “@Thdegraaf: Je valt in een tv-programma en ziet je politieke leider met een gele sticker op zijn voorhoofd. #nietjaloers”. Het komt allemaal wat provinciaals (no pun intended) over, zeker als even later in de time line ook de onrust in het Midden Oosten voorbij komt. Midden Oosten correspondent Harald Doornbos is in Egypte aan de grens met Libië en ziet de filmpjes gemaakt door terugkerende Egyptenaren en twittert: “@gpdMiddleEast: Demonstrerende jongen wordt voor z’n hoofd geschoten door Libische politie, bloed gutst eruit. Vermoedelijk in de oostelijke stad Al Bayda”. Over “niet jaloers” gesproken.

De toestand in het Midden Oosten houdt mij eigenlijk best wel bezig. De mensen zijn zo kwaad over hun situatie dat ze niet gaan flyeren of een sticker op het voorhoofd plakken, maar dat honderdduizenden drie weken kamperen op een plein midden in de stad, terwijl ze aanvallen afslaan van politieagenten en andere aanhangers van het regime. In Libië waren zelfs luchtaanvallen. In het Midden Oosten wordt gestreden voor vrijheid van burgers en tegen repressie door de overheid. Op Al Jazeera zien we mannen die wild met stokken om zich heen slaand met kamelen door een menigte galopperen. We lezen dat in Libië met anti-aircraft guns op de menigte wordt geschoten. We horen de gruwelverhalen van journalisten. En terwijl we dit zien, lezen en horen kunnen we niets doen… behalve onze eigen, als vanzelfsprekend aangenomen, grondrechten ietsje meer koesteren.

Maar in Nederland kijkt niemand er inmiddels meer van op dat de PVV met het idee komt om hele families in tuigdorpen op te sluiten, zelfs voordat de rechter gesproken heeft. Van het CDA hoeft de tussenkomst van de rechter ook niet meer per se om mensen een vrijheidsstraf op te leggen. En het kabinet komt met het plan om de rechtsbijstand te verlagen. Iemand kan dus een celstraf opgelegd krijgen en zijn familie afgevoerd zien worden naar een tuigdorp door een overwerkte Officier van Justitie die zijn targets moet halen en kan dan alleen als hij voldoende geld heeft naar de rechter om zijn gelijk te halen.

Op het Nederlandse journaal zie ik Rutte trots naast een bord met 130 km/u staan. Ik lees in de krant dat roken in kleine cafés weer toegestaan is. Ik hoor het gekakel in de verkiezingsdebatten. En terwijl ik dit zie, lees en hoor kan ik niets doen… als expat mag ik niet stemmen voor de provinciale staten. Vervelend, als je een als vanzelfsprekend aangenomen grondrecht even niet mag uitoefenen.