--- title: Things I Learned - 28 Jun 2026 date: 2026-06-28T00:00:00+00:00 categories: - til description: 'I share weekly learnings: spotting AI writing via paragraph length, using `.git/info/exclude` for local-only Git ignores, and leveraging formal proof tools like Z3 and TLA+ to verify AI-generated code.' keywords: [git, z3, tla+, claude, deno-desktop, gpic] --- This week, I learned: - Every Substack feed has an RSS feed at `https://your.substack.com/feed`. [Substack help](https://support.substack.com/hc/en-us/articles/360038239391-Is-there-an-RSS-feed-for-my-publication). I used this to scan my browsing history to identify Substacks I visit - and subscribed to [Marcus on AI](https://garymarcus.substack.com/) - an AI sceptic AI asked me to read about. - Cloudflare let's agents create [temporary accounts](https://blog.cloudflare.com/temporary-accounts/) so that they can deploy and test. Enables trial and error - a powerful capability. - "They're on mobile but this is substantiative enough to warrant length." I spotted this in Claude's thinking when prompting on mobile. So, if I ask Claude something on mobile, it will give me shorter responses by default. Clever design - but something to keep in mind. If I want some heavy thinking done by Claude, better to do it on desktop than try to give it conflicting instructions. - [Giant Permissive Image Corpus (GPIC)](https://gpic.stanford.edu/) has 100 million Qwen tagged public images. Even as a simple searchable image catalog this has value. [Jeff Clark - Import AI](https://jack-clark.net/2026/06/01/import-ai-459-ai-oversight-is-difficult-scaling-laws-for-protein-folding-models-and-pricing-the-extinction-risk-of-ai-systems/) - [Ethan Mollick](https://www.oneusefulthing.org/p/co-existence-and-the-end-of-co-intelligence) had an agent test his book summary against multiple LLMs as readers to find out how they would recommend it - and optimized. This is a great practical use of agents as consumers, and material for my [When Data is for Agents, Not Humans](https://hasgeek.com/fifthelephant/fifthelephant-2026-call-for-submissions/sub/when-data-is-for-agents-not-humans-RPJ3syxmspKua6ADd44mD6) workshop. - [`kage`](https://github.com/tamnd/kage) is an easy CLI to clone websites and read offline. For example, `kage clone https://simonwillison.net/2026/Jun/ -o ~/tmp/site --scope-prefix /2026/Jun/ --max-depth 1` clones all Jun 2026 articles from Simon Willison's blog. Then `kage serve ~/tmp/site` serves it locally. While it's easy, the only time I need this is on a flight, and in that case, a local RSS feed app works better. I'm using [`newsboat`](https://newsboat.org/) for that. - To me, the clearest [sign of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) from the [Wikipedia:AI or not quiz](https://en.wikipedia.org/wiki/Wikipedia:AI_or_not_quiz) was consistent paragraph lengths. I got the first 3/3 wrong, but once I used this heuristic, I got 6/7 right. Updated my [LLM Smells](https://github.com/sanand0/blog/commit/1f0535fef1bd6434b0b28804ef8fbb41ae1d8d91). - The files `.git/info/exclude` and `~/.config/git/ignore` are also ignored by git, like `.gitignore`, but useful if you don't want to commit them into the `.gitignore` file. For example, `.DS_Store` makes sense only for Mac machines, not each repo. `.vscode/` makes sense only for VS Code users. [Nelson Figueroa](https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/) - [Justin Poehnelt](https://github.com/jpoehnelt), author of the brilliant [Google Workspace CLI `gws`](https://github.com/googleworkspace/cli/), was fired for it. There have been no updates for 3 months, but none may be required - it feels perfect. [X](https://x.com/JPoehnelt/status/2069482265953087602) - [Lore](https://github.com/EpicGames/lore) is a centralized version control system for large binaries. If you have large binaries (e.g. images, videos, ...) that multiple people edit, it's better than Git LFS or Perforce. [ChatGPT](https://chatgpt.com/share/6a3bd941-7458-83ee-a61c-b145913b8cf3) - [Deno Desktop](https://docs.deno.com/runtime/desktop/) lets you use JS to build desktop apps. I tried it. It's easy to install, compact to code, leverages familar web technology, and compiles to multi-platform binary. The binaries are a bit larger than I'd like, though - 80MB for a Hello World on Linux/Windows and ~70MB on Mac. - Codex reported that `You have 2 usage limit resets available. Run /usage to use one.` [This thread](https://community.openai.com/t/flexible-rate-limit-resets-for-codex-and-a-method-to-get-a-reset/1383470) has context. After resetting, the next reset might be 7 days _after_ the reset, though [(source)](https://community.openai.com/t/flexible-rate-limit-resets-for-codex-and-a-method-to-get-a-reset/1383470/25). - After having a child, _fathers_ are affected biologically, too. Testosterone drops, cortisol & prolactin & estrogen rise, the brain rewires for empathy and threat detection - and of course, there's less sleep. These sometimes lead to "Paternal Postpartum Depression" - something I didn't even know was a thing. The havoc kids wreak upon us! 🙂 [Gemini](https://gemini.google.com/share/a8b626f574ea) - With AI writing more code, formal code proofs are becoming more accessible. You just need to ask a coding agent to prove / disprove a function. You can use: - [Z3](https://github.com/z3prover/z3) to find/prove whether a counterexample exists. Best default. - [Dafny](https://dafny.org/) to prove that code obeys a spec. Best for real algorithmic code. - [Alloy](https://alloytools.org/) to find loopholes in relational models, schemas, permissions, and workflows. Best for data. - [TLA+](https://lamport.azurewebsites.net/tla/tla.html) to check whether stateful, concurrent, or agentic systems can evolve into a bad state. Best for systems / workflows. - .. and there's a long tail of these. - [Python is named after Monty Python](https://en.wikipedia.org/wiki/Python_(programming_language)#Naming), not the snake. I knew this, but forgot! - Python now has multiple cross-platform app paths: [PyInstaller](https://pyinstaller.org/) and [Nuitka](https://nuitka.net/) for executables, [Kivy](https://kivy.org/), [Flet](https://flet.dev/), and [BeeWare/Briefcase](https://beeware.org/) for GUI/mobile/desktop apps, and [PyScript](https://pyscript.net/)/[Pyodide](https://pyodide.org/) for browser/WASM apps - a route that became more serious because Pyodide-compatible WebAssembly wheels can now be published directly to [PyPI](https://pypi.org/). - On the one hand, AI is writing code, so there's no point learning Python. On the other hand, AI is writing code mostly in Python - so THAT's what you need to learn more. I think we should teach Python _using_ AI, that is, teach how to write and debug Python code _using_ AI. That'll end up teaching skills people will _really_ need. - Computational thinking = Decomposition + Abstraction + Algorithm design + Pattern recognition. In AI, that translates to = Framing + Context engineering + Orchestration (harness engineering?) + Verification design. Maybe I'd add Assetization / Systems.