daily

2026-07-18
1

Co. Wexford storm road funds unallocated

Wexford Local · original → · 8/10 · Local Wexford: storm damage funding allocation news
By Dan Walsh at July Wexford County Council meeting “We asked for €20 million, but we are very pleased that Wexford County Council will receive €13.49 million from Minister Darragh O’Brien to…

By Dan Walsh at July Wexford County Council meeting

“We asked for €20 million, but we are very pleased that Wexford County Council will receive €13.49 million from Minister Darragh O’Brien to support repairs to storm damage caused by Storm Chandra last January,” that was the good news at Monday’s monthly meeting of Wexford County Council held in County Hall. Cllr Lisa McDonald (Cathaoirleach) was in the chair.

But the bad news is that the councillors will go on their holidays not knowing how much funding is coming to their respective areas, but Deputy Chief Executive and Director of Services with responsibility for roads, Eamonn Hore has promised that “it will be fair and distributed proportionally.”

[image →]
Taking to the land during the January floods. (Pic; WexfordLocal.com)

Mr Hore said are 146 roads on the list, eleven need to be fully structured, full resurfacing is required on others, and more damage can be addressed by surface dressing.

Councillors called for their districts to be prioritised with Cllr Ger Carthy batting for Rosslare District; Cllr Pat Barden made the case for rural Wexford and the Adamstown area and said; New Ross has the worst roads in Ireland” and Cllr Jackser Owens pointed out that Enniscorthy has 650kms of road but only enough funding to surface 10/12 kms.

Mr Hore then announced the ‘worst roads” and the numbers eligible for the funding; NEW ROSS 49; ROSSLARE 32; ENNISCORTHY 29; WEXFORD 22 and GOREY-KILMUCKRIDGE 14. “The funding has not yet been allocated,” concluded Mr. Hore

2

Claude make Fable 5 permanent

Simon Willison · original → · 8/10 · AI: Claude Fable 5 model availability update
18th July 2026 - Link Blog Claude make Fable 5 permanent. An update from the @claudeai account on Twitter: Beginning July 20, Claude Fable 5 will be included in all Max and Team Premium plans, at…

18th July 2026 - Link Blog Claude make Fable 5 permanent. An update from the @claudeai account on Twitter: Beginning July 20, Claude Fable 5 will be included in all Max and Team Premium plans, at 50% of limits. Pro and Team Standard users will continue to have access to Fable via usage credits, and will receive a one-time $100 credit. As I was saying last week, the competition from GPT-5.6 Sol (and maybe to a lesser extent Kimi 3) made untenable Anthropic's plan to remove Fable 5 from their subscription accounts and make it available exclusively through API pricing. Why pay $100 or $200/month for a subscription plan that doesn't include Anthropic's best model? Their original plan was driven by concerns over compute capacity. I wonder if they'll have to dial back their training efforts in order to make more GPUs available to help serve the model. A lot of people were losing sleep over trying to make the most of Fable 5 before subscriber access was withdrawn. It's nice not to have to worry about the Fablepocalypse any more. Recent articles - Kimi K3, and what we can still learn from the pelican benchmark - 16th July 2026 - The new GPT-5.6 family: Luna, Terra, Sol - 9th July 2026 - sqlite-utils 4.0, now with database schema migrations - 7th July 2026

3

Kimi K3, and what we can still learn from the pelican benchmark

Simon Willison · original → · 8/10 · AI: Kimi K3 large language model analysis
Kimi K3, and what we can still learn from the pelican benchmark 16th July 2026 Chinese AI lab Moonshot AI announced Kimi K3 this morning, describing it as their “most capable model to date, with 2.8…

