3,465 Matching Annotations
  1. Jan 2023
    1. We rebuilt Cloudflare's developer documentation - here's what we learned

      This post is one massive derp. (Or rather, the problem solved by the changes documented here is... The post itself would instead be best described as one massive "duh".)

      Spoiler alert: anti-wikis with heavyweight PR-based workflows that ignore how much friction this entails for user contributions don't beget many user contributions! (And it also sucks for the people getting paid to write and edit the content, too.)

    1. constructs involving a lone ASCII single quote can make the job of the parser more difficult, when single quote is already significant within the language (such as for denoting character or string literals)

      NB: not actually that much harder. In fact, my prescription today would probably be to omit the trailing s and allow only a bare single quote, which altogether would be incredibly easy to parse. (Omitting the s would also solve the it-doesn't-look-contrived-enough problem.)

    1. we need to reunite model language and programming languages this was the great vision of Simula of beta and Delta L o Delta was not designed to

      We need to reunite model language and programming languages. This was the great vision of Simula[...] We need to stop believing that we can document programs by some well-written code or "clean code". Clean code is great for small programs. Systems need more than comments and a few diagrams—systems need the voice of the designer in them with multimedia, but they also need more expressive paradigms for putting these in our programs.

    1. global.getProcessControl = new ServiceProcurement(page)

      This can be migrated to a utility method (for ServiceProcurement); viz:

      static initialize(slotted, page, key) {
        const { OverrideFailure } = ServiceProcurement;
      
        let override = new ServiceProcurement(page, key);
        if (!(slotted.name in override.global) ||
            override.global[slotted.name] != slotted) {
          throw new OverrideFailure(slotted, page, override);
        }
      
        override.global[slotted.name] = override;
      }
      

      (Alternatively, omit the override failure checking?)

    1. It is less and less the case now, but for a while you could inspect websites to see how it was put together.

      It should not go unmentioned that a big reason why this is the case is the types of folks from the presenter's social circles being hostile to this and trafficking in dubious maxims about how it somehow has to be this way...

    1. Scientificmanagement is simply management that is based upon actualmeasurement

      and yet Moneyball took almost a century, and the human-level processes behind semiconductor fabrication remain astoundingly inefficient (doubly ironic given the task at hand...)

  2. Dec 2022
    1. as a developer, writing against the Win32 APIs allows your software to run on over 90 percent of the computers in the world

      (Something else that has changed in the intervening years; most computers in the world—or a plurality of them, at least—are now running Android, not Windows, but Win32 is useless on Android. It's no help on iOS, either.)

    2. web apps are just so damned easy to use

      Despite the number of times it's been submitted over the years (most recently two months ago), this post has received very little commentary on HN. I think it suffers for its choice of title. This snippet is a better candidate, I think.

    3. Microsoft totally fucked up when they took aim at Netscape. It wasn’t Netscape that was a threat to Windows as an application platform, it was the web itself.

      I dunno about this assessment...

      They knew, and they tried.

      They just eventually stopped trying, because they beat Netscape and Sun.

    4. its overall look-and-feel is far inferior to that of a real desktop mail client

      From a 2022 perspective, things are largely thought of as the opposite. People including developers and users alike on the whole seem to prefer the free-form canvas that enables non-traditional (otherwise referred to as "non-native") UIs—even if developers hate the front-end tech stack.

      Not saying I share the sentiment—just observing that the folks who prefer colorful, do-what-you-want UIs like those found among mobile and Web apps tend to outnumber the SerenityOS fans.

    5. This isn’t about being “Mac-like” — it applies equally to Windows and open source desktop platforms.

      Yeah, but they're basically cribbing the paradigm introduced by the Lisa and popularized by the Mac in 1984. (At least that used to be the case—before Chrome introduced the hamburger menu and everyone else followed suit, Microsoft's attempt to change things up with the ribbon not withstanding.)

    6. They don’t have menu bars or keyboard shortcuts.

      Two things which typical users have been shown not to care about. (I understood the shortcuts thing around this time. It took me, like, 5–10 years after the date that this post was published to realize the thing about menu bars, too. And I'm not even a Mac user.)

    1. designers are fickle beasts, and for all their feel-good bloviation about psychology and user experience, most are actually just operating on a combination of trend and whimsy

      the attitude of software designers that gripped the early 2010s described succinctly

    1. The battle for convivial software in this senseappears similar to other modern struggles, such as the battle toavert climate disaster. Relying on local, individual rationality aloneis a losing game: humans lack the collective consciousness thatcollective rationality would imply, and much human activity hap-pens as the default result of ‘normal behaviour’. To shift this meansto shift what is normal. Local incentives will play their part, butsocial doctrines, whether relatively transactional notions such asintergenerational contract, or quasi-spiritual notions of our evolvedbond with the planet, also seem essential if there is to be hope ofsteering humans away from collective destruction.

      Quoted here: https://malleable.systems/catalog/

    2. Consider how many web applications con-tain their own embedded ‘rich text’ editing widget. If linking weretruly at the heart of the web’s design, a user (not just a developer)could supply their own preferred editor easily, but such a feat isalmost always impossible. A convivial system should not containmultitudes; it should permit linking to them.

      Quoted here: https://malleable.systems/catalog/

    1. It feels weird to say this in 2020, when the idea was presented as fait accompli in 1997, but an enabling open source software movement would operate more like a bazaar than a cathedral. There wouldn’t be an “upstream”, there would be different people who all had the version of the software that worked best for them. It would be easy to evaluate, compare, combine and modify versions, so that the version you end up with is the one that works best for you, too.
    2. Currently modes of software development, including free and open source software, are predicated on the division of society into three classes: “developers” who make software, “the business” who sponsor software making, and “users” who do whatever it is they do. An enabling free software movement would erase these distinctions, because it would give the ability (not merely the freedom) to study and change the software to anyone who wanted or needed it.
    1. Since all reading at that time occurred out loud rather than inside one’s head, the study rooms were a modern librarian’s nightmare

      The modern library is the quiet reader's nightmare; I've been to many noisy libraries over the last decade.

    1. aren’t really pens at all, in fact, but tributes to pens

      Nice turn of phrase.

      See also: mop handles that flex and bend like rubber when subjected to the downward pressure that is typical during mopping.

    2. the cute yellow mittens my wife picked up at Target which unraveled the second time she wore them

      I've said it before: we focused too much on the dream of a 3D printer in every home when we should have focused on personal electric looms.

    3. For the remains of the Pyrex casserole that shattered when I removed it from the oven, strewing the floor with blade-like shards, some so tiny I probably won’t find them for another couple of months, and only when they lodge in my bare feet.

      Would it be possible to adulterate glassware to glow underneath a blacklight?

    1. People seem to think it's the browser's job to block ads, but my perspective is that if a business owner wants to make their business repulsive, the only sensible response is to stop using the business. Somehow once technology is involved to abstract what's happening, people start talking about how it's their right to unilaterally renegotiate the transaction. Or for another analogy that will likely make you upset: "I hate how this store charges $10 for a banana, so I am just going to pay $2 and take the banana anyway".

      terrible analogy is terrible—and I say this as someone who doesn't even fall in line with the general anti-copyright sentiment that is prevalent on sites like HN and Reddit

    1. non-concrete ideas are very hard to falsify

      Maybe this is just a regional thing, but something I really began to notice several years ago is that (a) what Jamie is saying is true, but (b) it's evident that people actually love the unfalsifiability aspect of non-concrete claims—it's safe refuge that they actively seek out.

      Two opposing examples from real life that particularly stuck out: * "Slow down. [You're going too fast.]" * "[...] since you always take so long"

      (These were two different instances/contexts with, I think, a year+ in between them; it wasn't the contrast between them that made me notice the phenomenon. Rather, I recognized each one at the time as being part of this phenomenon. They just serve as good examples because of how easily they could be made concrete—and therefore falsified in light of the facts: "without defining exactly what 'too fast' means, what is an acceptable speed?", "without defining what it means to take too long, what is an acceptable amount of time to take?"—both arising from wholly disingenuous complaints that were forms of externalized gut reactions rather than anything that would hold up under scrutiny...)

    1. Building programs by reusing generic components willseem strange if you think of programming as the act ofassembling the raw statements and expressions of a pro-gramming language. The integrated circuit seemed just asstrange to designers who built circ uits from discrete electronic com ponents. What is truly revolutionary aboutobject-oriented programming is that it helps programmersreuse existing code. just as the silicon chip helps circuitbuilders reuse the work of chip designers.

      Oh man, this metaphor really fell apart and, if anything, works against itself.

      "If integrated circuits are superior to discrete components, why exactly are we supposed to be recreating the folly of reaching for reusable components in creating software?"

    1. The only difference is that standard data repre- sentations (XML schemas) eliminate the need for custom parsers

      They don't, though. Things like JSON, XML, etc. mean you don't need to write a lexer--not that you don't need to write a parser. People land themselves in all sorts of confused thoughts over this (smart people, even).

    1. From the 1976 edition of Naur, Randell, and Buxton's "Software Engineering: Concepts and Techniques":

      Get some intelligent ignoramus to read through your documentation and try the system; he will find many "holes" where essential information has been omitted. Unfortunately intelligent people don't stay ignorant too long, so ignorance becomes a rather precious resource. Suitable late entrants to the project are sometimes useful here.

      Burkinshaw on correctness and debugging. p. 162. (Only in the 1976 edition.)

    1. as forking Electron to make Min wouldn't make any sense, and the replier knew this, reading it to mean that seems like a mistake to me

      Right. If there are two ways to take a statement, one which is absurd because it's inconsistent with actual fact and another which isn't, it's a bad idea to make an argument that hinges on it being the former—that would mean you're insisting on an absurdity.

    1. unified module system and I wouldn’t need to worry about file name extensions

      There is. It was standardized in ES6 aka ES2015. 2015! Direct your ire in the appropriate direction, i.e., at your vendor—and, ultimately, at yourself regarding your own lack of foresight.

    2. I just can’t stop dreaming about a perfect world where I could go back to any of my old JavaScript projects with an ease of mind and knowing that everything just works. A perfect world where my program is going to stand the test of time.

      That's a you-problem. The pieces are there—the language is stable, and there's a ludicrously backwards compatible World Wide Wruntime that you can trust to be around—it's on you if it fails.

    3. perhaps we should take a few steps back before making decisions to reflect on our long-term vision and to recognize that how every change, even the tiny ones, could affect a whole group of users

      The truest thing I've read in this post so far.

    4. being developed on their own to push the boundaries

      I don't think so. I go back look at what boundaries were being pushed in historical projects like some of the stuff that Tolmasky was doing and I see way more than today.

      The last 10 years are pretty stagnant, in comparison. React sucks up a lot of resources to ultimately do little more than reinvent the wheel (poorly). Same with the adjacent tools mentioned here.

    5. JavaScript has been evolving and growing so fast it’s unlike any other tech I’ve seen.

      This statement belies some ignorance of history, I think, or some form of intellectual dishonesty.

      JS is objectively and demonstrably slower on the uptake than what happened with Java.

    6. we mean it as a whole and how it gets used by the user, not just the language specifications alone

      Well, "as a whole", JS includes non-Node-affiliated silliness; it does get used by people in ways that doesn't involve any of this stuff. So use it that way, too, if you have a problem with the way you're using it now (and you should have a problem with it—so stop doing that!)

    7. The language is responsible for providing the context and the environment in which things happen and get shaped.

      No. Well, yes, this is true, strictly speaking. But, again, this is a true-in-some-sense-that-isn't-relevant-here sort of way.

      Parents are not responsible for the crimes that their children grow up and commit.

      The NodeJS community is responsible for the NodeJS community's problems. And people outside the NodeJS community who choose to align themselves with the NodeJS community are responsible for their choices.

    8. Six months passes and while you had almost forgotten about your little project, you now have got some new ideas that could make it even better. The project also has a few open issues and feature requests that you can take care of. So you come back to it. “Let’s start”, you whispered to yourself with excitement. You run npm install in your terminal like an innocent man and switch to your browser to scroll on Twitter while you are waiting for the dependencies to be installed. Moments later you return to your terminal and see… an error!
    1. @15:40

      His point is that a lot of software design has failed to be even as good as print design--that software design really has focused so much on interaction, we kind of treat the computer as this machine that we need to manipulate and less about displaying information--for people to make decisions, to come to conclusions, to learn something--and that by focusing so much on interaction design, by focusing so much on the computer as a mechanical thing, we've really made bad software.

      And so he wants to say part of the problem here is that the people who design can't make these context-sensitive magic ink--right? It's like: print design but now it knows something about your context. And so designers really aren't able to make these rich information things that are dynamic but not interactive. And so you could really kind of call this "Interaction Considered Harmful", and the idea is that our software should only be interactive when it has to be and really our software should be context-aware, good, print-like displays of information.

    1. This brings interesting questions back up like what happens to your online "presence" after you die (for lack of a better turn of phrase)?

      Aaron Swartz famously left instructions predating (by years IIRC) the decision that ended his life for the way that unpublished and in-progress works should be licensed and who should become stewards/executors for the personal infrastructure he managed.

      The chrisseaton.com landing page has three social networking CTAs ("Email me", etc.) Eventually, the chrisseaton.com domain will lapse, I imagine, and the registrar or someone else will snap it up to squat it, as is their wont. And while in theory chrisseaton.github.io will retain all the same potential it had last week for much longer, no one will be able to effect any changes in the absence of an overseer empowered to act.

    1. In our way of delivering orders we emphasise explaining the context two levels up. I may tell my soldiers to raid a compound, but I would also tell them that the reason for this is to create a distraction so that the Colonel can divert the enemy away from a bridge, and that the reason the Brigadier wants the Colonel to divert the enemy is so that the bridge is easier to cross. Not only do the soldiers then know why it’s important to raid the compound (so that others can cross the bridge), but they know that if for some reason they can’t raid the compound, creating any other diversion or distraction will do in a pinch, and if they can’t do that they can still try to do something to make it easier to cross the bridge. It lets everyone adapt to change as it happens without additional instruction if they aren’t able to get in touch with me. Again I think tech could possibly learn from that.

      def

    1. McIlroy envisioned a world where we would be constructing software by picking components off a shelf, and snapping them together like Legos. The hard work would be building the right blocks, and then it would be easy to snap them together.

      See also: Brad Cox on software ICs

    2. Briefly, Taylorism has two central tenets:Measurement: associate metrics with all aspects of work.The separation of thinking and doing: An educated class of managers measures and plans all the work, and is responsible for the overall process, while a class of laborers carries out the implementation of those plans.

      I find it difficult to reconcile these two tenets with the claim that "Taylorism is so deeply ingrained in every aspect of not just modern commerce but life in general".

      Many (most?) places—even big engineering orgs like Samsung—are failing on the first principle alone and are doing a lot of wasteful, gut-driven operational stuff.

    1. Everywhere you could use var you can now use let or const

      No, not everywhere.

      You start replacing var with let and things can be observed to break (e.g. multiple declarations, no declaration before use...)

    1. I’m rather surprised that a separate issue did not come up. That is, many schools make students sign something saying that any code they create as a student has the copyright automatically assigned to the school.

      This is not nearly as common as the highlighted comments suggest—at least not for undergrads at public universities in the US. It is a thing, though, with grad students (for obvious reasons).

    1. Multiplayer stategy games.

      Today, you tend to hear "web app" as a term used e.g. to contrast SPAs from classic, form-based apps. But the term was already being used then, when (barring the use of plugins, which weren't really "of" the Web) only the form-based ones were viable because SPAs and similar Web-native RIAs weren't yet an option.

      Should we refer to those (the classic Web apps) as "turn-based apps" to emphasize the paradigm in play (i.e. REST)?

    1. If I had to guess, I'd assume that this was done here to save some keystrokes by not having to pass around all arguments again.

      One of the most obnoxious motivators for turning out code that ends up sucking.

      When trying to save keystrokes, prefer keyboard macros over code macros that get checked in as source code.

  3. Nov 2022
    1. But. I somehow changed-ish laptop, and you know the problem where you change laptop and suddenly you lose access to a few things? Yes. That's one of my problems. This site was using nini to statically generate pages and interconnect them with backlinks, and it's great. But I figured I'll keep it to simple html pages that don't need any compilation for now, so that when I change this laptop, I'll still be able to publish without having to install anything.
    1. I encounter a lot more smug static weenies than smug dynamic weenies, so I defend dynamic typing out of spite. There have been a few cases where I was surrounded by SDWs and I immediately flipped around to being pro-static. The industry is moving towards static typing and I like being weird and contrarian.

      See also:

      In the Smalltalk community, I always had the reputation as the guy who was trying to make Smalltalk more static so it was more applicable for industrial applications. In the Microsoft environment, which is a very static world, you know, I go around pushing people to make everything more dynamic.

      — Allen Wirfs-Brock, in an interview with Jon Udell https://hypothes.is/a/YH0Mwp0yEeu-Ybt6B3i1Ew

    1. They demand less catching up time, less file-switching and ultimately give you the very bit of information you’re looking for anyway when dealing with them.

      déformation professionnelle

    2. unused classes

      again: unmatched class selectors

      additionally, it's not the fact that they are unmatched (or that they are class selectors specifically) that it's a problem—it's the fact that there are a lot of them

      the entire choice of focusing on classes and class selectors here is basically a red herring

    3. “Favor composition over inheritance”. This piece of wisdom from Design Patterns, one of the most influential software engineering books, is the foundation of utility-first CSS. It also shares many principles with functional programming: immutability, composability, predictability, and avoidance of side-effects. The goal behind all those fancy terms is to write code that’s easier to maintain and to scale.

      déformation professionnelle

    1. I want to add software to offer to inline HN links in this format when people include links to past threads in their comments.

      You could pretty easily do this with a bookmarklet. (Call it "citehn", pronounced "citation".)

    1. logic that depends upon fixed format/fixed position fields

      So don't do that.

      The class attribute had been in HTML for years by the time this post was written—and (contrary to any belief otherwise) was meant for this purpose, and not something contributed by the CSS group for use with CSS selectors.

    1. The idea that a billion of us can keep dumping fresh content into our account for free and that none of this content seems to be ever lost, is honestly quite bizarre even if we take it for granted.

      You can change the framing and gain new insights.

      In the mastodon.technology shutdown post linked, the author describes a situation where the workload exceeds the capacity of an ordinary person, even a motivated one. (There's an argument to be made that this makes for someone who isn't merely an ordinary person—but that strengthens the point I'm about to make, instead of weakening it.)

      How do we fix this problem? In other words, how do we ensure that the workload of an "instance" remains within the realm of feasibility for an ordinary person?

      Answer: making it the responsibility of each person. A single volunteer admin should not be responsible for hundreds, thousands, or more other people. Getting each person to shoulder their own personal load is far more tractable.

      What's absent, currently, is the means for each person to do so on their own in a way that we can realistically expect. That can be worked on. Software like Mastodon can be improved upon—necessarily drastically so—and infrastructure configuration can be improved to, to the point that it doesn't even feel like infrastructure configuration.

      For people with very large spheres of influence, like Aral Balkan who recently disclosed that he's spending ~600 EUR per year for his instance, they can seek help, mining from the resources that are at their disposal that are a consequence of their wide reach. For ordinary people with up to a few hundred followers, they won't need to be exposed to this.

      As for the sentiment behind the remarks about "dumping fresh content into our account for free", recognize that the fresh content has value, and there are ways to subsidize the resource use by parties with an interest in being able to capture some of that value for themselves. When you post a widely shared piece to your blog, then Google for example benefits from this, whether you're using Google Ads or not. It's the mere fact that there's something on the Web worth looking at that makes this beneficial.

    1. Notably, this process can’t avoid the need to teach the computer how to interpret meaning from freeform data

      Although, notably, that process, if very involved, can be captured in a separate document.

    2. documents are useful for all kinds of tasks

      The big takeaway—in a world increasingly obsessed with apps (to the point that even things that originally were and still should be documents end up being conceptualized as apps—and all the downsides that comes with re mental guardrails).

    1. That's a whole different topic. Mastodon isn't built for single-user instances.

      That's the entire topic, my guy!

      "We should be optimising Mastodon so it incentivises more serve[r]s with fewer people." is the very premise of the conversation!

      Mastodon "push[ing] the direction of the protocol or make it harder to cultivate an ecosystem of smaller ones."? "it needs to be easier to start smaller ones"? Are you just not paying attention to the conversations you're responding to?

      Reminds me of:

      What fascinated me was that, with every single issue we discussed, we went around in a similar circle — and Kurt didn’t seem to see any problem with this, just so long as the number of 2SAT clauses that he had to resolve to get a contradiction was large enough.

      https://scottaaronson.blog/?p=232

    1. @stephen@social.stephenfry.com

      This is where it starts getting ridiculous.

      First, rather than social.stephenfry.com, stephenfry.com should be sufficient. Look at email. I can set my MX records to point wherever I want. I don't actually have to have a server with A records to field the email traffic.

      Secondly, the @stephen part is superfluous, too! This is something where Mastodon et al had years (decades!) of hindsight to take care of this, and they still messed it up.

    1. layers of wat are essentially hacks to build something resembling a UI toolkit on top of a document markup language

      So make your application document-driven (i.e. actually RESTful).

      It's interesting that we have Web forms and that we call them that and yet very few people seem to have grokked the significance of the term and connected it to, you know, actual forms—that you fill out on paper and hand over to someone to process, etc. The "application" lies in that latter part—the process; it is not the visual representation of any on-screen controls. So start with something like that, and then build a specialized user agent for it if you can (and if you want to). If you find that you can't? No big deal! It's not what the Web was meant for.

    1. don’t use the Pinboard-developed bookmarklet for bookmarking because it often breaks and Cegłowski refuses to fix it (blaming browsers and websites instead)

      I'm going to guess this is CSP-related breakage and guess further that the bookmarklet does not really do any work except inject script element that tries to load a Pinboard-hosted script.

      There are ways around this, but no one seems that interested...

    1. The file tiddlylisp.py is the Lisp interpreter whose design and code we’ll work through later in the essay. On Linux and Mac you can start the tiddlylisp interpreter by typing python tiddlylisp.py from the command line.

      What a shame that they went with Python, rather than something that can already run directly in everyone's reader app.

    1. I've often wondered: why can't web server apps be installed with the same ease-of-use as desktop apps?

      I've mused about how installing a server-backed Web app (or server-side support for a given protocol) might be made as simple as saving a copy of a Word document or a copy of a PDF that someone has emailed you.

      Consider MediaGoblin, which is the original context where I wrote this down.

      The thing is is that MediaGoblin is written in Python; if you want to "deploy" MediaGoblin, you must deploy a Python app. I don't like that. Imagine instead of you "deployed" an app by installing its set of manuals

      The idea is that you have a document that describes the MediaGoblin application—the software manual. Now imagine that manual were sufficiently detailed so that a person reading it were able to independently re-implement it. If you actually wanted someone to re-implement it, you could do worse than to give them a copy, with the expectation that they'd study it and it would be sufficient for them to learn how to go about making a MediaGoblin clone.

      Suppose you didn't give it to a person, though, but you wanted to "teach" your server how to act like a MediaGoblin instance. Shouldn't we aim to make it as straightforward as being able to give your server a copy of the manual?

      Prior art: - Rob Pike's talk about the Go compiler, and the way he references the ability to ingest PDFs of vendors' manuals and grow a new backend for the compiler - The VPRI/STEPS approach to a TCP stack - Literate programming

    1. This was roughly the same time the idea of Sponsorware was brought to my attention (thanks Caleb Porzio!). This is where I started offering custom domains (and beta features) to sponsors of the project (grandfathering people with existing custom domains, of course).

      I've mentioned before (most recently, I think, in a response to the Postcard creator) that it feels a little scummy to demand people pay to be able to use custom domains. It's like holding someone hostage and demanding ransom for their release.

      I've thought about alternatives. I won't mention past ones here. Instead I'll sketch out a new one.

      1. Sell support billed at a realistic rate, considering the costs (e.g. a flat price of something like $125 for up to ~2 hours), where buyer pays upfront

      2. Maybe throw in a domain for "free" (i.e. included), so if the buyer isn't already bringing their own, they'll have one by the end

      3. Any unused balance (e.g. completion of support task only took half an hour) gets credited to the account

      4. Set up a wiki (a real wiki—not a GitHub-style anti-wiki) for the documentation; point out that it's in folks' best interests to help each other out and keep it up to date and even record their own notes for their own setup here if they want to avoid paying the support fee

      The idea is to charge a high enough upfront fee for something that may not immediately consume up to its budget cap—such that you can, over time, recover own investment while making it feel like the buyer is getting all the value out of their payment.

    2. The solution I settled on (which I still use to this day) is quick and elegant; as well as super accurate. All the blogs start out as non-discoverable by search engines, and do not show up on the Bear feed until they have been vetted by yours truly. I then set up a Tinder-esque review screen where I can easily approve or block a new blog (as well as blacklist that email address).
    1. It seems to me that they hide behind progressive social stances and say "see we're nice guys!" when they're just as rude and indignant than any other group.

      Pretty bang-on.

    1. Android applications written in Java are able to invoke SQLite (through an adaptor). Maybe it would have been more convenient for Android if SQLite had been coded in Java as that would make the interface simpler. However, on iPhone applications are coded in Objective-C or Swift, neither of which have the ability to call libraries written in Java.

      This particular example is pretty sleight-of-handy; there's a double standard being applied here.

    1. I took all my contact info down, but the emails and tweets kept coming steadily. Some people would keep contacting me regularly despite me never replying.

      And here's why https://guzey.com/follow-up/.

      There are lots of people who think the way that Alexey Guzey does: "A story: when I wanted to meet with a really busy friend of mine in SF, I first sent him 2 twitter DMs, then 2 emails, and then 3 text messages, letting him know that I will keep sending one text a day, until an email from him finally landed in my inbox letting me know that he would love to get lunch."

      There are also lots of people who think they way that Heather Arthur does: that simply not replying is an adequate signal.

      I find both to be contemptible.

    1. dockerized and easy to deploy

      contradictory sequence of words

      Use of Docker makes for immediate negation of "easy". At best you can say that it's easier than some other, more difficult thing, but it's not "easy". If you do, then you've got your thumb on the scale, you're doing some Hollywood-style accounting, etc.

    2. This is the easiest way to create a Hypothesis client in which to try quick experiments

      It's not. The Hypothesis sidebar loaded from a bookmarklet is a Hypothesis client, ergo it is possible to create a hypothesis client that lives in a single file (say client.html with all scripts inlined) that can be loaded directly from the disk (or dumped onto a host that offer simple, static Web space), and even opened up in a text editor to be read/edited by hand.

    1. non-inline documentation inevitably gets stale.

      That's a good reason to make sure it's verified by the compiler (or, if you prefer, that the project source code is validated against the documentation)—not dissimilar from the way compilers' typecheckers already work.

    2. Jump to definition and find references are table stakes language service features at this point.

      On the other hand, those features may have actually sent us back.

      See https://news.ycombinator.com/item?id=11381716:

      if I can't make sense of it and be productive in it with just vim, grep, and find, your code is too complex

      I'd be willing to relax the requirements (or should that be "tighten" in this context?) and say that even grep and find should not be necessary, either. That's one of the worst parts about working with C or Go codebases—having to resort to each just to figure out where stuff lives. The circumstances that lead to "A lot of engineering is looking for things" are something that we should be trying to rectify, not accommodate.

    3. Why does this line of code exist?

      One of the most important questions (if not the most important question) to keep in mind when writing code comments. This is what you should be seeking to answer.

  4. typedoc.org typedoc.org
    1. This project gets it backwards.

      We should not be writing in compiled languages with inline type annotations a la TypeScript and generating documentation from that (the same thing javadoc did 20+ years ago). We should be writing ordinary docs and working with tools that can ingest those, extract the information contained there, and validate the codebase+docs combo for coherence.

    1. Even given that, Robert and I were taunted with the fact that W3's use in CERN itself was very low.

      Not so dissimilar to today (minus the taunting). Despite the ubiquity of what is loosely called the Web platform (i.e. the world accessible through ubiquitous, roughly W3C-/WHATWG-compliant browsers), the Web fundamentals that TBL originally wrote about in the early 90s has still yet to be embraced.

    1. In this case, though pedantically and technically correct, /resource and /resource/ confusingly resolve to different pieces of content.

      The error lies in the decision to alias /resource access to the contents of /resource.html. That's something that should not happen. It's as straightforward as that.

    1. Rust lets us explicitly state our desires to the compiler

      This is the key. It follows that the same results, then, could be seen if we devised a way to communicate the same desires to the machine when we're dealing with JS. (My preferred thought experiment: imagine a docs/ directory in the repo where these sorts of things are documented for the benefit of other programmers—alongside any other rationale that you would naturally hope to communicate as well—and that the computer itself were made to be able to read and act upon the very same documentation to guide its behavior.) See http://cr.yp.to/qhasm/literature.html

    1. because the 2010s social networks did everything to kill external links, and turn the focus on the 'personalities' on the platform

      I have referred to this in the past as an emphasis on actor-based indexing, versus topic-based.

    1. I have a suspicion that you're not putting the source for the specific versions of glibc and Linux you used into every one of your projects.

      Why are people so seduced by this dumb argument—to the point that they almost seem proud of it?

      First, it's presumptuous. Who says we're even using glibc instead of some other libc—which I just might choose to include in the projects I work on? Who says we're even using Linux, for that matter?

      Secondly, even if we were, let's assume that we're not, and then see if that teaches us anything about the overall line of reasoning. The original comment was about NPM. NPM is used a fair bit for not just backend stuff but for managing packages used in the browser, too. Let's assume, for simplicity, that our program is entirely a browser-based JS+HTML+CSS app with no backend to speak of. Would the same people argue that, among other things, the Web browser sources would need to be included? Does it even make sense to argue that? Asking the system software question betrays a failure to accurately grapple with the classes of software artifacts we're dealing with, their role in the overall project, and our responsibility for them.

  5. Oct 2022
    1. Let’s try another example: You ask your partner to pick a local restaurant and pick up some take-out, this evening. Then, while logging in to a Zoom meeting, you also ask your partner to buy some wine on their way home. While your partner follows through on your requests, you are left astounded and annoyed: How is it that they could pick a restaurant that was involved in a health scandal last month? And why would they choose a type of wine you hate?

      I think this is a terrible choice for "another example" (that is presumably supposed to be easier to follow in order to communicate what the curse of knowledge is). This whole paragraph should have been cut (or at least replaced with something better).

    1. is designed for rhetorical purpose

      There's the honest part. It's a rhetorical sleight of hand meant to confer an advantage to the person rewriting the others' actual words—which, to repeat, would not be necessary if the two were actually "n[o]t significantly different" in the first place.

    2. didn't clear up any of the confusion

      There's now a "long, 50+ comment chain" attached to the false quote. If this isn't sufficient to catch the eye and serve as a flag that the thing that you're saying they said isn't actually what they said, then there's no hope for agreement.

    3. it doesn't improve discourse

      Yes it does. Shutting down low-effort, Twitter-level dunking built upon made up quotes is worthwhile all on its own. And as a rule that when enforced minimizes confusion and mendacity, it's doubly worthwhile.

    4. Some weird thing about quotes we can't even sort out as well-intentioned nerds who love to talk about rules.

      It's sorted. There's just a contingent pretending that there's something about it that isn't.

    5. This rule is too idiosyncratic

      There's nothing idiosyncratic about saying that you should distinguish quotes from non-quotes by abstaining from formatting the latter the same way as the former.

      Use quotation marks to make it clear you're quoting somebody if you want. If you're not quoting somebody, don't do that. Don't build up a caricature based upon you would have liked for them to have said (so it's easier to pillory) instead of what they actually said.

      This shit's easy.

    Tags

    Annotators

    1. The transition to Python was mostly motivated by a desire togive the students experience in a language that will be used for other courses in the following semesters.

      Perhaps that should be addressed, rather than treating it as bedrock upon which to build.

    Tags

    Annotators

    1. should this input format be plain text? Maybe notebooks like Wolfram's or "nbdev" count?

      Having only recently "got" what Wirth originally meant when he wrote about texts in Oberon as abstract data types, I'm sort of partial to something like that.