Pet project: Symulator Enigmy

Jakiś czas temu, zainspirowany filmem The Imitation Game, zacząłem drążyć temat niemieckiej maszyny szyfrującej Enigma z II Wojny Światowej. Chciałem zrozumieć jej działanie i, być może, spróbować stworzyć moją własną, elektroniczną, wersję tego urządzenia.

The Imitation Game (2014)

Zrozumienie mechanizmu zajęło mi więcej czasu niż przypuszczałem. Bardzo pomógł mi w tym film na YT na kanale numberphile, w którym prowadzący objaśnia temat na prawdziwym egzemplarzu Enigmy.
Oprócz tego ciekawym dodatkiem z punktu widzenia historycznego okazał się rozdział o Enigmie z książki Łamacze Kodów – Historia Kryptologii Davida Kahna. Autor w zajmujący sposób opowiada o tym, jak maszyna ewoluowała w czasie tak, aby coraz bardziej utrudniać przeciwnikom łamanie szyfrów.

Łamacze kodów Historia kryptologii David Kahn
Enigma widnieje nawet na okładce książki

Ostatecznie okazało się, że nie jest to aż tak skomplikowane urządzenie. Powiedziałbym wręcz, że jest genialne w swojej prostocie. Wiedząc już jak działa Enigma zabrałem się za pisanie programu.

Napisanie samego algorytmu okazało się być naprawdę proste – całość logiki zamknęła się w 160 liniach Javascriptu.
Bardziej czasochłonne okazało się stworzenie UI – prawdopodobnie przez moje niezbyt wysublimowane umiejętności tworzenia arkuszy CSS oraz to, że postanowiłem jednocześnie nauczyć się obsługi webpacka 🙂

Uważam że całkiem fajnie wygląda też łączenie kabli w panelu w dolnej części aplikacji (plugboard) gdzie wykorzystałem pakiet https://github.com/sasza2/arrows który pozwala na rysowanie zakrzywionych (krzywe Beziera) linii bardziej przypominających kable niż zwykłe, proste odcinki.

Plugboard z krzywymi Beziera

Całość kodu i instrukcję można znaleźć pod tym adresem: https://github.com/Bajena/enigma a pobawić się można tutaj: https://bajena.github.io/enigma/index.html.

Symulator enigmy w akcji
Symulator enigmy w akcji

Hanami oczami Railsowca

Po kilku latach programowania w Ruby on Rails poczułem pewne wypalenie i zacząłem szukać jakiegoś urozmaicenia. Z tego powodu zdecydowałem się wziąć na warsztat jeden z konkurencyjnych Ruby’owych frameworków – Hanami.

Przez kilka miesięcy po godzinach bawiłem się Hanami i stworzyłem aplikację Flashcard Genius, która wspomaga mnie w nauce słówek z języka włoskiego. W najnowszym poście spisałem moje wrażenia na temat tego co podczas tworzenia tej aplikacji spodobało mi się w Hanami i o tym, czego mi w nim brakuje.

Post można przeczytać na medium i DEV.

Co oznacza błąd „invalid byte sequence in UTF-8” w Ruby i jak go naprawić?

Jeśli trafiłeś na tą stronę to prawdopodobnie zmagasz się z tym samym problemem, co ja. Z tego posta dowiesz się trochę o tym, czym są kodowania znaków, skąd biorą się nieprawidłowe sekwencje bajtów i jak je naprawić.

Post można przeczytać pod tym adresem:

https://dev.to/bajena/solving-invalid-byte-sequence-in-utf-8-errors-in-ruby-1f27