litchralee

joined 3 years ago
[–] litchralee@sh.itjust.works 5 points 1 day ago (1 children)

I'm jealous; we don't have the 454 in the USA, except as grey market imports. Good luck in this endeavor!

[–] litchralee@sh.itjust.works 2 points 2 days ago* (last edited 2 days ago)

When I think of "offering a domain", I immediately think of DNS subdomain delegation. And on the linked page, you do say "DNS alteration encourage", which could suggest that subdomain delegation is what you had in mind.

But the rest of the text suggests more than subdomain delegation? How do you envision that self-hosted services might operate underneath the "top level" domain if not by delegation? Do you mean that an API would not create a delegation but would simply create a single record?

To be clear, a delegation of "xyz" under example.org would mean that some other DNS server is now authoritative for the entire *.xyz.example.org tree in DNS. That allows the delegate to create their own records for foobar.xyz.example.org or mail.xyz.example.org. Whereas if there was just a single AAAA record named "xyz" under the example.org domain, then the only name that will resolve is xyz.example.org; there is no additional authority to create subdomains under xyz.example.org.

In either case (a delegation or single records), you could certainly develop an API or some sort of Git repo as the source that is referenced by the top level domain's nameserver. This is quite similar to how DDNS providers work. And a while ago, someone on Mastodon (I think) used a custom nameserver to send football/soccer scores via DNS lookups. Or tunneling IP itself over DNS.

In the non-delegation case, some services might need more than one record created. For example, a simple web server at the xyz.example.org subdomain needs at least two fecords (A and AAAA) to support both Legacy IPv4 and modern IPv6 clients. If doing an email server, it would need at least an MX record, but modern DKIM and SPF might require additional TXT records and maybe SRV records.

[–] litchralee@sh.itjust.works 6 points 2 days ago* (last edited 2 days ago) (4 children)

For folks that are space constrained and would only use a trailer infrequently, folding utility trailers are available. Specifically, Harbor Freight in the USA sells one such 4x8 utility trailer for some $400. It weighs 250 lbs, though closer to 300 lbs (180 kg) after adding a 5/8" (10 mm) plywood deck; not included.

This makes it fairly reasonable to tow even with a small car, for light-but-bulky payloads (eg sectional sofa) a few times per year. Some US States like Oregon don't even require registration for such small trailers, while California has an extremely reasonable $25 plate fee that lasts 5 years.

To be abundantly clear, towing anything is a departure from run-of-the-mill driving, and carrying a load of any size presents hazards that require some attention and care. But it's entirely feasible and costs a lot less than a truck. The tradeoffs can be worth it, if it works with your use-case. It certainly does for mine.

[–] litchralee@sh.itjust.works 29 points 2 days ago (8 children)

Congrats! On the other hand, you will now be getting an influx of calls from friends whenever they're buying something from the home improvement store and it's too big to fit inside their car lol

[–] litchralee@sh.itjust.works 2 points 3 days ago* (last edited 3 days ago)

In some cases, the game server's IP address is actually anycasted, which is an approach that (very carefully) breaks the notion that a network identity belongs to a single machine. Instead, that one IP address would actually be routed to a nearby machine which is authorized to assume the identity of the game server, and will thus handle the game traffic for that region. So long as all regions handle their traffic identically and the results are consistent as if there were one giant machine that were handling all the traffic, this can work. An example where the seams are visible are how YouTube's view counters will momentarily not match up across all geographies, because the backend servers don't sync up to each other instantly or even quickly; and few people require that precision anyway, so they just don't bother engineering it to do that. When you're providing a global service, that is exactly the sort of engineering tradeoff that must be considered, because even they do not have unlimited money.

In other situations, the game server IP address really is for a single machine, but that machine is a specialized hardware load-balancer that is situated in a cloud provider's network. All that this machine does is to be the frontend for the 5-tuple, and will create a new conversation/connection 5-tuple with a cluster of game servers within the cloud provider's network. There might be some superficial comparisons between a load-balancer and NAT, but the latter works by fraudulence whereas a load-balancer is a subcontractor.

[–] litchralee@sh.itjust.works 3 points 3 days ago (1 children)

The other commenters have provided many disparate answers that do reply to parts of your question, but allow me to approach the question holistically and thoroughly.

my basic understanding is that computer networking relies on constructs like IP addresses and port numbers to direct data packets to the correct device and application.

This is substantially correct. An IP address is a network identity of some "node" machine that participates on the network. A port number is a protocol-specific number for how to interact with a given node. For gaming, we are almost always talking about UDP as the protocol, so the port number will be a UDP port number; the same logic applies for TCP, but I'm going to gloss over that unless you specifically want details about this.

In the case of Legacy IPv4, an IP address is a 32-bit number that is usually presented as four decimal bytes separated by dots (eg 203.0.113.67). Or for modern IPv6, it will be a 128-bit number presented as hexadecimal groups of double bytes that are colon-separated, but where zeros can be abbreviated (eg 2001:db8::67). A TCP port number is any value between 1 and 65535 inclusive; 0 is technically usable but most software will not allow its use.

So, if I’m playing an online game like Minecraft or Counter-Strike, I am able to connect to the dedicated game server using the server’s IP address ... and port number

Correct. Your client aims at the server's IP address, and the UDP port number on that server. And on your end, you will have your own client IP address and client UDP port number. Implicit to the internet, we know that this must be using IP (v4 or v6 does not matter in this scenario) and the client and server only know how to speak UDP. Thus, there are five pieces of information which capture the entire connection: the source IP, source port number, destination IP, destination port number, and the protocol (UDP). In the networking parlance, we call this as the 5-tuple, because it captures the notion of a single conversation between two applications across the network.

Note that I'm specifically using the word "conversation" and not "connection" because the latter has a specific meaning in the business. A connection means that we're holding a resource open -- like a telephone line --for the entire duration that data is being exchanged. But UDP doesn't reserve resources like that, and is more like sending a post card and hoping for a reply.

The 5-tuple concept is important because like an IRL conversation, it's entirely possible to send data in the reverse direction, and while the source IP/port and destination IP/port will be reversed, it's easy to see that this is functionally the same "conversation", just in reverse. The network doesn't really care if the tables have turned: it just passes packets around. So I will simplify and say that if a 5-tuple reverses its source and destination values, then that's functionally no change at all.

I can now answer your question with technical precision: a game server can distinguish multiple game clients by using their unique 5-tuple. The rest of your question is answered by a brief explanation of various workarounds that are needed for the post-1995 Legacy IPv4 world, but which were fixed in the modern IPv6.

In some cases, each client will be connecting from their own network modem, with their own IP address assigned to them dynamically or statically by their ISP. In that case, I would imagine that the server could just keep a list of client connections and route relevant data back to each client.

This is exactly what existed pre-1995 when the end-to-end principle was alive-and-well on the public Legacy IPv4 Internet. As I mentioned before, an IP address is a network identity, and in the original conception of IP going back to ARPANet, an identity was not meant to be shared amongst multiple machines. Instead, every machine was expected to have its own IP address. However, during the 1995 explosion of dial-up users, network operators could not (or would) not) obtain new tranches of IP addresses to hand out to users, so they began using NAT as a workaround, to reduce their need for public IP addresses. But the keyword was "reduce" not "eliminate", and by 2012, the world had officially run out of available IP addresses to hand out to ISPs.

But in other cases, you might have a multiple clients playing a game behind one modem (like housemates or a LAN party where multiple players join the same remote/internet server), or a newer problem, multiple different networks sharing an IP address due to CG-NAT at the ISP level.

All of these workarounds (NAT/NPAT, CG-NAT, etc) all work by mutilating the 5-tuple and then unmutilating it for return traffic. When a home router performs NAT, it replaces the client's source IP (eg 192.168.3.42) with the router's (eg 203.0.113.67), and usually also replaces the client's UDP port (eg 12345) with a random one available on the router (eg 45467). The resulting 5-tuple is what the game server will receive. NAT must save the mapping (12345 -> 45467) for future reference.

When the game server wants to reply, it will -- exactly the same as the case with the end-to-end principle -- reverse the source/destination fields in the 5-tuple, and send the packet. This means the destination is now the home router's IP (203.0.113.670 and UDP port (45467). What NAT will now do is to again modify the source IP (to restore the original value of 192.168.3.42) and then use its stored mapping to restore the original UDP port number of 12345.

From the client's perspective, it receives a reversed 5-tuple of the one it sent to earlier. Thus, it's perfectly happy to receive that traffic and nobody is the wiser.

In which case, from the perspective of the server, multiple players would be playing from the same IP address and communicating over the same port, right?

