oops, forgot to post in here about these (not that anyone on cohost uses splint :eggbug-sob:)
1.2.2 big changes:
- Differentiate between
&&.rest args and parsed lists in:on-matchhandlers by attaching:noahtheduke.spat.pattern/restmetadata to bound rest args.- Allows us to write patterns that reuse the same binding var in single element and rest args positions:
(if ?x ?y nil)and(if ?x (do &&. ?y) nil)differentiate?ywith the above metadata.
- Allows us to write patterns that reuse the same binding var in single element and rest args positions:
someone i knew roughly 6 years ago passed away at her own hand. this is the third one in the last year, which doesn't even go back to my wife's mother 1.6 years ago.
there are 6 million many ways to die and i know that the older i get the more people i know will die, but this is a particularly gutting form.
she had a kid, 7 or 8 years old at this point.
Continue reading →i’ve always liked kids but raising my own kids has now made every kid i see my own kid, invisible cities style.
it’s both endearing and scary. if i think about it too much (like when chosting), makes me cry.
Started playing card shark on my switch and it’s great. The performance required has made it much more dramatic and challenging even in this first hour. Can’t wait to see where it goes next.
since 1.0, i've done a fair amount of work:
- now checks
:spat/litmetadata in patterns to allow patterns to use the "special" symbols the dsl is looking for as plain data:'(defn example [^:spat/lit _]will look for the symbol_, not match on anything. - wrote a bunch of documentation for rules and patterns and how they work and are built.
- cleaned up the rules documentation pages quite a bit: outside links, an
:updatedfield to show the most recent version a rule was changed, a nice<hr>between each rule to ensure visual clarity. - moved 20+ rules from
linttostylegenres because they're purely style related. - added
ctxto:on-matchfunction signature, allowing for global config to be passed in. - added
:chosen-style, which allows for rules to define different "styles" instead of having multiple conflicting rules for the same scenario. - added
"markdown"as an output format. same as"full"but will use###headers and fenced code blocks to make it look pretty. i'm not sure the use-case here, but kibit has it and it was easy to add.
shit's coming along nicely and i feel good about it. still fast as hell