Kimi K3, and what we can still learn from the pelican benchmark 16th July 2026 Chinese AI lab Moonshot AI announced Kimi K3 this morning, describing it as their “most capable model to date, with 2.8 trillion parameters”. It’s currently available via their website and API, but an open weight release is promised “by July 27, 2026”. Moonshot are calling this the first “open 3T-class model” (I guess they’re rounding 2.8 trillion up to 3 trillion), taking the crown from DeepSeek’s 1.6T v4 Pro. Their self-reported benchmarks have K3 mostly beating Claude Opus 4.8 max and GPT-5.5 high, while losing out to Claude Fable 5 and GPT-5.6 Sol. A few highlights from the Artificial Analysis report on the model: - “On our private long-horizon knowledge work evaluation, Kimi K3 reaches an overall Elo of 1547, +732 points from Kimi K2.6 and behind only Claude Fable 5.” - “Cost per task ($0.94) is similar to GPT-5.6 Sol ($1.04), ~1/2 the price of Opus 4.8 ($1.80) and higher than open weights peers” - “Kimi K3’s token usage on the Artificial Analysis Intelligence Index decreased significantly, using 21% fewer output tokens than K2.6.” The model is also now the leading model on Arena.ai’s Frontend Code arena, surpassing even Claude Fable 5. The new model is notable for the pricing: $3/million input tokens and $15/million output tokens, putting it at the same level as Anthropic’s Claude Sonnet series and making it the most expensive model released by a Chinese AI lab to date. This is a significant increase on their earlier models such as Kimi K2.6 at $0.95/$4. 2.8 trillion parameters is also more than twice the size of that 1T model. But how does it pelican? I used OpenRouter (to avoid signing up for a Moonshot API key) with the llm-openrouter plugin to generate an SVG of a pelican riding a bicycle: llm -m openrouter/moonshotai/kimi-k3 'Generate an SVG of a pelican riding a bicycle' Here’s the transcript. It looks like this: That pelican took 95 input tokens and 16,658 output tokens (13,241 were reasoning tokens), for a total cost of 25 cents! Since K3 accepts image input I ran it against that rendered SVG above (with my alt text prompt) and got back (for 0.6 cents): Cartoon illustration of a white pelican wearing a red scarf, riding a red bicycle along a gray road with white dashed lines; the pelican has a large orange beak and webbed orange feet pedaling, with white motion lines behind it; the background shows a light blue sky with white clouds, a yellow sun, two small black birds in flight, and green grass with tiny white flowers in the foreground What can we learn from the pelican? My Generate an SVG of a pelican riding a bicycle test is 21 months old now. It was never a particularly great benchmark. It started out as a joke on how absurdly difficult it is to compare these models, but then for the first year it turned out to have a surprising correlation to how good the models actually were. That connection has been mostly severed now. The GPT-5.6 and Claude Fable 5 pelicans are outclassed by GLM-5.2, and much as I love GLM I don’t think that’s a Fable-class model. (I’m still not convinced that labs are training for the benchmark—if they were, I’d expect much better results. There’s a chance that Gemini has optimized for any combination of an animal on a vehicle though!) The biggest limitation of the pelican is that it doesn’t touch at all on the thing that matters most for today’s model: agentic tool calling and the ability to operate tools reliably as conversations grow in length. So don’t go using pelicans to compare models! All of that said, I still get a decent amount of value out of running the benchmark myself. Firstly, it’s a forcing function for actually trying the model. If I show you a pelican, that means I’ve managed to run a prompt through it. If the model has an official API I’ll use that, if it’s open weight (and small enough to fit a 128GB M5 MacBook Pro) I’ll try running it on my own machine, usually via llama.cpp or LM Studio or Ollama. I’ll frequently use OpenRouter since that usually provides a proxy to an official API without me needing a new API key. Most of my pelicans are generated using my LLM CLI tool, which helps encourage me to ensure the latest models are supported by that (via one of its plugins). More importantly though, even the act of a single prompt to “Generate an SVG of a pelican riding a bicycle” can reveal interesting model characteristics. Consider the result for Kimi K3 today. Running those simple prompts helped emphasize several points about the model. - It only has one reasoning effort right now, “max”—and it shows. The model consumed 13,241 reasoning tokens to output 3,417 tokens of response. This is expensive—the pelican cost 25 cents! - How does the prompt “Generate an SVG of a pelican riding a bicycle” add up to 95 input tokens? OpenAI’s tokenizer counts 10, Anthropic’s counts 10 for Opus 4.6, 30 for Opus 4.7 and 25 for Sonnet 5/Fable 5. Prompting “hi” to Kimi K3 counted 86 tokens, suggesting there may be an 85 token hidden system prompt. It refused to leak it though. - Vision works well: the alt text it generated is very good. K3 currently only has one thinking effort level, but I’ve been deriving quite a bit of value recently from running the same pelican prompt through different effort levels to get a quick idea for what impact those have. Here’s my matrix for the GPT-5.6 model family, for example. Really though the main things I gain from the pelican test are: - It’s a “hello world” exercise for prompting a model - A rough cost and reasoning estimate for a simple task - Confirmation that the model can output valid SVG and has a basic idea of geometry and spatial awareness. This is a much bigger deal for the smaller models that run on my laptop. - It’s still interesting to compare pelicans between releases in the same model family. K3’s pelican is a notable improvement from Kimi 2.5. - It’s something I can share that demonstrates I’ve tried it. Plus a comment with a pelican in it is kind of a tradition on Hacker News at this point, any time I’m late I get comments asking where it is! More recent articles - The new GPT-5.6 family: Luna, Terra, Sol - 9th July 2026 - sqlite-utils 4.0, now with database schema migrations - 7th July 2026

4

Teenagers rescued off Clone Beach

Wexford Local · original → · 7/10 · Local Wexford: teenagers rescued from Clone Beach
[image →]COURTOWN RNLI were first on the scene and rescued teenagers from Clone Beach earlier this evening. (File Pic; RNLI/John Timmons). By Dan Walsh Three teenagers are safe and well after being…
[image →]
COURTOWN RNLI were first on the scene and rescued teenagers from Clone Beach earlier this evening. (File Pic; RNLI/John Timmons).

By Dan Walsh

Three teenagers are safe and well after being rescued by Courtown RNLI from the sea off Clone Beach, near Castletown, this evening.

The teenagers entered the beach through the new access point and were paddle boarding when they got into difficulties at around 8pm.

After a call to the Irish Coast Guard, Courtown RNLI’s volunteer crew was launched and quickly reached the teenagers, bringing them safely ashore.

The boys were shaken by the ordeal but were uninjured and did not require medical assistance at the scene.

An Garda Síochána and Coast Guard helicopter R117 from Waterford also attended the scene.

Local Cllr Joe Sullivan who visited the scene, said he was relieved the teenagers were safe and well, praised the emergency services for their swift response, and urged people to take care during beach and sea activities.

5

Kilpatrick beach and coastal works

Wexford Local · original → · 7/10 · Local Wexford: coastal erosion works at Kilpatrick Beach
[image →]CLLR JOE SULLIVAN at Kilpatrick Beach where new rock armour will fight coastal erosion. (Pic; WexfordLocal.com) By Dan Walsh at monthly meeting of Wexford County Council and Kilpatrick…
[image →]
CLLR JOE SULLIVAN at Kilpatrick Beach where new rock armour will fight coastal erosion. (Pic; WexfordLocal.com)

By Dan Walsh at monthly meeting of Wexford County Council and Kilpatrick Beach

Plans to install 80 metres of rock armour to facilitate the construction of a new entrance or access to existing properties which has been cut off due to coastal erosion at Kilpatrick Beach, Castletown, Gorey, were approved at last Monday’s monthly meeting of Wexford County Council.

Speaking to WexfordLocal.com Independent Cllr Joe Sullivan, who lives locally, he explained the €1 million plans for the successful passing of a Part 8 Planning and Development Regulations 2001 at this historic area of North Wexford.

“The works shall consist of installing 80 metres of Rock Armour at Kilpatrick Beach to facilitate the construction of a new entrance or access to existing properties that have been cut of due to coastal erosion. Replace existing culvert and realign beach access ramp.

