<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>ubergeek.de: Artikel mit Stichworten</title><id>https://ubergeek.de/weblog/feed/tags/Development</id><updated>2023-09-05T01:15:21+02:00</updated><author><name>André Gewert</name><email>agewert@ubergeek.de</email><uri>www.ubergeek.de</uri></author><link href="https://ubergeek.de/weblog/feed/tags/Development" rel="self" title="ubergeek.de: Artikel mit Stichworten"/><entry><id>https://ubergeek.de/weblog/article/23/Neue+Software+Image-Converter+fuer+Mikrocontroller</id><title>Neue Software: Image-Converter (für Mikrocontroller)</title><published>2021-10-03T23:55:00+02:00</published><updated>2023-09-05T01:15:21+02:00</updated><summary type="html">&lt;p&gt;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.&lt;/p&gt;
</summary><category term="Arduboy"/><category term="Arduino"/><category term="Circuitmess"/><category term="Development"/><category term="ImageConverter"/><category term="Mikrocontroller"/><category term="Nibble"/><category term="Software"/><author><name>Gewert, André</name><email>agewert@ubergeek.de</email></author><content type="html">&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;In meinem Sommerurlaub, also bereits vor ein paar Wochen habe ich aus verschiedenen Gründen &lt;em&gt;auf die Schnelle&lt;/em&gt; einen Image-Converter geschrieben, der für die Verwendung mit unterschiedlichen Mikrocontroller-Entwicklungsumgebungen gedacht ist.&lt;/p&gt;
&lt;p&gt;Hauptbeweggrund dafür war die Tatsache, dass die Farbgrafiken für die Circuitmess-Systeme (CircuitOS in &lt;em&gt;Ringo&lt;/em&gt; und &lt;em&gt;Nibble&lt;/em&gt;) im RGB-565-Format kodiert werden, ich mit &lt;a href="https://github.com/cirquit/UTFTConverter" target="_blank"&gt;UTFTConverter&lt;/a&gt; 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 &lt;em&gt;Haskell&lt;/em&gt; geschrieben. &lt;em&gt;Hüst&lt;/em&gt;.) 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;Arduboy&lt;/em&gt; (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 &lt;em&gt;Drag and Drop&lt;/em&gt; und zeigt eine Vorschau der farbreduzierten Grafik.&lt;/p&gt;
&lt;p&gt;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 😉&lt;/p&gt;
&lt;p&gt;Verfügbar ist die Software auf meinem &lt;a href="https://github.com/andregewert/ImageConverter" target="_blank"&gt;Github-Profil&lt;/a&gt; als fertiges plattformübergreifendes Binary oder im Quellcode. Zum Bauen ist ein Ant-Buildfile enthalten.&lt;/p&gt;
&lt;p&gt;Das Ganze ist noch relativ wenig getestet; natürlich freue ich mich über Feedback.&lt;/p&gt;
&lt;figure&gt;
    &lt;div class="figurecontainer" style="max-width: 600px"&gt;
        &lt;div class="imgcontainer"&gt;
            &lt;a href="/media/47ededf02c632130d40a4e8a417d3f5b/image/original/1" data-lightbox="preview" data-title="ImageConverter"&gt;
                &lt;img loading="lazy" src="/media/47ededf02c632130d40a4e8a417d3f5b/image/preview/1"
                     srcset="/media/47ededf02c632130d40a4e8a417d3f5b/image/preview/2 2x" alt=""&gt;
            &lt;/a&gt;
        &lt;/div&gt;
                            &lt;div class="caption shadow"&gt;
                &lt;figcaption&gt;ImageConverter unter Linux&lt;/figcaption&gt;
            &lt;/div&gt;
            &lt;/div&gt;
&lt;/figure&gt;


</content></entry><entry><id>https://ubergeek.de/weblog/article/22/Arduino+in+der+Ausbildung+Anwendungsentwicklung</id><title>Arduino in der Ausbildung (Anwendungsentwicklung)</title><published>2021-10-03T23:16:00+02:00</published><updated>2023-09-03T00:47:44+02:00</updated><summary type="html">&lt;p&gt;Vor einiger Zeit (ja, diesen Text wollte ich eigentlich früher schreiben), erlebten Einplatinenrechner auf Basis einfacher Mikrocontroller, also &lt;a href="https://calliope.cc/" target="_blank"&gt;&lt;em&gt;Calliope&lt;/em&gt;&lt;/a&gt;, &lt;a href="https://microbit.org/" target="_blank"&gt;&lt;em&gt;Micro:bit&lt;/em&gt;&lt;/a&gt;, &lt;a href="https://www.arduino.cc/" target="_blank"&gt;&lt;em&gt;Arduino&lt;/em&gt;&lt;/a&gt; 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 &lt;em&gt;Arduboy&lt;/em&gt; entschieden. Ein kurzer Überblick.&lt;/p&gt;
</summary><category term="Arduboy"/><category term="Arduino"/><category term="Ausbildung"/><category term="Circuitmess"/><category term="Development"/><category term="Mikrocontroller"/><category term="Nibble"/><category term="Software"/><author><name>Gewert, André</name><email>agewert@ubergeek.de</email></author><content type="html">&lt;p&gt;Vor einiger Zeit (ja, diesen Text wollte ich eigentlich früher schreiben), erlebten Einplatinenrechner auf Basis einfacher Mikrocontroller, also &lt;a href="https://calliope.cc/" target="_blank"&gt;&lt;em&gt;Calliope&lt;/em&gt;&lt;/a&gt;, &lt;a href="https://microbit.org/" target="_blank"&gt;&lt;em&gt;Micro:bit&lt;/em&gt;&lt;/a&gt;, &lt;a href="https://www.arduino.cc/" target="_blank"&gt;&lt;em&gt;Arduino&lt;/em&gt;&lt;/a&gt; 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 &lt;em&gt;Arduboy&lt;/em&gt; entschieden. Ein kurzer Überblick.&lt;/p&gt;
&lt;p&gt;Die erste Frage, die sich beim Einsatz von Mikrocontrollern stellt: Was konkret kann und will man damit umsetzen?&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href="https://arduboy.com/" target="_blank"&gt;&lt;em&gt;Arduboy&lt;/em&gt;&lt;/a&gt; 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.&lt;/p&gt;

    &lt;div class="shadow slideshow"&gt;
        &lt;div class="frame"&gt;
            &lt;div class="images"&gt;
                                    &lt;div class="image"&gt;
                        &lt;a href="/media/27a605649644c13e650bdbd6b4625858/image/original/1" data-lightbox="preview-album_39" data-title="Arduboy"&gt;
                            &lt;img loading="lazy" src="/media/27a605649644c13e650bdbd6b4625858/image/preview/1"
                                 width="600" height="600"
                                 srcset="/media/27a605649644c13e650bdbd6b4625858/image/preview/2 2x" alt="" title=""&gt;
                        &lt;/a&gt;
                                                                            &lt;div class="caption"&gt;
                                Der Arduboy                            &lt;/div&gt;
                                            &lt;/div&gt;
                                    &lt;div class="image"&gt;
                        &lt;a href="/media/529f7ca1cf694c978babb0643f12ee78/image/original/1" data-lightbox="preview-album_39" data-title="Circuitmess Nibble"&gt;
                            &lt;img loading="lazy" src="/media/529f7ca1cf694c978babb0643f12ee78/image/preview/1"
                                 width="600" height="600"
                                 srcset="/media/529f7ca1cf694c978babb0643f12ee78/image/preview/2 2x" alt="" title=""&gt;
                        &lt;/a&gt;
                                                                            &lt;div class="caption"&gt;
                                Circuitmess Nibble                            &lt;/div&gt;
                                            &lt;/div&gt;
                                    &lt;div class="image"&gt;
                        &lt;a href="/media/7846b0370dde68195c12ee9fd396e5f2/image/original/1" data-lightbox="preview-album_39" data-title="Nibble und Arduboy"&gt;
                            &lt;img loading="lazy" src="/media/7846b0370dde68195c12ee9fd396e5f2/image/preview/1"
                                 width="600" height="600"
                                 srcset="/media/7846b0370dde68195c12ee9fd396e5f2/image/preview/2 2x" alt="" title=""&gt;
                        &lt;/a&gt;
                                                                            &lt;div class="caption"&gt;
                                Nibble und Arduboy im Vergleich                            &lt;/div&gt;
                                            &lt;/div&gt;
                                    &lt;div class="image"&gt;
                        &lt;a href="/media/770e766fdf0a8e91ef14e3aec826aacc/image/original/1" data-lightbox="preview-album_39" data-title="Arduino Leonardo"&gt;
                            &lt;img loading="lazy" src="/media/770e766fdf0a8e91ef14e3aec826aacc/image/preview/1"
                                 width="600" height="600"
                                 srcset="/media/770e766fdf0a8e91ef14e3aec826aacc/image/preview/2 2x" alt="" title=""&gt;
                        &lt;/a&gt;
                                                                            &lt;div class="caption"&gt;
                                Eine Arduboy-kompatible Schaltung auf Basis des Arduino Leonardo                            &lt;/div&gt;
                                            &lt;/div&gt;
                            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;


&lt;p&gt;Wenn beim &lt;em&gt;Arduboy&lt;/em&gt; 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:&lt;/p&gt;
&lt;p&gt;»Überlegen Sie sich ein Spiel, das Sie gerne programmieren möchten! (Ich helfe Ihnen bei der Umsetzung.)«&lt;/p&gt;
&lt;p&gt;Zu meinem Glück (soviel muss ich zugeben) hat sich meine Auszubildende für ein Spiel entschieden, bei dem es kein Problem ist, &lt;a href="https://de.wikipedia.org/wiki/Stegreif" target="_blank"&gt;aus dem Stegreif&lt;/a&gt; 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 &lt;em&gt;Arduboy&lt;/em&gt; (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 😊&lt;/p&gt;
&lt;p&gt;Auf Grundlage der gemeinsamen Ideen habe ich auf &lt;a href="https://github.com/andregewert/Arduboy" target="_blank"&gt;Github&lt;/a&gt; zwei »glattgestrichene« Clean-Room-Implementierungen inkl. neu gestalteter Grafiken &lt;a href="https://github.com/andregewert/Arduboy" target="_blank"&gt;veröffentlicht&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;Leider ist der &lt;em&gt;Arduboy&lt;/em&gt; nicht (mehr) leicht zu bekommen. Der Hersteller produziert in &lt;em&gt;Batches&lt;/em&gt; 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 &lt;a href="https://www.reichelt.de/" target="_blank"&gt;Reichelt&lt;/a&gt; zwei Exemplare zügig erhalten können, über Reseller scheint der &lt;em&gt;Arduboy&lt;/em&gt; aktuell aber auch nicht mehr verfügbar zu sein. Die Situation ändert sich hoffentlich demnächst.&lt;/p&gt;
&lt;p&gt;Alternativ kann man mit einfachen Mitteln eine &lt;em&gt;Arduboy&lt;/em&gt;-kompatible Schaltung selbst zusammenstecken und dann wenigstens die gute API nutzen. Als weitere Alternative gibt es beispielsweise auch den &lt;a href="https://circuitmess.com/nibble/" target="_blank"&gt;&lt;em&gt;Nibble&lt;/em&gt; von &lt;em&gt;CircuitMess&lt;/em&gt;&lt;/a&gt;, der mit der &lt;a href="https://www.arduino.cc/" target="_blank"&gt;Arduino-IDE&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
</content></entry><entry><id>https://ubergeek.de/weblog/article/19/Raspberry+Pi+und+ein+wenig+Java+im+Produktionsumfeld</id><title>Raspberry Pi und (ein wenig) Java im Produktionsumfeld</title><published>2021-03-14T21:53:00+01:00</published><updated>2021-03-14T21:55:49+01:00</updated><summary type="html">&lt;p&gt;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.&lt;/p&gt;
</summary><category term="Development"/><category term="Java"/><category term="Python"/><category term="Raspberry Pi"/><category term="SQLite"/><author><name>Gewert, André</name><email>agewert@ubergeek.de</email></author><content type="html">&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;und&lt;/em&gt; 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 &lt;a href="https://www.formdev.com/flatlaf/" target="_blank"&gt;FlatLAF&lt;/a&gt; gibt es eine Open-Source-Implementierung, die einen sehr ordentlichen Job macht.&lt;/p&gt;
&lt;p&gt;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.)&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
</content></entry><entry><id>https://ubergeek.de/weblog/article/18/NanoCM+ist+Open+Source</id><title>NanoCM ist Open Source</title><published>2021-03-14T20:46:00+01:00</published><updated>2021-03-14T21:56:21+01:00</updated><summary type="html">&lt;p&gt;Als ich meine Website neu aufgesetzt habe, hätte ich selbstverständlich auch einfach zu Wordpress greifen können&amp;nbsp;&amp;ndash; 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.&lt;/p&gt;
</summary><category term="Development"/><category term="GPL"/><category term="NanoCM"/><category term="Open Source"/><category term="SQLite"/><author><name>Gewert, André</name><email>agewert@ubergeek.de</email></author><content type="html">&lt;p&gt;Als ich meine Website neu aufgesetzt habe, hätte ich selbstverständlich auch einfach zu Wordpress greifen können&amp;nbsp;&amp;ndash; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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, &lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;User Agent&lt;/em&gt; 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.)&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 😉&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Wie auch immer: Den Quelltext habe ich irgendwann im vergangenen Jahr &lt;a href="https://github.com/andregewert/nanocm" target="_blank"&gt;auf Github veröffentlicht&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 :)&lt;/p&gt;
</content></entry><entry><id>https://ubergeek.de/weblog/article/15/Ausbilden+trotz+Corona</id><title>Ausbilden trotz Corona</title><published>2020-12-09T00:25:00+01:00</published><updated>2021-02-28T23:42:19+01:00</updated><category term="Arbeit"/><category term="Ausbildung"/><category term="Development"/><author><name>Gewert, André</name><email>agewert@ubergeek.de</email></author><content type="html">&lt;p&gt;Natürlich ist es nicht mein Verdienst, aber obwohl Corona viele Betriebe wirtschaftlich hart getroffen hat (es gibt natürlich auch Krisengewinner, die muss es immer geben), bin ich ein wenig stolz darauf, dass mein Arbeitgeber auch in diesem Jahr wieder fleißig ausbildet. Das freut mich vor allem deshalb, weil ich, nachdem ich in diesem Jahr schon einen Auszubildenden erfolgreich »durchgebracht« habe, erneut die Verantwortung für eine Auszubildende übernehmen darf.&lt;/p&gt;
&lt;p&gt;Neben der Verantwortung, die man als Ausbilder übernimmt – schließlich hat man nicht nur Erwartungen an eine Auszubildende oder einen Auszubildenden, sondern auch entsprechende Pflichten – bedeutet das auch immer eine unglaublich spannende Aufgabe, einen immer wieder neuen Prozess: Jede Auszubildende und jeder Auszubildende bringt eine eigene Vorgeschichte, eine eigene Motivation, eine eigene Persönlichkeit usw. mit. Ich habe bei meinem aktuellen Arbeitgeber u. a. schon einen dreißigjährigen Ex-Profi-Fußballer, einen aus Albanien stammenden, dann lange Zeit in Griechenland lebenden und schließlich nach Deutschland ausgewanderten jungen Mann sowie den »klassischen« frischen Schulabgänger betreut.&lt;/p&gt;
&lt;p&gt;Seit September also läuft eine neue Reise mit einer »neuen« Auszubildenden; ich freue mich auf diese Reise – und wünsche mir, dass es ihr genauso geht.&lt;/p&gt;
</content></entry></feed>
