Zsolt Ero

Zsolt Ero

@hyperknot.com

Building https://openfreemap.org and http://maphub.net Writing on http://blog.hyperknot.com Loves paragliding

3.4K followers2.7K following338 posts

This is the state of the art on ChatGPT when asked to create a map (topic was hot springs in Cyprus). I guess interactive maps are safe for now.

Look, this is the 1st Google result for wplace live, just below the main website. Maybe the majority of users didn't use scripts, but the ones who did are definitely responsible for the load:

OpenFreeMap survived 100,000 requests per second I was about to post about how nice the last 10 months of OpenFreeMap have been. The architecture has really proven itself to be great, Cloudflare has agreed to sponsor the bandwidth, Hetzner servers are super stable as always,

View full thread

2025/08/08 23:08:16 [crit] 1084275#1084275: *161914910 open() "/mnt/ofm/planet-20250730_001001_pt/tiles/8/138/83.pbf" failed (24: Too many open files) ... This is weird. I've never seen anything like this. I check nload, and it shows huge traffic.

OpenFreeMap survived 100,000 requests per second I was about to post about how nice the last 10 months of OpenFreeMap have been. The architecture has really proven itself to be great, Cloudflare has agreed to sponsor the bandwidth, Hetzner servers are super stable as always,

serving tiles from Btrfs proved to be a great choice, nginx is amazing, and life is good. Then, out of the blue, I'm getting reports that some tiles are not loading, which normally means tile generation bugs, but not this time. I look into the nginx logs and see this:

Is CSS scrollbar-gutter support like totally broken in almost all browsers? This is Chrome. Safari is broken in a different way. I don't want to add JS based scrollbars, but it's really hard to fix this in a cross-platform way.

Ultimate marketing flex by Midjourney: 1. Make every user connect with the "Midjourney Bot." 2. Notify 21 million users of a new launch, for free! (Even if they left ages ago.)

One US client sent us a USD paper check in the mail, instead of the wire transfer / ACH we'd asked them to use. Now I have this piece of paper for $1100. What can I do with it? I'm in the EU and I have no idea where I can possibly cash or deposit this check.

Right now, you might have read the news that a Chinese paraglider pilot, Peng Yujiang, got sucked into a cloud and ended up at 8,598 meters / 28,000 feet.

View full thread

I think the other two scenes might be real, though, recorded with a 360 camera on a selfie stick - a common setup for paragliding videos. There are definitely some questions though... For the full investigation, read the full article here.

Right now, you might have read the news that a Chinese paraglider pilot, Peng Yujiang, got sucked into a cloud and ended up at 8,598 meters / 28,000 feet.

View full thread

I've been paragliding for 18 years and follow the progress of AI very closely, but even I couldn't say with 100% certainty if this video is real or fake. One scene is definitely fake: the one where the camera makes a move that would only be possible from a drone.

In this scene, the otherwise black helmet is white, and the perspective falls apart in a strange, distorted way, typical of lower-quality AI-generated videos. Also, here, he is using a sitting harness (legs visible) whereas in the real ones, he is in a pod-style harness.

Right now, you might have read the news that a Chinese paraglider pilot, Peng Yujiang, got sucked into a cloud and ended up at 8,598 meters / 28,000 feet.

It's literally on every news website: CNN, BBC, The Guardian. Now, what makes this story really interesting is the accompanying video. There is one version from The Guardian, which had 300k views in 17 hours.

Honest question: How do you pay using your iPhone while on a call? I mean the one where I double-click the side button and pay at a cashier?

View full thread

Honest question: How do you pay using your iPhone while on a call? I mean the one where I double-click the side button and pay at a cashier?

View full thread

OK, I asked Gemini 2.5 Pro, o3, Claude Sonnet 4, and Perplexity. Gemini gave a perfect answer! It explained why it happens: an accessibility setting was inverted on iOS 16, and many users got caught by this. I personally never touched this, so I'm surprised by its default value.

