ubergeek.de: Neueste Artikelhttps://www.ubergeek.de/weblog/feed/2023-09-05T01:17:02+02:00André Gewertagewert@ubergeek.dewww.ubergeek.dehttps://www.ubergeek.de/weblog/article/25/Der+Sommer+gehtDer Sommer geht2023-09-01T21:37:00+02:002023-09-05T01:14:29+02:00<p>Die Lebkuchen liegen schon wieder in den Regalen, die Tage werden spürbar kürzer. Ganz klar: <br>der Sommer geht. Hier noch ein paar (früh-)sommerliche Impressionen aus Lübeck.</p>
Gewert, Andréagewert@ubergeek.de<p>Die Lebkuchen liegen schon wieder in den Regalen, die Tage werden spürbar kürzer. Ganz klar: <br>der Sommer geht. Hier noch ein paar (früh-)sommerliche Impressionen aus Lübeck.</p>
<p>Entstanden sind diese Bilder im Mai zu Himmelfahrt – als das Wetter frühsommerlich war und auf einen schönen Sommer hat hoffen lassen. Am Ende war der Sommer ziemlich verregnet, aber ich will mich nicht beklagen.</p>
<div class="shadow slideshow autoplay">
<div class="frame">
<div class="images">
<div class="image">
<a href="/media/22494d1fba33e4eaed7ba25dae9943a7/image/original/1" data-lightbox="preview-album_61" data-title="20230523_0001.jpg">
<img loading="lazy" src="/media/22494d1fba33e4eaed7ba25dae9943a7/image/preview/1"
width="600" height="600"
srcset="/media/22494d1fba33e4eaed7ba25dae9943a7/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
An der Kanalstraße </div>
</div>
<div class="image">
<a href="/media/b1c7530e0d321fd22c5a39346c98f54a/image/original/1" data-lightbox="preview-album_61" data-title="20230523_0006.jpg">
<img loading="lazy" src="/media/b1c7530e0d321fd22c5a39346c98f54a/image/preview/1"
width="600" height="600"
srcset="/media/b1c7530e0d321fd22c5a39346c98f54a/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
An der Kanalstraße </div>
</div>
<div class="image">
<a href="/media/672ca329f39b74e6957f1372cb5b6cf2/image/original/1" data-lightbox="preview-album_61" data-title="20230523_0007.jpg">
<img loading="lazy" src="/media/672ca329f39b74e6957f1372cb5b6cf2/image/preview/1"
width="600" height="600"
srcset="/media/672ca329f39b74e6957f1372cb5b6cf2/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
An der Kanalstraße </div>
</div>
<div class="image">
<a href="/media/a1faab1415fbcd7ef8fc850a864f8fee/image/original/1" data-lightbox="preview-album_61" data-title="20230523_0010.jpg">
<img loading="lazy" src="/media/a1faab1415fbcd7ef8fc850a864f8fee/image/preview/1"
width="600" height="600"
srcset="/media/a1faab1415fbcd7ef8fc850a864f8fee/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Am Krähenteich </div>
</div>
</div>
</div>
</div>
https://www.ubergeek.de/weblog/article/24/Once+in+a+LifetimeOnce in a Lifetime2021-10-04T00:11:00+02:002021-10-04T00:11:10+02:00Gewert, Andréagewert@ubergeek.de<p>Fernsehwerbung ist immer wieder dafür gut, einem alte und fast vergessene Songs ins Gedächtnis zu rufen. Vor einigen Monaten jedenfalls lief in »meinem« Programm immer mal wieder der Trailer für irgendeine neue Serie oder was auch immer, das habe ich längst vergessen. Nicht vergessen habe ich jedoch den Song, mit dem der Werbespot unterlegt war: <em>Once in a Lifetime</em> von den <em>Talking Heads</em>. Und niemand soll mir erzählen, die <em>Talking Heads</em> seien nicht großartig gewesen.</p>
<div class="video-preview" data-vid="5IsSpAOD6K8" style="max-width: 600px">
<a href="https://www.youtube.com/watch?v=5IsSpAOD6K8" target="_blank">
<img src="/media/5IsSpAOD6K8/yt/ytthumb"
width="600" height="400" alt="Youtube" title="Youtube-Vorschau">
</a>
</div>
https://www.ubergeek.de/weblog/article/23/Neue+Software+Image-Converter+fuer+MikrocontrollerNeue Software: Image-Converter (für Mikrocontroller)2021-10-03T23:55:00+02:002023-09-05T01:15:21+02:00<p>Wer für Mikrocontroller programmiert, und seien es auch nur Kleinigkeiten, wird schnell in die Verlegenheit kommen, Bilddaten in C-Quelltext kodieren zu müssen. Zu den zahlreichen Werkzeugen, die es dafür bereits gibt, kommt jetzt ein neues dazu, das vermutlich (oder hoffentlich?) ein paar besondere Eigenschaften besitzt.</p>
Gewert, Andréagewert@ubergeek.de<p>Wer für Mikrocontroller programmiert, und seien es auch nur Kleinigkeiten, wird schnell in die Verlegenheit kommen, Bilddaten in C-Quelltext kodieren zu müssen. Zu den zahlreichen Werkzeugen, die es dafür bereits gibt, kommt jetzt ein neues dazu, das vermutlich (oder hoffentlich?) ein paar besondere Eigenschaften besitzt.</p>
<p>In meinem Sommerurlaub, also bereits vor ein paar Wochen habe ich aus verschiedenen Gründen <em>auf die Schnelle</em> einen Image-Converter geschrieben, der für die Verwendung mit unterschiedlichen Mikrocontroller-Entwicklungsumgebungen gedacht ist.</p>
<p>Hauptbeweggrund dafür war die Tatsache, dass die Farbgrafiken für die Circuitmess-Systeme (CircuitOS in <em>Ringo</em> und <em>Nibble</em>) im RGB-565-Format kodiert werden, ich mit <a href="https://github.com/cirquit/UTFTConverter" target="_blank">UTFTConverter</a> aber eigentlich nur ein einziges brauchbares Tool finden konnte, das überhaupt unter Linux lauffähig ist. (Nebenbemerkung für alle, die an etwas ausgefallenen Programmiersprachen interessiert sind: Der UTFTConverter ist in <em>Haskell</em> geschrieben. <em>Hüst</em>.) Für die schnelle Konvertierung ist das Tool etwas unhandlich, weil es kein grafisches User Interface gibt, sondern ausschließlich über die Shell genutzt werden kann.</p>
<p>Andererseits ist das die Voraussetzung dafür, in Batch- und Makefiles genutzt werden zu können, was mit den ganzen Web-basierten Tools, die es für andere Ausgabeformate gibt, grundsätzlich nicht funktioniert.</p>
<p>Also habe ich eine kleine Java-basierte Anwendung (das bedeutet die Einsatzmöglichkeit auf allen »großen« Betriebssystem) entwickelt, die sowohl ein grafisches User Interface und ein CLI-Interface anbietet, eine »Stapelverarbeitung« beliebig vieler Dateien anbietet und mehrere Ausgabeformate unterstützt. Aktuell sind das vertikal in Bytes gruppierte Monochromgrafiken für den <em>Arduboy</em> (und andere), horizontal in Bytes gruppierte Monochromgrafiken für CircuitOS sowie das ursprünglich angestrebte RGB-565-Format für Farbgrafiken auf CircuitOS. Das User Interface unterstützt außerdem <em>Drag and Drop</em> und zeigt eine Vorschau der farbreduzierten Grafik.</p>
<p>Interessant bei der Entwicklung war, jedenfalls für mich, dass die Java-Plattform mir im Grunde genommen die eigentliche Arbeit, also das Laden von Bilddaten aus unterschiedlichsten Dateiformaten, die Farbreduktion sowie die Kodierung in ein anderes Speichermodell komplett abnimmt. Das Interface drumherum war ja ein Klacks 😉</p>
<p>Verfügbar ist die Software auf meinem <a href="https://github.com/andregewert/ImageConverter" target="_blank">Github-Profil</a> als fertiges plattformübergreifendes Binary oder im Quellcode. Zum Bauen ist ein Ant-Buildfile enthalten.</p>
<p>Das Ganze ist noch relativ wenig getestet; natürlich freue ich mich über Feedback.</p>
<figure>
<div class="figurecontainer" style="max-width: 600px">
<div class="imgcontainer">
<a href="/media/47ededf02c632130d40a4e8a417d3f5b/image/original/1" data-lightbox="preview" data-title="ImageConverter">
<img loading="lazy" src="/media/47ededf02c632130d40a4e8a417d3f5b/image/preview/1"
srcset="/media/47ededf02c632130d40a4e8a417d3f5b/image/preview/2 2x" alt="">
</a>
</div>
<div class="caption shadow">
<figcaption>ImageConverter unter Linux</figcaption>
</div>
</div>
</figure>
https://www.ubergeek.de/weblog/article/22/Arduino+in+der+Ausbildung+AnwendungsentwicklungArduino in der Ausbildung (Anwendungsentwicklung)2021-10-03T23:16:00+02:002023-09-03T00:47:44+02:00<p>Vor einiger Zeit (ja, diesen Text wollte ich eigentlich früher schreiben), erlebten Einplatinenrechner auf Basis einfacher Mikrocontroller, also <a href="https://calliope.cc/" target="_blank"><em>Calliope</em></a>, <a href="https://microbit.org/" target="_blank"><em>Micro:bit</em></a>, <a href="https://www.arduino.cc/" target="_blank"><em>Arduino</em></a> und andere einen Boom. Überschaubare Hardware und simple Entwicklungswerkzeuge versprachen den einfachen und schnellen Einstieg in die Welt der Programmierung. Grund genug für mich, das auch in der Ausbildung einzusetzen. Nach einigem Hin und Her habe ich mich am Ende für den Arduino-basierten <em>Arduboy</em> entschieden. Ein kurzer Überblick.</p>
Gewert, Andréagewert@ubergeek.de<p>Vor einiger Zeit (ja, diesen Text wollte ich eigentlich früher schreiben), erlebten Einplatinenrechner auf Basis einfacher Mikrocontroller, also <a href="https://calliope.cc/" target="_blank"><em>Calliope</em></a>, <a href="https://microbit.org/" target="_blank"><em>Micro:bit</em></a>, <a href="https://www.arduino.cc/" target="_blank"><em>Arduino</em></a> und andere einen Boom. Überschaubare Hardware und simple Entwicklungswerkzeuge versprachen den einfachen und schnellen Einstieg in die Welt der Programmierung. Grund genug für mich, das auch in der Ausbildung einzusetzen. Nach einigem Hin und Her habe ich mich am Ende für den Arduino-basierten <em>Arduboy</em> entschieden. Ein kurzer Überblick.</p>
<p>Die erste Frage, die sich beim Einsatz von Mikrocontrollern stellt: Was konkret kann und will man damit umsetzen?</p>
<p>In vielen Tutorials verdrahtet man ein paar einfache Sensoren, LEDs und Displays, bastelt sich eine »Wetterstation« oder eine Ampelschaltung – und dann war’s das auch schon wieder. Abgesehen davon, dass man Ähnliches in der Regel auch in der Berufsschule macht (zu meiner Zeit noch auf relativ großen Steckbrettern und mit einfachen Logikgattern, heute eher mit dem Raspberry Pi), ist das nur mäßig spannend, während sich das Gelernte hauptsächlich auf die Auffrischung einiger Lektionen aus dem Physik-Unterricht beschränkt. Jedenfalls ist mir das für Anwendungsentwickler zu wenig Programmierung.</p>
<p>Interessanter fand ich die Idee, ein überschaubares Spiel zu entwickeln bzw. entwickeln zu lassen. Um kleine LCD-Displays anzusteuern, haben auch die einfacheren ATmega-Controller ausreichend Leistung und Speicher. Bleiben noch drei Probleme. Als erstes ist es nicht einfach, einen »fertigen« Controller zu finden, den man ohne großen Aufwand verkabeln und nutzen kann [am ehesten kommt man vermutlich zum Ziel, wenn man mit Hilfe einer kleinen Zusatzplatine einen Controller für den Wii-Extension-Port verwendet] und Schaltknöpfe auf das Breadboard zu stecken, ist keine sonderlich gut zu bedienende Variante. Zweitens ist die Verkabelung mit Jumper-Kabeln und einem Breadboard wenig haltbar, neigt zu Wackelkontakten und ist schlecht zu transportieren. Zuletzt bleibt ein vergleichsweise hoher Aufwand für das Zusammenstecken der Schaltung, und bei Anwendungsentwicklern möchte ich die Priorität eigentlich auf das Programmieren legen.</p>
<p>Zum Glück leben wir in einer Welt, in der viele Probleme bereits von anderen Menschen gelöst worden sind, und so bin ich über den <a href="https://arduboy.com/" target="_blank"><em>Arduboy</em></a> gestolpert, der alles bietet, was ich haben wollte: einen ATmega-Controller mit einfarbigem Display und gut zu verwendenden Bedienelementen in einem ansprechenden Gehäuse bei voller Kompatibilität zu vorhandenen Arduinos. Zudem ist das System vernünftig dokumentiert und bietet eine einfach zu verwendende API. Mit grob 50 EUR ist auch der Preis noch vertretbar.</p>
<div class="shadow slideshow">
<div class="frame">
<div class="images">
<div class="image">
<a href="/media/27a605649644c13e650bdbd6b4625858/image/original/1" data-lightbox="preview-album_39" data-title="Arduboy">
<img loading="lazy" src="/media/27a605649644c13e650bdbd6b4625858/image/preview/1"
width="600" height="600"
srcset="/media/27a605649644c13e650bdbd6b4625858/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Der Arduboy </div>
</div>
<div class="image">
<a href="/media/529f7ca1cf694c978babb0643f12ee78/image/original/1" data-lightbox="preview-album_39" data-title="Circuitmess Nibble">
<img loading="lazy" src="/media/529f7ca1cf694c978babb0643f12ee78/image/preview/1"
width="600" height="600"
srcset="/media/529f7ca1cf694c978babb0643f12ee78/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Circuitmess Nibble </div>
</div>
<div class="image">
<a href="/media/7846b0370dde68195c12ee9fd396e5f2/image/original/1" data-lightbox="preview-album_39" data-title="Nibble und Arduboy">
<img loading="lazy" src="/media/7846b0370dde68195c12ee9fd396e5f2/image/preview/1"
width="600" height="600"
srcset="/media/7846b0370dde68195c12ee9fd396e5f2/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Nibble und Arduboy im Vergleich </div>
</div>
<div class="image">
<a href="/media/770e766fdf0a8e91ef14e3aec826aacc/image/original/1" data-lightbox="preview-album_39" data-title="Arduino Leonardo">
<img loading="lazy" src="/media/770e766fdf0a8e91ef14e3aec826aacc/image/preview/1"
width="600" height="600"
srcset="/media/770e766fdf0a8e91ef14e3aec826aacc/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Eine Arduboy-kompatible Schaltung auf Basis des Arduino Leonardo </div>
</div>
</div>
</div>
</div>
<p>Wenn beim <em>Arduboy</em> das Basteln von Hardware wegfällt und eine fertige API für die Spiele-Entwicklung sowie gute Dokumentation vorhanden sind, dann befreit einen das als Ausbilder ein wenig vom Vorbereiten von Material, so dass man eine einfache Aufgabe stellen kann:</p>
<p>»Überlegen Sie sich ein Spiel, das Sie gerne programmieren möchten! (Ich helfe Ihnen bei der Umsetzung.)«</p>
<p>Zu meinem Glück (soviel muss ich zugeben) hat sich meine Auszubildende für ein Spiel entschieden, bei dem es kein Problem ist, <a href="https://de.wikipedia.org/wiki/Stegreif" target="_blank">aus dem Stegreif</a> eine Lösung zu entwickeln: Snake. Am Ende eines ca. vierwöchigen Projektes, das auch das Ende ihrer Probezeit markierte, konnte meine Auszubildende dann einen eigenen <em>Arduboy</em> (natürlich durfte sie die Hardware für sich behalten) mit einem ersten selbst programmierten Spiel nicht nur in den Händen halten, sondern auch in die Tasche stecken und hoffentlich mit etwas Stolz Familie und Freunden zeigen. Perfekt 😊</p>
<p>Auf Grundlage der gemeinsamen Ideen habe ich auf <a href="https://github.com/andregewert/Arduboy" target="_blank">Github</a> zwei »glattgestrichene« Clean-Room-Implementierungen inkl. neu gestalteter Grafiken <a href="https://github.com/andregewert/Arduboy" target="_blank">veröffentlicht</a>. Die erste Variante ist vielleicht etwas leichter nachzuvollziehen, dafür etwas ineffizienter, was sich im schlimmsten Fall in einem langsameren Gameplay äußern könnte. Die zweite Variante ist etwas effizienter, erfordert dafür aber auch ein kleines bisschen mehr Mathematik, was ich meiner Auszubildenden vorerst nicht abverlangen wollte.</p>
<p>Leider ist der <em>Arduboy</em> nicht (mehr) leicht zu bekommen. Der Hersteller produziert in <em>Batches</em> nach Vorbestellung. Meine Vorbestellung im Herbst 2020 hat, sofern ich das richtig in Erinnerung habe, etwa ein halbes Jahr bis zu ihrer Auslieferung benötigt; damals habe ich noch über <a href="https://www.reichelt.de/" target="_blank">Reichelt</a> zwei Exemplare zügig erhalten können, über Reseller scheint der <em>Arduboy</em> aktuell aber auch nicht mehr verfügbar zu sein. Die Situation ändert sich hoffentlich demnächst.</p>
<p>Alternativ kann man mit einfachen Mitteln eine <em>Arduboy</em>-kompatible Schaltung selbst zusammenstecken und dann wenigstens die gute API nutzen. Als weitere Alternative gibt es beispielsweise auch den <a href="https://circuitmess.com/nibble/" target="_blank"><em>Nibble</em> von <em>CircuitMess</em></a>, der mit der <a href="https://www.arduino.cc/" target="_blank">Arduino-IDE</a> programmiert werden kann, ein Farbdisplay und etwas mehr Leistung bietet, dafür aber selbst zusammengelötet werden muss und etwas teurer ist. Außerdem ist die schlechte bzw. kaum vorhandene Dokumentation ein Ärgernis.</p>
<p>Frage an die Leser: Hat jemand andere Beispiele für den Einsatz von Mikrocontrollern in der beruflichen oder schulischen Ausbildung? Oder vielleicht eine Idee für ein anderes Spiel, das in einem ähnlichen Rahmen umgesetzt werden könnte?</p>
https://www.ubergeek.de/weblog/article/21/Neue+Software+AmigaGuideViewerNeue Software: AmigaGuideViewer2021-08-07T20:49:00+02:002023-09-05T01:16:03+02:00<p>Vor einigen Jahren – oder wahrscheinlich schon vor etwa anderthalb Jahrzehnten(!) – hatte ich bereits einmal eine kleine Perl-Anwendung geschrieben, die <a href="https://de.wikipedia.org/wiki/AmigaGuide" target="_blank">AmigaGuide-Dateien</a> nach HTML konvertiert. Natürlich habe ich die Quelltexte heute nicht mehr (und auf einem externen VCS-Server habe ich meinen »Klöterkram« damals auch noch nicht abgelegt), aber es hat sich bei mir jüngst wieder einmal die Anforderung ergeben, AmigaGuide-Dateien nicht nur auf einem Amiga oder einem Emulator anzuschauen. Also habe ich dafür etwas gebastelt.</p>
Gewert, Andréagewert@ubergeek.de<p>Vor einigen Jahren – oder wahrscheinlich schon vor etwa anderthalb Jahrzehnten(!) – hatte ich bereits einmal eine kleine Perl-Anwendung geschrieben, die <a href="https://de.wikipedia.org/wiki/AmigaGuide" target="_blank">AmigaGuide-Dateien</a> nach HTML konvertiert. Natürlich habe ich die Quelltexte heute nicht mehr (und auf einem externen VCS-Server habe ich meinen »Klöterkram« damals auch noch nicht abgelegt), aber es hat sich bei mir jüngst wieder einmal die Anforderung ergeben, AmigaGuide-Dateien nicht nur auf einem Amiga oder einem Emulator anzuschauen. Also habe ich dafür etwas gebastelt.</p>
<p>Ein Konverter, der HTML-Dateien generiert ist natürlich schon nicht schlecht, aber wenn man diese Konvertierung ohnehin schon macht, dann kann man das innerhalb einer kleinen Anwendung doch auch <em>in-memory</em> machen und das Ergebnis selbst rendern und somit das direkte Öffnen von AmigaGuide-Dateien erlauben?</p>
<p>Mit diesem Gedanken habe ich mich neulich mal hingesetzt und meine Java-Kenntnisse etwas aufgefrischt. Zwei, drei reguläre Ausdrücke, ein schlichter Tokenizer und zack, fertig ist der AmigaGuide-Viewer 🙂 Es werden zwar noch nicht alle Kommandos unterstützt, aber die meisten AmigaGuide-Dateien sollten vernünftig dargestellt werden.</p>
<p>Die Java-Anwendung lässt sich von <a href="https://github.com/andregewert/AmigaGuideViewer" target="_blank">meiner GitHub-Seite herunterladen</a> und sollte problemlos unter Linux (darunter fällt auch der Rasberry Pi), MacOS und Windows ausführbar sein, wenn eine passende Java-Runtime installiert ist. Unter Fedora 34 mit Gnome-Desktop ist mir aufgefallen, dass offensichtlich die Desktop-Integration nicht oder nicht mehr vorhanden ist und somit ein Starten der Anwendung per Doppelklick oder »Mit anderer Anwendung öffnen« nicht möglich ist. Dann bleibt immer noch ein Start per Kommandozeile: <code>java -jar AmigaGuideViewer.jar</code>.</p>
<p>Zum Bauen der Anwendung aus den Quellen ist ein Build-File für Ant enthalten.</p>
<figure>
<div class="figurecontainer" style="max-width: 600px">
<div class="imgcontainer">
<a href="/media/3ed8edcffeceb42e182372e768669a68/image/original/1" data-lightbox="preview" data-title="AmigaGuideViewer">
<img loading="lazy" src="/media/3ed8edcffeceb42e182372e768669a68/image/preview/1"
srcset="/media/3ed8edcffeceb42e182372e768669a68/image/preview/2 2x" alt="">
</a>
</div>
<div class="caption shadow">
<figcaption>AmigaGuideViewer unter Linux</figcaption>
</div>
</div>
</figure>
<p>(Nachbemerkung: Weshalb und <em>wie</em> ich mich überhaupt wieder einmal <em>ausgerechnet</em> mit dem Amiga beschäftige, dazu kann ich bei anderer Gelegenheit etwas erzählen.)</p>
https://www.ubergeek.de/weblog/article/20/Common+PeopleCommon People2021-03-14T22:39:00+01:002021-03-14T22:41:29+01:00Gewert, Andréagewert@ubergeek.de<p>Manchmal wünschte ich mir, es würde heute noch Musik wie diese (sehr 90er-typische) geben.</p>
<blockquote class="blockquote"><p>But she didn't understand<br>She just smiled and held my hand</p></blockquote><p><em>Pulp</em> mit <em>Common People</em> …</p>
<div class="video-preview" data-vid="yuTMWgOduFM" style="max-width: 600px">
<a href="https://www.youtube.com/watch?v=yuTMWgOduFM" target="_blank">
<img src="/media/yuTMWgOduFM/yt/ytthumb"
width="600" height="400" alt="Youtube" title="Youtube-Vorschau">
</a>
</div>
https://www.ubergeek.de/weblog/article/19/Raspberry+Pi+und+ein+wenig+Java+im+ProduktionsumfeldRaspberry Pi und (ein wenig) Java im Produktionsumfeld2021-03-14T21:53:00+01:002021-03-14T21:55:49+01:00<p>Noch im vergangenen Jahr hat sich für uns eine tolle Einsatzmöglichkeit für den Raspberry Pi im Produktionsumfeld ergeben. Das war nicht nur für mich eine schöne Möglichkeit, meine Java-Kenntnisse mal wieder aufzufrischen, sondern auch eine Gelegenheit, in Sachen Hardware etwas Neues auszuprobieren.</p>
Gewert, Andréagewert@ubergeek.de<p>Noch im vergangenen Jahr hat sich für uns eine tolle Einsatzmöglichkeit für den Raspberry Pi im Produktionsumfeld ergeben. Das war nicht nur für mich eine schöne Möglichkeit, meine Java-Kenntnisse mal wieder aufzufrischen, sondern auch eine Gelegenheit, in Sachen Hardware etwas Neues auszuprobieren.</p>
<p>Die Anforderungen waren relativ überschaubar: Bisher wurden Windows-Terminals, auf denen eigentlich arbeitsplatzspezifische Anwendungen liefen, »missbraucht«, um mit Hilfe einer kleinen C#-Anwendung per USB angeschlossene RFID-Scanner anzusteuern, um auf das »Vorhalten« von passenden Karten zu reagieren. (Der Kenner wird sich schon denken können, worum es dabei ging.) In der Praxis umständlich wurde es, als nicht nur deutliches Feedback der Anwendung (Lautsprecher sind dort nicht verbaut), sondern zusätzlich einfache Interaktionsmöglichkeiten gefordert waren. Zur Erinnerung: im Normalfall liefen auf den Terminals ganz andere Anwendungen.</p>
<p>Der Raspberry Pi war die optimale Lösung für dieses Problem: er bietet mit Linux nicht nur ein ausgewachsenes Betriebssystem auf kleinstem Raum, er ist günstig in der Anschaffung und es gibt vom Hersteller ein passendes günstiges Touchscreen-Gehäuse in optimaler Größe (7 Zoll), das sich für die Wand-Montage eignet. Einen vergleichsweise lauten Buzzer bekommt man auch im Gehäuse untergebracht, über die GPIO-Pins lässt sich dieser ansteuern. Die Auslagerung auf ein eigenes Gerät und einen eigenen Screen verhindert, dass sich verschiedene Anwendungen und Anforderungen »in die Quere kommen«. Ganz nebenbei werden die regulären Arbeitsplatz-Terminals auch in der Produktion mindestens zum Wochenende gerne ausgeschaltet, was wir bei diesem Anforderungsprofil auch nicht gebrauchen konnten.</p>
<p>Entschieden haben wir uns, vor allem aus Gründen der möglichst kurzen Entwicklungszeit, für eine Java-Anwendung. Einziges Problem dabei: Außer mir hatte in meinem Team bisher niemand für den Linux-Desktop entwickelt, erst recht nicht in Java. Großer Vorteil meines tollen Teams: niemand hatte Angst davor. Ich habe das Grundgerüst und das User Interface entwickelt, um Datenbank-Schicht und anderes haben sich die Kollegen gekümmert. Nebenbei: Um Verbindungsproblemen mit dem zentralen Datenbank-Server zu begegnen, kommt hier eine eingebettete SQLite-Datenbank als Puffer zum Einsatz, so dass auch bei Netzwerk-Problemen keine Aktionen verloren gehen.</p>
<p>Für mich bleibt festzuhalten: Ich bin nicht nur erstaunlich schnell wieder »drin« gewesen in Java, sondern habe festgestellt, dass ich die Sprache selbst und auch die Tools darum herum immer noch toll finde. Das Dokumentationswerkzeug Javadoc war seinerzeit eine fantastische Idee und erledigt seinen Job nach wie vor hervorragend (sehr schade, dass es im PHP-Umfeld nichts gibt, das daran heranreicht oder wenigstens zuverlässig läuft <em>und</em> anständigen Output generiert), die Paketierung als Java-Archiv inkl. Bündelung von Ressourcen und Drittbibliotheken ist schnell und einfach erledigt. Und für unser kleines Projekt haben wir das Build-System Ant verwendet, das zwar nicht Bestandteil des JDK ist, aber für ein Projekt dieser Größenordnung genau das richtige ist. Leider wurde anscheinend über Jahrzehnte weder von Sun noch von Oracle nennenswert Zeit investiert, um ein modernes Look and Feel auch für Linux zu implementieren (Windows und MacOS sind diesbezüglich kein Problem), aber mit dem <a href="https://www.formdev.com/flatlaf/" target="_blank">FlatLAF</a> gibt es eine Open-Source-Implementierung, die einen sehr ordentlichen Job macht.</p>
<p>Alternativ wäre übrigens eine Umsetzung mit Python und Qt denkbar gewesen, was sicherlich (für mich) auch reizvoll gewesen wäre, aber aufgrund des Zeitdrucks und des immerhin vorhandenen Basis-Know-Hows war Java zumindest in diesem Moment die bessere Wahl. (Python übrigens ist ja auch so ein Phänomen: Von vielen als »junge« Programmiersprache wahrgenommen, erlebt sie seit einigen Jahren einen wahren Boom, was mich bisweilen etwas wundert. Ich habe mich tatsächlich schon zu meinen Amiga-Zeiten (oberflächlich) mit Python beschäftigt; jung ist sie nun wirklich nicht mehr. Aber nicht die Sprache ist das größte Problem von Python, sondern das große Thema »Abhängikeiten und Deployment«, aber das wäre mal einen separaten Beitrag wert.)</p>
<p>Generell bestehen in unserem Team keine Berührungsängste vor Technologien, die wir bisher nicht eingesetzt haben. Das ist ein Vorteil, den man nicht überall hat, und der uns flexibel macht. Und wer weiß? Vielleicht werden wir auf der gewählten Basis noch weitere Anwendungen umsetzen, vielleicht wird das nächste Projekt aber doch in Python realisiert? Beide Ansätze würden uns auch erlauben, plattformübergreifende Anwendungen zu entwickeln.</p>
<p>Darüber hinaus war dieses Projekt auch eine schöne Aufgabe für unseren Auszubildenden in der Fachrichtung Systemintegration (für den ich nicht persönlich zuständig bin), der sich um Hardware-Zusammenbau und Betriebssystem-Einrichtung inkl. Fernwartungsmöglichkeiten kümmern konnte. Win-Win, würde ich sagen.</p>
https://www.ubergeek.de/weblog/article/18/NanoCM+ist+Open+SourceNanoCM ist Open Source2021-03-14T20:46:00+01:002021-03-14T21:56:21+01:00<p>Als ich meine Website neu aufgesetzt habe, hätte ich selbstverständlich auch einfach zu Wordpress greifen können – aber als Entwickler konnte ich ja doch wieder nicht anders als ein System nach meinen Wünschen und Vorstellungen selbst zu erstellen. Das Ergebnis habe ich in der Zwischenzeit als unter Open-Source-Lizenz veröffentlicht.</p>
Gewert, Andréagewert@ubergeek.de<p>Als ich meine Website neu aufgesetzt habe, hätte ich selbstverständlich auch einfach zu Wordpress greifen können – aber als Entwickler konnte ich ja doch wieder nicht anders als ein System nach meinen Wünschen und Vorstellungen selbst zu erstellen. Das Ergebnis habe ich in der Zwischenzeit als unter Open-Source-Lizenz veröffentlicht.</p>
<p>Ein bisschen Inhaltsbearbeitung, User-Login bzw. Session-Management und das zeitgesteuerte Veröffentlichen von Inhalten – das stellt doch niemanden vor besondere Herausforderungen. Wenn man das »so nebenbei« in seiner Freizeit macht, kann es aber dauern 😬 Mittlerweile sind bereits mehr als 60.000 Zeilen Code zusammengekommen (davon mehr als 40% PHP, fast 30% JavaScript, den Rest bilden HTML-, (S)CSS und ein paar sonstige Dateien), obwohl ich noch lange nicht alles umgesetzt habe, was ich mir vorgenommen habe.</p>
<p>Immerhin: die eine oder andere »Sonderfunktion«, die in anderen Systemen nicht gerade zum Standard-Funktionsumfang gehören, habe ich umgesetzt. So lassen sich Inhalte als ePub exportieren, wobei eingebundene Inhalte wie Bilder automatisch eingebettet werden, </p>
<p>Außerdem wird Wert gelegt auf den Datenschutz: Von externen Websites (Google, Youtube, Twitter und Content Distribution Networks [CDN]) werden keinerlei Inhalte direkt eingebunden. Es können zwar Inhalte von Youtube und Twitter dargestellt werden, dabei fungiert jedoch stets NanoCM als Proxy, der die Inhalte entsprechend abfragt und aufbereitet; der <em>User Agent</em> des Anwenders selbst greift niemals direkt auf die externen Sites zu. Ohne vorherige Zustimmung wird nicht ein einziges Cookie gesetzt, nicht einmal ein Session-Cookie. (Das hat den Nebeneffekt, dass bei jedem Seitenabruf ein Cookie-Hinweis erscheint, solange nicht der Nutzung von Cookies zugestimmt wird. Theoretisch könnte man sowohl eine Cookie-Ablehnung und auch die Session-ID per Get-Parameter von Seitenabruf zu Seitenabruf durchschleifen, aber das ist aus mehreren Gründen keine gute Idee.)</p>
<p>Eine noch nicht fertiggestellte Medienverwaltung sorgt dafür, dass im Original hochgeladene Bilder automatisch in verschiedensten (konfigurierbaren) Formaten ausgeliefert werden können, d. h. Bilder werden automatisch skaliert und zugeschnitten; das wird auch genutzt für eine Unterstützung von HiDPI-Bildschirmen.</p>
<p>Ein kleines Wagnis war die von Anfang an stehende Entscheidung, datenbanktechnisch nicht auf ein Server-Client-Modell, sondern mit SQLite auf eine eingebettete Datenbank zu setzen, was eine Zero-Config-Einrichtung ermöglicht.</p>
<p>Das System ist in der Lage, optional anonymisierte Statistiken inklusive Geo-Informationen zu führen. Was mir hier noch fehlt: eine tolle Visualisierung über interaktive SVG-Grafiken, aber darum kümmere ich mich auch noch irgendwann 😉</p>
<p>Es gibt mit dem schönen Emoji-Soft-Keyboard auch ein Feature, das sich fast überholt hat. Unter MacOS schon seit langer Zeit vorhanden, gibt es auch unter Windows 10 seit einiger Zeit eine entsprechende systemweite Funktion (wer es noch nicht weiß: dieses Keyboard wird mit Win+. geöffnet) – unter Linux allerdings mag das durchaus noch nützlich sein, denn hier scheint es eine solche Funktion (noch) nicht zu geben. Falls mir jemand etwas anderes berichten kann: gerne her damit! Auf der anderen Seite: unter Windows gibt es ja bis heute keine simplen Shortcuts, um typografisch korrekte Anführungszeichen einzufügen. Auch für solche Zeichen gibt es in NanoCM ein Soft-Keyboard.</p>
<p>Wie auch immer: Den Quelltext habe ich irgendwann im vergangenen Jahr <a href="https://github.com/andregewert/nanocm" target="_blank">auf Github veröffentlicht</a>. Wer Lust hast, kann also gerne einen Blick in die Quellen werfen oder sich sogar an der Weiterentwicklung beteiligen. Es kann auch jeder einen Fork anlegen und »sein eigenes Ding« daraus machen. Ich habe mich für die GPL 2 entschieden, die einem praktisch alle Freiheiten einräumt, solange alle abgeleiteten Werke ebenfalls unter dieser Lizenz veröffentlicht werden.</p>
<p>Zu den offenen Baustellen gehört übrigens, dass ich zunächst Dokumentation und Kommentare auf Deutsch geschrieben habe. Das war vermutlich nicht die klügste Entscheidung. Jüngere Quelltext-Teile sind bereits auf Englisch kommentiert; der Rest der Anwendung wird nach und nach umgestellt. Wenn sich jemand an der Weiterentwicklung beteiligen möchte, wäre schon »nur« die Übersetzung ein wichtiger, ein wertvoller Beitrag.</p>
<p>Das Projekt läuft unter dem Namen NanoCM, wobei ich mich noch nicht für eine bestimmte Schreibweise (NanoCM, nano|cm, nanoCM …) entschieden habe. Ich wünsche allen Interessierten viel Spaß beim Blick in den Quelltext und bin offen für konstruktive Verbesserungsvorschläge und Mitarbeit :)</p>
https://www.ubergeek.de/weblog/article/16/Luebeck+im+SchneeLübeck im Schnee2021-02-28T22:40:00+01:002023-09-05T01:17:02+02:00<p>Lübeck vor zwei Wochen</p>
Gewert, Andréagewert@ubergeek.de<p>Lübeck vor zwei Wochen</p>
<p>Vor zwei Wochen war es schön winterlich hier in Lübeck. Und mit rund -15 Grad auch ordentlich kalt.</p>
<p>Schnee haben wir ja nicht so häufig, und deshalb habe ich nach Jahren meine Ski-Unterwäsche (ja, wirklich) herausgekramt und bin ein wenig durch die verschneite Stadt bzw. um die Altstadt herum gestapft. Leider haben beide Kameras, mit denen ich unterwegs gewesen bin, unerwartet schlapp gemacht, aber ein paar wenige Schnappschüsse konnte ich machen. Die Bilder aus der Canon A-1 muss ich noch entwickeln lassen.</p>
<p>Eine Woche später schon war es übrigens etwa 30 Grad wärmer; dieser Wetterumschwung war beinahe schon etwas <em>scary</em>.</p>
<div class="shadow slideshow autoplay">
<div class="frame">
<div class="images">
<div class="image">
<a href="/media/8323bea66c316c53960cbc1bb82a589c/image/original/1" data-lightbox="preview-album_31" data-title="20210216_0195.jpg">
<img loading="lazy" src="/media/8323bea66c316c53960cbc1bb82a589c/image/preview/1"
width="600" height="600"
srcset="/media/8323bea66c316c53960cbc1bb82a589c/image/preview/2 2x" alt="" title="">
</a>
</div>
<div class="image">
<a href="/media/3a1fb52967682fd57b41c5c23fc56188/image/original/1" data-lightbox="preview-album_31" data-title="20210216_0199.jpg">
<img loading="lazy" src="/media/3a1fb52967682fd57b41c5c23fc56188/image/preview/1"
width="600" height="600"
srcset="/media/3a1fb52967682fd57b41c5c23fc56188/image/preview/2 2x" alt="" title="">
</a>
</div>
<div class="image">
<a href="/media/460716624f169b789395e0ff7f4d78fe/image/original/1" data-lightbox="preview-album_31" data-title="20210216_0203.jpg">
<img loading="lazy" src="/media/460716624f169b789395e0ff7f4d78fe/image/preview/1"
width="600" height="600"
srcset="/media/460716624f169b789395e0ff7f4d78fe/image/preview/2 2x" alt="" title="">
</a>
</div>
<div class="image">
<a href="/media/f6a341070f4d1d45f4dbb88e99e9aaed/image/original/1" data-lightbox="preview-album_31" data-title="20210216_0207.jpg">
<img loading="lazy" src="/media/f6a341070f4d1d45f4dbb88e99e9aaed/image/preview/1"
width="600" height="600"
srcset="/media/f6a341070f4d1d45f4dbb88e99e9aaed/image/preview/2 2x" alt="" title="">
</a>
</div>
<div class="image">
<a href="/media/435ae164bf9c75122755e84c946d5d00/image/original/1" data-lightbox="preview-album_31" data-title="20210216_0217.jpg">
<img loading="lazy" src="/media/435ae164bf9c75122755e84c946d5d00/image/preview/1"
width="600" height="600"
srcset="/media/435ae164bf9c75122755e84c946d5d00/image/preview/2 2x" alt="" title="">
</a>
</div>
</div>
</div>
</div>
https://www.ubergeek.de/weblog/article/17/Where+Is+My+MindWhere Is My Mind?2021-02-28T22:00:00+01:002021-03-01T00:00:44+01:00Gewert, Andréagewert@ubergeek.de<p>Einfach der perfekte Soundtrack, wenn Du glaubst, deinen Verstand zu verlieren: <em>Where Is My Mind</em> von den <em>Pixies</em>.</p>
<div class="video-preview" data-vid="I_aBmrYChfQ" style="max-width: 600px">
<a href="https://www.youtube.com/watch?v=I_aBmrYChfQ" target="_blank">
<img src="/media/I_aBmrYChfQ/yt/ytthumb"
width="600" height="400" alt="Youtube" title="Youtube-Vorschau">
</a>
</div>