“As the local representative for this area and having worked with all the stakeholders to ensure we arrived at this point I would like to warmly welcome the completion of this part of the project.

“I would like to particularly pay tribute to the two people without whom this project would not be happening. The people I refer to are of course Eamonn Hore Director of Services at Wexford County Council with responsibility for Environment who worked tirelessly to ensure that, plans were drawn, all environmental concerns were addressed and most importantly funding was secured.

“It’s at this point I want to extend a thanks to Kevin “Boxer” Moran  Minster of State for Public Expenditure Infrastructure, Public Service Reform and Digitalisation who once the case was made to him by Eamonn Hore came on board and supported the project while committing the funding from his Department.

“I now look forward to this project progressing in a timely manner for the betterment of the local residents’ wider community and the very welcome tourists who visit our beautiful beaches on a regular basis. “The last word must go to the residents of the houses who have had to endure hardship accessing their properties for a number of years. Your wait is nearly over and your persistence lobbying and patience is acknowledged, concluded Cllr Sullivan.

HISTORY; While visiting Kilpatrick Beach Cllr Sullivan brought me to see St Patrick’s Well – Toberpatrick -which is still venerated. According to On Our Own Ground – County Wexford Parish by Parish, Volume 1, by Edward Culleton (published by Wexford County Council Public Library Service in 2013), page 168 reads;

“In the Millennium Year of 2000, the community of Castletown restored the easily accessed site (the well) for use. The pure spring water which emerges from under the shale outcrop contains no sea water, unlike other springs in the area.”

6

Shipping OpenStrike: A Counter-Strike-Shaped FPS on a 2004 Handheld

Hacker News · original → · 7/10 · Retro gaming: Counter-Strike FPS on 2004 PSP handheld
Shipping OpenStrike: a Counter-Strike-Shaped FPS on a 2004 Handheld OpenStrike is out — classic BSP maps, bots, tracers, and a Solid JSX HUD holding a locked 60 FPS on a real Sony PSP: 333 MHz, 32…

