1. 16

    Unbelievable! Is this the first time Apple has acqui-killed a product and brought it back? I wonder how that happened. I appreciate anyone behind the scenes that helped along in the process of gettimg some good tech back into hands of the masses. Even more than original since it’s FOSS.

    A FoundationDB developer is on HN right now if anyone wants to ask them questions.

    Edit: Reading the HN comments from developers, which are great btw, I find they just open-sourced part oc it instead of all. One dev indicates it’s one of hardest parts that got FOSS’d. Another says the storage part is missing with a SQLite substitute. Another is saying some layers on top are missing. So, Apple open-sources parts of FoundationDB is more accurate.

    1. 7

      re: sqllite

      tl;dr its always been sqlite

      https://news.ycombinator.com/item?id=16878076

      1. 3

        “ a fairly heavily modified asynchronous version of sqlite’s btree”

        Wording of one comment saying it’s just SQLite and one saying heavily-modified variant made me wonder if they swapped the custom thing for a vanilla version.

        1. 3

          Yes, but one of those comments was from some random person, and the other appears to be one of the foundationdb co-founders.

          1. 3

            That’s a good point. The one I bolded was the developer. It clarifies it’s a highly-modified version of SQLlite’s storage. A great choice given its robustness.

      2. 2

        Is this the first time Apple has acqui-killed a product and brought it back?

        Not hardly, although this is the first instance I can think of where they’ve released open source. My favorite example: FingerWorks. I wish I’d hung on to my iGesture Pad, just for the collectible value.

        1. 3

          The code for Turi Create was closed when that company was acquired. The project was opened again late last year: https://github.com/apple/turicreate

      1. 4

        Brainfuck and Piet are esoteric but AFAIK both are designed to work by addressing memory locations, either on a stack or by address, and they have no notion of a named variable or function.

        I don’t know whether eschewing naming was a design goal for them, but neither of these languages are especially easy to use directly.

        [edit added]

        Make has “implicit rules” and “automatic variables” that can prevent the need for naming targets, or even writing any code at all. For example, even without a makefile you can type “make foo” and if “foo.c” exists, it will run the compiler using implicit rules.

        1. 3

          How about fewer than 30 lines?

          .SYNTAX PROGRAM
          
          OUT1 = '*1' .OUT('GN1')
               / '*2' .OUT('GN2')
               / '*' .OUT('CI')
               / .STRING .OUT('CL '*)
               .,
          
          OUTPUT = ('.OUT' '(' $OUT1 ')' / '.LABEL' .OUT('LB') OUT1) .OUT('OUT') .,
          
          EX3 = .ID .OUT('CLL '*)
              / .STRING .OUT('TST '*)
              / '.ID' .OUT('ID')
              / '.NUMBER' .OUT('NUM')
              / '.STRING' .OUT('SR')
              / '(' EX1 ')'
              / '.EMPTY' .OUT('SET')
              / '$' .LABEL *1 EX3 .OUT('BT ' *1) .OUT('SET')
              .,
          
          EX2 = (EX3 .OUT('BF ' *1) / OUTPUT) $(EX3 .OUT('BE') / OUTPUT) .LABEL *1 .,
          
          EX1 = EX2 $('/' .OUT('BT ' *1) EX2 ) .LABEL *1 .,
          
          ST = .ID .LABEL * '=' EX1 '.,' .OUT('R') .,
          
          PROGRAM = '.SYNTAX' .ID .OUT('ADR ' *) $ ST '.END' .OUT('END').,
          
          .END
          

          http://www.ibm-1401.info/Meta-II-schorre.pdf

          1. 2

            And my implementation of a bytecode runtime and assembler for META comes in under 500 lines:

            % wc -l meta.c meta.h metas.c
                 189 meta.c
                  61 meta.h
                 225 metas.c
                 475 total
            
            1. 2

              Heh. Mine came in at exactly 500 lines in a single C file.

            2. 2

              You beat me to it haha. If he can use a scripting language, then other contenders should be able to use meta-languages since they’re actually easier to implement than even Python. Them plus the source for Python might be easier to implement than Python itself in C.

              1. 1

                Hm what language does this recognize? The META II language itself?

                Is that a Turing complete language or a syntax description language?

                Technically that is a compiler, but I’m not sure it generalizes to say a language like Python or C.

                I have seen it before in posts on PEGs, but I don’t quite get what it does and how it works. PEGs also have metagrammar – a PEG that describes the syntax of PEGs. Is that what this is?

                Also this paper seems somewhat related: http://www.vpri.org/pdf/tr2010003_PEG.pdf

                Although to be honest I am not as interested in it because of the Scheme “restriction”.


                EDIT: Also I should note that this thread is not about 100-line compilers. It’s about compilers where the overall structure is described in 100 lines. My compiler is 8000 lines.

                1. 3

                  Hm what language does this recognize? The META II language itself?

                  yes

                  Is that a Turing complete language or a syntax description language?

                  yes

                  Technically that is a compiler

                  The best kind of compiler ; )

                  generalizes to say a language like Python or C.

                  Schorre’s paper also includes an Algol-like language recognized by the META compiler.

                  1. 2

                    After a brief look at the paper you linked, yeah there’s a direct lineage from Schorre’s work to Viewpoints, although META predates PEGs by about 40 years. My link is citation #9 in yours.

                1. 6

                  That’s the most sensible and collectivism-free piece of RMS’s writing I’ve read in a long time. Bravo.

                  1. 26

                    collectivism-free

                    What does that even mean

                    1. 1

                      I’ll let @Sophistifunk speak for emself, but I read this as referring to Stallman’s fundamental mistrust of proprietary anything.

                      1. 4

                        Ok, now why is that supposed to be “collectivist”?

                        1. 1

                          What the hell is “nur”?

                          1. 2

                            A typo made by my oversensitive Samsung keyboard on my phone, which was set to German. “Nur” is German for “only so ultimately, it wasn’t that horrible.

                          2. -1

                            OK, let’s look at the definition:

                            col·lec·tiv·ist kəˈlektivəst/ adjective adjective: collectivist

                            1.
                            relating to the practice or principle of giving a group priority over each individual in it.
                            "collectivist cultures had disciplined and cooperative work forces"
                            

                            Stallman’s basic assertion is that individuals should not profit from the creation of software. They may profit from supporting said software, but in his view, software should always be free. I see this as a fundamentally collectivist philosophy.

                            1. 9

                              Stallman’s basic assertion is that individuals should not profit from the creation of software.

                              What, no:

                              Actually, we encourage people who redistribute free software to charge as much as they wish or can. […] Distributing free software is an opportunity to raise funds for development. Don’t waste it!

                              https://www.gnu.org/philosophy/selling.html

                              1. 2

                                Setting aside that “the definition” is rarely a good argument in open-ended discussions, like these, Stallman doesn’t say that Individual aren’t allowed to profit from Free Software. It’s explicitly allowed and I remember having have read that Emacs used to be sold this way, before the internet, to fund the FSF. And secondly, it doesn’t matter if the software is sold by one person (an individual) or a company (a collective), the rules the GPL sets up stays the same: share your source while distributing software, recursively, exactly by intelligently twisting copyright law back against itself.

                                And in the end, the four software freedoms were formulated to protect individuals from harmful sodtware, as well as give them the ability to improve upon it, based on their needs.

                                This is just another example of how empty of an actual meaning the word “collectivism” actually is in practice.

                            2. 2

                              What the hell is “emself”?

                              1. 8

                                A polite way to refer to someone when you don’t know their gender.

                                1. 3

                                  I’ve never seen that before. What’s wrong with “themself”? Does it in some way discriminate against one of the two genders?

                                  1. 2

                                    “themself” isn’t an established word either so i guess people pick and choose

                                2. 7

                                  At the time of writing I had no idea whether @Sophistifunk was a him or a her. https://en.wikipedia.org/wiki/Spivak_pronoun

                                  1. 5

                                    That’s one of the better singular pronouns I’ve seen. It reads like a shortening of plural “them”.

                                    1. 8

                                      “they” and “them” are already well established in usage as singular pronouns.

                                      1. 3

                                        So you’re saying “I’ll let @Sophistifunk speak for themself” is correct usage in this case?

                                        I’m not a grammar expert, so I’ll defer to your greater knowledge. I like and use Spivak because, as @pushcx said, it’s a polite way to express “I have no idea what the gender of the person I’m referring to is.”

                                        1. 7

                                          Singular “they” has been used in English for hundreds of years. “Themself” is also ancient but was replaced by “themselves” in the 16th century. However, it has recently made a comeback.

                                          “I’ll let @Sophistifunk speak for themselves” is perfectly correct formal English. “I’ll let @Sophistifunk speak for themself” is also correct by any reasonable standard, but may be considered informal by some readers.

                                          The OED has a blog entry about ‘themself’.

                                          1. 2

                                            I still like Spivak, but thanks for the pointer. That’s good to know :)

                                          2. 3

                                            Mirriam-Webster has examples of how “they” is used for indefinite gender and number: https://www.merriam-webster.com/dictionary/they

                                            They don’t have an entry for the word “themself” and suggest “themselves” instead: https://www.merriam-webster.com/dictionary/themself

                                3. 1

                                  I mean that it’s free of the “narrow-scope-communism” he’s usually on about. I don’t think I’m putting false words in his mouth if I say he firmly believes non-communal ownership of software (in the sense you can restrict what others do with it) is some sort of moral wrong and should be fought on all fronts. But I don’t want to call him a communist in the general sense, because he doesn’t go around saying private property in general is evil, just private property in the form of bits.

                                  1. 5

                                    Maybe everything to your left looks communist-ish, but I can tell you for sure he’s not a communist. More like a typical left-leaning liberal, but not too much.

                                    1. 1

                                      But I don’t want to call him a communist in the general sense, because he doesn’t go around saying private property in general is evil

                                      Was that somehow unclear?

                              1. 8

                                What was the reason behind the 600MB tracking pixel?

                                1. 5

                                  Protest against lobste.rs april fools theme, intentionally abusing the new functionality.

                                  Somehow nobody is bothered that i shouldn’t have been able to get the visitor information in the first place.

                                  1. 8

                                    I hated the AF joke too, but now I’m more irritated at you for taking it out on us other victims though cell fees instead of directing your lack of gruntle at the admins.

                                    1. 7

                                      Protesting by harming the visitors of the page is very odd. You are not abusing new functionality, you are abusing peoples trust into the website. Also, you haven’t harmed lobste.rs, but its visitors.

                                      Maybe people protest because tracking doesn’t make lobste.rs worse then any other page they visit, but burning mobile bandwidth of that size is rather unusual? That’s a direct economic damage and people on visit outside of their country might suddenly be caught with no data. Just sayin’.

                                      1. 0

                                        Honestly, i thought mobile users were a small minority. So, the data plan drain wasn’t intended.

                                        1. 6

                                          Intention is an very bad defense. Maybe think stuff through next time.

                                          A “sorry”, for example, would go a long way.

                                      2. 6

                                        Embedding a big hotlinked animated gif in your sig, which you then grep Apache logs for to get traffic info, does feel very 2002.

                                        1. 3

                                          Somehow nobody is bothered that i shouldn’t have been able to get the visitor information in the first place.

                                          I’m very surprised at the lack of reaction about this, too. This was my first thought when I realized you weren’t an admin.

                                          1. 2

                                            I added an clarification note to the top of the post… i think people did miss im just a regular user.

                                          2. 2

                                            Gotcha, I thought you were an admin/mod when I read the blog entry.

                                            How did you get the visitor information? Was that from requests to pull your tracking pixel?

                                            1. 2

                                              The AF joke enabled a privacy vulnerability via hotlinked images which allows for third-party tracking.

                                              1. 2

                                                Exactly. All pictures in the signatures caused GET requests to user-chosen urls.

                                              2. [Comment removed by author]

                                                1. 1

                                                  Context you are missing: It was him who removed it.

                                                  1. [Comment removed by author]

                                                    1. 1

                                                      And that changes things? It’s an obvious and reasonable first response, not precluding anything else.

                                                    2. 1

                                                      I’d agree 100% – the fact that it’s an abuse of trust makes me vote for a perma-ban.

                                                1. 3

                                                  What is MVT? Is this a specialized APL implementation? A collection of APL routines? Something else?

                                                  1. 3

                                                    MVT is a version of MVS, the operating system for the IBM System/360 mainframe. This is a customized distribution built from sources, which is rebuilt especially to run on modern systems via an included customized Hercules emulator.

                                                    IBM APL\360 is a seminal release of the APL system, which is described in depth in APL\360: An Interactive Approach. You can find further information via the Computer History Museum APL\360 site, which hosts the source code used to build the package.

                                                    The APL\360 system goes beyond a mere application. It “took control of the whole machine. It implemented a complete timesharing operating system in addition to a high-level language.”

                                                    1. 1

                                                      Since it runs on contemporary systems, would it be useful as a “daily driver” alternative to GNU APL or is it more interesting as an historical curiosity?

                                                      1. 3

                                                        Probably quite limited as a “daily driver” because the maximum workspace size is 432000 bytes (expansive in the late 1960s/early 1970s), interacting with the host system beyond the keyboard would involve (painful) virtual tapes and EBCDIC conversions, and the license only allows for non-commercial use.

                                                        It’s somewhat better than a mere curisosity, however, as this very software was used, extensively, in actual production environments, doing real work and solving actual problems.

                                                        1. 2

                                                          It’s possible I use tech on a regular basis that was built for this system. The UI sure as heck would fit in the memory. The one you submitted similarly sounded like a great way to keep employees off Solitaire and the Web until you said non-commercial use. (sighs) Back to deleting files out of Windows, Mac, or Linux installs. Haha.

                                                        2. 1

                                                          See What is APL? (An Introduction to APL\360 and Solving Sudoku with APL\360 for examples of the system. Granted, nothing you can’t do in other APL’s, of course.

                                                    1. 6

                                                      A trivial counterexample to this is inheritance for actors in games, e.g., “EliteMook” extends “Mook”, adding smarter target selection or something.

                                                      1. 7

                                                        Games these days will often drop inheritance in favour of using an entity component system or data oriented approach. This is much more cache friendly than the more naive taxonomic inheritance hierarchy, especially when you have thousands or tens of thousands of entities you need to process.

                                                        1. 2

                                                          Quite right, at scale.

                                                          For small games, or for games that don’t have a gigantic update loop, a taxonomic approach you’d see from OOP works fine.

                                                          My example wasn’t the end-all-be-all, it was just a case where inheritance works pretty nicely. No approach, of course, is going to work forever.

                                                        2. 5

                                                          I found it interesting that Eiffel is dropped into the article but 6 additional variants on inheritance are described by Bertrand Meyer:

                                                          https://archive.eiffel.com/doc/manuals/technology/oosc/inheritance-design/section_05.html#HDR8

                                                          1. 7

                                                            Because Eiffel imposes that preconditions are contravariant and preconditions are covariant with inheritance, it does impose “subclass means subtype” out of all of the possibilities.

                                                            1. 6

                                                              The ironic thing is that while Eiffel preconditions are contravariant, the argument types are covariant. That leads to type errors at runtime and an extremely ugly hack in the Eiffel language to get around it.

                                                              1. 1

                                                                I’ve never programmed in Eiffel so I have no insight into the language specifically. I only meant to point out that the author’s ontology of inheritance is not comprehensive.

                                                                1. 2

                                                                  think of it as a minimal reproduction case for the bug.

                                                            2. 4

                                                              Even that counter-example breaks- what happens when the behavior that makes an EliteMook different than a regular Mook also needs to be incorporated into bosses- we have an EliteBoss now. Which sort of touches upon what the article is talking about, because really we’re talking about different kinds of inheritance.

                                                              1. 4

                                                                the existence of a counterexample is merely lucky happenstance, when the thesis is “most of the time this situation is not true”. Particularly the ontology of a computer game (or indeed any game; D&D went for decades before multiple inheritance was added) can be more simplistic than one for a business process.

                                                                1. 4

                                                                  Perhaps a more accurate title would’ve been in order “Why inheritance often does not make sense.”