Rettung mit core

Vorher lesen: Gesichert und verschwunden!

Files, Streams und Maps

Jetzt dass das Ausmaß des Desasters bekannt ist, kann die Rettung begonnen werden. Dafür werde ich keinen Plan machen, sondern Schritt für Schritt vorgehen.

  • Die Liste aller vermissten Bilder, oder besser gesagt 300 davon, habe ich schon.
  • Ich werde also versuchen, diese Bilder in meiner Ablage (NAS) zu finden. Die Bilder sind dort chronologisch sortiert in Unterverzeichnissen: es wird eine rekursive Methode brauchen. Der NAS ist über Samba-Mount an dem Mac angebunden, ich kann also direkt darauf zugreifen. Dann probiere ich es schon mal mit Brute-Force.

Die Idee ist einfach:

  • aus meiner ersten Liste werden die Dateinamen extrahiert, dafür nehme ich reguläre Ausdrücke und dotNet Core hat dafür alle Methoden parat.

    Mit der Suche von VS-Code lassen sich in Echtzeit die regulären Ausdrücke validieren, feine Sache
  • Diese Dateiname- Liste als Parameter übergeben, und rekursiv alle Verzeichnisse durchsuchen, dabei jedes Mal mit dem Verzeichnis Inhalt vergleichen.
  • Ergebnisse werde ich in einer Tabelle sammeln (Key=Dateiname, Value=Pfad dahin) speichern.

Ich bin kein C# Spezialist, aber bis auf den Hashtable, (der „Dictionary“ heißt) findet man sich schnell zurecht. Das Einzige, was ich vermisse, ist ein automatischer Vorschlag für import („using“ in c#). Ist aber verschmerzbar.

VS Code macht dabei eine echt gute Figur, schlägt mir nach 2 bis 3 Buchstaben den richtige Begriff vor, so dass ich ich sogar schneller bin, als ich mit copy&paste wäre, wie man es vom Handy eigentlich gewohnt ist.
Bein Ausführen ist es auch noch sehr schnell.

270 von 300 Bilder habe ich wieder finden können. Ist schon ein guter Anfang!

  • Bilder nach Google zurück schicken: die gefundenen Bilder muss ich jetzt wieder in der Cloud speichern. Dafür nutze ich einfach das Web-Frontend von Google-Photos, per drag and drop, ganz ohne Stress.
  • Für die Freigabe im Blog braucht aber Google kryptisch Links zu den Bildern.

    Diese Links kann ich nur beziehen, wenn ich die neu importierten Bilder in einen Post einbaue. Alles kein Problem, ich erstelle einen Post mit den 270 Bildern, die ich frisch importiert habe. Es sind schon ein paar Perlen dabei
  • Jetzt muss ich in alle Posts, alle falschen toten Links korrigieren. Ich probiere es kurz manuell und merke dass es keinen Wert hat! … Und jetzt?
Backup it!

Wie komme ich am besten an den Inhalt all meiner Blogs? Crawler? WGET? Wieder das gleiche Problem, wie am Anfang. Irgendwann, nach einer kleinen Jogging Runde, komme ich auf die Idee, dass  ein Backup helfen könnte. Gibt es überhaupt eine Backup Funktion im Blogger? Warum habe ich nie ein Backup gemacht? Wie konnte ich so doof sein?

Viele interessante Fragen, aber auch Antworten! In der Tat, bietet Blogger eine Backup Funktion, leider nicht für Bilder, aber die Textinhalte lassen sich auf einen Schlag in einer XML-Datei exportieren, und wieder importieren!

Mehr brauche ich nicht, um weiter vorwärts kommen zu können!

  • Aus der Backup-Datei muss ich noch alle toten Links ermitteln, dafür kann mein Skript eine Verbindung aller Links erstellen und dabei erfahre ich, ob das Bild vorhanden ist oder. Dabei habe ich sogar einen Schritt mehr automatisiert!
  • VS Code und ausgefeilte reguläre Ausdrücke helfen, um in der XML-Datei die toten Links durch korrekte Links zu ersetzen.
  • Dabei musste ich noch berücksichtigen, dass die Bilder in verschiedenen Größen angezeigt werden und dass diese Größe URL kodiert ist.
  • Die Spannung steigt und als ich meine korrigierte Backup-Datei zurückspiele, kann ich mich richtig freuen! Die 270 Bilder sind wieder da!
Restarbeit
Sieht schon viel besser aus …
Noch 30 Dateien, mit Leerzeichen oder sonstiger Endung.

