HN user

dunham

2,563 karma

I'm a Seattle area software engineer. I've worked on both front end and backend for a couple of decades using C++, Java, and Typescript.

I'm interested in programming language theory, compression, and cryptography. Recently I've been helping out with the Idris2 language and wrote the dependent typed language Newt.

I'm currently looking for new opportunities (local or remote).

https://dunhamsteve.github.io

Posts0
Comments1,056
View on HN
No posts found.
Road to Elm 1.0 16 days ago

Not exactly removed, the feature was still there, but could be used only if your module was in Elm namespace (the compiler checked). It was kind of a "no soup for you" situation, which bothered me.

Elm served its purpose for me - an example of a small language with great tooling and error messages. And the strictness was helpful in learning to do things the "proper" way in the Elm model, even if I did reach for escape hatches in later projects. E.g. writing a notion-like application in Elm, I had to walk through my data twice - once to render it and another time to collect cache misses. With hyperapp, I broke purity a little and accumulated the information on the side.

On the last exercise of world 6, rewrite the highlight, "cw" leaves the "a" at the end of the line. Both "c$" and "C" work. I didn't know about "C" until I read the web page - I've been using c$ for that.

Is this related to web2js[1], which has been around for a while? It compiles the pascal code of TeX to wasm.

It looks like the live demo is no longer up, but it did run latex in the browser and render the dvi output to html. The wasm for TeX is about 495kb / 88kb compressed, but the memory image for LaTeX was a bit larger.

[1] https://github.com/kisonecat/web2js

Back in the 90's I had a Matrox card that would crash the machine if the hardware cursor changed at the wrong time. I think it was related to VBI, but it's been a while.

Linux resolved this issue, but to work around it on windows, I changed my cursor to an animated dinosaur, which was built into the OS and had the side-effect of disabling the hardware cursor.

ublock origin lite is blocking a bunch of stuff for me, and things are unbearable when I turn it off.

For many sites, especially news sites, I toggle javascript off. It's reasonably easy to do per site in chrome (click left of location bar and "site settings"). I don't know if there is an easy way to do this per site in firefox.

So far I've stuck with chrome for a few reasons:

- Mozilla doesn't implement desktop PWA and has cancelled the project. I use this. - Mozilla was using about twice as much memory as chrome. (I need to revisit this, Chrome seems to have gotten fatter.) - Safari is a royal pain to write your own extensions (last I checked you need to create an application and bundle the extension into it). - I like the multiple profiles in Chrome to sandbox things like my google login. There may be a firefox equivalent, however.

I probably should have clarified that I'm on an M1 then (a macbook pro, so there is a fan). I didn't realize the newer ones get warmer.

I recently saw this with the logseq api - the published api was an auto-generated stub. So I tried to grep the source code for the function and found detailed documentation written for claude. So I guess one benefit of all of this is that it's making people actually document things and maybe plan a little bit before implementing.

For caveman debugging, if I'm not sitting in a monad, I usually reach for something like Debug.Trace. Typically that's in Idris or my own language, but I see that haskell has it too.

For my own language, I have the syntax highlighting set to put the `trace` keyword in red, so I can easily clean up.

I was bit by this years ago when our test cases failed on Linux, but worked on macos. pdftotext was behaving differently (deciding to merge two lines or not) on the two platforms - both were gcc and intel at the time. When I looked at it in a debugger or tried to log the values, it magically fixed itself.

Eventually I learned about the 80-bit thing and that macos gcc was automatically adding a -ffloat-store to make == more predictable (they use a floats everywhere in the UI library). Since pdftotext was full of == comparisons, I ended up adding a -ffloat-store to the gcc command line and calling it a day.

and need to be prepared to manage things like upgrading firmware

At one point in the early 2000's, my brother was soldering new capacitors onto dell raid cards. (I like to call that full-stack ops.)

I know it is out of scope for this article, but there are variants where the operations are monadic rather than applicative and the shape of the graph can change depending on values. And also variations with state - where history can be taken into account.

Jane street briefly summarizes some options here: https://blog.janestreet.com/breaking-down-frp/

And they have an interesting talk on the trade-offs and how their own system, incremental, evolved: https://blog.janestreet.com/seven-implementations-of-increme...

iNaturalist 4 months ago

I've been using birdnet, but it seems to want an internet connection to do the identification and sometimes that is dicey when there is a bird that I want to identify. (Also birds seem to shut up around the time you get the app open.)

I'm going to give Merlin a try - the app has UI to download the network for offline use.

Yeah, a few years ago I tried the free ones, but eventually settled on Comic Code. I've been using it ever since - it's pleasant to code with. (If anyone is considering this - the "essentials" set with bold/italic is around $30. You don't need the full set.)

XML is a cheap DSL 4 months ago

Worse than that - people will start tagging "this value is a Date" via comments, and you'll need to parse ad-hoc tags in the comments to decode the data. People already do tagging in-band, but at least it's in-band and you don't have to write a custom parser.

As someone who cut their teeth on a sun "programmer" layout, I really need control to be in that position. I might try mapping the vestigial control key to escape though. Or maybe the hack that dtj1123 describes (tap is escape, hold is control), if I can pull that off on macos.

Lil' Fun Langs 5 months ago

Yeah it has been fun. Lots of directions I can take it:

Since I have an LSP, I've got faster turn around and can add editor functionality that requires poking at the compile state. That's my current thread.

I have a C backend on hold, while I think about how I want to represent data without boxing everything and about whether I want to do reference counting or GC. (Reference counting unlocks "counting immutable beans" if I decide to give that a go, but I'd also like to try implementing GC someday.)

I should do some browser interop stuff and write something other than a compiler in my language.

And there are language enhancements: implementing "Do unchained" from Lean, automatic handling of lazy and/or async modalities, deriving implementations of classes, ...

Lil' Fun Langs 5 months ago

I've always found OCaml's (* ... *) comments annoying, because it needs shift for both characters. But I suspect it's easier to type on a french keyboard.

Knuth solves the bracket issue by redefining his keymap to swap () with [] and + with = (macos keymap files found at the bottom of this page: https://www-cs-faculty.stanford.edu/~knuth/programs.html )

Facebook is cooked 5 months ago

I commented on a relatives post about a giant zucchini, and started getting posts about zucchinis in my feed. A couple of years ago, Facebook noticed that I stopped scrolling for calvin and hobbes comics and started showing me a bunch of those for a while.

I finally got the deletion thing to not error out and am almost at the end of the 30 day deletion period.

It's been a very long time, but my recollection was the Mosaic did images first, and it was non-standard. (The beginning of the end.) I might be thinking of some other feature though.

I was also disappointed that the editing went away after the first browser. (There was "Amaya" which had editing, but it was a research thing and not a commonly used browser.)