Shipping OpenStrike: a Counter-Strike-Shaped FPS on a 2004 Handheld OpenStrike is out — classic BSP maps, bots, tracers, and a Solid JSX HUD holding a locked 60 FPS on a real Sony PSP: 333 MHz, 32 MB, no shaders. A field guide for JavaScript developers to how it works: rules and HUD in TypeScript on QuickJS, a bundler for 1999's geometry, and a 16.7 ms budget with receipts. Written by Yifeng "Evan" Wang Today we are releasing OpenStrike — a single-player, Counter-Strike-shaped FPS that plays the classic GoldSrc-era maps: bots, tracers, recoil, round flow, and a JSX HUD. The round rules are TypeScript. The HUD is a Solid app. And the whole thing holds a locked 60 FPS on a 2004 Sony PSP, shipped as one file you can drop on a Memory Stick. Native 480×272 output of the shipping build, shown at 2× — this frame and every other screenshot in this post is the PSP executable's own framebuffer, captured in the emulator our byte-exact tests run on. OpenStrike is open source at pocket-stack/open-strike. It is the first game built on the Pocket runtime family — the architecture underneath PocketJS — and it exists to prove a claim: that "the web stack's ergonomics, without the web stack's machinery" scales past UI, to a real-time 3D game, on hardware that predates the iPhone. This post is written for people who ship JavaScript for browsers and have never touched a games console. No embedded or graphics background is assumed. It is the full story: what the machine actually is, how TypeScript ends up inside it, what a 1999 map format has to do with your bundler, how you draw anything without shaders, and where the milliseconds went. The machine in question The PSP-1000 has a single MIPS CPU core at 333 MHz. In-order execution, no speculative anything, and — this matters most for us — no JIT for JavaScript, so every closure runs interpreted, every frame. It has 32 MB of RAM, of which user programs see 24 MB. The browser tab you are reading this in has a larger JavaScript heap than this machine has memory, total. The GPU — Sony calls it the Graphics Engine — predates programmable shaders. You cannot upload a vertex shader or a fragment shader; there is nothing to upload to. It is a fixed-function pipeline: it can transform triangles by a matrix, interpolate a color across each one, sample a texture with bilinear filtering, depth-test, blend — a fixed menu, configured by registers, feeding a 480×272 screen out of 2 MB of video memory. And there is no operating system in the sense you mean. No processes, no virtual memory, no dynamic linker, and nowhere for console.log to go. The whole game — Rust engine, JavaScript interpreter, the JS bundle, the map — links into a single executable (an EBOOT.PBP , the PSP's .exe ), and when it runs, it is handed the machine. When it crashes, the machine crashes. That is the deploy target. Here is what we deployed. One product, two machines OpenStrike is split along a line web developers will recognize instantly — it is the native-app split, transplanted: the engine is Rust, the product is JavaScript. The Rust side (openstrike-core plus the Pocket3D renderer) owns everything that must never miss a frame: player movement and collision, bot AI, bullets, and drawing the world. The JavaScript side owns everything that makes it this game rather than some game: rules.ts is the round flow, scoring, and the weapon and bot tuning tables; hud.tsx is the entire HUD — health, ammo, crosshair, score — an ordinary Solid component tree styled with Tailwind classes, running on PocketJS. The base game grants itself no privileges a mod wouldn't have: change rules.ts and you have made a mod. The JS engine embedded in the executable is QuickJS — Fabrice Bellard's full ES2023 engine that compiles to a few hundred kilobytes. QuickJS is to this PSP what V8 is to Node: the host hands it a strike API surface and a ui API surface, and the same openstrike.js bundle boots against them on every target. Every target — plural, and that is the release's real headline: The tick order is fixed and worth internalizing, because everything later hangs off it. Sixty times a second: every 16.7 ms (one vertical blank) pad → SimInput buttons + analog stick sim.tick(dt) movement, bots, bullets Rust strike.__dispatch(state, events) one call into QuickJS JS ├─ rules.ts reacts queues commands └─ hud.tsx re-renders only the bindings that changed drain commands → core setPhase, configureWeapon… Rust draw PVS → batches → GE Facts flow down as a plain state snapshot (hp , ammo , phase , aliveBots , …) plus an event batch (hit , playerDied , roundReset ). Intent flows up as queued commands. JavaScript is consulted exactly once per frame and can never stall the simulation — the same one-crossing-per-frame discipline PocketJS already enforced for UI, now owning a game's rules. A bundler for 1999's geometry Now the 3D part, from zero. A GoldSrc-era map — the format behind Half-Life and the original Counter-Strike — is not a soup of triangles. It is a BSP file: the level's polygons stored pre-organized into a binary space partitioning tree, a 1990s data structure that recursively slices the world with planes until every position falls into a convex cell called a leaf. The format's killer feature is the PVS — the Potentially Visible Set. For every leaf, the file stores a precomputed, compressed bitset of every other leaf that could ever be visible from inside it, through any door, over any crate, at any angle. Computing it took the level designer's machine minutes, once, in 1999. Consuming it takes microseconds, forever. If you want this in web terms: the PVS is occlusion culling as a lockfile. All the expensive thinking happened offline, and the runtime just looks up the answer. Standing in the dust2 courtyard, the renderer never even considers the tunnels' geometry — not "draws it fast," but never touches it. We kept that 1999 spirit and extended it with a modern move: treat the console like a deploy target and put a compiler in front of it. The PSP cannot afford to parse a BSP file, decode textures, or reshape data at load time — that costs RAM for intermediate copies and CPU we would rather spend on bots. So OpenStrike's build step runs pocket3d-cook on your laptop, which reads the map plus its .wad texture archives and emits a .p3d : a file whose bytes are exactly what the PSP's GPU wants to read, in the exact layout, alignment, and byte order. "Baking" is the word for moving runtime cost to build time, and the cooker bakes aggressively: - Lighting is baked into vertex colors. GoldSrc maps ship lightmaps — little per-surface shadow textures. The GE could multitexture them, but every texture unit costs bandwidth we would rather not spend. So the cooker dices each polygon into a grid and samples the lightmap into the vertices' color channel. The GE interpolates colors across triangles for free, so sunlight, shadow edges, and that orange dust2 glow cost literally nothing per frame. It is inlining, for light. - Positions are quantized to 16-bit integers. Half the memory and half the GPU-read bandwidth of floats. (This unlocked the port's favorite piece of hardware archaeology: in 3D mode the GE silently normalizes integer vertices — divides them by 32768 — a behavior documented nowhere. The counter-move is to scale the world back up by 32768 in the model matrix. We confirmed it by reading the emulator's source code, which on this platform is what developer documentation looks like.) - Textures become CLUT8: 8-bit indices into a 256-color palette — 4× smaller than RGBA, which is how a whole map's texture set fits alongside everything else. They are resampled to power-of-two sizes (a hard GE requirement), swizzled — reordered into the tile pattern the GPU's texture cache wants, roughly "structure-of-arrays, for texels" — and given full mip chains (pre-shrunk versions for distant surfaces). The payoff for all this build-time obsession is the load screen we don't have: the .p3d is linked into the executable's read-only data, and the GE renders directly from those bytes, in place. No file I/O, no decompression, no upload step. The one concession to hardware reality is a single cache-writeback call at boot, because the GPU reads memory behind the CPU cache's back. Level loads are instant because nothing loads. If you have used PocketJS, this is the same ideology that compiles Tailwind classes to a binary style table and bakes fonts to atlases — the device never parses, it only consumes — applied to an entire 3D world. The texture glow-up, or: the machine hides nothing Midway through the port we noticed the textures looked muddier than 1999 deserved, and the investigation is a nice showcase of how unforgiving — and how legible — this hardware is. Three independent causes, all in the pipeline above: The same crate, before and after, 3× crop of the PSP framebuffer. Left: nearest-neighbor resampling, round-down sizing, default mip selection. Right: bilinear palette-aware resampling, round-up sizing, −1.0 mip bias, and a 2× denser light grid. First, non-power-of-two textures (a 96×96 crate face, say) were being stretched to GPU-legal sizes with nearest-neighbor sampling, which duplicates texel columns in a visibly irregular rhythm. The fix is a bilinear resample — but through a palette: sample in RGB, then re-quantize each result to the texture's own 256 colors. Second, sizing policy rounded to the nearest power of two, so a 320-wide texture dropped to 256 and threw away native detail; it now always rounds up (the GE's ceiling is 512). Third, the GE has no anisotropic filtering, and its automatic mip selection goes blurry on floors at glancing angles long before texel density demands it — a −1.0 LOD bias holds the sharp mip one distance ring longer, a trade every PSP-era shipped game quietly made. And while we were in there, the light-bake grid tightened from 96 world units to 32 — every other lightmap sample — so baked shadow edges snap back into place. Dust2 went from 26k to 58k vertices and the map grew 0.9 MB, which the budget absorbed without a flinch, as the next section shows. The 16.7-millisecond war At 60 FPS a frame is 16.7 ms — everything above must happen inside it, on one interpreted-JavaScript-running, 333 MHz core. Here is where the port stood after the dust settled, measured on the physical handheld over a scripted tour of dust2: A comfortable margin — but only after two wars, and the second one is the single most useful thing this project has to say to JavaScript developers. War one was not ours to win. The first hardware run came in at 25 FPS, and no amount of profiling explained it, because the code was innocent: the development harness boots the console at 222 MHz, and retail speed — 333 MHz — is one syscall away. The lesson generalizes: before optimizing a slow embedded target, confirm what clock it is actually running at. War two: fine-grained means fine-grained. The HUD originally mirrored the per-tick state snapshot into Solid through one signal: // before: one signal carries the whole snapshot — // a fresh object every tick, so *every* binding re-runs, every frame const [st, setSt] = createSignal(snapshot()); onState((s) => setSt({ ...s })); // after: one signal per field, equality-gated — // an unchanged hp/ammo/phase costs nothing const [hp, setHp] = createSignal(100); const [ammo, setAmmo] = createSignal(30); onState((s) => { setHp(s.hp); setAmmo(s.ammo); /* … */ }); On a desktop you would never notice the difference; the JIT absorbs it. On a 333 MHz interpreter the whole-snapshot version cost 20.6 ms of JavaScript per frame — over budget before a single triangle drew — because a new object identity re-fires every binding whether its field changed or not. Splitting per field with equality gating dropped the identical HUD to 2.2 ms. Solid's reactivity model isn't a preference at this scale; it is the reason a JSX HUD is possible here at all. The renderer's draw output was byte-identical before and after, which is also how we could make that change fearlessly — more on that below. Memory tells the same story of contracts rather than aspirations, with the JS engine's heap living inside the same audited budget: PSP user RAM 24.0 MB ├─ executable (engine + QuickJS + JS bundle │ + the entire cooked map) 6.2 MB ├─ arena high-water (QuickJS heap, engine │ state, per-frame vertex pool) ~4.4 MB └─ free ~13 MB VRAM: framebuffers + depth 1.4 / 2 MB Determinism is the debugger How do you debug a machine with no console, no debugger UI, and no screen-sharing? You make the program a pure function and put the leverage at build time — the same bet as the cooker, applied to behavior. OpenStrike inherits PocketJS's closed-world rules: a fixed 1/60 s timestep, no wall clocks, seeded randomness, and per-frame input that is just a button bitmask plus two analog bytes. Frame N is a pure function of the input script — so a scripted run produces byte-identical framebuffers, every time, on any faithful executor. Our CI boots the actual shipping EBOOT in the PPSSPP emulator's deterministic software renderer, drives scripted input, and compares dumped frames byte-for-byte against golden PNGs. When the texture fixes above landed, the goldens named exactly which pixels changed and why; re-baselining was one command. The 60 FPS number comes from the same harness pointed at the real handheld over a USB cable, streaming per-frame timings back to the desk. Frame 507 of a scripted input tape — reproducible to the byte, which is what makes it CI evidence and a blog illustration at the same time. And because the HUD is a PocketJS app, the whole DevTools story carries over unchanged: the component inspector highlights nodes on the handheld's physical screen, console.log streams off the device with frame numbers attached, and pause/step freezes bots mid-stride — all over the same cable. What this actually proves The Pocket runtime family's thesis is that a product — gameplay rules, UI, tuning — should be a portable JavaScript artifact, while engines stay native, small, and swappable underneath. OpenStrike is the first full-size test of that thesis across a hardware gulf: the same openstrike.js , byte for byte, runs against wgpu on a many-core laptop and against a fixed-function GPU on a 32 MB handheld, and the game cannot tell. The desktop build: same rules.ts, same hud.tsx, same crates — eleven times the pixels and per-pixel lightmaps, because that engine can. Nothing about the pattern is PSP-specific. The console is, as we said when introducing PocketJS, an honest referee: a machine that will not quietly absorb a lazy architecture. An FPS with its brains in TypeScript holding 60 FPS there is the existence proof; everything roomier is downhill. Play it - pocket-stack/open-strike — MIT. Desktop build runs with cargo run -p openstrike ; the README covers the PSP EBOOT, the hardware bench, and the emulator goldens. - Map data is Valve's and is not in the repo — point the build at your own copy of the game's .bsp /.wad files. Any GoldSrc-era map works; the eight CS classics are the tested set. - No PSP? PPSSPP runs the EBOOT beautifully. Real hardware needs custom firmware and PSPLINK — the same cable our DevTools ride. - RUNTIMES.md — the runtime-family architecture OpenStrike instantiates, if you want the ontology behind the diagram. Follow @pocket_js for what's next. The pocket keeps getting deeper.

