Im Endspurt ein Blick auf Andahuaylas. Ohne einen Fuß vor die Tür zu setzen.

Gestern in einem Monat: Mein letzter Arbeitstag. Mein Endspurt findet am Schreibtisch statt. Gemeinsam mit Sendetechnikspezialist Chris Welch ist es mir heute gelungen, von unserem 5 Stunden entfernten Antennenturm in Andahuaylas erste Kamerabilder aus dem Telemetriesystem zu erhalten. Wohlgemerkt per Satellit.

Er hatte schon alles wunderbar eingerichtet, nur streikte die Weboberfläche des chinesischen Herstellers aufgrund eines fehlenden nicht installierbaren Plugins.

Doch nach flüchtiger Betrachtung des Javascript-Quellcodes gelang es uns, den RTSP-Stream auch mit dem ganz gewöhnlichen VLC-Player wiederzugeben. Leider ist die Übertragung noch nicht zuverlässig, weil die Parameter noch vor Ort auf eine niedrigere Qualität eingestellt werden müssen. Dafür muss Chris wohl tatsächlich die Reise auf sich nehmen. Doch wir haben die optimalen Parameter heute schon in einem Testaufbau experimentell bestimmt. Und zumindest können wir nun mittels sporadischer Schnappschüsse nach dem Rechten sehen.

Im Endspurt ein Blick auf Andahuaylas. Ohne einen Fuß vor die Tür zu setzen.

Gestern in einem Monat: Mein letzter Arbeitstag. Mein Endspurt findet am Schreibtisch statt. Gemeinsam mit Sendetechnikspezialist Chris Welch ist es mir heute gelungen, von unserem 5 Stunden entfernten Antennenturm in Andahuaylas erste Kamerabilder aus dem Telemetriesystem zu erhalten. Wohlgemerkt per Satellit.

Er hatte schon alles wunderbar eingerichtet, nur streikte die Weboberfläche des chinesischen Herstellers aufgrund eines fehlenden nicht installierbaren Plugins.

Doch nach flüchtiger Betrachtung des Javascript-Quellcodes gelang es uns, den RTSP-Stream auch mit dem ganz gewöhnlichen VLC-Player wiederzugeben. Leider ist die Übertragung noch nicht zuverlässig, weil die Parameter noch vor Ort auf eine niedrigere Qualität eingestellt werden müssen. Dafür muss Chris wohl tatsächlich die Reise auf sich nehmen. Doch wir haben die optimalen Parameter heute schon in einem Testaufbau experimentell bestimmt. Und zumindest können wir nun mittels sporadischer Schnappschüsse nach dem Rechten sehen.

Einen Ticken stolz

Wie soll man unter Zehntausenden die richtige finden?

Gemeint sind natürlich CPTs, bei denen es sich um standardisierte Codes zur genauen Identifizierung von diagnostischen, chirurgischen und anderen medizinischen Prozeduren handelt. Und jedes Mal, wenn ein Arzt bei uns einen Entlasssbrief schreibt, muss er dazu die richtigen CPT-Codes angeben, so will es das Ministerium.

Bis gestern gab es dazu in unserem System eine Auswahlbox die so aussah:

Zwar war eine Volltextsuche möglich, doch in der Praxis gab es einige Probleme:

  • Es gibt oft mehrere ähnliche Codes für die gleiche Behandlung. Der Arzt muss die ganze Beschreibung lesen, um den richtigen auszuwählen, was bei dem kleinen Auswahlfeld quasi unmöglich ist. Niemand möchte den weiten und beschwerlichen Weg bis zum unteren Ende der Trefferliste auf sich nehmen.
  • Es fehlt der Überblick darüber, welche Codes es überhaupt gibt.
  • Die Codes sind eigentlich hierarchisch nach Kategorien geordnet. Doch davon kann der Benutzer gar keinen Gebrauch machen. Dadurch wurden manchmal Codes ausgewählt, die zwar ähnlich anmuten, aber zu einer anderen Spezialisierung als der des Arztes gehören. Und das gab dann Ärger mit dem Ministerium.

