<updated>2023-11-25T15:43:40+01:00</updated>
<title>gemini.lan feed</title>
<subtitle>To be in the .lan!</subtitle>
<link href="gemini://gemini.lan/gemfeed/atom.xml" rel="self" />
<link href="gemini://gemini.lan/" />
<id>gemini://gemini.lan/</id>
<entry>
<title>Permanente Einträge in die ARP-Tabelle </title>
<link href="gemini://gemini.lan/gemfeed/2023-10-03-adding-permanent-arp-table-entries.gmi" />
<id>gemini://gemini.lan/gemfeed/2023-10-03-adding-permanent-arp-table-entries.gmi</id>
<updated>2023-11-22T11:30:42+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Date: 2023-10-03 18:20</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'>Permanente Einträge in die ARP-Tabelle </h1><br />
Published at 2023-11-22T11:30:42+01:00
Date: 2023-10-03 18:20
Modified: 2023-10-03 18:20
Category: Network Tags: arp, network, linux, offline
Slug: permanent-arp-entry
Author: Reiko Kaps
Permanente Einträge in die lokale ARP- bzw. NDP-Tabelle eines Linux-Rechners
einfügen
Aus diversen Gründen habe ich meinen Homeserver-Pi wieder gegen einen PC
getauscht: Den damit einhergehenden Mehrverbrauch an Strom minimiere ich
durch recht rigide Strommaßnahmen, die ich mittels des
Autosuspend-Daemons umsetze.
Das kleine Python-Programm schickt den PC nach einer definierbaren
Zeit in den Ruhestand, überprüft aber vorab, ob eine Reihe von
Ausschlussbedingungen erfüllt sind. Dazu können bestehende SSH- oder
Samba-Verbindungen ebenso gehören wie eigene, selbstgeschrieben Tests.
Außerdem setzt das Skript Wiederaufwach-Timer, die den PC entweder in
Intervallen oder zu den Laufzeiten von Systemd-Timern aufwecken.In
meinem Setup schickt Autosuspend den PC nach 15 Minuten Untätigkeit in
den S3-Sclaf und weckt ihn etwa zum Backup externe Dienste bzw. alle 5
Stunden wieder auf.
Damit ich nicht immer ein Magic-Paket an den Rechner schicken muss,
horcht die Ethernet-Schnittstelle des PCs auf eingehende
Unicast-Pakete. Das funktioniert allerdings nur dann, wenn der
anfragende Rechner die MAC-Adresse des PCs über einen dauerhaften
Eintrag in seiner
ARP-Tabelle bzw. NDP-Tabelle
kennt.
Unter Linux lässt sich das temporär auf der Kommandozeile mittels des
Befehls ip für IPv4 eintragen:
Der Platzhalter
SchnittstellestehtdabeifürdieNetzwerkschnittstelle, überdiederanzusprechendeRechner(Hostname)
mit seiner $MAC-Adresse zu erreichen ist. Mittels des Befehls
bekommt man übrigens sowohl die Einträge für IPv4 als auch IPv6
angezeigt:
[Befehlsausgabe ip neighbor show]{: .image-process-large-photo}
Da diese Einträge beim nächsten Boot wieder verschwinden, sollte man
diese Einträge beim Start des Netzwerks setzen - etwa mittels eines
Dispatcher-Skripts des NetworkManagers
. Diese Skripte liegen meist im Verzeichis
/etc/NetworkManager/dispatcher.d. Ein Beispiel dafür sieht etwa so aus:
Das Skript verwendet hier die Option -f, über die sich eine Datei
angeben lässt, die pro Zeile eine MAC-Adresse und den dazu gehörenden
Hostnamen enthält. Das ist pflegeleichter und flexibler, wenn es gilt
neue Einträge hinzuzufügen. Die Shell-Variable $1 enthält hier die
gerade startende ($2) Netzwerkschnittstelle.
</div>
</content>
</entry>
<entry>
<title>FUZIX: Unix für 8-Bit-CPUs, erster Teil</title>
<link href="gemini://gemini.lan/gemfeed/2023-04-30-fuzix_unix-fuer-8bit-cpus.gmi" />
<id>gemini://gemini.lan/gemfeed/2023-04-30-fuzix_unix-fuer-8bit-cpus.gmi</id>
<updated>2023-11-22T12:38:12+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Category: Retrocomputing</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'>FUZIX: Unix für 8-Bit-CPUs, erster Teil</h1><br />
Published at 2023-11-22T12:38:12+01:00
Ein Unix auf einer 8-Bit-CPU und in weniger als 1 Mbyte Speicher
Category: Retrocomputing
Tags: z80, NC100, FUZIX
Author: Reiko Kaps
Vor gut 9 Jahren hat der bekannte Linux-Entwickler Alan Cox unter dem
Motto “Because Small Is Beautiful” das FUZIX-Projekt
gestartet.
https://github.com/EtchedPixels/FUZIX
FUZIX setzt seinerseits auf Vorarbeiten von
UZI auf.
https://github.com/chettrick/uzics
Für Cox verschmelzen in FUZIX verschiedene UZI-Forks “zu einer
halbwegs kohärenten Plattform, die anschließend von V7 auf einen Bereich
zwischen SYS3 und SYS5.x erweitert wurde - einige POSIX-Elemente kommen
noch als Zugabe drauf. Zusätzlich wurden noch einige Tricks und Lehren
aus der Entwicklung von ELKS und OMU eingebaut.
https://github.com/jbruchon/elks
http://www.pix.net/mirrored/discordia.org.uk/~steve/omu.html
FUZIX unterstützt eine Reihe von alten und neuen Computer(systemen).
Dazu zählen twa der Amstrad NC100 und der Sinclair ZX Spectrum 128K -
weitere finden sich in der FUZIX-Dokumentation
https://github.com/EtchedPixels/FUZIX/blob/master/docs/Platforms.md
Zudem wird an einigen anderen Plattformen gerade gearbeitet.
https://github.com/EtchedPixels/FUZIX/blob/master/docs/DevPlatforms.md
Ich selbst besitze seit einigen Jahren den Amstrad NC100, den ich
mittels SRAM-PCMCIA-Karten auf 1 MByte RAM erweitert habe. Damit wäre
es laut FUZIX-Dokumentation möglich, das OS auf dem Amstrad laufen zu
lassen. Allerdings müssen davor noch einige Vorarbeiten erledigt
werden:
Zuerst benötigen wir eine brauchbare Build-Umgebung für FUZIX. Alan Cox
beschreibt im INSTALL-File das nur knapp:
https://github.com/EtchedPixels/FUZIX/blob/master/INSTALL
Daher habe ich mich entschlossen es hier ausführlicher und
nachvollziehbar dazustellen: Empfehlenswert ist ein frisch
installiertes Debian- oder Ubuntu-Linux - vorzugsweise als virtuelle
Maschine oder Container. Letzteres hat schlicht den Vorteil, dass man
Fehler einfacher findet und erneute Versuche leichter umzusetzen sind.
Alternativ kann man auf die Container-Technik Docker dabei setzen. Sie
läuft praktisch auf allen aktuellen Desktop-Betriebsystemen und ist
dabei besonders einfach: Sämtliche Vorgaben und Einstellungen lassen
sich vorab in einen “Dockerfile” sammeln. Anschließend baut Docker
daraus dann ein Container-Image, über das man dann recht einfach FUZIX
bauen (lassen) kann. Wie man Docker auf dem eigenen Betriebsystem
installiert, beschreiben die Entwickler ausführlich:
https://docs.docker.com/engine/install/
Anschließend lädt man sich mein Dockerfile
auf den eigenen Rechner oder klont alternativ das
gesamte Repo
https://codeberg.org/reik_kaps/fuzix-builder/src/branch/main/Dockerfile
https://codeberg.org/reik_kaps/fuzix-builder
In dem neuen Verzeichnis führt man nun folgende Docker-Kommandos aus:
$> docker build
Der Befehl erzeugt aus dem Dockerfile ein Docker-Image, das die
FUZIX-Build-Umgebung sowie einige zusätzliche Skripte enthält. Dazu
zählt das Skript build.sh, über das sich die FUZIX-Sourcen lokal klonen
lassen und das den eigentlichen Build teilweise oder vollständig
automatisiert:
https://codeberg.org/reik_kaps/fuzix-builder/src/branch/main/build.sh
Das Skript schreibt auch im Makefile die Zielplattform auf
“amstardnc/nc100” um, übersetzt dann den FUZIX-Kernel udn erzeugt die
Disk-Images. Über den Schalter info liefert es einige, weitere
Hinweise zu Dateipfaden und Programm-Parametern.
Ist der Build ohne schwerwiegende Fehler nach einigen Stunden zu einem
Ende gekommen, lässt sich FUZIX bereits testen - falls man den Emulator
nc100em übersetzt und ggf. installiert hat:
Zuerst muss man das FUZIX-PCMCIA-Card-Image
($PWD/Images/amstradnc/nc100/pcmcia.img) nach $HOME/nc100/nc100.card
kopieren, anschließend ruft man die Kommandozeile
$> dnc100em -p $PWD/Kernel/platform-amstradnc/nc100/nc100emu.bin
auf, dnc100em muss dabei im Suchpfad liegen! Als Ergebniss sollte nun
FUZIX starten, was in etwa so wie in diesem Video aussehen sollte:
https://files.mastodon.social/media_attachments/files/109/904/156/916/544/734/original/202c2435e887d9da.mp4
Nun kann man sich an die FUZIX-Installation auf der tatsächlichen
Hardware machen. Bislang gibt es aber noch Hürden, die noch nicht
genommen wurden. Dazu gehört die Verbereitung der SRAM-Karte, was ich
aber in einem weiteren Beitrag beschreiben werde.
</div>
</content>
</entry>
<entry>
<title> Analoge Filme digitalisieren (2/2)</title>
<link href="gemini://gemini.lan/gemfeed/2022-01-16-alte_filme_digitalisieren-2.gmi" />
<id>gemini://gemini.lan/gemfeed/2022-01-16-alte_filme_digitalisieren-2.gmi</id>
<updated>2023-11-22T11:30:42+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Date: 2022-01-16 16:00:00</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'> Analoge Filme digitalisieren (2/2)</h1><br />
Published at 2023-11-22T11:30:42+01:00
Date: 2022-01-16 16:00:00
Modified: 2022-08-24 11:01
Category: fotografie Tags: photo, digitalisierung, archivierung
Slug: analoge-fotos-digitalisieren_2
Author: Christian Hintz
Editor: Reiko Kaps
featured_image: /images/Beispielfotos/Digitalkamera_vom_Negativ.jpg
Alte Negative oder Dias lassen sich mit speziellen Scanner digitaliseren, die sind entweder
sehr teuer oder schlecht und brauchen pro Scan oft viele Minuten.
Einfacher, schneller und oft auch günstiger geht es mit einer
Digitalkamera sowie einigen Tools.
Anders als bei anderen gibt es bei mir keinen so üppigen Fundus an alten
Negativen oder gar Dias, bei denen sich eine Digitalisierung wirklich
lohnen würde. Auch sind manche Farbnegative in keinem guten Zustand.
Allerdings produziere ich durchaus auch heute noch eine gewisse Menge
»analoge« Fotos. Farbige lasse ich meist entwickeln und direkt
digitalisieren. Dafür gibt es Experten, die auf durchaus bezahlbare Art
und Weise eine wunderbare Arbeit abliefern, beispielsweise Jörg Bergs in
Hürtgenwald. Obwohl seine Firma auch S/W-Filme hervorragend bearbeitet,
mache ich das gelegentlich selber.
[Fa Bergs]{: .image-process-large-photo}
Wobei die Frage ist, warum? Eigentlich habe ich dafür nur den Grund,
dass ich gerne mit einer Olympus PenFT fotografiere, die genau so alt
ist wie ich selbst. Ausprobiert habe ich dabei zwei Methoden.
Ich nenne einen Epson Perfection 2480 Photo mein eigen. Seit den nuller
Jahren… Das Teil hat eine Durchlichteinheit, die mit xsane unter Linux
ganz ordentlich funktioniert. Bei einer Auflösung von immerhin 2400 dpi.
Das Verfahren ist allerdings zeitraubend und nervig. Noch dazu macht der
Scanner ein Geräusch, das das gesamte Umfeld einschließlich meiner
selbst in einem Maße nervt, dass ich mir das abgewöhnt habe. Darüber
hinaus bleibt einem die aufwändige Bearbeitung der Rohscans nicht
erspart. Die Bilder sind am Ende aber ganz hübsch. Wenigstens wenn man
die Negative von Staub, Fusseln und Fettfingern frei hält. Aber das gilt
ja generell.
[Scanner …]{: .image-process-large-photo}
Bis vor Kurzem hatte ich eine D700, eine bezahlbare Nikon mit einen
Sensor im Kleinbildformat. Dies Format, da ich außer mit der PenFT auch
noch mit einer Nikon F80 auf Film fotografiere. Die vorhandenen
Objektive passen an beiden. ;) Allerdings war mir die D700 etwas zu alt,
so dass sie vor kurzer Zeit einer etwas jüngeren D610 gewichen ist.
[Digitalkamera vom Dia]{: .image-process-large-photo}
Unter den Objektiven gibt es auch ein Makro-Objektiv mit 60 mm
Brennweite. Für diese Brennweite gibt es von Nikon ein Set, das über
eine kleine Mattglasscheibe und einen Schlitz für einen Film- bzw.
Diahalter verfügt. Am anderen Ende ist ein Objektivgewinde, das auf das
genannte Objektiv mit 62 mm Gewindedurchmesser aufgeschraubt werden
kann. Mit einem Adapterring kann das Ganze auch an andere Gewinde
angepasst werden. Die dabei veränderten Abstände können ausgeglichen
werden, der vordere Teil mit der Mattscheibe kann verschoben und mit
einer Rändelschraube fixiert werden. Das Set heißt »Nikon ES-2
Filmdigitalisierungsadapter«. Man könnte sowas auch aus schwarzer Pappe
basteln, wozu ich jedoch zu faul war.
In der Regel verarbeite ich damit s/w-Material. Dazu brauche ich sonnige
Tage, da ich zur Ausleuchtung keine künstliche Lichtquelle besitze. Die
Blende des Objektivs wird dabei relativ weit zugemacht - meist auf 11 -
und das Ganze nach Sicht händisch scharfgestellt; der Autofokus
verschluckt sich bei dieser Anordnung. Da das Ganze starr ist, braucht
man sich über längere Belichtungszeiten keine Sorgen zu machen. Damit
fotografiere ich einen 36er Film in ca. 10 Minuten ab. Bei Material von
der PenFT hat man natürlich zwei Negative pro Digitalbild.
[Digitalkamera vom Negativ]{: .image-process-large-photo}
Die Daten von der Kamera bearbeite ich am Rechner weiter. Angefangen mit
geraderücken und schneiden, dann die eigentliche Bildbearbeitung. Nach
dem Invertieren sieht das Bild aus wie ein Papierabzug von 1920. Ich
muss je nach Qualität der Aufnahme hauptsächlich mit Helligkeit und
Kontrast nach Sicht spielen. Und dabei im Hinterkopf behalten, dass mein
Monitor etwas schwammig ist. Im Großen und Ganzen klappt das aber ganz
gut. Das Trägermaterial von s/w-Filmen ist leicht bläulich. Das kann man
bei der Aufnahme schon loswerden, wenn man einen Amber-Farbfilter
dazwischenschaltet.
Natürlich geht das Ganze auch mit Farbmaterial. Das mache ich aber nur
mit Dias, da farbiges Negativmaterial in der Nachbarbeitung für meinen
Geschmack zu aufwändig ist. Selbst wenn man mit einem Hellblau-Filter
das Orange des Trägermaterials schon bei der Aufnahme ausschaltet. Es
gibt wie gesagt Profis, die für nicht allzu üppiges Salär einen
hervorragenden Job machen.
Man kann das machen… Allerdings ist aus meiner Sicht der einzige
wirklich wichtige Grund, altes Material aus der Zeit vor der
Digitalfotografie in die Gegenwart und Zukunft zu retten.
Heutzutage mit einer mechanischen Kamera auf Film zu fotografieren ist
trotz des Hypes, der darum gemacht wird, nicht so richtig sinnvoll. Ich
mache das eigentlich eher aus Spaß an alter Technik. Aus dem gleichen
Grund koche ich auf dem Campingplatz auch auf einem Petroleumkocher und
mache abends Licht und Wärme mit einer Petromaxlampe. Die F80 habe ich
schon länger; sie löste seinerzeit eine Praktica 1000 TL ab; DSLRs waren
mir zu der Zeit noch zu teuer und meine Tochter wollte den Umgang mit
einer SLR lernen.
</div>
</content>
</entry>
<entry>
<title>Analoge Filme digitalisieren (1/2)</title>
<link href="gemini://gemini.lan/gemfeed/2021-12-25-alte_filme_digitalisieren-1.gmi" />
<id>gemini://gemini.lan/gemfeed/2021-12-25-alte_filme_digitalisieren-1.gmi</id>
<updated>2023-11-22T14:40:29+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Date: 2021-12-25 16:00:00</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'>Analoge Filme digitalisieren (1/2)</h1><br />
Published at 2023-11-22T14:40:29+01:00
Alte Negative oder Dias lassen sich mit
speziellen Scannern digitaliseren. Die sind entweder sehr teuer oder
schlecht und brauchen pro Scan oft viele Minuten. Einfacher, schneller
und oft auch günstiger geht es mit einer Digitalkamera sowie einigen
quelloffenen Tools.
Date: 2021-12-25 16:00:00
Modified: 2022-08-22 11:40
Category: fotografie Tags: photo, digitalisierung, archivierung
Slug: analoge-fotos-digitalisieren_1
Author: Reiko Kaps
images/DSC07882.JPG
Zwischen 1985 und 2005 habe ich einige Aktenordner voller Negativfilme
sowie zahlreiche Kisten mit Dias angehäuft. Danach begann bei mir
langsam aber sicher das Zeitalter der digitalen Fotografie. Die alten
Aufnahmen haben aber nicht nur Erinnerungswert für mich, sie gehören
teilweise auch zur Zeitgeschichte. Daher möchte ich diese Aufnahmen
einerseits retten aber auch als digitale Kopie bewahren. Dafür stehen
inzwischen gleich mehrere Möglichkeiten bereit:
Diese Spezial-Geräte sind meist sehr teuer (400 Euro und mehr), stellen
dann aber sehr gute Digitalkopien des analogen Filmmaterials her. Sie
scannen oft nur Negative oder Positive, Auflichtvorlagen beherrschen sie
meist nicht. Und je nach Auflösung kann ein Scan leicht mehrere Minuten
dauern - eher ungünstgig, wenn man viele Aufnahmen digitalisieren will.
Hinter diesem Amazon-Link findet sich ein Modell aus dieser Geräteklasse:
https://www.amazon.de/Plustek-Automatischer-Filmnegative-Drittanbietern-Infrarot-Staub/dp/B07ZXZRR24/
Die Preise dieser Geräte liegen zwischen 50 Euro und 150 Euro. Sie
arbeiten eher wie eine Kamera. Negative oder Dias tasten sie nicht
langwierig zeilenweise ab sondern nehmen das Bild per Kamerasensor in
wenigen Augenblicken auf. Oft besitzen die Geräte zur Voransicht und
Ausrichtung außerdem einen kleinen Bildschirm und lassen sich so auch
ohne Computer bedienen.
Die damit entstandenen digitalen Kopien sind jedoch oft sehr schwammig
und wenig detailreich. Für Internet reichen aber sie aber meist aus. Sie
taugen jedoch nicht für die digitale Langzeitarchivierung oder als
Ausgangspunkt fürs digitale Remastern der Aufnahmen.
Es liegt nahe, das analoge Filmmaterial mit Digitalkameras zu
digitalisieren. Oft sind diese bereits vorhanden, sodass dafür schon mal
keine Extrakosten anfallen. Anders als die genannten Scanner müssen die
Kameras nach der Digitalisierung nicht in den Schrank wandern und auf
den nächsten Einsatz warten. Sie taugen schließlich auch für
herkömmliche Fotografie.
images/DSC07878.JPG
Das 105mm-Makro-Objektiv taugt für viele Einsatzzwecke, sodass sich
Investition meist bezahlt macht.
Aber nicht jede Digitalkamera ist dieser Aufgabe auch gewachsen: Besitzt
das Gerät kein Makro-Objektiv, lassen sich Dias und Negative nicht
format- bzw. sensorfüllend repoduzieren. Außerdem sollte die Kamera
Belichtungszeit, Blende und Sensor-Empfindlichkeit manuell einstellen
können, was das Feld wiederrum verkleinert. Im Netz finden sich auch
Anleitungen, wie man mittels einfacher Aufbauten auch Handys für diese
Aufgaben einsetzen kann.
Hier will ich aber nur berichten, wie ich mit schon älteren digitalen
Spiegelreflexkameras und passenden Objektiven analoge Negativ- und
Diafilme digitalisiere. Andere Geräte oder Methoden streife ich nur oder
habe habe sie praktisch ausgeschlossen, da sie nicht meinen weniger
hohen Qualitätsanforderungen gerecht werden. Oder ich fand sie bereits
in meinen Vorüberlegungen derartige unbrauchbar und unparktikabel, dass
ich sie erst gar nicht ausprobiert habe. Dazu zählen etwa Versuche mit
Kompakt- oder Handy-Kameras.
Zusätzlich zur Kamera braucht man ein Stativ. Es hält die Kamera ruhig
und fixiert ihre Position. Dabei muss es sich nicht um ein spezielles
Repro-Stativ handeln. Bei normalen Dreibein-Stativen ist lediglich die
anfängliche Ausrichtung aufwendiger.
[Befestigung am Tisch…]{: .image-process-large-photo}
Hat man bereits einen Makro-Schlitten oder scheut dessen Anschaffung
nicht, kann man sich auch eine eigene Stativ-Konstruktion bauen. Bei mir
besteht diese aus zwei Regalbretter und mehreren Bohrungen sowie einer
Klemme, um das ganze am Tisch zu fixieren (Laubsägezwinge). Der
Makro-Schlitten wird mit einer handelsüblichen 1/4 Zoll Kamera-Schraube
am Basisbrett meiner Konstruktion befestigt.
images/DSC07880.JPG
Desweiteren nutze ich für Negative und Dias eine Durchlicht-Einheit
eines alten Scanners. Diese dürfte inzwischen gut 20 Jahre alt,
verrichtet aber als Leuchttischchen oder eben als Hintergrundbeleuchtung
für die Reproduktion noch immer ihren Dienst. Je nach Format des
Ausgangsmaterials setze ich fertige Negativ-Schienen oder selbstgebaute
Halter ein, die ich etwa aus Lego-Platten improvisiert habe.
images/DSC07882.JPG
Für die Aufnahmen empfiehlt sich ein Fernauslöser - je nach Modell etwa
per Kabel oder Infrarot. Man vermeidet damit lässtiges Wackeln. Besitz
man nichts dergleichen, kann man mit dem Zeitauslöser der Kamera die
Aufnahme starten.
Am liebsten steuere ich die Kamera vom Notebook per USB-Kabel aus:
Zusätzlich werden die Aufnahmen dabei gleich auf den Computer geladen -
umkopieren von SD-Card entfällt.
Für die Fernsteuerung kann man entweder die vom Hersteller
mitgelieferte Software einsetzen, die aber meist nur für Windows und
MacOS bereitsteht. Nutzt man Linux setzt man auf das
Open-Source-Produkt Entangle, das vergleichbares leistet sowie einige
Extras wie etwa Automatiserung mitbringt.
https://entangle-photo.org/
</div>
</content>
</entry>
<entry>
<title>Einstieg in die Programmiersprache Nim</title>
<link href="gemini://gemini.lan/gemfeed/2021-11-05-starting_with_nim.gmi" />
<id>gemini://gemini.lan/gemfeed/2021-11-05-starting_with_nim.gmi</id>
<updated>2023-11-24T19:16:14+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Date: 2021-11-05 10:48:00</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'>Einstieg in die Programmiersprache Nim</h1><br />
Published at 2023-11-24T19:16:14+01:00
Date: 2021-11-05 10:48:00
Modified: 2021-11-05 10:48:00 Category: Programming Tags: nim, examples,
tutorial Slug: starting-with-nim Author: Reiko Kaps
Die Programmiersprache Nim besitzt eine leicht handhabbare Toolchain und
einen Sprachumfang, der sich etwa an Python orientiert. Beides hilft
nicht nur Programmieranfängern.
Anders als Urgesteine wie C haben jüngere Programmiersprachen wie Go
oder Rust bereits Tools an Bord, mit denen sich der geschriebene
Quellcode schnell und einfach in ausführbare Programme übersetzen
lässt oder mit dem sich Bibliotheken nachladen lassen. Das hilft
besonders Anfängern, die damit schnell zu Ergebnissen kommen.
Auch die Nim-Entwickler gehen diesen Weg - und selbst die Installation
geht dabei flott von der Hand: So lasst sich Nim unter Unix(64 Bit)
über den Befehl:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
downloaden und installieren. Anschließend ergänzt man noch den
Suchpfad in .bashrc oder .zshrc und lädt diese Konfigurationen neu
(source ~/.bashrc). Unter Windows oder auf 32-Bit-Systemen muss man
für die Installation allerdings andere Wege beschreiten, die aber
dokumentiert sind. Anschließend schreibt man folgende Zeilen mit
seinem Lieblings-Editor in eine Datei (helloworld.nim):
echo "Hello, World!"
und ruft auf der Konsole den Befehl nim c helloworld.nim auf und erhält
im selben Verzeichnis ein ausführbares Programm gleichen Namens.
Hallo-Welt-Beispiele sind jedoch etwas schlicht, sodass ich hier gleich
ein längeres Beispiel folgen lasse. Es ist ein kleines Konsolenprogramm,
dass Textzeilen aus einer Datei einliest, per Zufall ein von diesen
Zeilen auswählt und ausgibt. Die Zeilen besitzen einen per Doppelpunkt
abgetrennten Prefix (de, en), sodass man zudem auch mehrsprachige Text
ausgeben kann.
Bibliotheken und eigene Module lädt Nim ähnlich Python über import. Nim
bringt bereits eine Reihe von
Standard-Modulen
mit,
weitere Bibliotheken
lädt man bequem mit dem
Modulemanager nimble
nach.
Variablen deklariert man jedoch etwas anders: Nach dem Schlüsselwort var
folgt der Name sowie der Variablentyp. Weist man anschließend mittels =
der Variable einen Wert zu, kann man den Variablentyp auch offenlassen,
da Nim ihn aus dem Variablenwert ermittelt.
Zeilen die mit einer Raute beginnen interpretiert Nim als Kommentar,
ganze Textblöcke lassen sich in Nim mit den beiden Zeichenfolgen #[**
und **]# auskommentieren.
Funktionen oder Prozeduren definiert man in Nim über das Schlüsselwort
proc.
Wichtige Dinge wie etwa eine Bibliothek um Kommandozeilen-Argumente
auszuwerten hat Nim (ähnlich wie Python) bereits an Bord. Die folgenden
Zeilen illustrieren deren Einsatz:
Nach dem Import der Standard-Bibliothek parseort lässt sich mit der
Funktion declared prüfen, ob überhaupt Kommandozeilen-Parameter
übergeben wurden: Ist das der Fall, wird der Parser eingerichtete und
die Parameter nacheinander ausgewertet. Anders als Python kann Nim
mittels case zwischen mehreren Fällen unterscheiden, was in diesem Falle
sehr günstig und übersichtlich ist.
Alle bisher gezeigten Code-Beispiele befassen sich hingegen nicht direkt
mit der obengenannten Hauptfunktion des Programms. Die folgenden 15
Zeilen sind dafür zuständig.
Während Zeile 1 die Datei “zitate.de.txt” einliest, zerlegt der folgende
Befehl den Text in einzelne Zeilen und speichert das Ergebnis im Array
lines.
Die beiden Befehle in den Zeilen 4 und 5 entstammen der Bibliothek
random: Während randomize() den Zufallsgenerator initialisiert, würfelt
shuffle(lines) die Elemente des Array durcheinander.
Die nachfolgende For-Schleife soll nun das erste Element im Array lines
ausgeben, dessen Prefix dem Wert von lang - also der eingestellen
Sprache entspricht. Dazu überprüft es den String line mittels startsWith
(stammt aus strutils), gibt ihn ggf. aus und setzt count auf 1 - was im
nächsten Durchlauf die Schleife abbricht.
Diese und andere Beispiele findet Ihr in
diesem Github-Repositorium
.
</div>
</content>
</entry>
<entry>
<title>Bloggen mit Pelican</title>
<link href="gemini://gemini.lan/gemfeed/2018-04-09-bloggen-mit-pelican-1.gmi" />
<id>gemini://gemini.lan/gemfeed/2018-04-09-bloggen-mit-pelican-1.gmi</id>
<updated>2023-11-24T23:15:24+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Date: 2018-04-09 16:00</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'>Bloggen mit Pelican</h1><br />
Published at 2023-11-24T23:15:24+01:00
Date: 2018-04-09 16:00
Authors: Reiko Kaps
Category: Web Tags: Software, Web, Python, HowTo
Slug: bloggen-mit-pelican
Static Site Generatoren helfen private Weblogs sicher selbst zu
betreiben. Die Software Pelican gehört dazu und lässt sich leicht
nutzen.
Zugegeben: Ich bin nicht der Hochfrequenz-Blogger. Daher fristet mein
Blog eher ein Schattendarsein und wird von mir selten beäugt. Obwohl
dort kein Wordpress läuft, kann auch dort laufende einfache
PHP-Blogsoftware durchaus ein Einfallstor für Angreifer sein.
Sicherer und wartungsärmer wäre also eine (vollkommen) statische
Webseite. Damit sich das ganze trotzdem gut verwalten lässt, muss etwas
her, was ich bereits in den späten 90er Jahren eingesetzt habe: Ein
Webseiten-Generator ähnlich der alten und längst nicht mehr
weiterentwickelten
WML
Inzwischen gibt es eine ganze Reihe von Static-Site-Generatoren in aller
Herren Sprachen, die ganz ähnliches übernehmen und dank moderner
Web-Techniken wie HTML5 und CSS sogar einfacher arbeiten. Die in Python
geschriebene Software Pelican oder auch das recht neue Ivy gehören zu
dieser Kategorie.
Pelican
generiert aus in Ordnern strukturierten und mit Zusatz-Infos versehenen
Text-Dateien (ReSt, Markdown) einen Website im Stil eines Blogs. Dazu
stellt es einige Commandline-Tools bereit, die beim Schreiben und
Generieren der Seite helfen. Zudem bringt es Funktionen mit, um die
erzeugten Dateien auf dem Webserver oder auch auf Cloud-Diensten
abzulegen.
Die Software generiert zudem RSS-Feeds aus den Blogartikeln und die
Ausgaben lassen sich mit Vorlagen anpassen. Fehlen trotzdem Funktionen
lassen sich diese mit Plugins nachrüsten oder so selbst programmieren.
Für seine Vorlagen verwendet Pelican die unter Python sehr verbreitete
Template-Engine Jinja2, mit der sich bereits sehr vieles ohne eine
einzige Zeile Python-Code bauen lässt. Will man zusätzlich seine
Webseite mit Unterseiten stärker strukturieren, lässt sich auch das mit
Pelican umsetzen. Details zu den Interna von Pelican verrät die
ausführliche Dokumentation.
Nach der Installation von Pelican fragt das Kommando pelican-quickstart
alles nötige für die Einrichtung einer Pelican-Umgebung ab, schreibt
diese in Konfigurationsdateien und erzeugt Skripte für Generierung und
Auslieferung. Wer seine Blog-Texte lieber in Markdown-Notation schreiben
möchte, installiert sich gleich das dafür nötige Python-Modul nach.
Ansonsten erwartet Pelican die Text als reStructuredText, das etwas
komplizierter aber auch mächtiger als die Auszeichnung in
Markdown-Notation ist.
Pelicans Schnelleinrichtung legt zudem die Ordner for die Quell- und die
fertigen HTML-Dateien an (content/ sowie output/). Blog-Artikel legt man
einfach in die oberste Ebene des Verzeichnisses output/, Pelican erzeigt
daraus eine Übersicht samt Vorschautext, Tags und Datum. Braucht man
Webseiten für das Impressum oder Inhalte, die eher dauerhaften Charakter
haben, erstellt man unterhalb von content/ das Verzeichnis pages/ und
plaziert dort seine Dateien:
[Pelicans Verzeichnisstruktur]
Anschließend erweitert man Pelicans Konfig-Datei pelicanconf.py um eine
Eintrag, der folgendem Muster folgt:
Der Eintrag Vita verweist hier auf die Datei /pages/vita.html, die
anderen Einträge auf die Startseite oder externe Adressen. Inhalte
erstellen
Wenn nicht anders konfiguriert, erwartet Pelican seine Quelldateien als
reStructuredText. Ein einfache Vorlage folgt dabei dem Muster
Der Kopf der Datei enthält dabei den Artikel- oder Seitentitel sowie
Angaben zum Erstellungsdatum (:date:), den Tags sowie dem Slug - also
dem Datei- bzw. Basename der HTML-Datei. Weitere Erfahrungen und Details
folgen in einem weiteren Post, der in den kommenden Tage online geht.
</div>
</content>
</entry>
<entry>
<title>E-Science-Tage 2017: Vortrag zu Distributed Research Management</title>
<link href="gemini://gemini.lan/gemfeed/2017-02-21-vortrag-zu-distributed-research-management.gmi" />
<id>gemini://gemini.lan/gemfeed/2017-02-21-vortrag-zu-distributed-research-management.gmi</id>
<updated>2023-11-25T10:07:13+01:00</updated>
<author>
<name>Reiko Kaps aka r31k</name>
<email>r31k@k4p5.de</email>
</author>
<summary>Date: 2017-02-21 07:42 </summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1 style='display: inline'>E-Science-Tage 2017: Vortrag zu Distributed Research Management</h1><br />
Published at 2023-11-25T10:07:13+01:00
Date: 2017-02-21 07:42
Modified: 2022-08-18 13:37
Author: Reiko Kaps
Tags: Software, Research, p2p, blockchain, ipfs, rdm
Slug: e-science-tage-2017-vortrag-zu-distributed-research-management
Category: Research Data
Ich halte am 16. März 2017 auf den E-Science-Tagen an der Uni
Heidelberg einen Vortrag, der ein verteiltes und dezentrales Modell
für den Umgang mit und die Bewahrung von Forschungsdaten skizziert.
Am 16. März halte ich auf den E-Science-Tagen an der Uni Heidelberg
einen Vortrag, in dem ich ein verteiltes und dezentrales Modell für den
Umgang mit und die Bewahrung von Forschungsdaten skizziere. Dabei gehe
ich beispielsweise auf
IPFS
ein, das HTTP als Verbreitungsweg im Internet ablösen will. Es setzt
dabei auf Peer-to-Peer-Techniken und Modelle wie die Blockchain. Es
verspricht zudem Versionierung, eindeutige Zuordnungen und eine
belastbare Infrastruktur, die gegen Ausfälle gewappnet ist. Damit
könnten IPFS oder ähnliche Ansätze Wissenschaftlern helfen, deren
Forschungsergebnisse etwa durch widrige, politische Umstände bedroht
sind: Langwierige und aufwendige Rettungsaktionen, wie man sie gerade in
der USA beobachten kann (vgl.
Data Refuge
), wären mit dieser Infrastruktur unnötig. Folgenden Abstract habe ich
bereits im vergangenen Jahr eingereicht:
Klassisches Forschungsdatenmanagement setzt auf ein Modell, das die
Forschenden eher als Kunden denn als Mitstreiter sieht. Beratung und
Angebote etwa zur Veröffentlichung von Forschungsdaten orientieren sich
an Service-Konzepten, die Informationen zentral verteilen und vorhalten.
Diese Einstellung spiegelt sich auch bei Forschungsdaten-Repositorien,
die Forschungsergebnisse zwar zentral lagern. Sie eignen sich damit zwar
als Schaufenster, aber weniger als Arbeitsplattform für Forschungsdaten.
Zudem sind derartige Forschungsdaten-Repositorien für die dringendsten
Probleme der Forschenden nur unzureichend gerüstet: Dazu zählen die
Sicherung der Urheberschaft, die Wahrung der Unversehrtheit von
veröffentlichten Daten sowie die dauerhafte Verknüpfung mit Metadaten
und Lizenzinformationen. Diese Repositorien können die Zusicherungen nur
innerhalb ihre Systems gewährleisten. Verlassen die veröffentlichten
Daten diese Refugium, besteht die Gefahr, dass Urheberschaft,
Lizenzinformation und anderes verloren gehen.
Jenseits dieses im IT-Jagon genannten Client-Server-Ansatzes existieren
jedoch andere Verfahren, Daten und Dienste im Internet zuverbreiten und
deren Authentizität sicherzustellen. Diese dezentralen Ansätze setzen
auf Blockchain-Verfahren, die die mathematische Grundlage für
Kryptowährungen bilden. Blockchain-Verfahren sichern Transaktionen,
stellen “Einigkeit” unter den beteiligten Knoten her und taugen damit
für den sicheren, vertrauenswürdigen und nachvollziehbaren Austausch
beliebiger Daten – auch Forschungsdaten. So stehen inzwischen
Blockchain-Anwendungen bereit, über die man Dateien dezentral verteilt
(IPFS), Daten strukturiert ablegt (BigchainDB) und untrennbar mit
Metainformationen wie Urheber, Lizenz etc. verbindet (Mediachain/IPDB).
Sie benötigen keine zentrale Instanz, bieten Verschlüsselung, Zugriffs-
sowie Integritätschutz. Jeder kann damit Daten anbieten und abrufen,
aber auch auf dieser Basis eigene Anwendungen entwickeln.
Der Vortrag möchte diese Ansätze vorstellen, Möglichkeiten aufzeigen und
Herausforderungen dieser Techniken nennen.
Mein Vortrag wird etwa 20 Minuten dauern und findet am 16. März 2017 um 15:30 Uhr statt.
Wer sich meine alten Einlassungen noch ansehen möchte:
Mein Paper
, den
gesamten Tagungsband
sowie die
Vortragsfolien
findet Ihr hinter den Links.
</div>
</content>
</entry>
application/xml
This content has been proxied by September (3851b).