Claude was absolutely wrong, recommending I use an Apple Watch and even saying that "Your 'apologize and call back' approach is probably the most reliable solution" :-)

Honest question: How do you pay using your iPhone while on a call? I mean the one where I double-click the side button and pay at a cashier?

It always terminates the call for me. These days, I apologize in advance, explaining that I have to pay and will call back in a few seconds. Apple Pay came out in 2014. Why isn't this a solved problem?

Crossposter final touches Multi-day threads. I can now continue a post after it has been posted. First, I create post1.md, then later as I progress post2.md, etc. After each post, the status is saved into a JSON, and when the next part is posted, it continues the original thread.

Different handling for X Premium and X Free accounts. X Premium has 25000 max char limit; X Free has 280. Moving the link on X from the first post to the first reply. If there are multiple links, I currently move everything into the first reply, but it might make sense to have one link per reply,

so the preview image is displayed correctly. This is good for a start, but this will probably need some kind of config value in the future. Adding scheduling and Frontmatter support is the next step. But most importantly, I think I'm happy with it so far. It's working! It's usable from CLI now!

Crossposter progress update: I just remembered that I cannot write "Bluesky" on X, the land of free speech. Asked Gemini how to make similar-looking Unicode characters, which look the same but are actually not the same string.

Crossposter progress update: I was using regex-based parsing for links, images, @handles, etc. It started out simple but became increasingly confusing as I tried to synchronize this regex-based parsing for Bluesky posts with the optimal splitting code.

View full thread

It supports full Markdown-style links, so the link text doesn’t have to be the URL itself (e.g., https://...), but can be proper HTML-style links with actual text. It's funny, because there's no way to do this using the official web client - but it’s definitely possible via the API.

This AST-based rewrite turned out to be the biggest task so far. Every single part of the app had to be rewritten, but now I have Python TypedDicts for LinkTokens and ImageTokens. It was worth the time - the codebase is really nice to read now.

Crossposter progress update: I was using regex-based parsing for links, images, @handles, etc. It started out simple but became increasingly confusing as I tried to synchronize this regex-based parsing for Bluesky posts with the optimal splitting code.

I decided to go all-in and rewrote everything using a proper Markdown AST parser. I had to make a plugin for @handle support, but the mistune library was actually quite nice to work with.

The biggest issue was that LLMs kept hallucinating it as markdown-it, so I had to double-check and write everything by hand. BTW, Bluesky API is amazing!

Crossposter progress update: Optimal splitting into threads works! It was a big one. Turns out I need dynamic programming to find the optimal splitting points in a thread. What does an optimal splitting point mean?

Try to split on paragraph boundaries, then on sentence boundaries, then on commas, etc., then inside a sentence. But never split inside links, images. And make sure the last segment is still a meaningful post, not just a leftover fragment.

o3 was super helpful in the dynamic programming part. I also added manual splitting hints, using ---. Now, if I insert ---, I can force a split so that an image appears in the first post, for example.

Moving all my blogs over to @astro.build. Substack is getting more and more bloated; it feels like it's becoming another Medium in the long term. @ghost.org is painful with Markdown-based workflows. They started with Markdown but went full-on with a WYSIWYG editor.

Even the data format is now the serialization format of their editor (Lexical). Finding a solution for newsletters won't be easy; it was really nicely integrated in Substack. Maizzle seems to offer Markdown-to-email workflows - they even have an official guide for it.

Crossposter progress update: Posting on bsky works! Amazing DX and super friendly dev community on Discord. Posting on X works! Terrible DX, scary low quota + returns wrong quota information in response headers. I have no idea when it blocks me and for how long.

Also, interestingly the most popular libraries haven't been updated to support the current v2 endpoints, so had to research everything and implement it myself with requests_oauthlib. I understand why developers abandoned this platform though.

Posting on LinkedIn works! The official documentation feels like an LLM hallucination, totally contradicting itself. Next one is optimal splitting into threads.