summaryrefslogtreecommitdiff
path: root/blog/index.html
diff options
context:
space:
mode:
authorjaseg <git@jaseg.de>2025-06-30 15:37:11 +0200
committerjaseg <git@jaseg.de>2025-06-30 15:37:11 +0200
commit754e3c8c02c249dfb328d3f37ed96e6aa6b8d620 (patch)
tree726a284ccae80d91403e2b433788d1fb8d29782a /blog/index.html
parent16655c00e0a84f6bfe58870c918fbfc016fe58ec (diff)
parent458a5fdfc598517b9fbddd02d3e1ae7cc70ceb9d (diff)
downloadblog-754e3c8c02c249dfb328d3f37ed96e6aa6b8d620.tar.gz
blog-754e3c8c02c249dfb328d3f37ed96e6aa6b8d620.tar.bz2
blog-754e3c8c02c249dfb328d3f37ed96e6aa6b8d620.zip
deploy.py auto-commit
Diffstat (limited to 'blog/index.html')
-rw-r--r--blog/index.html243
1 files changed, 243 insertions, 0 deletions
diff --git a/blog/index.html b/blog/index.html
new file mode 100644
index 0000000..c48040c
--- /dev/null
+++ b/blog/index.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html>
+<html><head>
+ <meta charset="utf-8">
+ <title>Blog | Home</title>
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="color-scheme" content="dark light">
+ <link rel="stylesheet" href="/style.css">
+</head>
+<body><nav>
+ <div class="internal">
+
+ <a href="/" title="Home">Home</a>
+ <a href="/blog/" title="Blog" class="active">Blog</a>
+ <a href="/projects/" title="Projects">Projects</a>
+ <a href="/about/" title="About">About</a>
+ </div>
+ <div class="search">
+ <div id="search"></div>
+ </div>
+ <div class="external">
+ <a href="https://git.jaseg.de/" title="cgit">cgit</a>
+ <a href="https://github.com/jaseg" title="Github">Github</a>
+ <a href="https://gitlab.com/neinseg" title="Gitlab">Gitlab</a>
+ <a href="https://chaos.social/@jaseg" title="Mastodon">Mastodon</a>
+ </span>
+</nav>
+
+ <header>
+ <h1>Blog</h1>
+<ul class="breadcrumbs">
+ <li><a href="/">jaseg.de</a></li><li><a href="/blog/">Blog</a></li>
+</ul>
+
+ </header>
+ <main class="cards">
+ <div class="card"><h3><a href="/blog/jupyterlab-notebook-file-oneliner/">Getting the .ipynb Notebook File Location From a Running Jupyter Lab Notebook</a></h3><strong>2025-06-29</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>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.</p>
+</div>
+ <a href="http://jaseg.de/blog/jupyterlab-notebook-file-oneliner/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/8seg/">8seg Technical Overview</a></h3><strong>2023-12-26</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>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.</p>
+</div>
+ <a href="http://jaseg.de/blog/8seg/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/telekom-gpon-sfp/">Ubiquiti EdgeRouter on Deutsche Telekom GPON Fiber</a></h3><strong>2022-02-21</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>Short tutorial on getting a Deutsche Telekom GPON internet connection running using a SFP ONU unit in an Ubiquiti EdgeRouter.</p>
+</div>
+ <a href="http://jaseg.de/blog/telekom-gpon-sfp/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/ihsm-worlds-first-diy-hsm/">New Paper on Inertial Hardware Security Modules</a></h3><strong>2021-11-23</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>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.</p>
+</div>
+ <a href="http://jaseg.de/blog/ihsm-worlds-first-diy-hsm/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/kicad-mesh-plugin/">Kicad Mesh Plugin</a></h3><strong>2020-08-18</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>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.</p>
+</div>
+ <a href="http://jaseg.de/blog/kicad-mesh-plugin/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/private-contact-discovery/">Private Contact Discovery</a></h3><strong>2019-06-22</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>I gave a short introduction into Private Contact Discovery protocols at our university workgroup.</p>
+</div>
+ <a href="http://jaseg.de/blog/private-contact-discovery/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/hsm-basics/">Hardware Security Module Basics</a></h3><strong>2019-05-17</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>I gave a short introduction into Hardware Security Modules at our university workgroup, including an overview on interesting research directions.</p>
+</div>
+ <a href="http://jaseg.de/blog/hsm-basics/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/serial-protocols/">How to talk to your microcontroller over serial</a></h3><strong>2018-05-19</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>Scroll to the end for the <a class="reference internal" href="#conclusion">TL;DR</a>.</p>
+<p>In this article I will give an overview on the protocols spoken on serial ports, highlighting common pitfalls. I will
+summarize some points on how to design a serial protocol that is simple to implement and works reliably even under error
+conditions.</p>
+<p>If you have done low-level microcontroller firmware you will regularly have had to stuff some data up a serial port to
+another microcontroller or to a computer. In the age of USB, an old-school serial port is still the simplest and
+quickest way to get communication to a control computer up and running. Integrating a ten thousand-line USB stack into
+your firmware and writing the necessary low-level drivers on the host side might take days. Poking a few registers to
+set up your UART to talk to an external hardware USB to serial converter is a matter of minutes.</p></div>
+ <a href="http://jaseg.de/blog/serial-protocols/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/thors-hammer/">Thor&#39;s Hammer</a></h3><strong>2018-05-03</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>In case you were having an inferiority complex because your friends' IBM Model M keyboards are so much louder than the
+shitty rubber dome freebie you got with your pc... Here's the solution: Thor's Hammer, a simple typing cadence enhancer
+for <a class="reference external" href="https://en.wikipedia.org/wiki/PS/2_port">PS/2</a> keyboards.</p>
+<figure data-pagefind-ignore>
+ <video controls loop>
+ <source src="video/thors_hammer.mov" type="video/h264">
+ <source src="video/thors_hammer.webm" type="video/webm">
+ Your browser does not support the HTML5 video tag.
+ </video>
+ <figcaption>A demonstration of the completed project.
+
+ <a href="video/thors_hammer.mov">h264 download</a> /
+ <a href="video/thors_hammer.webm">webm download</a>
+ </figcaption>
+</figure><p>The connects to the keyboard's PS/2 clock line and briefly actuates a large solenoid on each key press. An interesting
+fact about PS/2 is that the clock line is only active as long as either the host computer or the input device actually
+want to send data. In case of a keyboard that's the case when a key is pressed or when the host changes the keyboard's
+LED state, otherwise the clock line is silent. We ignore the LED activity for now as it's generally coupled to key
+presses. By just triggering an NE555 configured as astable flipflop we can stretch each train of clock pulses to a
+pulse a few tens of milliseconds long that is enough to actuate the solenoid.</p></div>
+ <a href="http://jaseg.de/blog/thors-hammer/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/multichannel-led-driver/">32-Channel LED tape driver</a></h3><strong>2018-05-02</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>Together, a friend and I outfitted the small staircase at Berlin'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.</p>
+</div>
+ <a href="http://jaseg.de/blog/multichannel-led-driver/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/wifi-led-driver/">Wifi Led Driver</a></h3><strong>2018-05-02</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<p>After the <a href="#system-message-1"><span class="problematic" id="problematic-1">`multichannel LED driver`_</span></a> 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't need a full 32 channels of control. I ended up thinking that a smaller version of the 32-channel driver that didn'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 <a href="#system-message-2"><span class="problematic" id="problematic-2">ESP8266_</span></a> module instead of the <a href="#system-message-3"><span class="problematic" id="problematic-3">RS485_</span></a> transceiver for WiFi connectivity.</p>
+<div class="system-messages section">
+<h2>Docutils System Messages</h2>
+<div class="system-message" id="system-message-1">
+<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">&lt;stdin&gt;</tt>, line 1); <em><a href="#problematic-1">backlink</a></em></p>
+Unknown target name: &quot;multichannel led driver&quot;.</div>
+<div class="system-message" id="system-message-2">
+<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">&lt;stdin&gt;</tt>, line 1); <em><a href="#problematic-2">backlink</a></em></p>
+Unknown target name: &quot;esp8266&quot;.</div>
+<div class="system-message" id="system-message-3">
+<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">&lt;stdin&gt;</tt>, line 1); <em><a href="#problematic-3">backlink</a></em></p>
+Unknown target name: &quot;rs485&quot;.</div>
+</div>
+</div>
+ <a href="http://jaseg.de/blog/wifi-led-driver/">Read more</a>
+ </div>
+</div>
+
+ <div class="card"><h3><a href="/blog/led-characterization/">LED Characterization</a></h3><strong>2018-05-02</strong>
+
+ <div class="summary">
+ <div class="document">
+
+
+<div class="section" id="preface">
+<h2>Preface</h2>
+<p>Recently, I have been working on a <a class="reference external" href="http://jaseg.de/blog/wifi-led-driver/">small driver</a> for ambient lighting using 12V LED strips like you can get
+inexpensively from China. I wanted to be able to just throw one of these somewhere, stick down some LED tape, hook it up
+to a small transformer and be able to control it through Wifi. When I was writing the firmware, I noticed that when
+fading between different colors, the colors look <em>all wrong</em>! This observation led me down a rabbit hole of color
+perception and LED peculiarities.</p></div>
+ <a href="http://jaseg.de/blog/led-characterization/">Read more</a>
+ </div>
+</div>
+
+ </main><footer>
+ Copyright © 2025 Jan Sebastian Götte
+ / <a href="/about/">About</a>
+ / <a href="/imprint/">Imprint</a>
+</footer>
+<script src="/pagefind/pagefind-ui.js"></script>
+ <script>
+ if(navigator.getEnvironmentIntegrity!==undefined)document.querySelector('body').innerHTML=`<h1>Your browser
+ contains Google DRM</h1>"Web Environment Integrity" is a Google euphemism for a DRM that is designed to
+ prevent ad-blocking, and which Google has forced into their browsers against widespread public opposition.
+ In support of an open web, this website does not function with this DRM. Please install a browser such
+ as <a href="https://www.mozilla.org/en-US/firefox/new/">Firefox</a> that respects your freedom and supports
+ ad blockers.`;
+
+ window.addEventListener('DOMContentLoaded', (event) => {
+ new PagefindUI({element: "#search", showSubResults: true});
+ });
+ </script>
+ </body>
+</html>