Was auch immer mir in den Sinn kommt und niedergeschrieben werden will

Mit der heißen Nadel gestrickt

Veröffentlicht am: von zeitverschreib

2 Min. Lesezeit

Für diesen Blog verwende ich aktuell das wunderbare BSSG1. Das Teil ist schnell, wird liebevoll gepflegt und bringt sehr ansprechende Themes mit.

So etwas hätte ich auch gerne für meine Gemini Capsule2. Da die Szene aber eher klein ist, gibt es keine “großen” Apps oder SSG, sondern etliche kleine Pakete, um aus Markdown oder anderen Quellen Gemtext zu erzeugen. Die Auswahl ist schwierig und einige Projekte werden nicht mehr weitergeführt.

Für den Transfer meiner alten Instagram-Posts zu Pixelfed habe ich tatsächlich Excel und VBA verwendet. Die Software muss ich sowieso täglich im Büro nutzen, ich komme leider nicht dran vorbei. Da lag es nahe, die Daten einfach in eine Tabelle zu importieren und per Macro ein einfaches Script zu schreiben, welches dann per toot3 nach Pixelfed schreibt.

Mein Wissen über VBA stammt zu 100% aus Suchen nach genau dem Problem, welches gerade zu lösen war. Dementsprechend sieht mein Quellcode, naja, gewöhnungsbedürftig aus. Aber er erfüllt seinen Zweck

Damals™ war ich noch recht fit in Turbo Pascal, aber das ist halt Jahrzehnte her. Anstatt mich nun in Free Pascal einzuarbeiten, habe ich die anstehende Aufgabe daher erstmal wieder per Tabellenkalkulation und Macro gelöst.

Das Ergebnis ist eine LibreCalc-Datei, in der es verschiedene Blätter mit rudimentärer Konfiguration, Postings, Seiteninhalten und einem Gemfeed gibt. Damit kann ich zumindest mein Gemlog pflegen, ohne jede .gmi einzeln ändern zu müssen.

Nächster Schritt: das Projekt nach Python oder eventuell Rust zu portieren. Ersteres habe ich schon mal ausprobiert, letzteres kenne ich nur vom Hörensagen.

Für diejenigen unter Euch, die trashige Horrorfilme mögen und einigermaßen abgehärtet sind, hier der Basic-Code aus Libre. Popcorn müsst Ihr selbst besorgen. 🤣

Sub WriteBlog
    Dim spalte as Integer
    Dim zeile as Integer
    Dim feedzeile as Integer
    Dim postings as Integer
    Dim gmidatei as String
    Dim header as String
    Dim content as String
    Dim backtoblog as String
    Dim postingdate as Date
    Dim previousmonth as Integer
    Dim headermonth as String
    previousmonth = 0
    postings = ThisComponent.Sheets.getbyname("Config").getCellRangeByName("B2").value
    zeile = 0
    feedzeile = 2
    for spalte = 1 to postings
        gmidatei = "~/gemini/"&Left((ThisComponent.Sheets.getbyname("Postings").getCellbyPosition(spalte,1).getstring()),10)&".gmi"
        postingdate = ThisComponent.Sheets.getbyname("Postings").getCellbyPosition(spalte,1).getstring()
        headermonth = Choose (Month(postingdate), "January", "February", "March", "April" , "May","June","July","August","September","October","November","December")
        header = ThisComponent.Sheets.getbyname("Postings").getCellbyPosition(spalte,0).getstring()
        content = ThisComponent.Sheets.getbyname("Postings").getCellbyPosition(spalte,3).getstring()
        backtoblog = ThisComponent.Sheets.getbyname("Config").getCellRangeByName("B9").getstring()
        outputfile = Freefile
        if (Month(postingdate) <> previousmonth) then
            if (zeile > 0) then
                zeile = zeile + 1
            end if
            ThisComponent.Sheets.getbyname("blog.gmi").getCellbyPosition(0,zeile).string="## " & headermonth & " "&Year(postingdate)
            zeile = zeile + 2
            previousmonth = Month(postingdate)
        end if      
        ThisComponent.Sheets.getbyname("blog.gmi").getCellbyPosition(0,zeile).string="=> "&Left((ThisComponent.Sheets.getbyname("Postings").getCellbyPosition(spalte,1).getstring()),10)&".gmi "&Iif (Day(postingdate) < 10, "0" ,"")&Day(postingdate)&"."&Iif (Month(postingdate) < 10, "0" ,"")&Month(postingdate)&"."&Year(postingdate)&" - " & header
        ThisComponent.Sheets.getbyname("feed.gmi").getCellbyPosition(0,feedzeile).string="=> gemini://gemini.zeitverschreib.de/blog/"&Left((ThisComponent.Sheets.getbyname("Postings").getCellbyPosition(spalte,1).getstring()),10)&".gmi/ "&Year(postingdate)&"-"&Iif (Month(postingdate) < 10, "0" ,"")&Month(postingdate)&"-"&Iif (Day(postingdate) < 10, "0" ,"")&Day(postingdate)&" "& header
        open gmidatei for output as outputfile
        Print #outputfile, "## " & header
        Print #outputfile, ""
        Print #outputfile,content
        Print #outputfile, ""
        Print #outputfile,backtoblog        
        close outputfile
        zeile = zeile  + 1
        feedzeile = feedzeile + 1
    next spalte
End Sub

  1. BSSG - A simple static site generator written in Bash↩︎

  2. Welcome to my cosy little Gemini capsule↩︎

  3. toot - Mastodon CLI & TUI↩︎