1. 12

    This one always irritates me every time someone posts it.

    That’s what the “contract” is about. It’s a two way binding.

    I promise to deliver what I said in the contract, you promise to use only what is in the contract.

    I choose to reimplement my side of the contract, but hold to the contract, and your side breaks, it’s your problem.

    That’s what contracts are for.

    To work out who needs to clean up their shit.

    You may say, ouch, it’s too much work for me please give me back the old behaviour… but that’s a New contract (and a New Price).

    More common is the contract was too informally specified and ambiguity arose in the interpretation.

    Or even worse Connascent Coupling arose because the two sides “Grew Up Together”.

    Personally I regard Connascent Coupling as the enemy of good software and kill it whenever I see it. (Which is often).

    All very good reasons never to use closed source opaque binary blobs.

    1. 4

      You may say, ouch, it’s too much work for me please give me back the old behaviour… but that’s a New contract (and a New Price).

      What if you depend on that customer? They can switch to another provider at some inconvenience to themselves, but then you might go bankrupt. Do you hold your ground?

      What if it’s a third party that’s harmed by the new behavior? B relies on your “implicit interface” and C uses B. When your change breaks B, C thinks it’s your fault. After all, B didn’t change their software, you changed yours.

      1. 2
        1. If you have one enormous customer then they can make a lot of demands on you regardless. This would be just one example of them monopolizing your services. You are basically a contractor for them.

        2. Misuse that will void the product warranty are, but not limited to … etc.

        1. 2

          Misuse that will void the product warranty are, but not limited to … etc.

          I’m trying to find an article I read where SimCity (or doom, one of those two) relied on undocumented behavior of the DOS memory manager. When windows 95 changed that it broke the game, which customers blamed on MS and not the game company.

          1. 2

            It was SimCity. (Search for “SimCity”, since Joel doesn’t have internal anchors in that article; and I can’t find a primary source for that story.)

        2. 2

          What if you depend on that customer?

          Still new contract, new price, but your management may choose to pay the price for the customer. ie. On the basis that Good Will buys more custom than ads, ie. it’s essentially coming out of the advertizing budget, but at that level accounting rules are more politics than arithmetic.

          The contract declares B is to blame, however, how and by who it is fixed can be a matter of a new negotiation and a new contract.

          If I’m writing the code on both sides of the contract, I choose the solution that minimizes the total amount of work.

        3. 1

          If we take “interface” to mean “contract,” where Hyrum’s Law and your perspective diverge?

        1. 8

          It’s a super easy mistake to make! They’re so tiny, and hard to find! One day we’ll have a service where you can just type “how many legs do lobsters have” without personally going to Maine and renting a boat and lobster traps to find out.

          1. 7

            The wikipedia article is fascinating:

            Lobsters live up to an estimated 45 to 50 years in the wild, although determining age is difficult.

            Research suggests that lobsters may not slow down, weaken or lose fertility with age, and that older lobsters may be more fertile than younger lobsters. This longevity may be due to telomerase

            Lobster longevity is limited by their size. Moulting requires metabolic energy and the larger the lobster, the more energy is needed; 10 to 15% of lobsters die of exhaustion during moulting, while in older lobsters, moulting ceases and the exoskeleton degrades or collapses entirely leading to death

            1. 5

              I wonder what would happen if the exoskeleton was artificially reinforced in an old lobster. Would it live a lot longer?

              1. 1

                Isn’t there a similar story with squids, that they grow as long as they have the resources to do so?

            1. 4

              tl;dr

              Users on reddit discovered that FSLabs includes a password extraction utility. The company replied with it’s own statement.

              They backdoored their flight simulator to target a specific individual who has been cracking their games - they were successful at it..

              1. 4

                Following up on your link, the company says:

                we were made aware there is a reddit thread started tonight regarding our latest installer and how a tool is included in it, that indescriminantly dumps Chrome passwords. That is not correct information - in fact, the reddit thread was posted by a person who is not our customer and has somehow obtained our installer without purchasing.

                1. If such a specific serial number is used by a pirate (a person who has illegally obtained our software) and the installer verifies this against the pirate serial numbers stored in our server database, it takes specific measures to alert us. “Test.exe” is part of the DRM and is only targeted against specific pirate copies of copyrighted software obtained illegally. That program is only extracted temporarily and is never under any circumstances used in legitimate copies of the product. The only reason why this file would be detected after the installation completes is only if it was used with a pirate serial number (not blacklisted numbers).

                So, the company claims this is not a password extraction utility, but it presumably does something that exfiltrates (a long word I learned on this forum) personal information in a targeted manner, which is still disturbing.

                If they have a list of cracked serial numbers they SHOULD be blocking them, not trying to use potentially illegal means of tracking down the installer.

                1. 4

                  Ah, thanks. Your comment made me realize that I didn’t link the meaty forum post from the company owner bragging how they actually hacked the hacker:

                  https://forums.flightsimlabs.com/index.php?/announcement/11-a320-x-drm-what-happened/

              1. 6

                I found a survey questionnaire here: http://servingwithjoy.weebly.com/uploads/7/5/0/6/75064257/servingwithjoy_maslach_burnout_inventory.pdf

                As usual, if you feel you have burnout you should go to a therapist/primary care physician and do an exam to get proper advice.

                1. 1

                  Hmm. Opening that URL, or pasting the contents of the URL does not crash Safari or Terminal on my mac (10.12.6). cat-ing the file on my terminal also does nothing. I do notice that Safari does not render the glyph correctly (I probably need a Telegu - or is it Malyalam? - font) though terminal does. TextEdit renders correctly.

                  1. 3

                    tldr; (But you should read it because it is accessible)

                    • A tiny minority of physicists think that noise at the bit level will drown out any benefits of quantum computing
                    • The opponents state
                      • Their model of noise is unrealistic
                      • They use a computational argument to draw conclusions about limits of engineering, and with enough money thrown at it, the noise will be controlled (seems like the old tussle between a theoretician saying something is impossible and the engineer’s dream of proving it wrong by tinkering)
                      • The theory they use has been developed for large quantum systems, but they apply it to small quantum systems

                    I found this review to be “fair and balanced” and I was impressed by the even tone of the person interviewed (Gil Kalai): he presents both his arguments and the arguments against, as a real scientist should when discussing their work with laymen. It’s not us-vs-them, but rather this idea against that idea.

                    1. 16

                      This is delicious on so many levels! Truly lobste.rs worthy

                      1. It deals with compilers
                      2. It has the true hacker spirit: create arbitrary - but in a trippy way sensible - constraints, then throw a ton of ingenuity to solve it. Why? Because we put it there!
                      3. It has humor in it. Like tons!
                      4. It’s secretly subversive of the stuffy world of academia - skillfully threading the line between sublime and scandalous
                      5. The paper, the compiler and the compiler’s product is in plain text!
                      6. It is SO WELL WRITTEN! Even though he writes “This one may be a bit impenetrable for non computer scientists.” I disagree - anyone with patience can understand it. It starts almost from first principles and takes you gently to soaring heights.

                      I regret I have only one upvote to give.

                      1. 6

                        His other work is as good, if not better. He’s written NES AI (learnfun, playfun), turned 2D NES games into 3D worlds, computed every portmanteau, and even proved the undecidability of generalized kerning. His youtube channel has videos for these (and more insanity!). Also, he co-organizes SiGBOVIK, which celebrates all these “research” topics everyday around April 1st. It’s the only thing on the Internet around that time worth reading!

                      1. 8

                        … Bitcoin is a ponzi scheme, ICOs are basically just unregulated securities, and getting involved in all that today is like investing in tech stocks in 1999: you’re gonna have a bad time. …

                        … The actually interesting thing lurks under all this chaos: smart contracts. …

                        1. 1

                          I’m reading “Hands-On Machine Learning with Scikit-Learn & TensorFlow” by Aurelien Geron. I find it quite accessible.

                          1. 29

                            It is a truth universally acknowledged, that a man in possession of a new job, must be in want of a blog post explaining why.

                            1. 4

                              Solved a couple lingering characterization problems in Farisa’s Crossing, which I hope to have in final draft by end-of-year and publish in 2019 (yes, it takes a long time).

                              Using a hybrid numerical/evolutionary approach (SGD for learning heuristics, genetic algorithms for inventing heuristics, since the “throw everything in the cauldron, and train a deep neural net” approach didn’t work) to see if I can get an AI to play Ambition at a competent level, preferably without ad hoc hand-holding.

                              Refreshed Scuba skills after 2 years out of the water; going diving in Mexico in February, and then Roatan in the summer.

                              1. 1

                                @michaelochurch how to you keep track of characters and plot arcs? Do you use a spreadsheet, a notebook? Asking for a friend.

                                1. 3

                                  I use Scrivener. And lots of revision. After enough time in a book I can keep track well enough to prevent continuity errors. Also I don’t have a complex plot as far as first books of epic fantasy series go.

                              1. 1

                                You can get pre-fabricated, standardized, stair parts: Stair stringer, Stair steps

                                The affordances for carpentry are not THAT fine. You can always sand things down, replane, put shims, the wood itself will bend a little and so on. In fact the affordances need to be large enough that weather dependent changes don’t wreck your construct.

                                I would say metal work has to be more exact and has finer tolerances.

                                1. 1

                                  I’m sorry, I understand the facts you mention, but I’m not quite sure what point you’re getting at… unless it’s just a tangential observation, that’s fine, too.

                                  1. 2

                                    The core point of the article is that “the devil is in the details” and I thought it mildly ironic that one of the main metaphors chosen (stair building) has qualifiers the author does not mention.

                                1. 3

                                  I did a personal “mission” in India where having a smart phone saved my bacon. I got 2G speeds and spotty connection (in a big metropolis). Google maps and Uber mostly worked. Maps failed gracefully while Uber was a little brittle. Indian banking apps however failed miserably.

                                  It’s clear that to have a usable system in most of the world, you must work heavily in the reliability department - doing lots of handshakes and being forgiving: if you time out a client do store your state and the client should store its state, ready to pickup where you left off even minutes after initiating a transaction.

                                  I think the banking apps were failing because they were timing out too easily. Perhaps this is a security issue, but I’m sure you can work with that.

                                  1. 5

                                    Several people here are recommending CMake as an alternative. I’ve only interacted with CMake at a fairly surface level, but found it pretty unwieldy and overcomplicated (failed the “simple things should be simple” test). Does it have merits that I wasn’t seeing?

                                    1. 3

                                      CMake can generate output both for Unix and for Windows systems. That’s one (good) reason lots of C++ libraries use CMake.

                                      1. 2

                                        CMake is pretty nice and has nice documentation. You can also pick stuff up from reading other people’s CMakeLists. For simple projects the CMake file can be pretty compact.

                                        1. 3

                                          I actually found the CMake documentation to be quite terrible for new users. The up-to-date documentation factually describes what the different functions do, but has very little examples of how to actually write real-world CMake scripts. There are a few official tutorials that try to do this, but they are made for ancient versions like CMake 2.6. So in order to learn how to use CMake, you are stuck reading through tons of other peoples scripts to try to deduce some common best practices.

                                          While modern CMake is not terrible, you often have to restrict yourself to some ancient version (2.8.6 I believe is common) in order to support certain versions of CentOS/RHEL/Ubuntu LTS (and there were some big changes in CMake around 2.8.12/3.0).

                                          Also, having string as the only data type has led to some absurd corner cases.

                                      1. 1

                                        Off topic for lobste.rs but I think all grown ups realize that people with power are always a little bit beyond the reach of the laws they set up for us plebs. Which is why us plebs hold elections, create an independent judiciary and jealously maintain a free press and freedom of speech. Not much new here, and nothing for lobste.rs

                                        1. 5

                                          “Only the dumbest, laziest hacker is stopped by the “username or password is incorrect” sign in.” I understand that this takes care of most of them, previously known as script kiddies.

                                          1. 2

                                            I’m no C++ maven, but is memory management THAT much of a problem in C++11 and beyond? I get that you COULD write code that has you micro-managing memory, but you could pretty easily write code that doesn’t need it. C++ gives you that option.

                                            I have very, very little experience with Common Lisp but I’ve had bad experiences with garbage collection in it and with Haskell.

                                            Python’s big attraction was it’s syntax and module system. C++14 and later (with auto and ranged for loops for vectors and maps and custom types) has pleasant enough syntax for the simple things I do. Python’s multiprocessing is … involved … while C++ threading has gotten a little simpler. And nowadays Python’s speed becomes an issue for me very quickly.

                                            I do miss the module system - for example, to read a YAML file I have to do much more in C++ than Python has gotten me expecting to.

                                            However, when I experimented with Common Lisp I really did not see that much of an advantage. For an older language it has many cool concepts, but Python has made me used to that. I realize “Macros!” but that just seems like obfuscation - if I got into Macros a lot I can easily see myself confusing the future me with my code in a way that regular function or class based code would not.

                                            Any how, I appreciate Greenspun’s law, but I do think it’s a little bit, ok, I’ll say it, pretentious.

                                            1. 12

                                              Any how, I appreciate Greenspun’s law, but I do think it’s a little bit, ok, I’ll say it, pretentious.

                                              Hmm.. maybe, but let’s consider the state of the world in 1993 when the quote originated:

                                              1. C89/90 is just a few years old.
                                              2. C++ is 10ish years old.
                                              3. Common Lisp is 9 years old, on the way to an ANSI standard
                                              4. Perl has been around for 6 years (and not widely adopted yet)
                                              5. Lua is just introduced (1993)
                                              6. PHP, Ruby would come 2 years later in 1995
                                              7. Python version 1 still didn’t happen (1994)
                                              8. TCL was a popular scripting language, 5 years old.
                                              9. Java wouldn’t be for 2 more years
                                              10. JavaScript is 2 years away.
                                              11. Haskell existed, but was essentially a research language.
                                              12. The rest of the functional world, ML, SML, Caml were academic mostly

                                              So, almost all of the (now) commonly used garbage collected languages hadn’t even been invented yet, and there’s years of the precursors to Common Lisp, and Common Lisp on the horizon – this great philosophical and amazing piece of kit, that has super special powers, first class functions, garbage collection, conditions and restart, proven uses in AI research (even though the AI winter happened), and the things that win out are the far inferior and unsafe C and C++ because of the rise of Unix?

                                              Maybe someone with more accurate history can paint a prettier picture, but I think the observation was certainly timely, even if it’s continued usage isn’t as relatable to today’s audience.

                                              1. 3

                                                I’d argue that it’s usage shouldn’t be that unrelatable today. Common Lisp is still quite competitive with pretty much any modern language. Meanwhile, many languages are still playing catch up with it.

                                                1. 1

                                                  Absolutely agree that CL is still relevant and the original argument holds. The pure fact of matter, though, is that there are many, more in vogue languages, for which the argument would be almost as effective, and therefore more broadly appliable. “… implementation of JavaScript”, or “… Ruby,” would certainly be somewhat valid as there are obviously distinct advantages that programmers of those languages understand.

                                                  To a large population, Common Lisp equates to, ancient AI “stuff”, “Lots of Infuriating, Superfluous Parens,” C style pre-preprocessor macros (of course they are misinformed), and first class functions. Surely, JavaScript is better even without those stupid macros that I don’t need anyway!

                                                  1. 1

                                                    I think the reason you end up putting CL into C is because the expressiveness gap is so huge you need to implement a language to get anywhere.

                                                    I can see the argument for CL being still really better than other languages, but modern languages nowadays solve a lot of the problems that C had. Even extremely basic things in C end up requiring macros. Meanwhile in Python I have metaclasses.

                                                2. 10

                                                  I’m no C++ maven, but is memory management THAT much of a problem in C++11 and beyond?

                                                  As always, it’s really up to your opinion. I can say that some of us consider it enough of a problem that we built Rust. YMMV :)

                                                  1. 3

                                                    I’m no C++ maven, but is memory management THAT much of a problem in C++11 and beyond?

                                                    Some of the comments are back-and-forth between ESR and a proponent of C++17. From the few I read, it seems like there’s a generational gap between understandings of what is modern C++. (ESR says he last used C++ in 2009, on a project whose codebase started in 2003, and he calls that “modern C++” in the comment…)

                                                    1. 1

                                                      C++ is THAT much of problem in C++11 and beyond

                                                    1. 18

                                                      Fascinating. Here’s the logic in bullet points

                                                      • Our primary business is selling IDEs
                                                      • It’s a pain in the ass to have IDEs serve multiple languages
                                                      • Ergo, we must only have one language
                                                      • Ergo we must develop our own language and …
                                                      • … make sure everyone uses this language so that …
                                                      • … we can safeguard our primary business, which is …
                                                      • … selling an IDE

                                                      I always wondered where Donald Knuth, the patron saint of Yak Shaving, went to work after that tex thing.

                                                      1. 9

                                                        That isn’t the half of it. JetBrains started by writing refactoring plugins for IDEs. They only got into IDEs because as plugin writers they were at the mercy of the IDE companies that hosted their plugins.

                                                        Step aside, Knuth.

                                                        1. 4

                                                          Which makes this whole reasoning unconvincing, right?

                                                          I mean, surely the people at JetBrains realize that it is completely unfeasible to get the whole world to use a single programming language, let alone a young programming language that is not backed by a multi-billion dollar multinational.

                                                          1. 1

                                                            What makes it even more unconvincing is that their Kotlin tooling is free, fully working in IDEA Community Edition.

                                                            1. 1

                                                              So, I didn’t take any of this too seriously, but there is a way projects grow organically. So, I can see a company organically growing it’s business from IDE plugins, to an IDE, to specializing in Java IDE, then developing a variant of Java, which gives them a niche where they have the best IDE for a language dialect because they drive development of that dialect.

                                                              If asked to start from scratch, my guess would be a risk averse management team would have the strategy to just have a large team working on an IDE that supports as many languages as possible.

                                                          1. 4

                                                            Suggested merging with existing submissions

                                                            Also, hope you have Comcast shares.

                                                            1. 1

                                                              The link to the existing submission is dead.

                                                              I wonder why this story has more than a thousand comments on Hacker News, but crickets here.

                                                              1. 6

                                                                Perhaps because Hacker News has a lot of people saying very little.

                                                                1. 1

                                                                  I do wonder what happened to the one but there were very good comments in this article

                                                              1. 7

                                                                Usually a currency is tied with a geographically and politically constrained economy. There is an economy served by the currency as a tool and the exchange rate of the currency gradually becomes a proxy for the health/belief in the health of that economy. Money exists to satisfy a need.

                                                                The economy I see bitcoin serving is all the nasty stuff I don’t want in my neighborhood - drugs, contract killings, people avoiding taxes. It’s often stuff we don’t talk about in relation to bitcoin. If we take away that economy bitcoin is backwards to all the other currency out there - some one created a “currency” in the hope an economy would rise up around it.

                                                                Right now, looking at this scheme, I’m thinking, a few people are going to get very rich and a lot of people are going to get a bit poor. So, what else is new?

                                                                1. 3

                                                                  The economy I see bitcoin serving is all the nasty stuff I don’t want in my neighborhood - drugs, contract killings, people avoiding taxes.

                                                                  This is silly. There’s no evidence that these things constitute a substantial part of the bitcoin economy. (Well, drugs definitely used to, but circumventing the “drug war” is a plus in my opinion.)

                                                                  The vast majority of bitcoin-accepting vendors these days are perfectly harmless, even by the most Puritan standards. I’ve made a few purchases with Bitcoin recently, including a purism laptop and a hard drive from Newegg. And for some people, Bitcoin is more than just secure and convenient. http://abcnews.go.com/Technology/wireStory/venezuelans-bitcoin-boom-survival-speculation-51769668

                                                                  a few people are going to get very rich and a lot of people are going to get a bit poor

                                                                  Who is going to get “a bit poor”? Bankers?

                                                                  1. 3

                                                                    There’s no evidence that these things constitute a substantial part of the bitcoin economy.

                                                                    Indeed. I estimate Bitcoin’s value is 10% drugs and other illegal commerce, 30% money laundering, and the rest pure speculation.

                                                                    Who is going to get “a bit poor”? Bankers?

                                                                    Haha, that’s funny.

                                                                    1. 2

                                                                      I for one got “a bit poor” by selling all my Bitcoin for profit some years ago, because if I’d held them, I might enjoy a year of vacation by selling now.

                                                                      Now I just need to come up with enough liquidity to buy myself back in and not sell some years down the line, then I’m sure to “get very rich” a few years from that.

                                                                    2. 1

                                                                      Doesn’t mean much, but for what it’s worth, I run a business involved in cryptocurrency and we pay taxes honestly and correctly as we do with all other transactions.

                                                                      We find it really cool to be able to do “permissionless innovation” in regards to economic transactions. Bitcoin started that. Open source p2p networks instead of banks is a really cool prospect.