Threads for zod000

    1. 10

      So true. I feel like I have to kill slack off every few days to stop my computer from melting.

      1. 4

        On my Windows desktop at work Slack currently has 10 separate processes which amount to 547MB of RAM used. We just started using it, it’s just sitting in the system tray getting no messages.

      2. 2

        This is one of those few times I think separation kernels might help in non-security use on desktops. Well, it sort of is a security principle where the app becomes a threat to your machine. The separation kernels would enforce strict time (CPU) and space (memory) isolation on the system where apps only get what you allow them. They can ask for as much as they want but can’t bypass limits. Might even be ways to force a sleep on them that way where they just think the Internet went down and back up a while or something. Nah, the partition just got no CPU time for a while. :)

        Example showing how much is controlled:

        Note: Either the app would have to run in VM’s or be redeployed to use such tech. Otherwise, it’s all in one partition that all goes sluggish at once.

        1. 2

          Can’t a half arsed version of this be achieved with a normal kernel with modified scheduling, “Oh, you took 100% CPU the last 3 times you context switched to you, we’re going to skip you next round, we’ll get back to you in a few nanoseconds, good luck!”.

          1. 2

            Yeah you can do that. It’s just not guaranteed to work if the kernel is non-deterministic or easily impacted by what apps do. You can do it, though.

      3. 1

        Slack and Atom are both common culprits on my system.

    2. 6

      I have tried a lot of closed headphones so I’ll throw my two cents in.

      The best isolating over ear headphones I have used are probably the Beyerdynamic DT770M (the M is the extra-isolating model for drummers) and it fits in your price range. The standard DT770 comes with velour pads and isolates well, but not as well as the M model.

      The Audio-Technica ATH-M50 and A700x (the other closed A#00 models do as well, but the A900x costs double and the A500x doesn’t sound good imo) also do a good job isolating and sound pretty good.

      The Sennheiser HD280 isolate well, but clamp so hard it hurts and don’t sound particularly good.

      The Sony MDR-V6 (and family) isolate OK, but I don’t love the fit or sound.

      The Bose Quiet Comfort were comfortable for on-ears, but didn’t seal well for me and didn’t sound very good either.

      The V-moda LP2 were supposedly over ear, but felt like on-ears and didn’t seal well, and thus didn’t isolate well or remain comfortable.

      I am probably missing some I have tried, but that should give you a good start.

      1. 3

        I can vouch for what this man says. I got a pair of DT770s (for me) and a pair of ATH-M50 (for the wife) per his recommendation. Both of us are extremely happy with them!

        When I take my DT770s into the office, I am in my own world!

    3. 7

      I applaud how serious the author makes this seem:

      This could lead to a catastrophic brushing failure where the toothbrush runs out of power in mid-clean.

    4. 18

      I can’t say I support the author’s wacky idea of “Unix Zen” as a system development strategy, but I do think that some of the new “cool” ways of doing things are leading under-informed developers into the wrong direction. All too often I have fellow developers suggest a solution to a simple task that somehow requires multiple EC2 instances, a dozen new libraries with their own DSLs, and/or completely changing our deployment strategies and back end tools. If the author had stuck with this nugget from his conclusion:

      You can minimize risk by using the well-proven tool set

      I’d have backed him up 100%.

    5. 5

      I am not sure if this is actual satire or just plain idiocy. It hurt my brain and I thought I should share the pain.

    6. 10

      Seconded. The older I get, the more the “new hotness” is something I’ve seen before with a new facade.

      1. 3

        Exactly, I feel less and less impressed by “new” things that are clearly quite similar to things I have already seen or used.

        1. 1

          There’s new stuff that matters, you just aren’t exposed to it because it’s popular.

          I teach said “new stuff that matters” and it blows peoples' minds on a regular basis. It’s important and affects more than just programmers.

      2. 3
        • I wonder how non-technical management view such attitudes. To me it shows that the person has done their research, which I respect. To the non-technical I bet it sounds very “get off my lawn”.

        • There is also a trap here one has to keep an eye out for - trying to form every problem in terms of things you understand. I’ve worked at places where they stagnated because the original developers only knew how to translate problems into the existing system they created. Of course, I know this isn’t what are saying. But at the same time it’s hard to see that from the inside. While this will be a somewhat controversial statement, this is a problem I have with some “NoSQL is no better than RDBMS” crowd. Yes, you can express some of the same problems in both. No, it’s not always good. It’s ok to be good at one thing, not every problem needs to be expressed in terms of relational algebra.

      3. 1

        Me too. But then, every once in a while, it works out differently. Like when Facebook came along, it was a lot like Sixdegrees, and Friendster, and Orkut, and LiveJournal, all of which I already had accounts on, or had had accounts on before they closed up shop, so I didn’t bother. I didn’t have any idea how different it was going to be.

    7. 24

      For those not wanting to watch 6 minutes of video, the summary is:

      Haskell has traditionally been safe but also useless, meaning that it’s free of side-effects (and what’s the point of a computer program that has no side effects?). He contrasts this with C, Java, C# which are unsafe but useful and points out that all languages are developing in the direction of safe and useful. For C/Java/C# this means going from unsafe to safe, and for Haskell it means going from useless to useful. To do this for Haskell, they’ve figured out how to keep side effects separate from pure code, and this concept has been slowly leaking back into C#.

      1. 4

        Excellent summary, that is exactly what I took away from it.

      2. 4

        and what’s the point of a computer program that has no side effects?

        A side-effect is a function which does something other than produce a value. We don’t need those to write programs; Haskell is the perfect example of treating IO as values.

        1. 5

          The act of producing a value is a side effect. If you print it to a screen, it’s a side effect. If you set the exit code of your process, that’s a side effect. If you want to do anything like communicate with a database or a service or a keyboard, those are all side effects.

          Even non-termination is a side-effect (one which happens to be uncontrolled in Haskell).

          1. 7

            The act of producing a value is a side effect.

            What does that mean?

            I’ve seen some people say similar things but their definition of a side-effect is “something does something” which is next to useless and not what side-effect actually means!

            1. 5

              I think the following sentences explained it very well.

              To actually produce a value using a program running on a computer it must perform a side effect. This is the standard definition in the literature, including Peyton-Jones’s.

              Edit: I think I see how this is confusing. Technically, any observable effect of running a program is a side effect. Modifying the exit code of a process is observable and is technically a side effect.

              However, this tends not to be a definition of super-practical use. In context, the term “no side effects” is often used as more of “it doesn’t really touch state that matters.” This is also the way monad is often used – people will say something is a monad, when it has the right type, but actually doesn’t strictly follow the category rules.

              The point I was making was really that you were nitpicking unproductively. Serious language designers should recognize that the goal in language design is to actually write programs, not debate grammatical points.

              1. 5

                I don’t think I’m nitpicking, it’s an important distinction to make and people often get it wrong. I don’t think it’s unproductive to point out the problem, especially since you’re now wondering about it.

                To actually produce a value using a program running on a computer it must perform a side effect. This is the standard definition in the literature, including Peyton-Jones’s.

                Here’s a screen shot of the awesome Functional Programming in Scala book. Doing something other than “returning a value” really is the formal definition! Pinky promises that I’m not making things up.

                Serious language designers should recognize that the goal in language design is to actually write programs, not debate grammatical points.

                I don’t know what this means, are you imagining a dichotomy between talking about what ‘side-effect’ means and enabling the writing of programs? What does it mean to be a serious language designer?

                1. 1

                  Purity is a bit up to the language to define, however. For instance, evaluation in Haskell can force thunks and cause the execution of other code to change observably. It’s simply a matter of Haskell preference to decide that evaluation time is “unobservable” from the point of view of the language semantics.

                  There still a super important distinction to be had around purity. It becomes the most clear when you have strong types and thus a consistent and total notion of canonical values. In that case, one poor image of “purity” is to say that the only value you get out of running a function is to receive the canonical value of its result. In a more mathematically rigorous sense you might write

                  The function f : A -> B is pure iff
                    const () . f == const ()

                  In other words, when I throw away the result of computing the function f using const () the result is somehow “equal” to const (). The exact choice of const () and the exact meaning of equality shift around, though, and provide slight variations on what purity means. For instance, we might replace const () with

                  trivial :: a -> ()
                  trivial a = a `seq` ()

                  which is a more restrictive form of “purity” since non-termination is now a side-effect.

                  1. 2

                    How is it a preference for Haskell to say that evaluation time is unobservable? If Haskell allowed functions to observe time then those terms would not be referentially transparent! It’s not about what a language is “allowed” to observe.

                    Haskell works under the definition that bottom is a valid value and seq is not referentially transparent. If you change the definition of Haskell terms, you could say that bottom is not a value and then you get to say that non-termination is a side-effect. I’m definitely with you on doing that!

                    1. 1

                      No, of course. Haskell is internally consistent with its definition of pure (except where it isn’t, and those places are forbidden). I’m just relating that the definition of side effect is often a little bit fuzzy at least. It’s a good argument to have as to what the tradeoffs of stricter and stricter definition of purity are.

                      I’d love to have non-termination as an effect, but I’m also perfectly happy to admit that it’s a tradeoff.

          2. 2

            So under this definition, what isn’t a side effect? I don’t disagree that most of the things you mentioned are side-effects but if we extend this notion such that even producing any value is a side-effect then this is just a truism since every conceivable computation is effectful. It’s more interesting to study the topic under the constrained definition of observable vs unobservable effects.

            1. 2

              No, once you accept the definition that everything is a side effect, it lets you focus on adding language support for controlling the side effects that matter.


              x = 1 y = 2 x = 1

              Is side-effectful according to Haskell definitions (you modified x), but it’s also completely unimportant. You haven’t gained anything from pointing that out. Talking about side-effects is only useful in a highly contextual discussion about making it easier to perform some specific task in a programming language.

              1. 5

                You do gain things from pointing it out, though. Huge things!

                By pointing out something is a side-effect, you’re also pointing out that you’ve lost referential transparency. By pointing out that you’ve lost referential transparency, you’re also pointing out that you’ve lost the substitutional model of programs. By pointing out you’ve lost the substitutional model of programs, you’re also pointing out that you’ve lost equational reasoning.

                And I really don’t want to lose equational reasoning. I do functional programming because I highly value treating my programs as sets of equations. It allows me to treat types as theorems, allows abstraction without implications and is just an extremely simple form of formal reasoning which people can do in their heads or on paper!

                1. 1

                  When I was writing C and IA-32 assembler in kernel mode I didn’t care that I didn’t have equational reasoning and I didn’t want equational reasoning. I was altering state by writing a program that altered state in exactly the way I wanted it to.

                  You’re describing a very specific way of writing a program. What you don’t seem to accept is that it is not the only way to write programs, or sometimes even the best way to write programs. Sometimes those two ways of programming are even two parts of the same program. Maybe I want referential transparency sometimes, and not others. It’s the job of the language to help me perform the task I’m working on in the best way possible in that context.

                  1. 3

                    That seems a little like an appeal to moderation, can you clear it up for me and give an explicit reason to not want a substitution model for your programs?

                    I know I’d definitely take referential transparency when describing a kernel, if I could get it. It would absolutely give me more confidence that I’m altering state in the exact way I’d want to. I may not be able to achieve it, but that doesn’t mean I wouldn’t want to!

                      1. 4

                        I accept that we can’t have referential transparency with assembly. That code doesn’t make me want to give it up, though, it makes me want to get to a place where we can do what assembly can while maintaining referential transparency!

                        Can we? Who knows? I just know I’m not satisfied…

                        Oh, I just realised that we could define this stuff inside of an referentially transparent EDSL and could probably do the same stuff. Almost like what Microsoft has been playing with.

                        1. 2

                          what Microsoft has been playing with.

                          Hey, I never said that typing was inappropriate.

                          (Also, read the discussion on that paper. It’s quite funny – basically Andrew is trying to describe in the kindest words how crappy their dev experience was).

      3. 2

        Great tl;dw (didn’t watch)

        There was something that Simon Peyton Jones once said (though I’m having trouble finding the link) where he mentioned that you can parse the unofficial Haskell motto: “avoid success at all costs” in two ways. The first way, and probably the way that most people take it is “do everything you can to not be successful.” Haskellers sometimes joke that we’re starting to fail at that. But Simon mentions that you can also parse it in another way (my paraphrasing): “avoid doing unprincipled things just to become popular.” So it could be: “avoid: ‘success at all costs’.” And I think this video hints at that. Haskell started “safe but useless” and is moving carefully up the usefulness axis.

    8. 1

      Interesting story. I have added similar little “easter eggs” to sites and apps for amusement.

    9. 1

      Nice Kyle! I was waiting to see the write up for keyvault. It looks interesting.

    10. 4

      I’m kind of on the fence about this; while I can agree (and might even make use of it), I’m always reticent of the possibility of censoring people. Although, in this case, I’m not sure it is censorship; it seems it would function more like a kill file (which is how I’ve made a few mail lists readable).

      1. 4

        My sentiments exactly.

        I dare say, perhaps this would be another good fit for a browser addon? Something that may compromise the site’s goal, but could still be useful for some users. (Obviously, the result would be greyed-out or striked-out entries, rather than big blank gaps)

        1. 4

          I would prefer this to be server side since I read this site on a plethora of devices.

          1. 1

            I agree as I would not be able to easily use plugins on my phone or other other devices I may not be the owner of.

      2. 3

        It’s absolutely not censorship in any case. It’d be pretty silly to say that I’m censoring someone by ignoring them.

        The user controls who they wouldn’t like to see, not an organisation.

      3. 1

        I’m always reticent of the possibility of censoring people.

        A user is still submitting content to the site which is displaying it by default to everyone. For those that want to opt out, i.e. filter a user, it’s no different than filtering a tag. If it’s censorship, then so too is tag filtering. I don’t see it as any worse in that regard. And it’s potentially much more effective, without forcing me to filter tags I don’t want to filter. (I will do this if I have to or possibly just cull my reading of lobsters, whichever is easiest.)

    11. 3

      The article sounds like speculative dreams, but I could do worse than becoming a Developer-King.

    12. 1

      If Microsoft put pressure on Nvidia to make this happen, I am disgusted (but not surprised).

      1. 1

        I’d say it’s about equally likely a customer called and complained.

        Customer: Why does the Windows driver only support three monitors when I can use four in Linux?

        Nvidia: We’ll fix that in the next release.

    13. 1

      Well, that is one way to make me to cease looking at the W3C as the voice of reason for HTML standards.

      1. 1

        The W3C isn’t a voice for anything, it’s a place for competing interests to compromise on standards.

        If you want someone to blame, blame Netflix and the other companies pushing for this. Would Netflix stop using DRM if the W3C had refused to include it in the charter?

        1. 2

          Would Netflix stop using DRM if the W3C had refused to include it in the charter?

          No, they’d just keep using Silverlight or switch to Flash. AFAIK, Netflix isn’t a big proponent of DRM, it’s all of the license holders of the media that they stream. If Netflix can’t offer DRM, the media companies won’t license movies to them.

          Apple was in a similar situation with its iTunes store. The music companies demanded DRM, so Apple made FairPlay. Once EMI caved and Apple could start selling DRM-free music, the other major companies joined in.

          1. 4

            Apple was in a similar situation with its iTunes store. […] Once EMI caved and Apple could start selling DRM-free music, the other major companies joined in.

            This was possible because the success of iTunes meant that Apple could apply pressure to the media companies.

            The W3C is doing the best it can with a bad hand. What pressure can it apply to the media companies? It can’t prevent media producers from using DRM (because they’re already doing it with Silverlight and Flash). It can’t prevent browsers from implementing proprietary DRM (as Microsoft already is).

            The choice isn’t EME vs. DRM-free (sadly) – it’s proprietary vs. standard.

    14. 1

      In an interesting work-around, Levison complied the next day by turning over the private SSL keys as an 11 page printout in 4-point type. The government, not unreasonably, called the printout “illegible.”

      “To make use of these keys, the FBI would have to manually input all 2,560 characters, and one incorrect keystroke in this laborious process would render the FBI collection system incapable of collecting decrypted data,” prosecutors wrote.

      I guess the FBI hasn’t discovered scanners and OCR software yet.

      And how does 2560 characters in 4-point type take up 11 pages?

      1. 1

        Maybe he wrote the key out, “one eight seven six …”? (how well does ocr work with 4-point font. i don’t think i could distinguish numbers printed that small.)

        Anyway, the initial request didn’t seem so unreasonable. I can see how decrypting and providing copies to the government defeats the purpose of an encrypted email service, but it was nevertheless technically feasible and not particularly arduous. And “feasible but not arduous” is kind of the standard for warrant/subpoena requests. I imagine “I would prefer not to decrypt that” has about as much weight as “I would prefer not to write that SQL query” (wrt other people’s data, with no fourth amendment considerations).

        I suspect the FBI was no longer willing to consider their original request after things escalated to the SSL key demand because of concerns about bad faith. (“oops, I forgot to turn the data collection on. oops, typed in the wrong user name. oops, /tmp filled up.”)

      2. 1

        Either way, was it really out of the realm of possibility to have a person manually enter the values? Sure it is a pain, but it wouldn’t take more than an hour of time.

    15. 1

      What the hell did I just read? And why was it so amusing?

    16. 2

      Oh, did the guy actually give a download link finally, not just a tease?

      EDIT: After giving it a test drive, I really don’t care for it. It seems to look better in Debian than Windows 7, but I would go with Deja vu Sans Mono or Liberation Mono all day over it.

    17. 1

      The ErgoDox is pretty awesome, the configurability of the keyboard itself is amazing.

      1. 1

        Have you built one? How did you configure it?

    18. 1

      Looks good, nice work kyle!

    19. 2

      Odd that WSAD made a new domain for this keyboard when they have it on the main site ( It looks nice enough, but I see no reason to choose the CODE over a Ducky Shine III that offers all Cherry MX switch types and led colors.

      1. 1 is registered to Jeff Atwood.

    20. 3

      I’m not sure why these “quiet” keyboards are so popular. The audio feedback is just as important as the tactile feedback for ergonomic reasons. Cherry MX Blue would be my first choice.

      1. 4

        I find my HHK has about perfect audio feedback. Also Topre for life!

      2. 4

        I agree on the audio feedback. I had a Das with brown switches and ended up selling it in favor of a Leopold with blue switches for that reason. The Leopold was also $50 cheaper than the CODE.

      3. 2

        Why do you need audible feedback on a keyboard?

        1. 1

          I think “need” can probably be replaced with “enjoy the sound of”/

      4. 1

        As someone with probably too many mechanical keyboards, I think there is a time and place for both. Many workplaces would frown on MX Blues (luckily not mine). I actually really like MX Browns as well, mainly because they are lighter than Blues.