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

Sponsored Post Learn from the experts: Create a successful blog with our brand new courseThe WordPress.com Blog

WordPress.com is excited to announce our newest offering: a course just for beginning bloggers where you’ll learn everything you need to know about blogging from the most trusted experts in the industry. We have helped millions of blogs get up and running, we know what works, and we want you to to know everything we know. This course provides all the fundamental skills and inspiration you need to get your blog started, an interactive community forum, and content updated annually.

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

Sparse fieldsets: Przyspieszamy JSON API

Zgodnie ze zwyczajem z ostatnich kilku miesięcy chciałbym zaprosić do przeczytania mojego najnowszego posta na Medium. Artykuł pokazuje jak w prosty sposób przyspieszyć aplikację wykorzystującą JSON API za pomocą mało znanej (mimo że opisanej w specyfikacji) funkcji „sparse fieldsets”.

Post można przeczytać pod tym adresem: https://medium.com/@bajena3/decrease-load-on-your-json-apis-by-using-sparse-fieldsets-3e2c9491dc16

Google Apps Scripts – równoległe zapytania HTTP i obsługa błędów

W moim najnowszym wpisie na Medium można przeczytać o tym, w jaki sposób przyspieszyłem moje aplikację bazujące na Google Apps Scripts wykonując wiele zapytań HTTP jednocześnie oraz jak poradziłem sobie z problemem obsługi błędów w sytuacji, gdy część zapytań zwraca błędne rezultaty.

Post można przeczytać pod tym adresem:
https://medium.com/@bajena3/google-apps-scripts-parallel-http-requests-with-retries-5a24feaf61d8