Recall that NAT on the router will: 1) generate a random, new UDP port number, and 2) store the mapping of the originator's port number. So if there are two clients at home playing Minecraft, the router will have generated a different random UDP port number for each, meaning the 5-tuple that arrives to the game server will match 4 out of 5 parts, but not all five. The crucial -- and only -- distinction between these two clients at the same house are that they present a different source UDP port number to the server. And that is also how the game server will treat those two clients separately.

If the home router were to spontaneously reboot -- thus forgetting the NAT mapping table for UDP port numbers -- then both clients cannot recover the conversation at all, even after the home router is back online: the mappings are lost, and nothing can be done but to reconnect to the game server as a new 5-tuple. The end-to-end scenario does not have this problem, and pre-1995, routers did in-fact crash more often than they do now. Genuinely, today's Legacy IPv4 service is poorer than it was in the past, and certainly poorer than what modern IPv6 can deliver.

So how does the server differentiate between >2 players connecting from the same IP address and communicating over the same port?

As long as the home router has available UDP port numbers, NAT can continue to randomly generate a unique UDP port number for each client that is behind the NAT. Since UDP port numbers can be as large at 65535, that's a lot of clients. Though practically, no home router would ever see that many Minecraft clients. Even CG-NAT tends to only support approximately 64-128 clients on a single Legacy IPv4 address.

As for why, all this mutilation of packets takes a little bit longer than just passing the packet through the internet. It is not fun for the ISP to have to build CG-NAT infrastructure. It is not fun to build home router firmware that will get blamed for the user's bandwidth or firewall problems. Also, NAT would require a (relatively large) table in memory store lots of mappings, and so they just don't do that for consumer routers.

In the USA, AT&T's fibre internet modem/router is known to max out after a critical number of UDP conversations or TCP connections, because the NAT feature has run out of memory. This is precisely why some people bypass the modem/router (so they can use their own high-end router) or will use IPv6 for their connection-intensive workloads, like sharing Linux ISOs.

Or does it not even try, and instead just broadcast all of the relevant game data to every client?

Game servers definitely do not do this, because broadcast is not permitted on the public Internet whatsoever, whether on Legacy IPv4 or modern IPv6. The original conception of the internet did describe "multicast" which can target a group of IPs on a network, but this was never well-implemented for IPv4 and is only implemented on LANs for IPv6. The public internet does not support multicast, for a number of historical and bandwidth/security reasons.

If a game server wanted to send the same data to each client, one after another, it can. But it still must know the 5-tuple that identifies each client. Fortunately, the game server's OS will have taken care to record this info (eg BSD sockets).

And if that’s the case, how do huge games like battle royales or MMOs handle sending game state to a large number of users?

The way that MMOs deal with 100k+ clients goes deep into the realm of clustering, load-balancing, and network engineering. The only things that get more complex than that are high-bandwidth applications involving hundreds of thousands of clients (eg Netflix) or are massive hyper-scaler cloud providers (eg Azure, Alibaba).

That said, the fundamentals are still there: clients are identified by their 5-tuple, and all the engineering done to spread that load must still end up producing a reply that has the reversed 5-tuple.

(cont)

[–] litchralee@sh.itjust.works 25 points 3 days ago (6 children)

In case this is useful:

If you have a chopstick, you can tape the new string to the back and push the chopstick through the hole to guide the string. Other solid objects like a wire coat hook can work, but you have to make sure the tip won't snag.

[–] litchralee@sh.itjust.works 1 points 5 days ago* (last edited 5 days ago) (2 children)

This and the comment it replies to make the categorical error which is to assume that NAT exists as part-and-parcel to firewalling. This is not the case. Many American university and corporate networks do still adhere to the end-to-end principle by giving every device a public IP address. They can do this because they are among the few legacy entities that actually have enough for their needs, such as a Class A (aka /8) subnet on Legacy IP. At the same time, these entities employ firewalls that don't allow unsolicited inbound traffic (and sometimes also block disallowed outbound traffic).

NAT is not a firewall, and the OP correctly points out that by using NAT or CGNAT, the end to end principle is demolished, with no way for the victims to recover. OP mentions "firewalls" exactly twice, to compare how they are not firewalls and are still necessary in spite of NAT. Nobody is credibly suggesting that everyone should switch to IPv6 without a firewall. Every single domestic router for the past two decades has included a firewall, and that would not change in an all IPv6 world.

I wish to reiterate an example I've used in the past, which is that the most famous address in the USA is 1600 Pennsylvania Ave, Washington DC. Anyone can send letters and parcels directly to this address as-written, with no need to rewrite the address to first arrive at the Secret Service. And yet, all such parcels and letters will be thoroughly scrutinized by the Secret Service anyway at an off-site facility, and some indeed will be let through to the occupants of the residence. NAT is address mutilation, and the United States Postal Service does not require nor allow that.

[–] litchralee@sh.itjust.works 2 points 5 days ago

I wish to be abundantly clear that I wasn't attacking your position, but that folks on the fence about "what makes a proper English word" should have some examples where English does the thing that makes the language fairly ~~incomprehensible~~ unique.

Not sure if this was intentional

I absolutely intended that and I'm glad you noticed! The doppelkupplungsgetriebe example is also a reference to an episode of Top Gear (UK). I meant to hyperlink both to their respective YouTube videos but entirely forgot.

[–] litchralee@sh.itjust.works 10 points 5 days ago* (last edited 5 days ago) (3 children)

Is this really a problem though? Compound words in English can be spaced, hyphenated, and sometimes even parenthesized. German has the word "doppelkupplungsgetriebe" which means "dual clutch gearbox" but whether the first pair is hyphenated or not, these three words in English together refer to a single object, a type of automobile transmission.

Separating the word into its parts is no different than splitting "hypoglycemia" (hypo meaning low, glyco meaning sugar, and -emia meaning presence in blood) into its parts: useful for understanding, but cannot substitute for the original compound word. The difference between the English and German word is a matter of spelling and punctuation.

Meanwhile, English has a genuine lack of a word for joy from the misfortune of others, that we borrow the word verbatim from English. The vacuum of a word meant we looked farther afield. And while that word was imported, I imagine there's a similar challenge finding an English word for "the warm feeling of sand between ones toes at the beach". The need for words is solved by usage, not by prescribing rules that prohibit importation.

[–] litchralee@sh.itjust.works 6 points 1 week ago* (last edited 1 week ago) (1 children)

I like the techwear vibe here. Well done!

 

A few months ago, I was gifted a non-operational DEC VT320 serial terminal. This is a 80s/90s text-only CRT monitor, which was only displaying a thin vertical line rather than a proper picture. I've done some electronics repair in the past, but nothing this old or involving a high-voltage tube. But I figure that it would make for an interesting project over the summer, whether or not I can recover it. If nothing else, it is quite a retro talking piece.

