Show newer

If anyone else finds this kind of thing useful, I'd totally love it if someone else started using this project. Particularly if you are the kind of person who is going to make lots of improvements to the front-end and then send me PRs 😉

I keep coming up with interesting improvements for this project, but I only have so much time to work on stuff like this.

Paul Ganssle  
Yesterday I released version 0.6.0 of my audiobook RSS server, audio-feeder: https://github.com/pganssle/audio-feeder It takes your directory of au...

I started this application in December 2016, before I knew anything about databases, so I hacked together a pseudo-DB out of YAML files, because I wanted to be able to edit the files by hand if I screwed up. As this "database" grew, parsing huge YAML files became a bottleneck; I lived with this for years, but recently, I managed to switch over to using a SQLite database!

I lived with this for years, but recently, I managed to switch to a SQLite database!

This was surprisingly easy, because I already had a pseudo-ORM, and I just load the whole "database" into memory at startup, but I am still not using the features of a "real database", since my "queries" are basically Python code iterating over dictionaries and such.

Show thread

I really like the "segmented" feed, which breaks up books along chapter and/or file boundaries, recombining them to minimize total deviation from 60m files. I like to listen to audiobooks in ~60 minute chunks, and this automates the process of chunking them up for me.

The implementation was a rare example where dynamic programming was useful in the wild (and not just in job interviews): github.com/pganssle/audio-feed

Thanks to @njs for suggesting the approach and basically implementing it flawlessly on the first try.

Show thread

I've also created this probably convenient docker-compose repository for (somewhat) easily deploying `audio-feeder`: github.com/pganssle/audio_feed

Now featuring ✨🌟✨*installation instructions*✨🌟✨ (so fancy).

Show thread

Yesterday I released version 0.6.0 of my audiobook RSS server, `audio-feeder`: github.com/pganssle/audio-feed

It takes your directory of audiobooks and generates an RSS feed for each one, so that you can listen to them in your standard podcast listening flow.

I'm particularly happy with the new feature "rendered feeds", which uses `ffmpeg` behind the scenes to generate alternate feeds where the audiobook is broken up along different lines.

We’re looking for a conference venue to host PackagingCon in spring 2023 in Berlin, does anyone have a lead to host 100-200 people for a day or two?

I was thinking about this because I was thinking about how I might optimize the resource consumption of a program where I'm ~the only user, and then I thought, "Hmmm.. If I spend that same time working on an open source project currently used by millions of people, with even a modest improvement I could probably save more energy than my homebrew project will consume in its entire lifetime."

Fun stuff.

Show thread

It would be interesting to live in a world where most people used this or something like it in production: sciagraph.com/

I'm kinda curious to know stuff like, "How much electricity would it save if time zone conversions in pandas were 20% more efficient?"

I have been using Git a long, long time. I have worked on Git clients and libraries. At some places I've worked, I am the person folks go to when they need Git help.

And yet, only today I learned you can pass -m to commit twice (or more) and it will do the right thing of making each successive message a new paragraph (which is useful for the convention of a short summary as a single first line and following paragraphs as a more detailed message).

Hm... PEP 621 deliberately doesn't have a replacement for `setuptools`'s `license`, but they do have a `license` key that is equivalent to `license_files`. Unfortunately, this is what PyPI does with the data in that field:

Not great.

Discussing the latest Jeopardy happenings with my family over Thanksgiving is the closest I've ever felt to knowing what it's like to be a sports fan.

#askfedi Expanding on my earlier laptop query: I'd love to find a site with a comprehensive database of laptops from say the past ten years that lets you search by filtering on specs like:

* Weight
* Ports
* Screen size, resolution
* Screen brightness
* Claimed battery life

Know of anything like this? It would be a much more direct and efficient way for me to build up my shortlist of machines I look for in the used market. TIA.

Well, here I am on Mastadon.
Intro in order, I suppose. That's how it works, right?

Me:
- That datetime guy. Ask me about time zones, DST, leap year bugs, etc.
- Been doing .NET/C# longer than I can remember. 20+ years. These days I code mostly on a Mac.
- I work at Sentry, and used to work at Microsoft.
- I live in the forests of Woodinville WA, with wife Maggie, my son, and our three dogs.
- I like Star Trek, home improvement, and playing stupid pop music on the piano.

HI! 👋🙂

This is an old project, but by some miracle it's still working and I woke up this morning wanting to celebrate the things I love more.

This Inkplate e-ink screen shows Conway's Game of Life, seeded from tarpits I have on the Internet. The tarpits are programs on my computer that superficially look like insecure Telnet and Remote Desktop services, but actually exist to respond super slowly and make bots scanning the Internet 'get stuck'.

When a bot connects to the tarpit, the data it sends gets squished into a 5x5 grid and 'stamped' onto a Game of Life board. Data from a bot at the IP address 1.1.x.x will get stamped on the top left corner, data from a bot at 254.254.x.x will get stamped on the bottom right corner.

Conway's Game of Life, a set of simple rules that govern whether cells should turn on or off, updates the display once per second. The result is that bot attacks end up appearing as distinct 'creatures', that get bigger and more angry looking over time (as their centre is updated with new data). After the attack finishes, the 'creature' eventually burns itself out.

Despite that description, it's a really chill piece of art that doesn't draw too much attention but I can happily watch for a long time.

Credit for the idea goes to @_mattata, I had been wanting to make a real-life version of XKCD #350 for years before seeing his Botnet Fishbowl project.

#projects #inkplate #esp32 #eink #infosec #tarpit

📣 #Python News:

Let's welcome the newest Python core developer: @hugovk. Hugo has been contributing to Python for years, improving our docs, devguide, toolings, and infrastructure. He's also one of the PEP editors and an active member of the Python docs community.

Hugo's promotion to become core dev was approved by Python Steering Council yesterday. 👏🥳 :python:

discuss.python.org/t/vote-to-p

How can a music notation data format encode the music of a concert-pitch score along with individual transposed-instrument parts, without duplicating information? What's the right level of abstraction?

If that question makes any sense to you, check out my proposal and the current discussion in this GitHub issue:

github.com/w3c/mnx/issues/287

Office hours are going to be starting in about 10 minutes at YouTube.com/jayofdoom

Nice: nature.com/articles/d41586-022

I hope this half-solution to a non-problem is actually gone for good 🙂.

I don't think I've ever met anyone who needed or wanted leap seconds. And I've spent some time looking!

Why did nobody tell me that in #Python 3.11, datetime.fromisotimestamp() can parse arbitrary ISO timestamps!? #gameChanger

(Before it could only parse the output from datetime.isoformat(); e.g. choking on timestamps ending with a Z for UTC.)

Show older
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.