Tatsächlich habe ich die Trefferbox, die ich gerade kritisiere vor einigen Monaten selbst eingerichtet. Das war jedoch unter der (nichtzutreffenden) Annahme, dass die Ärzte die meisten Codes ohnehin auswendig wissen und die Beschreibung eher der Kontrolle dient.

Erbeten wurde eine Verbesserung der Benutzerschnittstelle und aus dem Gespräch kristallisierten sich die folgenden Anforderungen heraus:

  • Nach wie vor muss ein dem Arzt bekannter Code schnell ausgewählt werden können.
  • Die Verortung in der hierarchischen Struktur muss dem Arzt bei der Auswahl eines Codes bewusst sein.
  • Bei der Volltextsuche muss ein besserer Überblick über die Suchergebnisse hergestellt werden.

Gemeinsam mit meiner Kollegin wurde erst mal auf dem Papier eine grobe Idee entwickelt:

Die verfügbaren Codes sollten in Form eines auf- und zuklappbaren Baumes dargestellt werden.
Ein darüber befindliches Suchfeld sollte diesen Baum filtern.
Im Falle hinreichend vorgefilterter Ergebnisse sollte der gefilterte Baum sich bereits von Anfang an komplett aufklappen.

Ich nehme für die weniger technischen Leser das Ergebnis vorweg:

Im Video wird nach dem Stichwort „Hysterektomie“ gesucht. Bei diesem Beispiel wird an der schieren Menge der Ergebnisse sofort der Vorteil der Umstellung klar. Sofort kann die einzig verfügbare Anästhesie ausgewählt werden und auch im Bereich der Chirurgie ist es durch die Anzeige der Beschreibungen in langen Zeilen nun möglich, die richtige Variante auszuwählen (die davon abhängt, welche Operationsmethode angewandt wurde, welche Organe mit entfernt wurden und wie schwer die entfernten Organe waren).

Nun zum Technischen. Interessant wurde die Umsetzung aus folgenden Gründen:

  • Der gesamte Baum ist zu groß, um ihn in seiner Fülle dem Browser zuzumuten. Es werden immer nur die gerade aufgeklappten Schichten, beziehungsweise das aktuelle Suchergebnis per AJAX vom Server angefordert. Auch der gefilterte Baum wird nur dann komplett geladen, wenn die Suche hinreichend genau war.
  • Obwohl für den Benutzer der Eindruck erweckt wird, dass beim Tippen die Suche sofort verfeinert wird, stoßen die einzelnen Tastenanschläge keine aufwendigen Anfragen aus, sondern erst wenn er mit dem Tippen aufhört (debouncing), wird nach 250ms eine Suche ausgelöst. Das führt im Test beim nicht flüssigen Tippen von „Hysterektomie“ zu nur zwei statt dreizehn Anfragen.
  • Der Baum wird nicht bei jeder Anfrage erneut aus der Datenbank geladen und zusammengesetzt, sondern in einer optimierten Hash-basierten Datenstruktur im Arbeitsspeicher gecached und dann nur in Echtzeit gefiltert, der passende Teilbaum ausgewählt und dann der Baum an der maximalen Tiefe beschnitten.
  • Die Tiefe des Baumes ist technisch (weitgehend) unbegrenzt. Sollte das Ministerium eine 20 Ebenen tiefe Verschachtelung vorsehen, sind wir schon gewappnet.
  • Der Baumfilteralgorithmus ist interessant. Durch die Suchbegriffe wird die Teilmenge der anzuzeigenden Blätter festgelegt. Nun ist ein minimaler Teilbaum gesucht, der alle diese Blätter enthält (aber keine leergefilterten Unterkategorien). Das performant und richtig zu bewerkstelligen erforderte zwei Anläufe. Und ich konnte meiner Kollegin dabei Unit-Tests erklären.
  • Spezialbehandlung von Sonderzeichen: Wer ‚i‘ eingibt, möchte auch Treffer finden, die ‚í‘ (mit Akzent) enthalten. Rein technisch sind das aber erst einmal völlig verschiedene Zeichen. Dass dies nötig ist, war die Idee meiner neuen peruanischen Kollegin.
  • Die Baumalgorithmen im Backend wie auch das von Grund auf selbst entwickelte jQuery-Plugin zur dynamischen Baumanzeige im Frontend wurden als wiederverwendbare Komponenten angelegt.

