Hacker Timesnew | past | comments | ask | show | jobs | submit | InfamousRece's commentslogin

I’d love to outsource all the boring, tedious parts of my job to LLM. Unfortunately it is the upper management who decide which parts of my job are boring.


I also feel things changed a lot. We’re now getting vibe coded prototypes from management - thousands of lines of spaghetti that we must make production ready “by yesterday”. After all the difficult part has been accomplished already. Oh, and this is a list of additional features that should be very easy to add while you’re at it.


I think this is a real friction point in the transition phase. Right now, many teams are still learning the difference between a fast AI-generated prototype and a production-ready system.

My guess is that, over time, the ecosystem will adapt with better expectations and frameworks, clearer handoff models, and more mature workflows around AI-generated work.


I believe they skipped blockchain first so at least there is that.


No, they were all-in on Blockchain-as-a-service on Azure for a hot minute, and it's still included in their supply chain protection stack (which in fairness is one of the few use cases that makes a lot of sense)


In my career I never received any recognition for well designed and executed projects. Even the ones that were high impact and widely praised by customers. I had much more luck with shitty/buggy stuff that should not have been released. Yes, I’m not perfect and suffer from brain farts sometimes. In such cases I could play a hero that worked whole nights/weekends to put down fires. And I got rewarded for that.


At my previous place IPv6 was useable (I was getting /60 prefix rather than /64 I’m getting now) but the prefix was changing often - several times per day. This was annoying because every prefix change all addresses of my devices changed too. So in practice I always used private IPv4 addresses to connect to them. A NAT would solve this issue.


Well, delegated IPv6 prefixes are supposed[1] to be static or somewhat persistent, but some ISPs do this, yes. This is most likely a practice carried over from IPv4 where there is a small pool of addresses. Fortunately in my experience it's not too common: most ISPs that deployed IPv6 did it the right way.

Anyway, to get persistent addresses you can set up a ULA prefix (the equivalent of RFC 1918 addresses) and a simple prefix translation[3]. This is a form of NAT, but unlike the usual IPv4 NAT (actually NAPT) it doesn't deal with ports, so it's slightly less annoying problematic. There also are a few more techniques, like using mDNS and writing firewall rules that match the suffix of the client addresses, but not many CPE allows for this.

[1]: https://www.ripe.net/publications/docs/ripe-690/#53-why-pers...

[2]: https://en.wikipedia.org/wiki/Unique_local_address

[3]: https://openwrt.org/docs/guide-user/network/ipv6/ipv6.nat6


You don't need prefix translation to use a ULA prefix. You just configure both the ULA and the ISP-delegated GUA prefixes simultaneously.


Right, the ULA prefix theoretically has lower preference, so it should only be selected to reach hosts in the LAN and the GUA for everything else, but I don't know how well softwares handle this in practice.


Source address selection is usually left to the kernel, so that part should be okay. It'll pick a GUA source for a GUA destination unless you've changed the labels with `ip addrlabel`.


Same at my place. I get a /64 prefix and my router simply cannot work with that at all.


In my case I don’t even mind if these evangelists try so hard to convince other developers. What I do mind is that they seem to be quite successful in convincing our bosses. So we get things like mandatory LLM usage, minimum number of Claude API calls per day, every commit must be co-authored by Claude, etc.


That sounds horrible.


To be fair it was not that difficult to set create a pure 64 bit binary distro and there were a few of them. The real issue was to figure out how to do mixed 32/64 bit and this is where the fight about /lib directories originated. In a pure 64 bit distro the only way to run 32 bit binaries was to create a chroot with a full 32 bit installation. It took a while before better solutions were agreed to. This was an era of Flash and Acrobat Reader - all proprietary and all 32 bit only so people really cared about 32 bit.


Yeah that kind of thinking is known as “doorman fallacy”. Essentially the job whose full value is not immediately obvious to ignorant observer = “useless busy work”.


Will it compile Knuth’s test? https://en.wikipedia.org/wiki/Man_or_boy_test


That test is short enough to just paste it in here:

    begin
      real procedure A(k, x1, x2, x3, x4, x5);
      value k; integer k;
      real x1, x2, x3, x4, x5;
      begin
        real procedure B;
        begin k := k - 1;
              B := A := A(k, B, x1, x2, x3, x4)
        end;
        if k ≤ 0 then A := x4 + x5 else B
      end;
      outreal(1, A(10, 1, -1, -1, 1, 0))
    end
The whole "return by assigning to the function name" is one of my least favorite features of Pascal, which I suppose got it from Algol 60. Where I'm confused though is, what is the initial value of B in the call to A(k, B, x1, x2, x3, x4)? I'm guessing the pass-by-name semantics are coming into play, but I still can't figure out how to untie this knot.


Yeah that's one of the things the test was designed to catch: at that point, B is a reference, to the B that is being defined. Here's a C++ translation from https://oeis.org/A132343 that uses identity functions to make the types consistent:

    #include <functional>
    #include <iostream>
    using cf = std::function<int()>;
    int A(int k, cf x1, cf x2, cf x3, cf x4, cf x5)
    {
        int Aval;
        cf B = [&]()
        {
            int Bval;
            --k;
            Bval = Aval = A(k, B, x1, x2, x3, x4);
            return Bval;
        };
        if (k <= 0) Aval = x4() + x5(); else B();
        return Aval;
    }
    cf I(int n) { return [=](){ return n; }; }
    int main()
    {
        for (int n=0; n<10; ++n)
            std::cout << A(n, I(1), I(-1), I(-1), I(1), I(0)) << ", ";
        std::cout << std::endl;
    }
So in the expression `A(k, B, x1, x2, x3, x4)`, the `B` there is not called, it simply refers to the local variable `B` (inside the function `A`), that was captured by the lambda (by reference): the same B variable that is currently being assigned.


Thanks, that's a bit easier to trace: I think what broke my brain initially is that the x1-x5 parameters were declared as real, when they're apparently nullary functions returning a real. Brings to mind CAFs in Haskell. And all that that in 1960 when most things had less CPU power than the chip in my credit card.


No, because Knuth’s test was for Algol 60 and Algol 68 is a very different programming language.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: