1. 6

    Why do we use paper in 2018? The children’s books from my childhood promised that stuff would be gone by the year 2000 :(

    1. 9

      At this point paper seems far more durable for the long term than digital.

      1. 4

        Anecdotally, I have heard this same sentiment from professional archivists as well. We’re pretty good at preserving paper over time.

        1. 2

          If there was something I really wanted to survive past my lifetime I would use a lazer printer, with acid-free paper, and have it laminated in plastic.

      2. 7

        Digital is just not as quick and flexible as paper.

        Think about it. You print something on paper, you want to highlight, just do it, you want to correct it, just write over it, you want to give someone your highlighted and corrected version, just photocopy/scan it.

        You want to write something down, grab a pen, pencil, heck even something that’s pointy enough to make an indent on the paper, and just do it. No need to press a button to turn it on. No need to keep a battery around. etc.

        Closest thing I’ve seen to paper using digital are these nice things called reMarkable, which are nowhere near affordable compared to paper (or a phone/laptop for that matter). Honestly I would consider buying one if they were 50$ lol

        1. 2

          I have a reMarkable. It seems to me that and iPad with an Apple Pencil would work better.

        2. 5

          Because not everyone does digital, not everyone does backups and the kids of today know more about how to take pics for Tinder than organize their data.

          I’m just happy the need for paper has diminished. That’s plenty and we’ll never lose the need altogether anyway.

          1. 4

            because industry has not provided a suitable alternative.

            still waiting on an e-ink device which can run linux and has an sd card slot, replaceable battery, and usb port. an e-ink laptop or even just a monitor would be good too, but alas.

            1. 4

              Because every suitable alternative is shackled and hobbled by DRM.

              1. 3

                You can read, for instance, the Dead Sea Scrolls, or a copy of a Chinese text written on mulberry paper from 2,300 years ago. Does anybody really think that our descendants will be reading information off of Zip drives or Memory Sticks in 50 years, let alone 500?

                Paper is an amazingly great technology and it’s uses have yet to be obsoleted by digital technologies.

                1. 2

                  Not just Zip drives and such. CD-R was supposed to be quite good, but I’ve lost my only copies of some nostalgic and personal data from only 20 years ago, because the fuck it is. Instead I do have drawings from when I was four.

                  Anyone know if the M-Disc is any good?

                  But even then, paper can’t really be replaced, though maybe digital copies could make decent backups if there is proper tech for it.

                2. 1

                  While paper uses within (Western) offices has probably declined a lot, and there’s less demand for newspapers, there’s still a lot of printing going on - whether on advertising flyers, billboards, decals for vehicles, photographic prints on metal or glass… and paper is used as a substrate a lot.

                  Wood pulp and paper products is still one of the staple export industries of Sweden and Finland.

                  1. 1

                    I have it on fairly good authority Nordic paper isn’t as good as bamboo paper, except that it’s here already.

                    Cardboard is the next big thing, that can’t be made from bamboo as well and people order more and more online.

                    1. 2

                      I believe you’re right, the little I’ve gleaned from my readings is that cardboard production (including the fancy kind used by electronics manufacturers in their packaging) is an big part of the industry here in Sweden now.

                1. 3

                  I would love to be using a Classic MacOS derivative, but even I acknowledge that, without the last twenty years of evolutionary pressure in the way that computers are expected to work, it would feel alien and clunky to me now. I appreciate this person’s intentions and I’ll keep an eye on the project, but without the totality of the MacOS experience, the Finder alone solves no actual problems.

                  1. 4

                    I manage a team of seven at Flipp, where we basically serve ads to grocery shoppers. I do not find this work ethically objectionable, and I derive satisfaction from seeing how my team is growing in skills and experience, and how we can make the work lives of other people better.

                    Is what I do broadly societally meaningful? No. If I want that sort of satisfaction, I need to seek it out elsewhere. But it is ever thus; the idea that our paid work should be the primary source of supra individual meaning seems really, really wrong to me.

                    1. 7

                      “Mumps is easily managed without the need for database administrators.”

                      50 slides of programming footguns

                      One of my favorite bits about Mumps is why dates start at 1841:

                      When I decided on specifications for the date routine, I remembered reading of the oldest (one of the oldest?) U.S. citizen, a Civil War veteran, who was 121 years old at the time. Since I wanted to be able to represent dates in a Julian-type form so that age could be easily calculated and to be able to represent any birth date in the numeric range selected, I decided that a starting date in the early 1840s would be ‘safe.’

                      1. 6

                        I think that’s delightful. It’s no less arbitrary than Jan 1 1970, and at least there’s a cool story to it. Good on MUMPS!

                        1. 3

                          And for the context MUMPS was designed for - medical records - it makes perfect sense. “What is the earliest date we could ever possibly need to represent?”

                      1. 5

                        Today is the first day of my new job!

                        As much as I want this week’s agenda to be to share all the ideas I’ve had for the product over the last couple months, I know that’s not what someone should be doing in their first week. Or month. Or three.

                        This week I’m going to find my bearings. I’m going to feel out the culture, acquaint myself with people, and fit in. I’m going to try to understand more of the fundamentals of their product, development process, culture, and industry. A lot of new information is about to come at me and I expect to be a bit overwhelmed and exhausted, but that’s the game.

                        I’m excited and nervous and all of the usual emotions. Wish me luck!

                        1. 2

                          Good luck, and congratulations.

                        1. 2

                          Would you crowd source design of an everyday object? Reaching a quorum means having an average solution, pretty much by definition. I think that languages should be designed by a small group of people, which ensures a strong vision and consistency. It’s interesting, though, to see a radically different approach being explored.

                          1. 2

                            So in this case, from what I’ve seen, they’re not so much having an average design, so much as verifying that their design choices are actually effectively understood, and changing them if they aren’t. It’s certainly not going to come up with something radical, but it might be an interesting way to make radical ideas more easy to understand.

                            1. 2

                              COBOL, Visual Basic 6, and PHP are the closest things to that where design was for average user. Lots of code was certainly written. The problems the languages brought are inescapable for many due to the legacy code effect. That’s a warning sign to get the foundations right upfront in case your language is successful enough people get stuck with it.

                              Also, one can assess what was achieved with prior work using metrics like code conciseness, compile speed, run speed, whether it’s statically analyzable, and so on. Also, prior studies on these comparing languages on productivity and defects. At least one person saying they’re involved in Quorum project rejected that when I brought it up on HN. I’m not sure how far one can get on a good language if not designing for balancing those metrics from the beginning using prior work as a guide. As shown by their studies, they will probably come up with some good evidence on usability or productivity of specific mechanisms, though. That’s the value I see in the project.

                              1. 3

                                I would say Go is a language designed to be good on average.

                                1. 2

                                  I would say that, more specifically, Go is designed to raise the floor for programmers of a certain type, with no real thought given to raising their ceiling, or for how it would be received by programmers who aren’t C/Python people. Which is fine, of course, and I’m sure some acceptable software will be written with it. But it doesn’t have much appeal otherwise, as far as I’m concerned.

                                  1. 2

                                    Rob Pike’s talk From Parallel to Concurrent discusses the target audience for Go.

                                    The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.

                                    (Edited to name the Go language explicitly)

                                  2. 2

                                    It started with Oberon-2 per Pike which is a family of languages designed for educating the masses. They added other stuff to make it more practical and C-like. So, that would make sense.

                                    1. 1

                                      I intended to reply to a different comment so I have removed the text that was here.

                                1. 3

                                  “Because the shell is terrible” is a sufficient answer. I am very excited to see where Oil and osh are going. I’d love to see what a new language environment designed under the same basic constraints as the shell would end up if bash compatibility weren’t important. I keep trying e.g. xonsh or eshell and always switch back to fish because as much as I prefer elisp or python to shell, the impedance mismatches are just too great.

                                  Part of that, of course, could be the ~30yrs of Unix shell experience that I have burdened myself with, and were I starting from scratch, I might be able to escape the sad hexadecimal chains of unstructured 7-bit text.

                                  1. 1

                                    Thanks! By the way, I love the phrase “tilter at path-dependent windmills” in your profile :)

                                    Shell is an extreme example of path dependence. Really, we ended up with this??? There is 40+ year unbroken chain going back to the Thompson shell. I’m pretty sure that technologies of a similar age like Lisp and Fortran have seem multiple “overhauls” since then.

                                    And I think of bash as a friend-but-enemy… on the one hand, it helps me get things done faster than any other tool. On the other hand, I want to kill it. :) I’ve worked with a lot of non-programmers doing programming, e.g. including technical artists and data scientists, and I feel I can’t recommend that they learn bash “with a straight face”. Even though it will solve many of their problems. They usually prefer Python even though it’s not the best tool for the job.

                                  1. 4

                                    Yegge is a smart dude, but his criticism of Google, that it is no longer customer focused, struck me as strange. Google’s customers aren’t the people who use their free services; they’re the advertisers who buy access to the data that the free billions generate. The entirety of what he describes as Google isn’t a business – it’s simply a way for the money machine to spread risk and keep tens of thousands of engineers busy. 99% of Google could disappear and the spice would still flow, as it were.

                                    1. 0

                                      Is it me, or does a 2x test/code ratio feel like a hilarious waste of time, or not nearly enough?

                                      1. 2

                                        I thought we had a normal ratio for a Ruby/Rails application that has thorough test coverage, but I’d love to hear from others on what their ratio looks like. We didn’t aim to have a certain ratio or anything. We write tests as we’re writing code, and that’s what we ended up with. Lines of code isn’t a consistent metric across different projects since style and conventions come into play, but I thought it was something I could share to convey the size of our application.

                                        1. 2

                                          The more consistent our architecture became, the more we were able to leverage integration tests, i.e. end to end assertions of the public side effects resulting from a single use case, and have confidence in that use case’s correctness. The average use case simply had far less “exciting” code, relied more on libraries, and far more that could be taken for granted. Unit tests are emphasized in our library code (e.g. internal gems) or in anything “interesting”, which is taken to mean any logic hairy enough that it doesn’t just fall out of air with our bog-standard architecture.

                                          Certain policy and permission classes, many of which boil down to a comparison operator or two, are also unit tested by default in pursuit of “tests as documentation” rather than assertion of correctness.

                                          I haven’t run the stats in a while but if you ignore view code (any .erb files, css and our javascript whose tests are nonexistent or in shambles), we are sitting at 1:1 or bit lower in our main monolith. In my conversations with others, I would not say that your 2:1 is out of the ordinary, though anything higher might make me raise an eyebrow.

                                          At some point if you’re being so thorough that you have excess of a 2:1 test:domain code ratio, you either have a very hairy, naturally complex business domain (and my eyebrow lowers), or you should look into property testing/generative testing.

                                        2. 1

                                          I think it depends tremendously on how you write tests.

                                          EG: If your tests are mostly high-level integration tests it seems quite high; if they’re mostly low-level unit tests it seems low.

                                          Similarly, If you’re using a terse style (eg via DSL / metaprogramming) it seems high; if you’re using a verbose style (eg the recommended rspec approach) I’d say you’ve mostly tested the ‘happy path’.

                                          1. 1

                                            Right, that’s my point. I also was speaking in general, not specifically about a Rails application. I don’t do Rails any longer, but when I did, the codebase was more like 5-8x tests to codes. And of course, in Scala, the type system – for all of my reservations about complexity – allows a much leaner ratio.

                                          2. 1

                                            If you’re really serious about testing, especially more end-to-end stuff and interacting with the front-end, it’s pretty easy to end up needing 10 lines in a test to check a feature that only required 2 or 3 to implement.

                                            There’s some cross-checking too of course, but if writing 3x as much code meant basically no regressions, that’s a decent deal

                                            1. 1

                                              I depends a lot on the code. For example, in my current codebase I have something like:

                                              Maybe(resource).fmap(&:author).fmap( ->(n) { n[:full_name] }).or(Some('Somebody'))
                                              

                                              This is part of a method that gets a hash that, ideally, looks like this:

                                              {
                                                author: {
                                                  full_name: 'John Doe'
                                                }
                                              }
                                              

                                              However, there might be some cases where the hash is nil or the hash does not contain the expected keys. So for a line (actually two, since the line is too long for my taste) of code you easily end up with four test cases (hash is nil, hash does not have the :author key, the :author key returns a hash without the :full_name key and the ideal scenario where all the data is present).

                                              Then again, you most likely have a bunch of lines of code that are just doing simple things, like check if a property is set or something like that, where the test cases are a lot simpler so you might not end up with a 2x test/code ratio.

                                              1. 2

                                                I have no idea what your domain/code-culture is, but if you just want something short, maybe plain Ruby is enough? :

                                                Hash(resource).dig(:author, :full_name) || 'Somebody'
                                                

                                                Your short code example looks like a mix of Ruby with Rust, or Haskell monads. Yet, I wonder what happens when resource is an Array. Does that Maybe function swallow the exception? It’s hard to bolt on types where there were none before! :)

                                                1. 2

                                                  The library used is dry-monads and if you pass an array you get an NoMethodError: undefined methodauthor’`.

                                                  I agree that the dig method is more appropriate for a Ruby codebase and in some places it was used instead of the Maybe monad. The reason why we’re using that (and I was the one pushing it as team lead) was that those constructs are closer to constructs in other languages and one of the side goals that I have is to enable people as much as possible to explore other languages and my feeling is that this kind of code helps.

                                            1. 4

                                              My workplace has finally formally decided that managers such as myself are not expected to also be senior technical staff. This is in every way the right model, but now I have a bunch of technical obligations that I need to schedule handing off to others in our group, so that’s sort of a PITA, because I can’t just dump stuff context-free, but at the same time, there are other demands on my time. Eh. So it goes, in middle management. Some post mortems to run/attend, some reviews to write, some organizational chaos to overcome.

                                              Outside of work, I need to find some time to rebuild part of the big computer; my patience with fiddly PC non-sense is growing thin, and I am tempted to just part the thing out and get a dedicated storage box or something. But this too will pass, and I’ll miss having a big powerful desktop computer in six months. So I’ll try to wait it out.

                                              Otherwise, baby proofing now that #2 Daughter (9mo) is up on her feet and taking preliminary steps.

                                              1. 3

                                                my model for that hand-off is that I still do technical work, both during offloading and to keep my hand in (there are plenty of programmers who respect capable programmers more than capable non-programmers), but that I should not be on the critical path. When I delegate technical leadership, I make it clear that I’m available for reverse-delegating where I can help out so that the new technical lead feels less like they’ve been dropped in it.

                                              1. 3

                                                I’d be interested in seeing what they’re doing here that’s e.g. not simply a LCD reimplementation of Unixy ideas. If all they wanted was a stable ABI and a friendlier license, they could just use a *BSD as the base; instead, it seems they’re rebuilding. Perhaps this is just NIH thing, but if it means they spend a bunch of smart people’s time on new ideas, I’m pretty open.

                                                1. 1

                                                  Likewise also interested.

                                                  1. 27

                                                    I know this will sound grumpy, but I’ve got a much simpler suggestion:

                                                    1. Do work stuff on your work computer
                                                    2. Do personal stuff on your personal computer

                                                    This eliminates whole classes of lawsuits for you, and makes your Git configuration wonderfully simple: you just have a main dotfile, plus a computer-specific override, which likely won’t exist for any personal boxes and will exist for your work laptop. Do that, and this entire blog post devolves into literally one line that provides work-specific overrides for your personal config.

                                                    1. 3

                                                      It’s not grumpy, it’s what you should be doing.

                                                      Your work computer is very likely not your property. It’s also very likely your employment contract does not guarantee you privacy on that machine. So putting private SSH keys on your work machine seems like a bad idea. Furthermore, doing personal projects on them is also seems like a bad idea. As stated, mixing work and personal machines is flirting with lawsuits.

                                                      Making this kind of setup is following DRY way too slavishly. Accept the fact that work and personal computing time shouldn’t mix and keep two configurations.

                                                      1. 3

                                                        I use a VM for personal stuff on my work machine, and work stuff on my personal machine. It’s not great, but it’s certainly better than not making the distinction.

                                                    1. 2

                                                      Personally, I really like the approach of null punning. You just bubble null values up the call chain and let the user handle them. This avoids having to pepper checks all over the code which is error prone in languages where the checks are optional, and noisy in those that enforce them. In vast majority of cases I find that I’ll have a series of computations I want to do on a piece of data, and I only care whether it’s null at the start or the end of that chain. This is a good longer write up on the approach.

                                                      1. 4

                                                        and noisy in those that enforce them

                                                        It’s not if your language has decent support for them - you can easily do the ‘bubbling up’. And it’s not very often you need things to be nillable, so any cost is mitigated.

                                                        1. 3

                                                          This is the Objective-C approach, as well, and it’s very nice, once you get used to it.

                                                          1. 2

                                                            It’s horrible in cases where null isn’t actually a valid value; you get the “cannot read property of undefined” problem where you find out about a failure three modules and two thousands lines away from the actual code problem (often in someone else’s code) and don’t have enough information to find out more. Much better to make invalid states unrepresentable and fail fast rather than going into an invalid state.

                                                          1. 2

                                                            Hello! I have also logged in (linkedin@homonculus.net). I’m not currently looking, or, sadly, hiring, but I did get my previous great gig from a fellow lobster, and I’d love the chance to pay that forward.

                                                            1. 9

                                                              Things I don’t like about Nix:

                                                              • People find it scary, and I would like to fix that.
                                                              • It has no incremental build support per-project. Chromium fail to build in the last step? Sorry, hav to start over.
                                                              • The command line interface is obtuse and hard to understand. Some commands work very differently from others , and leads to extremely confusing behavior. Hopefully this will be fixed in 1.12.
                                                              • The evaluator is a bit slow and memory inefficient, causing corner cases like checking every package description across every architecture requires too much RAM and CPU time.

                                                              Almost every other build tool:

                                                              • Undeclared. Dependencies.
                                                              • Improperly pinned dependencies without hashes, making it hard to know if 1.0.0 you got today is the same 1.0.0 you got yesterday (hint! it isn’t always the same!)
                                                              1. 4

                                                                The language badly needs a type system, and the cli tools are terrible. But it’s by far the best build/configuration management system I’ve ever seen.

                                                                1. 2

                                                                  Undeclared. Dependencies.

                                                                  Could you elaborate? The problem that you easily forget dependencies in e.g. Makefiles? The problem that transitive dependencies are not specified properly in e.g. npm?

                                                                  1. 9

                                                                    Given he’s contrasting to Nix, I assume he’s talking about (eg) ‘you need libxml2 installed systemwide for this to build’ not being specified in a machine-readable way.

                                                                  2. 2

                                                                    I found it really hard to understand even though I spent many, many days reading docs/community discussions and contributed many PRs and fixes. I still don’t really understand how nix works very well lol.

                                                                  1. 2

                                                                    RDF, huh? Still plugging away on something nobody wants, I see, Sir Tim.

                                                                    1. 3

                                                                      I can’t comment on Silicon Valley, but I am quite aware that I have certain political opinions that are not safe to express in my (fairly typical) work environment.

                                                                      My politics are a mix of strongly “liberal” and strongly “conservative,” with few positions in the middle. For example, I favor a robust government healthcare guarantee, and also oppose abortion. I can mention these in passing to coworkers. But there are others I can’t. They happen to be “conservative” positions, but I don’t see it as a bias against conservative ideas in general. It’s more those specific issues.

                                                                      1. 3

                                                                        To be fair, abortion really isn’t a topic for work conversation anywhere outside of a medical setting, policy institute, or the like.

                                                                        1. 1

                                                                          I don’t disagree. I was using that as an example of something where merely noting one’s position in passing would be considered acceptable, while there are other topics (which I won’t list here) where even mentioning a difference from prevailing opinions would be ‭crossing a line.

                                                                          1. 4

                                                                            Big PHP fan, huh?

                                                                        2. -2

                                                                          I favor a robust government healthcare guarantee

                                                                          It’s only “robust” or a “guarantee” as long as the government hasn’t run out of other people’s money, which it eventually will (e.g. after having confiscated so much that being productive just isn’t worth it anymore).

                                                                          1. 2

                                                                            How far does it go? Roads? Police? Military? Air traffic control? Food safety? Education? What things are valid use for tax dollars?

                                                                            And every Western nation (and Japan) except the US has some form of universal healthcare and spends less per capita. If you’re worried too much of your money might go to helping others, you should be all in favor of systems that have dozens of examples of spending less of it to get more.

                                                                            As for “being productive”, I can at least provide my anecdotal experience from helping found three startups now: getting competitive, or even decent, healthcare coverage for our employees was by far our biggest challenge on the recruiting side. How many companies have not been founded because someone couldn’t risk losing their healthcare?

                                                                            1. 1

                                                                              “Eventually” has (frequently) been hundreds of years. I’m not expecting to outlive the state where I am (Australia) although the situation elsewhere seems more precarious.

                                                                              Here people have remained productive despite taxes close to 50%. I’m philosophically pretty libertarian, but specific implementations of states differ and my local one has worked well for some time in spite of some of the corruption being a bit obvious.

                                                                              1. 0

                                                                                Governments that control their own currency (e.g. the US) can create more of it, which is what the Fed does. That money hasn’t been taken from anybody else; it’s literally been created out of thin air. [Mind you, doing this too much can trigger runaway inflation, which would reduce the value of everybody else’s money.]

                                                                            1. 2

                                                                              How on earth is stuff like this enforced when it applies to businesses with no EU presence?

                                                                              Is it reasonable to expect that every person selling any product or service online must be knowledgeable about the laws of every single country on the planet?

                                                                              1. 6

                                                                                How on earth is stuff like this enforced when it applies to businesses with no EU presence?

                                                                                Easy, you’ll get a nasty letter from a court in the EU. If you don’t plan on ever visiting an EU country or a country which likes to hand over people to the EU then you can safely ignore those.

                                                                                Is it reasonable to expect that every person selling any product or service online must be knowledgeable about the laws of every single country on the planet?

                                                                                If you plan to do business in that country, yes.

                                                                                1. 4

                                                                                  I don’t think extradition over this kind of case is likely.

                                                                                  IANAL

                                                                                  1. 1

                                                                                    I don’t think extradition over this kind of case is likely.

                                                                                    It’s not a criminal case, so it’s largely impossible.

                                                                                    They don’t have to extradite you to fine you, however; they can hold the case without your co. choosing to send a lawyer, issue a fine, then chase your bank for the money. If your bank wants to keep doing business in the EU, it’ll freeze your accounts.

                                                                                    1. 1

                                                                                      I find it unlikely that any bank I could be with would do business in the EU – unless somehow wire transfer to EU banks count?

                                                                                2. 3

                                                                                  Is it reasonable to expect that every person selling any product or service online must be knowledgeable about the laws of every single country on the planet?

                                                                                  I mean, arguably, yes?

                                                                                  1. 3

                                                                                    I don’t know about you, but I’m not really interested in enforcing Chinese censorship rules or Saudi / Indonesian blasphemy laws. I mean, they’re free to try, but it’s expensive to send a tank to Australia.

                                                                                    1. 1

                                                                                      They don’t have to; they just have to convince the Australian government (or Australian banks) that you owe money for fines.

                                                                                      1. 1

                                                                                        If you’re selling into China, or Saudi, then you ought be prepared to either comply or suffer the consequences of non-compliance.

                                                                                    2. 2

                                                                                      How on earth is stuff like this enforced when it applies to businesses with no EU presence?

                                                                                      Practically speaking, it isn’t.

                                                                                      Investigations are expensive; cases are prioritized according to ‘impact’. You’re not going to get big enough for them to notice without having an EU presence.

                                                                                    1. 9

                                                                                      We spent two Christmases ago in the ICU at the local children’s hospital, where my six month old daughter had open heart surgery. As a result, we gained a new appreciation for the good work of the Ronald McDonald Houses, and so we give them a gift every year, as well as dropping off food donations at Sick Kids. I encourage people to do the same, if one is looking for a worthy cause.

                                                                                      ETA: She’s doing great, thanks for asking. Then and now.

                                                                                      1. 2

                                                                                        My youngest had heart surgery this year, we also used a Ronald McDonald house, they provide an invaluable service. Modern health care is a wonder. Glad to see she got better!