Jetzt bleibt zu klären, warum noch 30 Bilder vermisst werden, nach einer tieferen Analyse kommt folgendes heraus:

  • Es gibt nicht nur „.jpg“, aber auch „.jpeg“ und „.png“ Bilder
  • Bilder mit Leerzeichen werden nicht korrekt gefunden (die Menschheit wird autonom fahren, bevor die Informatiker ohne Leerzeichen Problematik leben können)

Beide Probleme können mit angepasstem regulär Ausdruck und URL-Unescape gelöst werden.

GIT Anbindung mit VS-Code

Nochmal alles laufen lassen:

  • Aus der Backup Datei alle falsch verlinkten Bilder suchen
  • Dateiname in der Ablage suchen
  • Bilder in Google importieren und im Auflistungs Post hinzufügen
  • Neue Bilder-Links in der XML Datei austauschen
  • Alle Posts löschen (!)
  • Einmal Gänsehaut bekommen und korrigierte Backup-Datei importieren

Ja! Alle Bilder sind da! Was für eine Freude!

Fazit

Wer kein Backup macht, geht davon aus aus, dass die Daten temporär gelagert sind und gibt den Daten kein Wert. Das weiß ich, und ich hatte unterschätzt, wie einfach die Bilder weggehen können. Hatte gedacht, dass google alles für mich zwei Mal absichert, ohne mir wirklich Gedanken darüber gemacht zu haben.

Es war ein langer Weg, aber dabei konnte ich bei jeder Etappe etwas lernen, dafür war es mir den ganze Umstand wert!

Mein Blog hat, für mich, an Wert gewonnen und ich konnte feststellen, wie wichtig es ist, für mich meine Erfahrungen zusammen zu fassen.

Visual Studio Code und dotNet Core sehen vielversprechend aus, und für einen IT Spezialisten, der 16 Jahre lang gern ohne Microsoft Technologie bestens zurecht gekommen ist, ist es ein Kompliment  an Microsoft.

Der gesamte code kann in GitHub gelesen werden.

Danke für’s Lesen und bis bald,
Éric

PS: Backup nicht vergessen!

Gesichert und verschwunden!

Als ich mein NAS in Betrieb genommen habe, war meine erste Absicht, alle Bilder bei mir daheim zentralisiert gelagert zu haben und langfristig alles aus der cloud zu entfernen.

Dabei ist die Sache ein bisschen ins Schleudern geraten: als ich den NAS mit dem Google-Drive synchronisiert habe, war es mir nicht so richtig bewusst, dass die Synchronisation bidirektional läuft.

Alles halb so wild, hätte ich nur das Sortierungs-Skript nicht ausgeführt… Klar Bilder gehören sortiert, und am bestens automatisch! Nur, wenn ich die Bilder sortiere und dabei vom Google-Drive lösche, dann sind die weg aus Google.

Dabei hätte ich ganz schnell mein langfristiges Ziel erreichen können, nur blöd, dass ich die gelöschten Bilder doch irgendwo in Febrauch hatte, nämlich in meinem Blog.

Als ich ein paar Tage später meinen Blog anschaue, verstehe ich erst mal nicht, was da passiert ist.

Schnell ist mir die Ursache klar, und genau so schnell überlege ich mir, wie ich alles restaurieren kann.

  • Ausmaß erkennen
  • Bilder wieder einchecken
  • Bilder wieder verknüpfen

So schlimm kann es doch nicht sein.

Ausmaß

Zuerst suche ich nach einem Crawler, der mir helfen soll heraus zu finden, wieviele Bilder vermisst werden. Leider finde ich  im freeware Bereich nichts richtig Hilfreiches. Am liebsten hätte ich einen online Crawler gefunden, der mir alle toten Links auflistet. Leider scheint so etwas nicht gängig zu sein.

Als ich Benny nach so einem Tool gefragt habe, sagt er mir, dass er einfach die Entwicklertools von Chrome dafür verwende.

tote Links sind einfach zu erkennen

Naja, warum nicht. Einen Versuch ist es schon wert.

Tatsächlich bekomme ich damit schnell eine Liste per Post aller fehlender Bilder. Ich muß noch alle Post anklicken und die Liste per copy&paste in einer Text-Datei sammeln.

In zehn Minuten wurde das Ausmaß ermittelt. Es fehlen mir knapp 300 Bilder. Wahnsinn! Dass ich gern meine Stories mit Bildern illustriere war es mir klar, aber dass es so viele sind, macht mich sprachlos.

Von einer Rettung von Hand ist jetzt keine Rede mehr, alles muss automatisch, per Script oder Programm geschehen.

Alles offline zu stellen ist für mich keine Option. Zu sehr freue ich mich, wenn ich meine Berichte im Nachhinein lese.

