Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot Mniot

  • 0 Posts
  • 17 Comments
Joined 2 months ago
cake
Cake day: March 10th, 2025

help-circle
  • To someone watching network traffic, a VPN connection looks like two machines exchanging encrypted packets. You can’t see the actual data inside the packet, but you can see all the metadata (who it’s addressed to, how big it is, whether its TCP or UDP, when it’s sent). From the metadata, you can make guesses about the content and VPN would be pretty easy to guess.

    When sending a packet over the Internet, there’s two parts of the address: the IP address and the port. The IP address is a specific Internet location, blocks of IP addresses are owned by groups (who owns what is public info) and there are many services that do geo-ip mappings. So if you’re connecting to an IP address that belongs to a known VPN provider, that’s easy.

    The second part of the address is the port-number. Servers choose port-numbers to listen to and the common convention is to use well-known ports. So, for example, HTTPS traffic is on port 443. If you see a computer making a lot of requests to port 443, even though the traffic is encrypted we can guess that they’re browsing the web. Wikipedia has a list (which is incomplete because new software can be written at any time and make up a new port that it prefers) and you can see lots of VPN software on there. If you’re connecting to a port that’s known to be used by VPN software, we can guess that you’re using VPN software.

    Once you’re running VPN software on an unknown machine and have configured it to use a non-standard port, it’s a bit harder to tell what’s happening, but it’s still possible to make a pretty confident guess. Some VPN setups use “split-tunnel” where some traffic goes over VPN and some over the public Internet. (This is most common in corporate use where private company traffic goes in the tunnel, but browsing Lemmy would go over public.) Sometimes, DNS doesn’t go through the VPN which is a big give-away: you looked up “foo.com” and sent traffic to 172.67.137.159. Then you looked up “bar.org” and sent traffic to the same 172.67.137.159. Odds are that thing is a VPN (or other proxy).

    Finally, you can just look at more complex patterns in the traffic. If you’re interested, you could install Wireshark or just run tcpdump and watch your own network traffic. Basic web-browsing is very visible: you send a small request (“HTTP GET /index.html”) and you get a much bigger response back. Then you send a flurry of smaller requests for all the page elements and get a bunch of bigger responses. Then there’s a huuuuge pause. Different protocols will have different shapes (a MOBA game would probably show more even traffic back-and-forth).

    You wouldn’t be able to be absolutely confident with this, but over enough time and people you can get very close. Or you can just be a bit aggressive and incorrectly mark things as VPNs.


  • I don’t know. I might say “Matrix” and run a private server? But that’s a bunch of IT work. It’s attractive to use a SaaS because you don’t have to do any long-term planning or hiring; just pay Slack a crazy amount of money and it all works.

    Corps also like a commercial paid service because they get a contract with an SLA (even if it’s rare to actually get anything from these SLAs).





  • it is agnostic of cloud providers: you can use it to deploy infrastructure to multiple providers

    Nicely put. I frequently see the first part of this sentence and not the second. (Maybe I only pay attention to the first part and then disappoint myself…)

    Terraform/Tofu allow me to use the same basic syntax and to have one project that controls AWS/GCP/K8s/my home servers, but I cannot use it to describe “a running server process” and just deploy that on any of those places. Instead I’d need to have like aws_beanstalk_service { ... } and gcp_application { ... } and kubernetes_manifest { ... } and systemd_service { ... } and the contents of those blocks would be totally different (and I’d need a bunch of different ancillary blocks for each of those).


  • The job market is not terrible. But there is a frustrating thing where a “senior” developer with 3 years of experience will get tons of recruiter-spam offering them $200k+ positions, while a junior developer (your position) will get ghosted when you apply for a job that’s offering to pay $50k. So it can feel demoralizing because people you see as your peers are having a very different experience. (And if you go in some circles the FOMO just never stops; people telling you you’re wasting your life not being a Meta dev getting $800k TComp or founding a unicorn start-up…)

    You say you enjoyed programming, which sure sounds to me like you could enjoy getting paid to do it. But it’s easy to overwork yourself because your boss says that real developers pull 80-hour weeks. Or burn out because it’s so frustrating to watch bad decisions ruin your good work. If you can find the right balance of caring and not caring, you can make good money and enjoy your job.

    And it only takes a year or two to get rid of the “junior developer” label and then jobs are a lot easier. (Others have said that the market is bad. And it is bad compared to how it was in, like, 2020. But it’s still a very good market all things considered.)


  • I have no idea how well it works in reality, but I can imagine the Lifetime Pass being a good business model for them: only the most enthusiastic user will pay for 3 years up front (lifetime currently costs 3x the yearly). So when they get a Lifetime pass they’re getting 3 years paid up front and an evangelist who will probably tell their friends about Plex. If that Lifetime subscriber gets even one person to sign up for a yearly sub who otherwise wouldn’t have, then Plex came out ahead.






  • The row limitation seems, to me, like an actually-good thing. Excel is for data where you might conceivably scroll up and down looking at it and 1M is definitely beyond the ability of a human even to just skim looking for something different.

    An older version of Excel could only handle 64k rows and I had a client who wanted large amounts of data in Excel format. “Oh sorry, it’s a Microsoft limitation,” I was thrilled to say. “I have no choice but to give you a useful summarization of the data instead of 800k rows (each 1000 columns wide) of raw data.”


  • Actual UML-according-to-some-books is old and unpopular now. I think C4 is taking its place, in that I’ve seen architect-types ask for it. More generally, I really like PlantUML and the prettier-looking Mermaid which both allow me to code diagrams using a text document.

    Yeah, I agree: academia gets people expecting to go, “give me 2x Visitor Pattern, then 1 Builder Pattern, then as many Divide and Conquers as you need to reach the end”. It can be nice to have a name for things, but most of the time I’m asking for, “see how the setup, actual work, and cleanup are nicely divided up? Do like that.” Or, “let’s put all the related endpoints in the same file.”



  • As an undergraduate, I wondered how it was possible to write code professionally, because I could only barely fit the semester-long programming assignment in my head. When I asked my professor about it, I got an independent study credit to learn about UML.

    UML (as a representative example of thoughtful documentation) is a partial answer. But actually a much larger part is that with practice I can hold a lot more code in my head. Today, that semester project seems trivial and if I see a stack trace I can tell you how to fix the bug that caused that exception to get thrown.

    As a senior dev, I’d answer “how do you remember what your code does?” with

    1. As you work, you get better at just remembering
    2. As you find patterns and follow them, you’ll have less to remember (I bet I know what the downloadUnpackUpdate() method does!)
    3. As you do the first two, you’ll learn to recognize when comments are helpful