Zsolt Ero
@hyperknot.com
Building https://openfreemap.org and http://maphub.net
Writing on http://blog.hyperknot.com
Loves paragliding
Writing on http://blog.hyperknot.com
Loves paragliding
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:
August 11, 2025 at 9:20 AM
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:
I log into Cloudflare and I see THIS for the last 24 hours.
What? 3 billion requests in 24 hours? What on Earth is that? Also, 215 TB of traffic from tiny, 70 kB files?
The article continues on my blog:
blog.hyperknot.com/p/openfreemap-survived-100000-requests
What? 3 billion requests in 24 hours? What on Earth is that? Also, 215 TB of traffic from tiny, 70 kB files?
The article continues on my blog:
blog.hyperknot.com/p/openfreemap-survived-100000-requests
August 9, 2025 at 3:30 PM
I log into Cloudflare and I see THIS for the last 24 hours.
What? 3 billion requests in 24 hours? What on Earth is that? Also, 215 TB of traffic from tiny, 70 kB files?
The article continues on my blog:
blog.hyperknot.com/p/openfreemap-survived-100000-requests
What? 3 billion requests in 24 hours? What on Earth is that? Also, 215 TB of traffic from tiny, 70 kB files?
The article continues on my blog:
blog.hyperknot.com/p/openfreemap-survived-100000-requests
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.
I don't want to add JS based scrollbars, but it's really hard to fix this in a cross-platform way.
July 11, 2025 at 11:03 PM
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.
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.)
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.)
June 19, 2025 at 12:43 PM
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.)
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.)
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.
May 30, 2025 at 10:58 PM
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.
Perplexity – which I thought would give the best answer as it can research online – gave a totally useless but super-long answer.
May 29, 2025 at 6:04 PM
Perplexity – which I thought would give the best answer as it can research online – gave a totally useless but super-long answer.
o3 also gave a nice answer, explaining that it's a change introduced in iOS 16:
May 29, 2025 at 6:04 PM
o3 also gave a nice answer, explaining that it's a change introduced in iOS 16:
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" :-)
May 29, 2025 at 6:04 PM
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" :-)
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.
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.
May 29, 2025 at 6:04 PM
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.
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.
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.
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.
May 22, 2025 at 7:45 PM
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.
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.
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!
BTW, Bluesky API is amazing!
May 20, 2025 at 3:56 PM
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!
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?
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?
May 19, 2025 at 12:16 PM
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?
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?
Looking at @astro.build source code be like:
returning a template string of JS code,
which imports template strings of image paths,
which maps regex-parsed HTML matches to async image objects,
all while JSON-parsing a stringified regex-escaped string!
returning a template string of JS code,
which imports template strings of image paths,
which maps regex-parsed HTML matches to async image objects,
all while JSON-parsing a stringified regex-escaped string!
May 18, 2025 at 6:07 PM
Looking at @astro.build source code be like:
returning a template string of JS code,
which imports template strings of image paths,
which maps regex-parsed HTML matches to async image objects,
all while JSON-parsing a stringified regex-escaped string!
returning a template string of JS code,
which imports template strings of image paths,
which maps regex-parsed HTML matches to async image objects,
all while JSON-parsing a stringified regex-escaped string!
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.
May 18, 2025 at 9:49 AM
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.
I'm developing a local-first app and found conflicting information online about how much data I can actually store in localStorage.
I found "Browser Storage Abuser", a 12 years old (!) website for stress testing the limits of different local storage options in browsers.
I found "Browser Storage Abuser", a 12 years old (!) website for stress testing the limits of different local storage options in browsers.
May 15, 2025 at 2:53 PM
I'm developing a local-first app and found conflicting information online about how much data I can actually store in localStorage.
I found "Browser Storage Abuser", a 12 years old (!) website for stress testing the limits of different local storage options in browsers.
I found "Browser Storage Abuser", a 12 years old (!) website for stress testing the limits of different local storage options in browsers.
OpenAI o3 hallucinations are on a different level compared to anything I've seen before.
Here o3 hallucinated a whole ecosystem! Everything here is 100% hallucinated!
Here o3 hallucinated a whole ecosystem! Everything here is 100% hallucinated!
May 12, 2025 at 12:52 PM
OpenAI o3 hallucinations are on a different level compared to anything I've seen before.
Here o3 hallucinated a whole ecosystem! Everything here is 100% hallucinated!
Here o3 hallucinated a whole ecosystem! Everything here is 100% hallucinated!
Here is a small snippet I'm using to 'replace all' across all files in a directory tree. It uses ripgrep so it's super optimised, much faster compared to grep.
May 12, 2025 at 10:09 AM
Here is a small snippet I'm using to 'replace all' across all files in a directory tree. It uses ripgrep so it's super optimised, much faster compared to grep.
I love when LLMs make a typo! It's so much out of their character that it feels like catching a shooting star. Here, Gemini wrote "Rable" instead of "Table."
May 11, 2025 at 9:16 PM
I love when LLMs make a typo! It's so much out of their character that it feels like catching a shooting star. Here, Gemini wrote "Rable" instead of "Table."
Today I learned, sitting on a train: Ping packets can still return after 20 seconds!
You'd think that your internet connection is broken, but no, somewhere out there, there is a packet destined for your laptop, arriving 20 seconds later!
You'd think that your internet connection is broken, but no, somewhere out there, there is a packet destined for your laptop, arriving 20 seconds later!
April 27, 2025 at 11:08 AM
Today I learned, sitting on a train: Ping packets can still return after 20 seconds!
You'd think that your internet connection is broken, but no, somewhere out there, there is a packet destined for your laptop, arriving 20 seconds later!
You'd think that your internet connection is broken, but no, somewhere out there, there is a packet destined for your laptop, arriving 20 seconds later!
like your date of birth, etc.
But you can’t archive them like this; you need to remove the password first.
I found the best command-line tool for the job to be https://github.com/qpdf/qpdf or `brew install qpdf`
Here’s how to use it:
(2/3)
But you can’t archive them like this; you need to remove the password first.
I found the best command-line tool for the job to be https://github.com/qpdf/qpdf or `brew install qpdf`
Here’s how to use it:
(2/3)
April 16, 2025 at 1:27 PM
like your date of birth, etc.
But you can’t archive them like this; you need to remove the password first.
I found the best command-line tool for the job to be https://github.com/qpdf/qpdf or `brew install qpdf`
Here’s how to use it:
(2/3)
But you can’t archive them like this; you need to remove the password first.
I found the best command-line tool for the job to be https://github.com/qpdf/qpdf or `brew install qpdf`
Here’s how to use it:
(2/3)
Office 365 isn’t just accidentally messy. Complexity is the product.
Of course it's misconfigured. That’s what they’re selling.
Meanwhile, I’ll just wait for the client to notice their email silently stopped working.
https://x.com/signulll/status/1908900460771107211
(5/5)
Of course it's misconfigured. That’s what they’re selling.
Meanwhile, I’ll just wait for the client to notice their email silently stopped working.
https://x.com/signulll/status/1908900460771107211
(5/5)
April 15, 2025 at 12:43 PM
Office 365 isn’t just accidentally messy. Complexity is the product.
Of course it's misconfigured. That’s what they’re selling.
Meanwhile, I’ll just wait for the client to notice their email silently stopped working.
https://x.com/signulll/status/1908900460771107211
(5/5)
Of course it's misconfigured. That’s what they’re selling.
Meanwhile, I’ll just wait for the client to notice their email silently stopped working.
https://x.com/signulll/status/1908900460771107211
(5/5)
We cannot reach one of our clients because their Office 365 is configured to "only accept messages from people in its organization or on its allowed senders list."
I don't mean I'm trying to cold-email someone - we've exchanged 50+ emails over the years.
(1/5)
I don't mean I'm trying to cold-email someone - we've exchanged 50+ emails over the years.
(1/5)
April 15, 2025 at 12:43 PM
We cannot reach one of our clients because their Office 365 is configured to "only accept messages from people in its organization or on its allowed senders list."
I don't mean I'm trying to cold-email someone - we've exchanged 50+ emails over the years.
(1/5)
I don't mean I'm trying to cold-email someone - we've exchanged 50+ emails over the years.
(1/5)
Thanks to @ahocevar.bsky.social, the developer behind @openlayers.org, OpenFreeMap now has an official example for OpenLayers.
March 28, 2025 at 9:18 AM
Thanks to @ahocevar.bsky.social, the developer behind @openlayers.org, OpenFreeMap now has an official example for OpenLayers.
New year, new updates on probably one of the biggest MapHub maps (both in size and effort):
UK Bus Map W.I.P by JayCrab
note: Technically it's definitely pushing MapHub's client-side code to its limits - it's a 20 MB GeoJSON or 5 MB gzip compressed.
UK Bus Map W.I.P by JayCrab
note: Technically it's definitely pushing MapHub's client-side code to its limits - it's a 20 MB GeoJSON or 5 MB gzip compressed.
January 3, 2025 at 2:52 PM
New year, new updates on probably one of the biggest MapHub maps (both in size and effort):
UK Bus Map W.I.P by JayCrab
note: Technically it's definitely pushing MapHub's client-side code to its limits - it's a 20 MB GeoJSON or 5 MB gzip compressed.
UK Bus Map W.I.P by JayCrab
note: Technically it's definitely pushing MapHub's client-side code to its limits - it's a 20 MB GeoJSON or 5 MB gzip compressed.
My X timeline is full of "AGI arrived" because of this chart.
But please notice: this chart is logarithmic on the X axis and linear on the Y axis!
If something, this proves that we'll never get to AGI by adding exponential resources for linear progress!
But please notice: this chart is logarithmic on the X axis and linear on the Y axis!
If something, this proves that we'll never get to AGI by adding exponential resources for linear progress!
December 20, 2024 at 9:17 PM
My X timeline is full of "AGI arrived" because of this chart.
But please notice: this chart is logarithmic on the X axis and linear on the Y axis!
If something, this proves that we'll never get to AGI by adding exponential resources for linear progress!
But please notice: this chart is logarithmic on the X axis and linear on the Y axis!
If something, this proves that we'll never get to AGI by adding exponential resources for linear progress!