<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
  <id>https://jumplink.eu/de/blog/feed.xml</id>
  <title>Pascal Garber – Logbuch</title>
  <updated>2026-10-30T00:00:00Z</updated>
  <link rel="self" type="application/atom+xml" href="https://jumplink.eu/de/blog/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://jumplink.eu/de/blog/"/>
  <author>
    <name>Pascal Garber</name>
    <uri>https://jumplink.eu/</uri>
  </author>
  <entry>
    <id>https://jumplink.eu/de/blog/new-site/</id>
    <title>Ein neues jumplink.eu mit neuem Look</title>
    <link rel="alternate" href="https://jumplink.eu/de/blog/new-site/"/>
    <published>2026-10-30T00:00:00Z</published>
    <updated>2026-10-30T00:00:00Z</updated>
    <summary>Zeit für ein Redesign. Mehr Farbe, mehr Leben und oben auf jeder Seite der Blick vom Cuxhavener Deich.</summary>
    <content type="html">&lt;p&gt;Es war mal wieder Zeit für ein Redesign. Das alte Design war mir zu grau, zu textlastig und nicht mehr aktuell:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://jumplink.eu/blog/2026/new-site-old.webp&quot; alt=&quot;Die alte Seite: ein grauer, einspaltiger Lebenslauf mit Foto und Pixelschrift&quot; loading=&quot;lazy&quot;&gt;&lt;/figure&gt;
&lt;h3&gt;Der Look&lt;/h3&gt;
&lt;p&gt;Vom Pixelart-Look wollte ich mich nicht trennen, aber ich wollte mehr Farbe und Leben in die Seite bringen. Ich lebe in Cuxhaven, deshalb steht oben auf jeder Seite der Blick vom Deich: Himmel, Meer und am Horizont die Kugelbake, das Wahrzeichen der Stadt. Ist dein System auf den dunklen Modus gestellt, ist es Abend mit Mond und Sternen, sonst Tag.&lt;/p&gt;
&lt;p&gt;Die Szene bewegt sich. Die Wellen laufen, tagsüber ziehen Containerschiffe, Kutter und Möwen vorbei, nachts Sternschnuppen und Flugzeuge. Wer in seinem System weniger Bewegung eingestellt hat, sieht stattdessen ein ruhiges Standbild.&lt;/p&gt;
&lt;p&gt;Auf der Startseite stehe ich selbst als Pixelfigur vor dem Wasser. Die Figur ist mit KI entstanden, aber lokal auf meinem eigenen Rechner: mit ComfyUI, dem Modell FLUX.2 Klein 4B und der LoRA &lt;code&gt;pixel-art-sprite_limbicnation&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sonst bleibt die Seite ruhig: Text steht frei auf dem Hintergrund, fast ohne Kästen, gesetzt in Adwaita Sans, der Schrift von GNOME. Eine Pixelschrift gibt es nur noch für meinen Namen im Himmel. Ein paar Begriffe habe ich mir aus den Rollenspielen geliehen, die ich mag: Im Lebenslauf stehen Quests und Gegenstände, die Fähigkeiten bilden einen kleinen Fähigkeitenbaum, und der Blog heißt Logbuch.&lt;/p&gt;
&lt;p&gt;Übrigens, ein kleiner Hinweis: Wer auf den Mond oder die Sonne klickt, wechselt zwischen Tag und Nacht. Vielleicht kommen mit der Zeit noch ein paar weitere kleine Spielereien dazu. :)&lt;/p&gt;
&lt;p&gt;Die Seite setzt keine Cookies, hat kein Tracking und lädt nichts von fremden Servern. Die alte Seite bleibt im Repository unter dem Tag &lt;code&gt;v2-riba&lt;/code&gt; erhalten.&lt;/p&gt;</content>
    <category term="Website"/>
    <category term="Pixelart"/>
  </entry>
  <entry>
    <id>https://jumplink.eu/de/blog/learn6502/</id>
    <title>Learn 6502 Assembly als GNOME-App</title>
    <link rel="alternate" href="https://jumplink.eu/de/blog/learn6502/"/>
    <published>2026-10-29T00:00:00Z</published>
    <updated>2026-10-29T00:00:00Z</updated>
    <summary>Learn 6502 Assembly ist eine GNOME-App mit Tutorial, Editor, Debugger und virtuellem Display, basierend auf Nick Morgans easy6502.</summary>
    <content type="html">&lt;p&gt;Der 6502 ist der Prozessor von Commodore 64, NES und Apple II. Nick Morgans &lt;a href=&quot;https://github.com/skilldrick/easy6502&quot;&gt;easy6502&lt;/a&gt; ist ein Web-Tutorial, das seine Assemblersprache Schritt für Schritt erklärt. Daraus habe ich eine native GNOME-App gemacht: &lt;strong&gt;Learn 6502 Assembly&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Das steckt drin:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Ein interaktives Tutorial&lt;/strong&gt;, das die Kernkonzepte durchgeht.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein Code-Editor&lt;/strong&gt; mit Syntaxhervorhebung.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein Assembler und ein Debugger&lt;/strong&gt;, die Register, Flags und Speicher zeigen, während der Code läuft.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein virtuelles Display&lt;/strong&gt;, auf dem man das Ergebnis sieht und mit dem sich kleine Spiele und Grafiken bauen lassen.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Die App ist in TypeScript mit GJS und libadwaita geschrieben und wird mit &lt;a href=&quot;https://gjsify.org/&quot;&gt;gjsify&lt;/a&gt; gebaut. Das Repository enthält mehr als die Desktop-App: Assembler, Simulator und Disassembler stecken in einem eigenen Paket, &lt;code&gt;@learn6502/core&lt;/code&gt;, und derselbe Code treibt auch eine Web-Version und eine Android-App an. Tutorial-Inhalte und Übersetzungen sind ebenfalls eigene Pakete, übersetzt wird auf Weblate.&lt;/p&gt;
