1. 5

    Cogmind’s entire devblog is a fascinating read, and pays a great deal of attention to UX while staying true to the roguelike aesthetic. Good share.

      1. 2

        Is there a collection of common Haskell refactorings?

        The list of refactorings in Martin Fowler’s Refactoring book taught me much as a neophyte programmer.

        1. 7

          Common mechanical things I do:

          • Rename terms
          • Rename types
          • Move terms and types
          • Add field
          • Add constructor
          • Extract functions
          • Inline bindings
          • Extract type aliases
          • Inline type aliases
          • Make type declarations more polymorphic
          • Remove dead code
          • Use laws to simplify expressions
          • Replace conditionals with folds
          • Replace uses of record fields with lenses
          • Replace specific pattern matches with prisms
          • Church-Encode data structures
          1. 3

            I’m not aware of any, but find Fowler’s philosophy pretty useful even so. Some of them port over pretty easily, like Add Parameter/Remove Parameter, but others will make less sense (Replace Conditional with Polymorphism would probably end up being something like Replace Conditional with HOF).

          1. 2

            If you manage to find a compatible network card, you might be able to load up a MS networking driver and get it to talk to a Samba server. I managed to do this in around 2004 or so, to make netbooted machines download Doom to a ramdisk.

            1. 11

              “LoseThos was also at risk from attack from even basic malware and viruses, Terry simply got around this by never writing any network functionality. Ruling out any internet or LAN features. Terry also neglected to add the ability to print anything, meaning anything created on LoseThos would never be able to be shared with anyone else. Because of this, Terry suggested running the OS with a modern OS such as Windows in a virtual machine. This just leads to more questions about why exactly LoseThos was created.

              Sounds like the digital version of a temple meant to show appreciation for and/or experience something rather than create outputs to share with other human beings. The second name was better given the intended purpose was more clear. (still reading as I write this) Then I see “successor to Solomon.” Yup.

              The man was no doubt a great, dedicated programmer. Sad his mental illness destroyed his ability to really apply that potential. And his life. I was also feeling for his family as I read it. All this had to be hell for them, too.

              1. 18

                Sounds like the digital version of a temple meant to show appreciation for and/or experience something rather than create outputs to share with other human beings.

                The fact that this ethos [of hacking] needs justification is deeply disturbing to me.

                What is hacking about, ultimately? Is it because we think the world needs this piece of software in it, and it is better for it? Or is it because we get a pat on the back and some worthless Internet Points to show? Everyone must answer that for themselves. But I fear the social aspects threaten to overwhelm the intrinsic qualities of hacking.

                Feels a bit like the extroverts felt the need to colonize another domain with their worthless status symbols. That sounds really bitchy, but it phrases it best.

                1. 4

                  Option 3: The hacker made the hack for hack value, and that is sufficient.

                2. 4

                  Terry suggested running the OS with a modern OS such as Windows in a virtual machine.

                  This seems like an elaborate pun on Windows. “If you can’t see outside, just make some Windows”

                1. 8

                  After reading a few comments on the thread, we can understand why it’s so hard to write “good makefiles”.

                  The makefike presented in this post is really simple, and make use of a “trick” (gcc dependency graph) to make it smarter. Then we have people advising to add this or that, to make it even more “automatic”, at the cost of making the makefile itself more complex and less portable.

                  To me, a good makefile is a simple one that doesn’t use any tricks, so I can easily understand how it works, and can tweak some settings using standard variables, like LDFLAGS or CC.

                  IMO, this is by trying to trick the makefiles to be always smarter and automatic that we ended up in the mess it currently is with cmake and autotools.

                  1. 7

                    “trick” (gcc dependency graph)

                    Fun fact, Ninja also uses that. That’s the only way to get header dependencies right (other than forcing the user to list them all manually or parsing includes i.e. reinventing the compiler)

                    1. 2

                      All serious build tools do it, because it’s the right thing to do. The best way to do this is to touch depfiles on the first pass, then overwrite them as a side-effect of compilation. (This is what automake does.)

                  1. 0

                    The encryption law in question was passed.

                    If you’ve got any kind of political sway in your organisation, you might want to encourage them to not buy software from Australian companies (hi, JIRA!) or at least not security-relevant software.

                    1. 8

                      I think it’s irresponsible to make this claim because I don’t believe the legislation in any way forces or even encourages Australian companies to produce software that is in any way less secure. I think there are some parts of the legislation where are questionable but this particular claim (that it forces the creation of back doors) is FUD.

                      1. 1

                        Page 8 of the Explanatory Memorandum, emphasis as per source:

                        Allow the Attorney-General to issue a technical capability notice, requiring a designated communications provider to build a new capability that will enable them to give assistance as specified in the legislation to ASIO and interception agencies.

                        With the following “safeguard”, whatever that means:

                        A technical capability notice cannot require a provider to build or implement a capability to remove electronic protection, such as encryption.

                        1. 5

                          A technical capability notice cannot require a provider to build or implement a capability to remove electronic protection, such as encryption.

                          Right; i.e. it can’t force the creation of a back door. That’s what I’m saying.

                          1. 2

                            You can (eg) add a hidden participant to a whatsapp chat whilst keeping it E2E encrypted (not hypothetical; has happened).

                            That leaks the content to whoever holds the extra participant key. I’d call it a backdoor even if the encryption hasn’t been removed.

                            You can’t make them remove crypto, but you can make them build tech to give you the keys.

                            1. 1

                              Wording is that it can only be specific, not “systematic” - if an agency asks for you to systematically weaken security, you can’t be compelled to comply. This doesn’t apply for the “voluntary” Technical Assistance Requests.

                              1. 1

                                Per my other reply - getting yourself inserted into one conversation unlikely to be called a ‘systematic’ weakening in the eyes of the law (even if the practical outcome is that security is weaker across the board).