kind is a tool for running local Kubernetes clusters using Docker container “nodes”. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.
Looks like a good alternative to microk8s without the issues associated with minikube, k3s (which is a great project, but not 100% k8s compatible), &c.
I need to figure out the situation with my stock. The whole thing is a bit of a mystery to me, and I’ve treated it like money that doesn’t exist until now. While not a bad thing in principle—it’s volatile enough that you can’t depend on it—it’s still something I should understand better.
A notation for describing various kinds of graph and diagram that embeds well into Markdown and the like.
Joplin recently gained support for it, making learning this useful for me.
I currently use cgit for repos.talideon.com, but stagit looks like a good option.
An in-browser Markdown editor. This site uses Markdown the the notes fields, so it’d be a quality of life upgrade to add something like this.
Edit: Maybe not. The component doesn’t include everything out of the box, and the actual editor is hosted elsewhere, which I’m not exactly gone on. I guess I could self-host, but it looks a bit of a pain.
The Teamwork Kit is a collection of methods that helps teams build trust and deliver great work together. You can download the handbook, facilitator’s guides, sample presentations, and template posters and use them with your team. With the right mindset, any group can become a creative, resilient team.
Haven’t read this. Might be interesting.
Learn 6502 assembly language by building Snake. There’s a built-in assembler and simulator.
If you thought that Haskell was strongly typed, think again. Languages like Agda employ a type system embodying a very powerful logic, which lets us express the meaning of our programs much more precisely. Computers can understand our programs better too, allowing for tools that are more helpful than in average languages.
In this session we will interactively develop a type checker for a simple language, then give the language semantics by embedding it into Agda. This will allow us to prove a simple optimization on the language safe, by verifying that it preserves the meaning of programs.
PLEAC is a good set of representative code in different langauge.
Though Celery’s always been a pain to deal with because it’s so heavyweight.
The Utilization Saturation and Errors (USE) Method is a methodology for analyzing the performance of any system. It directs the construction of a checklist, which for server analysis can be used for quickly identifying resource bottlenecks or errors. It begins by posing questions, and then seeks answers, instead of beginning with given metrics (partial answers) and trying to work backwards.
Here are the checklists for:
Server daemons (such as PostgreSQL or Nginx) and applications (such as a Rails or Django app) sometimes offer a configuration parameter for a path to the program’s logfile. This can lead us to think of logs as files.
But a better conceptual model is to treat logs as time-ordered streams: there is no beginning or end, but rather an ongoing, collated collection of events which we may wish to view in realtime as they happen (e.g. via
tail -f or
heroku logs --tail) or which we may wish to search in some time window (e.g. via grep or Splunk).
I’ve come to the conclusion that, for me, ORMs are more detriment than benefit. In short, they can be used to nicely augment working with SQL in a program, but they should not replace it.
The original Lisp version, and some OCaml implementations in a git repo.
This gives Haskell an ML-like module system.
Roughly speaking, physicists tend to have three different kinds of lazy critiques of philosophy: one that is totally dopey, one that is frustratingly annoying, and one that is deeply depressing.
TL;DR: you have to think more about what your writing, which causes it to stick better.
When done with pen and paper, that act involves active listening, trying to figure out what information is most important, and putting it down. When done on a laptop, it generally involves robotically taking in spoken words and converting them into typed text.
vmm is the easy to use and configurable command line tool for administrators and postmasters, to manage domains, alias-domains, accounts and relocated mail users.
I have a hacky scripts that does something like this, but could do with something a little better. The original project is dead, but there’s a friendly fork that’s still maintained. I’d like an SQLite backend.
Modulario is a distinctive geometric sans with a dignified, Roman-inspired uppercase designed for clarity. The influence of handwriting can be detected in a lowercase which includes a uniquely scripty ‘s’.
It’s free for personal use, and the commercial version is quite reasonably priced.
- Be paranoid
- Keep it simple
- First rule of optimizing: don’t
- Don’t just fix the bug; fix all possibility of it ever happening again
- Question assumptions constantly
- Think long term. Slow down, it goes faster
- Care about your code
- Cheap, fast, right: pick two
Wilson’s algorithm uses loop-erased random walks to generate a uniform spanning tree — an unbiased sample of all possible spanning trees. Most other maze generation algorithms, such as Prim’s, random traversal and randomized depth-first traversal, do not have this beautiful property.
If you look at the colourised version, the patterns kind of remind me of a dragon curve.
Learn Prolog Now! is an introductory course to programming in Prolog.
An abbreviated version in PDF form is available for download from that page.
Mind, there’s a certain degree of bias here: depending on the area you work on, not all of those area may need to be as strong as if you were working in others.
If I ever decide to use ledger or the like.
Also: The accounting quest: Ledger.
Irmin is a library to persist and synchronize distributed data structures both on-disk and in-memory. It enables a style of programming very similar to the Git workflow, where distributed nodes fork, fetch, merge and push data between each other. The general idea is that you want every active node to get a local (partial) copy of a global database and always be very explicit about how and when data is shared and migrated.
Go has yet to fix any of these problems in any substantial way in the six years since this article was written. Make of that what you will, but they’re all real issues.
The trickiest part of speeding up a program is not doing it, but deciding whether it’s worth doing at all. There are few clear principles, only rules of thumb.
Also good is this Fourier Transform visualisation.
An important result in computer science and type theory is that a type system corresponds to a particular logic system.
A colleague of mine was stuck attempting to do something in Haskell that seemed conceptually simple but resulted in a type error. While a particular form of polymorphism, common in object-oriented languages, translated very well to Haskell, a related technique was not permitted by the language’s type system.
In this post, I’d like to outline a simplified version of the task and how this limitation was overcome. Hopefully you’ll see that by working with the type system rather than against it, we find unexpected benefits in the resulting design.
Fuzzing SQLite with afl and seeing what falls out.
Compare countries by dragging them around a map, removing the distortions of the usual Mercator projection.
I only understand a tiny fraction of this, and the paper is well beyond me. I’m only half way through the article, and it’s a very interesting read.
TL;DR: Successive, well intentioned, changes to architecture and technology throughout the lifetime of an application can lead to a fragmented and hard to maintain code base. Sometimes it is better to favour consistent legacy technology over fragmentation.
- Part 2: When Results Differ
- Part 3: Confidence, Credibility, and why Frequentism and Science do not Mix
- Part 4: How to be a Bayesian in Python
- Part 5: Model Selection
And Frequentism and Bayesianism: A Python-driven Primer.
Supervisor trees are one of the core ingredients in Erlang’s reliability and let it crash philosophy. A well-structured Erlang program is broken into multiple independent pieces that communicate via messages, and when a piece crashes, the supervisor of that piece automatically restarts it.
This may not sound very impressive if you’ve never used it. But I have witnessed systems that I have written experience dozens of crashes per minute, but function correctly for 99% of the users. Even as I have been writing suture, I have on occasion been astonished to flip my screen over to the console of Go program I’ve written with suture, and been surprised to discover that it’s actually been merrily crashing away during my manual testing, but soldiering on so well I didn’t even know.
A bit old, but this is still mostly relevant. It could certainly do with some updating in places. For instance, these days, you’re better off using ProxyJump rather than ProxyCommand.