&lt;p&gt;Die App gibt es auf &lt;a href=&quot;https://flathub.org/apps/eu.jumplink.Learn6502&quot;&gt;Flathub&lt;/a&gt;. Der Code steht unter GPL-3.0, der Tutorialtext unter CC BY 4.0, wie im Original.&lt;/p&gt;</content>
    <category term="GNOME"/>
    <category term="gjsify"/>
  </entry>
  <entry>
    <id>https://jumplink.eu/de/blog/why-gjsify/</id>
    <title>Warum gjsify</title>
    <link rel="alternate" href="https://jumplink.eu/de/blog/why-gjsify/"/>
    <published>2026-10-28T00:00:00Z</published>
    <updated>2026-10-28T00:00:00Z</updated>
    <summary>gjsify bringt die Standard-APIs von Node.js und dem Web nach GJS, damit TypeScript-Apps und npm-Pakete nativ auf GNOME laufen.</summary>
    <content type="html">&lt;p&gt;GNOME-Apps lassen sich in JavaScript schreiben. Die Laufzeit heißt GJS und basiert auf SpiderMonkey. GJS ist aber weder Node.js noch ein Browser: Es gibt kein &lt;code&gt;node:fs&lt;/code&gt;, kein &lt;code&gt;fetch&lt;/code&gt;, kein &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; und kein npm-Ökosystem. Viele Bibliotheken, ob HTTP-Client, Game-Engine oder Krypto-Bibliothek, setzen APIs voraus, die GJS nicht hat.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gjsify.org/&quot;&gt;gjsify&lt;/a&gt; schließt diese Lücke. Es baut die Node.js-, Web- und DOM-APIs auf GNOMEs eigenen Bibliotheken nach:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Im Code&lt;/th&gt;&lt;th&gt;gjsify setzt es um auf&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;node:fs&lt;/code&gt;, &lt;code&gt;node:net&lt;/code&gt;, &lt;code&gt;node:crypto&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Gio, GLib&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;fetch&lt;/code&gt;, &lt;code&gt;WebSocket&lt;/code&gt;, &lt;code&gt;XMLHttpRequest&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Soup 3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; 2D und WebGL&lt;/td&gt;&lt;td&gt;Cairo, Gtk.GLArea&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WebRTC, WebAudio, &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;GStreamer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;node:sqlite&lt;/code&gt;&lt;/td&gt;&lt;td&gt;libsqlite3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Damit stehen die Standard-APIs in GJS zur Verfügung. Bibliotheken, die für Node.js oder den Browser geschrieben wurden, laufen jetzt direkt unter GJS, ohne Browser-Engine und ohne Node.js-Laufzeit. Es gibt keinen Zwischenserver, kein mitgeliefertes Chromium und keinen Aufruf von Node. Heraus kommt eine echte GTK-4- und Adwaita-App, die sich als Flatpak ausliefern lässt und trotzdem die Sprache der übrigen JavaScript-Welt spricht.&lt;/p&gt;