7

Kimi K3, and what we can still learn from the pelican benchmark

Hacker News · original → · 7/10 · AI: Kimi K3 large language model announcement
Kimi K3, and what we can still learn from the pelican benchmark 16th July 2026 Chinese AI lab Moonshot AI announced Kimi K3 this morning, describing it as their “most capable model to date, with 2.8…

Kimi K3, and what we can still learn from the pelican benchmark 16th July 2026 Chinese AI lab Moonshot AI announced Kimi K3 this morning, describing it as their “most capable model to date, with 2.8 trillion parameters”. It’s currently available via their website and API, but an open weight release is promised “by July 27, 2026”. Moonshot are calling this the first “open 3T-class model” (I guess they’re rounding 2.8 trillion up to 3 trillion), taking the crown from DeepSeek’s 1.6T v4 Pro. Their self-reported benchmarks have K3 mostly beating Claude Opus 4.8 max and GPT-5.5 high, while losing out to Claude Fable 5 and GPT-5.6 Sol. A few highlights from the Artificial Analysis report on the model: - “On our private long-horizon knowledge work evaluation, Kimi K3 reaches an overall Elo of 1547, +732 points from Kimi K2.6 and behind only Claude Fable 5.” - “Cost per task ($0.94) is similar to GPT-5.6 Sol ($1.04), ~1/2 the price of Opus 4.8 ($1.80) and higher than open weights peers” - “Kimi K3’s token usage on the Artificial Analysis Intelligence Index decreased significantly, using 21% fewer output tokens than K2.6.” The model is also now the leading model on Arena.ai’s Frontend Code arena, surpassing even Claude Fable 5. The new model is notable for the pricing: $3/million input tokens and $15/million output tokens, putting it at the same level as Anthropic’s Claude Sonnet series and making it the most expensive model released by a Chinese AI lab to date. This is a significant increase on their earlier models such as Kimi K2.6 at $0.95/$4. 2.8 trillion parameters is also more than twice the size of that 1T model. But how does it pelican? I used OpenRouter (to avoid signing up for a Moonshot API key) with the llm-openrouter plugin to generate an SVG of a pelican riding a bicycle: llm -m openrouter/moonshotai/kimi-k3 'Generate an SVG of a pelican riding a bicycle' Here’s the transcript. It looks like this: That pelican took 95 input tokens and 16,658 output tokens (13,241 were reasoning tokens), for a total cost of 25 cents! Since K3 accepts image input I ran it against that rendered SVG above (with my alt text prompt) and got back (for 0.6 cents): Cartoon illustration of a white pelican wearing a red scarf, riding a red bicycle along a gray road with white dashed lines; the pelican has a large orange beak and webbed orange feet pedaling, with white motion lines behind it; the background shows a light blue sky with white clouds, a yellow sun, two small black birds in flight, and green grass with tiny white flowers in the foreground What can we learn from the pelican? My Generate an SVG of a pelican riding a bicycle test is 21 months old now. It was never a particularly great benchmark. It started out as a joke on how absurdly difficult it is to compare these models, but then for the first year it turned out to have a surprising correlation to how good the models actually were. That connection has been mostly severed now. The GPT-5.6 and Claude Fable 5 pelicans are outclassed by GLM-5.2, and much as I love GLM I don’t think that’s a Fable-class model. (I’m still not convinced that labs are training for the benchmark—if they were, I’d expect much better results. There’s a chance that Gemini has optimized for any combination of an animal on a vehicle though!) The biggest limitation of the pelican is that it doesn’t touch at all on the thing that matters most for today’s model: agentic tool calling and the ability to operate tools reliably as conversations grow in length. So don’t go using pelicans to compare models! All of that said, I still get a decent amount of value out of running the benchmark myself. Firstly, it’s a forcing function for actually trying the model. If I show you a pelican, that means I’ve managed to run a prompt through it. If the model has an official API I’ll use that, if it’s open weight (and small enough to fit a 128GB M5 MacBook Pro) I’ll try running it on my own machine, usually via llama.cpp or LM Studio or Ollama. I’ll frequently use OpenRouter since that usually provides a proxy to an official API without me needing a new API key. Most of my pelicans are generated using my LLM CLI tool, which helps encourage me to ensure the latest models are supported by that (via one of its plugins). More importantly though, even the act of a single prompt to “Generate an SVG of a pelican riding a bicycle” can reveal interesting model characteristics. Consider the result for Kimi K3 today. Running those simple prompts helped emphasize several points about the model. - It only has one reasoning effort right now, “max”—and it shows. The model consumed 13,241 reasoning tokens to output 3,417 tokens of response. This is expensive—the pelican cost 25 cents! - How does the prompt “Generate an SVG of a pelican riding a bicycle” add up to 95 input tokens? OpenAI’s tokenizer counts 10, Anthropic’s counts 10 for Opus 4.6, 30 for Opus 4.7 and 25 for Sonnet 5/Fable 5. Prompting “hi” to Kimi K3 counted 86 tokens, suggesting there may be an 85 token hidden system prompt. It refused to leak it though. - Vision works well: the alt text it generated is very good. K3 currently only has one thinking effort level, but I’ve been deriving quite a bit of value recently from running the same pelican prompt through different effort levels to get a quick idea for what impact those have. Here’s my matrix for the GPT-5.6 model family, for example. Really though the main things I gain from the pelican test are: - It’s a “hello world” exercise for prompting a model - A rough cost and reasoning estimate for a simple task - Confirmation that the model can output valid SVG and has a basic idea of geometry and spatial awareness. This is a much bigger deal for the smaller models that run on my laptop. - It’s still interesting to compare pelicans between releases in the same model family. K3’s pelican is a notable improvement from Kimi 2.5. - It’s something I can share that demonstrates I’ve tried it. Plus a comment with a pelican in it is kind of a tradition on Hacker News at this point, any time I’m late I get comments asking where it is! More recent articles - The new GPT-5.6 family: Luna, Terra, Sol - 9th July 2026 - sqlite-utils 4.0, now with database schema migrations - 7th July 2026

