Comcast: Simulating shitty network connections so you can build better systems
github.com
github.com
I recall at least one other project with this kind of naming sense: https://github.com/auchenberg/volkswagen
which was named after https://en.wikipedia.org/wiki/Volkswagen_emissions_scandal
and is currently the top result for "volkswagen test library".
"So the next time you complain about your phone service, why don't you try using two Dixie Cups with a string? We don't care. We don't have to. We're the phone company." -Lilly Tomlin as Ernestine
Perhaps he should rebrand it "Xfinity." That seems like a perfectly harmless name that is in no way associated with poor products and crap customer service.
Comcast the ISP doesn't have to actively enforce against Comcast brand tires or Comcast brand coffee.
A lot of people are confused about this, and big companies use "we have to actively enforce" as an excuse to crush companies in unrelated fields. But you don't.
I've had this project starred for at least 7 years, so perhaps Comcast legal has more of a sense of humor than we're giving them credit for.
Trademark and copyright tend to requirement historic evidence of enforcement to be enforceable in the future. If they fail to enforce this and it's significantly in the public sphere, it could be used as evidence the trademark and copyright no longer apply, depending on the judge.
However, if you do get the eventual C&D, you might as well tweet about it and get another 15mins of fame!
*Edit, if you think that a corporate legal team is allowed to display a sense of humor, you'd be very mistaken. Sure, some might be cognizant of their corporate overlords, but to think that they would let something like this slide once made aware of it would/could be an expensive mistaken idea to have
https://www.uspto.gov/trademarks/basics/what-trademark
"A common misconception is that having a trademark means you legally own a particular word or phrase and can prevent others from using it. However, you don’t have rights to the word or phrase in general, only to how that word or phrase is used with your specific goods or services.
For example, let's say you use a logo as a trademark for your small woodworking business to identify and distinguish your goods or services from others in the woodworking field. This doesn't mean you can stop others from using a similar logo for non-woodworking related goods or services."
Comcast the shitty network simulator should not be confused with Comcast the Internet Service Provider. Joke really is on them if they ever file a lawsuit.
Comcast has like 50 trademarks (look them up on TESS), and they impact on everything from cable to internet services to hats and coffee mugs, basically anything the company makes or does. Let's take COMCAST BUSINESS as a random example. This trademark is registered for a variety of categories for which confusion can easily occur, but one stands out (italics mine):
> "IC 009. US 021 023 026 036 038. G & S: Downloadable cloud-based software used to back up business data; downloadable cloud-based software used to share business data; downloadable cloud-based software used to send and manage secure documents; *downloadable cloud-based software used to manage, secure and protect computer networks;* downloadable cloud-based software used to create and transmit documents with electronic signatures; downloadable cloud-based software used to manage telephone systems; downloadable cloud-based software used to manage advanced telephone features; downloadable cloud-based software used to provide web conferencing; downloadable cloud-based software used to monitor business security systems; *downloadable cloud-based software used to detect and remediate computer viruses, worms, trojans, spyware, adware, malware and unauthorized data and programs;* high-definition multimedia interface cables; and Ethernet and wireless networking hardware and computer hardware and components thereof."
Then there's this one:
> "IC 038. US 100 101 104. G & S: *Providing high-speed access to the Internet, mobile networks, wired and wireless networks and other electronic communications networks;* telecommunication access services; telecommunications gateway services; wireless broadband communication services; wireless broadband telecommunications services; telecommunications services, namely, voice, video, and data transmissions provided through the use of cable television distribution facilities; telecommunication services, namely, transmission of voice, data, graphics, images, audio and video by means of wireless communication networks; *high-speed electronic data interchange services provided via modems, hybrid fiber coaxial cable networks, routers, and servers;* electronic, local and long distance transmission of voice, data, and graphics by means of cable, telephone, wireless, ISDN, and technologies; telephone communication services; providing voice communications services via cable, fiber optics, the internet, wired and wireless networks, mobile networks and other electronic communications networks; providing fiber optic network services; Voice over Internet Protocol (VoIP) services; cable television services; cable television broadcasting services; cable television transmission services; providing access to telecommunication networks; provision of telecommunication access to video and audio content via video-on-demand, interactive television, pay per view, and pay television subscription services; video-on-demand transmission services; video conferencing services; wireless PBX services; cloud-based PBX services; streaming of video and audio material via the Internet, wired and wireless networks, mobile networks and other electronic communications networks; telecommunications services, namely, providing advanced calling features and leasing or rental of telecommunications equipment; leasing or rental of telecommunications equipment; computer network access services by means of a metro Ethernet; electronic transmission and streaming of digital media content for others via the Internet, wired and wireless networks, mobile networks and other electronic communications networks; cloud-based communications services in the nature of instant messaging, telephony, audio and video conferencing, screen sharing, file transfer, call control and management, voice mail, e-mail, SMS and facsimile services; and providing wireless hot spots."
And that's just the first thing I picked out. It goes on like this. So, yeah. Comcast the network degradation simulation software almost unquestionably overlaps with Comcast's trademarks.
And my second brief thought was: maybe they forgot to turn it off for me?
Wish I was kidding.
At least, this was the original intention. In today's more corporation-friendly world, more emphasis is being put on the corporations interests unfortunately.
A couple citations I liked:
https://queue.acm.org/detail.cfm?id=2655736
https://blog.acolyer.org/2014/12/18/the-network-is-reliable/
No, comcast. :)
Jokes aside, that paper is very worth reading. And HN readers will recognize one of the authors as the creator of Jepsen, of distributed database testing fame.
comcast --stop
Which just makes it more frustrating.
Driving around in Northern Canada, as I am often wont to do with my partner; you’re without cell service at least half the time; and even when you do have cell service - data is very uncommon.
My girlfriend and I ran into this issue twice with Google Maps, tested if Apple Maps exhibited the same behaviour, and since it hadn’t - neither of us have actually used Google Maps since.
This is - of course - iOS-specific advice.
It used to. It was intentionally removed. I say this as a customer who read the update notes, not as an employee of Google.
I'll let you guess why they did. I have my opinion why and it is not flattering to the company, to say the least.
Hey, who remembers Street View cars collecting SSIDs...
You can find that in the Additional Tools for Xcode download, in the Hardware folder.
I worked out that if it happened to me, I could use the OSX link conditioner (built in to XCode) to degrade the connection realistically. Coming back after he'd finished his tirade with a 'sorry, my internet capped out, could you repeat that' took a lot of the heat out of the situation.
Google Maps is probably the most egregious example of that: you are likely to need it outside of your usual Wifi, and possibly where cellular coverage is poor. Why not offer reasonable off-line support? The Apple TV app is confusing too: they offer the option to download shows (like Netflix does) but the feature is essentially unusable.
Offline means you're dealing with conflict detection, resolution, and caching strategies. Do you do multi-master? Have a single remote master but cache commands as a fallback? How do you test your solution?
And if you're dealing with the web, then you have to deal with IndexedDB which can sometimes be nuked by the browser, or have show stopping bugs (looking at you safari). There's also limited capacity compared to severside. Even if you use a library, under the hood they all use IndexedDB - there is no getting away from its limitations.
If anyone's interested in this stuff, I'd love to chat. I'm between contracts and trying to make an old app of mine work offline, lots of fun but also challenging.
A more complicated approach is to have transform operations for state changes, with a version variable, then the version variable is incremented on on a central server each change and decide in which order the transform operations should be applied.
None of the approaches you are talking about here are new. There are many ways to implement this. The parent knows this and simply abstractly said you need to "do conflict detection". And yes that is an issue. A solvable one which has implications though and the level of challenge depends on the domain and the number of operations (potentially dependent on each other operations) that you made while offline. In your domain, do multiple users usually edit the same 'thing' simultaneously or at least with a frequency higher than the amount of time you are offline? If so you have a challenge on your hand.
A simple example of this is something we all do a lot. Coding. If you use say git and work offline 8h a day and push at the end of the day and you 10 other developers working on the same code base and your code and your work is structured in a way where all of you need to make changes to the same part of the code base you are going to be in a world of hurt of solving conflicts.
Luckily code structure and work breakdown can be done in a way where you will only have minimal conflicts. Git also chose a specific resolution strategy: last one to the table has to deal with conflict resolution.
Depending on your domain and how many dependent and complicated operations you allowed the user to make this can be really frustrating for users and impossible to resolve in an automated way.
Of course simply providing an offline mode for your email program in a mailbox only you have access to is a much simpler domain with easily automatable resolution strategies that are easy for users to understand as well.
Disclosure: I work for Automattic.
users of google maps / apple TV don't have to send 'write' operations except for a few features (set-favorite, etc)
Offline maps are nice too, but this wouldn't have helped him get his navigation route back.
I've experienced many of these issues through the years too. And a dedicated offline navigation program is probably the way to go.
I do think your tone is somewhat unnecessarily dismissive though.
Sure you can download local maps. but that just saves some bandwidth. Neither Search nor Routing works offline. Without Routing, the app loses most of its uses. Not having Search wouldn't be a problem if you could pick a location on a map and ask: what's there? or even flag it––but you can't. You have to find the name otherwise and search for that, often zooming ridiculously close to get the location you are interested in to appear.
In today's age, with multi-megabyte 4K background videos, and enormous dependency chains, that's a hard sell.
I dealt with it, by writing my own backend, with a fairly optimized API, and consulting it in JIT "bursts."
That’s considered “square,” these days.
The name is choice, I almost hope you get a nasty letter so you can share it with the rest of us. Hard to search for though...
Might I offer.... Concast?
We developed software for retail point of sale systems, and some of the stores we had to support had all sorts of awful infrastructure, both inside the store and between the store and the “rest of the world.”
I can’t remember the name, but I believe it was an Israeli company, and the device was programmed/configured through Visio (iirc).
This is incredibly useful when smoke testing large scale distributed systems or for test/development of protocols intended to be used over dicey connections.
Here's an idea: take this list and embed it into the program so that you can execute it like this:
comcast -use gprsI'm not completely unsympathetic to people stuck with DSL since I grew up with dial-up and that's still all my parents can get (apart from wireless), but I'm absolutely entitled to and will continue to bitch about Comcast's service when relevant.
I could manually do a DNS lookup and plug the IP address in, but I don't know enough about internet protocols to know whether that would work with Cloudflare etc.
With that said, you could try to limit things based on the IP range of the resolved IP of a domain. Other services the same company runs might be a casualty in this cross-fire, but maybe that's not a problem.
Make this:
$ comcast --device=eth0 --latency=250 --target-bw=1000 --default-bw=1000000 --packet-loss=10% --target-addr=8.8.8.8,10.0.0.0/24 --target-proto=tcp,udp,icmp
Into this: $ comcast --device=eth0 --latency=250 --target-bw=1000 --default-bw=1000000 --packet-loss=10% --target-addr=$(whois $(dig +short google.com a) | grep -i cidr | cut -d ':' -f 2 | xargs) --target-proto=tcp,udp,icmp
The `whois ... dig .. grep cidr` stuff gets a CIDR from the currently resolved IP address from a DNS query. So probably you want to add this as a systemd service or something, which restarts each five minutes or something (as what the dig command returns will change over time), and you probably want to add multiple domains (like the domains they use for APIs, CDNs and so on) as well.Luckily most of these big sites tend to use a low number of anycast IP addresses so it may be pretty effective. Sometimes they will even publish IP ranges.
Teddit?
piped.kavin.rocks but through a proxy in a different country?
There are some ways to build in some latency. :)
I like Twitter a lot, but when browsing or doomscrolling I force myself to use Nitter on one of the public instances that gets rate limited a lot, which keeps me from using it all the time.
I even wonder what would happen if it was hired in Europe, what would comcast do. Hire lawyers in Europe to represent them? On the basis of a US law?