Oracle, it’s time to free JavaScript. |
https://javascript.tm/ |
Oracle have held the trademark on JavaScript since their acquisition of Sun Microsystems in 2009. They’ve continued to renew that trademark over the years despite having no major products that use the mark.
Their December 2019 renewal included [a screenshot of the Node.js homepage](https://tsdr.uspto.gov/documentviewer?caseId=sn75026640&docId=SPE20191227132243&linkId=2#docIndex=1&page=1) as a supporting specimen!
Now a group lead by a team that includes Ryan Dahl and Brendan Eich is coordinating a legal challenge to have the USPTO treat the trademark as abandoned and “recognize it as a generic name for the world’s most popular programming language, which has multiple implementations across the industry.” |
2024-09-17 23:20:37+00:00 |
Serializing package requirements in marimo notebooks |
https://marimo.io/blog/sandboxed-notebooks |
The [latest release](https://github.com/marimo-team/marimo/releases/tag/0.8.15) of [Marimo](https://marimo.io/) - a reactive alternative to Jupyter notebooks - has a very neat new feature enabled by its integration with [uv](https://docs.astral.sh/uv/):
> One of marimo’s goals is to make notebooks reproducible, down to the packages used in them. To that end, it’s now possible to create marimo notebooks that have their package requirements serialized into them as a top-level comment.
This takes advantage of the [PEP 723](https://peps.python.org/pep-0723/) inline metadata mechanism, where a code comment at the top of a Python file can list package dependencies (and their versions).
I tried this out by installing `marimo` using `uv`:
uv tool install --python=3.12 marimo
Then grabbing one of [their example notebooks](https://github.com/marimo-team/spotlights):
wget 'https://raw.githubusercontent.com/marimo-team/spotlights/main/001-anywidget/tldraw_colorpicker.py'
And running it in a fresh dependency sandbox like this:
marimo run --sandbox tldraw_colorpicker.py
Also neat is that when editing a notebook using `marimo edit`:
marimo edit --sandbox notebook.py
Just importing a missing package is enough for Marimo to prompt to add that to the dependencies - at which point it automatically adds that package to the comment at the top of the file:
<img class="blogmark-image" style="width: 90%" alt="In the Marimo editor, running import httpx opens a dialog that offers to install that using pip or another chosen package manager" src="https://static.simonwillison.net/static/2024/marimo-httpx.jpg"> |
2024-09-17 18:06:46+00:00 |
Supercharging Developer Productivity with ChatGPT and Claude with Simon Willison |
https://twimlai.com/podcast/twimlai/supercharging-developer-productivity-with-chatgpt-and-claude/ |
I'm the guest for the latest episode of the [TWIML AI podcast](https://twimlai.com/) - This Week in Machine Learning & AI, hosted by Sam Charrington.
We mainly talked about how I use LLM tooling for my own work - Claude, ChatGPT, Code Interpreter, Claude Artifacts, LLM and GitHub Copilot - plus a bit about my experiments with local models. |
2024-09-17 16:21:22+00:00 |
UV — I am (somewhat) sold |
https://andrich.me/2024/09/uv-i-am-somewhat-sold/ |
Oliver Andrich's detailed notes on adopting `uv`. Oliver has some pretty specific requirements:
> I need to have various Python versions installed locally to test my work and my personal projects. Ranging from Python 3.8 to 3.13. [...] I also require decent dependency management in my projects that goes beyond manually editing a `pyproject.toml` file. Likewise, I am way too accustomed to `poetry add ...`. And I run a number of Python-based tools --- [djhtml](https://pypi.org/project/djhtml/), [poetry](https://pypi.org/project/poetry/), [ipython](https://pypi.org/project/ipython/), [llm](https://pypi.org/project/llm/), [mkdocs](https://pypi.org/project/mkdocs/), [pre-commit](https://pypi.org/project/pre-commit/), [tox](https://pypi.org/project/tox/), ...
He's braver than I am!
> I started by removing all Python installations, pyenv, pipx and Homebrew from my machine. Rendering me unable to do my work.
Here's a neat trick: first install a specific Python version with `uv` like this:
uv python install 3.11
Then create an alias to run it like this:
alias python3.11 'uv run --python=3.11 python3'
And install standalone tools with optional extra dependencies like this (a replacement for `pipx` and `pipx inject`):
uv tool install --python=3.12 --with mkdocs-material mkdocs
Oliver also links to Anže Pečar's handy guide on using [UV with Django](https://blog.pecar.me/uv-with-django). |
2024-09-15 14:54:04+00:00 |
How to succeed in MrBeast production (leaked PDF) |
https://twitter.com/thepatwalls/status/1835041188099113179 |
Whether or not you enjoy MrBeast’s format of YouTube videos (here’s [a 2022 Rolling Stone profile](https://www.rollingstone.com/culture/culture-features/mrbeast-youtube-cover-story-interview-1334604/) if you’re unfamiliar), this leaked onboarding document for new members of his production company is a compelling read.
It’s a snapshot of what it takes to run a massive scale viral YouTube operation in the 2020s, as well as a detailed description of a very specific company culture evolved to fulfill that mission.
It starts in the most on-brand MrBeast way possible:
> I genuinely believe if you attently read and understand the knowledge here you will be much better set up for success. So, if you read this book and pass a quiz I’ll give you $1,000.
Everything is focused very specifically on YouTube as a format:
> Your goal here is to make the best YOUTUBE videos possible. That’s the number one goal of this production company. It’s not to make the best produced videos. Not to make the funniest videos. Not to make the best looking videos. Not the highest quality videos.. It’s to make the best YOUTUBE videos possible.
The MrBeast definition of A, B and C-team players is one I haven’t heard before:
> A-Players are obsessive, learn from mistakes, coachable, intelligent, don’t make excuses, believe in Youtube, see the value of this company, and are the best in the goddamn world at their job. B-Players are new people that need to be trained into A-Players, and C-Players are just average employees. […] They arn’t obsessive and learning. C-Players are poisonous and should be transitioned to a different company IMMEDIATELY. (It’s okay we give everyone severance, they’ll be fine).
The key characteristic outlined here, if you read between the hustle-culture lines, is learning. Employees who constantly learn are valued. Employees who don’t are not.
There’s a lot of stuff in there about YouTube virality, starting with the Click Thru Rate (CTR) for the all-important video thumbnails:
> This is what dictates what we do for videos. “I Spent 50 Hours In My Front Yard” is lame and you wouldn’t click it. But you would hypothetically click “I Spent 50 Hours In Ketchup”. Both are relatively similar in time/effort but the ketchup one is easily 100x more viral. An image of someone sitting in ketchup in a bathtub is exponentially more interesting than someone sitting in their front yard.
The creative process for every video they produce starts with the title and thumbnail. These set the expectations for the viewer, and everything that follows needs to be defined with those in mind. If a viewer feels their expectations are not being matched, they’ll click away - driving down the crucial Average View Duration that informs how much the video is promoted by YouTube’s all-important mystical algorithms.
MrBeast videos have a strictly defined formula, outlined in detail on pages 6-10.
The first minute captures the viewer’s attention and demonstrates that their expectations from the thumbnail will be met. Losing 21 million viewers in the first minute after 60 million initial clicks is considered a reasonably good result! Minutes 1-3, 3-6 and 6-end all have their own clearly defined responsibilities as well.
Ideally, a video will feature something they call the “wow factor”:
> An example of the “wow factor” would be our 100 days in the circle video. We offered someone $500,000 if they could live in a circle in a field for 100 days ([video](https://www.youtube.com/watch?v=gHzuabZUd6c)) and instead of starting with his house in the circle that he would live in, we bring it in on a crane 30 seconds into the video. Why? Because who the fuck else on Youtube can do that lol.
Chapter 2 (pages 10-24) is about creating content. This is crammed with insights into what it takes to produce surprising, spectacular and very expensive content for YouTube.
A lot of this is about coordination and intense management of your dependencies:
> I want you to look them in the eyes and tell them they are the bottleneck and take it a step further and explain why they are the bottleneck so you both are on the same page. “Tyler, you are my bottleneck. I have 45 days to make this video happen and I can not begin to work on it until I know what the contents of the video is. I need you to confirm you understand this is important and we need to set a date on when the creative will be done.” […] Every single day you must check in on Tyler and make sure he is still on track to hit the target date.
It also introduces the concept of “critical components”:
> Critical components are the things that are essential to your video. If I want to put 100 people on an island and give it away to one of them, then securing an island is a critical component. It doesn’t matter how well planned the challenges on the island are, how good the weather is, etc. Without that island there is no video.
>
> […]
>
> Critical Components can come from literally anywhere and once something you’re working on is labeled as such, you treat it like your baby. WITHOUT WHAT YOU’RE WORKING ON WE DO NOT HAVE A VIDEO! Protect it at all costs, check in on it 10x a day, obsess over it, make a backup, if it requires shipping pay someone to pick it up and drive it, don’t trust standard shipping, and speak up the second anything goes wrong. The literal second. Never coin flip a Critical Component (that means you’re coinfliping the video aka a million plus dollars)
There’s a bunch of stuff about communication, with a strong bias towards “higher forms of communication”: in-person beats a phone call beats a text message beats an email.
Unsurprisingly for this organization, video is a highly valued tool for documenting work:
> Which is more important, that one person has a good mental grip of something or that their entire team of 10 people have a good mental grip on something? Obviously the team. And the easiest way to bring your team up to the same page is to freaken video everything and store it where they can constantly reference it. A lot of problems can be solved if we just video sets and ask for videos when ordering things.
I enjoyed this note:
> Since we are on the topic of communication, written communication also does not constitute communication unless they confirm they read it.
And this bit about the value of consultants:
> Consultants are literally cheat codes. Need to make the world's largest slice of cake? Start off by calling the person who made the previous world’s largest slice of cake lol. He’s already done countless tests and can save you weeks worth of work. […] In every single freakin task assigned to you, always always always ask yourself first if you can find a consultant to help you.
Here’s a darker note from the section “Random things you should know”:
> Do not leave consteatants waiting in the sun (ideally waiting in general) for more than 3 hours. Squid game it cost us $500,000 and boys vs girls it got a lot of people out. Ask James to know more
And to finish, this note on budgeting:
> I want money spent to be shown on camera ideally. If you’re spending over $10,000 on something and it won’t be shown on camera, seriously think about it.
I’m always interested in finding management advice from unexpected sources. For example, I love [The Eleven Laws of Showrunning](https://simonwillison.net/2019/Feb/19/eleven-laws-showrunning/) as a case study in managing and successfully delegating for a large, creative project.
I don’t think this MrBeast document has as many lessons directly relevant to my own work, but as an honest peek under the hood of a weirdly shaped and absurdly ambitious enterprise it’s legitimately fascinating. |
2024-09-15 14:37:50+00:00 |
Speed matters |
https://www.scattered-thoughts.net/writing/speed-matters/ |
Jamie Brandon in 2021, talking about the importance of optimizing for the speed at which you can work as a developer:
> Being 10x faster also changes the kinds of projects that are worth doing.
>
> Last year I spent something like 100 hours writing a text editor. […] If I was 10x slower it would have been 20-50 weeks. Suddenly that doesn't seem like such a good deal any more - what a waste of a year!
It’s not just about speed of writing code:
> When I think about speed I think about the whole process - researching, planning, designing, arguing, coding, testing, debugging, documenting etc.
>
> Often when I try to convince someone to get faster at one of those steps, they'll argue that the others are more important so it's not worthwhile trying to be faster. Eg choosing the right idea is more important than coding the wrong idea really quickly.
>
> But that's totally conditional on the speed of everything else! If you could code 10x as fast then you could try out 10 different ideas in the time it would previously have taken to try out 1 idea. Or you could just try out 1 idea, but have 90% of your previous coding time available as extra idea time.
Jamie’s model here helps explain the effect I described in [AI-enhanced development makes me more ambitious with my projects](https://simonwillison.net/2023/Mar/27/ai-enhanced-development/). Prompting an LLM to write portions of my code for me gives me that 5-10x boost in the time I spend typing code into a computer, which has a big effect on my ambitions despite being only about 10% of the activities I perform relevant to building software.
I also increasingly lean on LLMs as assistants in the research phase - exploring library options, building experimental prototypes - and for activities like writing tests and even a little bit [of documentation](https://simonwillison.net/2024/Sep/7/json-flatten/). |
2024-09-15 08:58:32+00:00 |
Notes on running Go in the browser with WebAssembly |
https://eli.thegreenplace.net/2024/notes-on-running-go-in-the-browser-with-webassembly/ |
Neat, concise tutorial by Eli Bendersky on compiling Go applications that can then be loaded into a browser using WebAssembly and integrated with JavaScript. Go functions can be exported to JavaScript like this:
js.Global().Set("calcHarmonic", jsCalcHarmonic)
And Go code can even access the DOM using a pattern like this:
doc := js.Global().Get("document")
inputElement := doc.Call("getElementById", "timeInput")
input := inputElement.Get("value")
Bundling the WASM Go runtime involves a 2.5MB file load, but there’s also a TinyGo alternative which reduces that size to a fourth. |
2024-09-14 17:10:51+00:00 |
LLM 0.16 |
https://llm.datasette.io/en/stable/changelog.html#v0-16 |
New release of LLM adding support for the `o1-preview` and `o1-mini` OpenAI models that were [released today](https://simonwillison.net/2024/Sep/12/openai-o1/). |
2024-09-12 23:20:59+00:00 |
Pixtral 12B |
https://twitter.com/mistralai/status/1833758285167722836 |
Mistral finally have a multi-modal (image + text) vision LLM!
I linked to their tweet, but there’s not much to see there - in now classic Mistral style they released the new model with an otherwise unlabeled link to a torrent download. A more useful link is [mistral-community/pixtral-12b-240910](https://huggingface.co/mistral-community/pixtral-12b-240910) on Hugging Face, a 25GB “Unofficial Mistral Community” copy of the weights.
Pixtral was announced at Mistral’s AI Summit event in San Francisco today. It has 128,000 token context, is Apache 2.0 licensed and handles 1024x1024 pixel images. They claim it’s [particularly good for OCR and information extraction](https://twitter.com/swyx/status/1833934254834942047). It’s not available on their La Platforme hosted API yet, but that’s [coming soon](https://twitter.com/sophiamyang/status/1833823119200399824).
A few more details can be found in the release notes for [mistral-common 1.4.0](https://github.com/mistralai/mistral-common/releases/tag/v1.4.0). That’s their open source library of code for working with the models - it doesn’t actually run inference, but it includes the all-important tokenizer, which now includes [three new special tokens](https://github.com/mistralai/mistral-common/blob/d311877187b27badbb89bb11ca03befe1cc1b5a7/src/mistral_common/tokens/tokenizers/base.py#L31-L33): `[IMG]`, `[IMG_BREAK]` and `[IMG_END]`. |
2024-09-11 22:18:16+00:00 |
Why GitHub Actually Won |
https://blog.gitbutler.com/why-github-actually-won/ |
GitHub co-founder Scott Chacon shares some thoughts on how GitHub won the open source code hosting market. Shortened to two words: timing, and taste.
There are some interesting numbers in here. I hadn't realized that when GitHub launched in 2008 the term "open source" had only been coined ten years earlier, in 1998. [This paper](https://dirkriehle.com/publications/2008-selected/the-total-growth-of-open-source/comment-page-1/) by Dirk Riehle estimates there were 18,000 open source projects in 2008 - Scott points out that today there are over 280 million public repositories on GitHub alone.
Scott's conclusion:
> We were there when a new paradigm was being born and we approached the problem of helping people embrace that new paradigm with a developer experience centric approach that nobody else had the capacity for or interest in. |
2024-09-09 17:16:22+00:00 |