Fortunately, DEC -- aka Digital Equipment Corporation-- made a lot of these things, and also published troves of service information, which was the norm back then (#RightToRepair). Among the documents that can be found online included the schematics, which would be of incredible aid. That said, the quality of the scan is pretty poor, and it took quite a bit of cross-referencing of component identifiers with the parts list to confirm what couldn't be read.

Before opening up the monitor, I did some preparatory research, to identify areas which would be worthwhile to investigate, and also to make sure I'm not going to shock myself in the process. My findings showed that because the CRT was able to display something beyond a single dot in the center of the screen, the issue would not be in the high-voltage generation circuitry, but rather the downstream circuits. Specifically, in the horizontal deflector path; this explains why the only image is a vertical line, because horizontal control was lost.

Using the field replacement guide, I got the monitor open and then discharged the anode using a screwdriver attached to the ground strap. There was no spark or sound, which can happen if the bleeder resistor was still intact. A good sign as to what's probably still working in this monitor, but I take no unnecessary risks around potentially high voltage.

The innards were reasonably laid out, basically existing as components that adorn the CRT display itself. The PSU, main board, and "arc protection" board were all easy to identify, although the latter was more like a connector than a board. I quickly ruled out the PSU by checking its output voltages, so the issue must be on the main board.

logic board of VT320 from above, unobstructed by the picture tube

It took a while to extract the board, since I didn't want to break any of the 40-year old plastic clips. But once out, I began matching the board to the diagrams and examining for any obvious damage. No obviously blown caps, no evidence of thermal events, no components rolling around on the bottom.

At this point, I stopped to do some very thorough circuit analysis of the circuit diagrams, to absolutely understand what I was going to do. This actually took two tries, since each attempt revealed faults in my understanding, and I had to go back to the thinking chair. This part took a few days, until I finally internalized the circuit's behavior. As it turns out, this wasn't necessary, and I'll probably include it as a later comment, just for posterity.

When I returned to the board, I made a plan to solder some trace wires, to verify my expectations when powered on. And indeed, after reinstalling the board, my oscilloscope confirmed that the H sync signal was intact and the power transistor was functioning as expected.

oscilloscope traces, one showing a square wave pulse for 35 ms with amplitude of 4 volts, and another trace showing a single distorted sine pulse lasting 10 ms with peak amplitude of 200 volts

Narrowing the search, I took the board back out and started tracing the lines on the PCB surface -- it was fortunately only a two-sided board -- and then compared my observations to the schematics. This revealed a difference, where the Horizontal Linearity inductor (H-LIN) was not showing connectivity, despite visibly being attached to the trace.

Closer examination revealed that of the inductor's three legs -- two for electrical connections, one extra for support -- one had developed a hairline fault. This physical damage broke continuity, likely from the shock of impacting something. I made a repair by constructing a wooden splint for physical support, and then soldered over the leg for electrical connectivity.

a tall inductor supported by wood splints, marked as H-LIN

For good measure, I completed the exercise of verifying all other components, which showed that all other resistors, capacitors, and connectors were intact and likely working. And with that, I reassembled and powered on the monitor to see.

monitor displaying: VT320 OK, Firmware and Set-Up Screens Copyright  C 1997, Digital Equipment Corporation

And it works! In total, I probably spent a week on-and-off working on this. I will say that this is a strange machine to have, since I've been able to hook it up to a modern Linux machine and use it as a serial TTY. I even wrote most of the text of this post in vim.

a VT320 terminal with vim open

 

I only learned about this effort today. They seem to document the air protocol and the companion protocol, so that compatible implementations can be written to expand the universe of MeshCore nodes.

I'm not sure I agree with using ZephCore (a port of MeshCore to Zephyr RTOS, apparently initially AI-generated using Claude) as the reference material -- as opposed to directly referencing the MeshCore mainline repo. But nevertheless, it's a good start to formalizing the protocol behavior necessary for an interoperable implementation to those existing nodes in the field.

 

The convention in the USA for old urban centers and new suburban sprawl is to construct a street or road with a crown that drains rainwater to gutters along both sides of the road, then have storm drains to convey the water from the gutter to some nearby creek or tributary. But why?

Wouldn't it be easier to construct the road in a roughly canal shape, so that rainwater drains towards a single V-shaped gutter at the road's center? This would cut the number of storm drains by roughly half, prevent leaves from falling directly into a drain and clogging it, make it possible to clear a drain by driving a streetsweeper over it, and also prevent a clog from flooding adjacent properties, since the road itself can temporarily impound more water until municipal authorities can clear the blockage (whereas side gutters would invariably flood the sidewalk and carry sharp debris that would damage tires entering a driveway).

Furthermore, a center drain can be built once and then retained as-is each time a suburban arterial needs expanding -- "just one more lane, bro" -- whereas side gutters are regularly demolished and rebuilt to accommodate additional lanes. By routing water away from the edges of the road, sidewalks avoid freeze/thaw cycles, and the road surfacing can be continuous from the curb: no more bike lanes in the gutter. As a convenient benefit, the "drop" off at a curb-cut from a driveway to street level would cease to exist.

And where required to improve water quality due to runoff pollution, a center drain can be excavated and rebuilt as a linear stormwater retention pond, where moderate stormwater can filter into the local soil slowly, with a predefined overflow level that will drain to the existing stormdrain pipes. This is already done for both surface parking lots as well as Interstate highways, so it's not an unproven design.

Narrow alleyways in older cities do use a central drain, so I can't see why the idea stops making sense for larger streets and roads. The only drawbacks I can envision are aesthetic -- a neighbor's excessive lawn irrigation would draw a wet line across half the street -- and that the center channel would also carry leaves and wayward soccer balls into the middle.

But even still, that doesn't seem worse than the status quo: gutters attract all sorts of detritus, but it's usually hidden beneath the wheels of parked cars until something punctures a tire. And at least in water-starved California, irrigation runoff deserves to be noticed and called out so that it gets fixed. There may even be some small road safety benefit from having a V-shape channel in the center, since it would unmistakably divide opposite sides of the street.

For larger arterial roads that have trees in the center, this seems like free irrigation and water pollution control. It even works when the center traffic lanes are converted for running a tram or light rail train.

What am I missing here?

 

cross-posted from: https://sh.itjust.works/post/61250326

A crafted MeshCore node name could compromise any Home Assistant instance running meshcore-card as soon as someone viewed a dashboard with that card.

The same XSS (cross-site scripting) pattern appears to be present in MeshCore-Home-Assistant-Panel-v2 and its HACS variant

To be abundantly clear, and the post goes into detail why, this is not a bug in MeshCore but rather in how web dashboards are not properly sanitizing untrusted input. In this case, the untrusted input is via a field that any malicious MeshCore node could send.

Well worth a read and a follow on their Mastodon.

 

A crafted MeshCore node name could compromise any Home Assistant instance running meshcore-card as soon as someone viewed a dashboard with that card.

The same XSS (cross-site scripting) pattern appears to be present in MeshCore-Home-Assistant-Panel-v2 and its HACS variant

To be abundantly clear, and the post goes into detail why, this is not a bug in MeshCore but rather in how web dashboards are not properly sanitizing untrusted input. In this case, the untrusted input is via a field that any malicious MeshCore node could send.

Well worth a read and a follow on their Mastodon.

 

A reasonable overview of the MeshCore architecture and tunable parameters.

Probably the only part I don't agree with is the idea that the companion/repeater dichotomy is an inherent part of the MeshCore architecture. I don't believe it is, although it's certainly part of the practical implementation. That is to say, if someone wants to use MeshCore purely as a private point-to-point link, then they can jettison the motions of companions and repeaters entirely. As a person to person mesh network, though, companions and repeaters are essential. The distinction I'm trying to draw is that MeshCore can be a lot more than text messages sent amongst friends.

While reading, the explainer for the three-tier t delay seemed especially analogous to me to how circuit breakers are arranged: a nearby power strip might have a fast-tripping 15 amp thermomagnetic breaker, the upstream main panel might be using a 20 amp curve B (moderate trip rate) thermomagneric breaker, and the utility might be using a magnetic 400 amp breaker. By their nature, thermomagneric breakers will handle localized faults that are 3-5x the rating, while the utility's magnetic breaker will trip precisely at 400.1 amps, to protect line-side equipment. Whereas if the utility breaker tripped first, it would unnecessarily black out a whole neighborhood.

Also observe that MeshCore's "flood-then-direct" behavior is identical to that of Ethernet (ie unknown unicast, then unicast), except that Ethernet frames do not get appended with the network path as they progress, which is akin to the postal service where letters arrive at their destination but with no indication of the routing. Accordingly, the MeshCore sender necessarily reserves space to store the mesh route, choosing a tradeoff between node-count (up to 64) or granularity (up to 3 bytes per repeater). This seems complex, but just like with the tax code, complexity is necessary to handle every reasonable scenario.

I will also reiterate the ongoing bug in MeshCore's encryption, which is the use of AES-ECB in the year 2026. Although it's AES-256, ECB has been a known encryption vulnerability for decades and should not have been used in the MeshCore spec. Meshtastic appears to have avoided this particular foible.

Note: the author's blog mentions in the About page that some AI is used to assist in his writing.

 

Background: I spent 40 minutes typing up a reply to a different post, but decided that it ran on for too long. I'll include it at the bottom, but I'm curious to know how much cash is still used in this country.

Certainly, a like-for-like Giro (Europe) system doesn't exist in the USA, with ACH, checks, and Zelle almost filling the void -- albeit incompletely -- which I suspect is responsible for the remaining cash utilization. But is that right? Is cash only used for when there isn't another option? Or is it a matter of consumer preference?

I can understand tipping in cash, or paying for a Craigslist purchase in cash. But maybe I'm missing another dimension? Do some folks pay rent in cash? Or taxes? I'm genuinely curious, but please make sure not to dox your finances in the comments.


My original comment

It's annoying when they get suspicious of a 25k USD withdrawal for instance (even if you managed to prove the purpose of such a withdrawal, it remains at the banks discretion whether they'll approve the transaction).