Diese „Klickibunti“-Arbeit hat mir viel Freude bereitet, weil man am Ende das Ergebnis so schön sieht.
Und vielleicht hilft er auch bei der Beantwortung der folgenden Frage:

Was hat dieser Informatiker eigentlich in einem Missionskrankenhaus zu suchen?

So eine Schleifmaschine ist schon was Feines!

In der letzten Woche sorgte wieder einmal ein medizintechnisches Gerät für Abwechslung. Doch nicht nur das, sondern die einzurichtende Maschine faszinierte mich aufrichtig.

Im Zahnlabor ist es ganz normaler Alltag, den Gebissabdruck mittels eines 3D-Scanners einzuscannen. Der neu gelieferte leistungsstarke Computer mit gespenderter Software (die so wertvoll ist, dass sie durch einen Dongle, einen speziellen nicht-kopierbaren USB-Stick, der während des Betriebs immer im Computer stecken muss, gegen Raubkopie geschützt wird) wandelt die Bilder in Echtzeit in ein 3D-Modell des Gebisses um. Aus vom Techniker gewählten Parametern wird die Geometrie einer passenden Krone berechnet, die dann optional noch nachmodelliert werden kann. Die Krone kann dann sofort auf der neuen großen Schleifmaschine geschliffen werden, sodass die Krone nach 20 Minuten schon fertig sein kann.

Das ist sehr gut, denn im wachsenden Team arbeiten momentan 4 Zahnärzte, deren Bestellungen das Labor ohne die Hightech-Unterstützung gar nicht bedienen könnte.

Links: Zahntechnikermeister Tibor Minge scannt mittels der neuen Software.
Rechts: Die Schleifmaschine, kurz vor dem Start.

Fleißige Artgenossen zu Besuch in Curahuasi

Schon zum Jubiläum waren die beiden angereist, denn schon von der Gründung vor zehn Jahren an hat das Ehepaar Schmiedecke das Krankenhaus Diospi Suyana unterstützt,  nur dass zu jenem Zeitpunkt vom heute stehenden Krankenhaus noch nichts zu sehen war. Doch weder ihre Vereinsmitgliedschaft, noch die aus Deutschland mitgebrachten Süßigkeiten stellten die größte Freude ihres nun dritten Besuchs dar, sondern die kompetente und erfahrene Verstärkung in unserem IT-Team. waschechten Informatiker sind nämlich zum Arbeiten gekommen.

Ilse ist Dozentin für HCI (Human Computer Interaction, dabei handelt es sich um die Kunst der Mensch-Maschine-Interaktion, oder, anders ausgedrückt, um diejenige Disziplin, deren Ziel es ist, dass Computer den Nutzer nicht zur Weißglut bringen) und sie nutze ihren dreiwöchigen Urlaub, um die Prozesse in unserer Consulta Externa zu analysieren und ein Konzept für die von Ärzten lang ersehnte digitale Unterstützung der selbigen zu erstellen. Bei der Consulta Externa handelt es sich um die Sprechzimmer der Ärzte, in denen Untersuchung, Beratung, möglicherweise eine ambulante Behandlung oder die Planung einer Operation, die Verordnung von Medikamenten und die Anordnung weiterer Analysen, etwa in Form von Laboruntersuchungen oder bildgebenden Verfahren, stattfindet. Insbesondere bei letzteren wird momentan nämlich noch viel Papier hin und her geschoben und auch die Patientenakte nimmt einen viel zu weiten Weg durch das Krankenhaus auf sich.
Sie hat Benutzergespräche geführt und eine Vorlage für die Benutzeroberfläche erstellt. Ihre Fähigkeit, dabei alles möglichst benutzerfreundlich zu gestalten, ist bei den Ärzten bestimmt gut investiert!

Vielen Dank für Deine großartige Hilfe, Ilse, und dafür, dass Du dafür auf Deinen Urlaub verzichtetest!
Und natürlich dafür, dass Du uns Uwe noch länger dagelassen hast.

Uwe Schmiedecke hat viel Erfahrung mitgebracht. Die hilft nicht nur, weil sie ihn fachlich zu einem Experten macht, der schon bei seinen beiden vorigen Einsätzen Großartiges geleistet hat, sondern die ganze Erfahrung bringt außerdem den Vorzug mit sich, dass Uwe nicht mehr arbeiten muss. In Deutschland zumindest. Dass er nämlich schon in Rente ist merkt man ihm zwar nicht an, doch es erlaubt ihm einen großzügig langen Einsatz von drei Monaten!

Obwohl wir ihn also noch etwa zwei Monate bei uns haben, ist er schon sehr weit gekommen: Uwe wird nicht nur unsere (nicht mehr weiterentwickelte) MySQL-Datenbank auf eine MariaDB-Datenbank umstellen, sondern auch eine Replikation einrichten. Die sorgt dann dafür, dass, sollte eines Tages unser Datenbankserver ausfallen, innerhalb von Minuten ein vollwertiger Ersatz zur Verfügung steht, sodass mit allen Daten fast sofort weitergearbeitet werden kann. Das ist sehr sinnvoll, denn die Sterblichkeit von Servern, beträgt, wie bei Menschen, 100%. Während diese Zahl den Menschen den Menschen hoffentlich zur Beschäftigung mit seinem Seelenheil führt, ist man bei Computern gut beraten, sie niemals unersetzlich werden zu lassen. Ein deutlich pragmatischerer Ansatz also, dem Uwe in diesen Tagen in die Praxis verhilft.

Einfach Spitze, dass Du da bist, Uwe!

werdender Aushilfs-Kameramann

Für das 10. Diospi Suyana-Jubiläum fehlen dem Medienzentrum Kameramänner. Ich bin Teil des Personals der IT-Abteilung, das mit großer Freude beschlagnahmt wurde, um dem Mangel abzuhelfen. Ende August werden meine Kollegen und ich gemeinsam die Ehre haben, die im Amphitheater stattfindende Veranstaltung, zu der sogar der peruanische Präsident PPK eingeladen ist, nicht nur aufzunehmen, sondern sogar live auszustrahlen. Die Reichweite dieser Ausstrahlung hängt davon ab, wie viele Sendetürme bis dahin betriebsbereit sein werden. Der einzige mit Stromanschluss steht momentan in Curahuasi, aber noch sind ein paar Wochen Zeit.

Heute Nachmittag erhielten wir die erste Portion unserer Kurzausbildung. Nachdem ich gerne fotografiere, war das äußerst spanned. Im Studio bekamen wir die verschiedenen Perspektiven erklärt. Wenn etwa zwei Personen miteinander im Gespräch sind, wird das am besten im „plan bustal“ zum Ausdruck gebracht, in dem die Personen von der Brust an aufwärts zu sehen sind. Der obere Bildrand lässt zum Kopf hin einen Fingerbreit Luft.

Danach hatten wir großen Spaß beim Üben dieser Einstellungen, außerdem beim Bändigen der empfindlichen Zoomsteuerung und langsamen horizontalen Kamerafahrten(Pans) auf den Stativen.

Dazu kamen noch Grundlagen über die Art der während der Produktion verwendeten Absprachen zwischen dem Produktionsleiter (der im Gegensatz zu uns wirklich Kameramann, noch dazu mit viel Erfahrung, ist) und seinen Leuten.

Jetzt wird morgens gelegentlich geübt werden, indem das neue Team die morgentlichen Andachten aufnimmt. Da bin ich aber leider vorerst nicht dabei, denn Montag geht es für mich erst mal in den Urlaub.

Tastaturaustausch

Computer zu reparieren ist nicht mein Job. Punkt. Deswegen mache ich das nicht während der Arbeit, sondern höchstens in meiner Freizeit.

In der vergangenen Woche gab es ein kleines Nachfragehoch. Zu zwei kompletten Laptop-Neuinstallationen kam noch ein etwas spannenderer Eingriff hinzu: Ein Tastaturaustausch. Wenn mindestens 8 Tasten (darunter einige Buchstaben) nicht mehr funktionieren, so dass zunächst nicht mal mehr das Passwort eingegeben werden kann, dann kann eine Kindergärtnerin nicht mehr besonders viel mit ihrem Eingabegerät anfangen und die Tastatur ist in der Spielecke deutlich besser aufgehoben.

Aus Deutschland wurde neben dem Ersatzteil gleich ein schickes Kästchen mit dem nötigen Werkzeug bestellt. Nach mehrwöchiger Lieferzeit dauerte der Austausch dann gerade mal eine Viertelstunde.

Die blauen Plastikecken auf dem Bild, die wie Guitarrenplektrons aussehen, nennt der Hersteller großspurig ‚opening picks‘. Ihr Zweck ist es, den Gehäusespalt aufzuhalten, wenn die Zuhaltungen gelöst sind.

Die (kurze) Arbeitszeit wurde außergewöhnlich gut, nämlich mit Nutella, vergütet.

Was ich normalerweise tue

Mir ist aufgefallen, dass ich im Zusammenhang mit meiner Arbeit bisher fast nur über Untypisches geschrieben habe. Meistens hat es nämlich nicht allzuviel mit Medizin zu tun. Doch was soll man schon über den Entwickleralltag schreiben, ohne völlig ins Technische abzudriften?

Vielleicht sagt dieses Bild mehr als die tausend Worte, mit denen ich Sie nicht abschrecken möchte.

Es zeigt die Unterschiede eines Programmstücks bevor (links) und nachdem (rechts) ich darin einen Bug (unerwartetes Programmverhalten) gesucht und behoben habe. Möglicherweise geht es Ihnen wie mir und ein Blick auf die linke Seite erschließt Ihnen nicht sofort die Funktionalität des Codes. In solchen Fällen macht es Sinn, den Code Zeile für Zeile umzustrukturieren, die mehrfach verwendeten Stellen auszulagern, und ihnen Namen zu geben. Im umgeschrieben Code war der Fehler sofort ersichtlich (für Insider: Wenn man in JavaScript beim Initialisieren eines Datums aufgrund einer noch ausstehenden Benutzer eingabe als Tag einen leeren String übergibt, entspricht das resultierende Datum nicht dem Monatsbeginn, sondern dem letzten Tag des Vormonats) und mit drei zusätzlichen Zeichen behoben (für Insider: ||1 )

Wenn sie den Code auf der rechten Seite ansehen, verstehen sie vielleicht immer noch nur Spanisch, und doch ist außer Spanischkenntnissen kaum etwas nötig, um zu verstehen, was da so vor sich geht.

Das ist ein typisches Beispiel für einen normalen Arbeitsschritt. Zum Glück machen die genauso viel Spaß!

Wenn das Ultraschallgerät nicht bootet…

Ich mag es nicht, wenn mein Telefon während der Arbeit klingelt. Oder vibriert. Das reißt mich aus meinen Gedanken und meistens geht es danach darum, diese oder jene falsche Benutzereingaben im System zu korrigieren.

Diese Woche dachte ich das Gleiche, als der Arzt anrief, anscheinend weil sein Ultraschallgerät nicht funktionierte. Ich ärgerte mich zugegebenerweise etwas, weil ich den Fehler zuerst vor dem Computer vermutete, statt darin. Unberechtigter Weise.

Denn tatsächlich ließ sich das Gerät nicht mehr einschalten. Der integrierte Computer mit Linuxbasis verweigerte das Hochfahren. Netterweise verriet er die Ursache freiwillig: Es bestand ein Problem mit dem Dateisystem. 

Diese Probleme können in den meisten Fällen ohne Weiteres repariert werden, indem man Werkzeuge auf der Machine selbst nutzt. Das Starten einer Textkonsole, um solches zu tun, wurde gleich angeboten, dafür jedoch leider nach einem Rootpasswort verlangt. Niemand kannte das Rootpasswort der gespendeten Maschine ohne Wartungsvertrag. Auch der Bootmanager war verrammelt, so dass ich die Abfrage nicht durch Starten im Single User Mode unterdrücken konnte. Während ich schon als letzten Ausweg darüber nachdachte, den Medizintechniker zu bitten, die Festlatte ausbauen, um dann ein anderes Passwort unterzuschieben oder gleich das Dateisystem zu reparieren, fand glücklicherweise jemand eine Reihe Wiederherstellungs-CDs​. Eine davon funktionierte, das System bootete bereitwillig davon und die gesamte Festplattenpartition wurde in ihren Ursprungszustand versetzt.

Die Wiederherstellung, wie sie im Gange ist:

Danach ging alles wieder. An sich nichts Spannendes, aber wenn es bei einem Ultraschallgerät passiert, ist es schon irgendwie interessanter als bei einem PC.

Erster Arbeitstag

Lange habe ich mich darauf gefreut, endlich richtig loszulegen. Heute war es soweit. Es stand an, meinen Arbeitsplatz einzurichten (der Schreibtisch stand schon, die Technik konnte ich mir aus dem Lager zusammen suchen. Vielleicht finde ich irgendwann auch noch eine Tastatur mit weniger schwammigem Druckpunkt). Danach stand die Installation des Systems an. Glücklicherweise gab es eine DVD mit Ubuntu, doch beim Installieren der Software musste einiges über die Internetverbindung laufen. Deren Geschwindigkeit ist unterirdisch, weil die Anbindung via UMTS durch die Luft erfolgt. Wohlgemerkt die Anbindung eines ganzen Krankenkauses. Dafür werden mehreren  handelsübliche UMTS-Sticks ins Netz eingehängt. Obwohl ich für die Installation einen eigenen Stick ganz für mich nutzen durfte, ging es sehr schleppend voran und ich musste viel Zeit mit Warten verbringen, teilweise unter Lesen von noch mehr Rails-Literatur. Über Nacht läuft nun ein allgemeines Systemupdate, ein halbes  Gigabyte groß. Hoffentlich reißt die Verbindung nicht ab! Eine sehr willkommene Abwechslung war deswegen die Mittagspause. Mit Wilmer (dem Linux-Guru) verleibte ich mir in der Kantine leckeren Fisch ein. Auf der anderen Seite saß der jüngere der beiden Krankenhauspastoren. Irgendwie kamen wir auf Musikinstrumente zu sprechen, was den Rest der Mittagspause unglaublich versüßte, denn der frühere Gitarrist schlug vor, in der Kapelle ein wenig zu proben (ich hätte nicht gedacht, dass das möglich ist, aber man darf dort tagsüber üben). Dabei spielte Wilmer sogar Cajon, sodass wir zu dritt waren. Zum Glück sind manche der spanischen Lieder einfach Übersetzungen des bekannteren englischen Lobpreis-Liedguts. Nach der Pause ging es weiter wie vor der Pause. Am Ende des Tages hatte ich immerhin Framework, Entwicklungsumgebung und Datenbank installiert, den Code ausgecheckt und eine Testdatenbank aufgesetzt. Leider läuft es noch nicht, denn ein paar Abhängigkeiten (gems)  verweigern noch die Kompilierung. Dem konnte ich heute nicht mehr beikommen, obwohl ich länger als eigentlich vorgesehen geblieben bin, weil ich mir ein abschließendes Erfolgserlebnis gewünscht hätte und auch, weil ich nicht als erster gehen wollte und aus verschiedenen Gründen alle anderen überzogen.

So kam es, dass ich auf dem Heimweg erlebte, was die Regenzeit bedeutet. Während es Tagsüber frühlingshaft warm und morgens so überzeugend sonnig gewesen war, dass ich meine Jacke auf ihrem Haken gelassen hatte, begann es abends ordentlich zu regnen und hat auch bis jetzt nicht aufgehört. Deswegen war ich sehr glücklich, den Weg zurück ins Dorf gegen Spritgeld auf der Ladefläche des umgebauten Motorrads eines netten Herrn zurücklegen zu dürfen.