1. 1

    I baffled to see (again!) the magician metaphor that hindered and still hinder progress in Python and Django in particular.

    1. 2

      Where was it used before?

      1. 2

        It is common with Django to hear the following:

        • How it works?
        • Magic!

        Same for PyPy, or anything beyond rendering <a> inside <div> with string concatenation..

        1. 11

          That’s not how the article is using the magician metaphor, though

          1. 4

            People said I did the impossible, but that’s wrong: I merely did something so boring that nobody else had been willing to do it.

            The point is that it is not magic.

            1. 3

              Where have you heard that about Django? I haven’t heard Django described as magic since magic removal (pre-1.0).

              1. 1

                PyPy is not magic, for what it’s worth. It is big; a full understanding of how PyPy works usually requires covering some of what RPython is and JITs.

            2. 1

              I agree that the “magic” attitude is not great, and part of what makes Flask great is that you can always look under the hood and see what it’s actually doing. The __new__ stuff Django pulls off with models can seem like “magic” until you dig for a while and realize that it’s just putting the models in a dictionary and iterating through the subclass’ attributes to see what columns it should generate for the database schema.

            1. 30

              This is really good. One important thing, though: there’s a spectrum between total automation and zero automation. A couple years back I had to catalogue 2,000 Usenet messages. I wrote a set of Vim scripts that let me pull them up one at a time and classify them with a couple of keystrokes. It still took a lot of effort to catalogue them all, but still considerably less than time without the scripts.

              1. 38

                I think this is a lesson from carpentry. A skilled carpenter will sometimes, for a complex task, first construct a (potentially disposable) jig to make the specific job easier or even possible.

                1. 16

                  Must steal this analogy for later. I like it.

                  • it’s okay for a jig that only you are going to use to only be usable by you
                  • a disposable jig doesn’t have to last past the current problem
                  • a disposable jig doesn’t have to be generalisable to anything other than one specific problem
                  1. 8

                    To me, this analogy perfectly explains IDEs vs. command line.

                    IDEs save you time in many common cases. But then there’s the 5% of situations where you can save 90% of your time with a script. Writing an IDE plugin is very different and more time consuming than writing a script to munge text. Either a shell script, or a Vim script, etc.

                    So basically the point is that Unix programmers make jigs. People who work exclusively in IDEs don’t. Their tools are made for them and “canned”.

                    Honestly I do think this is a pretty big connection between programming and woodworking, beyond the fact that there is perhaps a great-than-random overlap in the population.

                    Everything is textis actually similar to “everything is wood” :) That is, both the tools and the final product are wood. So I’d claim it’s a closer connection than “Hackers and Painters”, etc.

                    1. 7

                      I find it’s a good way to think about increasing your own productivity; an initial investment in a jig program or set of programs that only works for you on your machine for the duration of a particular task can be a lot less work than building a tool you can ship to others or which is more generic.

                      Brooks proposed a four tier taxonomy in The Mythical Man Month. Jig programs are firmly in the first tier, a program, which implies both the least general applicability and the least development effort required. But unlike jigs made in the service of woodwork, you can keep past jig programs around and maybe edit them to do something similar in the future – which is in the direction of Knuth’s re-editable rather than reusable code.

                    2. 2

                      I can personally attest to this. One of my relatives worked with metal furniture construction. He would always build jigs (by welding metal profiles on an iron sheet) to base the chairs or tables on, because it’s simply faster that way; you don’t need to calculate the metal profile angles for every chair then, and they come out perfect everytime.

                    3. 1

                      You need tools, but those tools can be zero automation pieces of paper and still be effective. As others have said, the Unix way gives people the flexibility to change tools to be most effective, even if that means ignoring the computer completely.

                      1. 1

                        You could say that the grind was when you once studied how to write those scripts. I imagine this isn’t the only time your investment paid off.

                        1. 5

                          That’s five years old.

                        1. 7

                          Something that surprised me was how similar V8’s object representation was to Self’s object representation. Perhaps the authors were influenced by the paper, or perhaps they simply came up with a similar representation on their own.

                          Lars Bak worked on both Self and V8 so that is likely how the influence spread.

                          1. 2

                            That’s a really nice catch! That’s quite interesting indeed, thank you.

                            1. 3

                              Urs Hölzle was a key member of the Self team and hired Lars. Dave Ungar was last seen working on Swift at Apple.

                          1. 1

                            I would expect most of the languages support such kind of redefinitions. What’s the difference between this and a simple assignment?

                            1. 2

                              I think the main difference here is that this isn’t just simple swapping, as the article mentioned; in a become: b, the a object becomes the b object, in that all references that point to a over the entire program now point to b (and all references that point to b now point to a). So the object itself becomes something else.

                            1. 14

                              […] if you think an application has permissions that are too permissive, i.e. the application can do more than you want, you can use flatpak override or Flatseal to harden the desired application.

                              Why would this matter if I’ve run the application at least once already? If I carelessly download an application which has malicious code in it and execute it, it’s already over.

                              It is crucial for an IDE to have access to home or host filesystems, for Git repositories, and for other external uses, otherwise it is not very useful.

                              Yes, they’re Integrated Development Environments, which is why they should be Integrated, not in a sandboxed container with its own convoluted ways to Integrate.

                              Two of their examples, GIMP and Inkscape, are image and vector editors respectively. They also need additional permissions to work, since making them use portals for all host system file access is technically complicated. Audacity and VLC face similar barriers, but all these applications should eventually be able to use portals instead of direct home or host filesystem access without losing functionality.

                              Why? Is there a reason why these applications can’t contain all their resources within the Flatpak, and then only reach out to the filesystem to playback/edit user files?

                              Technically speaking, applications are always sandboxed, as the Flatpak developers have stated. Allowing access to the host file system does not give the application full reign over your system.

                              But as can be seen in the .bashrc example, it’s trivial to just place something in the filesystem which does have full reign over the user’s files (and the whole system, as soon as the user uses the fake sudo shim implanted into the bashrc).

                              Fortunately, this problem has been solved in recent updates. If this problem persisted, I would have criticized it too:

                              That screenshot is pretty much what leads to “dialog box fatigue”. Since anything non-trivial will throw up a big warning box that says “this application can escape the sandbox”, at some point users will learn to ignore it. This is not a proper solution.

                              A valid point. Since the Flatpak developers were fully aware of this problem, they came up with an acceptable and easy solution: flatpak-external-data-checker (f-e-d-c). f-e-d-c is a tool that automatically checks for external sources, such as dependencies and binaries.

                              This requires manual effort from the Flatpak package developers to actually accept the pull request, make sure that the application still works as expected, and then publish a new version on the Flatpak store, after which the users will upgrade to the newest version, eventually. And this will have to happen separately for every app that uses the dependency. If OpenSSL is vulnerable to Heartbleed 2.0 tomorrow, then every Flatpak that depends on OpenSSL (which, I’d say, is >90%) will have to separately bump their dependencies, and publish new versions. Even if the pull request is automated, the act of testing the new version isn’t.

                              A lot of flatkill.org’s statements are made to incite fear in the Linux community. […] but basing your arguments on an anonymous post that claims to have “criticized” Flatpak, but provided no statistics or evidence that vulnerabilities have been exploited inside a Flatpak package is not a reliable source of information.

                              You can replace “flatkill.org” with this post’s URL and replace Flatpak with X11, and it would still be valid, because the author did the same just a few paragraphs ago.

                              1. 5

                                This requires manual effort from the Flatpak package developers to actually accept the pull request, make sure that the application still works as expected, and then publish a new version on the Flatpak store, after which the users will upgrade to the newest version, eventually. And this will have to happen separately for every app that uses the dependency. If OpenSSL is vulnerable to Heartbleed 2.0 tomorrow, then every Flatpak that depends on OpenSSL (which, I’d say, is >90%) will have to separately bump their dependencies, and publish new versions. Even if the pull request is automated, the act of testing the new version isn’t.

                                Unfortunately, I don’t really think you can get around this. If you are committed to ensuring your software keeps working, every library update must be tested. Of course, traditional package-management systems let maintainers update dependencies for all dependent packages at once.

                                1. 4

                                  I think that you’re right. This is precisely why I advocate Nix as a middle ground; it allows for the behavior of updating a single package and all of its dependencies in a single atomic transaction, without requiring each package to vendor its own entire dependency tree. This can be augmented with tools like nix-bundle to produce Flatpak-style application bundles, while also being available for lightweight local installation and usage.

                                2. 3

                                  Why? Is there a reason why these applications can’t contain all their resources within the Flatpak, and then only reach out to the filesystem to playback/edit user files?

                                  And user files are going to be scattered all over the filesystem, so you can’t just a priori say “you can only open files in this directory and you can only save files in this directory” unless you want a miserable user experience.

                                  It looks like the FileChooser portal is a way around this, where the infrastructure itself opens up a filechooser dialog and then does some magic behind the scenes, so you can only read/write files that the user explicitly selects. But integrating that is going to be nontrivial.

                                  1. 24

                                    I’d just like to interject for a moment. What you’re refering to as Linux, is in fact, systemd/Linux, or as I’ve recently taken to calling it, systemd plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning systemd system made useful by the systemd corelibs, shell utilities and vital system components comprising a full OS as defined by Red Hat.

                                    Many computer users run a modified version of the systemd system every day, without realizing it. Through a peculiar turn of events, the version of systemd which is widely used today is often called Linux, and many of its users are not aware that it is basically the systemd system, developed by the systemd project.

                                    (more seriously, this gets truer every year.)

                                    1. 1

                                      The edit didn’t fix it. :(

                                      1. 2

                                        Should be fixed now.

                                        Also, I do think systemd enables some neat things–NixOS being one of them. But, it’s still fun to rag on.

                                        1. 6

                                          I would not say that systemd enables NixOS. NixOS ran fine on upstart. There were some issues with impedance mismatch, and there are some different ones (and also some required custom patches) with systemd. Guix might have given up, but they ran their own Shepherd thing just fine. And well, the features of NixOS that make it different — I have these on a system running sinit as PID1 right now (using Nix/Nixpkgs and some chunks of NixOS code). What I lose and what I get rid of are some systemd-specific behaviours (some bad, some good, but I have no use for the good ones), not really anything NixOS-specific.

                                          1. 3

                                            It’d be awesome if you could go into your process there and how you ended up with what you did!

                                            1. 2

                                              Hm. It seems to be a long-ish story, and part rant on systemd. And offtopic. But I do not want to link my work and explicitly say it is my work but signed by my different identity (people making inferences is fine, that activity is limited to people with common interests). So I guess here it goes https://friendpaste.com/1pqXzSdNjIkjo8ubuhilUY

                                    1. 2

                                      The week’s been busy, so I’m gonna kick back and enjoy a quiet weekend.

                                      Just kidding, I’ll be drowning in Android documentation all weekend to present something on Monday. Fun!!!!1

                                      1. 6

                                        I think most of the frustration with Wayland doesn’t come from Wayland itself per-se, but its authors and the software related to it. People (myself included) dislike the freedesktop/GNOME/systemd/Flatpak centralization of the Linux desktop propagated by Red Hat, and Wayland is an easy target because it’s “coming for your workflow!!”, so to speak. And to be fair, I also dislike the forcing of Wayland with new versions of Fedora (and I think Ubuntu as well, correct me if I’m wrong) because programs that people are used to no longer work. It’s frustrating when your workflow breaks because of things outside your control, and Wayland is the scapegoat in this situation.

                                        That being said, GNOME people are hardly the easiest people to negotiate with (lol no thumbnails in file picker), and that only stokes the fire.

                                        1. 4

                                          If you don’t want your workflow to be broken, Fedora is the wrong distro for you. It’s very experimental and jumping all the new hotness on principle.

                                        1. 4

                                          During the weekend I finished the object system for my implementation of Self. This week I plan on getting very basic programs running and then slowly improving the runtime by adding necessary primitives and then start building the basic Self world. I will post something about the progress but I don’t plan on submitting it to Lobsters because it most likely won’t be interesting. I do have an idea for something which might be interesting but it needs a little bit more research.

                                          Hope everybody’s having a good week.

                                          1. 18

                                            are there any explicit diversity / equity / inclusion goals here?

                                            1. 43

                                              I hope gender, skin color, sexual preference, etc have absolutely no bearing on who is/isn’t a mod here.

                                              1. 28

                                                I believe the only strong selection bias is towards masochism.

                                                1. 14

                                                  Are you not fully aware by this point of the bias that occurs when inclusion isn’t a priority? Being “neutral” in this way generally ends up creating groups with homogeneous gender, skin color and sexual preference.

                                                  1. 24

                                                    how do you even know these things here? Most people have a nick and an auto-generated avatar picture. Nowhere have we ever given the site any information about age, race, color whatever. I could be a sentient goldfish and it should not matter really

                                                    1. 12

                                                      This is hyperbole. As long as the moderator is good it doesn’t matter who they are.

                                                  2. 7

                                                    We don’t have a demographic view of the site to compare against and have generally avoided collecting personal information, so I don’t have a goal along these lines. Looking at my inbox and following some homepage links I can see that this process will met the Rooney rule.

                                                    1. 15

                                                      whoa, someone down voted me for trolling because I asked about DEI criteria? in 2021?

                                                      This is, um, not making a good first impression on this new lobster.

                                                      1. 9

                                                        This is pretty typical, sadly.

                                                        1. 8

                                                          Asking about goals didn’t seem like a troll to me. That said, people have certainly used that topic as bait here and elsewhere before.

                                                          Acting surprised and complaining about downvotes after seeing the answers other commenters gave you seems quite a bit more troll-y.

                                                          1. 5

                                                            If there’s an audience around to make that topic work as troll bait, well, there’s our problem.

                                                            1. 1

                                                              There are different kinds of trolls. What they have in common is that they aim to derail discussions. Leaving aside meta discussions like this one, in almost every discussion on this site, business, hiring practices and the like are explicitly off-topic.

                                                              But there are some people who especially like to discuss those topics anyway and will cheerfully derail a discussion about computing with just a little prompting like that. So one good way to derail a discussion is to talk about some aspect of hiring practices or business dealings.

                                                              Discussing US partisan politics would be similarly effective, but that tends to get shut down quicker, so the trolls try to be a bit more subtle.

                                                              The fact that people are sometimes too easily nudged off topic seems to be a relatively minor problem. But it probably makes people quicker to flag something like OP’s question even in a thread where it’s more topical. Not sure I’d say “well, there’s our problem” about that :)

                                                          2. 6

                                                            You touched a nerve. I became the fifth-most-flagged contributor recently under similar circumstances; this single thread did it. It is difficult for folks to look in the mirror, and anything which requires enough reflection will naturally gather downvotes.

                                                            Don’t worry about it. Focus on being the best contributor that you can be, and you’ll do great.

                                                        1. 5

                                                          These posts are great.

                                                          Do you have a background in Smalltalk and/or Squeak? Squeak of course has a version of morphic which John Maloney did after the Self one. It has some improvements but personally I think it struggled a bit to be as dynamic as the Self version. (It’s interesting though that it has had staying power - both Pharo and Squeak have tried to get away from it for many years without managing to come up with something better)

                                                          Just as some random thoughts: I’m not sure that the best way of programming morphs has yet arisen. Morphic is in a sense an attempt to collapse the MVC hierarchy in order to achieve better flexibility and directness. As such it doesn’t force you to split your model and view (or controller) in any particular way but lets you do it as you see fit. This means that a calculator morph can work just fine without a separate model which is one reason why your morph is so conceptually simple.

                                                          For people reading along I’d recommend:

                                                          1. 4

                                                            Thanks for following my posts, it means a lot to me.

                                                            Do you have a background in Smalltalk and/or Squeak?

                                                            Not at all, Self was my first “true OO” language.

                                                            Squeak of course has a version of morphic which John Maloney did after the Self version.

                                                            That’s quite interesting! I don’t really know the history of Self’s evolution, but this definitely got me interested.

                                                            both Pharo and Squak have tried to get away from it for many years

                                                            Do you mean to say that Pharo is using a version of Morphic right now?

                                                            I’m not sure that the best way of programming morphs has yet arisen.

                                                            I’m open to new ideas. In my first post I mentioned that I would be working on my own implementation of Self (for fun) and I’d like to incorporate the knowledge of the past 20 years into the programming environment.

                                                            it doesn’t force you to split your model and view (or controller) in any particular way

                                                            I have noticed that indeed. I wonder how a MVC styled use of Morphic would look like (perhaps as the topic of a future article)?

                                                            1. 4

                                                              Pharo is using a version of morphic now. If you look at a Pharo image you can see the morph class etc. Pharo’s Morphic compared to Self’s is much more complex for a bunch of historical reasons, and they have tended to try to deal with the complexity by creating various layers on top of it. I haven’t looked at it for ages, but I think the current recommended layer is called Spec. Morphic is still underneath, but the idea is Spec provides a more familiar MVC interface to it.

                                                              If you want to look at a Morphic done well in Smalltalk, I think Cuis would be the place to look. Cuis is another fork of Squeak like Pharo, but the author has focussed on trying to make a small clean codebase with a cleaned up version of Squeak’s Morphic: https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev

                                                              I’m very interested that you have come to Self straight and not through Smalltalk as that’s the way I’ve seen other people come.

                                                              Also looking forward to your implementation of Self :)

                                                              1. 1

                                                                I haven’t looked at it for ages, but I think the current recommended layer is called Spec.

                                                                Yes. And afaik there is also Bloc and Brick.

                                                                I’ve been playing with gtoolkit lately and I must say, that I kinda like it, but I didn’t do anything complicated yet.

                                                            2. 1

                                                              There was an observation from the folks behind the Apple Newton that’s stuck with me:

                                                              You typically have many instances of model objects of the exact same structure. You typically have a single instance of a view, tailored to how it connects to the data and to the rest of the UI (controllers / view-models are ways of factoring that code out from the view). Class-based OO works very well for model objects (unsurprising given Simula’s influence in the design of those abstractions) whereas prototype-based OO works much better for view objects. I’ve not seen any other system that acknowledges this and takes proper advantage of it by design but an increasing number of HTML+JavaScript for the UI, something else for the back end, systems seem to be converging on these ideas accidentally.

                                                            1. 5

                                                              The last straw for me for firefox was its auto update policy. It renders itself unusable (can’t open any new tabs) until you shut it down and restart, which is unbelievably user-unfriendly.

                                                              1. 3

                                                                That never happened to me ever. Strange.

                                                                1. 1

                                                                  It depends on what package manager you used to install Firefox. If you installed it on Windows or Mac, or if you use a Portable install of Firefox on Linux, then the update will be installed only when Firefox is restarted, and the problem will be avoided.

                                                                  If you’re managing your Firefox install using RPM or DPKG, then it doesn’t get to delay the update like that.

                                                                  Source: I run Linux Mint, and use both their stock Firefox version and Tor Browser (which is effectively a portable Firefox install). I used to run Windows, which uses the same tactic.

                                                                  1. 1

                                                                    I did install via DPKG, so that’s good to know. That said, why does that make a difference? It’s auto updating, not waiting for me to update via apt, so I don’t see how the installation method matters.

                                                                    1. 1

                                                                      But it’s not like that for me (on Windows, Mac and Ubuntu) , as I never got forced to update.

                                                                  2. 2

                                                                    This is probably because of Electrolysis and the contentprocess system. Because Firefox runs separate processes to contain the Javascript VM, if you update while Firefox is running and it has to start a new content process it might cause broken behavior due to version incompatibilities. Does Chrome not experience this?

                                                                    1. 1

                                                                      Chrome doesn’t; I think it keeps a copy of the old version until you restart.

                                                                  1. 12

                                                                    Here’s something I don’t understand. Microsoft in the late 90s was hit with an antitrust lawsuit after they bundled Internet Explorer with Windows and made it un-removable. Now, Google is doing the same, with most Android devices coming with an un-installable (AFAIK not even the “Disable” button works) Chrome browser, and their Chromebooks also come with pre-installed Chrome. How does this not cause an antitrust violation, considering a majority of the world runs Android (even if not Chromebook)?

                                                                    1. 10

                                                                      I feel like we’ve been in a long period where antitrust laws have been fairly toothless. However, there are also some differences.

                                                                      I wasn’t around at the time, but my understanding is that basically the entire world of computing was using Windows. Today, a normal person might realistically access the web from their iPhone, or their Android phone, or their Windows computer, or their Apple computer, or their Chromebook. That’s a very different world from the one where every person realistically only could access the web from their Windows computer. We’re in a world where Chrome is in a privileged position on Android/ChromeOS, Safari is in a privileged position on iOS/macOS, and Edge is in a privileged position Windows, compared to the world where IE was in a privileged position on essentially every computing device.

                                                                      1. 7

                                                                        Back when I started to use Unix around the turn of the millennium it was a very different world indeed. Apple was as niche as “Linux on the desktop” is today, there were no other platforms, and Microsoft was the God Emperor Company when it came to desktop software.

                                                                        Being sent a .doc was file a serious problem. You could kind-of open them in OpenOffice.org, but not really. There were some CLI tools as well (e.g. antiword) but they just dumped the text and everything lost was lost. Saving .doc files was possible, but expecting someone in Microsoft Word to view the document in the same way as you saved it was a leap of faith.

                                                                        Making a site look great on both IE and Firefox was a real mission as they used different box models; the IE one made a lot more sense (and is also what everyone is using now box-sizing: border-box) but it wasn’t “according to the spec” and the Mozilla people stuck to their guns on this, a mistake IMO as it was far easier to just make CSS 2.3 to change this; it would saved untold hours of web dev work and made the spec better, as it’s just a better model. But ah well.

                                                                        As much as people love to complain about Chrome now, the entire situation is a lot better. I rarely have issues in Firefox, and if I make something I tend to just test it in Firefox and then Chrome “just to be sure”, but it almost always just works well. Problems with .doc file formats and whatnot are mostly gone.

                                                                        This doesn’t mean it’s all perfect or that we haven’t gotten new problems in return; I kind of resent that I need to own an Android or iOS device just to use WhatsApp for example, and that not using it can be quite debilitating. But overall, yeah, the “Chrome problem” is much less severe than the “IE problem” of 20 years ago.

                                                                        1. 4

                                                                          Disclaimer: I’m a Microsoft employee, but wasn’t during the antitrust trial.

                                                                          It’s true that back in 1997 the market share of Windows was much higher than now, and that antitrust is really concerned with regulating monopolies. But note the antitrust trial was launched as a result of bundling IE with Windows, and in the end after the settlement, IE was still bundled with Windows.

                                                                          Imagine an alternate universe where this didn’t happen. If Microsoft weren’t allowed to bundle IE with Windows, how would it have influenced Apple or Google’s behavior? Then again, if platforms didn’t bundle browsers, what would the user experience be today? I think part of the answer would be “we’d run a lot more native applications.”

                                                                          1. 2

                                                                            I think you are right. Sadly the main difference between them is in which stocks revenues go to. Otherwise, despite all of the marketing, fanoboyism, etc. they are still acting largely the same on both platforms. They essentially work the same, you need to have an account by them, you cannot use the device as intended without an account, you have to pay them loads of money to get access to their customers.

                                                                            And there is essentially no competition. Furthermore this is slowly being set into stone, as for example European laws require one to use 2FA for money transfers/banking, and that 2FA in the majority of cases means you have to use an app provided by the bank, which means if you want to even have the slightest chance to compete you need to make all these banks develop an app, which is a chicken and egg problem, where big enough user bases won’t happen unless you have support for apps and vice versa. Banking apps just being one example.

                                                                            I don’t think there are many ways out. Maybe something like forcing them to support let’s say WASM (or any kind of standard) there is little chance to get out of that. Even if you were had one of the biggest companies and that somehow became your major plan I imagine it would be very hard to break into the market without basing off open source Android for example. In other words you won’t achieve this with innovation alone.

                                                                        1. 5

                                                                          Great article, I’m loving seeing more articles on Self. For those wanting to see a video of using the transporter, I have a short demonstration here.

                                                                          I find the transporter and module system takes quite a bit of getting used to. There’s a lot of moving parts and it’s easy to mess up. But it is nice to be able to export Self code to files where they can be stored in a standard version control system. I do resort to grepping the Self code sometimes despite the good graphical tools to find things.

                                                                          1. 2

                                                                            Thank you! The video is great as well.

                                                                            I find the transporter and module system takes a quite a bit of getting used to.

                                                                            It’s definitely a different paradigm indeed. It’s quite different from other languages where you write the code first and it’s converted to the in-language structure later. Plus, the information you have to supply via annotations is kind of counter-intuitive at first, but I get why they are there. I hope we can figure out a better implementation for those.

                                                                            I do resort to grepping the Self code sometimes despite the good graphical tools to find things.

                                                                            Can you give an example? So far I haven’t felt the need to do this, because you can usually use the Find Slot... tool to find whatever you need in an object quite easily (though some slots are named… oddly. Looking at you traits string shrinkwrapped).

                                                                            1. 1

                                                                              I mostly don’t need to grep Self code, but having the text was very useful a while back when I did a full reorganisation of the categories in globals. It was too invasive to do in a live image with the standard tools - even a Self world can’t keep running if the collections prototypes flicker in and out of existence :)

                                                                              It was very useful to be able to do regex replaces on the .self files before building a new Self image.

                                                                          1. 6

                                                                            I am done with the second article about Self, currently working on the third, this one about the Morphic UI toolkit. Sneak peek!

                                                                            1. 1

                                                                              Another great (!) article from the StackOverflow blog, who have previously also talked about editors and presented Vim and Emacs as unusable. The solution to sharding is not to introduce a datastore which doesn’t have a proper schema and any sort of relation, it is fixing the existing databases. The lack of a schema is listed as a good thing, but it becomes a nightmare if you have an existing application. Adding new things to the application that can use non-existent keys means either adding doc.value || "" everywhere, or re-implementing what SQL does for you with default values anyway. Additionally, as the article mentions, lack of joins means that you will have to embed related data within the row, which leads to duplication and bloated stores. Now, I completely agree with the sentiment that creating indexes is hard and it’s hard to properly optimize a database, but that doesn’t mean we should just throw our hands up in the air and just embed related data in each row (duplicating it in the process).

                                                                              1. 2

                                                                                Another great (!) article from the StackOverflow blog, who have previously also talked about editors and presented Vim and Emacs as unusable.

                                                                                That article was particularly terrible. Citing it as support for this one doesn’t really bolster any confidence in me that this one is any good.

                                                                                1. 2

                                                                                  To clarify, this article doesn’t cite that one, it’s just by the same authors.

                                                                              1. 9

                                                                                I have to say this is one of these lobsters links and comments where I discover something completely new, that opens perspectives. Lately they have been rare for me, so this post is even more valuable.

                                                                                1. 9

                                                                                  Self is very significant. Historically it was extremely influential even though it wasn’t widely used — sort of like the Velvet Underground whom “nobody listened to, but everyone who did started a band.”

                                                                                  • It pioneered prototypes in OOP, later adopted of course by JavaScript.
                                                                                  • The extremely dynamic nature of the language appeared to make it inefficient, but the JIT compiler introduced features like monomorphization and dynamic recompiling that made it much faster than it had any right to be. After Self’s creators moved to Sun, they applied those same techniques to the HotSpot JVM, and of course all modern JavaScript VMs use them.
                                                                                  • The oddball visual environment was AFAIK the first GUI to apply techniques from the animation world, like distorting objects to emphasize the sense of motion. Later on these were adopted in systems like the iOS UI.
                                                                                  1. 5

                                                                                    The people who created the V8 JavaScript VM at Google as well as Urs Holzle (first Google Fellow)… actually worked on the Self project.

                                                                                    Dave Ungar was most recently working on Swift at Apple. I don’t recall him saying anything about pushing for the kind of dynamism that self had into the Swift runtime. I think he was more interested in the IDE experience. Things like Swift playground.

                                                                                  2. 4
                                                                                    1. 1

                                                                                      This is really nice, you explained some points better than I did.