I’m very happy to see this land. For simple servers, i frequently found myself installing a single dependency - a router, and using only the standard library otherwise. It’s great to have these batteries included. Between this, generics, and the much earlier error composition package changes, almost all of my complaints about Go have been solved.
Next is sum/union types. The syntax is already in use for generic constraints!
I actually went the other way around. I used to work in a distraction free TUI editor, because I didn’t like the visual noise. I has things like autocomplete disabled for years, because I couldn’t stand the flashing of the pulldown.
But CoPilot was not available for this editor and I really wanted to try it, so I switched to one of the Jetbrains IDE offerings. and… I am hooked. I did spend some time removing fluff and unused items from the UI, but now I have CoPilot and regular autocomplete and I like it.
The key thing is, I think, that the author tried let the tool take the lead and direct them instead of the other way around. Giving it a prompt and expect it to come up with code is different than writing code and expect it to autocomplete the next few lines. If you’re tired, you tend to become lazier and depend more on the tool.
But with Copilot enabled, it was a lot easier to actually write code in the evenings even when I was tired.
This was pretty good work, and I was able to get it done even when tired!
In the physical space, if you are tired, you shouldn’t use power tools, because someone will get hurt. In the digital space, there will not be any injuries, but you can do quite some damage and wielding the tool can become very hard and tiresome, taking up more energy than you have. This will suck all joy from the activity.
That ad blocker plea seems like a great case study of how fundamentally ad supported content is at odds with ethical disclosure. The plea is fairly convincing but when I went to the uBlock panel to allow Ethical Ads I saw it is using DoubleClick.
Ethical ads are only ethical under the (misguided, imo) framing that ads are bad because of the surveillance & privacy invasion, rather than the framing that ads are bad because they are researched attempts at modifying your behavior to suit corporate ends.
If you want to make money off of me find a less scummy way than subtly massaging my personality. Exposing me to visual/linguistic malware.
Way off topic, but I think you can split ads into two categories:
Those designed to inform about a product.
Those designed to manipulate people.
The former class is essential to business and, I would argue, is ethical. A lot of early Google ads were like this, they told you about a thing that’s relevant to the thing you’re reading about. A lot of magazine articles in technical magazines are like this too: they include technical specifications and other information that you need to make an informed decision. I used to buy a magazine called Computer Shopper that was well over 50% ads, and I bought it in a large part because of the ads: they gave me a great overview of what was available and at what prices from a load of different manufacturers. A lot of trade magazines are like this.
I would love to see something that properly incentivises this kind of advert. I strongly suspect that, for companies that have a decent product, it actually works better because it gets their product to the people who others are most likely to ask for recommendations.
Offtopic: I’d argue that any ad is in the second category: manipulation. The sole purpose of an ad is to hijaak your attention to imprint some information on you. Making me aware without asking that a certain tv exist that costs X and has feature Y is manipulating me to take it in consideration for buying.
A business that only wants to publish information about the tv could just create a product page or website.
Ontopic: this was my favorite talk of the conference! Both technical and entertaining.
Precisely! I don’t mind publishers getting a bunch of semi-anonymous details about me. I mind every search and every website I make in the future becoming less helpful, less interesting, and less varied by everyone involved thinking they know which of my interests I might be willing to spend money on at any particular time.
I think the DoubleClick ads are the YouTube iframe. I can’t really do anything about that unless I repost the video on my CDN, which I don’t have the energy to do today. Maybe tomorrow.
Then obviously you shouldn’t tell people to turn off their ad blockers, as most ad blockers will allow those DoubleClick scripts when disabled for your site.
One reason I’m excited about the digital-€ project is that they are aiming for very low, even free, transaction costs, which would be key for micropayments. So I could actually pay something for articles I’d like to read. And hopefully people wouldn’t pay for the content that is now pushed just for getting you to view ads. There’s also https://webmonetization.org/
I think there are some big psychological problems with micropayments. People aren’t good at estimating tiny numbers multiplied by other numbers that they’re also bad at estimating. How many web pages do you visit per month? How much will you pay if you are paying each one 0.1¢ per view? What about 1¢ or 0.01¢? I honestly couldn’t tell you how much I’d be paying per month for these.
A big part of the success of things like Spotify and Netflix is that they are able to offer a flat rate that lets you avoid thinking about this. If you could pay $10/month to support content creators and have a privacy-preserving system that would reward the ones that you valued, I think a lot of people would sign up. I actually designed such a system and pitched it to the chief economist at MS a few years back. Sadly, the feedback was that, if we tried to deploy such a system, Google would be in a position to scale it up faster (and it’s the kind of thing where second place is largely worthless), so it didn’t make commercial sense to do so.
I don’t know if the problem is actually the nature of micropayments. Tens of millions of people already use the micropayment systems in video games where the currencies cost real money - because they develop loose heuristics for how much virtual items are worth. Sure, they usually buy far fewer items than one might imagine for a internet-scale content micropayment system - but I don’t see any reason that that intuition that is proven to work currently wouldn’t scale to larger volumes, especially because many tens of thousands play games such as EVE Online where transaction volumes do approach (or exceed) that of the real world.
At the very least, having a subscription-style system like the one that you describe would provide the infrastructure to test such a microtransaction system.
Tens of millions of people already use the micropayment systems in video games where the currencies cost real money
Do you have a citation for that? Last time I looked at the economics of these systems, the overwhelming majority of spending came from a tiny fraction of players, which the industry referred to as ‘whales’. The games are specifically designed to trigger an addition response in vulnerable people and make Google Ads look ethical in comparison.
This study[1] had 688 of 1000 (69%) respondents self-report that they spent money on Fortnite. In 2020, Fortnite had ~80 million monthly active users (discarding the 320 million users that aren’t currently active). We’re not going to get data from the company itself, but it’s highly plausible that tens of millions of people engage in Fortnite’s microtransaction system alone, ignoring smaller systems like EVE Online and Diablo 4 and Genshin Impact (and all the other gatcha games).
Last time I looked at the economics of these systems, the overwhelming majority of spending came from a tiny fraction of players
While we don’t have the statistical distribution of spending patterns, the fact that millions (minimum) of people use these systems mean that even if the industry of free-to-play games is mostly exploitative (which I agree, it is), millions of people have at least some experience with these systems, and it’s highly probable that there’s a significant intersection between active users and paid users (that is, that many users are familiar with the system, as opposed to only having touched it once and never again).
From first principles - humans don’t have a natural intuition for “real” money and “normal” purchase patterns, either - it has to be learned. I don’t see any plausible reason to believe that it’s substantially more difficult for humans to learn to use a microtransaction system than the “normal” ones that we have now.
As to your earlier point:
People aren’t good at estimating tiny numbers multiplied by other numbers that they’re also bad at estimating.
…people will develop that ability to estimate and/or budget if they actually have to use such a system. You could make a similar claim about our current financial system - “People are bad at estimating how much it costs to buy a $6 Starbucks every workday for a month” - and while initially that’s true, over time some people do learn to get good at estimating that, while other people will actually sit down and work out how much that costs - it’s the same mechanic for microtransactions.
How many web pages do you visit per month? How much will you pay if you are paying each one 0.1¢ per view?
I opened Firefox’s history, selected the month of July, and saw that I visited 4000 pages. At 0.1c per view, that’s $4 - not a problem. At 1c per view, that’s $40 - a reasonable entertainment budget that is comparable in size to going out for dinner with my wife once.
Yes, it took me one full minute to do that math, and that’s not instantaneous, but not everything in our lives has to be instantaneous or built-in intuition. (plus, now that I’ve computed that result, I can cache it mentally for the foreseeable future) I really think that you’re significantly overestimating the amount of work it takes to do these kinds of order-of-magnitude calculations, and under-estimating how adaptable humans are.
As for the necessity of said adaptation - I’d much rather have a microtransaction system than either a subscription one (not ideal for creators) or an ad-based one (with all of the problems that it entails) - making the purchase decisions even acts as a built-in rate limiter to gently pressure me to spend less time on entertainment, and less time distractedly skimming pages, and more time carefully and thoughtfully reading longer and more useful articles. I think that such a system would have extremely useful second-order effects for our society at large, precisely because of the need to slow down to assess whether a piece of information or entertainment is worth your money (even though your time is usually much more valuable).
A true micropayment system would allow me to fund one “wallet” and buy stuff from MSFT, Nintendo, Ubisoft etc. Right now you need a separate account of each of them. That’s more a factor that their target audience usually doesn’t have access to credit cards than a sign of the success of micropayments.
I don’t understand the argument you’re making here.
I’m not claiming that the micropayment systems in video games are “real” or “general internet-scale” micropayment systems - obviously, they’re not - and I’m not claiming that micropayments are “successful”, because these video game systems are very different than the kind being discussed here.
Instead, I’m pointing out that the existence of these systems is proof that humans can use virtual/abstracted currencies to purchase intangible goods, which is basically what you need, cognitively, for a micropayment system to succeed, and I’m also trying to refute David’s claim that “People aren’t good at estimating tiny numbers multiplied by other numbers that they’re also bad at estimating.”
We should separate micropayments the technology from micropayments the interface. If we had the technology, there’s no reason you couldn’t have a client program divide a certain amount of donations per month between sites you use based on an algorithm of your choosing. Of course this arrangement is harder to profit off of because there is less room for shenanigans, but that also makes it better for everyone else.
Here’s a story from 13 years ago about Flattr and how it was trying to tackle micropayments. It had essentially that model - you prepaid and it divided the donations.
I use t.Parallel() right up to the point where the mentioned trouble with databases and transactions begins. In my opinion, it is often just not worth the complexity to force this into parallel execution too. Debugging those can be pretty gnarly and eat up all the time that you saved.
The higher level tests, that involve a database, can often make do with a longer use case where the database is not reset between tests (like: start empty, user registers, user does x, user undoes x, user deletes account) and leave the details and the edge cases to the unit tests that don’t need a real database.
Yep! And those higher level tests aren’t really unit tests, they’re integration tests, which shouldn’t be executed from a go test call by itself – they should always be explicitly opt-in.
I generally agree, though I’d make an exception if your db is SQLite. It’s in-process, fast, and reliable, and you can easily switch it to in-memory mode for tests, to avoid even touching the disk. The distinction between “unit” and “integration” test is sometimes fuzzy…
Somewhat relatedly, I’m also fine with “unit” tests hitting the real filesystem. It’s fast and reliable, and (as long as you can pass in a temporary directory location, e.g., T.TempDir) avoids more complex filesystem interfaces and suchlike. Then again, in Go that got a fair bit better with fs.
Fair! Unit tests can definitely use the filesystem and SQLite, as long as the files and DBs are isolated to the specific test being executed – which t.TempDir definitely satisfies.
The main feature for me on the hardware/software side is a smooth sync experience. I am always near a device, but the one I use for capture is rarely the one where I need the content. Beyond that I don’t require much and value simplicity. For now I have settled on Joplin and while there tons of ways to sync with that I paid for their cloud service because it is easy, it helps me sponsor the project and they have e2e encryption, so I don’t mind putting my personal info in.
Much more important, however, is the process and the discipline to follow it. You can dump a lot, but then you have lots of random snippets lying around scattered and what are you going to do with that? There are good approaches to transform that rambling into a useful set of notes. For instance the approach Sönke Ahrens describes in How to Take Smart Notes
But, I always struggle with the balance of how much effort I should put in and what benefit it brings. On one hand having easy accessible and good notes saves me a lot of time. On the other hand it takes a lot of time to make it work. Does it save more time in the end? I am still not sure. So sometimes I just quit and then a month later I really want some info that I know I recorded, but threw away when I quit and on the spot I start all over again.
Somewhere in the future I see a personal LLM help me with the tedious part of this process somehow, but we’re not there yet. i think it is smart to embrace the chaos a bit and just accept that it is never going to be “perfect”.
As an aside, I have an Onyx Boox Note Air 2 e-reader/Android tablet and the handwriting recognition is amazing. I have horrible handwriting too, but to my surprise it works almost flawless. The major downside is that only works that well if you use the official apps, which are tied to their own sync service. Also it is just a fraction too slow to be really comfortable, but otherwise, I am really impressed.
I think a good test of whether you truly love simplicity is whether you are able to remove things you have added, especially code you’ve written, even when it is still providing value, because you realise it is not providing enough value.
I agree with this idea. Far too often you have one or two features that are barely used, but add the bulk of complexity to the product.
Engineers are discouraged from removing it because someone is actually paying for the product on the basis of that one functionality.
Product is discouraged from improving it because far too few people care about it. The functionality parks in this limbo, not popular enough to improve, not useless enough to remove. (Some functionalities are mandatory for a given business domain, but far fewer than we think).
We really should have a better handle for “total cost of ownership” of a piece of code tied to a value proposition. If something does not pay for itself in terms of maintenance and opportunity cost (did we take too long to ship feature B because feature A was bogging us down?) then we should be more flexible to remove it. Simplicity is a bonus, but cost reduction is really the goal.
Maybe I’m an outlier, but I love deleting my own code. My favourite PRs are when someone comes along and says ‘this complex thing you have can be replaced with this simple thing and provides the same guarantees’. I’m careful to check that the simple version is not too simple (i.e. it does solve the problem, which may be the useful subset of the problem that my code solved) but that’s then going to be the code I’m talking about at the next tea time.
I think there’s a spectrum. Features that no one uses are easy to justify removing. Features that everyone uses should not be removed (probably, there are a few exceptions, especially with respect to security). The enough value in the original quote suggests that it’s somewhere on the spectrum between these and those bits are always interesting. If there’s something that might be useful but comes with a cost and something simpler will solve the most important bit of the problem, I’d generally lean towards making that change. Especially if the simpler thing gives you enough building blocks that someone who really wants the more expensive version can add it externally.
You’re not an outlier. Between about 3 of us at work, we’ve deleted close to 100k loc at work, just in our front end alone, over the past year. Why? Because it was providing 0 value, and our tooling told us that this code was dead. We’ve even gone and removed routes that users weren’t using, and all of the associated dead code.
There’s even a casual competition between the 3 of us of who’s deleted the most, and during engineering demos if I speak at all someone will joke “How many loc did you delete this time?”
I’ve had a similar experience at my work. But I think you’ve identified a third “layer” that isn’t quite what the article is talking about: at the top, you have code that everyone agrees is worth being there. Then you have some code that perhaps isn’t pulling its weight; this is what the article is discussing. Below that, though, you have code that isn’t there intentionally at all—it’s there because someone forgot to clean it up after a refactoring pass, or because someone used create-react-app and didn’t get rid of the parts they didn’t need.
I agree. Sometimes even the people who sell the product know that the customer will never actually use that feature, but they claim that it helps making the sale. The only reason that complexity is there and “cannot be removed” is because it looks good on the website in the list of features.
Even programmers aren’t immune to that. As an example, many people flock to Clojure for its fancy STM (software transactional memory). In practice, nobody uses it, but people stay for all the other more boring things like simpler tooling than Java, good libraries etc.
However, there is a reason why I didn’t choose world.hey.com for my blog: I don’t want to be locked in on this platform, and code highlighting needs to be supported.
I assume the code highlighting is better now, but if I understand correctly, you are now locked in to Github just as much as you would have been locked into hey.com?
I would say (in my opinion) the lock in is a little more in Hey, where you’re not even posting on your own domain, it’s Hey’s URLS people see, whereas the author here can move from GitHub Pages to something else and people shouldn’t even notice
I am indeed locked in with GitHub for the syntax highlighting but I can easily switch to any static pages hosting service e.g. Cloudflare. Maybe even GitLab is able to generate the same tokens with classes and stuff as GitHub does, as they both support markdowns and have a nice REST API.
It depends on which static site generator you use, ie if you use Hugo or Jekyll you can move to any platform that allows you to upload the generated HTML
I would hope that we all recognize that OpenAI could pull ChatGPT from the market, and also that it is within the ambit of consumer-protection agencies to force OpenAI to do so. We could, at any time, stop the lies.
I suppose that this makes it a sort of trolley problem. We could stop at any time, but OpenAI and Microsoft will no longer profit.
It’s too late for that now. I have half a dozen LLMs downloaded onto my own laptop - and they’re significantly worse than ChatGPT when it comes to producing lies.
Ah, you were thinking along different lines with that statement. No worries.
I read you as saying that ChatGPT, as a product, is misleadingly advertised to consumers as an algorithm which is too smart to lie. This is a misleading statement on the part of OpenAI, and could be construed as false advertising.
The problem, to me, is not that LLMs confabulate, but that OpenAI is selling access to LLMs without warning their customers about confabulation.
ChatGPT is pretty darn factual. I’m curious what you’re comparing it to… If we are going to start purging things that lie to us there are other places we should start.
If you’re going to use a whataboutist argument, you need to actually say “but what about this other thing?” Don’t rely on me to fill out your strawman.
It’s not a fallacious argument, I’m not constructing a strawman or asking you to figure it out as some kind of sinister rhetorical technique meant to deceive you (and if it was, wouldn’t it prove my point?)
I just wanted to keep things short… But I’m happy to engage.
Here are a few things which famously lie or tell untruths:
advertisers
politicians
scientists (claims of perpetual motion for example)
schoolteachers
books
news reports
illusions (lie to the eyes, or your eyes lie to you)
statistics
It’s not a whataboutism argument I’m trying to make (whatever that is, pointing at the big book of fallacies is the biggest fallacy of them all if you ask me).
Failing to be factual is not something we should condemn a new tool for, it’s a fundamental part of human existence. It’s claims to the contrary (absolute certainty) which have to be met with skepticism.
An LLM isn’t a human, so we shouldn’t afford it the credence we usually sign-off on as human nature. ChatGPT is not factual, ChatGPT generates statements that generally appear to be factual to the extent one doesn’t feel the need to fact-check or confirm it’s statements (at least initially). Comparing a machine that generates lies by it’s very nature (without malice or want) to human action is a category error. ChatGPT is a computer that lies to us and “humans lie more!” doesn’t affect that observation’s being better or worse (though software that mimics the worst parts of human nature is arguably worse than software which doesn’t). With respect to the above category error, it seems like whataboutism.
(Hopefully we understand “lie” in the same way with respect to computers as opposed to people, that is, people lie knowingly (else they are simply wrong), whereas computers don’t know anything, so the consensus seems to be an LLM is “lying” when it’s confidently producing false statements. Do correct me if I’m mistaken on that)
I would include lying in the sense of being factually incorrect in addition to lying in the sense of telling an intentional untruth.
For what it’s worth, I also believe that GPT has as much or more intentionality behind it’s statements as you or I… Unfortunately, that is a matter for metaphysics or theology, but I wouldn’t mind hearing anyone’s arguments around that and I have the time.
I also support the premise of the original article! We should tell people that GPT is capable of lying.
Use it to discover obscure command line options and use cases of tools I use. It’s often wrong, but the right answer is usually a Google search away.
When I narrow down a bug to a file, I just copy paste the code and describe the bug, it occasionally pinpoints exactly where it is and suggests a bad fix.
I feed it a JSON value and ask it to write its schema or maybe the NixOS options definition for a configuration structure like it. Unlike a mechanical translation, it uses common sense to deduce which fields have given names and which fields are named in a key:value fashion.
Billion other little use cases like that…
I usually have it open in 5 tabs while I’m working.
How does this not drive you insane? Having to question the validity of everything it gives you at every turn sounds exhausting to me. I already find it immensely frustrating when official documentation contains factually incorrect information. I have no time and energy to deal with bugs that could’ve been prevented and going down rabbitholes that lead to nowhere.
I use mostly perplexity and secondarily bing. It’s good for things where there’s a lot of largely accurate documentation, to generate code examples. It’s effectively a way to have a computer skim the docs for you when you’re trying to figure out how to do a task. You can then integrate snippets into what you’re doing, test them, and consult the cited docs.
Telling it to rewrite something is often tedious, but can be advantageous when e.g. rushing to get something done.
Tbh I anticipate that LLM based tools will continue to evolve for code-related tasks as basically better refactoring and automated review engines, and as generators of low stakes text that people then review. They’re not AI but they do provide a new tool for manipulating text, and like all tools are great when used right, but if they’re your only tool you’ll have a bad time.
In all fairness, I do get more tired per unit time when I deal with ChatGPT. In the past, coding would tire out one part of my brain, but that wouldn’t affect the social side too much. But coding + ChatGPT tires out both parts. That said, if I reflect on how my brain processes the information it gives me, I don’t treat it as a logical statement that needs to be validated, I treat it as a hunch that’s quite likely to be wrong. Whenever I need to pause to think, I jot down my thoughts into the ChatGPT prompt, which, at worst, serves as a note taking medium. Then I press enter and move onto doing something else and check back and skim once it’s finished to see if there’s anything potentially useful. When I spot a potentially useful sentence, I copy-paste it to the prompt, and ask “are you sure?”. It sometimes says, “sorry for the confusion…” so I don’t have to do anything else, sometimes it’ll justify it in a reasonable manner, then I’ll google the statement and its justification and see if it holds water.
The bottom line is, I think it takes a little bit of practice to make efficient use of it. You need to learn the subtle hints about when it’s more likely to be lying and the kinds of questions that it’s likely to answer well. As you said, it IS tiring to deal with, but with practice you also grow the muscles to deal with it so it gets less tiring.
The bottom line is, I think it takes a little bit of practice to make efficient use of it. You need to learn the subtle hints about when it’s more likely to be lying and the kinds of questions that it’s likely to answer well.
So it’s like pair-programming with a very confident and possibly sociopathic junior developer?
AKA the “Net of a million lies”. LLMs are backstopped by a vast mass text that is broadly “true”, or at least internally logical. The poisoning of this well is inevitable as long as text is considered to be semantic content, devoid of any relationship to real facts. And as the entire commercial mainspring of the current internet is to serve ads against content, there will be a race to the bottom to produce content at less and less cost.
Yes, that is true. “Standalone” LLM’s will most likely decline in quality over time.
There probably is more future for ChatGTP’s that are bundled with, or pointed to, specific source material. Something like that you buy all volumes of Knuth’s The Art of Computer Programming and that you get a digital assistant for free that can help you navigate the massive text.
We’re going to see an example of Gresham’s Law, where bad (LLM-generated content) drives out good (human-generated). In the end, the good stuff will be hid behind paywalls and strict rules will be in place to attempt to keep it from being harvested by LLMs (or rather, the operators of “legit” LLMs will abide by their requests), and the free stuff will be a sewer of text-like extruded product.
Here’s hoping we don’t grow irrelevant before we retire 🍻, but I honestly don’t see ChatGPT as a threat to programmers at all. Quite the contrary, it will bring computing to ever more places and deliver more value, so whatever it is that you’re currently programming for a living, society will need much more of it not less.
You’d literally rather have a computer lie to you than read a man page or some other documentation?
I’d have thought the task of extracting schematic information from a structure was well within the realms of a regular tool, that the author could imbue with actual common sense through rules based on the content, rather than relying on a tool that (a) has no concept of common sense, only guessing which word sounds best next; and (b) habitually lies/hallucinates with confidence.
I don’t want to tell you how to do your job but I really have to wonder about the mindset of tech people who so willing use such an objectively bad tool for the task just because it’s the new shiny.
You’re really doing yourself a disservice by depriving yourself of a useful tool based on knee-jerk emotional reactions. Why would you interpret that as the computer lying to you? It’s just a neural network, and it’s trying to help you based on the imperfect information it was able to retain during its training. Exactly as a human would be doing when they say “I’m not sure, but I think I remember seeing a –dont-fromboblugate-the-already-brobulgaded-fooglobs argument in a forum somewhere”. When you google that argument, it turns out it was –no-… instead of –dont-…, and the official documentation doesn’t mention that obscure argument and the only Google hit is a 12 year old email that would take you weeks of reading random stuff to stumble upon.
I don’t know about you, but my own brain hallucinates about imaginary options and tells me about them confidently all the time, so I’m quite experienced in processing that sort of information. If it helps, you could try mentally prepending every ChatGPT response with “I have no idea what I’m talking about, but …”
BTW, I’m actually glad for the way the current generation of AI is woefully unaware of the correctness of its thoughts. This way it’s still a very useful assistant to a human expert, but it’s hopeless at doing anything autonomously. It’s an intellectual bulldozer.
Sometimes it’s far easier to say “how should i do this thing? explain why, and give me an example in x” than to trawl documentation that isn’t indexable using only words I already know
Consumer protection is not a matter of costs vs benefits. If a product is unsafe or hazardous to consumers, then it ought to be regulated, even if consumers find it useful.
The title gets me curious. Is there a non-video resource to learn about that?
(Is it something where most users are also blockchain enthusiasts? The last time I followed a reference on a cool federated protocol, it turned out to be a cesspool of cryptocoin madness.)
I watched about half the video. I’ll eat my hat if fewer than half of this protocol’s developers and promoters are not also blockchain enthusiasts. There’s too much overlap.
This seems to be the main application of the protocol right now:
While there doesn’t seem to be an immediately visible “cesspool of cryptocoin madness” around that application or the protocol, one of the things they claim makes the application unique is that you can
Use any currency you’d like — cryptocurrency, fiat, it doesn’t matter.
The overlap between (people who divide “any currency” into cryptocurrency and “fiat”) and (blockchain enthusiasts) is vanishingly close to 100%, I expect.
That said, as someone whose enthusiasm for cryptocurrency can be described as somewhere between “skepticism” and “out-and-out hostility” (I’m still mad at them for rendering “crypto” unusable as mainstream shorthand for cryptography!), I found the presentation interesting and will likely watch the rest of it later on this evening.
No mention of prevention/mitigation of spam and abuse,
Contract chains can only be written to by authorized parties, so if you authorize a bunch of people you don’t know to write to a chain, you might end up with spammers (“you” here refers to a user of an app). Then it’s up to traditional moderation approaches to remove the offenders.
According to Kagi’s universal summarizer, these are the key moments in the video:
Shelter Protocol is a protocol for creating end-to-end encrypted, federated, and user-friendly web applications.
It aims to address issues like data breaches, privacy violations, and central points of failure that plague current web apps.
At its core, Shelter Protocol uses a list of events that describe updates to a shared state. These events are content addressed and stored in a key-value database.
It uses smart contracts called “contract chains” to interpret and apply the events. The contracts are also content addressed and versioned.
Shelter Protocol has 14 main opcodes that give it the properties of a lightweight, end-to-end encrypted, federated virtual machine.
It uses content addressing and signatures to ensure data integrity.
A zero-knowledge password protocol allows it to reproduce the standard username and password experience.
Federation is supported similarly to Git, allowing events to be pushed and pulled from different servers.
From a user experience perspective, apps built on Shelter Protocol function almost identically whether encrypted or unencrypted.
The main difference is that with encryption, all contract processing and data storage happens locally on the client device.
I think I largely agree with this (and although the “10x” thing isn’t actually the core of the argument, I think that the author is one of the few people, at least among the blog-inclined, who really gets the situation). It leaves me with mixed feelings, though. On the one hand, it makes me pretty sure that I’ll always be able to find work — that no matter how many new programmers they turn out, there will probably be a demand for people with my kind of experience for as long as I live. On the other hand, it makes me feel destined to be a grumpy old man. And I mean, I was already a grumpy old man when I was 30, but if I make it to 60 I fully expect to have turned into jwz.
Same here. Although we should note that jwz actually quit the business long ago at the first opportunity he got, which is probably a wise move. Somehow “programming for work” burns me out whereas “programming as a hobby” energizes me. Turning your hobby into your job is not a good idea and not sustainable, either for the work or for the hobby.
For that matter, building businesses around people like this isn’t sustainable, either. It seems to me that such a business has to rely on being able to attract more young starry eyed developers straight out of school who are full of energy, as the old guard burns out. But that tends to lead to thoroughly unprofessional code, where every new thing is tried out and where the same mistakes are made over and over again.
Come to think of it, that describes our industry quite wel…
I’m also quite picky but somehow after the newness wears off (after two or three years), I feel like I get stuck in a rut. Sometimes starting on a new project can help, but it’s so often the same. Business software just isn’t all that interesting.
I have the same. Two years is the maximum at a company before I become so bored that I dread logging in in the morning. For me it is essential that there is a need to figure out how the “system” works and what you can add to improve things. And with “system” I mean both to the code base and to the company outside the code base.
But after a year or two, you know how things work and the ideas you brought that were acceptable by the company have been implemented and now you have reached a stable compromise that just repeats over and over again with every sprint or feature. Then the boredom sets in.
My solution to this problem: become a contractor. Because then it is only natural to say goodbye after a while and have a fresh start somewhere else. At least, I hope this is a solution. Currently still on my first gig.
In my experience it’s because “programming for work” involves very little programming. It’s usually
a) A bunch of meetings to discuss what to program
b) Plugging in some little uninteresting, uncreative piece of code that follows some already defined interface into some company ‘framework’ that you have no insight into
c) Waiting on code reviews and slow deployments
There’s very little term for creativity, especially if your organization is risk averse. If you’re coming into the company late a lot of the “interesting” work has been done and now it’s your job to plug into it and try not to let the debt overwhelm you.
I’m using ChatGPT daily for all sorts of tasks and have noticed absolutely zero degradation.
And like,
Another one: in March, GPT-4 was able to answer this question, and GPT3 got confused. Now, both fail : “How can you time 9 minutes using a 4-minute hourglass and a 7-minute hourglass?”
idk I think this question is completely idiotic and a horrible benchmark? And also isn’t ChatGPT known to perform better on English language, and this user is not speaking English?
I’m not saying that the model is the same or better, but I have noticed no degradation and I just really question the methodology of benchmarking it, instead I think it’s equally likely that users are just adapting over time - noticing errors, not being as amazing, asking it to do more and more.
I gave it a shot. It’s very easy to set up and the archive it generates is usable. The presentation could be improved, probably pretty easily, but it works just as is.
I have not gotten my archive yet. If the data in the archive is good, then I would probably write a Python script to convert it into a static html feed.
Then a second solution is needed to handle future tweets. Maybe just switching from “tweeting” to “posting to multiple places”. To the static feed and to Twitter.
I don’t do this myself, but the term for this is POSSE: Publish (on your) Own Site, Syndicate Elsewhere. Since there is an acronym for it, there probably also is software that can help you do it. See this page for an introduction.
I’d draw a distinction between “query builders” and “ORMs” and I think the former are extremely useful, while the latter are a massive footgun at best.
“Query builders” are libraries that let you write queries and possibly define schema using constructs that are more native to your language than just calling db.Query("SELECT * FROM ..."). These are great in that they make building queries modular and composable, and depending on the details may also add type safety or other checks that catch bugs sooner. Textual query languages are for humans, and are clunky at best when used programmatically.
“ORMs” try to make the database look like persistent storage for objects. My experience is that this abstraction tends to leak like a sieve, but more importantly, it’s just a fundamentally wrongheaded idea. Relational principles are just better for organizing data than the way OO systems tend to do things, and you should just do things the relational way.
I’ll agree with the author insofar as if you know what you’re doing it’s fruitful to use most ORM libraries as if they were mere query builders, and I would recommend this approach. But from what I’ve seen most ORMs don’t push you in this direction: they’re adding an extra layer of machinery that you should pointedly not use.
Object mappers are also fine. I think the problem with ORMs is they combine query builders with object mappers on the idea that once you combine them, you don’t need to know SQL. Which sounds great! Except it doesn’t work and you absolutely still need to know SQL, so why are we using these huge pieces of magical machinery? Just use the two pieces separately and when you run into a query that is difficult to build or an object that is hard to map, you can just do it by hand, NBD.
I’d lump Elixir’s Ecto into this category, but it’s a little odd because it also has the query builder included in the library, just like the complained-about mainstream ORMs. I think the difference is that in use, they’re not automatically integrated. You can use the query builder part without the object-mapping part, to just get lists of dictionaries out of the database, and you can use the object-mapping without the query builder, to apply the same change rules to in-memory structs as you would if they were going to be serialized.
Contrast this with Ruby’s ActiveRecord, where the two are tightly integrated, which perhaps leads to less code overall, but also has all sorts of performance footguns and whatnot.
Except OO systems are intrinsically relational. Optimality in design is a product of analytical intent (use case).
An object relational mapping abstraction can provide useful relationships based on derivatives that SQL can’t.
Though I’ll agree many ORMs are not that. They are usually not based on a single use case, or group of use cases, with a common analytical intent. I think the idea is a step forward, but current implementations might not be.
Using SQL directly and inserting variables by concatinating strings is a no go due to SQL injections. In my mind, using a query builder or ORM is as vital to security as is using a memory safe language. The thing I see being added with an ORM though is automatic data migrations. Can these be handled by a query builder?
I mean its obvious to me that Django’s lazy ORM has too many performance footguns, but giving up migrations is a step too far. Unless there is some king of schema as code implementation where the schema can be applied to the DB as seamlessly as a nix file with no explicit migrations at all???
You can’t parameterize conditional WHERE clauses, conditionally added JOINs and the like. When building conditional queries, an ORM / query builder can do wonders by abstracting SQL’s noncomposable syntax into something more malleable. Having said that, I’m not a big fan of ORMs or query builders because they often get in the way of the SQL you really want to write.
With parameterized queries, you can do normal string concatenation of SQL fragments, and then use the parameterization mechanism to query against the user-supplied inputs.
I’m not necessarily arguing that’s better, but you don’t lose the security protection just by conditionally concatenating static, non-user-supplied SQL fragments.
Of course. But sometimes the user wants to filter or order by a specific field. Now of course, you’d best constraint the fields that are available to filter on with a whitelist (otherwise you might have an information leak, or allow the user to make a very slow query), but that’s not always what happens. And escaping of field names is also tricky business, sometimes the database adapter doesn’t even provide procedures for it!
IMO the underlying issue with ORMs is related to a misunderstanding of the interface between the application and the database. ORMs model that interface as a typed API which yields a SQL query string, and returns data as a sequence of values. But that’s backwards! The interface is actually the SQL query string itself, and it returns data as a sequence of rows.
I’m sorry… This is gonna sound like I am teasing you or that I’m mocking you, but actually I’m really being frank, and I’m gonna give you my advice. It’s just not gonna be great.
Or you could say “check out the previous commit and force push it”, answering their question. I don’t like this blog post. It seems to be suggesting all our tooling should be geared towards what “humans think about” instead of what engineers need to do. Humans think “I want to build a table”, not “I have to use tools to transform wood into components that assemble into a table”, but they have to do the latter to achieve the end goal. It’s IKEA vs real work.
The tools we build need to be geared towards what the users think about.
Engineers should be familiar with the mindsets their tools force upon them. That’s the true meaning perhaps of Englebart’s violin: we adapt to our tools instead of the other way around.
Why not simply use the command that was designed for this? Do a git revert, and then a git push. Works for the whole team.
This is a nice example of the issue outlined in the post. Only there really is no way you can dumb down git so far that you can simply forget the distributed nature of it. The only wisdom needed here is that you always need to add stuff to the chain, never remove. This principle, and the consequences of not not following it, should really be part of your knowledge if you want to be a a software developer.
I think this depends on how you read the scenario in the article - I read it as “I just pushed something that shouldn’t exist in the git history”, like I’ve been in situations where someone’s pushed a hard to rotate credential, and so you rewrite history to get rid of it to reduce damage while you work to rotate
They can still use it to create a new commit if they find a need for the content. It is really only a problem if they want to communicate about it to someone who has not pulled it. IME that is extremely rare because the way to communicate about a commit is to communicate the actual commit.
It feels a bit like when the author is mentoring less experienced devs, he assumes they can’t grasp the more complex aspects of the tool because it doesn’t fully click the first time.
Over the past three decades as I’ve learned from all sorts of folks, and done my best to pass on my knowledge on all sorts of things from operating systems to networks and all sort of software development tools, I’ve often had to ask for help on the same things multiple times, esp if I don’t use a particular mechanism often.
For the past few years, I’ve worked as a build engineer and part of my team’s job has been to help come up with a workflow for a large team of engineers that makes sense. Sometimes we intervene when there are issues with complex merges, or a combination of changes that work on their own, but not together.
Most people also can sort things out on their own given some time. You don’t have to back out a change and do a force push - I would, because it makes the history cleaner, but there’s absolutely nothing wrong with a revert commit, which is extremely straightforward to create.
I remain utterly baffled by people’s capacity for self-deception when it comes to LLMs.
You can literally go and chat to one right now and get it to, often within minutes, spit out nonsense. Often well-written but subtle nonsense, but nonsense nonetheless.
Which makes sense, given the algorithm explicitly tries to generate text which probabilistically sounds like a correct answer.
This odd assumption that somehow, via magic, this technology will do all of the things it fails to do now (despite its underlying algorithm being literally incapable of doing so) seems to be what’s driving this.
The excitement is based on the self-perpetuating idea of what it could be + a snazzy demo. And isn’t that a description of every bit of vapourware out there?
I don’t mean to be disrespectful, but I do find this LLM craze a good litmus test of AI ‘experts’. Those who back the knowingly false nonsense spoken about LLMs expose themselves as either liars, incompetent, or in the most charitable interpretation, wishful thinkers.
Unfortunately I think ML as a field has a lot of bullshit and people twiddling knobs with no understanding of what underlies what they do, despite calling themselves ‘data scientists’. It’s been a huge turn off for me from when ‘big data’ proponents first claimed ridiculous things that don’t seem to have panned out. Plus ca change.
This is not to say that it isn’t useful for anything, it’ll be very useful for spam, fraud, copyright theft (which is a lot of what it actually does anyway), and in the nicer realms perhaps automation of the most rote, pattern-based non-novel activities out there.
For things which have precise requirements and are trivially novel, it is worse than useless, it is actively harmful.
Obviously you can come up with 100 examples of ‘this time it feels different’ things that were meant to change the world but people forget so quickly… equally so with this when chat gpt + friends fail to fulfill the nonsense claimed for them (but do succeed at those things they are good at). People will just act as if they only meant the latter all along…
Have you compared levels of nonsense between generations of GPT? GPT-2 would fall for all silly questions like “who’s the king of the USA?”, but GPT-3 catches many of them. GPT-3 will happily hallucinate and give vague answers about anything you ask it, but GPT-4 less so. It’s not perfect, but it is going in the right direction, and there is real tangible progress. What makes you believe that it won’t improve further?
I’m expecting some performance plateaus to show up sooner or later as a result of it getting progressively harder to source training data that didn’t itself come out of an earlier version of ChatGPT.
A lot of complex tasks reach plateaus where techniques that work moderately well simply don’t improve. For example:
If you want to predict the weather in a temperate climate, you can get around 60% accuracy by predicting the same as yesterday. You can also get similar accuracy by predicting the same as this day last year. You can then build statistical models on top that try to exclude outliers. No matter how complex these models are, you don’t get to 70% accuracy. To get to 80-90% accuracy, you need to do fluid dynamics modelling of the atmosphere.
If you want to translate natural language and you have a dictionary of words, you can do a reasonable job (at least within a language family) translating them independently. You get a big improvement moving to translating bigrams (pairs of words) and trigrams. Above that, you get little improvement.
Dall-E and Stable Diffusion both also got a lot of hype, but they still get fingers wrong. Worse, at least Stable Diffusion is massively racist. Yesterday, my partner used it to generate an image to accompany a blog post. The prompt asked for a student sitting an exam with a robot looking over their shoulder. The first picture was okay (except or some weirdness around the eyes) but about two thirds of them had an Indian person instead of a robot, no matter how we tweaked the prompts. Now, hopefully, that’s because there are a lot of Indian students photographed at robotics competitions and it doesn’t know which of the features in the image is the student and which the robot, but it could equally be racism in the training data. Either problem can be solved only with better-labelled data and that’s expensive.
I can’t think of a single probabilistic process that doesn’t show massive wins early on and then plateau. LLMs will definitely hit that, the only question is how close we are to that point.
LLMs are simply not capable of inferring results from insufficient data, they’re essentially running statistics on words in a corpus with zero understanding of what is being discussed.
The idea that a technique that literally CANNOT do what people claim of it will one day evolve into being able to do them SOMEHOW is my whole objection.
Case in point is tesla’s FSD. Trivially novel tasks are not suited to such techniques nor could they ever be. That’s not to say they’re not useful for some things.
Notion of AI “understanding” anything is irrelevant. It’s philosophical distraction and a tangential argument about semantics. It’s not falsifiable — an AI can conquer the universe, and you can always say it merely executed a universe-conquering algorithm without truly understanding what it did.
So I still think we are on track to make an algorithm that can execute almost any text-based task as well or better than a human. The algorithm won’t have a clue that it exists, beyond parroting how humans refer to it. It won’t understand that it is beating humans at intellectual tasks. Humans will continue to change the definition of AI to make these achievements not count as intelligence.
I never said LLM was a fraud? I said it can’t do what people claim of it because it cannot handle novel input.
When I say ‘understanding’ I mean it modelling reality e.g. understanding physics for a physics question, understanding logic for a logic question etc. That you think that is ‘philosophical’ is umm… ok.
The issue is that when past data is sparse (trivially the case for many realms, e.g. driving, hence why I mention it) and you have literally no realistic model for inference, but rather some unknowable process based on what is perceived to sound like a correct answer, you are going to get eloquent sounding nonsense.
Nobody here nor anywhere else anywhere that I’ve read (and I have read fairly widely) who is promoting what you are promoting here has explained how this can be overcome.
I think there’s a reason for that and the fact you quite literally ignored the first paragraph in the parent post encourages my belief in that.
I think you are far and away too pessimistic about this tech. Instead of approaching LLMs as another tool for translating natural language to computing actions you’re attacking the hype around it. Of course there’s hype, it’s new and cool. That doesn’t matter. There are two important factors about LLMs that matter to me personally:
LLMs can be tweaked to get reliable and actionable input and output for other systems.
Many of the things that humans want from other humans are not precise answers but rather things that evoke feelings or help them generate ideas and LLMs can do this in ways that were previously impossible. Essentially text that approaches the nonsensical qualities that humans sometimes display.
LLMs feel about as important as databases to me right now but they’re newer, different and not as explored so I could be wrong.
To those people who upvoted OP: have you tried, like really tried to utilize gpt-4 or gpt-3-turbo or any local models to process naturally posed questions and requests into reasonable commands and formatted api responses? That’s one of the powers this stuff grants you. You write a few sloppy sentences about what you want, add preprocessing and extra prompting in the back then with the support of systems that read from the generated output you’re able to use that for good enough end user responses.
And if they don’t like the first gen, generate it again.
It’s just another tool that you should vet for your work. It may require more effort than you want to put in in order to make it useful for your domain but other people have different reqs.
‘To those people who upvoted OP’ or, like, OP himself perhaps? Slightly rude there. Yes I have, thanks. But do go on assuming I haven’t used this technology, as I am sure that is far more convenient.
‘Instead of approaching LLMs as another tool for translating natural language to computing actions you’re attacking the hype around it.’
OK, replace ‘LLM’ with eliza. Do you see the issue?
The problem is whether the technique is capable of doing what is claimed of it. No amount of ‘it’s getting better!’ or digs at me can get around the fact that LLMs are simply not capable of solving trivially novel problems (again, I see all these people criticising me have totally ignored that, very telling).
You can’t correctly infer a model from which to make a determination with sparse data to do so using LLMs, it’s literally impossible.
I find the database analogy utterly bizarre. Databases are precise and follow set rules which you can assess and find out in detail exactly what they do.
LLMs infer things from data sets and by their nature have not one inkling about what they speak.
And again as I’ve said, I’m sure they will be useful for some things. They just won’t be replacing programmers or radiologists or magically changing the nature of knowledge work. My objection is firmly directed at the CLAIMS made for it.
I find the database analogy utterly bizarre. Databases are precise and follow set rules which you can assess and find out in detail exactly what they do.
I use databases for storing and querying data; I’ve seen ChatGPT used for spitballing ideas and napkin calcs for cargo laden airships with accurate formulas and usage of those formulas.
From your previous post:
This is not to say that it isn’t useful for anything, it’ll be very useful for spam, fraud, copyright theft (which is a lot of what it actually does anyway), and in the nicer realms perhaps automation of the most rote, pattern-based non-novel activities out there.
It’s not just spam. It’s idea and lead generation at the very least. https:// rentry airships_gpt_full
But do go on assuming I haven’t used this technology, as I am sure that is far more convenient.
It just feels like you used for a bit then concluded that it was and forever will be a toy. I might be wrong in that assumption. Sorry for making it if it’s wrong.
I use databases for storing and querying data; I’ve seen ChatGPT used for spitballing ideas and napkin calcs for cargo laden airships with accurate formulas and usage of those formulas.
OK so databases are used for spitballing ideas? I mean… no? My point is comparing them to databases (rigid, specific, understandable method for obtaining data, you can even run PLAN commands) is bizarre as LLMs are the precise opposite.
It’s not just spam. It’s idea and lead generation at the very least.
Yes perhaps I was a bit mean there, sorry. I definitely do think there are uses for it, people keep missing that I say that though, perhaps because I was a wee bit too spicy in that OP. I have used it for idea generation myself!
It just feels like you used for a bit then concluded that it was and forever will be a toy. I might be wrong in that assumption. Sorry for making it if it’s wrong.
Nope, as I’ve said over and over again, my objection is based on the nature of LLMs - they’ve been around for a while and I seriously doubt many were claiming they can do what people now claim they can do.
The fundamental issue is that they cannot deal with novel input. They essentially perform a clever pattern match to their giant corpus, algortihmically determining what sounds like a correct answer to a query.
Where data is sparse in that corpus, it has no model of reality to refer to to determine what is a sensible answer or not. It maintains the ‘what sounds like the right answer’ and thus defaults to eloquent nonsense. This is not something that can be fixed iteratively, it’s a limitation of the technique.
There are some fields (driving is a good example) where there is infinite, trivial novelty (complicated junction, ok now it’s snowing, ok now there’s glare, ok now it’s icy ok now there’s fog ok now there’s 3 vehicles doing complicated manouvers with 1 obscured, ok etc. etc.).
My issue is not with LLMs, it’s with people claiming they can do things they very obviously cannot not or that ‘trust me bro’ it’ll iterate to these magical things in the future.
This perception is pushed by people who stand to make literal $bns from this. perhaps $100’s of bns or more + endless ML folks who, I am a little cynical as to how well they understand the fundamentals of what they do shall we say who are equally benefiting from the gravy train. That combined with a number of people who kid themselves and those honestly confused or who don’t understand the technique + fanboys and we see why this hype cycle is what it is.
I can’t stand lies, I can’t stand liars, it’s that simple for me.
This is not to say that it isn’t useful for anything, it’ll be very useful for spam, fraud, copyright theft (which is a lot of what it actually does anyway), and in the nicer realms perhaps automation of the most rote, pattern-based non-novel activities out there.
This is overly dismissive. I use ChatGPT and CoPilot a lot during the day, because it makes me more productive and I can assure you I am not a spammer or a fraudster.
Claiming that LLM’s are useless because they can produce nonsense is like saying that autocomplete is useless because sometimes the option you want isn’t listed in the pulldown. Clearly the world has a different opinion on that.
As for progress, I am not an expert, but so far each generation of GPT has shown remarkable steps forward. If it suddenly stops with GPT4 I am ok with that, because I can already put it to good use.
You intentionally ignored the second part of the sentence there. But again, people prefer to ignore that because it’s much more exciting to imagine that LLMs can do things LLMs can’t do.
I never claimed ‘LLMs are useless because they can produce nonsense’. I think it’s quite telling that critics have to misrepresent these things. And ‘the world’ had a different opinion on crypto from me. It also a different opinion on evolution by natural selection. I’ll leave you to fill in the gaps as to why that’s a bad analogy.
If you’re happy using copilot to essentially plagiarise other people’s code without license where, again, due to the literal nature of how LLMs work, subtle errors that you might miss creep in then fine. Personally I would consider this to be ‘worse than useless’.
Python and SQL are old languages themselves?
~/src
for open source projects that I don’t hack on myself, but that I compile to get the latest versions~/company
for work stuff~/project
for my own projectsI too use this layout. It got too distracting having random products and applications touching my projects.
I’m very happy to see this land. For simple servers, i frequently found myself installing a single dependency - a router, and using only the standard library otherwise. It’s great to have these batteries included. Between this, generics, and the much earlier error composition package changes, almost all of my complaints about Go have been solved.
Next is sum/union types. The syntax is already in use for generic constraints!
Soon it will not matter anymore, but for years I succesfully used the ShiftPath method in situations like that.
I actually went the other way around. I used to work in a distraction free TUI editor, because I didn’t like the visual noise. I has things like autocomplete disabled for years, because I couldn’t stand the flashing of the pulldown.
But CoPilot was not available for this editor and I really wanted to try it, so I switched to one of the Jetbrains IDE offerings. and… I am hooked. I did spend some time removing fluff and unused items from the UI, but now I have CoPilot and regular autocomplete and I like it.
The key thing is, I think, that the author tried let the tool take the lead and direct them instead of the other way around. Giving it a prompt and expect it to come up with code is different than writing code and expect it to autocomplete the next few lines. If you’re tired, you tend to become lazier and depend more on the tool.
In the physical space, if you are tired, you shouldn’t use power tools, because someone will get hurt. In the digital space, there will not be any injuries, but you can do quite some damage and wielding the tool can become very hard and tiresome, taking up more energy than you have. This will suck all joy from the activity.
That ad blocker plea seems like a great case study of how fundamentally ad supported content is at odds with ethical disclosure. The plea is fairly convincing but when I went to the uBlock panel to allow Ethical Ads I saw it is using DoubleClick.
Ethical ads are only ethical under the (misguided, imo) framing that ads are bad because of the surveillance & privacy invasion, rather than the framing that ads are bad because they are researched attempts at modifying your behavior to suit corporate ends.
If you want to make money off of me find a less scummy way than subtly massaging my personality. Exposing me to visual/linguistic malware.
Way off topic, but I think you can split ads into two categories:
The former class is essential to business and, I would argue, is ethical. A lot of early Google ads were like this, they told you about a thing that’s relevant to the thing you’re reading about. A lot of magazine articles in technical magazines are like this too: they include technical specifications and other information that you need to make an informed decision. I used to buy a magazine called Computer Shopper that was well over 50% ads, and I bought it in a large part because of the ads: they gave me a great overview of what was available and at what prices from a load of different manufacturers. A lot of trade magazines are like this.
I would love to see something that properly incentivises this kind of advert. I strongly suspect that, for companies that have a decent product, it actually works better because it gets their product to the people who others are most likely to ask for recommendations.
Offtopic: I’d argue that any ad is in the second category: manipulation. The sole purpose of an ad is to hijaak your attention to imprint some information on you. Making me aware without asking that a certain tv exist that costs X and has feature Y is manipulating me to take it in consideration for buying.
A business that only wants to publish information about the tv could just create a product page or website.
Ontopic: this was my favorite talk of the conference! Both technical and entertaining.
For what it’s worth, I do actually have code that forbids the ads for people visiting from Lobsters, but Lobsters links are noreferrer.
Precisely! I don’t mind publishers getting a bunch of semi-anonymous details about me. I mind every search and every website I make in the future becoming less helpful, less interesting, and less varied by everyone involved thinking they know which of my interests I might be willing to spend money on at any particular time.
I have since hosted the video on my CDN, meaning that DoubleClick is no longer integrated into that page. That was the YouTube iframe in action.
I think the DoubleClick ads are the YouTube iframe. I can’t really do anything about that unless I repost the video on my CDN, which I don’t have the energy to do today. Maybe tomorrow.
Then obviously you shouldn’t tell people to turn off their ad blockers, as most ad blockers will allow those DoubleClick scripts when disabled for your site.
I have just replaced the YouTube embed with a copy of the video hosted on my CDN.
One reason I’m excited about the digital-€ project is that they are aiming for very low, even free, transaction costs, which would be key for micropayments. So I could actually pay something for articles I’d like to read. And hopefully people wouldn’t pay for the content that is now pushed just for getting you to view ads. There’s also https://webmonetization.org/
Micropayments have been hyped since forever, and haven’t really taken off. I honestly believe it’s a social issue, not a technological one.
I think there are some big psychological problems with micropayments. People aren’t good at estimating tiny numbers multiplied by other numbers that they’re also bad at estimating. How many web pages do you visit per month? How much will you pay if you are paying each one 0.1¢ per view? What about 1¢ or 0.01¢? I honestly couldn’t tell you how much I’d be paying per month for these.
A big part of the success of things like Spotify and Netflix is that they are able to offer a flat rate that lets you avoid thinking about this. If you could pay $10/month to support content creators and have a privacy-preserving system that would reward the ones that you valued, I think a lot of people would sign up. I actually designed such a system and pitched it to the chief economist at MS a few years back. Sadly, the feedback was that, if we tried to deploy such a system, Google would be in a position to scale it up faster (and it’s the kind of thing where second place is largely worthless), so it didn’t make commercial sense to do so.
I don’t know if the problem is actually the nature of micropayments. Tens of millions of people already use the micropayment systems in video games where the currencies cost real money - because they develop loose heuristics for how much virtual items are worth. Sure, they usually buy far fewer items than one might imagine for a internet-scale content micropayment system - but I don’t see any reason that that intuition that is proven to work currently wouldn’t scale to larger volumes, especially because many tens of thousands play games such as EVE Online where transaction volumes do approach (or exceed) that of the real world.
At the very least, having a subscription-style system like the one that you describe would provide the infrastructure to test such a microtransaction system.
Do you have a citation for that? Last time I looked at the economics of these systems, the overwhelming majority of spending came from a tiny fraction of players, which the industry referred to as ‘whales’. The games are specifically designed to trigger an addition response in vulnerable people and make Google Ads look ethical in comparison.
This study[1] had 688 of 1000 (69%) respondents self-report that they spent money on Fortnite. In 2020, Fortnite had ~80 million monthly active users (discarding the 320 million users that aren’t currently active). We’re not going to get data from the company itself, but it’s highly plausible that tens of millions of people engage in Fortnite’s microtransaction system alone, ignoring smaller systems like EVE Online and Diablo 4 and Genshin Impact (and all the other gatcha games).
While we don’t have the statistical distribution of spending patterns, the fact that millions (minimum) of people use these systems mean that even if the industry of free-to-play games is mostly exploitative (which I agree, it is), millions of people have at least some experience with these systems, and it’s highly probable that there’s a significant intersection between active users and paid users (that is, that many users are familiar with the system, as opposed to only having touched it once and never again).
From first principles - humans don’t have a natural intuition for “real” money and “normal” purchase patterns, either - it has to be learned. I don’t see any plausible reason to believe that it’s substantially more difficult for humans to learn to use a microtransaction system than the “normal” ones that we have now.
As to your earlier point:
…people will develop that ability to estimate and/or budget if they actually have to use such a system. You could make a similar claim about our current financial system - “People are bad at estimating how much it costs to buy a $6 Starbucks every workday for a month” - and while initially that’s true, over time some people do learn to get good at estimating that, while other people will actually sit down and work out how much that costs - it’s the same mechanic for microtransactions.
I opened Firefox’s history, selected the month of July, and saw that I visited 4000 pages. At 0.1c per view, that’s $4 - not a problem. At 1c per view, that’s $40 - a reasonable entertainment budget that is comparable in size to going out for dinner with my wife once.
Yes, it took me one full minute to do that math, and that’s not instantaneous, but not everything in our lives has to be instantaneous or built-in intuition. (plus, now that I’ve computed that result, I can cache it mentally for the foreseeable future) I really think that you’re significantly overestimating the amount of work it takes to do these kinds of order-of-magnitude calculations, and under-estimating how adaptable humans are.
As for the necessity of said adaptation - I’d much rather have a microtransaction system than either a subscription one (not ideal for creators) or an ad-based one (with all of the problems that it entails) - making the purchase decisions even acts as a built-in rate limiter to gently pressure me to spend less time on entertainment, and less time distractedly skimming pages, and more time carefully and thoughtfully reading longer and more useful articles. I think that such a system would have extremely useful second-order effects for our society at large, precisely because of the need to slow down to assess whether a piece of information or entertainment is worth your money (even though your time is usually much more valuable).
[1] https://lendedu.com/blog/finances-of-fortnite/ [2] https://www.statista.com/statistics/1238914/fortnite-mau/
A true micropayment system would allow me to fund one “wallet” and buy stuff from MSFT, Nintendo, Ubisoft etc. Right now you need a separate account of each of them. That’s more a factor that their target audience usually doesn’t have access to credit cards than a sign of the success of micropayments.
I don’t understand the argument you’re making here.
I’m not claiming that the micropayment systems in video games are “real” or “general internet-scale” micropayment systems - obviously, they’re not - and I’m not claiming that micropayments are “successful”, because these video game systems are very different than the kind being discussed here.
Instead, I’m pointing out that the existence of these systems is proof that humans can use virtual/abstracted currencies to purchase intangible goods, which is basically what you need, cognitively, for a micropayment system to succeed, and I’m also trying to refute David’s claim that “People aren’t good at estimating tiny numbers multiplied by other numbers that they’re also bad at estimating.”
We should separate micropayments the technology from micropayments the interface. If we had the technology, there’s no reason you couldn’t have a client program divide a certain amount of donations per month between sites you use based on an algorithm of your choosing. Of course this arrangement is harder to profit off of because there is less room for shenanigans, but that also makes it better for everyone else.
Here’s a story from 13 years ago about Flattr and how it was trying to tackle micropayments. It had essentially that model - you prepaid and it divided the donations.
https://www.techdirt.com/2010/08/05/getting-past-the-hurdles-of-micropayments/
Flattr is apparently still around but hardly mainstream. I see way more links to Patreon, Ko-fi, and substack nowadays.
Very useful for comparison, thanks for sharing.
Good to see that don’t ignore other work that ha been done in this area. They are aware of ForgeFed, only not using it for this stage yet: https://gitlab.com/groups/gitlab-org/-/epics/11247#note_1527749828
I use
t.Parallel()
right up to the point where the mentioned trouble with databases and transactions begins. In my opinion, it is often just not worth the complexity to force this into parallel execution too. Debugging those can be pretty gnarly and eat up all the time that you saved.The higher level tests, that involve a database, can often make do with a longer use case where the database is not reset between tests (like: start empty, user registers, user does x, user undoes x, user deletes account) and leave the details and the edge cases to the unit tests that don’t need a real database.
Yep! And those higher level tests aren’t really unit tests, they’re integration tests, which shouldn’t be executed from a
go test
call by itself – they should always be explicitly opt-in.I generally agree, though I’d make an exception if your db is SQLite. It’s in-process, fast, and reliable, and you can easily switch it to in-memory mode for tests, to avoid even touching the disk. The distinction between “unit” and “integration” test is sometimes fuzzy…
Somewhat relatedly, I’m also fine with “unit” tests hitting the real filesystem. It’s fast and reliable, and (as long as you can pass in a temporary directory location, e.g.,
T.TempDir
) avoids more complex filesystem interfaces and suchlike. Then again, in Go that got a fair bit better withfs
.Fair! Unit tests can definitely use the filesystem and SQLite, as long as the files and DBs are isolated to the specific test being executed – which t.TempDir definitely satisfies.
The main feature for me on the hardware/software side is a smooth sync experience. I am always near a device, but the one I use for capture is rarely the one where I need the content. Beyond that I don’t require much and value simplicity. For now I have settled on Joplin and while there tons of ways to sync with that I paid for their cloud service because it is easy, it helps me sponsor the project and they have e2e encryption, so I don’t mind putting my personal info in.
Much more important, however, is the process and the discipline to follow it. You can dump a lot, but then you have lots of random snippets lying around scattered and what are you going to do with that? There are good approaches to transform that rambling into a useful set of notes. For instance the approach Sönke Ahrens describes in How to Take Smart Notes
But, I always struggle with the balance of how much effort I should put in and what benefit it brings. On one hand having easy accessible and good notes saves me a lot of time. On the other hand it takes a lot of time to make it work. Does it save more time in the end? I am still not sure. So sometimes I just quit and then a month later I really want some info that I know I recorded, but threw away when I quit and on the spot I start all over again.
Somewhere in the future I see a personal LLM help me with the tedious part of this process somehow, but we’re not there yet. i think it is smart to embrace the chaos a bit and just accept that it is never going to be “perfect”.
As an aside, I have an Onyx Boox Note Air 2 e-reader/Android tablet and the handwriting recognition is amazing. I have horrible handwriting too, but to my surprise it works almost flawless. The major downside is that only works that well if you use the official apps, which are tied to their own sync service. Also it is just a fraction too slow to be really comfortable, but otherwise, I am really impressed.
I agree with this idea. Far too often you have one or two features that are barely used, but add the bulk of complexity to the product.
Engineers are discouraged from removing it because someone is actually paying for the product on the basis of that one functionality.
Product is discouraged from improving it because far too few people care about it. The functionality parks in this limbo, not popular enough to improve, not useless enough to remove. (Some functionalities are mandatory for a given business domain, but far fewer than we think).
We really should have a better handle for “total cost of ownership” of a piece of code tied to a value proposition. If something does not pay for itself in terms of maintenance and opportunity cost (did we take too long to ship feature B because feature A was bogging us down?) then we should be more flexible to remove it. Simplicity is a bonus, but cost reduction is really the goal.
Maybe I’m an outlier, but I love deleting my own code. My favourite PRs are when someone comes along and says ‘this complex thing you have can be replaced with this simple thing and provides the same guarantees’. I’m careful to check that the simple version is not too simple (i.e. it does solve the problem, which may be the useful subset of the problem that my code solved) but that’s then going to be the code I’m talking about at the next tea time.
I think that’s not really what this is about, it seems to be more about ruthlessly cutting features, even if they are useful to someone.
I think there’s a spectrum. Features that no one uses are easy to justify removing. Features that everyone uses should not be removed (probably, there are a few exceptions, especially with respect to security). The enough value in the original quote suggests that it’s somewhere on the spectrum between these and those bits are always interesting. If there’s something that might be useful but comes with a cost and something simpler will solve the most important bit of the problem, I’d generally lean towards making that change. Especially if the simpler thing gives you enough building blocks that someone who really wants the more expensive version can add it externally.
You’re not an outlier. Between about 3 of us at work, we’ve deleted close to 100k loc at work, just in our front end alone, over the past year. Why? Because it was providing 0 value, and our tooling told us that this code was dead. We’ve even gone and removed routes that users weren’t using, and all of the associated dead code.
There’s even a casual competition between the 3 of us of who’s deleted the most, and during engineering demos if I speak at all someone will joke “How many loc did you delete this time?”
I’ve had a similar experience at my work. But I think you’ve identified a third “layer” that isn’t quite what the article is talking about: at the top, you have code that everyone agrees is worth being there. Then you have some code that perhaps isn’t pulling its weight; this is what the article is discussing. Below that, though, you have code that isn’t there intentionally at all—it’s there because someone forgot to clean it up after a refactoring pass, or because someone used create-react-app and didn’t get rid of the parts they didn’t need.
I agree. Sometimes even the people who sell the product know that the customer will never actually use that feature, but they claim that it helps making the sale. The only reason that complexity is there and “cannot be removed” is because it looks good on the website in the list of features.
Even programmers aren’t immune to that. As an example, many people flock to Clojure for its fancy STM (software transactional memory). In practice, nobody uses it, but people stay for all the other more boring things like simpler tooling than Java, good libraries etc.
Absolutely agreed.
I assume the code highlighting is better now, but if I understand correctly, you are now locked in to Github just as much as you would have been locked into hey.com?
But anyway, congrats on launching!
I would say (in my opinion) the lock in is a little more in Hey, where you’re not even posting on your own domain, it’s Hey’s URLS people see, whereas the author here can move from GitHub Pages to something else and people shouldn’t even notice
I am indeed locked in with GitHub for the syntax highlighting but I can easily switch to any static pages hosting service e.g. Cloudflare. Maybe even GitLab is able to generate the same tokens with classes and stuff as GitHub does, as they both support markdowns and have a nice REST API.
It depends on which static site generator you use, ie if you use Hugo or Jekyll you can move to any platform that allows you to upload the generated HTML
I would hope that we all recognize that OpenAI could pull ChatGPT from the market, and also that it is within the ambit of consumer-protection agencies to force OpenAI to do so. We could, at any time, stop the lies.
I suppose that this makes it a sort of trolley problem. We could stop at any time, but OpenAI and Microsoft will no longer profit.
It’s too late for that now. I have half a dozen LLMs downloaded onto my own laptop - and they’re significantly worse than ChatGPT when it comes to producing lies.
Ah, you were thinking along different lines with that statement. No worries.
I read you as saying that ChatGPT, as a product, is misleadingly advertised to consumers as an algorithm which is too smart to lie. This is a misleading statement on the part of OpenAI, and could be construed as false advertising.
The problem, to me, is not that LLMs confabulate, but that OpenAI is selling access to LLMs without warning their customers about confabulation.
ChatGPT is pretty darn factual. I’m curious what you’re comparing it to… If we are going to start purging things that lie to us there are other places we should start.
If you’re going to use a whataboutist argument, you need to actually say “but what about this other thing?” Don’t rely on me to fill out your strawman.
Please, let’s keep this civil.
It’s not a fallacious argument, I’m not constructing a strawman or asking you to figure it out as some kind of sinister rhetorical technique meant to deceive you (and if it was, wouldn’t it prove my point?)
I just wanted to keep things short… But I’m happy to engage.
Here are a few things which famously lie or tell untruths:
It’s not a whataboutism argument I’m trying to make (whatever that is, pointing at the big book of fallacies is the biggest fallacy of them all if you ask me).
Failing to be factual is not something we should condemn a new tool for, it’s a fundamental part of human existence. It’s claims to the contrary (absolute certainty) which have to be met with skepticism.
An LLM isn’t a human, so we shouldn’t afford it the credence we usually sign-off on as human nature. ChatGPT is not factual, ChatGPT generates statements that generally appear to be factual to the extent one doesn’t feel the need to fact-check or confirm it’s statements (at least initially). Comparing a machine that generates lies by it’s very nature (without malice or want) to human action is a category error. ChatGPT is a computer that lies to us and “humans lie more!” doesn’t affect that observation’s being better or worse (though software that mimics the worst parts of human nature is arguably worse than software which doesn’t). With respect to the above category error, it seems like whataboutism.
(Hopefully we understand “lie” in the same way with respect to computers as opposed to people, that is, people lie knowingly (else they are simply wrong), whereas computers don’t know anything, so the consensus seems to be an LLM is “lying” when it’s confidently producing false statements. Do correct me if I’m mistaken on that)
I would include lying in the sense of being factually incorrect in addition to lying in the sense of telling an intentional untruth.
For what it’s worth, I also believe that GPT has as much or more intentionality behind it’s statements as you or I… Unfortunately, that is a matter for metaphysics or theology, but I wouldn’t mind hearing anyone’s arguments around that and I have the time.
I also support the premise of the original article! We should tell people that GPT is capable of lying.
And also the benefit of having it available is huge
For who and what? I’ve found them largely useless.
I use them a dozen or more times a day. I talked about the kinds of things I use them for here: https://simonwillison.net/2023/Aug/3/weird-world-of-llms/#tips-for-using-them
This is really useful, thanks.
It would be much easier to read on a phone if you fixed the meta tags as per https://lukeplant.me.uk/blog/posts/you-can-stop-using-user-scalable-no-and-maximum-scale-1-in-viewport-meta-tags-now/ - I wrote that post for you and Substack (unfortunately I can’t find any way of contacting them)
Thanks, made that change: https://github.com/simonw/simonwillisonblog/commit/3dd71e51d90aa7cfb4bca4cffdae179fff5c910f
options
definition for a configuration structure like it. Unlike a mechanical translation, it uses common sense to deduce which fields have given names and which fields are named in a key:value fashion.I usually have it open in 5 tabs while I’m working.
How does this not drive you insane? Having to question the validity of everything it gives you at every turn sounds exhausting to me. I already find it immensely frustrating when official documentation contains factually incorrect information. I have no time and energy to deal with bugs that could’ve been prevented and going down rabbitholes that lead to nowhere.
I use mostly perplexity and secondarily bing. It’s good for things where there’s a lot of largely accurate documentation, to generate code examples. It’s effectively a way to have a computer skim the docs for you when you’re trying to figure out how to do a task. You can then integrate snippets into what you’re doing, test them, and consult the cited docs.
Telling it to rewrite something is often tedious, but can be advantageous when e.g. rushing to get something done.
Tbh I anticipate that LLM based tools will continue to evolve for code-related tasks as basically better refactoring and automated review engines, and as generators of low stakes text that people then review. They’re not AI but they do provide a new tool for manipulating text, and like all tools are great when used right, but if they’re your only tool you’ll have a bad time.
In all fairness, I do get more tired per unit time when I deal with ChatGPT. In the past, coding would tire out one part of my brain, but that wouldn’t affect the social side too much. But coding + ChatGPT tires out both parts. That said, if I reflect on how my brain processes the information it gives me, I don’t treat it as a logical statement that needs to be validated, I treat it as a hunch that’s quite likely to be wrong. Whenever I need to pause to think, I jot down my thoughts into the ChatGPT prompt, which, at worst, serves as a note taking medium. Then I press enter and move onto doing something else and check back and skim once it’s finished to see if there’s anything potentially useful. When I spot a potentially useful sentence, I copy-paste it to the prompt, and ask “are you sure?”. It sometimes says, “sorry for the confusion…” so I don’t have to do anything else, sometimes it’ll justify it in a reasonable manner, then I’ll google the statement and its justification and see if it holds water.
The bottom line is, I think it takes a little bit of practice to make efficient use of it. You need to learn the subtle hints about when it’s more likely to be lying and the kinds of questions that it’s likely to answer well. As you said, it IS tiring to deal with, but with practice you also grow the muscles to deal with it so it gets less tiring.
So it’s like pair-programming with a very confident and possibly sociopathic junior developer?
Yes. But one that has read significantly more documentation than you. If fact, it has read the entire internet.
AKA the “Net of a million lies”. LLMs are backstopped by a vast mass text that is broadly “true”, or at least internally logical. The poisoning of this well is inevitable as long as text is considered to be semantic content, devoid of any relationship to real facts. And as the entire commercial mainspring of the current internet is to serve ads against content, there will be a race to the bottom to produce content at less and less cost.
Yes, that is true. “Standalone” LLM’s will most likely decline in quality over time.
There probably is more future for ChatGTP’s that are bundled with, or pointed to, specific source material. Something like that you buy all volumes of Knuth’s The Art of Computer Programming and that you get a digital assistant for free that can help you navigate the massive text.
We’re going to see an example of Gresham’s Law, where bad (LLM-generated content) drives out good (human-generated). In the end, the good stuff will be hid behind paywalls and strict rules will be in place to attempt to keep it from being harvested by LLMs (or rather, the operators of “legit” LLMs will abide by their requests), and the free stuff will be a sewer of text-like extruded product.
This is the end of the open internet.
Thanks, that makes sense. I guess I’m too old and grumpy to get used to new tools like this. I guess I’ll just grow irrelevant over time.
Here’s hoping we don’t grow irrelevant before we retire 🍻, but I honestly don’t see ChatGPT as a threat to programmers at all. Quite the contrary, it will bring computing to ever more places and deliver more value, so whatever it is that you’re currently programming for a living, society will need much more of it not less.
If Google was as useful as it was 5 years ago, I wouldn’t be asking a random text generator how to do things.
You’d literally rather have a computer lie to you than read a man page or some other documentation?
I’d have thought the task of extracting schematic information from a structure was well within the realms of a regular tool, that the author could imbue with actual common sense through rules based on the content, rather than relying on a tool that (a) has no concept of common sense, only guessing which word sounds best next; and (b) habitually lies/hallucinates with confidence.
I don’t want to tell you how to do your job but I really have to wonder about the mindset of tech people who so willing use such an objectively bad tool for the task just because it’s the new shiny.
Weird flex but ok.
I’d rather have the computer read that man page or documentation and then answer my question correctly based on that.
Have you spent much time working with these tools? You may be surprised at how useful they can be once you learn how to use them effectively.
Did you miss this part of parent comment (emphasis mine)
You’re really doing yourself a disservice by depriving yourself of a useful tool based on knee-jerk emotional reactions. Why would you interpret that as the computer lying to you? It’s just a neural network, and it’s trying to help you based on the imperfect information it was able to retain during its training. Exactly as a human would be doing when they say “I’m not sure, but I think I remember seeing a –dont-fromboblugate-the-already-brobulgaded-fooglobs argument in a forum somewhere”. When you google that argument, it turns out it was –no-… instead of –dont-…, and the official documentation doesn’t mention that obscure argument and the only Google hit is a 12 year old email that would take you weeks of reading random stuff to stumble upon.
But that’s the point. The person doesn’t (unless they’re a psychopath) just hallucinate options out of thin air, and confidently tell you about it.
I don’t know about you, but my own brain hallucinates about imaginary options and tells me about them confidently all the time, so I’m quite experienced in processing that sort of information. If it helps, you could try mentally prepending every ChatGPT response with “I have no idea what I’m talking about, but …”
BTW, I’m actually glad for the way the current generation of AI is woefully unaware of the correctness of its thoughts. This way it’s still a very useful assistant to a human expert, but it’s hopeless at doing anything autonomously. It’s an intellectual bulldozer.
Sometimes it’s far easier to say “how should i do this thing? explain why, and give me an example in x” than to trawl documentation that isn’t indexable using only words I already know
Consumer protection is not a matter of costs vs benefits. If a product is unsafe or hazardous to consumers, then it ought to be regulated, even if consumers find it useful.
The title gets me curious. Is there a non-video resource to learn about that?
(Is it something where most users are also blockchain enthusiasts? The last time I followed a reference on a cool federated protocol, it turned out to be a cesspool of cryptocoin madness.)
I watched about half the video. I’ll eat my hat if fewer than half of this protocol’s developers and promoters are not also blockchain enthusiasts. There’s too much overlap.
This seems to be the main application of the protocol right now:
https://groupincome.org/2023/06/the-prototype-is-ready/
While there doesn’t seem to be an immediately visible “cesspool of cryptocoin madness” around that application or the protocol, one of the things they claim makes the application unique is that you can
The overlap between (people who divide “any currency” into cryptocurrency and “fiat”) and (blockchain enthusiasts) is vanishingly close to 100%, I expect.
That said, as someone whose enthusiasm for cryptocurrency can be described as somewhere between “skepticism” and “out-and-out hostility” (I’m still mad at them for rendering “crypto” unusable as mainstream shorthand for cryptography!), I found the presentation interesting and will likely watch the rest of it later on this evening.
From the youtube description: “See details at https://shelterprotocol.net “
Federation: coming soon!
https://shelterprotocol.net/en/federation/
No mention of prevention/mitigation of spam and abuse, from what I could see.
Contract chains can only be written to by authorized parties, so if you authorize a bunch of people you don’t know to write to a chain, you might end up with spammers (“you” here refers to a user of an app). Then it’s up to traditional moderation approaches to remove the offenders.
According to Kagi’s universal summarizer, these are the key moments in the video:
I think I largely agree with this (and although the “10x” thing isn’t actually the core of the argument, I think that the author is one of the few people, at least among the blog-inclined, who really gets the situation). It leaves me with mixed feelings, though. On the one hand, it makes me pretty sure that I’ll always be able to find work — that no matter how many new programmers they turn out, there will probably be a demand for people with my kind of experience for as long as I live. On the other hand, it makes me feel destined to be a grumpy old man. And I mean, I was already a grumpy old man when I was 30, but if I make it to 60 I fully expect to have turned into jwz.
Same here. Although we should note that jwz actually quit the business long ago at the first opportunity he got, which is probably a wise move. Somehow “programming for work” burns me out whereas “programming as a hobby” energizes me. Turning your hobby into your job is not a good idea and not sustainable, either for the work or for the hobby.
For that matter, building businesses around people like this isn’t sustainable, either. It seems to me that such a business has to rely on being able to attract more young starry eyed developers straight out of school who are full of energy, as the old guard burns out. But that tends to lead to thoroughly unprofessional code, where every new thing is tried out and where the same mistakes are made over and over again.
Come to think of it, that describes our industry quite wel…
I have to be very picky about the company I work with/for, which usually takes a while, but I find it’s possible to keep it fun enough.
I’m also quite picky but somehow after the newness wears off (after two or three years), I feel like I get stuck in a rut. Sometimes starting on a new project can help, but it’s so often the same. Business software just isn’t all that interesting.
I have the same. Two years is the maximum at a company before I become so bored that I dread logging in in the morning. For me it is essential that there is a need to figure out how the “system” works and what you can add to improve things. And with “system” I mean both to the code base and to the company outside the code base.
But after a year or two, you know how things work and the ideas you brought that were acceptable by the company have been implemented and now you have reached a stable compromise that just repeats over and over again with every sprint or feature. Then the boredom sets in.
My solution to this problem: become a contractor. Because then it is only natural to say goodbye after a while and have a fresh start somewhere else. At least, I hope this is a solution. Currently still on my first gig.
In my experience it’s because “programming for work” involves very little programming. It’s usually
a) A bunch of meetings to discuss what to program
b) Plugging in some little uninteresting, uncreative piece of code that follows some already defined interface into some company ‘framework’ that you have no insight into
c) Waiting on code reviews and slow deployments
There’s very little term for creativity, especially if your organization is risk averse. If you’re coming into the company late a lot of the “interesting” work has been done and now it’s your job to plug into it and try not to let the debt overwhelm you.
OpenAI has repeatedly said this is not happening and it seems kinda like a conspiracy theory.
I’m using ChatGPT daily for all sorts of tasks and have noticed absolutely zero degradation.
And like,
idk I think this question is completely idiotic and a horrible benchmark? And also isn’t ChatGPT known to perform better on English language, and this user is not speaking English?
I’m not saying that the model is the same or better, but I have noticed no degradation and I just really question the methodology of benchmarking it, instead I think it’s equally likely that users are just adapting over time - noticing errors, not being as amazing, asking it to do more and more.
Serves them right. If there weren’t so secretive, there would be a lot less questions and rumors.
I seem to remember this tool tiny subversions floating around the fediverse, but haven’t tried it yet. Sounds like what you want?
I gave it a shot. It’s very easy to set up and the archive it generates is usable. The presentation could be improved, probably pretty easily, but it works just as is.
I have not gotten my archive yet. If the data in the archive is good, then I would probably write a Python script to convert it into a static html feed.
Then a second solution is needed to handle future tweets. Maybe just switching from “tweeting” to “posting to multiple places”. To the static feed and to Twitter.
I don’t do this myself, but the term for this is POSSE: Publish (on your) Own Site, Syndicate Elsewhere. Since there is an acronym for it, there probably also is software that can help you do it. See this page for an introduction.
I’d draw a distinction between “query builders” and “ORMs” and I think the former are extremely useful, while the latter are a massive footgun at best.
“Query builders” are libraries that let you write queries and possibly define schema using constructs that are more native to your language than just calling
db.Query("SELECT * FROM ...")
. These are great in that they make building queries modular and composable, and depending on the details may also add type safety or other checks that catch bugs sooner. Textual query languages are for humans, and are clunky at best when used programmatically.“ORMs” try to make the database look like persistent storage for objects. My experience is that this abstraction tends to leak like a sieve, but more importantly, it’s just a fundamentally wrongheaded idea. Relational principles are just better for organizing data than the way OO systems tend to do things, and you should just do things the relational way.
I’ll agree with the author insofar as if you know what you’re doing it’s fruitful to use most ORM libraries as if they were mere query builders, and I would recommend this approach. But from what I’ve seen most ORMs don’t push you in this direction: they’re adding an extra layer of machinery that you should pointedly not use.
Object mappers are also fine. I think the problem with ORMs is they combine query builders with object mappers on the idea that once you combine them, you don’t need to know SQL. Which sounds great! Except it doesn’t work and you absolutely still need to know SQL, so why are we using these huge pieces of magical machinery? Just use the two pieces separately and when you run into a query that is difficult to build or an object that is hard to map, you can just do it by hand, NBD.
What’s an example of an object mapper that does this right?
I’d lump Elixir’s Ecto into this category, but it’s a little odd because it also has the query builder included in the library, just like the complained-about mainstream ORMs. I think the difference is that in use, they’re not automatically integrated. You can use the query builder part without the object-mapping part, to just get lists of dictionaries out of the database, and you can use the object-mapping without the query builder, to apply the same change rules to in-memory structs as you would if they were going to be serialized.
Contrast this with Ruby’s ActiveRecord, where the two are tightly integrated, which perhaps leads to less code overall, but also has all sorts of performance footguns and whatnot.
Except OO systems are intrinsically relational. Optimality in design is a product of analytical intent (use case).
An object relational mapping abstraction can provide useful relationships based on derivatives that SQL can’t.
Though I’ll agree many ORMs are not that. They are usually not based on a single use case, or group of use cases, with a common analytical intent. I think the idea is a step forward, but current implementations might not be.
Using SQL directly and inserting variables by concatinating strings is a no go due to SQL injections. In my mind, using a query builder or ORM is as vital to security as is using a memory safe language. The thing I see being added with an ORM though is automatic data migrations. Can these be handled by a query builder?
I mean its obvious to me that Django’s lazy ORM has too many performance footguns, but giving up migrations is a step too far. Unless there is some king of schema as code implementation where the schema can be applied to the DB as seamlessly as a nix file with no explicit migrations at all???
There is also a thing called parameterized queries to avoid SQL injections. You don’t need to go full ORM just to prevent that.
You can’t parameterize conditional
WHERE
clauses, conditionally addedJOIN
s and the like. When building conditional queries, an ORM / query builder can do wonders by abstracting SQL’s noncomposable syntax into something more malleable. Having said that, I’m not a big fan of ORMs or query builders because they often get in the way of the SQL you really want to write.With parameterized queries, you can do normal string concatenation of SQL fragments, and then use the parameterization mechanism to query against the user-supplied inputs.
I’m not necessarily arguing that’s better, but you don’t lose the security protection just by conditionally concatenating static, non-user-supplied SQL fragments.
Of course. But sometimes the user wants to filter or order by a specific field. Now of course, you’d best constraint the fields that are available to filter on with a whitelist (otherwise you might have an information leak, or allow the user to make a very slow query), but that’s not always what happens. And escaping of field names is also tricky business, sometimes the database adapter doesn’t even provide procedures for it!
Strong +1.
IMO the underlying issue with ORMs is related to a misunderstanding of the interface between the application and the database. ORMs model that interface as a typed API which yields a SQL query string, and returns data as a sequence of values. But that’s backwards! The interface is actually the SQL query string itself, and it returns data as a sequence of rows.
I am taking the train to Berlin for Gophercon EU. Anyone else going?
Or you could say “check out the previous commit and force push it”, answering their question. I don’t like this blog post. It seems to be suggesting all our tooling should be geared towards what “humans think about” instead of what engineers need to do. Humans think “I want to build a table”, not “I have to use tools to transform wood into components that assemble into a table”, but they have to do the latter to achieve the end goal. It’s IKEA vs real work.
The tools we build need to be geared towards what the users think about.
Engineers should be familiar with the mindsets their tools force upon them. That’s the true meaning perhaps of Englebart’s violin: we adapt to our tools instead of the other way around.
and when someone else already pulled that commit that you just removed…
Why not simply use the command that was designed for this? Do a
git revert
, and then agit push
. Works for the whole team.This is a nice example of the issue outlined in the post. Only there really is no way you can dumb down
git
so far that you can simply forget the distributed nature of it. The only wisdom needed here is that you always need to add stuff to the chain, never remove. This principle, and the consequences of not not following it, should really be part of your knowledge if you want to be a a software developer.I think this depends on how you read the scenario in the article - I read it as “I just pushed something that shouldn’t exist in the git history”, like I’ve been in situations where someone’s pushed a hard to rotate credential, and so you rewrite history to get rid of it to reduce damage while you work to rotate
Isn’t this the real problem? Rather than blaming git for being a distributed version control system, how about solving the credential rotation issue?
They can still use it to create a new commit if they find a need for the content. It is really only a problem if they want to communicate about it to someone who has not pulled it. IME that is extremely rare because the way to communicate about a commit is to communicate the actual commit.
It feels a bit like when the author is mentoring less experienced devs, he assumes they can’t grasp the more complex aspects of the tool because it doesn’t fully click the first time.
Over the past three decades as I’ve learned from all sorts of folks, and done my best to pass on my knowledge on all sorts of things from operating systems to networks and all sort of software development tools, I’ve often had to ask for help on the same things multiple times, esp if I don’t use a particular mechanism often.
For the past few years, I’ve worked as a build engineer and part of my team’s job has been to help come up with a workflow for a large team of engineers that makes sense. Sometimes we intervene when there are issues with complex merges, or a combination of changes that work on their own, but not together.
Most people also can sort things out on their own given some time. You don’t have to back out a change and do a force push - I would, because it makes the history cleaner, but there’s absolutely nothing wrong with a revert commit, which is extremely straightforward to create.
I remain utterly baffled by people’s capacity for self-deception when it comes to LLMs.
You can literally go and chat to one right now and get it to, often within minutes, spit out nonsense. Often well-written but subtle nonsense, but nonsense nonetheless.
Which makes sense, given the algorithm explicitly tries to generate text which probabilistically sounds like a correct answer.
This odd assumption that somehow, via magic, this technology will do all of the things it fails to do now (despite its underlying algorithm being literally incapable of doing so) seems to be what’s driving this.
The excitement is based on the self-perpetuating idea of what it could be + a snazzy demo. And isn’t that a description of every bit of vapourware out there?
I don’t mean to be disrespectful, but I do find this LLM craze a good litmus test of AI ‘experts’. Those who back the knowingly false nonsense spoken about LLMs expose themselves as either liars, incompetent, or in the most charitable interpretation, wishful thinkers.
Unfortunately I think ML as a field has a lot of bullshit and people twiddling knobs with no understanding of what underlies what they do, despite calling themselves ‘data scientists’. It’s been a huge turn off for me from when ‘big data’ proponents first claimed ridiculous things that don’t seem to have panned out. Plus ca change.
This is not to say that it isn’t useful for anything, it’ll be very useful for spam, fraud, copyright theft (which is a lot of what it actually does anyway), and in the nicer realms perhaps automation of the most rote, pattern-based non-novel activities out there.
For things which have precise requirements and are trivially novel, it is worse than useless, it is actively harmful.
Obviously you can come up with 100 examples of ‘this time it feels different’ things that were meant to change the world but people forget so quickly… equally so with this when chat gpt + friends fail to fulfill the nonsense claimed for them (but do succeed at those things they are good at). People will just act as if they only meant the latter all along…
Have you compared levels of nonsense between generations of GPT? GPT-2 would fall for all silly questions like “who’s the king of the USA?”, but GPT-3 catches many of them. GPT-3 will happily hallucinate and give vague answers about anything you ask it, but GPT-4 less so. It’s not perfect, but it is going in the right direction, and there is real tangible progress. What makes you believe that it won’t improve further?
I’m expecting some performance plateaus to show up sooner or later as a result of it getting progressively harder to source training data that didn’t itself come out of an earlier version of ChatGPT.
A lot of complex tasks reach plateaus where techniques that work moderately well simply don’t improve. For example:
If you want to predict the weather in a temperate climate, you can get around 60% accuracy by predicting the same as yesterday. You can also get similar accuracy by predicting the same as this day last year. You can then build statistical models on top that try to exclude outliers. No matter how complex these models are, you don’t get to 70% accuracy. To get to 80-90% accuracy, you need to do fluid dynamics modelling of the atmosphere.
If you want to translate natural language and you have a dictionary of words, you can do a reasonable job (at least within a language family) translating them independently. You get a big improvement moving to translating bigrams (pairs of words) and trigrams. Above that, you get little improvement.
Dall-E and Stable Diffusion both also got a lot of hype, but they still get fingers wrong. Worse, at least Stable Diffusion is massively racist. Yesterday, my partner used it to generate an image to accompany a blog post. The prompt asked for a student sitting an exam with a robot looking over their shoulder. The first picture was okay (except or some weirdness around the eyes) but about two thirds of them had an Indian person instead of a robot, no matter how we tweaked the prompts. Now, hopefully, that’s because there are a lot of Indian students photographed at robotics competitions and it doesn’t know which of the features in the image is the student and which the robot, but it could equally be racism in the training data. Either problem can be solved only with better-labelled data and that’s expensive.
I can’t think of a single probabilistic process that doesn’t show massive wins early on and then plateau. LLMs will definitely hit that, the only question is how close we are to that point.
LLMs are simply not capable of inferring results from insufficient data, they’re essentially running statistics on words in a corpus with zero understanding of what is being discussed.
The idea that a technique that literally CANNOT do what people claim of it will one day evolve into being able to do them SOMEHOW is my whole objection.
Case in point is tesla’s FSD. Trivially novel tasks are not suited to such techniques nor could they ever be. That’s not to say they’re not useful for some things.
Tesla’s FSD is a fraud, not LLM.
Notion of AI “understanding” anything is irrelevant. It’s philosophical distraction and a tangential argument about semantics. It’s not falsifiable — an AI can conquer the universe, and you can always say it merely executed a universe-conquering algorithm without truly understanding what it did.
So I still think we are on track to make an algorithm that can execute almost any text-based task as well or better than a human. The algorithm won’t have a clue that it exists, beyond parroting how humans refer to it. It won’t understand that it is beating humans at intellectual tasks. Humans will continue to change the definition of AI to make these achievements not count as intelligence.
I never said LLM was a fraud? I said it can’t do what people claim of it because it cannot handle novel input.
When I say ‘understanding’ I mean it modelling reality e.g. understanding physics for a physics question, understanding logic for a logic question etc. That you think that is ‘philosophical’ is umm… ok.
The issue is that when past data is sparse (trivially the case for many realms, e.g. driving, hence why I mention it) and you have literally no realistic model for inference, but rather some unknowable process based on what is perceived to sound like a correct answer, you are going to get eloquent sounding nonsense.
Nobody here nor anywhere else anywhere that I’ve read (and I have read fairly widely) who is promoting what you are promoting here has explained how this can be overcome.
I think there’s a reason for that and the fact you quite literally ignored the first paragraph in the parent post encourages my belief in that.
I think you are far and away too pessimistic about this tech. Instead of approaching LLMs as another tool for translating natural language to computing actions you’re attacking the hype around it. Of course there’s hype, it’s new and cool. That doesn’t matter. There are two important factors about LLMs that matter to me personally:
LLMs feel about as important as databases to me right now but they’re newer, different and not as explored so I could be wrong.
To those people who upvoted OP: have you tried, like really tried to utilize gpt-4 or gpt-3-turbo or any local models to process naturally posed questions and requests into reasonable commands and formatted api responses? That’s one of the powers this stuff grants you. You write a few sloppy sentences about what you want, add preprocessing and extra prompting in the back then with the support of systems that read from the generated output you’re able to use that for good enough end user responses.
And if they don’t like the first gen, generate it again.
It’s just another tool that you should vet for your work. It may require more effort than you want to put in in order to make it useful for your domain but other people have different reqs.
I think that’s a great analogy. In particular:
‘To those people who upvoted OP’ or, like, OP himself perhaps? Slightly rude there. Yes I have, thanks. But do go on assuming I haven’t used this technology, as I am sure that is far more convenient.
‘Instead of approaching LLMs as another tool for translating natural language to computing actions you’re attacking the hype around it.’
OK, replace ‘LLM’ with eliza. Do you see the issue?
The problem is whether the technique is capable of doing what is claimed of it. No amount of ‘it’s getting better!’ or digs at me can get around the fact that LLMs are simply not capable of solving trivially novel problems (again, I see all these people criticising me have totally ignored that, very telling).
You can’t correctly infer a model from which to make a determination with sparse data to do so using LLMs, it’s literally impossible.
I find the database analogy utterly bizarre. Databases are precise and follow set rules which you can assess and find out in detail exactly what they do.
LLMs infer things from data sets and by their nature have not one inkling about what they speak.
And again as I’ve said, I’m sure they will be useful for some things. They just won’t be replacing programmers or radiologists or magically changing the nature of knowledge work. My objection is firmly directed at the CLAIMS made for it.
I use databases for storing and querying data; I’ve seen ChatGPT used for spitballing ideas and napkin calcs for cargo laden airships with accurate formulas and usage of those formulas.
From your previous post:
It’s not just spam. It’s idea and lead generation at the very least. https:// rentry airships_gpt_full
It just feels like you used for a bit then concluded that it was and forever will be a toy. I might be wrong in that assumption. Sorry for making it if it’s wrong.
OK so databases are used for spitballing ideas? I mean… no? My point is comparing them to databases (rigid, specific, understandable method for obtaining data, you can even run PLAN commands) is bizarre as LLMs are the precise opposite.
Yes perhaps I was a bit mean there, sorry. I definitely do think there are uses for it, people keep missing that I say that though, perhaps because I was a wee bit too spicy in that OP. I have used it for idea generation myself!
Nope, as I’ve said over and over again, my objection is based on the nature of LLMs - they’ve been around for a while and I seriously doubt many were claiming they can do what people now claim they can do.
The fundamental issue is that they cannot deal with novel input. They essentially perform a clever pattern match to their giant corpus, algortihmically determining what sounds like a correct answer to a query.
Where data is sparse in that corpus, it has no model of reality to refer to to determine what is a sensible answer or not. It maintains the ‘what sounds like the right answer’ and thus defaults to eloquent nonsense. This is not something that can be fixed iteratively, it’s a limitation of the technique.
There are some fields (driving is a good example) where there is infinite, trivial novelty (complicated junction, ok now it’s snowing, ok now there’s glare, ok now it’s icy ok now there’s fog ok now there’s 3 vehicles doing complicated manouvers with 1 obscured, ok etc. etc.).
My issue is not with LLMs, it’s with people claiming they can do things they very obviously cannot not or that ‘trust me bro’ it’ll iterate to these magical things in the future.
This perception is pushed by people who stand to make literal $bns from this. perhaps $100’s of bns or more + endless ML folks who, I am a little cynical as to how well they understand the fundamentals of what they do shall we say who are equally benefiting from the gravy train. That combined with a number of people who kid themselves and those honestly confused or who don’t understand the technique + fanboys and we see why this hype cycle is what it is.
I can’t stand lies, I can’t stand liars, it’s that simple for me.
This is overly dismissive. I use ChatGPT and CoPilot a lot during the day, because it makes me more productive and I can assure you I am not a spammer or a fraudster.
Claiming that LLM’s are useless because they can produce nonsense is like saying that autocomplete is useless because sometimes the option you want isn’t listed in the pulldown. Clearly the world has a different opinion on that.
As for progress, I am not an expert, but so far each generation of GPT has shown remarkable steps forward. If it suddenly stops with GPT4 I am ok with that, because I can already put it to good use.
You intentionally ignored the second part of the sentence there. But again, people prefer to ignore that because it’s much more exciting to imagine that LLMs can do things LLMs can’t do.
I never claimed ‘LLMs are useless because they can produce nonsense’. I think it’s quite telling that critics have to misrepresent these things. And ‘the world’ had a different opinion on crypto from me. It also a different opinion on evolution by natural selection. I’ll leave you to fill in the gaps as to why that’s a bad analogy.
If you’re happy using copilot to essentially plagiarise other people’s code without license where, again, due to the literal nature of how LLMs work, subtle errors that you might miss creep in then fine. Personally I would consider this to be ‘worse than useless’.