Let's break this down into multiple points:

  1. Suspiciousness of a 25k USD cash withdrawal
  2. Suspiciousness of a $25k USD electronic or check withdrawal
  3. Necessity to "prove the purpose" of any withdrawal
  4. Bank discretion and considerations regarding withdrawals
  5. Necessity of approval by the bank

I don't believe any of these five points are actually issues. As background, cash withdrawals within the USA are still very commonplace, as the country is fairly rather cash-centric when it comes to businesses, due in part to the lack of a system like Giro (Europe) that has both low, fixed transfer costs and can be sent or received by third-parties. The Federal Reserve's ACH system requires established relationships between accounts, whereas Giro does not. Debit card systems aren't a replacement for Giro either. Zelle (USA) is closer, but still isn't quite as full-fledged. Hence, businesses often deal in cash, pay employees in cash, and consumers pay other individuals in cash (eg buying an automobile).

To that end, for point 1, $25k as a cash withdrawal is not a daily occurrence but it does happen. I can't really think of ever paying for a private party used car by check, and such a cash-heavy transaction is often performed at the buyer's bank, so the seller is assured that the cash is good. In this setting, requesting to withdraw $25k cash is ordinary and mundane, if done very rarely. I doubt even prolific car buyers have this problem, but would be open to hearing evidence otherwise.

