<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bjørn A. Andersen - Projects</title><description>Project write-ups by Bjørn A. Andersen on 3D printing, design, and software.</description><link>https://polybjorn.com/</link><language>en-us</language><item><title>An atlas of my own</title><link>https://polybjorn.com/projects/ferd/</link><guid isPermaLink="true">https://polybjorn.com/projects/ferd/</guid><description>Travel pins and GPS routes in one free, open-source map, reachable from any device.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For years my GPS routes from hikes sat in a folder on disk, and the places I&apos;d been or wanted to go were mostly in my head. I&apos;d never found a tool that held both.&lt;/p&gt;
&lt;p&gt;Phone apps already do a lot of this. Organic Maps and OsmAnd both keep bookmarks and GPS routes on the same map, and Trail Sense covers the outdoor utility side. What was still missing was a cross-platform option, since the three above are phone apps.&lt;/p&gt;
&lt;p&gt;Ferd is what I ended up with. One map for the pins and the lines, running on my own machine.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&amp;quot;article-gallery&amp;quot;&amp;gt;
&amp;lt;button class=&amp;quot;gallery-thumb&amp;quot; type=&amp;quot;button&amp;quot; data-full=&amp;quot;https://res.cloudinary.com/djpkffk5u/image/upload/w_1600,f_auto/v1779361052/Screenshot_2026-05-21_at_13.56.24_xxx3et.png&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;https://res.cloudinary.com/djpkffk5u/image/upload/w_480,f_auto/v1779361052/Screenshot_2026-05-21_at_13.56.24_xxx3et.png&amp;quot; alt=&amp;quot;Ferd places list page&amp;quot; loading=&amp;quot;lazy&amp;quot; /&amp;gt;
&amp;lt;/button&amp;gt;
&amp;lt;button class=&amp;quot;gallery-thumb&amp;quot; type=&amp;quot;button&amp;quot; data-full=&amp;quot;https://res.cloudinary.com/djpkffk5u/image/upload/w_1600,f_auto/v1779361052/Screenshot_2026-05-21_at_13.56.40_nf4kxi.png&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;https://res.cloudinary.com/djpkffk5u/image/upload/w_480,f_auto/v1779361052/Screenshot_2026-05-21_at_13.56.40_nf4kxi.png&amp;quot; alt=&amp;quot;Ferd trail detail page&amp;quot; loading=&amp;quot;lazy&amp;quot; /&amp;gt;
&amp;lt;/button&amp;gt;
&amp;lt;button class=&amp;quot;gallery-thumb&amp;quot; type=&amp;quot;button&amp;quot; data-full=&amp;quot;https://res.cloudinary.com/djpkffk5u/image/upload/w_1600,f_auto/v1779361051/Screenshot_2026-05-21_at_13.57.12_o9jzng.png&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;https://res.cloudinary.com/djpkffk5u/image/upload/w_480,f_auto/v1779361051/Screenshot_2026-05-21_at_13.57.12_o9jzng.png&amp;quot; alt=&amp;quot;Ferd appearance settings&amp;quot; loading=&amp;quot;lazy&amp;quot; /&amp;gt;
&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Under the hood it&apos;s small. About 5 MB of code, made of one web page, a small Python API, and a SQLite database behind it.&lt;/p&gt;
&lt;p&gt;Nothing about it is technically novel. What it gives me is the thing I&apos;d been looking for, which is one map for both the dots and the lines, reachable from any device.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&amp;quot;link-buttons&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;https://github.com/polybjorn/ferd&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;
&amp;lt;svg fill=&amp;quot;currentColor&amp;quot; role=&amp;quot;img&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;
GitHub repository
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>Highlights worth keeping</title><link>https://polybjorn.com/projects/readest-highlights-plugin/</link><guid isPermaLink="true">https://polybjorn.com/projects/readest-highlights-plugin/</guid><description>A small Obsidian plugin that pulls my book highlights out of Readest.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Highlighting passages in a book never did much for me. Once a highlight was sitting inside the reader app, I didn&apos;t have a way to pull it back out, so it mostly just stayed there. My notes live in &lt;a href=&quot;https://obsidian.md&quot;&gt;Obsidian&lt;/a&gt;, and getting the highlights from &lt;a href=&quot;https://readest.com&quot;&gt;Readest&lt;/a&gt; into that same place was the gap I wanted to close.&lt;/p&gt;
&lt;p&gt;So I made a small plugin that does exactly that. Open Obsidian, run a command, and your book highlights show up as notes, one per book. Run it again later and the notes update in place instead of piling up duplicates.&lt;/p&gt;
&lt;p&gt;Each note has the title, author, and year at the top, followed by the highlights as a list, each with its page number and any notes you wrote alongside it.&lt;/p&gt;
&lt;p&gt;The plugin never changes anything in Readest itself, just reads the highlights and never touches the original files. It also doesn&apos;t talk to the internet, so nothing about what you&apos;ve highlighted leaves your computer.&lt;/p&gt;
&lt;p&gt;I run it after finishing a book, and it&apos;s been quietly useful.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&amp;quot;link-buttons&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;https://community.obsidian.md/plugins/readest-highlights&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;
&amp;lt;svg fill=&amp;quot;#9387D9&amp;quot; role=&amp;quot;img&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M19.355 18.538a68.967 68.959 0 0 0 1.858-2.954.81.81 0 0 0-.062-.9c-.516-.685-1.504-2.075-2.042-3.362-.553-1.321-.636-3.375-.64-4.377a1.707 1.707 0 0 0-.358-1.05l-3.198-4.064a3.744 3.744 0 0 1-.076.543c-.106.503-.307 1.004-.536 1.5-.134.29-.29.6-.446.914l-.31.626c-.516 1.068-.997 2.227-1.132 3.59-.124 1.26.046 2.73.815 4.481.128.011.257.025.386.044a6.363 6.363 0 0 1 3.326 1.505c.916.79 1.744 1.922 2.415 3.5zM8.199 22.569c.073.012.146.02.22.02.78.024 2.095.092 3.16.29.87.16 2.593.64 4.01 1.055 1.083.316 2.198-.548 2.355-1.664.114-.814.33-1.735.725-2.58l-.01.005c-.67-1.87-1.522-3.078-2.416-3.849a5.295 5.295 0 0 0-2.778-1.257c-1.54-.216-2.952.19-3.84.45.532 2.218.368 4.829-1.425 7.531zM5.533 9.938c-.023.1-.056.197-.098.29L2.82 16.059a1.602 1.602 0 0 0 .313 1.772l4.116 4.24c2.103-3.101 1.796-6.02.836-8.3-.728-1.73-1.832-3.081-2.55-3.831zM9.32 14.01c.615-.183 1.606-.465 2.745-.534-.683-1.725-.848-3.233-.716-4.577.154-1.552.7-2.847 1.235-3.95.113-.235.223-.454.328-.664.149-.297.288-.577.419-.86.217-.47.379-.885.46-1.27.08-.38.08-.72-.014-1.043-.095-.325-.297-.675-.68-1.06a1.6 1.6 0 0 0-1.475.36l-4.95 4.452a1.602 1.602 0 0 0-.513.952l-.427 2.83c.672.59 2.328 2.316 3.335 4.711.09.21.175.43.253.653z&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;
Obsidian community plugins
&amp;lt;/a&amp;gt;
&amp;lt;a href=&amp;quot;https://github.com/polybjorn/obsidian-readest-highlights&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;
&amp;lt;svg fill=&amp;quot;currentColor&amp;quot; role=&amp;quot;img&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;
GitHub repository
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>