Watched Vivo again with my family cuz I’ve been playing the music. Still amazing, has both my wife and I crying at multiple points. Death is sad, turns out, and stories centered in grief and resolution are powerful even when wrapped up in catchy songs and beautiful art.
The cgi isn’t as good as a Pixar film, they’re best in class, but the commingling of 3d and 2d in the memories/imagination sequences is perfect, and I like the stylized bodies and faces.
Continue reading →company fired some of my coworkers. i somehow survived; i suspect because i'm cheaper than them. doesn't feel so good.
gonna get saddled with my ex-coworker's project that he's spent a month preparing for and was going to get me up to speed on next week, lol. he's written some documentation but let's be real, there's a lot of shit in his brain he didn't put to paper and now i have to start from nearly 0 without him or our project manager (also fired) and will probably be expected to meet the same deadline.
in the big meeting where the ceo talked about it after it happened, he said that the company is still doing well and we have 4 years of runway and that there's no need to panic and that we're still hiring for some positions. shameless
Continue reading →sometimes it's like i'm jacked into the matrix, the work i have in front of me consumes not just my field of vision but my entire raison d'être. every part of my brain is tuned for the problem space, every breath drives me forward like ramming speed in ben-hur, the words and thoughts shift around in front of my eyes. my thoughts get so incredibly loud that i can't hear my wife from across the table.
other times, my attention feels like the subject of my focus was burned with the fire that burns things out of time. in a meeting and not picking up a single word my coworker is saying. looking at code and being unable to hold the previous expressions in my head as i scan my eyes across the screen. feeling so unmoored from my body and my experiences that i can't form sentences.
frankly, both are exhausting.
i don't like waiting around for version 1.0. 0ver is funny but annoying. BE NOT AFRAID. so i've released splint 1.0.
it has disabling rules, it doesn't choke on any code i've thrown at it so far, and the set of rules it has is pretty great. there's loads more work to be done, such as moving most of the "lint" rules to "style", which will invariably break folks config lol, but why wait?
the specific updates this time are:
Continue reading →sometimes, i have a conflict with my wife and i'm unsure if i did the "right thing", if i acted in a way that's consistent with my values and my ideal self, and if there's space between our shared expectations that i can either stand firm and say, "i acted in an acceptable manner, it's not on me to manage this" or i can bend and say, "i acted inappropriately, i'm sorry, i'll try to do better in the future."
that is hard to know and i've spent a lot of time over the years thinking about it in both directions applied to many various situations.
my frustration comes when i feel like i don't have a good perspective on the situation and i want feedback or outside help. this is the perfect place for a therapist, but for various reasons, i no longer have access to one. so i could reach out to a friend or family member. but who do i want to burden with whatever nonsense i'm experiencing?
Continue reading →I did it, nerds. I added support in splint v0.1.119 for magic comments aka directives aka clj-kondo style #_:splint/disable or #_{:splint/disable [lint/plus-one]}. This means that folks can now pepper their code-base with stuff that has very limited utility! I'm very excited to see this become a piece of infrastructure when it certainly should not.
I'm up to 3300 lines of Clojure, which is fucking sick. This is maybe the most code I've ever written from scratch for a single project. I'd love for other people to contribute, but as of right now, only one person has tried, and they just fixed a typo in the readme.
If you use Clojure, please check this out, I would love to get your feedback.
Quick follow-up because I meant to post that last night and accidentally left it in my drafts.
I came up with the idea of parsing #_:splint/ignore the way clj-kondo does it: attaching it as metadata to the following form and then check for the metadata when rules checking. I modified my fork of edamame and it works great, but it's a bit more bulky now. Seems to add a very slight increase in parsing time (2-5ms) which is an acceptable increase.
I posted in #edamame on Clojurian slack about it, and Borkdude (maintainer of edamame and clj-kondo) recommended using str/replace to convert #_:splint/ignore to ^:splint/ignore, which would remove the need for a fork while still attaching the metadata. It works, but it's much more error-prone; regex is a wild beast and cannot be contained.
I want another parser because I want access to comments. Without comments, I can't parse magic comments, meaning I can't enable or disable rules inline, only globally. That's annoying and not ideal. However, every solution I've dreamed up has some deep issue.
Continue reading →After lots of work, I have a "good enough" version of splint, my new Clojure linter, that I can now share it with y'all. It has 73 rules, extremely minimal config and cli, and runs faster than every other linter on the market while being only moderately dumber.
I have lots of big plans for this bad boy but for now, suffice to say that it works and it's fast and it's pretty dang cool to make stuff.
I’ve named my new clojure linter splint, a portmanteau of spat and lint. Spat is the name of the s-expression pattern matching/regex library I wrote, the name also a portmanteau from s-expression and pattern.
Why another linter? Because I am dissatisfied with the current crop of them.
Continue reading →Clojure’s best linter, clj-kondo, is pretty dang great. It covers a lot of ground: checks syntax, provides light type checking, tracks variables and usage, an entire hook system for linting/reading custom macros statically (without code execution), etc. it’s quite extensive.
Continue reading →I feel like RRR showcased a style of melodrama that I don't see super frequently. The term that comes to mind is "legibility", a word/concept that @austin has placed into my brain. RRR doesn't try to use lots of dialogue or subtle acting, it leans into big emotions in all directions and keeps both the content and conveyance relatively easily understood, but then treats those big emotions as real and legitimate.
Mild spoilers below:
Continue reading →In release v114, Francesco Pellegrini fixed a whole mess of bugs, added set-mark command, and added some tests to cover bug reports we couldn't reproduce. I added compiling css and cljs in Github Actions, to catch basic compiler errors.
I have just released Null Signal Games' newest set Parhelion on jinteki.net. (Release notes here.)
My life has been a mess the last year and it pains me that I don't have the time or availability to put 20+ hours of work into jnet anymore, as it desperately needs it, so please accept my humble apologies for the long delay between releases. Congrats to the whole jnet team for their hard work and tireless efforts in implementing 120 new cards in the span of a couple weeks in preparation for this day.

:eggbug: 😏 :eggbug: