Ephes Blog

Miscellaneous things. Not sure what to put here, yet.


Weeknotes 2024-01-29

, Jochen
The Web is the set of digital networked technologies that work to increase user agency. --Robin Berjon

Busy work week in between projects. Didn't have time to do much besides just that.

50 Django Meetup and Sprint at Ambient Innovation

Attended the 50th Django Cologne Meetup and mini sprint which was great. Thanks to Ronny and Sarah for organizing this event and the other Sarah and Thibaud for their interesting talk and the discussion about the future of Django roadmap.



  • HTMX: Die perfekte UI-Technologie?! // deutsch | I don't know why I've been watching more videos that I completely disagree with lately. Maybe YouTube's recommendation engine has found my weak spots and is starting to take advantage of them? Jedenfalls macht sich hier Golo ordentlich zum Horst (just to be able to find the reference later).






Out of Context Images

Weeknotes 2024-01-22

, Jochen
career Verb /kəˈri(ə)r/
> careers, plural;
> 1. Move swiftly and in an uncontrolled way in a specified direction
> - the car careered across the road and went through a hedge

Normal work week. Prefetching all the data needed to render a list of posts using Wagtail for django-cast was harder than expected. A lot of streamfield blocks end up making database queries. Template tags like pageurl or slugurl generate database queries. Custom templates overriding some behavior in some django-cast provided template blocks are issuing database queries. But I think I found most of them by now. And there is some good news: Prefetching the data actually improves performance a bit. And without hitting the database, the rendering time is about 3ms per Wagtail page (about 300ms for a feed with 100 posts), which is probably ok.




  • Hosting and DevOps for Django with Benjamin "Zags" Zagorsky | Ok, I think this is the first time I saw a technical talk and thought: Well, for each suggestion I would recommend to do exactly the opposite. I don't mean to say it's a bad talk (ok, maybe a little bit, because choosing multiple interdependent single points of failure instead of one seems just batshit crazy to me). But it's pretty much orthogonal to my views on this topic. So maybe it's interesting?
  • The Cost Of JavaScript - 2023 | Very good





Weeknotes 2024-01-15

, Jochen
May type hints never overload you,

First workweek of 2024. Recorded and published a podcast episode about Typescript and typing in general, which was a lot of fun 🎙️. For django-cast I found out that it is possible to pre-fetch all the data needed to render a list of posts or episodes and call .serve passing that data and avoid hitting the database 💡. You might to have to do some unholy things though, like monkeypatching the PageLinkHandler. I didn't expect this, but rendering a page including internal links in Wagtail will cause a database query because only the links page id is stored in the markup and the page object is needed to get the page url which is needed to render the link to html. And I haven't found a way to pass data from the page's template context to the PageLinkHandler. But it's doable. So I'll do it 😇.



Mastodon / Twitter


Weeknotes 2024-01-08

, Jochen
This year will be harder than last year. It will, however, be easier than next year. --Enver Hoxha’s message to Albania in 1967

🏖️ Still on vacation. Bugfix release for django-cast, because sometimes the wrong gallery component element was found. Speaking of django-cast - the feed rendering performance has been deteriorating for a long time and I didn't notice it because of the caching in production. I'm taking this as an opportunity to systematically improve performance, which means I'll add tests that fail when the number of queries of performance-relevant views increases. This probably means I'll have to dig a little deeper into Wagtail's code base, because ideally I'd like to be able to render pages simply by passing the required data directly as an argument to the .serve method. This would be nice because I could then isolate all the data fetching stuff in one function call and maybe even optimize the sql by hand. Lets find out if this is feasible 🤯.

Wow, didn't expect the.tox directory for django-cast to be this big:

$ du -ch .tox | tail -1

21G total





📆 Year in Review 2023

, Jochen

Reflecting on the past year 🔍 - what I find particularly fascinating is that even though I've spent most of my available time on work-related (billable) projects, the most significant progress I've made has been on my personal projects, such as django-cast (non-billable).

This is in stark contrast to my early days as an employed developer. Even five years ago, after several years of freelancing, I would have said I had a few side projects, but the major developments happened during work hours. There seems to be a shift. Interesting.

The most significant change in my daily work has been becoming more comfortable with frontend development. Most of the time I use a combination of Django, htmx, and Alpine.js, and I'm very happy with the results. JavaScript and HTML, which used to be unfamiliar territory, have now become more approachable. Now, just adding a bit of CSS will be enough for me to become dangerous 😁.

I've also been deeply engaged with the topic of Large Language Models (LLMs). Incorporating LLMs into my daily workflow has significantly boosted my productivity. While I haven't quantified this impact, it's substantial enough that I don't hesitate to invest in subscriptions. Up to now, my development work was not directly focused on LLMs, but I'm planning to shift this in the coming year, aiming to undertake projects where LLMs are a core component of the system.


I've made substantial progress on this project. It's hard to believe that it's only been a year since we released our first podcast episode using the new CMS based on Wagtail.


Fixed Bugs

Infrastructure Achievements

Roadmap for 2024

  • Transcripts
  • Better designed default theme - at the moment I'm using an rather unstyled bootstrap5 theme
  • Documentation and example project - the example project is probably not working and the documentation is far from complete
  • Performance
    • Feed generation / maybe paged feeds?
    • Where do all those queries come from?
    • My goal is to have sub 100ms response times for all major views


  • Export recipes to Paprika
  • Some smaller fixes

I'm uncertain about continuing to maintain this. The transition to pydantic2 was a mess, there's a lot of bug reports, and unfortunately, all my attempts to bring new developers on board have been unsuccessful.

Data Science Tutorial

Revived the old project 😄. I'm considering blending the tutorial aspect with podcast transcript work, perhaps incorporating some RAG for podcast-based chat interaction? Exciting possibilities lie ahead!

New Software I didn't use Before

  • Started using Obsidian for daily writing activities
  • Switched from Mealie to Paprika for managing my cooking recipes
  • Adopted Playwright for end-to-end testing

Areas I Aim to Focus On More

  • Data Science - prevent my skills from rusting
  • Only managed to release six podcast episodes this year, quite surprising as I didn't anticipate such a low count
  • Just went to one conference this year 😱: beyond tellerrand 2023
  • Hold a three day pytest course at the local university - good, but I expected to do more teaching
  • Start making music again - this has been on pause for almost 2.5 years because of reasons