Aussie living in the San Francisco Bay Area.
Coding since 1998.
.NET Foundation member. C# fan
https://d.sb/
Mastodon: @dan@d.sb

  • 0 Posts
  • 243 Comments
Joined 1 year ago
cake
Cake day: June 14th, 2023

help-circle
  • That really depends on the company. At big tech companies, it’s common for the levels and salary bands to be the same for both generalists (or full stack or whatever you want to call them) and specialists.

    It also changes depending on market conditions. For example, frontend engineers used to be in higher demand than backend and full-stack.


  • I really do enjoy that the web development community is finally getting excited about faster development tools, but…

    written in Rust

    It seems like there’s a new version of the old joke about vegans.

    Q: How do you know someone is a vegan writes code in Rust?
    A: They’ll tell you

    I don’t understand why the developers of these tools have to point out that they’re written in Rust in the first few sentences about the project, as if that’s the main feature? Programming language is an implementation detail, not a core feature. I don’t care what language my developer tools are written in as long as they’re fast.








  • Your data really isn’t worth that much.

    Also, it’s a common misconception that large tech companies like Google and Meta sell your data. They don’t. The data is what makes the company valuable - they’re not going to give away their competitive advantage. Instead, advertisers can target people based on the data. The advertisers never actually see the data nor exactly who their ads are reaching (it’s just aggregate anonymized data).

    On Google and Facebook, even individuals can use the same tools that large advertisers use to list their ads, and see exactly what they see.






  • I took down the home page of one of the top 5 websites for around 5 minutes.

    There were two existing functions that were written by a different team: An encode method that took a name of something (only used internally, never shown to the user) and returned a numeric identifier for it, and a decode method that did the opposite.

    Some existing code already used encode, but I had to use decode in my new code. Added the code, rolled it out to 80% of employees, and it seemed to work fine. Next day, I rolled it out to 5% public and it still seemed okay.

    Once I rolled it out to everyone, it all broke.

    Turns out that while the encode function used a static map built at build-time (and was thus just an O(1) lookup at runtime), decode connected to a database that was only ever designed for internal use. The DB only had ten replicas, which was nowhere near enough to handle hundreds of thousands of concurrent users.

    Luckily, it’s commonplace to use feature flags changes, which is how I could roll it out just to employees initially. The devops team were able to find stack traces of the error from the prod logs, find my code, find the commit that added it, find the name of the killswitch, and disable my code, before I even noticed that there was a problem. No code rollback needed.

    That was probably 7 years ago now. Thankfully I haven’t made any mistakes as large as that one again!

    Always use feature flags for major changes, especially if they’re risky!






  • This field needs to be checked everywhere the account is used.

    Usually something like this would be enforced once in a centralized location (in the data layer / domain model), rather than at every call site.

    for the automatic removal after x amount of days

    This gets tricky because in many jurisdictions, you need to ensure that you don’t just delete the user, but also any data associated with the user (data they created, data collected about them, data provided by third-parties, etc). The fan-out logic can get pretty complex :)


  • Seems like a TCP/IP stack issue rather than a browser issue… 0.0.0.0 is not supposed to be a valid address (in fact, no IPv4 address with 0 as the first octet is a valid destination IP). The network stack should be dropping those packets.

    0.0.0.0 is only valid in a few use cases. When listening for connections, it means “listen on all IPs”. This is a placeholder that the OS handles - it doesn’t literally use that IP. Also, it’s used as the source address for packets where the system doesn’t have an IP yet (eg for DHCP). That’s it.