I got asked by a team of first timers who have never done any professional coding or design if I wanted to chip in on a competitive MMOFPS they want to make.
That’s not going to happen. Between the rise of cheating, the insane hardware and optimization requirements of an MMOFPS, the general lack of interest in the genre (most have died due to low player counts), and the sheer amount of time and effort involved in designing and balancing the game even after it’s largely feature complete? Forget it, I’m better off buying lottery tickets than hoping for anything to come of that.
Rust may be good and all, but I doubt it’s magically always write good A+ code, I’m sure some developers will slap all their code inside unsafe as a shortcut.
Ha, such a loser. Real programmers use C.ԥ[��\�q��r��8-߿�ʱT�xd]�UG���S;���v�o������ՠ��N�iYtsfv���@ֿ��Qj�\�Q��_"�$�:� �����0��y��G�6�K!{Ȯ������Z�n�˭s�\��ڣ�:J��1���e�k=�${�Z�3�k~67D�����K���(�P.��v�0��a�����d���6e?=�v�)���a��bF���R��4>�˕�G�=��v-�dP��O�3��+A�nw�|ъ�f۽b�oF�I`'�#��:��̴g>�j:^���O�mu^U�l�A�oI�’�.��j>Dm\����y��2T��8w�D"1������ת«Q����l�"�C�{��������% �_�A�߸�=t��� �X��m�9R�x��)�a�-���tbL�����Ǣs��d$oMZ��4I1jXD���
Segmentation fault
C# is Java except from Microsoft, which means it’s designed and much more integrated with Windows. The official .net core even brings telemetry right out of the box. Using C# apps on Linux is a pain, which is very bad considering it’s supposed to be like Java - compile once, run anywhere - except Java actually achieves it.
Also, Minecraft runs on Java. Therefore, C# is useless. Boom, destroyed /s
Rust v3: “It’s three hours and I’m still compiling dependencies”
EDIT: Also, “What does Option[Arc[Mutex[BTreeMap[String, Box[RefCell[Box[amp mut F>>>>>>> where F : Fn(T) -> U in your essay mean?” (srry, I didn’t come up with a better obscure data type, it’s probably gibberish)
EDIT2: Lemmy deletes ‘less than’ sign for some damn reason (time to build Lemmy at home?)
I don’t think you should criticize a language that you clearly have not even learnt the syntax of. Dependencies are also a one-time compile and linking just your own program or library does not take very long, and if you’ve ever worked with C languages it’s all the same.
Just because you don’t know how to read a languages syntax doesn’t mean it’s bad, it’s just like how you have to learn anything else. Rust is quite self-explanatory afterwards.
EDIT: Well, it depends. If you statically compile everything with C build systems, in that sense, the speed should not differ from generic cargo workload. Although, in most cases, projects written in C are dynamically linked due to several reasons, one of which is code speed. In practice, even huge projects written in C (30k to 10k LOC) build quicker than C++ or Rust.
I’m not pooping on generics, either. Generics is a saviour for correctness and performance. Yet, I want to point out the type creep is still a thing, even though there’s little we can do about it.
Anyways, this thread should be better interpreted with humor, instead of technical accuracy.
it can run on almost any browser, it can be bundled to run on desktop or mobile. i know wasm exists but javascript is still sadly an extremely versatile language, mostly due to its support on the web
By not understanding how version control works. I’ve worked at places that had a surprising number of developers who would just merge things in ways that drop code from other developers.
I now work for a small business but in the interest of not getting bitten in the ass I don’t wish to give the name of my previous employer. It was a large defense contractor, but our values didn’t align so I moved on when I found another opportunity to put food on the table. I know that’s not a satisfying answer but I’m here for entertainment value and the opportunity cost might not be worth it. My main point was that even though they have the money they didn’t see the value in good software process.
All the time! We would leave bugs unfixed even if the fix was trivially easy because management felt productive listing it as a cost savings. Software maintenance was seen as a necessary evil.
Software maintenance was seen as a necessary evil.
The most important lesson I learned about the economics of software is that sourcecode is always accounted as a liability and not an asset. Accountants will never let you code your way into more value. Everything else you see stems from that truth.
Senior engineers write enabling code/scaffolding, and review code, and mentor juniors. They also write feature code.
Lead engineers code and lead dev teams.
Principal engineers code, and talk about tech in meetings.
Senior Principal engineers, and distinguished technologists/fellows talk about tech, and maybe sometimes code.
Good managers go to meetings and shield the engineers from the stream of exec corporate bs. Infrequently they may rope any of the engineers in this chain in to explain the decisions that the engineers make along the way.
Bad managers bring engineers in to these meetings frequently.
Terrible managers make the engineering decisions and push those to the engineers.
People in the technical career track spend most of their time making software, one way or another (there comes a point were you’re doing more preparation to code than actual coding).
As soon as you jump into the management career track it’s mostly meetings to report the team’s progress to upper management, even if you’re supposedly “technically oriented”.
Absolutelly, as you become a more senior tech things become more and more about figuring out what needs to be done at higher and higher levels (i.e. systems design, software development process design) which results in needing to interact with more and more stakeholders (your whole team, other teams, end users, management) hence more meetings, but you still get to do lots of coding or at least code-adjacent stuff (i.e. design).
I’ve worked for startups too; everyone does everything all at the same time! Let the chaos reign! But it is fun in its own way.
I work for a large company now after the startup I worked for was acquired. Hierarchy, bureaucracy, layers, we’ve got it all. For worse and for better though, it allows me to focus and specialize on what I’m awesome at and furgeddaboddit (ahem! delegate) the stuff that I suck at to those who excel at those tasks.
Absolutes in programming tend to lead to bad designs. This is more a “I’m gonna stir up some shit on Twitter” post than real wisdom.
No microservices usually leads to bloated, tightly coupled logic that ignores business domains
No monoliths usually leads to sprawling microservice deployments with tightly coupled dependencies and flavor-of-the-week new ones
No Kubernetes usually leads to VPS pets or crazy obstacle courses trying to get SSL termination without a million fucking dependencies in a cloud container orchestration system that isn’t as good as Kubernetes
All Kubernetes usually leads to huge SRE costs for a tiny app
The same shit happened last summer when AWS came out with their “we dropped microservices for a monolith and look at our speed increase” article which ignored good design principles. Sometimes you should split things over business domains so you can deploy and code independently. Sometimes Kubernetes is the best way to handle your scale needs. The stories we normally read are about people doing it wrong (eg AWS making a bunch of microservices inside a domain sending fucking gigs of data between what should have been functions in a single service). Inexperienced folks don’t always know when to move from their minimum viable solution to something that can scale. That doesn’t mean you remove these things, it means you train on when you need them.
Should we abandon design patterns because singletons or flywheels aren’t the correct solution all of the time?
Precisely, Gary Bernhardt has given a talk on ideology. I don’t think he’s precisely someone who thinks in absolutes. It’s just preaching that some stuff is (probably) used more than it should. I’ve seen way, way, way worse projects that over engineered things and made things slow and unmanageable, than the opposite. Of course, everyone has seen different things, and our perceptions are amplified and biased by that.
Monoliths are the answer to bad microservices. Microservices are the answer to bad monoliths. It’s all cyclic and four different architects are going to have fifteen different opinions on how your system should be built. Do the thing that makes sense for your team and try to stay flexible.
Saying that some projects, at some point in their lifecycle, don’t need certain things, is not saying that those things have no place. Also, if one can’t design a monolith that isn’t bloated and tightly coupled, one definitely has no business designing microservices. Using microservices is neither necessary, nor sufficient to achieve decoupling.
Monolithic services are the ideal way to begin a project, as using basic good practices, we can build a service that does many things with minimal coordination, and as it grows and requirements change or are discovered, we can easily refactor to keep things simple. As the software matures, we find the natural service boundaries, and find that certain pieces would perform better if they were separated out and could scale independently, or act asynchronously. Since we have followed good practices, this should usually be a simple matter of removing a class or module to a new service, and replacing it with a facade, such that the rest of the monolith doesn’t have to change at all.
Because Python uses indentation instead of curly brackets, which is why this meme exists. Also jetbrains ide s like pycharm and webstorm do all of this for you.
Not as good as jetbrains does, it automatically does things like realign when you paste things and lots of little things that improve the coding experience by a lot.
Me too, any day. I hate everything where indentation matters. Let me just throw my garbage there and YOU sort it out, you are the fucking computer, not me. You do the work.
Spaces? Tabs? Don’t care, works regardless.
Copied some code from somewhere else? No problem, 9/10 times it just works. Bonus: a smart IDE will let you quick-format the entire code to whatever style you configured at the click of a button even if it was a complete mess to begin with, as long as all the curly braces are correct.
Also, in any decent IDE you will very rarely need to actually count curly braces, it finds the pair for you, and even lets you easily navigate between them.
The inconsistent way that whitespace is handled across applications makes interacting with code outside your own code files incredibly finicky when your language cares so much about the layout.
There’s an argument to be made for the simplicity of python-style indentation and for its aesthetic merits, but IMO that’s outweighed by the practical inconvenience it brings.
Have you tried using an auto formatter? Let’s you write code however and fixes the structure automatically on save. It’s way easier for me to write curly braces then hit ctrl+s than have to select multiple lines manually and tab in and out. I feel the biggest gains I’ve made in productivity came after I learned to embrace tooling.
I felt dirty! and broke so much shit when i had to implement NAT on networks in the mid 90’s. Nowdays with ipv6 and getting rid of NAT is much more liberating. The difference is staggering!
you do not need NAT any longer, firewall is the security, just like on ipv4, just less obscurity.
you do not need dns views, to workaround NAT any more
you do not need hairpin NAT to workaround NAT any more
you do not need to renumber to resize a network. they are always /64, and the answer to how many hosts can it fit is: ALL of them!
many ALG’s will be unnecessary since there is not NAT.
vpn’s are easier, since it can be the same address both inside and outside the vpn, the firewall (or host even) enforces the encryption.
vpn’s are MUCH easier since you will have less rfc1918 collisions due to some other network using the rfc1918 of the vpn’s network
vpn’s are MUCH MUCH easier since you will have less rfc1918 collisions due to you using the rfc1918 of the vpn partner network, to 1:1 nat a previous vpn network you collided with some months ago… ARGH!!!
vpn are generally less required, heck i swear 95% of the time the VPN are just to workaround the NAT problem and the data is pointlessly double or triple encrypted.
you can make more granular firewall rules (eg the spesific host, or network of the source address, instead of the whole enterprise’s public ip) this is real tangible improved security, where any random machine in a network you do not control. do not automatically have openings into your own network.
firewall objects can if it is suited easily use and depend on FQDN DNS objects when allowing traffic. reducing the need of coordinating firewall object ip address changes between 15 companies.
firewall rules are easier, more readable, and much more predictable how they will work. All the hairpin nat, public to private nat, private to public nat for a thing that need a different public ip, 1:1 nat for a separate zone, NAT to a vpn or 50 (where 10 of them are 1:1 nat due to collisions, making you require 4 dns views of the same ip space!! ) very quickly gets messy and unreadable. this is probably the largest security benefit. just to reduce the complexity.
much easier to get people to use dns, since nobody wants to remember ipv6 addresses :D
nibbles in the ipv6 address can have meanings you assign to them, making the networks and structure both easy to remember and logically structured.
aggregating routes becomes very easy if you design your network that way.
firewall policies can become easier if you design your network that way.
your routing tables is leaner and easier, and of a better consistency. We have 1 large public ipv6 prefix, but 25ish ipv4 prefixes of all kinds of various sizes.
no need to spend $$ to buy even more ipv4 prefixes.
no need to have spent hundreds of $$ on a new ipv4 prefix only to be unable to use them for over a year because you need to sanitize the addresses from all the reputation filters. and constantly hound geo ip database providers to update the new country of the prefix. (i am bitter, can you tell…)
did i mention no need to renumber since you need to grow the /24 to /23 due to to many hosts in a network ?
did i mention no need to renumber 2 /24’s to /25’s to make space for that larger /23.
you do not even need any ipv4 addresses any more, use a public NAT64 service, for outgoing. and for incoming just use one of the many free public ipv4 to ipv6 proxies for your services online. for a homelab i really like v4-frontend.netiter.com (go support them) But most large business l networks use cloudflare, or akamai
since you do not need your ipv4 address space any more, you can ~~sell them for a profit $$$ ~~ return them to the RIR and give some address space to one of the thousands of companies struggling because they do not have any IPv4 : www.ripe.net/…/ipv4-waiting-list/
much lower latency on ipv6, since you do not go across a cloud based ipv4 to ipv6 proxy in order to reach the service ;)
Now the greatest and best effect of ipv6 is none of the above. It is that with ipv6 we have a slim hope of reclaiming some of what made the Internet GREAT in the first place. When we all stood on equal footing. Anyone could host their own service. Now we are all vassals of the large companies that have made the common person into a CGNAT4444 using consumer mindlessly lapping up what the large company providers sees fit to provide us. with no way to even try to be a real and true part of the Internet. Fight the companies that want to make you a eyeball in their statistic, Set up your own IPv6 service on the Internet today !
i got like a third through it before scrolling to the bottom to see how long it was. omg! should be the canonical example of the opposite of a shitpost ha
But DNS rarely break. The meme about it beeing DNS’s fault is more often then not just a symptom of the complexity of IPv4 NAT problem.
If i should guesstimate i think atleast 95% of the dns issues i have ever seen, are just confusion of what dns views they are in. confusion of inside and outside nat records. And forgetting to configure the inside when doing the outside or vice verca. DNS is very robust and stable when you can get rid of that complexity.
That beeing said, there are people that insist on obscurity beeing security (sigh) and want to keep doing dns views when using IPv6. But even then things are much easier when the result would be the same in either view.
That beeing said, there are people that insist on obscurity beeing security (sigh) and want to keep doing dns views when using IPv6. But even then things are much easier when the result would be the same in either view.
I broke DNS plenty of times in my homelab independent from NAT. In the last few months:
didn’t turn off DNS server in a wifi router set up as bridged access point
dnsmasq failing to start because I removed an interface
dnsmasq failing to start because the kernel/udev didn’t rename an interface on time
dnsmasq failing to start because hostapd error didn’t set proper interface settings
forgot to remove static DNS entries in /etc/hosts used for testing
forgot to remove DNS entries from /etc/resolve.conf after visiting a friend and working on his setup
Yes, most of them is my dumb ass making mistakes, but in the end it’s something that constantly breaks and it helps knowing the IP addresses of my servers and routers.
Aditionally, obscurity is a security helper. The problem is relying only on obscurity. But if I have proper firewall rules in place and strong usernames and passwords I still prefer if you don’t even know the IP addresses of my servers on top of that (in case I break some of the other security layers).
There’s one practical thing. Routers have had years to optimize IPv4 routing, which has to be redone for IPv6. Same with networking stacks in general.
In theory, IPv6 should be faster by not having to do bullshit like CGNAT. There’s every reason to think it’ll match that advantage if we just make it happen.
In the USA, around 50% of Google traffic and 60% of Facebook traffic goes over IPv6. The largest mobile carriers in the US are nearly entirely IPv6-only too (customers don’t get an IPv4 address, just an IPv6 one), using 464XLAT to connect to legacy IPv4-only servers. I’m sure we’d know if routing with IPv6 was slower. Google’s data actually shows 10ms lower latency over IPv6: www.google.com/intl/en/ipv6/statistics.html#tab=p…
That is not how it works. You can have a home network on ipv6. And it can reach all of ipv4 via nat ( just like ipv4 do today). A net with only ipv4 can not reach any ipv6 without a proxy that terminst the v4 connection and make a new v6 connection. since ipv6 is backwards compatible. But ipv4 is naturally not forwards compatible.
Also it is the default deny of the stateful firewall that always coexist with NAT, since NAT depends on that state, that is the security in a NAT router.
That default deny is not in any way dependant on the NAT part.
If there is a ipv6 service online. That you want to reach from a v4 only client. You can set up a fixed 1:1 nat on your firewall where you define a fake internal ipv4 address -> destination NAT onto the public ipv6 address of the service. And SRC NAT64 embed your clients internal v4 into the source ipv6 for the return traffic. And provide a internal dns view A record pointing to the fake internal ip record. It would work, but does not scale very well. Since you would have to set this up for every ipv6 ip.
A better solution would be to use a dualstack SOCKS5 proxy with dns forwarding where the client would use the IPv6 of the proxy for the connection. But that does not use NAT tho.
Yeah, here in Russia the ISPs and IT infrastructure guys seem to be treating IPv6 like it has cooties. I can’t find an article (and it’d be in russian anyway) but as far back as 2022, if you get IPv6 you can expect a variety of issues with it, ranging from “you need to reboot your router every once in a while” to “you technically have v6 but good luck actually browsing v6 internet”.
And of course, why would they give you a stable IP when they can charge for it :T. At least it’s only a third the price of a stable IPv4.
My current ISP technically provides v6 according to their site - but my connection doesn’t have it, and since there’s nothing about it in the years-old contract, I’d need to redo that if I want to complain.
There are usually plenty of choices for ISPs here, actually. But switching between them isn’t likely to give me IPv6 since either they share a magistral or the hardware is just plain old. That, and IPv6 is just not a thing anyone markets.
…and with the current fuckery going on, I doubt many of them have budget for big upgrades. Or maybe even access to hardware to buy.
The perpetual chicken egg problem of IPv6: many users don’t have IPv6 because it’s not worth it because everything is reachable via IPv4 anyways because IPv6 only service don’t make sense because they will only reach a subset of users because many users don’t have IPv6…
I mean, yes and no. For an individual or individual systems? No, it's not hard. But I used to oversee a WAN with multiple large sites each with their own complex border, core, and campus plant infrastructure. When you have an environment like that with complex peerings, and onsite and cloud networks it's a bit trickier to introduce dual stack addressing down to the edge. You need a bunch of additional tooling to extend your BGP monitoring, ability to track asynchronous route issues, add route advertisements etc. when you have a large production network to avoid breaking, it's more of a nail biter, because it's not like we have a dev network that is a 1-1 of our physical environment. We have lab equipment, and a virtual implementation of our prod network, but you can only simulate so much.
That being said, we did implement it before most of the rest of the world, in part because I wanted to sell most of our very large IPv4 networks while prices are rising. But it was a real engineering challenge and I was lucky to have the team and resources and time to get it done when it wasn't driving an urgent, short timeline need.
How about “Let me selfhost my own repos, so other people working with my stuff can use IPv6, as well as be sure no large corporation known for being cancer stands behind it and monitors every thing I do.”?
Honestly this isn’t even true anymore. Most major ISPs have implemented dual stack now. The customer doesn’t know or care because it’s done at the CPE for them.
I use a browser extension which tells me if the site I’m at is 6 or 4 or mixed. In 2024 most major sites support V6. A lot of this is due to CDN supporting it natively.
The fact that GitHub doesn’t is quickly becoming the exception.
Globally it’s at about 47% and growing at about 4% per year. If the rate remains unchanged it’ll be about a decade for >95%.
But the reality of it is, you don’t need global adoption out of the box. You just need majority adoption in the countries you visit, which for me are western countries (north America and Europe) which now have a majority adoption.
programmer_humor
Top
This magazine is from a federated server and may be incomplete. Browse more on the original instance.