AudioBookshelf with Kobo sync bridge

Another thread I was following closely, is an open source alternative to Kindle’s whispersync. Combination of Audiobookshelf + Kobo reader can give you the same experience provided there is a sync service between them :)

And it was implemented recently, and is actively maintained still!

https://github.com/advplyr/audiobookshelf/issues/189#issuecomment-3575012992

https://github.com/J-Lich/abs-kosync-bridge

January 7, 2026

onMessage callback can return Promise in Chrome

I enjoy following threads on bug trackers, here is one that got fixed recently :)

this was possible in FF but not in Chrome until recently.

  chrome.runtime.onMessage.addListener(async (msg) => {
    const res = await someAsyncFunction();
    return res;
  });

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage

https://issues.chromium.org/issues/40753031

https://github.com/w3c/webextensions/issues/338

January 7, 2026

explicit eventloop factory in python3.13

https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.EventLoop

An alias to the most efficient available subclass of AbstractEventLoop for the given platform.

Before 3.13 can be implemented with:

import asyncio
import selectors

loop = asyncio.SelectorEventLoop(selectors.SelectSelector())

EventLoop came with deprecation of the policy based event loop selection: https://docs.python.org/3/library/asyncio-policy.html#asyncio-policies

January 6, 2026

debugging async python be like

while True:
    breakpoint()
    await asyncio.sleep(1)

re-enter into debugger after giving asyncio time to execute tasks.

Other discussions:

January 6, 2026

sqlite indexing and query performance

Recommended course: https://highperformancesqlite.com/

https://emschwartz.me/subtleties-of-sqlite-indexes/

hn

September 29, 2025

Engineers and Engineering companies

However, there are two ways of interacting with an abstraction layer: as shorthand for an understanding of what it is doing on your behalf, or as a black box. I think engineers are most capable and most effective when abstraction layers serve as shorthand rather than a black box.

For instance, sometimes we create abstraction layers that allow people to create things on top of them explicitly without having to understand anything beneath them. We call those “platforms.” The expectation is that when we create abstraction layers like that, we should see an explosion of creativity

As we’ve made it easier to build games, we have certainly seen more of them. But the number of highly rated games (in this case as recorded by metacritic) does not seem to be increasing over time.

I think we can only truly create when we truly understand what we have to create with.

The qualities that make a good engineer are often the same ones that create a good engineering organization. Both start with deep understanding as the basis for innovation – cultivating the curiosity to look inside the black boxes.

https://moxie.org/2024/09/23/a-good-engineer.html

May 11, 2025

memory consumption when using imap_unordered in Python multiprocessing

A separate thread is spawned to ingest data into the pool, but it doesn’t stop to wait until the tasks are processed. Therefore, if task definitions consume substantial amount of memory it can lead to OOM kill.

If you’re using multiprocessing.Pool, consider upgrading to concurrent.futures.process.ProcessPoolExecutor, because it handles killed workers better. It doesn’t affect the problem described in this question.

https://stackoverflow.com/questions/40922526/memory-usage-steadily-growing-for-multiprocessing-pool-imap-unordered

April 6, 2025

CST timezone

a quiz question would be to expand the abbreviation.

list of timezone names: https://www.timeanddate.com/time/zones/

February 6, 2025

Docker pulls entire image even if some layers were delivered with save/load

When saving an image from the graph-driver store, a new archive is created containing the uncompressed layers; saving/loading will produce the same layers as were pulled, but the save/load won’t include information about their compressed digests, because this information cannot be verified without the actual compressed artifacts (as pulled from the registry). Reconstructing the compressed layers is not possible due to compression algorithms not being 100% reproducible (they may be most of the time, but various factors, including CPU load, and CPU optimizations during compression can cause their checksum to differ).

https://github.com/moby/moby/issues/46664

January 23, 2025

Brief comparison of Google Drive and Dropbox

Price per 2TB

  • GDrive $137.75 / year
  • Dropbox $120 / year

Privacy

When I shared a file with someone, and then want to: unshare and share with someone else.

Can the sharing link be reset for a particular file / folder?

NOTE on Dropbox:

You can only delete shared links that you create. If you invite someone to a file or folder with editing access, they can create their own link to share with someone else. You can’t manage those shared links

October 20, 2024