For point 2, electronic and check withdrawals have even less suspicion than cash, because they always leave traceable evidence. Money laundering concerns are reduced because the entire money trail can be reestablished later, whereas as cash can easily disappear or be "forgotten". To that end, the suspicion isn't about the cash amount but the source and destination. Even a $1 million check is not suspicious, if it's coming from a law firm's client account to a client's personal bank account. That is, again, a thing that happens fairly regularly. More down to earth, people can and do pay housing deposits by check, and property taxes are often drawn electronically. When one or both accounts to a transaction is prominent and established, there is a low probability of money laundering.

Point 3 is often though to be an issue, due to confusion about regulations for bank clerks on when to file a Suspicious Activity Report (SAR). Bank tellers are required to follow Federal Reserve regulations that aim to prevent abuse of the American financial system for money laundering. An SAR must be filled in whenever the teller: a) thinks money may be laundered, or b) the transaction is above the bank's or regulation's fixed amounts. The latter is often pegged at $10k, so this is where people think that it's disallowed to withdraw over $10k. This is not correct.

An SAR is something the teller fills in, and to do that, they might ask the customer some questions about the transaction. For the grand majority of people, the purpose is quite simple: cash purchase of a car, housing down payment, loan for a friend. Would the teller know if the customer is lying? Nope, not at all. But the SAR forms part of a trail of records, so that money laundering investigators can trace funds in the future. But note that the clerk can fill in an SAR for any type of transaction, including checks, and don't strictly need the customer's truthful answers (or any answers) anyway. An obligation to fill in an SAR does not prevent the transaction from going through. It's a speed bump, not a stop sign.

As for the actual stop signs, that's what point 4 covers. A bank obviously cannot allow a withdrawal if it would exceed the customer's balance, or if they don't physically have enough cash, or if the withdrawal is not authorized (ie not named on the account, or PIN not known), full stop. But other situations may arise where the withdrawal must be delayed, either for the bank's own convenience or because the account agreement specifically requires certain holdings times.

I quickly perused a random account agreement for Wells Fargo and the Available of Funds section describes that new accounts (less than 30 days old) will have elongated hold times for withdrawal against newly-deposited funds. This is applied in a first-in-first-out fashion, so only fully-draining the account would incur the longer hold time. In other cases, the bank may take more time but is required to inform you of that, and provide a definite date for when the withdrawal will clear. This verbiage does not distinguish cash vs non-cash, so they're within their rights to delay a check, as long as they obey their own agreement. If this is not tolerable, find a different bank.

Finally, this also gives us some insight into the default behavior for banks subject to Federal Reserve regulations, which is point 5. A bank may not deny a withdrawal of unencumbered, unheld funds (cash or otherwise), except when the bank has actual knowledge that the withdrawal definitely is for laundering. It is, after all, not their money: it belongs to the customer and they are just the regulated custodian of it. A bank can certainly advise a customer not to fall for a pig-butcherint scam, but they cannot block the customer from obtaining their own money back out. They can, as described earlier, apply a temporary, finite-time hold on the funds, but that's it.

To my knowledge, there is no Fed-regulated, FDIC/NCUA bank or credit union that requires pre-authorized approval to access a customer's own funds. I am open to hearing evidence to the contrary, but I don't believe such a thing exists. How would they even stay in business? To be clear from point 4, a bank can certainly ask for a few day's notice to prepare $50k in new $2 bills. But that's easy enough: just call the bank and verbally request the withdrawal, then collect it in-person days later.

Who is disadvantaged by this? Mostly money launderers and con artists trying to abscond with their scam proceeds. But I'd be remiss if I didn't also mention rich people that prefer to suddenly go on vacation and pay for everything in cash. But the system is designed to be no obstruction to those that plan ahead, or are dealing in such small amounts that it's not a big issue. Normal everyday people all share the costs of money laundering, so it's not fair to disadvantage them just so rich people and scammers aren't inconvenienced by their inability to plan ahead. They don't even have to plan ahead: just keep a few racks in the safe.

It is to me, frankly, a non-issue to withdraw money for me or anyone in the working or middle class, because the very issue of being "flagged by US banks" just rarely even a speed bump. And the rich folks have private banks that will gladly give them inordinate amounts of cash to spend.

What exactly is the problem here, specifically?

 

What can be done

The most glaring problem with MeshCore is that the maintainers do not openly communicate vulnerabilities. Users are left without knowledge of any problems, unable to judge whether to trust MeshCore with their private communication.

 

Here is the thing about open source, Andy: it isn't yours to fence. You don't get to ride a community's goodwill into a USPTO filing and a paywall. You don't get to turn "we built this together" into "I own this, pay me." That isn't a pivot. That's a rug pull dressed up as a business model.

And here is the thing about the "license check" you shipped: it is a 32-bit djb2 hash of the device's Android ID, XORed with the four ASCII bytes MCPP, hex-encoded. That's it. Thirty-two bits. Less entropy than a decent ZIP password. A first-year CS student could break it. You used Claude to generate the code. We used Claude to read the code. It took 19 minutes. The receipts are one click away.

 

CLAUDE CODE JUST RICKROLLED ME. I'm working on a project where part of it will involve videos, and in building out the project it created a dummy page, with made up content (relevant to me!) with two video links pretending to be something else and BOTH WERE RICKROLLs.

Note: I'm using a broad definition of "programmer" to include HTML generation, and a broad definition of "humor" that includes Rickrolling. Together, I think this is appropriate for c/programmerhumor. Mods, please remove if not correct.

 

The money quote:

VTA buses and light rail carried 30,000 people to and from Levi's Stadium, according to the agency. That was 5,000 more than they anticipated and "far surpassing" ridership records set when Taylor Swift played there in 2023.

 

As background from the Wikipedia page, the Anaheim Transit Network (ATN) was established as a city-sponsored non-profit in 1998 to operate bus lines around the Disneyland resort in California, with private funding from the various hotels in the area to run this public bus system. These hotels are obliged to operate or pay for shuttles to Disneyland as part of their development agreements with the city, presumably to avoid untold amounts of automobile traffic.

As the linked press release says, ATN will shutter its operations on 31 March 2026. The area will still be served by Orange County Transportation Authority (OCTA), the county-wide bus service, but looking at the bus lines near Disneyland, coverage seems non-optimal as a replacement to ATN's service.

Other reporting indicates that the City of Anaheim was unwilling to invest further into ATN (despite earlier indications), nor were the hotel operators.

What I find utterly inexplicable is that these stakeholders -- especially the city -- are not recognizing this fact: data from Q3 2025 shows that ATN fixed-buses moved 96,300 average daily riders. From the same document, the USA's heavy rail systems did not exceed that rate, except in the San Francisco, Washington DC, Atlanta, Chicago, Boston, and NY/NJ areas. Basically, ATN was moving metro rail levels of people on buses.

I shudder to imagine how bad this will be for Anaheim once the closure occurs, where workers, visitors, and all other former riders will need to figure out how to move around Anaheim. Ride share automobiles hardly have enough capacity to absorb even a fraction of the prior riders, let alone more automobiles, even if they all carpooled. And seeing as many visitors to Disneyland use the buses to stay at farther hotels to reduce costs, this is a negative attraction. The difficulty of car-seats on ride share made the buses particularly attractive to transport younger children safely.

Each individual hotel operator made an economic choice to not properly fund ATN, but together they will all lose out. Likewise, I don't see how the City of Anaheim is going to make up the transportation capacity around the Disneyland area. Disneyland itself isn't party to the agreement that funds ATN, but they do contract with ATN to shuttle visitors from a far-flung parking lot. But they too will be impacted if staff and guests can't afford to get to the park.

Everyone is going to be worse off, and no one is stepping up to the plate to keep the buses rolling, when it's clearly the obvious thing to do.

view more: next ›