Threads for jfredett

    1. 2

      I have one of these. I like it, but I will say it’s use is not like, transformative for me. It’s moderately improved my typing speed (after quite a bit of practice relearning how to type on it), not done much to relieve RSI (after quite a bit of tweaking, and more to come); but the customization is great, and I like the extra space it gives me in the middle of my desk and flexibility on arm position. Honestly that’s probably the best feature for me, the extra space.

      I have a harebrained scheme to attach it to a chair, I suspect if I spent more time customizing, I might get more out of it, but wasn’t the transformative jump like going from chiclet/laptop keyboard -> mechanical was.

    2. 1

      Retopologizing my home network. I’ve written up a procedure and I’m just finishing the final reviews and getting all my mise en place. $WORK always seems to choose ‘fast and cheap’, so it’s nice that I get to pick a double helping of ‘good’ at home. Few things feel nicer than being well prepared to try to do something complicated.

    3. 1

      $work: Documentation review, getting ducks in order, preparing for a long overdue patching of some old stuff.

      !$work: Planning a vacation, refactoring turnkey so that it works outside the little ecosystem I pulled it from, and maybe getting started on something new. Haven’t really decided.

    4. 1

      Gonna be warm-ish (45F) so probably the park w/ the kiddo, some coffee, and I’m hoping to extract a Nix tool I’ve built for managing secrets with Hashicorp Vault and systemd. I will definitely do the first two at least. I’m also behind on my avoid-success-at-all-costs youtube channel, so hopefully I can check that off for the month.

    5. 9

      $work: Putting out fires.

      !$work: Coming out of a years long depression/anxiety spiral that involved advanced medical science, religious trauma, family trauma, and just general bullshit.

      Feels good to be back.

      1. 2

        Welcome back!

    6. 2

      The BMI instructions are pretty cool, they’re also used in finding Minimal Perfect Hashtables for sliding attacks in Chess Engines via ‘PEXTBoards’ – which themselves derive from Magic Bitboards (which are also pretty cool).

    7. 7

      If by ‘rewrite’ you mean jump back in time and be in charge of making (that is, if I’d have to actually do the work and live with the consequences of that world), I would replace C with a C that didn’t have null, had a string type, and probably have objects. It’s the obvious answer, it’s probably going to be a good thing for everyone else on the list, and while I don’t think I’d like living pre-internet, I’d be okay to take the hit for the team.

      If by ‘rewrite’ you mean magically replace something that exists now with something changed, I think I’d probably rewrite the MIT license to be this ungodly poisonous copyleft thing and watch the world burn.

      1. 4

        Don’t forget 64-bit timestamps!

    8. 2

      I did not do well in college physics, but shouldn’t any perfectly insulated heat plate with a heat source eventually converge to 1.0 everywhere? Without any heat sinks, shouldn’t it just keep getting hotter and hotter until it matches the temperature of the source?

      1. 2

        I think so, but the examples used aren’t that – that would be equivalent to a Dirichlet condition where all the edges are pinned to 1. In the examples given, only 1 edge (the rightmost) is pinned to 1, and the other edges are all 0s, so there are sinks available (at least, that’s how I interpreted it).

        1. 1

          The Dirichlet example I agree makes sense. I was thinking more of the later examples where the 0 derivative edges are simulating a perfect insulator.

    9. 2

      what is the significance of 128 days? (The grace period after a business stops being “small”.)

      seems like an oddly specific amount of time.

      1. 2

        I think the license author just liked powers of 2 (later they use 32 days as well).

    10. 2

      Sizedness is lowkey one of the….

      I’m a native english speaker and am around 20-somethings incessantly, but still wonder, what does “lowkey” mean in this sentence?

      1. 3

        “Not often talked about,” I would guess.

        1. 2

          I’ve generally seen it used in a more personal way, as in, “This isn’t often talked about, but I think it should be.” It can also be used to mean ‘secretly.’ So we might translate the above to `Sizedness is secretly one of the most important…’

          In this article I think the author is using it in something between those senses. Pointing to Sizedness as an under-represented topic in the Rust community. Lots of focus on the borrow checker and memory safety and other such, but not that.

    11. 14

      All these folks out here noting that sum types existed in ML or Swift or F# or w/e. Who cares, this person found a cool thing that they like and I, for one, am happy for them. The fact that they came across them in Rust first only means that they will be extra excited to find them in Haskell later.

      Maybe just be happy for them and read a pretty good article about sum types.

      1. 4

        The fact that they came across them in Rust first only means that they will be extra excited to find them in Haskell later.

        That’s why (many) people point out the history, because we are excited to share it and spread the excitement. Of course, to a certain extent we also want to give proper attribution where it’s due, because our field really sorely lacks it sometimes.

    12. 4

      I think every discipline cares about it’s tools. Humans are tool-users, it’s literally what separates us most from other animals. I know that when I practice music, I care deeply that the tools I’m using are allowing me to make the most efficient and dexterous motions possible. I care a lot about the typeset of the sheet music and the quality of the strings on my guitar. So I don’t think it’s unreasonable that programmers spend time looking for good tools to amplify their ability in programming any more than I think it unreasonable when guitarists care about which brand of strings they like (Ernie Ball Aluminum Bronze, 13-56 is the only correct answer, I am not taking comments at this time) or what kind of pick they use.

      It’s true you can overfocus on those things as an excuse for poor practice habits, but they aren’t irrelevant – an uncomfortable pianist is likely to play worse than a comfortable one!

    13. 1

      99 times out of 100: notes, all other times are some variant of the usual metasyntactics: foo, bar, baz, tmp, etc.

      EDIT: Had a coworker who named everything he didn’t have a better name for ‘chicken’ – if he had multiple, I think he’d go with other farm animals. That was more for classes than for files though.

    14. 8

      I’ve had the experience that whenever I created such a file where the name “doesn’t matter”, I ended up stumbling across it some time later and I had no clue what it did and why it was there. I then had to open it and think about why it was there. And don’t get in the habit of deleting files with weird names, next thing you know is you’ve got some data loss or outages on your hand. Give your files names, even if it’s just ThisFileCanSafelyBeDeleted.txt. You won’t regret the additional 2 seconds you spent, it will pay for itself even if you just prevent confusing yourself once in your entire life.

      1. 3

        This might speak to the hostility of the architecture I inherited more than anything, but if I saw a file named ‘ThisFileCanSafelyBeDeleted.txt’, the last thing I would do is delete the file.

        That said, I do tend to name vmware snapshots something similar – usually something like ‘delete after DD-MON-YYYY - jgf’ so people know who made it, how long I needed it for, and whether it’s safe to delete. Your idea is similar and quite good, maybe if I can break through the gaslighting from my arch I’ll adopt it.

      2. 1

        I usually make tmp/ in my working directory if I need it, then name files in there whatever I want.

        Unfortunately in college I thought it was funny to name my scratch files loldongs and the habit has stuck. I’m not proud.

    15. 29

      One my friend noted that many people think that the UNIX principle is “do one thing”, while its original wording is “do one thing, and do it well”. So many “lightweight” projects indeed don’t do anything especially well, and then it doesn’t matter whether they do one thing or many. Size by itself is not an advantage.

      1. 19

        I’ve always found that ‘one’ thing is a bit ambiguous. You can argue that ‘converting file formats’ is a single thing just as well as ‘converting png to bmp files’ is one thing. People probably expect something in the middle, e.g. ‘converting images’. In practice, many programs will also allow you to resize, clip, rotate, etc.

        So maybe ‘clearly define your scope’ is a better alternative to ‘do one thing’. Not as catchy, of course.

        1. 5

          Good point. In my mind, VLC does one thing. But of course it does a lot. I mean it can even show videos on a chrome cast. It exists on pretty much all major platforms and now to contradict myself I’m not sure if it does one thing… I’m just confused.

          Does OBS do one thing? I’d say so but it has a lot of uses: like you can even use it as a virtual camera…

          1. 5

            Almost no GUI does “one thing” because very few platforms come close to cracking the nut that is GUI composability.

            1. 3

              Which do you think come close?

              1. 2

                Sometimes the web comes close. Depending on how you use it, smalltalk can. Maybe by “close” I should say “closer than anyone else”. We need to do better.

              2. 2

                I think many browsers come close. Netscape. IE. Opera 3-12 wanted to do many things, but you could disable all but the browser components. Today, it’s browsers like Dillo, NetSurf, and Links. My favorite browser today is great too, but it might as well be textmode…

                SimpleScreenRecorder is amazing, and does no more and no less than it promises, unless you count partial screen recording as a different thing.

                Audacity is great.


                1. 3

                  I’m sorry; I should have been more clear. I meant which platforms come close to cracking GUI composability.

                  1. 4

                    Looking only at GUI composability and nothing else, I’ve yet to see anything come close to how good Visual Basic is, and I’m talking about VB3 - VB6, not newer stuff. VBA falls under this umbrella as well, though Office integration complicates things a bit.

                    As far as what’s available, relevant, and floss today, you’re looking at it, it’s HTML, JS, and CSS. If you try my website, it works in 25 years worth of browsers. I’ve tested it on Windows 95 and up, and I’m confident it would work in Windows 3.1. It works (in compat mode) in IE2 on NT4. It also works in textmode browsers and with various accessibility useragents such as screenreaders. It’s zoomable, resizable, and modifiable.

                    It’s written by one borderline-idiot but very determined programmer, working part time, over the course of a couple of years. A roomfull of Googlers could rewrite it in 36 hours, probably. Why don’t they? I don’t know, but I would be embarrassed to have anything to do with most of today’s mainstream Web properties. If I could put today’s Gmail or Reddit on my resume, I’d probably leave it off out of shame and pad the time with something else…

                    But neverthless, the Web itself remains, and so does the freedom to write compatible code.

                    This wonderful, miraculous platform has remained stable enough over this time for me to be able to plan ahead and not be caught off-guard by something like “we’re deprecating version 2.0, please use new version 3.0 syntax” or “your platform is now obsolete, please switch to the new HTML.NET”. The W3C gang tries, and they fail, because HTML is stronger and bigger than them. The Web is stronger and bigger than all of them combined.

                    Many have tried to contain it, to own it, to be the main one calling the shots, and HTML laughs in all their collective faces. All thanks to its basic concept of “be strict with yourself, and accepting with others.”

                    Mosaic was the first browser for which “best viewed with” buttons were used. They failed to own the Web. Then came Netscape, “Mosaic killa”, and they managed to kill Mosaic, but they failed to tame HTML, because HTML will not be owned. Netscape was destroyed by Microsoft-IE, who also wanted to tame and own HTML, and they also failed, because HTML is not ownable.

                    Then Firefox came and fucked up IE, and things were good for a while, Mozilla was a decent steward. Then Google came and took ownership of Mozilla, and together with Chrome they also tried to tame HTML. They will fail just like the others. HTML cannot be tamed or owned. The Web was built for freedom.

                    If you want composable, future-proof GUI, open up your notepad.exe and write this:

                    <title>Hello, World!</title>
                    <h1>Hello, World!</h1>
                    This is demonstration of proper composable, 
                    future-proof, accessible GUI.
                    <form action="/">
                    <input type=text size=80 name=comment>
                    <input type=submit value=Go>

                    This GUI will work as expected and render in 25+ years worth of platform. And it could have been composed by a 10-year-old.

          2. 2

            I’ve generally thought of the “Do one thing” more as “Answer one question, and answer it as completely as possible.”

            So if the question is “How do I convert an image to another format.” then an image converting tool should try to completely answer that question. VLC falls into that model much more easily than the ‘do-one-thing’ version. Same thing with Vim or Emacs or VSCode – all different, but fairly complete answers to the question of “How do I efficiently edit text?”

            That model helps with the ‘clearly define your scope’ mentioned by @rustybolt fairly effectively, though it is subject to some of the same problems as ‘do one thing’ (“What question should I try to answer?” is a very natural way to break this rubric), but overall it seems to avoid at least some of the problems of the D1TW axiom.

      2. 9

        I would add “and play well with others” to that Nix maxim. That’s generally not a problem in the Nix world from what I’ve seen but it’s important to keep in mind: focusing on doing just one thing often means the users has to depend on several pieces of software to accomplish and they need to work well together.

    16. 11

      I am a big fan of Posits, which are the culmination of a year-long research effort in the field of ‘Unums’ which I was a part of with my Bachelor’s thesis. I analyzed an earlier approach based on interval arithmetic, which proved to be not so good, but if you are interested in the mathematics behind the “number circle” (i.e. the real numbers with just one infinity, which posits also make use of), definitely check out chapter 3.1.

      You might think that you lose something with just one infinity, but this is not the case! Even mathematically, you can express almost everything in infinite limits by approaching the infinity from below or above. Even cooler is that you can divide by zero and by infinity, and it’s all well-defined (see Definition 3.1 on page 17) and proven in this thesis.

      There are still invalid expressions (i.e. ∞+∞, ∞∞, 0∞, 0/0, ∞/∞, ∞/0), but the overall mathematics is much cleaner than the mess that we have with IEEE floating point numbers (see Definition 2.3 on page 3), which are cumbersome to use because of the subnormal number-“hack” and the many NaN-expressions.

      Regarding @olliej’s remarks: I’m a numerical mathematician and have never seen a case where one would need a signed 0 in an underlying algorithm where this isn’t just the IEEE-way to do something (but I might just be ignorant), but we can definitely agree on the signed ∞, which takes getting used to and requires more consideration in algorithm design. NaNs have one useful property, namely that when there’s an invalid calculation the error-state is propagated meaningfully. However, we waste a lot of space with NaN (see Table 2.1 on page 8, especially for low-precision floating-point numbers, where we waste 3.12% of available space for NaNs for half-precision (16-bit) floats that are very relevant for graphics cards), even though we only need just one NaN at most. Gustafson proposed other methods of error handling.

      To give my final remarks: We’ve been working with IEEE floating-point numbers for a long time and the entire ecosystem has been built around their many deficiencies. Proposing a new machine arithmetic format is as crazy as trying to boil off the ocean, I agree, but despite not having received decades of optimiziations in hardware, Posits as a new concept show so many extremely promising and impressive properties. It not only ‘works’ mathematically, where they are very simple and elegant to work with, but they also have massive advantages for hardware implementations, because they are much simpler to implement in silicon and might actually turn out to be much faster.

      Let’s see what the future brings.

      1. 5

        I work on a programming language for computer graphics. I’m not a numerical mathematician, but there’s a lot of floating point in my project, and my code is tightly coupled to IEEE float semantics. (A lot of code would be rewritten to switch to Posits, probably.) Also, I have opinions.

        I use NaN boxing to efficiently represent boxed floating point values. I stole the idea from Google’s V8 Javascript implementation in the Chrome web browser, but I think Firefox uses the representation as well. It would be cool if there were an analogous technique for Posit numbers, where a 64 bit word can represent either a pointer or a float. Perhaps you could use 64 bit Posit hardware to efficiently perform arithmetic on 63 bit posits, where the missing bit is used as a flag to indicate if the value is a posit or a pointer. That would be good and useful if that could be worked out.

        The fact that NaN != NaN in IEEE float is an atrocity. The standard equality operator in my language is an equivalence relation, where a==a, and that is not negotiable. William Kahan would not approve of my solution, but my language is not meant for numerical mathematicians.

        The fact that 0 == -0 in IEEE float arithmetic is a nuisance, from a programming language semantics perspective. @icefox posted a link showing that it is causing problems for Javascript language designers as well. It’s a problem I can live with though. I can allow this without breaking the equivalence relation axioms.

        My language supports both finite and infinite geometric objects, and the language depends on the properties of inf and -inf to represent these infinite objects. I don’t know how this would work with Posits. Maybe I could use an affine representation for points and vectors, but that is a non-backward compatible API change.

        I’m not too worried about ever having to deal with these issues, since it would require ARM and Intel processors and consumer class GPUs to drop IEEE and switch to Posit before I had to do anything.

      2. 1

        This thesis looks much more readable than the article. I really like the idea of novel arithmetical systems, it’s definitely an uphill battle to implement, but it’s worthwhile since the alternative is “We’ve tried nothing, it didn’t work, and now we’re out of ideas” is pretty lousy.

        I would definitely like to hear from @olliej on what algorithms may need +/- 0 or infinity that may not be adaptable. Not because I think they’re wrong or trying to mislead, but because if that truly is the case there is likely to be a lot of interesting mathematics there.

    17. 3

      Honestly pretty put off by the unnecessary ‘religion’ metaphor. Made it pretty hard to follow the whole thing.

    18. 2


      I started going to therapy about 2 years ago. It has been, no question, one of the most profound sources of change (for the better) in my life since becoming an atheist nearly 15 years ago. I’ve had trouble with anxiety and fear dictating a lot of my life, and preventing me from doing, saying, or just being things I wanted to be; Therapy has radically altered my relationship with those feelings in a way that seems trivial at first, but in reality is deeply elegant in the sense of mathematics.

      Therapy provides a perspective which you can, after sufficient due-diligence, entirely count on to be consistent and explicit about it’s pre-existing biases. That simple provision – knowing that there is at least one person who will not bullshit you, nor allow you to bullshit them, is such a useful tool for efficient introspection; the best analog I have is it’s pair programming for your own mental operating system. Refactoring your own mind to better serve your interests is at first a little scary, but the results cannot be argued with. I feel less terror at the things that would leave me apoplectic. I feel more in control of who I am and what I do. It’s honestly just the fucking greatest. I heartily recommend it.

      (This not to say it’s for everyone, it’s also not a cheap endeavor (though many therapists provide sliding scales in terms of cost), but if you can spare it, it’s worth the money IMO. If I had my druthers, it’d be on offer for everyone, for free, but I’m a filthy Communist, so take that for what you will).

    19. 2

      I was originally planning on working on the open-sourcing my framework for building distributed systems, Encore. Unfortunately my MacBook display broke down (a bunch of purple lines across the screen) so need to spend the weekend getting it repaired and setting up my dev environment on another machine. Fun times!

      1. 1

        I’m basically the least lucky guy on the planet and have computer issues constantly, the best thing I ever did was migrate to using a VM for a Dev environment. I can get a more or less full dev-laptop experience, but it’s easier to back up, easier to replicate to other machines if my main one dies, and generally just pretty much the-universe’s-attempt-at-a-better-idiot-proof. Heartily recommended.