> and a complete 15-second connectivity dropout every few minutes?
> I can’t seem to emulate the connection dropout, but the 10% packet loss should be harsh enough. ... Still, it’s Bad Enough.)
The total dropout is surprisingly bad, probably because it kills a lot of "are we alive?" checks... then when things come back, they all hammer the crappy link and everything just dies in a way that all too often doesn't recover.
Seriously, more developers need to eat their own dogfood on the subway, or in the back of a grocery store that's surprisingly well RF-shielded, or in a modern steel-reinforced-concrete building but without WiFi (so you're on cellular data which can't quite make it through the building skin), or....
The design considerations for systems used on a $6/MB network, where you don't want to transmit anything unless you really have to, will be different from the ones on a patchy cellular network, where you want to keep sending packets to see if you're online yet. It's impossible to make an app that works well on both types of networks without knowing which one it's on - unless it's a fully offline app.
Applications designed to work well over satellite or narrowband radio networks (which are inherently patchy) work just as well on cellular networks.
It's an extremely common requirement for public safety applications, such as blue force tracking and PTT voice for the application to be able to use either depending on what's available at that moment.
> Discord will sometimes just kick you to a loading screen if it thinks your internet isn’t working. If it doesn’t do that, it works pretty okay.
On Android, falling back to EDGE/EGPRS makes Discord just not work at all. I get it - downloading profile pictures and media is something you cannot realistically expect, but being able to receive notifications and text content on currently selected channel is a problem that should have been solved way before $current_year.
Yep, it’s been solved many times but this is one of the unfortunate side effects of these companies reinventing the wheel every 10 years.
The higher amounts of memory, faster CPUs, more disk space, and constant fast internet are all assumed to be there.
Unless you force the developers (and QA if that’s a thing) to use the software with those things constrained, it’s going to suck.
There was a blog post that eludes me now from about 10 years ago where a developer that lived on a terrible connection detailed how Firefox regressed progressive loading.
95% of the page would be there in an acceptably readable form. The connection would then get interrupted and rather than putting an error somewhere outside of the page and leaving the page as-is partially rendered, it would just wipe out the whole thing and show the connection timed out page.
I don’t think they ever fixed this despite it being user hostile behavior for people with poor connections.
On macOS one can use the traffic shaper dummynet(4), controlled with the dnctl(8) command, which has a nice man page that describes it.
It's always surprising to see how apps degrade under high latency connections and is a good way to test how users will actually experience things in less-than-ideal conditions.
I'm not sure if the author will be reading this, but I was just curious after reading it's pronoun page, it says it prefers to refer to itself in the third person inanimate, but uses first person pronouns in this article. Are the pronoun choices new, or was there some other choice made specifically for this article?
As I understand it, generally it prefers being referred to in the third person with inanimate it/its pronouns, including by itself, but in a professional setting they and she can be acceptable. And to clarify, I'm not trying to "call it out" on its mistake or something, I'm just trying to understand
Your curiosity is welcome, don't heed the sibling commenter: they essentially seem to be acting like a troll, most of their comments are flagged.
Then again, I don't have an answer here, just wanted to offset the negativity. Nice blog post though, some of the other comments are pretty cool, especially the mentions of the "clumsy" tool.
Yeah, I ended up asking some of my LGBT friends and we had a bit of a discussion about the circumstances of using "it" and how it can feel uncomfortable sometimes
I unintentionally did this recently on the hardware side by messing up crimping my internet cable and not pushing it all the way. Some things like Teams were surprisingly resilient even with 8% packet loss, probably due to its realtime nature
> If you want to test services running on localhost, replace enp3s0 with lo. Though some other programs on your system may Not Like It if localhost is slow, so do that at your own risk :3 (Be sure to replace enp3s0 with lo on the undo script!)
In reality, lo will hate to be slow, esp. any application working through local network sockets (cough X11 cough). I experienced this in the olden times of Fedora 4. Somehow I (or a bug) managed to route local network sockets through my eth0. The more load the card has, the slower the X11 applications were. Esp. during launch.
I had to add another card and use it for external traffic, leaving eth0 free.
No, the dot was inside the quotes on purpose. If you want to go the typographic way, you have the wrong kind of single quotes in your message (' vs. ’) and of course the wrong kind of double quotes. Having the comma outside the quotes is considered ok-ish, especially in the programming world, but it should usually be inside.
Regarding the missing dot for your final sentence it’s alright; the smiley can sometimes be considered a replacement for it.
> Having the comma outside the quotes is considered ok-ish, especially in the programming world, but it should usually be inside.
I wouldn't go so far with the 'should'. The recommendation only really applies when you are typesetting a book (specifically a novel) or something like that. Text on the web is still so ugly, that isolated demands for aesthetics seem a bit misguided.
I often experience this sort of connection in Germany, either because of our outdated infrastructure or because my data plan ran out and I’m on the almost-no-internet speed.
I test for these things. Developer Tools lets you see how your website performs on such connections, and how long it takes to get a usable page.
I always dread the moment we cross the French German border by train when visiting my family. The internet cuts out basically immediately, it's really impressive, especially on the Saarbrücken route.
Yup, I faced the very same recently crossing back into Germany from Denmark. Suddenly, nothing worked anymore. I dread the time I have to take the train to a different city, as Internet mostly only works when close to the actual stations. It's even worse now that many routes got longer as the trains get diverted due to maintenance work.
Second that. The state of internet in Germany is what always gets me thinking about how things will work when speed is slow, connections are spotty or you get offline. So many problems with Spotify in particular, as even when it detects that it is offline, it still insists to try fetching assets related to content that was already downloaded.
It's very different on location in Europe. Where I live I have realized we are a bit spoiled. I was biking through the (small) forest outside Bonn in Germany. This used to be the capital during the east germany thing. It was impossible to access internet for the GPS game I'm playing (turfgame.com) so I had to turn off GPS and get back to the road to be able to take the zones. This keeps happening the whole time even driving around on smaller roads.
South sweden this almost never happens, here in north Sweden in can happen that you drop down to 2G and can only do SMS but then you really have to go deep into the forests. Up in the mountains you will lose connection completely though. Especially now when they shut down the older networks that has longer reach.
As sibling post said, it just really depends on the location in Europe. Here in Turin (NW Italy), everything is 4G-LTE/5G and they're phasing out 3G completely.
My mom used to be on rural dialup, with 30Kbps on a good day. Back then (200x) you could access the internet that way. Facebook, Gmail, you name it (Gmail definitely worked better in its basic HTML mode ... RIP). It did take patience but everything worked.
Then things got more modern, and she's on a cellular data plan. Once we ran it out on purpose near the end of the month, to see what the 128Kbps fallback is like. 4x as fast as she used to have, good enough, right?
Nope. Half the web didn't load at all, due to timeouts loading resources and such.
And now people are complaining about falling back to super slow 3G.
But with everything bloated 100x since the 200x's, everything has gotten 100x better, right?
I have a fairly basic, though recent, Android phone (Moto G Play 2023). I use an app called Flashfood. It was crisply performant. Then an update got pushed that made mainly cosmetic changes... and slowed it down by a factor of 10-20. Now it feels glacial on the same phone. Do they care? Maybe they should. The super recent, $1K smartphone crowd may not be exactly the Flashfood crowd. My usage of the app is way down now, because it's just not worth the aggravation.
Is there a html standard thingy to tell the browser "This resource is optional, don't load it if the connection is already slow"? I'm thinking of optional fonts, JS or maybe changing the quality of images. You could probably do this in JS, but it'd be pretty helpful if there was a standard for this
This reminds my of 'chaos engineering' and the approach that Shopify took with 'Toxiproxy.' Toxyproxy is this elegant system that provides a REST API for spawn proxy servers. The proxy instances can have 'toxics' added to them that change the connections properties. E.g. you can add latency, packet drops, even experiment with slicing up packets. It allows for something like writing deterministic tests that test whether your software works under many different network conditions. I think its honestly a really smart design.
Not only should developers design for slow internet, they should design for no internet. Shockingly, many parts of the US don't have solid cell phone coverage. Even more cell phone towers have broken uplinks or broken configurations; your phone connects to the cell, but no data flows. Cells get overloaded - at fun things like sports events and concerts. They also get overloaded at very not-fun events like natural disasters where everyone is standing around the (very overloaded) Cell On Wheels tower, trying to get a message out to their loved ones that they're OK or need help, or trying to reach their insurance company, or access a government website to get info about disaster relief, etc.
It's infuriating how many smartphone apps will show you a screen full of the information you need while online, and then when they lose internet connectivity due to a dead spot in cell coverage, yank it away leaving you staring at a blank screen with a spinning progress indicator.
It's also infuriating how so many apps are completely, totally non-functional if they don't have internet, if only because they're not actually a native smartphone app, but a website being run in gussied up web browser instance.
I remember in the 00s Firefox or Opera had an nice feature to load pages exclusively from cache. I used this feature a lot to check all pages I had surfed through when my parents blocked the internet access to encourage me to get back in reality. Ohh sweet times..
Yeah like WTF. It's even teasing you by momentarily showing the already rendered page but then goes "hey wait let me try to reload the page just for shits and giggles" only to show you that "hey can't reach the server, are you offline?" a second later.
Government and public services have to design for it yes. Not sure if WCAG covers it but seems not.
Private companies issue is that people with slow internet or no internet are not customers for them. It costs loads of money to implement decent offline experience for a web app and there is no one to pay for it.
> and a complete 15-second connectivity dropout every few minutes?
> I can’t seem to emulate the connection dropout, but the 10% packet loss should be harsh enough. ... Still, it’s Bad Enough.)
The total dropout is surprisingly bad, probably because it kills a lot of "are we alive?" checks... then when things come back, they all hammer the crappy link and everything just dies in a way that all too often doesn't recover.
Seriously, more developers need to eat their own dogfood on the subway, or in the back of a grocery store that's surprisingly well RF-shielded, or in a modern steel-reinforced-concrete building but without WiFi (so you're on cellular data which can't quite make it through the building skin), or....
Or on Inmarsat BGAN, where data costs $6/MB (yes, six dollars per megabyte).
The design considerations for systems used on a $6/MB network, where you don't want to transmit anything unless you really have to, will be different from the ones on a patchy cellular network, where you want to keep sending packets to see if you're online yet. It's impossible to make an app that works well on both types of networks without knowing which one it's on - unless it's a fully offline app.
Applications designed to work well over satellite or narrowband radio networks (which are inherently patchy) work just as well on cellular networks.
It's an extremely common requirement for public safety applications, such as blue force tracking and PTT voice for the application to be able to use either depending on what's available at that moment.
> Discord will sometimes just kick you to a loading screen if it thinks your internet isn’t working. If it doesn’t do that, it works pretty okay.
On Android, falling back to EDGE/EGPRS makes Discord just not work at all. I get it - downloading profile pictures and media is something you cannot realistically expect, but being able to receive notifications and text content on currently selected channel is a problem that should have been solved way before $current_year.
Yep, it’s been solved many times but this is one of the unfortunate side effects of these companies reinventing the wheel every 10 years.
The higher amounts of memory, faster CPUs, more disk space, and constant fast internet are all assumed to be there.
Unless you force the developers (and QA if that’s a thing) to use the software with those things constrained, it’s going to suck.
There was a blog post that eludes me now from about 10 years ago where a developer that lived on a terrible connection detailed how Firefox regressed progressive loading.
95% of the page would be there in an acceptably readable form. The connection would then get interrupted and rather than putting an error somewhere outside of the page and leaving the page as-is partially rendered, it would just wipe out the whole thing and show the connection timed out page.
I don’t think they ever fixed this despite it being user hostile behavior for people with poor connections.
On macOS one can use the traffic shaper dummynet(4), controlled with the dnctl(8) command, which has a nice man page that describes it.
It's always surprising to see how apps degrade under high latency connections and is a good way to test how users will actually experience things in less-than-ideal conditions.
I'm not sure if the author will be reading this, but I was just curious after reading it's pronoun page, it says it prefers to refer to itself in the third person inanimate, but uses first person pronouns in this article. Are the pronoun choices new, or was there some other choice made specifically for this article?
That pronoun page is very hard to follow so who knows.
As I understand it, generally it prefers being referred to in the third person with inanimate it/its pronouns, including by itself, but in a professional setting they and she can be acceptable. And to clarify, I'm not trying to "call it out" on its mistake or something, I'm just trying to understand
Your curiosity is welcome, don't heed the sibling commenter: they essentially seem to be acting like a troll, most of their comments are flagged.
Then again, I don't have an answer here, just wanted to offset the negativity. Nice blog post though, some of the other comments are pretty cool, especially the mentions of the "clumsy" tool.
Yeah, I ended up asking some of my LGBT friends and we had a bit of a discussion about the circumstances of using "it" and how it can feel uncomfortable sometimes
[dead]
On windows, clumsy[1] is a great tool for this. The animated gif on their homepage is a super intuitive demo of the functionality too.
1: https://jagt.github.io/clumsy/
I unintentionally did this recently on the hardware side by messing up crimping my internet cable and not pushing it all the way. Some things like Teams were surprisingly resilient even with 8% packet loss, probably due to its realtime nature
From the article:
> If you want to test services running on localhost, replace enp3s0 with lo. Though some other programs on your system may Not Like It if localhost is slow, so do that at your own risk :3 (Be sure to replace enp3s0 with lo on the undo script!)
In reality, lo will hate to be slow, esp. any application working through local network sockets (cough X11 cough). I experienced this in the olden times of Fedora 4. Somehow I (or a bug) managed to route local network sockets through my eth0. The more load the card has, the slower the X11 applications were. Esp. during launch.
I had to add another card and use it for external traffic, leaving eth0 free.
On macOS, there is (was?) "Network Link Conditioner", used to be part of XCode.
It still exists and is a part of the “Additional Tools for Xcode.” It is also builtin on iOS when the developer mode is active.
Side node: It’s Xcode (lowercase c).
(Edited to put the Xcode note last.)
You put the most interesting part of your comment the last.
BTW, it's "Additional Tools for Xcode", without the final dot (sorry I couldn't resist) :-)
No, the dot was inside the quotes on purpose. If you want to go the typographic way, you have the wrong kind of single quotes in your message (' vs. ’) and of course the wrong kind of double quotes. Having the comma outside the quotes is considered ok-ish, especially in the programming world, but it should usually be inside.
Regarding the missing dot for your final sentence it’s alright; the smiley can sometimes be considered a replacement for it.
Depending on your typographic conventions, it's customary to include final punctuation inside of parens and quotations.
It irks computer programmers, I guess, but people used to do this for aesthetic reasons for books.
Yup. That’s why I put it inside the quotes.
> Having the comma outside the quotes is considered ok-ish, especially in the programming world, but it should usually be inside.
I wouldn't go so far with the 'should'. The recommendation only really applies when you are typesetting a book (specifically a novel) or something like that. Text on the web is still so ugly, that isolated demands for aesthetics seem a bit misguided.
I often experience this sort of connection in Germany, either because of our outdated infrastructure or because my data plan ran out and I’m on the almost-no-internet speed.
I test for these things. Developer Tools lets you see how your website performs on such connections, and how long it takes to get a usable page.
I always dread the moment we cross the French German border by train when visiting my family. The internet cuts out basically immediately, it's really impressive, especially on the Saarbrücken route.
Yup, I faced the very same recently crossing back into Germany from Denmark. Suddenly, nothing worked anymore. I dread the time I have to take the train to a different city, as Internet mostly only works when close to the actual stations. It's even worse now that many routes got longer as the trains get diverted due to maintenance work.
Second that. The state of internet in Germany is what always gets me thinking about how things will work when speed is slow, connections are spotty or you get offline. So many problems with Spotify in particular, as even when it detects that it is offline, it still insists to try fetching assets related to content that was already downloaded.
It was really weird going back to Europe and have my phone on 3g half the time. I just never see that in Japan. It’s either 4/5g or nothing at all.
It's very different on location in Europe. Where I live I have realized we are a bit spoiled. I was biking through the (small) forest outside Bonn in Germany. This used to be the capital during the east germany thing. It was impossible to access internet for the GPS game I'm playing (turfgame.com) so I had to turn off GPS and get back to the road to be able to take the zones. This keeps happening the whole time even driving around on smaller roads.
South sweden this almost never happens, here in north Sweden in can happen that you drop down to 2G and can only do SMS but then you really have to go deep into the forests. Up in the mountains you will lose connection completely though. Especially now when they shut down the older networks that has longer reach.
I mean, in a valley between several hundred meter tall mountains I’d expect my signal to drop, but I often have to go pretty far.
The 4g drops I’m talking about are on the train network between two major cities.
As sibling post said, it just really depends on the location in Europe. Here in Turin (NW Italy), everything is 4G-LTE/5G and they're phasing out 3G completely.
My mom used to be on rural dialup, with 30Kbps on a good day. Back then (200x) you could access the internet that way. Facebook, Gmail, you name it (Gmail definitely worked better in its basic HTML mode ... RIP). It did take patience but everything worked.
Then things got more modern, and she's on a cellular data plan. Once we ran it out on purpose near the end of the month, to see what the 128Kbps fallback is like. 4x as fast as she used to have, good enough, right?
Nope. Half the web didn't load at all, due to timeouts loading resources and such.
And now people are complaining about falling back to super slow 3G.
But with everything bloated 100x since the 200x's, everything has gotten 100x better, right?
I have a fairly basic, though recent, Android phone (Moto G Play 2023). I use an app called Flashfood. It was crisply performant. Then an update got pushed that made mainly cosmetic changes... and slowed it down by a factor of 10-20. Now it feels glacial on the same phone. Do they care? Maybe they should. The super recent, $1K smartphone crowd may not be exactly the Flashfood crowd. My usage of the app is way down now, because it's just not worth the aggravation.
Is there a html standard thingy to tell the browser "This resource is optional, don't load it if the connection is already slow"? I'm thinking of optional fonts, JS or maybe changing the quality of images. You could probably do this in JS, but it'd be pretty helpful if there was a standard for this
Unfortunately not. The standard way of implementing this functionality is to install uBlock Origin.
Sounds useful for some tests that I have to do this week for a bug at $work. And looks like `tc` works with Docker too, to avoid messing with my local wnv, e.g. https://medium.com/@kazushi/simulate-high-latency-network-us...
Impressive that this same person has 2 front page HN articles in one day. I don't think I've seen that before.
make that 3 =)
I've noticed this effect pretty often, as one high-profile article leads people to go looking at the author's other work and then submit it.
I guess it was quite common in the olden days?
netem is especially useful when paired with network namespaces, that way you can selectively apply different profiles to different process trees.
This reminds my of 'chaos engineering' and the approach that Shopify took with 'Toxiproxy.' Toxyproxy is this elegant system that provides a REST API for spawn proxy servers. The proxy instances can have 'toxics' added to them that change the connections properties. E.g. you can add latency, packet drops, even experiment with slicing up packets. It allows for something like writing deterministic tests that test whether your software works under many different network conditions. I think its honestly a really smart design.
Very cool.
For future me: https://github.com/Shopify/toxiproxy
Not only should developers design for slow internet, they should design for no internet. Shockingly, many parts of the US don't have solid cell phone coverage. Even more cell phone towers have broken uplinks or broken configurations; your phone connects to the cell, but no data flows. Cells get overloaded - at fun things like sports events and concerts. They also get overloaded at very not-fun events like natural disasters where everyone is standing around the (very overloaded) Cell On Wheels tower, trying to get a message out to their loved ones that they're OK or need help, or trying to reach their insurance company, or access a government website to get info about disaster relief, etc.
It's infuriating how many smartphone apps will show you a screen full of the information you need while online, and then when they lose internet connectivity due to a dead spot in cell coverage, yank it away leaving you staring at a blank screen with a spinning progress indicator.
It's also infuriating how so many apps are completely, totally non-functional if they don't have internet, if only because they're not actually a native smartphone app, but a website being run in gussied up web browser instance.
Even modern desktop and mobile browsers are bad at this.
Me: I’m on a plane (with no data), good opportunity to go through all my open tabs of articles I haven’t read yet.
Browser: great time to try refreshing the page!
I remember in the 00s Firefox or Opera had an nice feature to load pages exclusively from cache. I used this feature a lot to check all pages I had surfed through when my parents blocked the internet access to encourage me to get back in reality. Ohh sweet times..
Firefox has an option to set it offline
https://superuser.com/questions/214132/simple-way-for-browsi...
Yeah like WTF. It's even teasing you by momentarily showing the already rendered page but then goes "hey wait let me try to reload the page just for shits and giggles" only to show you that "hey can't reach the server, are you offline?" a second later.
Government and public services have to design for it yes. Not sure if WCAG covers it but seems not.
Private companies issue is that people with slow internet or no internet are not customers for them. It costs loads of money to implement decent offline experience for a web app and there is no one to pay for it.
I recently had to rely on the wifi hotspot from my mobile phone for a few days, because of an ill-timed switch of home broadband providers.
I found many things that I wanted to do infinitely more frustrating on a spotty connection, then on no connection.