Chris Penner's Avatar

Chris Penner

@chrispenner.ca

FP and Programming languages nerd Building the Unison Language & Unison Share πŸ“Victoria BC πŸ‡¨πŸ‡¦ https://chrispenner.ca

541
Followers
601
Following
245
Posts
15.11.2024
Joined
Posts Following

Latest posts by Chris Penner @chrispenner.ca

Happy to announce Unison Computing is branching out into consulting!

iIf you'd like a hand with your project you'd be hard-pressed to find a better team to help, drop us a line 😎

19.02.2026 21:04 πŸ‘ 7 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
GitHub Actions Is Slowly Killing Your Engineering Team - Ian Duncan Why GitHub Actions is the Internet Explorer of CI, and why Buildkite offers a better path forward for teams that care about developer experience.

www.iankduncan.com/engineering/...

06.02.2026 23:07 πŸ‘ 5 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Release release/1.1.0 Β· unisonweb/unison What's Changed Features: The dependents command now work on constructors and ability requests. (#6115) Support for "Edit Definition" and "Open on Share" in the Unison Language VS Code extension v1...

πŸ“° UCM 1.1.0 is out!

* `dependents` can search by variant, not just type or ability name
* New built-ins for Argon2id hashing
* VS Code actions: Edit Definition & Open on Share
* MCP tool: `share-project-info`
* Faster bytes ops & improved run command

29.01.2026 17:58 πŸ‘ 6 πŸ” 4 πŸ’¬ 0 πŸ“Œ 0
GitHub - ChrisPenner/session-sauce: Shell plugin for managing tmux sessions Shell plugin for managing tmux sessions. Contribute to ChrisPenner/session-sauce development by creating an account on GitHub.

I made this tool for managing workshop sessions in tmux and I've used it *hundreds of times* per day every day for 6 years now without any hiccups; if you're looking for a good way to manage your terminal sessions maybe this is it.

github.com/ChrisPenner/...

25.01.2026 22:04 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Unison's got a C FFI! πŸŽ‰

If you were waiting for a reason to try Unison, now's a good a time as any :)

21.01.2026 22:39 πŸ‘ 9 πŸ” 3 πŸ’¬ 0 πŸ“Œ 0

"unspecified" behaviours are fun too, for instance in JSON duplicate keys aren't disallowed, and there was at least recorded case where a middleware validation layer used the first value of a key and the application used the last value of a key, which was never validated. Chaos ensues.

14.01.2026 22:38 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

As it happens, labour is currently the primary means of non-upper-class folks getting the money they need to live, so any automation which threatens labour directly threatens their way of life. In order for automation to thrive it's important to first establish better systems for sharing value

10.01.2026 22:52 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Absolutely. When folks tell me about how much more productive AI has made them, my conversation with them goes like this: "Oh that's great! I'm sure you've gotten a raise then right? No? Oh well at least you must not work as many hours now right? No? What's that? Your co-worker got laid off?"

10.01.2026 22:49 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I hadn't heard of them but good shout, looks great! I'll give that a go πŸ‘

04.01.2026 03:33 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I'm learning that the model for the fully-formed shape wasn't too bad, but splitting it up into individually printable parts for assembly is much trickier πŸ€·β€β™‚οΈ

02.01.2026 01:15 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

Learning more #OpenSCAD in order to bring a #kumiko inspired table-lamp to life :)

02.01.2026 01:13 πŸ‘ 6 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It's absolutely bonkers how much of modern society is still dependent on staying on hold for 2 hours on an unreliable connection when at any moment your thumb could slip or you could drop the call and there's just no way to get that call back except to wait another 2 hours πŸ˜‘
#WestJet

20.12.2025 07:08 πŸ‘ 5 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Control.Monad.Trans.Free.Church

When I'm feeling impure I go to Church to improve...

hackage.haskell.org/package/free...

09.12.2025 20:29 πŸ‘ 7 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

In any active software project new bugs are always being introduced.

Bugs that are important or easy to fix are typically prioritized.

This means that as the project ages, the pool of bugs inevitably becomes a majority of the 'difficult to fix' or 'low-priority' variety 😒

09.12.2025 20:22 πŸ‘ 7 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
@unison/advent-of-code | Unison Share πŸŽ„Template project with stubs for Advent of Code

🌟 It's time for #AdventOfCode! That means it's a great month to pick up a new programming language! Try it in Unison this year! 🎁

02.12.2025 00:07 πŸ‘ 9 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

This is actually quite brilliant, up to and including the final sentence πŸ”₯

01.12.2025 11:09 πŸ‘ 27605 πŸ” 10759 πŸ’¬ 546 πŸ“Œ 920
Preview
atproto-experiments A foundation for building tools on the AT Protocol using Unison Programming Language.

Sharing atproto-experiments: a foundation for building AT Protocol tools using @unison-lang.org . And the first tool is to sync Bluesky replies as @leaflet.pub comments. #atproto #unisonlang #leafletpub

26.11.2025 16:38 πŸ‘ 26 πŸ” 8 πŸ’¬ 3 πŸ“Œ 0
Preview
Unison: A New Programming Paradigm print(("Unison", newline)); print("A new programming paradigm") Dejan MiličiΔ‡ JetBrains

In "a new programming paradigm" Dejan Milicic goes into why @unison-lang.org is so unique and useful: docs.google.com/presentation...

15.11.2025 09:26 πŸ‘ 13 πŸ” 3 πŸ’¬ 1 πŸ“Œ 1

Want to try a radically innovative programming language?
Unison is ready!

Unison is approachable, user-friendly, and has a great community of friendly folks :)

On top of that it has mind-bending features like serializable function closures and built-in distributed programming tools!

25.11.2025 19:31 πŸ‘ 31 πŸ” 6 πŸ’¬ 1 πŸ“Œ 0
Preview
Ditch your (mut)ex, you deserve better Mutexes are unreliable tools, let's explore better alternatives.

I collected my thoughts on why mutexes suck; and what we can do about it.
chrispenner.ca/posts/mutexes

#STM #concurrency #parallelism #mutexes #Haskell

11.11.2025 19:51 πŸ‘ 22 πŸ” 3 πŸ’¬ 0 πŸ“Œ 0
Preview
Distributed system engineering in Unison: Volturno Β· Unison programming language We look at the design of Volturno, a streaming engine with exactly-once processing, to illustrate why Unison Cloud is a great enabler for distributed systems builders.

πŸš€ New deep dive: Distributed System Engineering in Unison

In our latest blog post, take a look at the design of the Volturno library: a distributed stream processing engine built atop Unison Cloud.

www.unison-lang.org/blog/volturn...

04.11.2025 20:26 πŸ‘ 10 πŸ” 6 πŸ’¬ 0 πŸ“Œ 0
Preview
@dfreeman/playbill | Unison Share A walkthrough of building UIs with Proscenium, including several example apps.

🀯 Unison in the browser!?

Dan Freeman's new library, Proscenium, runs Unison code in WebAssembly.

Its companion library, @dfreeman/playbill, contains a walk-through of various features and live examples on Unison Cloud!

Play a game in your browser entirely in Unison; better yet, write your own!

28.10.2025 18:01 πŸ‘ 7 πŸ” 4 πŸ’¬ 0 πŸ“Œ 1

Congrats Steve! Knock down those barriers to jj adoption one at a time!

P.s. building a code collaboration is good fun with interesting challenges, I’m sure you’ll enjoy it.

23.10.2025 07:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Starting the UCM and setting up a scratch file
Starting the UCM and setting up a scratch file This video covers the basics of starting the Unison Codebase Manager (UCM) and writing your first bits of Unison code in a scratch file. We walk through: * Installing Unison on your system (Mac, Linux, or Windows) * Starting the UCM in a working directory * Creating .u scratch files and ensuring the UCM is watching for changes Helpful links: * Install Unison here: https://www.unison-lang.org/docs/quickstart/#step-1-install-unison * Get the UCM Desktop app: https://github.com/unisonweb/ucm-desktop/releases * Join the Unison community: https://www.unison-lang.org/discord

πŸ“½οΈ Here's a quick video for anyone just getting started with Unison.

The gist of it: install the UCM, create a scratch file in the right place, and have fun programming!

22.10.2025 18:19 πŸ‘ 9 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Preview
Exploring Arrows for sequencing effects Monads are <em>one</em> way to sequence effects, but they're not the only way!

Don't get too hung up on #Monads, there are other ways to sequence effects; including Arrows; and they provide even better static analysis!

Let me know what you think :)

#Haskell

chrispenner.ca/posts/arrow-...

21.10.2025 02:41 πŸ‘ 10 πŸ” 4 πŸ’¬ 1 πŸ“Œ 0

Can confirm that I’ve had nothing but problems with Spotify support. Dont worry though it’s not a sign of beef or anything, @danimalcannon.com and I are cool 😎

17.10.2025 20:01 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

lol, and when I implemented my own public wrapper over it, and implemented `publicJWKFromPrivateJWK` the AI auto-complete confidently returned the private JWK as-is, asserting that the library "takes care of it for you" which AFAICT is NOT the case... the next generation of app security is cooked.

15.10.2025 22:08 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Even the #Haskell `jose` library doesn't have a separate type for public vs private JWKs, even a phantom type would do the trick.

TBH this is just as bad as how generated certs are named key and key.pub;

If you tab-complete you'll get the private one every time and there's no `.private` as a hint

15.10.2025 21:54 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I'd really like to speak with whoever thought it was a good idea for the public and private JWK's to be represented by the same type, have the same name, with just a few missing parameters...

Ah yes, the presence or absence of this "d" parameter could tank my entire company... seems safe to me :|

15.10.2025 21:54 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

At the moment I use STM as my lowest-level primitive; then leave it up to the STM implementors to use the mutexes haha.

STM has all the channels, queues and vars you need to do any form of actors or CSP you like :)

14.10.2025 00:56 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0