47MB for the UI & boilerplate around the business logic.
I get that this may be the easiest way to develop and publish an application today, but it's sad that this is the direction we have taken in recent years.
Business logic size: ~20 bytes
Total app size: ~47 MB = 47,000,000 bytes
Bloat factor: 47,000,000 / 20 = 2,350,000
Let’s scale this up and say the business logic is 1 pound.
Then the whole app would weigh:
1 lb × 2,350,000 = 2,350,000 pounds
What weighs ~2.35 million pounds?
- A fully loaded Boeing 747-8: ~987,000 lbs
- Another fully loaded 747-8: ~987,000 lbs
- A blue whale: ~330,000 lbs
TOTAL: ~2,304,000 lbs
The business logic is like shipping a 1 lb object (a book, a flash drive, whatever) by loading it into two fully loaded 747s and strapping a blue whale on top.
To be fair, the author didn't make this to impress people with byte optimizations, they probably just wanted to publish an app quickly that is useful, and was familiar enough with Electron or JS to do so.
It’s not the easiest way just the most evangelized. A Qt app even would be a few lines of code, but we’ve done a good job scaring people that learning other languages is bad because we can’t ship features fast enough with non-evangelized frameworks.
I keep thinking that this could be solved by just building Electron into the OS as a shared framework so we don't have to have a separate copy for every app, but the more I dig into it, the more I realize I'm just reinventing the web browser.
A few years back I did an eval of ways to make cross platform apps, specifically to escape Electron, and came to the conclusion that ‘they all suck’ except maybe JavaFX.
Thing is, most x-platform frameworks still require a big download. Java and Python runtimes are in the same ballpark as Electron.
Your point is that an operating system, and its shell, all running on a machine, and a collection of apps, are somehow smaller than a wrapper application.
I'm curious the amount of bytes the entire stack, minus the chrome which is the complaint I believe, how many bytes that is. I would say probably a gig.
1) the dev only had a hammer and he nailed the screw in
2) the dev has 64gigs of ram and a newest CPU and doesn't care about performance issues for people on older computers... that's why you need gigs of ram just to read a weather report online.
If you want a frontend for you app, you probably just use Electron and get it over with in a few minutes instead of digging through the docs for Qt or some other framework.
Is it worth it? Probably not, since this is a single-platform app to start with, but JS+HTML are easy to theme and customize, and Qt is... not quite as simple.
Is ActionScript still a thing on Macs? I feel like that tech was almost criminally overlooked while being the backbone for a lot of processing pipelines back in the day.
This will generate a multicast MAC 50% of the time, which will usually work, but can theoretically cause problems if there's a multicast-aware Ethernet bridge in your path. Ideally, the LSB of the first octet should be fixed to 0 to indicate a unicast address.
So I tried this out on macOS 26 and the `airport` command is no longer there.
There is a `airportd.sb` file, which appears to be some permissions based thing in s-expression/LISP. Weird.
Edit: Spun up a macOS 15 VM and I got this:
WARNING: The airport command line tool is deprecated and will be removed in a future release.For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
I feel like using Electron for such a little thing is way overkill. The newer laptops are very powerful so I don't think anyone would have any performance issues, but on older macbooks, having too many little Electron apps running in the background makes the fan go brrrrrrrr
What would you use instead to build a macOS GUI program with comparable ease? SwiftUI? Python + Tk (using the ancient system Python)? Something like Red?
Not for Mac. MacOS is an open garden: there is an app store; or you can install signed apps (requires Apple cooperation); or you can install unsigned applications. MacOS gives you a nudge to the app store (which has genuine advantages) and a much stronger nudge away from unsigned non-app-store apps, but it is still an open garden. iOS is closed garden, which makes some sense for the security guarantees it can give for financial applications.
The best part is right after the money line: 'Please check ' + issues_url + ' for help.' where issues_url is a github.com link. How are you going to check GitHub if you can't connect to WiFi in the first place?
Glad this feature is built into most modern operating systems these days.
For MacOS (Sequoia+) you can just forget the network and reconnect to get a new MAC address [1].
Android's documentation for if it decides to generate a new address per connection is a little vague [2], but I'm guessing forgetting and reconnecting works as well, you may also need to flip the "Wi-Fi non-persistent MAC randomization" bit in developer settings.
On Windows, flipping the "Random hardware address" switch seems to cause it to generate a new seed/address for me.
Yeah I had to flip the developer setting toggle, but worked flawlessly for my flight (American Airlines has a watch an ad for 20 minutes of free internet that only works once per MAC)
Are you saying that on IOS 18 if you enable developer mode then each time you forgot the network it gets a new Mac? But without developer mode it does not get a new Mac each time you forget it? The Apple docs linked elsewhere in this thread suggest it only gets a new Mac once per 24 hours when you forget the network normally. I’m going on a long boat trip in the next week where this trick might work for me if so!
I have a generic Android phone from many years ago where the manufacturer didn't even bother to program the WiFi NVRAM, so every time you load and unload the driver, you get a new randomly generated MAC address. Interesting that that has become a feature these days.
Here's an equivalent little script for Debian Linux (but should work on most distros), based on classhasclass's comment:
NEW_MAC=$(printf '02:%02x:%02x:%02x:%02x:%02x\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))
sudo ip link set wlan0 down
sudo ip link set wlan0 address "$NEW_MAC"
sudo ip link set wlan0 up
You should replace `wlan0` with whatever you see in `ip link show` for your wireless interface, for me it is `wlp0s20f3`. I replaced the `openssl rand` command because it was generating some invalid MACs; this is hopefully only valid ones.
If you really want to screw with these set your MAC address to 00:00:00:00:00:00
It’s an illegal address, but most equipment will take it because test devices occasionally come from the factory with that MAC. But higher level stuff might barf on it because it’s technically illegal.
edit: but this worked on my external NIC! Network wasn't happy though and DHCP didn't work. Ubiquiti had a funny note about this MAC: "Officially Xerox, but 0:0:0:0:0:0 is more common"
If you stash the IP/netmask/router IP you might be able to get it to work by setting a static IP on the connection with a 0 MAC address.
As always, ymmv.
On some equipment this may cause a broadcast storm, depending on how they implement things. Cisco equipment with some configs will send a packet to all the ports if it receives a packet and can't figure out where it's supposed to go.
This has been an option in Android network settings forever: randomize your MAC. I think it's enabled by default now?
It's a basic privacy feature; you can be fingerprinted by your device's MAC.
Yep. Android does this by default, but each ssid gets a randomized MAC which persists. It is still straightforward to trigger a MAC change manually tho. It is useful for privacy but imo useless for the public wifi limits use case since they almost always require an OTP via SMS to log in.
For devices running Android 11 or higher, users can enable non-persistent MAC randomization globally for all Wi-Fi networks (that have MAC randomization enabled) through the developer options screen. The option to enable non-persistent MAC randomization for all profiles is found at Settings > Developer Options > Wi-Fi non-persistent MAC randomization.
OTP via SMS: depends on the country. These days it's not very common in the UK. They often ask for an email address, but my experience is that most of the time they don't check it for validity.
No, this setting randomizes your MAC address between networks, but you keep the same MAC for a specific network. So if you want the network to think you're a new user, you'll need to change this specific network MAC address, and this isn't a setting enabled by default (and oftentimes is not even a setting)
They must be unique in a LAN segment. And only the lower 3 bytes in a MAC are “unique” as the upper 3 are the vendor ID and relatively fixed.
In practice people put fewer than 256 devices on networks (class C), so they have less than 1/65536 possibility of complete failure. And far less because they have a mix of OUIs.
But yeah, if you put a few hundred or thousand security cameras or other device from a single vendor, all on the same network, conflicts are certainly possible.
MAC conflicts are also a bit nasty to troubleshoot, and less obvious than IP conflicts.
This reminded me of an old app that would scan the MAC addresses of devices already connected to a paid WiFi network. You would then just change your MAC to one that already paid for the WiFi, and then reset it once you were done.
Yes. It’s a bad (maybe even illegal?) thing to do. The victim device will start losing packets, and it’ll look to them like the network is just unreliable. Eventually they give up and disconnect, and you take full control.
47MB for the UI & boilerplate around the business logic.
I get that this may be the easiest way to develop and publish an application today, but it's sad that this is the direction we have taken in recent years.
Business logic size: ~20 bytes Total app size: ~47 MB = 47,000,000 bytes
Bloat factor: 47,000,000 / 20 = 2,350,000
Let’s scale this up and say the business logic is 1 pound.
Then the whole app would weigh: 1 lb × 2,350,000 = 2,350,000 pounds
What weighs ~2.35 million pounds?
TOTAL: ~2,304,000 lbsThe business logic is like shipping a 1 lb object (a book, a flash drive, whatever) by loading it into two fully loaded 747s and strapping a blue whale on top.
Just to run 20 bytes of logic.
This is not 'an app to change MAC address' but an app to 'overcome WiFi time limits'.
Thing is, most x-platform frameworks still require a big download. Java and Python runtimes are in the same ballpark as Electron.
Deleted Comment
There's great power in abstraction. Disagree?
Your point is that an operating system, and its shell, all running on a machine, and a collection of apps, are somehow smaller than a wrapper application.
I'm curious the amount of bytes the entire stack, minus the chrome which is the complaint I believe, how many bytes that is. I would say probably a gig.
ps: I love both space stations and Unix
2) the dev has 64gigs of ram and a newest CPU and doesn't care about performance issues for people on older computers... that's why you need gigs of ram just to read a weather report online.
People who don't like the developers work can always write and publish their own application, of course.
Honestly would not expect anything more from js devs who use macs/windows. I see this so often.
>content-length: 47262814
Sigh...
Is it worth it? Probably not, since this is a single-platform app to start with, but JS+HTML are easy to theme and customize, and Qt is... not quite as simple.
Dead Comment
https://en.wikipedia.org/wiki/MAC_address#Unicast_vs._multic...
There is a `airportd.sb` file, which appears to be some permissions based thing in s-expression/LISP. Weird.
Edit: Spun up a macOS 15 VM and I got this:
WARNING: The airport command line tool is deprecated and will be removed in a future release.For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
I guess they weren't kidding.
What would you use instead to build a macOS GUI program with comparable ease? SwiftUI? Python + Tk (using the ancient system Python)? Something like Red?
It will change every time you disconnect/connect
For MacOS (Sequoia+) you can just forget the network and reconnect to get a new MAC address [1].
Android's documentation for if it decides to generate a new address per connection is a little vague [2], but I'm guessing forgetting and reconnecting works as well, you may also need to flip the "Wi-Fi non-persistent MAC randomization" bit in developer settings.
On Windows, flipping the "Random hardware address" switch seems to cause it to generate a new seed/address for me.
[1] https://support.apple.com/en-euro/102509
[2] https://source.android.com/docs/core/connect/wifi-mac-random...
https://github.com/halo/LinkLiar
It’s an illegal address, but most equipment will take it because test devices occasionally come from the factory with that MAC. But higher level stuff might barf on it because it’s technically illegal.
As always, ymmv.
On some equipment this may cause a broadcast storm, depending on how they implement things. Cisco equipment with some configs will send a packet to all the ports if it receives a packet and can't figure out where it's supposed to go.
In practice people put fewer than 256 devices on networks (class C), so they have less than 1/65536 possibility of complete failure. And far less because they have a mix of OUIs.
But yeah, if you put a few hundred or thousand security cameras or other device from a single vendor, all on the same network, conflicts are certainly possible.
MAC conflicts are also a bit nasty to troubleshoot, and less obvious than IP conflicts.