<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>hi, it&#39;s mike</title>
    <link>https://mike.puddingtime.org/tags/calibreweb/</link>
    <description>Recent content on hi, it&#39;s mike</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>mike@puddingtime.org (mike)</managingEditor>
    <webMaster>mike@puddingtime.org (mike)</webMaster>
    <copyright>© 2026, mike</copyright>
    <lastBuildDate>Sun, 04 Feb 2024 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mike.puddingtime.org/tags/calibreweb/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>State of the self-host</title>
      <link>https://mike.puddingtime.org/posts/2024-02-04-state-of-the-self-host/</link>
      <pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-04-state-of-the-self-host/</guid>
      <description>What has stuck and what has not from recent self-hosting experiments.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve tried a bunch of self-hosted things recently. In the spirit of &ldquo;yeah, but how is it <em>really</em> working,&rdquo; a quick rundown:</p>
<h2 id="linkding">Linkding</h2>
<p><a href="https://github.com/sissbruecker/linkding">Linkding</a> is a bookmarking tool. It has a UI similar to pinboard.in, can import <kbd>bookmarks.html</kbd> files, and has a decent API. It&rsquo;s working very well. I&rsquo;m particularly fond of the <a href="https://github.com/fivefold/linkding-injector">Linkding injector addon for Firefox</a>, which injects Linkding search results into the sidebar of most popular search engines.</p>
<p>This one seems to be a keeper.</p>
<p>I briefly considered <a href="https://github.com/shaarli/Shaarli">shaarli</a> as an alternative. I didn&rsquo;t like the UI as much, but it has a bigger list of third-party extensions than Linkding.</p>
<h2 id="wallabag">Wallabag</h2>
<p><a href="https://wallabag.org/">Wallabag</a> is a self-hosted Pocket alternative. It also has a useful API, an iOS app, and a Firefox extension. I wasn&rsquo;t too sure about this one going in, but once I got the Docker stuff and some reverse proxy weirdness sorted it worked quite well. It has a few more smarts than Pocket, and it provides Atom feeds of simplified articles you can use to create ebook digests via Calibre or just consume with your everyday RSS reader, given the formatting is cleaned up.</p>
<p>It also lets you share <a href="https://reader.puddingtime.net/share/65bff5347b9932.42547178">a public-facing version of a saved article</a>, and its clipper extension seems to be able to see around a few paywalls if you&rsquo;re <a href="https://reader.puddingtime.net/view/176">saving from a subscription site</a>.</p>
<p>I think this one is a keeper given I can automate the ebook exports: That essentially recreates the Pocket/Kobo integration.</p>
<h2 id="calibre-web">calibre-web</h2>
<p><a href="https://github.com/janeczku/calibre-web">calibre-web</a> is a HTML5 front-end for Calibre libraries that allows you to edit metadata, organize your ebook collection into shelves and, most importantly to me, act as an online sync source for Kobo e-readers, allowing you to browse your collection and download to your Kobo, then keep your reading location in sync.</p>
<p>Some people live in calibre-web full-time, uploading ebooks and managing their metadata. I prefer to pair it with Calibre itself due to an ongoing content conversion project.</p>
<p>It&rsquo;s definitely a keeper. I recovered a ton of books from another device and converted them to Kobo-friendly epubs. Better yet, when downloaded to a Kobo, calibre-web serves up kepubs, which are optimized for Kobos.</p>
<h2 id="calibre">Calibre</h2>
<p><a href="https://calibre-ebook.com/">Calibre</a> is an ebook conversion/management tool, ordinarily used on the desktop. I found <a href="https://mariushosting.com/how-to-install-calibre-on-your-synology-nas/">a Docker recipe</a> that lets me run it on my Synology and access it via a web-based VNC tool. With a little fiddling, I added mountpoints that let me install downloaded extensions and import books from a <kbd>bookdrop</kbd> directory as I pull them down from their assorted vendor sites.</p>
<p>It works alongside calibre-web, allowing me to install books from assorted formats and export them to epub, where they&rsquo;re almost instantly available from the calibre-web web interface or Kobo integration.</p>
<p>Even if sync didn&rsquo;t work, you can access a content server that uses the <a href="https://en.wikipedia.org/wiki/Open_Publication_Distribution_System">OPDS protocol</a> for browsing. So with a reverse proxy and authenticated user, you can get at your library from anywhere and side-load books to your reader.</p>
<p>I&rsquo;m going to keep the Dockerized version.</p>
<h2 id="vikunja">Vikunja</h2>
<p><a href="https://vikunja.io/">Vikunja</a> is a todo app that includes a traditional list view and a card view. It serves up CalDAV, so it could theoretically work with any CalDAV client, but its doesn&rsquo;t work well with iOS Reminders. The responsive Web UI isn&rsquo;t bad if you want to install it to your iPhone desktop.</p>
<p>I installed it and tried it for a day, but I am not sure about it. I&rsquo;m a little uneasy about self-hosting my todos, and was hoping for some kind of native client.</p>
<h2 id="joplin">Joplin</h2>
<p><a href="https://joplinapp.org/">Joplin</a> is an Evernote-esque app with a ton of cross-platform support that I couldn&rsquo;t quite bring myself to trust in a self-hosted context.  It&rsquo;s a good tool and all, but I&rsquo;d prefer to just have my notes in a plaintext, version-controlled setup.</p>
<h2 id="mariushosting">MariusHosting</h2>
<p><a href="https://mariushosting.com/">MariusHosting</a> isn&rsquo;t an app, it&rsquo;s a site run by Marius Lixandru with a ton of recipes for Dockerizing common self-hosted apps on a Synology. It&rsquo;s my first stop when I want to try something out. I was resistant to a lot of his earlier stuff because he had an idiosyncratic way of getting containers set up, but he has since begun to use <a href="https://mariushosting.com/synology-portainer-vs-container-manager/">Portainer</a> for his recipes, which has simplified them a lot. If you find a Docker recipe that uses <kbd>docker run</kbd>, you can convert that to Docker Compose with <a href="https://www.composerize.com/">composerize</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-19</title>
      <link>https://mike.puddingtime.org/posts/2024-01-19-daily-notes/</link>
      <pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-19-daily-notes/</guid>
      <description>Self-hosted Calibre-Web.</description>
      <content:encoded><![CDATA[<h2 id="self-hosted-calibre-web">Self-Hosted Calibre-Web</h2>
<p>I was up early this morning, bothered by that thing I knew I would be where failing to locally containerize Calibre-Web was bugging me, so in lieu of making it an 18-hour workday I got to fussing around with the assorted components I needed to orchestrate:</p>
<ul>
<li>Getting a Calibre-Web instance up and running in Docker</li>
<li>The DNS pieces</li>
<li>The router pieces</li>
<li>The local filesync pieces</li>
<li>The Kobo configuration piece</li>
</ul>
<p>It wasn&rsquo;t that bad in the end. Maybe an hour from start to finish. The apparently <a href="https://mariushosting.com/how-to-install-calibre-web-on-your-synology-nas/">most-read Synology/Docker howto person</a> has made a factory out of an idiosyncratic &ldquo;just make a one-time Synology user task to run Docker&rdquo; approach vs. a &ldquo;fill in these fields&rdquo; approach, but it helps bypass the &ldquo;Docker in the context of Synology&rdquo; issues you can run into, as well as the &ldquo;UI keeps changing issues.&rdquo;</p>
<p>The instructions worked fine, minus one false start because I want my desktop Calibre instance to just plop its stuff into a Syncthing folder the Synology can pick up, so there was a little work in making two sandboxes see each other on the filesystem.  I&rsquo;ve read it&rsquo;s bad news to do a straight network fs mount with Calibre/Calibre-Web, so letting SyncThing just do everything in each local idiom seems to make a little more sense. We&rsquo;ll see.</p>
<p>Getting books out of the Kobo and Kindle can be a hassle. They both sometimes &ldquo;have&rdquo; books that they don&rsquo;t have in any sense of a &ldquo;file&rdquo; abstraction sitting in a &ldquo;folder&rdquo; abstraction on local storage, so you&rsquo;re stuck not actually just emptying the device out for conversion, but going to your official web inventory and grabbing them from there one at a time. I appreciate (in a dismal, sour way) how they&rsquo;ve made it possible to &ldquo;backup your property&rdquo; without taking the hour or two of developer time it would take to implement &ldquo;show all, select all, download all.&rdquo; You have to want it. I get it. Their interests are not my interests.</p>
<p>So the final test was finding a book in a non-Kobo format that I had not yet downloaded to disk, downloading it, feeding it to my desktop Calibre instance, then doing a sync on the Kobo to pull it in. All the pieces worked: Calibre-Web served it up to the Kobo as a <kbd>.kepub</kbd> file.</p>
<p>This is all better than doing this on the PikaPod. While there&rsquo;s a turnkey charm to what they&rsquo;re doing, there was some pain on the remote filesystem side trying to negotiate an sftp mountpoint. I&rsquo;ve got a ton of books I&rsquo;m going to have to manually download from here and there and get into Calibre, so having the option to do that at my desk, on the couch, or wherever and knowing my Tailscale/SyncThing infra will keep the library in sync is more to my liking.</p>
<p>Even better, even if I get sick of the whole Calibre-Web part and any maintenance it requires, plain old Calibre is working well to sideload everything to whatever e-reader I want to use.</p>
<p>Anyhow. Here we are 20 minutes from the actual start of the day, which is going to be a full one. I&rsquo;m hoping things clear up enough to get to go see Ben, who turns 20 this week. This time 20 years ago I spent a week going out to the old &lsquo;87 Volvo, deicing it, digging out any new ice or snow accumulation, and making sure it would start to ensure safe travel to the site of the blessed event. It looks like that out there this week, but the wind is worse, the power outages are ongoing, and the tree in the neighbor&rsquo;s yard is shedding branches with loud cracks and crashes every few hours. So maybe it&rsquo;s going to be &ldquo;Happy Birthday&rdquo; sung over a Facetime call.</p>
<p>Okay. Saving and pushing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-18</title>
      <link>https://mike.puddingtime.org/posts/2024-01-18-daily-notes/</link>
      <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-18-daily-notes/</guid>
      <description>I snarl because I care. In which PikaPods and Calibre-Web teach Mike there&amp;rsquo;s a 308 redirect.</description>
      <content:encoded><![CDATA[<h2 id="i-snarl-because-i-care">I snarl because I care</h2>
<iframe src="https://social.lol/@mph/111777506556037969/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>Every time I post a critique like this I feel like I&rsquo;m looking over my shoulder a little. It&rsquo;s an election year, everyone&rsquo;s on edge, and there is just this vibe about it all that is <em>intense</em>.</p>
<p>I&rsquo;m not going to try to paper over or sugarcoat my political leanings: Pretty &ldquo;left,&rdquo; in the basic political parlance. Not a Republican. Not a &ldquo;centrist.&rdquo; Not a &ldquo;moderate.&rdquo; Not a &ldquo;right-winger,&rdquo; &ldquo;fascist,&rdquo; or whatever.</p>
<p>Behaviorally, I vote Democratic, but I do not believe that it&rsquo;s my obligation to &ldquo;create unity&rdquo; during primaries, and I don&rsquo;t think the Democratic party represents my views or even really my interests in any &ldquo;forward progress&rdquo; sense of the word.</p>
<p>Ideologically, I don&rsquo;t like picking any label because I have been thinking about those labels for decades on decades and have seldom seen them actually help anyone be more clear on what anyone else believes. If I had to pick one, I&rsquo;d stick to &ldquo;socialist.&rdquo; But I was once on the national committee of a socialist organization I do not care to name and understood very clearly the vast daylight between me and any number of other &ldquo;socialist&rdquo; organizations. We even joked among ourselves that we got a small hoot out of people believing we were probably just sort of into European-style healthcare and better emissions control.</p>
<p>And I don&rsquo;t like the labels because I believe that you are what you do, not what you say you are. I really appreciate the phrase &ldquo;my political commitments&rdquo; as opposed to &ldquo;my political beliefs,&rdquo; because the idea of &ldquo;commitments&rdquo; naturally invites the question &ldquo;if they&rsquo;re commitments, what are you doing about them?&rdquo; That&rsquo;s a reminder for me, personally, when I think about opening my mouth on this stuff.</p>
<p>But even &ldquo;left&rdquo; and &ldquo;right&rdquo; have issues, as do &ldquo;conservative&rdquo; and &ldquo;liberal.&rdquo; We use those terms and there&rsquo;s some rough agreement, but I&rsquo;d much rather understand what someone is trying to <em>do</em> than understand some taxonomy of labels when these words are doing all kinds of work and mean so many things.</p>
<p>But when I snark about the cascading system failures going on around me, it&rsquo;s not because I think we&rsquo;d be better off with Republicans in charge. It&rsquo;s because I think the people who are in charge are failing us, and a. <em>they&rsquo;re in charge</em>, b. I don&rsquo;t <em>care</em> if they&rsquo;re the home team because they still need to be held accountable at the next opportunity (primaries, which is why believing primaries are for beating the base into alignment is a position you&rsquo;d expect the people who want to keep power to take), and c. no, they&rsquo;re not left enough for me. We should be building government housing and socializing healthcare.</p>
<p>My disgust with that pull quote up at the top is pretty simple: On what planet is &ldquo;enlightened&rdquo; a useful policy platform? Who <em>cares</em> what leaders <em>say</em>? What are they <em>doing</em>? Is there anything more Peak Portland Liberal than &ldquo;well, we know better so it&rsquo;s odd that things aren&rsquo;t working out.&rdquo;</p>
<h2 id="pikapods-and-calibre-web-again-dot">PikaPods and Calibre-Web again.</h2>
<p>I did all the setup on my PikaPod and Calibre-Web to get it talking to my Kobo and &hellip; something was very wrong. Sync wasn&rsquo;t working, none of the books in my collection were showing up as download candidates, etc. I remounted my Kobo and rolled back the config change that pointed it at the Calibre-Web API in favor of the Kobo store API and went to bed mildly disappointed but deciding there are worse things in the world than sideloading my entire library of ebooks onto a device I update once every five or eight years.</p>
<p>This morning it turned out it was bothering me more than I had let on to myself. One discrepancy I noticed was that most docs expect the service to be listening on <kbd>:8083</kbd>, but the URL it was generating in the UI was going to hit <kbd>:80</kbd>. When I did a straight <kbd>curl</kbd> I got &hellip; nothing. So I <kbd>curl -v</kbd>&rsquo;d the PikaPod with <kbd>:8083</kbd> and got &hellip; nothing again. So back to <kbd>:80</kbd> with <kbd>-v</kbd> and &hellip; oh &hellip; Calibre-Web&rsquo;s handy little &ldquo;paste this line into your Kobo config&rdquo; field was providing an unsecured URL and curl was stopping on a 308 redirect to the secured URL.  I guess <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308">308 is implemented inconsistently</a>, because it should have simply redirected to the secured URL with the request intact. I&rsquo;ve never even seen a 308, but my education in redirects stopped decades ago with an SEO cleanup.</p>
<p>Anyhow, <kbd>curl -v</kbd> to the secured URL with no port qualifier told me curl and the API were talking, so I remounted the Kobo, changed the config to point to the PikaPod&rsquo;s API endpoint and now there&rsquo;s ping. Plus a ton of duplicate books, because Calibre-Web is configured to serve up a <kbd>.kepub</kbd> (a Kobo-specific epub variant more amenable to location sync) as well as any <kbd>.epub</kbd> it can find, and I didn&rsquo;t take the time to narrow that down.</p>
<p>At least I can start the work day knowing the most mysterious part is working.</p>
<h2 id="say-what-again">Say what again?</h2>
<p><a href="https://pikapods.com">PikaPods</a> is a web service that lets you host common/popular webapps. It&rsquo;s pretty neat: You pick one, click the little deploy button, and it fires up a container with its own URL and the option to point a CNAME at it, plus instructions on enabling sftp connections if you need them. <a href="https://github.com/janeczku/calibre-web">Calibre-Web</a> is one of the services PikaPod will host for you. It&rsquo;s an online ebook library that works with <a href="https://calibre-ebook.com/">Calibre</a>, a popular means of converting ebook formats. Among its other capabilities, Calibre-Web can serve up your library to a Kobo device and manage location sync between all the clients. A nominally loaded PikaPod running Calibre-Web is supposed to cost only a couple of bucks a month, and the billing is all metered.</p>
<p>I gave PikaPod a try because the instructions for getting a Calibre-Web container to run on my Synology were all so impenetrable that I decided there had to be a better way. Ironically, by the time I had the PikaPod running I understood what I was getting wrong with the self-hosted containers. So there&rsquo;s a chance my inner autodidact will have no rest until I have my half-assembled container working correctly.</p>
<p>But PikaPod is cool.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-17</title>
      <link>https://mike.puddingtime.org/posts/2024-01-17-daily-notes/</link>
      <pubDate>Wed, 17 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-17-daily-notes/</guid>
      <description>Calibre-Web, Pikapod, paying for books. Small regrets. Patched patch.</description>
      <content:encoded><![CDATA[<h2 id="calibre-web">Calibre-Web</h2>
<p>I have a Synology with Docker on it, plus a bunch of community packages for assorted things and it&rsquo;s &hellip; fine. But people have been talking about this <a href="https://pikapods.com">Pikapods</a> thing so I gave it a spin with <a href="https://github.com/janeczku/calibre-web">Calibre-Web</a> as my test case. Right now I&rsquo;m at the &ldquo;got ping&rdquo; stage with it: It is up, configured, and sees my library, and I just figured out how to make it put a missing cover on a book.  I have not yet turned to getting my Kobo to talk to it, but omg I cannot wait to get my Kobo talking to it, because I think e-ink readers are both the best and worst technology I ever adopted, and I have a tool now that will allow me to make right the parts of that adoption that bother me the worst.</p>
<p>Stake whatever territory you want on the copyright front. I am an inconsistent hypocrite. In this particular use case, I am a hypocrite who happens to pay:</p>
<p>I supported my family for years with my writing. The person you read on these pages probably doesn&rsquo;t seem like it.  I am no longer a craftsman or a stylist. I am just this guy who still finds an outlet and a release in writing, but who does not really edit himself, and who understands that time-shifted 20 years give or take I might be the proprietor of the world&rsquo;s least listened to podcast or most unwatched YouTube channel. Writing is just the way I tell eight or nine people a day what I&rsquo;m into right now, and I deeply believe text you can skim is more <em>considerate</em> than forcing you to scrub  through a bunch of recorded rambling and ill-conceived attempts to force you into a parasocial connection.</p>
<p>But I pay. I pay for newspapers, I pay for newsletters, and I buy every single book I read (that I&rsquo;m not getting from the library). When my team found an open NFS mount full of O&rsquo;Reilly books on an old Solaris box in the back of a DC,  it was an easy decision to say &ldquo;failing disk, mount it <kbd>ro</kbd> and serve notice that it is leaving us&rdquo; because I was never so entrepreneurial or talented that I could afford the vanity of just giving my shit away: I had to sell it to someone if I didn&rsquo;t want to go back to soldiering or doing secretary work to eat. You go fight Big Content, and I get it, but I will also pay.</p>
<p>So this isn&rsquo;t me cackling and chortling because &ldquo;fuck paying for books and now I don&rsquo;t have to.&rdquo; Looking over what&rsquo;s in my new Pikapod, I&rsquo;m pretty sure I&rsquo;ve even paid twice for a big chunk of what&rsquo;s in there.</p>
<p>I&rsquo;m cackling and chortling because I&rsquo;m free of doing business with an entity I wish I hadn&rsquo;t. I don&rsquo;t care about the law, I care about what&rsquo;s right, and I bought every one of those books, so my duty to &ldquo;right&rdquo; is discharged.</p>
<h2 id="work">Work</h2>
<p>I bit off more than I can chew today. If anyone writes my biography, this is gonna be a weird exception to a largely prosaic and staid track record of &ldquo;safety first, move with deliberation.&rdquo;</p>
<p>But I bit off more than I can chew because I picked a dumb industry to work in, and I occasionally feel the need to thwart expectations and try out the whole &ldquo;break glass&rdquo; thing before retreating to my home position.</p>
<p>Just putting it on the record so you know who you&rsquo;re recommending when you see me asking for help with references: Occasionally I&rsquo;ll surprise you. It is not my intent to also terrify you.</p>
<h2 id="braus">braus</h2>
<p>I realized after pulling it down to my second machine that I didn&rsquo;t actually push my QoL changes to <a href="https://github.com/pdxmph/braus">my braus fork</a>. Fixed that.</p>
<p>Okay. Done. Time to get the Pikapod talking to my Kobo.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