&lt;h3&gt;Und andersherum&lt;/h3&gt;
&lt;p&gt;Wer lieber mit Node.js oder Bun arbeitet, kann das weiter tun. Dafür habe ich auch den umgekehrten Weg gebaut: Die GJS-APIs, also GTK, Adwaita und alles andere, was GObject Introspection anbietet, stehen auch unter diesen Laufzeiten zur Verfügung. So laufen alle nativen APIs unter allen Laufzeiten.&lt;/p&gt;
&lt;p&gt;Und sie verhalten sich dort gleich. Das stelle ich mit Tests sicher: Dieselben Tests prüfen die Node.js-APIs, die Web-APIs, die GObject-Introspection-APIs und die GJS-Laufzeit-APIs auf jeder Laufzeit, und das Ergebnis muss überall genau dasselbe sein. Deshalb lässt sich die Laufzeit während der Entwicklung einfach wechseln, ohne den Code anzufassen.&lt;/p&gt;
&lt;p&gt;Das öffnet auch andere Systeme: Mit gjsify lassen sich GJS-Apps für macOS und Windows ausliefern, als &lt;code&gt;.app&lt;/code&gt; und &lt;code&gt;.dmg&lt;/code&gt; beziehungsweise als Programmordner und &lt;code&gt;.msi&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Was ich davon wollte&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Zuerst nativ auf GNOME.&lt;/strong&gt; GJS ist das Hauptziel.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Das Ökosystem, unverändert.&lt;/strong&gt; Der Test ist, ob npm-Pakete so laufen, wie sie sind. Die Game-Engine Excalibur.js, WebTorrent, socket.io, three.js, axios und das Anthropic-MCP-SDK laufen über gjsify auf GJS, geprüft mit ihren eigenen Upstream-Tests.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ein Quelltext, mehrere Laufzeiten.&lt;/strong&gt; GJS, Node.js, Bun, der Browser und NativeScript. Jedes Paket gibt an, welche davon es erreicht, und der Build wählt die passende Implementierung.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Kein Node.js nötig.&lt;/strong&gt; Installieren, Bauen, Starten, Testen, Veröffentlichen und der Flatpak-Schritt laufen auf GJS selbst.&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Warum ich meine Apps so baue&lt;/h3&gt;
&lt;p&gt;TypeScript, das Web und sein Werkzeug kenne ich gut, und ich will GNOME-Apps schreiben, ohne das zu verlassen. &lt;a href=&quot;https://github.com/gjsify/ts-for-gir&quot;&gt;ts-for-gir&lt;/a&gt; liefert mir Typen für GTK und jede andere introspektierbare Bibliothek, gjsify die APIs und die Werkzeugkette. Meine eigenen Apps wie &lt;a href=&quot;https://jumplink.eu/beifahrer/&quot;&gt;Beifahrer&lt;/a&gt;, &lt;a href=&quot;https://jumplink.eu/steuererklaerung/&quot;&gt;Steuererklärung&lt;/a&gt; und &lt;a href=&quot;https://flathub.org/apps/eu.jumplink.Learn6502&quot;&gt;Learn 6502 Assembly&lt;/a&gt; sind der erste Test: Fehlt etwas, behebe ich es in gjsify, statt es in der App zu umgehen.&lt;/p&gt;
&lt;p&gt;Der Code liegt auf &lt;a href=&quot;https://github.com/gjsify/gjsify&quot;&gt;GitHub&lt;/a&gt;, die Dokumentation auf &lt;a href=&quot;https://gjsify.org/gjsify/&quot;&gt;gjsify.org&lt;/a&gt;.&lt;/p&gt;</content>
    <category term="gjsify"/>
    <category term="GNOME"/>
  </entry>
</feed>