summaryrefslogtreecommitdiff
path: root/index.xml
blob: 35b7c60a516340765736a84d4508d384a5e4aae5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>jaseg.de on Home</title>
    <link>http://jaseg.de/</link>
    <description>Recent content in jaseg.de on Home</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>Jan Sebastian Götte</copyright>
    <lastBuildDate>Sun, 29 Jun 2025 23:42:00 +0100</lastBuildDate>
    <atom:link href="http://jaseg.de/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Getting the .ipynb Notebook File Location From a Running Jupyter Lab Notebook</title>
      <link>http://jaseg.de/blog/jupyterlab-notebook-file-oneliner/</link>
      <pubDate>Sun, 29 Jun 2025 23:42:00 +0100</pubDate>
      <guid>http://jaseg.de/blog/jupyterlab-notebook-file-oneliner/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;If you need to get the path of the ipynb file in a running #Jupyter notebook, this one-liner will do the trick. It seems chatgpt is confused, and a bunch of other approaches on the web look fragile and/or unnecessarily complex to me.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>8seg Technical Overview</title>
      <link>http://jaseg.de/blog/8seg/</link>
      <pubDate>Tue, 26 Dec 2023 15:26:00 +0100</pubDate>
      <guid>http://jaseg.de/blog/8seg/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;8seg is a large-scale LED light art installation that displays text on a 1.5 meter high, 30 meter wide 8-segment display made from cheap LED tape.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>KiMesh</title>
      <link>http://jaseg.de/projects/kimesh/</link>
      <pubDate>Wed, 04 Oct 2023 23:42:00 +0200</pubDate>
      <guid>http://jaseg.de/projects/kimesh/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;KiMesh is a KiCad plugin that automatically creates security meshes with two or traces covering an arbitrarily-shaped outline on the board.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Ubiquiti EdgeRouter on Deutsche Telekom GPON Fiber</title>
      <link>http://jaseg.de/blog/telekom-gpon-sfp/</link>
      <pubDate>Mon, 21 Feb 2022 20:00:00 +0100</pubDate>
      <guid>http://jaseg.de/blog/telekom-gpon-sfp/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;Short tutorial on getting a Deutsche Telekom GPON internet connection running using a SFP ONU unit in an Ubiquiti EdgeRouter.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>New Paper on Inertial Hardware Security Modules</title>
      <link>http://jaseg.de/blog/ihsm-worlds-first-diy-hsm/</link>
      <pubDate>Tue, 23 Nov 2021 23:42:20 +0100</pubDate>
      <guid>http://jaseg.de/blog/ihsm-worlds-first-diy-hsm/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;Paper announcement: We have published a paper on how you can DIY a tamper-sensing hardware security module from any single-board computer using a moving tamper-sensing mesh made from cheap PCBs.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Kicad Mesh Plugin</title>
      <link>http://jaseg.de/blog/kicad-mesh-plugin/</link>
      <pubDate>Tue, 18 Aug 2020 13:15:39 +0200</pubDate>
      <guid>http://jaseg.de/blog/kicad-mesh-plugin/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;I wrote a little KiCad plugin that you can use to create security meshes, heaters and other things where you need one or more traces cover the entire surface of a PCB. The plugin supports arbitrary PCB shapes, cutouts, and can route around existing footprints and traces on the PCB.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Private Contact Discovery</title>
      <link>http://jaseg.de/blog/private-contact-discovery/</link>
      <pubDate>Sat, 22 Jun 2019 10:30:00 +0800</pubDate>
      <guid>http://jaseg.de/blog/private-contact-discovery/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;I gave a short introduction into Private Contact Discovery protocols at our university workgroup.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Hardware Security Module Basics</title>
      <link>http://jaseg.de/blog/hsm-basics/</link>
      <pubDate>Fri, 17 May 2019 15:29:20 +0800</pubDate>
      <guid>http://jaseg.de/blog/hsm-basics/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;I gave a short introduction into Hardware Security Modules at our university workgroup, including an overview on interesting research directions.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>How to talk to your microcontroller over serial</title>
      <link>http://jaseg.de/blog/serial-protocols/</link>
      <pubDate>Sat, 19 May 2018 08:09:46 +0200</pubDate>
      <guid>http://jaseg.de/blog/serial-protocols/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;Scroll to the end for the &lt;a class=&#34;reference internal&#34; href=&#34;#conclusion&#34;&gt;TL;DR&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this article I will give an overview on the protocols spoken on serial ports, highlighting common pitfalls. I will&#xA;summarize some points on how to design a serial protocol that is simple to implement and works reliably even under error&#xA;conditions.&lt;/p&gt;&#xA;&lt;p&gt;If you have done low-level microcontroller firmware you will regularly have had to stuff some data up a serial port to&#xA;another microcontroller or to a computer. In the age of USB, an old-school serial port is still the simplest and&#xA;quickest way to get communication to a control computer up and running. Integrating a ten thousand-line USB stack into&#xA;your firmware and writing the necessary low-level drivers on the host side might take days. Poking a few registers to&#xA;set up your UART to talk to an external hardware USB to serial converter is a matter of minutes.&lt;/p&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Thor&#39;s Hammer</title>
      <link>http://jaseg.de/blog/thors-hammer/</link>
      <pubDate>Thu, 03 May 2018 11:59:37 +0200</pubDate>
      <guid>http://jaseg.de/blog/thors-hammer/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;In case you were having an inferiority complex because your friends&#39; IBM Model M keyboards are so much louder than the&#xA;shitty rubber dome freebie you got with your pc... Here&#39;s the solution: Thor&#39;s Hammer, a simple typing cadence enhancer&#xA;for &lt;a class=&#34;reference external&#34; href=&#34;https://en.wikipedia.org/wiki/PS/2_port&#34;&gt;PS/2&lt;/a&gt; keyboards.&lt;/p&gt;&#xA;&lt;figure data-pagefind-ignore&gt;&#xA;    &lt;video controls loop&gt;&#xA;        &lt;source src=&#34;video/thors_hammer.mov&#34; type=&#34;video/h264&#34;&gt;&#xA;        &lt;source src=&#34;video/thors_hammer.webm&#34; type=&#34;video/webm&#34;&gt;&#xA;        Your browser does not support the HTML5 video tag.&#xA;    &lt;/video&gt;&#xA;    &lt;figcaption&gt;A demonstration of the completed project.&#xA;&#xA;        &lt;a href=&#34;video/thors_hammer.mov&#34;&gt;h264 download&lt;/a&gt; /&#xA;        &lt;a href=&#34;video/thors_hammer.webm&#34;&gt;webm download&lt;/a&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;p&gt;The connects to the keyboard&#39;s PS/2 clock line and briefly actuates a large solenoid on each key press. An interesting&#xA;fact about PS/2 is that the clock line is only active as long as either the host computer or the input device actually&#xA;want to send data. In case of a keyboard that&#39;s the case when a key is pressed or when the host changes the keyboard&#39;s&#xA;LED state, otherwise the clock line is silent. We ignore the LED activity for now as it&#39;s generally coupled to key&#xA;presses. By just triggering an NE555 configured as astable flipflop we can stretch each train of clock pulses to a&#xA;pulse a few tens of milliseconds long that is enough to actuate the solenoid.&lt;/p&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>32-Channel LED tape driver</title>
      <link>http://jaseg.de/blog/multichannel-led-driver/</link>
      <pubDate>Wed, 02 May 2018 11:31:14 +0200</pubDate>
      <guid>http://jaseg.de/blog/multichannel-led-driver/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;Together, a friend and I outfitted the small staircase at Berlin&#39;s Chaos Computer Club with nice, shiny RGB-WW LED tape for ambient lighting. For this installation, I made a 32-channel LED driver that achieves high dynamic range on all 32 channels using a cheap microcontroller by using Binary Code Modulation.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Wifi Led Driver</title>
      <link>http://jaseg.de/blog/wifi-led-driver/</link>
      <pubDate>Wed, 02 May 2018 11:31:03 +0200</pubDate>
      <guid>http://jaseg.de/blog/wifi-led-driver/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;After the &lt;a href=&#34;#system-message-1&#34;&gt;&lt;span class=&#34;problematic&#34; id=&#34;problematic-1&#34;&gt;`multichannel LED driver`_&lt;/span&gt;&lt;/a&gt; was completed, I was just getting used to controlling LEDs at 14-bit resolution. I liked the board we designed in this project, but at 32 channels it was a bit large for most use cases. Sometimes I just want to pop a piece of LED tape or two somewhere, but I don&#39;t need a full 32 channels of control. I ended up thinking that a smaller version of the 32-channel driver that didn&#39;t require a separate control computer would be handy. So I sat down and designed a variant of the design with only 8 channels instead of 32 and an on-board &lt;a href=&#34;#system-message-2&#34;&gt;&lt;span class=&#34;problematic&#34; id=&#34;problematic-2&#34;&gt;ESP8266_&lt;/span&gt;&lt;/a&gt; module instead of the &lt;a href=&#34;#system-message-3&#34;&gt;&lt;span class=&#34;problematic&#34; id=&#34;problematic-3&#34;&gt;RS485_&lt;/span&gt;&lt;/a&gt; transceiver for WiFi connectivity.&lt;/p&gt;&#xA;&lt;div class=&#34;system-messages section&#34;&gt;&#xA;&lt;h2&gt;Docutils System Messages&lt;/h2&gt;&#xA;&lt;div class=&#34;system-message&#34; id=&#34;system-message-1&#34;&gt;&#xA;&lt;p class=&#34;system-message-title&#34;&gt;System Message: ERROR/3 (&lt;tt class=&#34;docutils&#34;&gt;&amp;lt;stdin&amp;gt;&lt;/tt&gt;, line 1); &lt;em&gt;&lt;a href=&#34;#problematic-1&#34;&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;Unknown target name: &amp;quot;multichannel led driver&amp;quot;.&lt;/div&gt;&#xA;&lt;div class=&#34;system-message&#34; id=&#34;system-message-2&#34;&gt;&#xA;&lt;p class=&#34;system-message-title&#34;&gt;System Message: ERROR/3 (&lt;tt class=&#34;docutils&#34;&gt;&amp;lt;stdin&amp;gt;&lt;/tt&gt;, line 1); &lt;em&gt;&lt;a href=&#34;#problematic-2&#34;&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;Unknown target name: &amp;quot;esp8266&amp;quot;.&lt;/div&gt;&#xA;&lt;div class=&#34;system-message&#34; id=&#34;system-message-3&#34;&gt;&#xA;&lt;p class=&#34;system-message-title&#34;&gt;System Message: ERROR/3 (&lt;tt class=&#34;docutils&#34;&gt;&amp;lt;stdin&amp;gt;&lt;/tt&gt;, line 1); &lt;em&gt;&lt;a href=&#34;#problematic-3&#34;&gt;backlink&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;Unknown target name: &amp;quot;rs485&amp;quot;.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>LED Characterization</title>
      <link>http://jaseg.de/blog/led-characterization/</link>
      <pubDate>Wed, 02 May 2018 11:18:38 +0200</pubDate>
      <guid>http://jaseg.de/blog/led-characterization/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;section&#34; id=&#34;preface&#34;&gt;&#xA;&lt;h2&gt;Preface&lt;/h2&gt;&#xA;&lt;p&gt;Recently, I have been working on a &lt;a class=&#34;reference external&#34; href=&#34;http://jaseg.de/blog/wifi-led-driver/&#34;&gt;small driver&lt;/a&gt; for ambient lighting using 12V LED strips like you can get&#xA;inexpensively from China. I wanted to be able to just throw one of these somewhere, stick down some LED tape, hook it up&#xA;to a small transformer and be able to control it through Wifi. When I was writing the firmware, I noticed that when&#xA;fading between different colors, the colors look &lt;em&gt;all wrong&lt;/em&gt;! This observation led me down a rabbit hole of color&#xA;perception and LED peculiarities.&lt;/p&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>8seg</title>
      <link>http://jaseg.de/projects/8seg/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/8seg/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;8seg is an experimental textual display. It is made from a 45m by 1.5m large lacework banner that can be put up in a variety of spaces, conforming to the space&#39;s size and shape through bending and folding.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>About jaseg</title>
      <link>http://jaseg.de/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/about/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;section&#34; id=&#34;about&#34;&gt;&#xA;&lt;h2&gt;About&lt;/h2&gt;&#xA;&lt;p&gt;Hej, I&#39;m Jan, or jaseg. At the moment I&#39;m doing a PhD (Dr.-Ing.) at TU Darmstadt in Computer Science, specializing on&#xA;Hardware Security. This is my personal website where I publish things that I find interesting.&lt;/p&gt;&#xA;&lt;p&gt;I self-host my code at &lt;a class=&#34;reference external&#34; href=&#34;https://git.jaseg.de/&#34;&gt;git.jaseg.de&lt;/a&gt;, but I am also on &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/jaseg&#34;&gt;github&lt;/a&gt;&#xA;and on &lt;a class=&#34;reference external&#34; href=&#34;https://gitlab.com/neinseg&#34;&gt;gitlab&lt;/a&gt;. I use github for issue tracking for some of my projects such as&#xA;&lt;a class=&#34;reference external&#34; href=&#34;https://github.com/jaseg/gerbolyze&#34;&gt;gerbolyze&lt;/a&gt; and &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/jaseg/python-mpv&#34;&gt;python-mpv&lt;/a&gt;. I maintain&#xA;the &lt;a class=&#34;reference external&#34; href=&#34;https://pypi.org/project/python-mpv/&#34;&gt;python-mpv&lt;/a&gt; and &lt;a class=&#34;reference external&#34; href=&#34;https://pypi.org/project/gerbolyze/&#34;&gt;gerbolyze&lt;/a&gt; python&#xA;packages on PyPI. Release tags on these two repositories are signed with the release signing key found &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/jaseg.gpg&#34;&gt;on github&lt;/a&gt; and below.&lt;/p&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Gerbolyze</title>
      <link>http://jaseg.de/projects/gerbolyze/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/gerbolyze/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;Gerbolyze is a tool that allows the modification of Gerber PCB artwork with a vector graphics editor like Inkscape. Gerbolyze directly converts between SVG and Gerber, and accurately reproduces details that other tools can not.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Gerbonara</title>
      <link>http://jaseg.de/projects/gerbonara/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/gerbonara/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;Gerbonara is a user-friendly, powerful tool for reading, writing, modification and rendering of Gerber PCB artwork from the command line or from Python code. Gerbonara supports the Gerber dialects of all industry-standard EDA tools.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Impressum</title>
      <link>http://jaseg.de/imprint/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/imprint/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;section&#34; id=&#34;impressum&#34;&gt;&#xA;&lt;h2&gt;Impressum&lt;/h2&gt;&#xA;&lt;p&gt;&#xA;Sebastian Götte&lt;br/&gt;&#xA;c/o Praxis Dr. Götte&lt;br/&gt;&#xA;Krankenhausstr. 1a&lt;br/&gt;&#xA;54634 Bitburg&lt;br/&gt;&#xA;imprint@jaseg.net&#xA;&lt;/p&gt;&#xA;&#xA;Inhaltlich Verantwortlicher gem. § 55 II RStV: Sebastian Götte (Anschrift s.o.)&lt;/div&gt;&#xA;&lt;div class=&#34;section&#34; id=&#34;lizenz-dieser-seite&#34;&gt;&#xA;&lt;h2&gt;Lizenz dieser Seite&lt;/h2&gt;&#xA;Dieses Werk ist lizenziert unter einer&#xA;&lt;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;&gt;&#xA;    Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International&#xA;    Lizenz (CC-BY-NC-SA)&#xA;&lt;/a&gt;.&lt;br/&gt;&#xA;&lt;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;&gt;&#xA;    &lt;img alt=&#34;Creative Commons Lizenzvertrag&#34; style=&#34;border-width:0&#34;&#xA;         src=&#34;https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png&#34; data-pagefind-ignore/&gt;&#xA;&lt;/a&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;section&#34; id=&#34;haftungsbeschrankung-fur-inhalte-der-website&#34;&gt;&#xA;&lt;h2&gt;Haftungsbeschränkung für Inhalte der Website&lt;/h2&gt;&#xA;&lt;p&gt;Gemäß § 7 Abs. 1 TMG ist der Verantwortliche der Website i. S. v. § 5 TMG für eigene Informationen, die er zur Nutzung&#xA;bereithält, nach den allgemeinen Gesetzen verantwortlich.&lt;/p&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>lolcat-c</title>
      <link>http://jaseg.de/projects/lolcat-c/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/lolcat-c/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;lolcat-c is a small, high-performance re-implementation of the &lt;a class=&#34;reference external&#34; href=&#34;https://github.com/busyloop/lolcat&#34;&gt;lolcat&lt;/a&gt; rainbow cat utility. lolcat-c is meant as a lolcat that you can actually use in production. It is fast, not slowing down whatever you pipe through it, and it robustly handles real-world terminal output including escape sequences.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>python-mpv</title>
      <link>http://jaseg.de/projects/python-mpv/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/python-mpv/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;python-mpv is a small, ctypes-based Python library wrapping the libmpv media player library. Despite its small size and simple API, python-mpv allows advanced control over libmpv and beyond simple remote control of mpv can be used to embed mpv in OpenGL, Qt, and GTK-based Python applications.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>svg-flatten</title>
      <link>http://jaseg.de/projects/svg-flatten/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/svg-flatten/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;svg-flatten is a command-line utility that performs vector occlusion and clipping on SVG files, producing a flattened SVG file without overlapping elements, without changing what the file looks like. svg-flatten is used as a part of gerbolyze.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>wsdiff</title>
      <link>http://jaseg.de/projects/wsdiff/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://jaseg.de/projects/wsdiff/</guid>
      <description>&lt;div class=&#34;document&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;wsdiff is a command-line utility that produces self-contained, syntax-highlighted, HTML-formatted diffs that support both unified and side-by-side diffs from a single source file using nothing but CSS magic.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>