Lern mal was

Ich habe eine Liste aller vermissten Bilder und alle diese Bilder sollen irgendwo auf der Platte zu finden sein. Es muss also nur ein Programm geben, das mir beide Listen verknüpft. Erst mal.

An schnellsten wäre ich sicher mit einem Java Program, da kenne ich schon alle Tricks. Im Powershell wäre es auch bestimmt lustig. Python, Groovy und PHP wären auch denkbar.

Aber eine Technologie macht mich seit ein paar Wochen neugierig:  wenn ich die Rettungsaktion mit dotNet Core und VS-Code versuchen würde?

Es ist zwar von Microsoft, soll aber Open Source sein und auf allen Betriebsystemen laufen. Nach Vorträgen vom Richard Lander und Marc van Eijk bin ich schon in Berührung damit gekommen.

Also gut, ich installiere VS-Code auf meinem Mac, und erste Überraschung: das Programm ist nicht einmal 100MB groß! dotNet Core kriege ich auch relativ schnell installiert (auch wenn El Capitan Ärger mit brew macht).

Ein Paar plugins per Klick installiert, das Programm ist gut an den Mac integriert und läuft sehr flüssig. Nach einer Stunde steht fest: damit werde ich es versuchen!

los geht’s für eine  Rettung mit core!

Commit’n’run

Wer kennt es nicht: der Kollege hat kurz vor Feierabend sein Commit gemacht, und gleich im Anschluß den angesprochenen Feierabend durchgeführt. Nun leider funktionieren die ganzen Änderungen, die er in das System geschickt hat, nur auf seiner Umgebung, und damit hat er alle anderen Kollege bis zu seiner Rückkehr behindert!

Es gibt die gewagten Commit’n’run und die, die man aus Sport macht, bei diesem Spiel hatte ich mit Frank viel Spaß, und dieser Begriff hat sich schnell durchgesetzt.

Da ich auch ein leidenschaftlicher Läufer bin, passt dieser Name auch perfekt für meinen IT-Blog.

Seit ich zwölf oder dreizehn bin, hat mich die Programmierung immer fasziniert. Am Anfang war es mein Taschenrechner, in dem man mathematische Aufgaben wiederholen konnte, dann kam mein HP-28S, dann der Atari, mit dem ich vom Basic 1000d bis zum Assembler alles ausprobieren konnte.

Nach dem Abitur war es mir klar: Informatik wird mein Beruf, und um dieses Ziel zu erreichen, habe ich viele Hürden überwinden müssen, aber nie locker gelassen.

Nun, seit bald zwanzig Jahren bin ich Profi und habe schon vieles gesehen. Vieles, aber auch viel Wiederkehrendes.

Immer wieder werden die gleichen Fehler gemacht, denn eine neue Technologie erfordert eine neue Lernphase. Immer wieder wird das Rad neu erfunden, weil es einfacher ist, etwas Neues anzufangen als zu verstehen, warum das Vorhandene so funktioniert.

Immer wieder denkt man, dass man es besser machen kann als es früher war. Das stimmt auch teilweise. Die Möglichkeiten sind exponentiell gewachsen, funktionierende Frameworks stehen frei zur Verfügung. Ich bewege mich in einem Umfeld, wo es kaum Grenzen gibt.

Ein Lehrer hatte mal gesagt: „Ihr sollen euch darum bemühen, die Computerbedienung so intuitiv und einfach zu machen, dass er wie ein Fernseher bedient werden kann.“, Das waren die Zeiten, in denen der Fernseher mit zwei Knöpfen zu bedienen war. Leider wurde das Ziel verfehlt, sogar Fernseher sind quasi unbrauchbar geworden.

Die Digitalisierung hat die Menschheit fest im Griff, spätestens seit jeder ein Handy mit sich trägt. Alle Gegenstände werden immer „intelligenter“ (und wir dümmer?).

In diesem Blog will ich einfach einen Blick hinter die Kulissen verschaffen, es geht mir nicht darum, das Unerklärliche für alle klar zu machen, es geht mir auch nicht darum, ein How-To für werdende Informatiker zu schreiben.

Als ich vor drei Jahren mit meinem Läufer-Blog angefangen habe, wusste ich gar nicht, auf was ich mich einlasse. Jetzt weiß ich’s: es ist aus reinem Eigennutz.

Zum einem, eine Leidenschaft muß geteilt werden, zum anderen: ohne Schrift kein Gedächtnis.

In diesem Sinn viel Spaß beim Lesen, und nach dem Commit, ist so ein kleiner Lauf nicht immer eine Sünde!