8

The state of open source AI

Hacker News · original → · 7/10 · AI: open source AI models and accessibility
V1.0 · Recurring · July 2026 In New Zealand's far north, a Māori broadcaster trains speech models for te reo — a language too small for any market — under a license that keeps the data with its…

V1.0 · Recurring · July 2026 In New Zealand's far north, a Māori broadcaster trains speech models for te reo — a language too small for any market — under a license that keeps the data with its people. PwC, one of the largest accounting firms in the world, fine-tuned an open model on the language of finance and runs it today for hundreds of clients, on its own hardware, with no per-token meter running. Researchers in Lausanne built an open medical model with the Red Cross, tuned to its humanitarian guidelines, and are preparing clinical trials at home and in Tanzania. In East Africa, farmers diagnose cassava disease with a model that runs on the phone itself, offline, in fields the cloud has never reached. In Switzerland, a public consortium trained a national model on public supercomputers and released all of it: weights, data, training code. None of them asked permission, and none of them could have rented this. They own it — that is the whole idea. We have been here before. Mozilla exists because one company tried to own the front door to the web, and an open community rose up to make sure it never could. Twenty-five years later, someone is running the same play. We bet on open the first time. Open won. Together, we can do it again. Our belief is simple: the path forward is competition and interoperability. We believe in a world of many models, standard ways to plug them together, and the freedom to walk away from any vendor at any time. Open has a record here. It grew the pie and let more people own a slice of it. Read what follows as a map: where open AI is winning — some numbers surprised even us — and where it is exposed. A case that hides its weak points is an advertisement.” Open weights are no longer a compromise. They are where the work happens: a majority of production tokens now route through them, and the five highest-volume models on OpenRouter are all open. Closed models still lead at the frontier, on reasoning and multimodality, but the frontier is not what most workloads need. Commodity inputs do not hold pricing power. Value moves up, to the agentic harness. Data from the Mozilla / SlashData 2026 developer survey. Open models lead in adoption: 79% of developers adding AI functionality use them, against 71% for closed, and the two are largely complementary, with half of developers using both. But production is where teams stall: only 51% of open-model teams reach production versus 63% for closed. The gap is operational tooling and trust, not model capability. | Challenge | W. Europe & Israel | N. America | Greater China | South Asia | East Asia ex GC | S. America | E. Europe & CIS | Oceania | All | |---|---|---|---|---|---|---|---|---|---| | High infrastructure or compute costs | 25% | 26% | 29% | 28% | 28% | 28% | 29% | 18% | 27% | | Security, privacy, or compliance concerns | 20% | 27% | 18% | 39% | 29% | 28% | 25% | 22% | 26% | | Ongoing maintenance and updates | 27% | 26% | 18% | 26% | 20% | 31% | 21% | 25% | 24% | | Complexity of deployment, hosting, or scaling | 27% | 24% | 19% | 24% | 11% | 30% | 26% | 25% | 23% | | Lack of specialised support | 17% | 16% | 21% | 31% | 24% | 23% | 23% | 32% | 22% | | Difficulty evaluating or comparing models | 14% | 17% | 14% | 23% | 16% | 26% | 25% | 18% | 18% | | Difficulty fine-tuning or customising | 22% | 18% | 18% | 20% | 11% | 22% | 18% | 12% | 18% | | Difficulty integrating into existing systems | 19% | 21% | 14% | 20% | 7% | 26% | 19% | 20% | 18% | | Insufficient documentation or learning resources | 18% | 15% | 15% | 17% | 15% | 20% | 24% | 15% | 17% | | Model performance is not good enough | 18% | 15% | 13% | 22% | 16% | 17% | 19% | 8% | 17% | | No major challenges | 9% | 21% | 16% | 5% | 14% | 4% | 8% | 12% | 12% | | Weighted sample size | 286 | 277 | 206 | 192 | 164 | 147 | 98 | 39 | 1411 | Nine layers and 48 components of the stack scored across 10 criteria (1–5). Click a layer to open its components: each carries its own criterion scores, maturity grade, open-vs-closed parity verdict, and surfaces some of its most-starred open-source projects. Hover any cell for detail. Open-weight AI is a commercial market at multi-hundred-billion-dollar scale, built by funded companies and run in production by global enterprises. Databricks crossed a $5.4B run-rate; Mistral scaled 20× to ~$400M ARR in twelve months; DeepSeek reached ~$220M ARR and recently raised $7.4B at a valuation over $50B. Five revenue models are proven at scale: hosted inference, enterprise platforms, on-prem licensing, fine-tuning services, and harness tooling. | Company | HQ | Layer | Disclosed funding | Valuation | Revenue signal | Leading investors | Stage | |---|---|---|---|---|---|---|---| | Databricks | USA | Enterprise platform | — | — | $5.4B run-rate | — | Pre-IPO | | DeepSeek | China | Frontier open weights | $7.4B | $50B+ | ~$220M ARR | Liang Wenfeng; Tencent; CATL; China National AI Fund | Private | | Mistral AI | France | Open weights + platform | $3.05B | ~$14B (talks at €20B) | ~$400M ARR, 20× YoY | ASML; a16z; Lightspeed; Nvidia | Private | | Moonshot AI | China | Open weights (Kimi) | $3.9B | — | — | Meituan/Long-Z; Alibaba; Tencent; HongShan | Private | | Zhipu AI | China | Open weights (GLM) | Undisclosed | Public | — | Public (HK IPO 2026); prior Alibaba, Tencent | HK IPO 2026 | | MiniMax | China | Open weights | Undisclosed | Public | — | Public (HK IPO 2026) | HK IPO 2026 | | Cohere | Canada | Enterprise / on-prem | $1.7B | — | Command A+ open-sourced May 2026 | Radical Ventures; Nvidia; AMD; Schwarz Group | Private | | Cerebras | USA | Compute | $2.1B | — | — | Fidelity; Atreides; G42; Tiger Global | Private | | Reflection AI | USA | Open weights | $2.13B | — | — | Nvidia; Disruptive; Sequoia; Lightspeed; DST Global | Private | | Together AI | USA | Inference cloud | $1.334B | — | — | Aramco Ventures; General Catalyst; Prosperity7; Nvidia | Private | | Hugging Face | USA | Hub | $400M | — | — | Salesforce; Google; Nvidia; IBM | Private | | LangChain | USA | Harness tooling | $260M | — | 126k+ stars, 60% dev share | IVP; Sequoia; Benchmark; CapitalG | Private | More than 70 national AI strategies are live. The strategic question has shifted from whether to have a national AI policy to which layer of the stack a country can own. Click a marker or a country below. The browser was the user agent of the open web: code on the user's side, negotiating with servers on their behalf. That role is being recreated one layer up. Above the model now sits the agentic harness — the orchestration loop, tools, memory, sandboxes, and permission model. It is where production difficulty concentrates, and where the open-vs-closed, owner-vs-renter contest restarts. Reversible and low-consequence. Fetching a document, querying a database, listing a calendar. These can largely be permitted by default; a bad read costs little and can be repeated safely. Side effects that are costly or irreversible. Sending a message, spending against a budget, modifying a record, executing a transaction. This is where confirmation, approval thresholds, cost caps and revocation must concentrate. They require owning the layers above it — the harness, the memory, the permission model — while those layers are still open. The 3.3% gap (at parity on coding, behind on reasoning and agentic), and open's OpenRouter token share, especially in agentic coding. Reverses if: token share stalls while the reasoning gap widens. The Terminal-Bench spread between lab-owned and independent scaffolds; MCP/A2A governance under the AAIF; the portable permission spec that still doesn't exist. Reverses if: the lab-harness lead widens, or a closed platform sets the permission standard first. Open-lab economics (ARR, raises, the Zhipu/MiniMax IPOs) against metered-pricing breakpoints (~2027–28), with sovereign capacity as counterweight. Reverses if: sovereign funding lapses or open-lab economics fail to scale. Tracked, not settled: misuse capability and how easily safety tuning strips from open weights; hard-friction zones, above all synthetic CSAM and NCII; whether NTIA's “monitor, don't restrict” holds. Reverses if: a major misuse event, or a shift from monitoring to restriction. There is a test you can run for the rest of this. Look at who is seated in the rooms where AI gets decided, and with what status. The day they seat the people who keep AI open, portable, and widely deployed on equal footing, the shift from renting to owning will have happened. The window is open now. It is closing slowly enough that we can pretend it isn't, and the lease is shorter than it looks. Build with us. In New Zealand's far north, a Māori broadcaster trains speech models for te reo — a language too small for any market — under a license that keeps the data with its people. PwC, one of the largest accounting firms in the world, fine-tuned an open model on the language of finance and runs it today for hundreds of clients, on its own hardware, with no per-token meter running. Researchers in Lausanne built an open medical model with the Red Cross, tuned to its humanitarian guidelines, and are preparing clinical trials at home and in Tanzania. In East Africa, farmers diagnose cassava disease with a model that runs on the phone itself, offline, in fields the cloud has never reached. In Switzerland, a public consortium trained a national model on public supercomputers and released all of it: weights, data, training code. None of them asked permission, and none of them could have rented this. They own it — that is the whole idea. Open-source and open-weight AI now anchor one of the fastest-growing builder ecosystems in the history of software. Hugging Face alone hosts 2.5 million public models and 13 million users. A third of the Fortune 500 are among them. On OpenRouter, where developers route real production traffic, open-weight models went from a sliver of usage to roughly a third by late 2025. Just six months later, the platform moves 25 trillion tokens a week — five times as much — and the largest single source of that traffic is an open model. Developers are responding to what the models can do and what they cost. And on both counts open has become the practical choice. This spring, the strongest closed model scored 60 and the strongest open model 54. A year earlier, the leading open model managed 22. Closed systems still lead on the hardest problems. But for what most builders actually ship — where price, control, and deployability matter — open models have crossed from promising to ready. Anyone still waiting for open source AI to grow up can stop waiting. It already has. Governments are moving, too. The European Commission has proposed an “open source first” rule for how public institutions buy AI, and Canada has set a national target to lift business adoption from 12 percent to 60. When communities, markets, and governments converge on the same thing at once, they are telling you where this is heading: toward more intelligence, in more hands, and owned by more people. None of this is inevitable, and the other future on offer is seductive. Picture a handful of validation machines reading the world back to you, smooth and confident and sourced to nothing you can check. The bazaar of a billion arguing voices is muffled by a polished concierge that answers to its owner. We got a preview this June, on a Friday afternoon, when one of the most advanced models went dark everywhere because a government sent a letter. Every business renting that model discovered an off switch that belonged to someone else. We have been here before. Mozilla exists because one company tried to own the front door to the web, and an open community rose up to make sure it never could. Twenty-five years later, someone is running the same play. We bet on open the first time. Open won. Together, we can do it again. Our belief is simple: the path forward is competition and interoperability. We believe in a world of many models, standard ways to plug them together, and the freedom to walk away from any vendor at any time. Open has a record here. It grew the pie and let more people own a slice of it. Read what follows as a map: where open AI is winning — some numbers surprised even us — and where it is exposed. A case that hides its weak points is an advertisement. The builders are already building. A rented future has deeper pockets; an owned one has more hands — millions more — and this story ends the same way every time it is told: the many, building in the open, outbuild the few behind walls. Build with us.

