3,016 Matching Annotations
  1. Sep 2022
    1. let's be honest, many people who create sites for money will not necessarily coach the business to keep it simple, since they will earn less money from it
    1. because it is necessary to ,examine changes and new arrangements be-fore deciding to use or keep them, the system must not commit the user to a newversion until he is ready. Indeed, the system would have to provide spin-offfacilities, allowing a draft of a work to be preserved while its successor wascreated. Consequently the system must be able to hold several-- in fact, many--different versions of the same sets of materials. Moreover, these alternate ver-sions would remain indexed to one another, so that however he might have changedtheir sequences, the user could compare their equivalent parts.Three particular features, then, would be specially adapted to useful change.The system would be able to sustain changers in the bulk and block arrangements ofits contents. It would permit dynamic outlining. And it would permit the spin-off of many different drafts, either successors or variants, all to r e m a i n w i t h i nthe file for comparison or use as long as ~needed

      Presaging version control systems.

    2. Un-fortunately, there are no ascertainable statistics on the amount of time we wastefussing among papers and mislaying things
    1. a complete lack of, "personal" bookmarks. The idea was that you might keep track of interesting links by keeping an index of them on your own personal site

      Well, the whole point of the Web was that everything would be given a (world-wide) identifier. Your current list of bookmarks has an identifier, but it's a local one. Once you have a world-wide identifier, it's only short jump to making it resolvable so that your bookmarks list has a URL, and browsing your bookmarks would be as simple as visiting that list.

    1. Buy: from Amazon.com (paperback), Barnes & Noble (paperback), Booksamillion (paperback), Borders (paperback), Powells (paperback), or Wordsworth (paperback).
    1. it is the ability of browsers to execute JavaScript programs that makes it an ideal language for an online version of a book on computer programs

      No way. HTML is way better suited for it!

    1. The fact that this book is an SPA—instead of just, you know, a bunch of web pages—is very annoying.

      Totally screws up my ability to middle click the "links" in the TOC.

      It also messes up the browser scroll position when clicking back/forward.

    1. Ever tried to look up some news from 12 years ago? Back in library days you were able to do that. On news portals, most articles are deleted after a year, and on newspaper web sites you hardly ever get access to the archives – even with a subscription.

      This is a massive failure of infrastructure (and education/"professionalism"—by and large, most people whose careers are in operating or maintaining Web infrastructure don't haven't been inculcated into or adopted the sort of "code of ethics" that sees this as a failure).

      The thing might just be for something like the Internet Archive to get into training or selling professional services for handling companies' "Web presence, done the right way". (This is def. take some organizational restructuring, however.) I'd like to see, for example, IA-certified partner organizations that uphold the principles described here and the original vision for the Web, and professional associations that work hard at making sure the status quo improves a lot over what's common today (and doesn't slide back).

    1. you can’t release a $300m AAA blockbuster movie directly on YouTube because you will never make your money back

      Hmm. I'm skeptical of the certainty with which this is said.

      Given a series of trials the claim here is that if you took a blockbuster and released it for "free" (supported by ads) on YouTube) then the ad revenue even when multiplied by the greater number of viewers would not only not surpass ticket sales from the subset of the same viewers who'd be willing to pay for tickets, but that it wouldn't even be able to cover the production budget. That's both a strong claim and a claim that I'm not sure is correct. For comparison, Netflix (and even ad-supported streaming services, albeit ones with lower budgets) seem to do pretty well with just a fraction of the <$10-per-viewer take that makes up monthly revenue.

    1. Those images are yours. They be-long to you and to you alone, and theyare infinitely better for you than thosewished on you by others

      dubious

    2. while we can't avoid using en-ergy, there is no value in using morethan we mus

      principle of least (literal) power

    1. f i had just read enough or watched enough talks my life would start to get better

      The notion of "productive consumption" has, for some people, an almost irresistible appeal.

    1. it means that even when I do say hello or hold a door or whatever I don't get a response

      There's a presumption here (and in the linked article) that those people want to talk to you—that they're just quietly suffering their desire to have some interaction with you, if only it were the case that you'd allow it. This is way more condescending than the thing that the article seeks to correct.

    1. often the love for open source often only goes as far as to say thanks when they're creating a bug report

      Thankses simply do not belong in a bug report. It's an almost surefire indicator that there's something wrong culturally and that your bugtracker isn't so much being used for bug reports as it is filled with support requests.

    1. No to new features. No to breaking changes. No to working on holiday. No to fixing issues or merging pull requests from people who are being unpleasant. No to demands that something has to be fixed right now.

      In other words, no to the rotten cultural expectations that are by far what you're most likely to encounter on GitHub. I promise—things really were so much better before it came along to try to be Facebook-for-software-development.

    2. The general state of the open source ecosystem is that most maintainers are building software they want other people to use and find useful.

      I think the default assumption that this is what's going on is a huge part of the problem. I see a similar thing happen on GitHub constantly, where project maintainers try to "upperhand" contributors, because they see the contribution as something deliberately undertaken to benefit the person who is e.g. submitting a bug report. This is a massive shift away from the spirit of the mid-to-late 2000–2010 era characterized by initiatives like Wikipedia (and wikis generally) and essays by Shirky on the adhocracy around the new digital commons.

    3. Bob works for TechCorp and discovered a few years ago that using a tool installed from Homebrew results in a 90% speedup on an otherwise boring, manual task he has to perform regularly. This tool is increasingly integrated into tooling, documentation and process at TechCorp and everyone is happy, particularly Bob. Bob receives a good performance review

      Directly related to a question I posed a few years ago about who should really be funding open source. My conclusion: professional developers who are are most directly involved with how the source is put to work—and who benefit from this (in the form of increased stature, high salaries and bonuses, etc., in comparison to the case where the FOSS solution hadn't been available). This runs counter to the popular narrative that frames the employer as a "leech" and silent on the social and moral obligations of the employee who successfully captured value for personal gain.

      It's like this: the company has some goal (or "roadmap") that involves moving forward from point A to point B. The company really only cares about arriving at the desired destination B. They negotiate with a developer, possibly one who has already signed an employment contract, but someone who is made aware of the task at hand nonetheless. The developer agrees to do the work meant to advance the company towards its goals, which potentially involves doing everything manually—that is, handling all the work themselves. They notice, though, that there is some open source software that exists and that can be used as a shortcut, which means they won't have to do all the work. So they use that shortcut, and in the end their company is happy with them, and they're rewarded as agreed (not necessarily at the end, but rewarded nonetheless with e.g. regular paychecks, but also possibly receiving a bonus), and they advance in their career. Who's extracted value from the work of the open source creator/maintainer here? Is it really just the company?

      McQuaid seems to agree with my view, going by the way he (later) identifies both Bob and TechCorp as benefitting from Reem's work; cf https://hypothes.is/a/MBN0aDnuEe2aF8s2kWTPrg

    4. Bob and TechCorp are benefitting from the work done in Reem’s free time
    1. I'll explain what it was inspired by in a second...
    2. (I feel like I tweeted about this and/or saw it somewhere, but can't find the link)

      visible-web-page looks to have been published and/or written on 2022 June 26.

      I emailed Omar a few weeks earlier (on 2022 June 7) with with a link to plain.txt.htm, i.e., an assembler (for Wirth's RISC machine/.rsc object format) written as a text file that happens to also allow you to run it if you're viewing the text file in your browser.

      (The context of the email was that I'd read an @rsnous tweet(?) that "stuff for humans should be the default context, and the highly constrained stuff parsed by the computer should be an exceptional mod within that", and I recognized this as the same principle that Raskin had espoused across two pieces in ACM Queue: The Woes of IDEs and Comments Are More Important Than Code. Spurred by Omar's comments on Twitter, I sent him a link to the latter article and plain.txt.htm, and then (the next day) the former article, since I'd forgotten to include it in the original email.)

    1. Java is good by modern standards, from a technical perspective, the platform having received a lot of improvements from Java 8 to 17. Unfortunately, it still stinks, and the problem is its "enterprise" culture.

      JS engines are good from a technical perspective. The problem with JS is the Node/NPM culture.

    1. he would do chores for the neighbors

      Again: mostly enabled by the fact that he was young.

    2. A neighbor came to Billy asking for help with a valve job on another truck.

      Another key ingredient. Society is participatory.

    3. and some mentoring by kindly contractors

      This is not to be discounted. Mentoring is a big deal generally, but a lot of what made this possible likely came from the novelty of dealing with a child. If you replace Kevin with, say, a 25 year old who is no more or less capable or committed, what changes is others' behavior in their interactions.

    1. in which generality and portability are more important than fancy graphics techniques and complex extra facilities

      This design constraint is exactly what people are so bothered about 30 years later. Generality! Portability! That's why you don't get to exercise full control of the sort that your "native" stack would give you. It's also why the Web has not only endured, but has attained a level of ubiquity that is not matched by any other "platform".

    2. Compound Document Architecture"
    3. the information was not naturally organised into a tree

      This touches on the subtle, underrated brilliance of Wikipedia's (mostly) flat namespace.

      Intertwingularity is inescapable.

    4. When two years is a typical length of stay, information is constantly being lost.

      Thirty years on, we're still losing stuff. (You could even argue that the Web—as it has been put in practice, at least—has exacerbated the problem.)

    1. anyone could publish anything

      Lots of the problems that Hypothesis runs into (incl. those described here in this post!) could be attributed to this. They could probably be neatly described in a volume titled "The Perils of Self-Publishing", in a section dedicated to the consequences of non-uniform practices.

    1. in spite of all the amazing innovations of the Oberon environment (everything is a command and such)

      common misapprehension; only command procedures are commands (not "everything")

    1. note that this will show the historical content within the current template – so not necessarily exactly the same as the original page
    1. helena-lang.org should host a demo in the form of a copy of the "meat" of the project that can run directly in the browser from the open web (ideally launched via a single button here on the homepage) without having to install an extension (or at least anything more complicated than a bookmarklet)

    1. for both access and persistent identity

      This highlights a problem with the Web: the fusion of document identifiers and the channel through which the (or "an") information/service provider makes it available.

      Suppose stakeholder S wants to mirror a document D (published in an HTML-based format) originally distributed by authority A. This will probably involve having to touch D in order to rewrite links to point at S's copies of auxiliary resources instead of A's originals. Simply copying the representation's bytestream is not sufficient.

    1. a URI is like a proper name and baptism is given by the registration of the domain name, which gives a legally binding owner to a URI

      "[... temporarily]"

    1. Before asking the question, how do I build AGI, you first must ask the question, what would I recognize as AGI?

      Wrong. Here, I'll show you:

      Forget about AGI for a moment. Instead, pretend we're talking about pecan pie. Most people probably can't answer the question, "What would I recognize as a pecan pie?" (or a sandwich). And yet thousands of people are able to make (and thousands more people are able to enjoy) pecan pie all the time—probably every day.

    1. This RFC lacks any acknowledgement of the text/uri-list media type.

    2. In some cases, it is not straightforward to write links to the HTTP "Link" header field from an application. This can, for example, be the case because not all required link information is available to the application or because the application does not have the capability to directly write HTTP fields.
    1. The answer is simple – stop using these services and look for privacy respecting alternatives where possible.

      Also: just don't take photos/videos and reduce your social media "footprint" generally.

      Privacy-respecting alternatives don't address the issue raised earlier with the comparison to the celebrity iCloud leaks. Because, to reiterate, privacy and security are different things.

    2. If someone came up to you in the street, said they’re from an online service provider and requested you store all of the above data about you with them, I imagine for many the answer would be a resounding NO!
    1. I’ll read through a dependency, start refactoring, and realize that it’s going to be simpler to write it myself
    2. a bigger source tree

      Someone is going to need to eventually explain their convoluted reasons for labeling this a downside.

      Sure, strictly speaking, a bigger source tree is bad, but delegating to package.json and npm install doesn't actually change anything here. It's the same amount of code whether you eagerly fetch all of it at the same time or whether you resort to late fetching.

      Almost none of the hypothetical benefits apply to the way development is handled in practice. There was one arguably nice benefit, but it was a benefit for the application author's repo host (not the application author), and the argument in favor of it evaporated when GitHub acquired NPM, Inc.

    3. Vendoring means that you aren’t going to get automatic bugfixes, or new bugs, from dependencies

      No, those are orthogonal. Whether you obtain the code for your dependency* at the same time you clone your repo or whether you get it by binding by name and then late-fetching it after the clone finishes, neither approach has any irreversible, distinct consequences re bugs/fixes.

      * and it still is a dependency, even when it's "vendored"...

    1. If the program provides accurate real-time feedback about how user manipulations affect program state, it reduces user errors and surprises. A good GUI provides this service.
    1. The LISP part, though, is not going well. Porting clever 1970s Stanford AI Lab macros written on the original SAIL machine to modern Common LISP is hard. Anybody with a knowledge of MACLISP want to help?
    1. Performance. Running a research project in a browser isslower than running it natively. Fortunately, performanceis not generally critical for evaluating usability. Thus weprioritize compatibility and ease-of-use over performance.

      Additionally, as more time passes, it will become less and less of a problem.

    2. There are several issues to consider when translating re-search projects into JavaScript and running in a browser

      It's a little bit of a misapprehension/mistake to describe this as translation into JS.

    3. We propose building an infrastructure that makes it easy tocompile existing projects to JavaScript and optionally collectusage data. We plan to leverage existing tools to translateprograms into JavaScript. One such tool is Emscripten [15],which compiles C/C++ code and LLVM [14] bitcode toJavaScript.

      It only occurred to me reading this now, and musing about the code size and relative performance of simple programs written first in a to-be-compiled-to-JS language and then in JS, that the folks associated with these pushes are taking the sufficiently smart compiler position. Connected to superinferiority?

    4. the tools can be distributed within static web-pages, which can easily be hosted on any number of exter-nal services, so researchers need not run servers themselves
    5. We propose helping researchers compile their tools toJavaScript

      This is probably too ambitious, impractical. For most cases, it would suffice to make sure that the tools used to produce "traditional" release packages can run in the browser. (I.e., the release itself need not be able to run in the browser—though it doesn't hurt if it can.)

    6. not designed to be secure

      "secure" is used in this context to mean, roughly, "work with adversarial input"

    7. Many research projects are publicly available but rarely useddue to the difficulty of building and installing them
  2. schasins.com schasins.com
    1. Ringer is a low-level programming language for web automation tasks. Many statements in the high-level Helena language are implemented with Ringer. Ringer comes with a record and replay tool; when a user demonstrates how to complete an interaction in a normal browser, the tool writes a straight-line Ringer program that completes the same interaction on the same pages. GitHub
    1. wehave found instances of people using relatively heavy-weightJavascript frameworks like Exhibit [11] just for the compar-atively minuscule feature of sortable HTML tables
    1. Some other things:

      • If I visit https://www.zylstra.org/blog/ and content from e.g. this blog post https://www.zylstra.org/blog/2022/09/10-thoughts-after-100-annotations-in-hypothes-is/ has been inlined, Hypothesis doesn't know how to deal with this—it doesn't know that the annotations that apply to the latter can also be layered onto the inlined content at /blog/. This is a minor quibble insofar as you can measure it on terms of mere convenience. Less minor, however, is that if a user attaches their annotations to /blog/, then it will eventually be orphaned (as more posts are written and the now-current ones get bumped off the page), and will never appear in the correct place on the actual post.

      • When people annotate Wikipedia there's a high likelihood that the annotation will become orphaned as the content changes, even though the version that was actually annotated will usually be available from the article history.

    2. Despite the social nature of h., discovery is very difficult. Purposefully ‘finding the others’ is mostly impossible.

      This was Peter's motivation to create annotations.lindylearn.io.

    3. H.’s marketing director has 1348 public annotations over almost 6 years, its founder 1200 in a decade.

      Public ones, at least.

    1. If you need a site that’s just a single page I think I would use a word processor and do a “save as html”.
    2. Over in the IndieWeb community we were having a conversation about how easy it should be for people to create their own websites (also for small local businesses etc.) Where making the site is basically the same as writing the text you want to put on it. Social media silos do that for you, but out on the open web?
    1. When I go to use some software it takes an inordinate amount of time to set things up.
    2. Some of my ruby, nodejs and python projects no longer run due to dependencies not being pinned at creation time.
    1. XBL is a proprietary technology developed by Mozilla

      Example of when "proprietary" is not an antonym of "open source".

    1. use-cases such as representing a 410 Gone deleted resource on static hosting that often disallow setting HTTP headers directly
  3. Aug 2022
    1. 1) get an extra 'search' attribute on to the <a> tag in HTML so that we have: e.g. <a href='...' search='...'>link text</a> 2) If there's take-up, then later on push for adding a date-time of creation attribute to <a>. This will add link history to the internet. The way (1) works is someone sticks the basic href to a page in the href attribute, and then sticks the text they want to link to in the search attr. The browser fetches the page, and as a secondary action (at user option) searches for the text.

      Another approach, inspired by the <label> element, would be to encode these selectors as separate <link> elements in the head. You could write your links as normal, and then add these <link rel="selector" for="foo" href="XXX[...]X" /> to your document (where foo is the ID of the <a> element, and the href value is selector).

    1. Documents may be retrieved by URL: by sending mail to listserv@info.cern.ch with a line containing the command SEND followed by the URL of the document

      Neat.

    1. If you refer to a particular place in a node, how does one follow it in a new version, if that place ceases to exist?

      The answer is: linking party pays. I.e., after 30-ish years of the Web put into practice, what has emerged is that it is the linking party's responsibility to ensure:

      • that the material remains available (by keeping a copy around, or arranging for the same thing by delegating to a third-party), and
      • there is some reliable way to establish provenance (which can be handled in tandem with delegation to same third-party, as with availability)

      These are only necessary if these two (availability and reputable provenance) are actually desirable properties. But in the event that one or the other or both is desired, the rule is that linking party pays.

    1. Linking by context In this case, the annotater refers to a part of the document by the context: for example, he quotes the first and last pieces. See for, example, the section "In this case...". This method is clearly heuristic and prone to failures just as is the automatic generation of differences above..

      This is the only realistic one—and the only way to reconcile the vast pre-Web corpus that is ostensibly meant to be ingested to occupy a first-class status on the Web.

      It still ~requires some amount of versioning (though not necessarily with the cooperation of the publisher, from whom it would be prudent to assume harbors a mildly adversarial outlook; cf Wayback Machine, Perma.cc, etc).

    2. The solution set is as follows: take your pick.

      It's almost like a pick two/impossible trinity.

      You can either have: - a resource that stays up-to-date (e.g. by a convenient URL that always points to the most recent revision, i.e. documents are mutable) - links that don't break

      You can't have both.

      If you choose the latter, your document can never change--not even to say the current version is out of date. This also means using unique ("versioned", you could say) URLs--one for every revision, with it only* being possible for later revisions to point to earlier ones, almost like a Git-like DAG.

      If you choose the former, you're gonna be breaking your links (and those of others, too).

      * The workaround would be to include in rev A (which predates rev B) a URL to a non-existent resource, and you preregister your commitment to deposit a document (rev B) there. Not possible in systems which rely on content hashes, but imminently doable under the norms of the way URLs get minted. (Still doesn't fix the problem of have a clean and up-to-date URL like /pricing or /about/team, though.)

    1. A disadvantage seemed to me to be that it is not obvious which words take one to particularly important new material, but I imagine that one could indicate that in the text.

      I don't understand this.

    2. A feature of Microcosm is that links are made using keywords in the following way. Within a certain region (for example, a set of documents), a keyword is connected to a particular destination. This means that a large number of links may be declared rapidly, and markup in the document itself is not needed.

      Presaging lightweight wikilinks? (Or at least WikiWords?)

    1. One might want to make a private annotation to something which is visible world-wide but unwritable. The annotation would be invisible to another reader
    1. In practice, a system in which different parts of the web have different capabilities cannot insist on bidirectional links. Imagine, for example the publisher of a large and famous book to which many people refer but who has no interest in maintaining his end of their links or indeed in knowing who has refered to the book.

      Why it's pointless to insist that links should have been bidirectional: it's unenforceable.

    1. Obnoxious.

      As someone recently pointed out on HN, it's very common nowadays to encounter the no-one-knows-else-what-they're-doing-here refrain as cover—I don't have to feel insecure about not understanding this because not only am I not alone, nobody else understands it either.

      Secondly, if your code is hard to understand regarding its use of this, then your code his hard to understand. this isn't super easy, but it's also not hard. Your code (or the code you're being made to wade into) probably just sucks. The this confusion is making you confront it, though, instead of letting it otherwise fly under the radar.* So fix it and stop going in for the low-effort, this-centric clapter.

      * Not claiming here that this is unique; there are allowed to be other things that work as the same sort of indicator.

    2. And by the way, if you ever do do anything good with it, it'll just become a cesspool of people posting Donald Trump memes and complaining about what movie didn't have the right people in it on Twitter. That's what your inventions will be used for, right? Not advancing humankind and producing some kind of good future for everybody.

      ... says the guy who has dedicated his life to video games.

      Previously: https://hypothes.is/a/tCHXEvj-Eey1N3dRiP4I4Q

    1. Best of all, there is no software to install, it just works from the Web!

      Nice property. It would be nice if HTML Tidy could do the same.

    1. This is the earliest known reference to HTML's class attribute that I've found in a public document so far: 1995 May 6 in draft spec 02 (i.e. the third revision) of the HTML 2.0 spec.

      This postdate's Håkon W Lie's original CSS proposal (from 1994 and which doesn't mention classes) and predates the first CSS draft specification (dated to 1995 May 31 in one place and which mention's HTML's ability to subclass in order to "increase the granularity of vcontrol" [sic]).

    1. To increase the granularity of vcontrol, HTML elements can be subclasssed

      The "subclassing" word choice here is interesting. It matches the model eventually suggested in HTML 3.x, but at the time of this draft, HTML was in a draft specification stage (third revision — "02") for HTML 2.0

      I'm interested in the discussion that led to this.

    1. It seems the Web is still in a primitive state of formation: loose bands of individuals hunting and gathering. I look forward to great nations in this new medium.

      You sure about that, Dan-from-25-years-ago?

    1. Especially if CouchDB were an integrated part of the browser

      It's always funny/interesting to read these not-quite-projections about overhyped tech from a far enough vantage point, but this sounds a little like what I've advocated for in the past, which is resurrecting Google Gears.

    1. Of the two, the html version is the one where I've spent a bunch of time trying to understand and improve the performance. In the dear imgui version I've done the easiest possible thing at every step and the performance is still fine.
    1. So what’s wrong with all the different languages? Nothing, if you enjoy the mental exercise of creating and/or learning new languages. But usually that’s all they are: a mental exercise.
    2. Editorial: The real reason I wanted Cmm to succeed: to democratize programming. It wouldn’t belong in any business plan, and I seldom mentioned to anyone, but the real reason I wanted Cmm to succeed was not about making money (although paying the mortgage was always important). The real reason was because of the feeling I had when I programmed a computer to perform work for me
    3. Another thing I’ll do when I’m King of the World is declare that executable code will always be inseparable from it’s source code. Using a script language solves that, of course, because a script is it’s source. For compiled code a second-best solution is the executable always contain pointers to where the source originated, but since that source may disappear the better solution is for language compilers to simply tack the original source code (and related make files and resources) onto the end of the executable in a way that can be commonly extracted. The law will be known as the “All boots shall contain their own bootstraps” decree.
    4. lack of a common powerful hi-level language available on every computer remains. You still cannot write a script file and send it to everyone and expect them to be able to run it without installing something first. The closest we probably have is HTML with JS embedded, since everyone has an HTML browser installed
    1. It's often a good idea to replace common primitives, such as strings, with appropriate value objects.
    1. You can use terribly slow scripting and techniques and get something working, not because the tooling is genius, but because the hardware is so incredibly fast.

      If the thesis is sound, then logically we should expect the instances where people have decided to "use terribly slow scripting and techniques" to produce better programs; the not-slow (non-"scripting") stuff to be worse.

      You can only pick one:

      • software is worse because hardware improvements mean that what were previously noticeable inefficiencies are no longer noticeable
      • programs that are written in low-level languages and don't as much incur runtime overheads are better on average because they're written in low-level languages that aren't as wasteful
    1. I think we can define an "archival virtual machine" specification that is efficient enough to be usable but simple enough that it never needs to be updated and is easy to implement on any platform; then we can compile our explorable explanations into binaries for that machine. Thenceforth we only need to write new implementations of the archival virtual machine platform as new platforms come along

      We have that. It's the Web platform. The hard part is getting people to admit this, and then getting them to actually stop acting counter to these interests. Sometimes that involves getting them to admit that their preferred software stack (and their devotion to it) is the problem, and it's not going to just fix itself.

      See also: Lorie and the UVC

    1. browsers aren’t magic! All the information browsers send to your backend is just HTTP requests. So if I copy all of the HTTP headers that my browser is sending, I think there’s literally no way for the backend to tell that the request isn’t sent by my browser and is actually being sent by a random Python program

      This calls for a perspective shift: that "random Python program" is your browser.

    1. And it’s like, no, no, you know? This is an adaptation thing. You know, computers are almost as old as television now, and we’re still treating them like, “ooh, mysterious technology thing.” And it’s like, no, no, no! Okay, we’re manipulating information. And everybody knows what information is. When you bleach out any technical stuff about computers, everybody understands the social dynamics of telling this person this and not telling that person that, and the kinds of decorum and how you comport yourself in public and so on and so forth. Everybody kind of understands how information works innately, but then you like you try it in the computer and they just go blank and you know, like 50 IQ points go out the window and they’re like, “doh, I don’t get it?” And it’s the same thing, it’s just mediated by a machine.
    1. :

      Notice with the line about Tom and Huck being boys, the bottom-up description sounds unnatural.

    2. or a not very significant change is made to an existing feature in a way which probably won’t cause anybody problems

      not what semver is actually about

    3. The git repositories for Inform
    1. his ostensible real life (which is actually staged)

      You accidentally a word.

    2. This piece would benefit from better editing—e.g. its use of pronouns with an unnatural (or too-far-away) antecedent, dubious phrasing like "all the more", etc.

    1. The more the reimplementation differs from the original authors’ code, the better it is as a verification aid
    2. the published journal article, or some supplementary material to that article, contains a precise enough human-readable description of the algorithms that a scientist competent in the field can write a new implementation from scratch
    1. The lack of CPU power in those days also meant there was deep skepticism about the performance of interpreters in general, and in the user interface in particular. Mention "interpreted language" and what sprung to mind was BASIC or UCSD Pascal, neither regarded as fast.

      still widely held today

    2. symmetric

      traditional compilation foils "symmetric authoring"

    1. I can't get behind the call to anger here, even if I don't approve of Apple's stance on being the gatekeeper for the software that runs on your phone.

      Elsewhere (in the comments by the author on HN), he or she writes:

      The biggest problem I try to convey is that you have no way of knowing you'll get the rejection

      No, I think there were pretty good odds that before even submitting the first iteration it would have been rejected, based purely on the concept alone. This is not an app. It's a set of pages—only implemented with the iOS SDK (and without any of the affordances, therefore, that you'd get if you were visiting in a Web browser. For whatever reason, the author both thought this was a good idea and didn't review the App Store guidelines and decided to proceed anyway.

      Then comes the part where Apple sends the rejection and tells the author that it's no different from a Web page and doesn't belong on the App Store.

      Here's where the problem lies: at the point where you're - getting rejections, and then - trying to add arbitrary complexity to the non-app for no reason other than to try to get around the rejection

      ... that's the point where you know you're wasting your time, if it wasn't already clear before—and, once again, it should have been. This is a series of Web pages. It belongs on the Web. (Or dumped into a ZIP and passed around via email.) It is not an app.

      The author in the same HN comment says to another user:

      So you, like me, wasted probably days (if not weeks) to create a fully functional app, spent much of that time on user-facing functions that you would have probably not needed

      In other words, the author is solely responsible for wasting his or her own time.

      To top it off, they finish their HN comment with this lament:

      It's not like on Android where you can just share an APK with your friends.

      Yeah. Know what else allows you to "just" share your work...? (No APK required, even!)

      Suppose you were taking classes and wanted to know the rubric and midterm schedule. Only rather than pointing you to the appropriate course Web page or sharing a PDF or Word document with that information, the professor tells you to download an executable which you are expected to run on your computer and which will paint that information on the screen. You (and everyone else) would hate them—and you wouldn't be wrong to.

      I'm actually baffled why an experienced iOS developer is surprised by any of the events that unfolded here.

    1. Not to dispute "deathanatos"'s (presumably) thorough refutation, and although the Wat behavior remains the default for compatibility reasons, but most of these problems are fixed with a single pragma.

    1. The JS that is being run is essentially IE6 or IE5-level, so none of the modern features introduced in IE8

      Odd way to describe it! You could easily have said "Chrome 1.0" or "Firefox 1.x-level" (or even "Firefox 2.x" or "Firefox 3"), since JS didn't really change between 2000 and 2010. (ECMAScript 5 was standardized in 2009 but not bene, that's December 2009. IE 8 didn't introduce ES5, and it definitely wasn't available in IE at the tail end of the year. Full ES5 compliance didn't even really show up in browser until 2012-ish, not even Chrome—the one browser that had short release periods at the time.)

    1. Corollary: Spolsky (at least at the time of this article) didn't really understand types, having about the same grasp on computing fundamentals as your average C programmer.

    1. It should be dead simple to distribute content (eg. static content).It should be easy to build apps.It should be not too hard to build a platform.

      The thing that gets me about takes like this is that it's all the stuff below the Web content layer that accounts for what makes all this stuff harder than it needs to be.

      What's the hard part about distributing content (static or not, but let's go with static for simplicity)? It's registering a domain, updating DNS, and keeping a Web server up—all systems that have nothing to do with the "infernal" trio and also generally programmed in what are typically described as saner languages and their traditions. It's either that, or it's relying on somebody else, like GitHub Pages, and integrating the implementation details/design decisions for their value-add into your workflow.

      To "build a platform" is ambiguous, but it sounds a lot like "creating a server-side application to serve non-static content and handle associated requests". Is the infernal trio to blame for the difficulties of that, too?

    1. Dynamic typing makes that harder

      So run a typechecker on the code to check your work if you want type checking. That is what TypeScript does, after all. And it's been around long enough that people shouldn't be making the mistake that a runtime that support dynamic types at runtime means that you can't use a static typechecker at "compile time" (i.e. while the code is still on the developer workstation).

    2. The point is to write bug-free code.

      With this comment, the anti-JS position is becoming increasingly untenable. The author earlier suggested C as an alternative. So their contention is that it's easier to write bug-free code in C than it is in JS. This is silly.

      C hackers like Fabrice Bellard don't choose C for the things they do because it's easier to write bug-free code in C.

    1. If you’re still worried, do note that the Space Telescope Science Institute’s document mentions that the script processor itself is written in C++, which is known for being... well, the type of language you’d want to use if you were programming a spacecraft.

      The author might as well have written, "I have no idea what I'm talking about and rely on pattern matching based on social cues I have observed."

    2. written in arcane code that you’d have to recompile

      What is the relationship between "arcane code" and "code that you'd have to recompile"?

    3. therefore likely less error-prone
    4. what’s the point of going with web-like scripts instead of more traditional code

      Where does it say they're "going with web-like scripts"? (And what is "more traditional code"?)

    1. Usually the philosophy is akin to turning an antique coffee-grinder into the base for a lamp: it's there, so why not find a way to put it to some use.
    1. Bob Nystrom used something like this while writing Crafting Interpreters. He wrote a post about its bespoke build system.

      https://journal.stuffwithstuff.com/2020/04/05/crafting-crafting-interpreters/

    1. This became a serious practical issue as version control was adopted as a tool for collaboration, with members of a team communicating through commit messages. Git therefore introduced the approach of “rewriting history”.

      I'm not sure that the narrative implied by these statements is accurate.

    2. this basic wisdom was lost with the adoption of computers. Computers make it very easy to modify information, to the point that version control had to be invented to prevent massive information loss by careless editing.
    3. Since facts and narratives live in different universes, we should avoid mixing them carelessly. Crossing the boundary between the two universes should always be explicit. A narrative should not include copies of pieces of facts, but references to locations in a fact universe. And facts should not refer to narratives at all.
    1. I add mass to each of these… mental clusters? planetary bodies in the Mindscape? by hyperlinking the phrase as I type.

      Nothing particular to what's described here, but this gives me an idea for a design of an efficient IME that doesn't require manually adding the brackets or even starting with an a priori intention of linking when you begin writing the to-be-linked phrase. The idea is that you start typing something, realize you want to link it, and then do so—from the keyboard, without having to go back and insert the open brackets—at least not with ordinary text editing commands. Here's how it goes:

      Suppose you begin typing "I want to go to Mars someday", but after you type "Mars", you realize you want to link "go to Mars", as this example shows. The idea is that, with your cursor positioned just after "Mars", you invoke a key sequence, use Vim-inspired keys b and w (or h and l for finer movements) to select the appropriate number of words back from your current position, and then complete the action by pressing Enter.

      This should work really well here and reasonably well in the freeform editor originally envisioned for w2g/graph.global.

    1. The linear structure of a notebook that forces the narrative to follow the order of the computation.

      I disagree that this is harmful. Striving to linearize things has payoffs. The resistance to doing so, on the other hand, is definitely what I would call harmful (to "communication", as the author put it, esp.).

      Have you ever delivered (or witnessed) a lecture in non-linear time? You can't. Because you can't help but grapple with the inherent linearity arising from the base substrate of our existence, eventually.

    1. It comes to the conclusion that the closest existing approximation to a good platform is the Java virtual machine.

      That's probably not a bad conclusion—if you insert the phrase "one of" before "the closest". (And there's no bias fueling my agreement; I don't work with the JVM).

      For my bet, the Web platform is still the better option, though, and it has to do not just with its current ubiquity, but the factors that have led to that ubiquity, including versatility and relative ease of implementation (cf Kling et al).

    2. we need to think about what the required platform is for each variety of canned computation

      Yes! This is essential. Ask, "What does this probably actually require?"

    3. The fundamental problem is that VirtualBox emulates arcane details of PC hardware in order to work with existing operating systems, and then the installed operating system recognizes that arcane hardware and installs drivers etc. that rely on it. That means we have to emulate the same arcane hardware 20 years from now just to be able to boot the old virtual system.

      in other words, it captures too many irrelevant details whose effect sums to null (and in the best case should be replaced by NOP).

    4. See also DSHR on preservation, along with Rothenberg and Lorie (independently).

    5. around in 10 years
    6. no matter how ill-adapted it is to our needs

      I dunno. I think the common argument that the Web was not intended to be an application delivery platform is both (a) ignorant of basic facts in subtle ways that are materially relevant to the particular use case described here and (b) poorly applied to this use case, given those particulars.

      I don't like most traditional Web apps or what passes for best practices in the contemporary culture. I don't write them, and I'm not defending them.

      But we're talking about scientific literature here. I'll dispute the general argument as it applies to the specific use case under discussion by pointing out that a document-centric platform is in fact exactly the correct tool for the job in this case. The only thing that could be better is if you were able to write your paper more or less as you ordinarily do for journal publication and then feed the journal article into a machine able to comprehend the methods at a deep level and then simulate what it describes. We don't have that, though. But we can to author documents that are a little more explicit instead. This is not a terrible consolation prize. So we really should start seizing the benefits of the current circumstances, lest the Web platform actually turn into something unsuited for this. (Which, perversely, is most likely to happen as a result of pursuing the vision of making it more suited for traditional software development.)

      Again—by all means, don't compile to asm.js (or WASM, or from TypeScript, etc.). Put it to use on its strengths and in the spirit of its original vision.

    7. perhaps we will end up compiling our software to asm.js and run in the browser

      Better yet, not compiling to asm.js at all. Just WYGIWYG (What You've Got Is What You Give [Me, Too]).

    8. Note however that it’s not “any of today’s virtual machine managers”

      I agree. And this very reason (along with the complexity, mentioned in the following paragraph) is what should disqualify VirtualBox.

      The virtual machine manager you should use is the one you assumed would be available when you published this post (and that you were correct about, and that I am using right now to read it): the Web browser.

    9. For the 2013 Web platform, you may hope that its sheer popularity will motivate someone to keep it alive, but I wouldn’t bet on it either. The Web platform is too complex and too ill-defined to be kept alive reliably when no one uses it in daily life any more.

      There's some sleight of hand here, which treats "when no one uses it in daily life anymore" as a given. That (folks continuing to use it) is the stability of the Web platform.

      Besides, even if we suppose that people have stopped using it (dubious), the entirety of what constitutes "the 2013 Web platform" is not necessary—only the parts that are actually used for computation and I/O. That's much smaller.

    10. if you want to use an archived copy of a 2013 Web site, you need the 2013 Web platform

      Fortunately, the 2013 platform is a subset of the later one.

    1. we can’t know what trivial change to the environment might stop the experiment working, or (worse) make it appear to work but actually have a major change in it

      "can't is too strong a word here"

    2. The more I think about it, the less I think there is a meaningful definition of the one true run time. I have put significant effort into making sure that runtimes are consistent but, however we do this, it makes our experiments less realistic. With rare exceptions (perhaps some safety critical systems) our algorithms will not be used in highly controlled situations, moderated to reduce variability between runs or to maximise speed of this particular process. Algorithms will be run as part of a larger system, in a computer sometimes with many other processes and sometimes with few and, because of the way that computing has developed, sometimes in raw silicon and sometimes in virtual machines. So the more I think about it, the more I think that what matters is the distribution of run times. For this, your experiment on your hardware is important, but so are future recomputations on a wide variety of VMs running on a variety of different hardware.

      The truth of this has consequences not just for the metaissue of recomputation, but the entire raison d'etre of doing performance studies to begin with.

    3. If I can’t run your experiment at all, then I can’t reproduce your times.
    4. We are not asking people to send us VMs, but to send us what they think we need to get the experiment to run. This is usually a few megabytes of code and maybe executables. Assuming we can run it in a standard environment, we can make our own VM without one ever being sent to us.

      X for thee, not for me

    5. Code you make available today can be built with only minor pain by many people on current computers
    6. Before running it you need two free tools, Vagrant and Virtual Box.

      This kills the crab.

    7. There has been significant pressure for scientists to make their code open, but this is not enough. Even if I hired the only postdoc who can get the code to work, she might have forgotten the exact details of how an experiment was run. Or she might not know about a critical dependency on an obsolete version of a library.
    1. Other examples of tech stacks that are very stable are C, C++, and Fortran.

      Category error; C, C++, and Fortran are programming languages, not tech stacks.

    1. the reason a lot of studies are made of these price and volume variables is that now, in the age of computers, there are almost endless data available about them. It isn’t necessarily because such studies have any utility; it’s simply that the data are there and academicians have worked hard to learn the mathematical skills needed to manipulate them. Once these skills are acquired, it seems sinful not to use them, even if the usage has no utility or negative utility.

      Applicable as criticism for: - marketing analytics for "data-driven" campaigns - the sort of resume-driven development that is fashionable on Github - naive code reuse, generally

    1. In a world where all scientifically relevant information is stored in stable and well-defined open file formats, software tools can evolve much more freely without disturbing ongoing work or harming reproducibility.

      Good formulation! All scientifically relevant information—this demands that the programs themselves be "stored in stable and well-defined open file formats". This is precisely what is missing (both the mindset and the practice).

      I suspect, though, that the author themself has missed this and is thinking of the "software environments" (that he later refers to in this conclusion) as being outside this purview. But it need not (and should not) be.

    2. David Cournape made the interesting observation that no technology less than 20 years old is better than Python in terms of stability.

      Not true. The standardized Web platform is not just more stable than Python, it's probably one of the most stable platforms in existence. It just moves (read: improves) slowly.*

      Most people don't recognize this, because they pack the stable, standardized parts all in the same mental bag as the shiny, non-standardized parts (like Flash, for an example of decades past, or experimental vendor-specific stuff for a more evergreen problem), then end up getting bit in a similar way and blaming the environment rather than communal tendencies towards recklessness.

      It also turns out that the Web's original academic underpinnings are deeply aligned with the goals of researchers looking for a way to work together—even if the final puzzle piece (ECMA-262) didn't come into existence until later in the decade when the Web first appeared. It's still old enough that it passes the litmus test proposed here.

      * for good reason; after all, look at the evidence

    3. Every beginner-level tutorial for scientists should state during the first five minutes that you cannot expect stability and that you should either use Python only for throw-away code or else
    4. My conclusion: the scientific computing community—and many Python programmers, generally—have done themselves a disservice by standardizing on Python. The problems that have been shown to arise here and in similar cases comes down to an impedance mismatch between what these programmers want Python to be and what Python actually is.

      Another insight comes from observing the way in which folks from the affected group have tended to approach the problem—wading in with a sort of undisciplined, YOLO mindset and then thrashing when they've gotten in over the heads because it turns out that a lack of discipline permeates the actions of everyone else, too—which includes, crucially, those they look for to be disciplined so that there's something that can be relied upon.

      Food for thought: although I'm not a Java programmer it's not hard to see that had they standardized instead on the JVM (doesn't necessarily have to be Java—could be a Python lookalike), then this would have almost certainly served them better here on the matter of stability and had the nice benefit of sidestepping the performance issues that Python is known for.

    5. The technical solutions proposed all depend on yet more infrastructure whose longevity is uncertain.

      The "every problem in computing can be solved with another layer of hacks" school of thought.

    1. Finally, in anticipation of an argument that I expect to see, let me stress that this is not a technical issue. Computing technology moves at a fast pace, but that doesn’t mean that lack of stability is a fatality. My last Fortran code, published in 1994, still works without changing a single line. Banks have been running Cobol code unchanged for decades. Today’s Java implementations will run the very first Java code from 1995 without changes, and even much faster thanks to JIT technology. This last example also shows that stability is not in contradiction with progress. You can have both if that’s a design goal. It’s all a matter of policy, not technology.
    2. What is not OK is what I perceive as the dominant attitude today: sell SciPy as a great easy-to-use tool for all scientists, and then, when people get bitten by breaking changes, tell them that it’s their fault for not having a solid maintenance plan for their code.
    3. coding-intensive research

      This is still not the best way to put it. Decisions come at the expense of writing code. This maintenance work is something else.

    4. the poor reproducibility of Python-based computer-aided research
    1. What I find surprising in the frequent heated debates is that the nature of the type system is rarely even discussed. People talk about static vs. dynamic types as if there were only one static and one dynamic type system.

      Good point.

      We can go further. Suppose I have a project written in TypeScript, and your affinity for TypeScript is well-known. Only—surprise!—I'm actually using TypeScript 1.x from n years ago. Are you still happy?

    2. The closest technology I am aware of in this space is F# type providers
    3. every computation on a modern computing system is actually a staged computation, with reproducibility of the last stage (the one we most care about) requires the reproducibility of all prior stages

      This is not strictly true, but it's not the worst thing in the world to pretend that it is.

    1. explicit documentation of both the execution environment used to run the software and all requirements and dependencies of systems, software, and libraries should be clearly noted in the code and/or readme file (Benureau and Rougier 2018). While time passing can make software obsolete, it also fades the memories of researchers. For that reason alone, it is important to annotate source code to explain the intended operations, which supports reproducibility for the original research team while also supporting future reusers (Benureau and Rougier 2018)
    1. An ActivePaper is, by defini-tion, a package combining the code, data, and documentationthat describe together a computational scientific study.
    2. today’s notebook implementations require note-book authors to take various precautions to ensure repro-ducibility, which are exactly the same as required for makingscripts reproducible: a detailed documentation of the soft-ware environment that was used, listing all dependencieswith detailed version information
    3. A recent study [25]of more than a million notebooks in public GitHub reposito-ries found many indicators of poor quality, some of whichsupport earlier criticisms of notebooks encouraging bad soft-ware engineering habits
    1. C, Fortran, BLAS, and Unix
    2. over the seven years of the project, I ended upspending a lot of time catching up with dependencies. Newreleases of NumPy and matplotlib made my code collapse,and the increasing complexity of Python installations addedanother dose of instability. When I got a new computer in2013 and installed the then-current versions of everything,some of my scripts no longer worked and, worse, oneof them produced different results. Since then, softwarecollapse has become an increasingly serious issue for mywork. NumPy 1.9 caused the collapse of my MolecularModelling Toolkit, and it seems hardly worth doing muchabout it because the upcoming end of support for Python 2in 2020 will be the final death blow.
    3. perhaps the mostfrequent motivation for adding dependencies in layer-3 soft-ware is the desire to write less code oneself
    4. Accept that your construction is short-lived. In caseof collapse, start from scratch

      This seems to be the position adopted by many developers. More than is reasonable. #3 and #4 probably account for most developers.

    5. a blog post
    6. There is a good chance that you have never heard ofsoftware collapse before, for the simple reason that it’s aterm I have made up myself two years ago in a blog post.
    1. What I call software collapse is what is more commonly referred to as software rot: the fact that software stops working eventually if is not actively maintained. The rot/maintenance metaphor is not appropriate in my opinion because it blames the phenomenon on the wrong part. Software does not disintegrate with time. It stops working because the foundations on which it was built start to move.
    1. The “work around” was to detect users in an IAB and display a message on first navigation attempt to prompt them to click the “open in browser” button early.

      That's a pretty deficient workaround, given the obvious downsides. A more robust workaround would be to make the cart stateless, as far as the server is concerned, for non-logged-in users; don't depend on cookies. A page request instead amounts to a request for the form that has this and this and this pre-selected ("in the cart"). Like with paper.

    1. Roughly stated, my overarching career mission is to design, build, and deploy software platforms that put end users in control of their computing and data, in part by making it easy and natural for programmers to create software that honors user desire.
    1. The idea here is to emulate the hardware platform WordPerfect ran on

      That seems like unnecessarily tight coupling. Surely there's a better level of abstraction that's higher than "emulate the hardware platform".

    1. We also see the usual conceit of totalizing systems like Microsoft Word: plain ASCII text files are accepted, as input files, but only “for compatibility reasons”. Ugh.

      Huh?