9

Quoting Kimi K3

Simon Willison · original → · 7/10 · AI: Kimi K3 model capabilities and system prompt
17th July 2026 Is there something I can actually help you with today? — Kimi K3, after refusing to leak its system prompt Recent articles - Kimi K3, and what we can still learn from the pelican…

17th July 2026 Is there something I can actually help you with today? — Kimi K3, after refusing to leak its system prompt Recent articles - Kimi K3, and what we can still learn from the pelican benchmark - 16th July 2026 - The new GPT-5.6 family: Luna, Terra, Sol - 9th July 2026 - sqlite-utils 4.0, now with database schema migrations - 7th July 2026

Items scoring 7/10 or above from 11 sources, scored by claude-haiku-4-5-20251001 on relevance to my interests. At most 3 per source.

Scoring categories & sources
  1. Local Wexford or South East Ireland news
  2. Irish or EU-wide affairs affecting citizens broadly: elections, new laws or policy being debated, cost of living, education — especially impacts on mid-life adults or teenagers. Never courts/crime stories.
  3. Irish news on a topic relevant to my interests
  4. Work and tech topics: networking, AI, Kubernetes, platforms, SaaS
  5. AI news including critical or anti-AI perspectives
  6. Gaming: PC gaming, indie gaming, retro gaming
  7. General interests: gardening, woodwork, cycling, fitness, travel
  8. Comics

Sources: Breaking News Ireland, Wexford Local, Hacker News, r/gaming, r/pcgaming, r/antiAI, r/indiegaming, Lenny's Newsletter, One Useful Thing, Newcomer, Simon Willison

Comics

Latitude and Longitude

XKCD · view →
NGS and IERS are complaining that they left CLEAR instructions to set the washing machine to WGS84 (G2296) instead of WGS84 (G730).

NGS and IERS are complaining that they left CLEAR instructions to set the washing machine to WGS84 (G2296) instead of WGS84 (G730).