HNHacker News
TopNewBestAskShowJobs

solomonb

1,305 karma · joined December 2, 2019

Software engineer with interests in programming language theory and type theory.

I also like compost.

and radio.

blog.cofree.coffee www.kpbj.fm www.kchungradio.org

ssbothwell_at_gmail_dot_com

submissionscomments
solomonb··on Jimi Hendrix was a systems engineer
I strongly believe that if you set aside genre preferences the solid body electric guitar coupled to a tube amplifier is objectively the greatest electronic instrument ever created.

All other electronic instruments, with the one exception being the Theramin, have a fundamental problem with human expression. There is an unsolvable disconnect between what the performer's actions and their audience.

See: https://www.scribd.com/document/55134776/48787070-Bob-Ostert...

With an electric guitar you get the physicality and dynamism of an acoustic instrument with the complex timbres and extended technique possibilities of an electric/electronic instrument.

There are complex and musically significant feedback loops occurring across many dimensions that lead to extremely complex transformations of timbre via both traditional music theoretical techniques and the physics of a tube amplifier combined with an inductive load (the guitar pickup).

Its really crazy how much more dynamic and complex this can be then even a highly sophisticated modular synthesizer or whatever. Even the way you over load the power supply in a tube amplifier can be manipulated on the fly to enhance and transform timbre.

Then on top of all that it is so incredibly physical that a performer like Jimi Hendrix can manipulate these systems and have the audience intuitively understand what he is doing. Never in a million years would THAT be possible with any other electronic instrument.

solomonb··on New accounts on HN more likely to use em-dashes
TBH, i've largely stopped correcting any spelling or grammar mistakes in my communcations as a way to assert I am a human.
solomonb··on Show HN: claude-env – Manage multiple accounts for Claude-code
100% vibe coded buyer beware. I was annoyed that I couldn't easily toggle between personal and work accounts and maintain all my same comands, hooks, etc without fully logging out and back in.

This tool lets you manage multiple accounts in `~/.claude/envs` and activate them per shell session.

imo this should be baked into claude-code.

solomonb··on Music Discovery
Great suggestion. Likewise exploring who played shows with who is another great way relation for music discovery. Often you can find radically different bands that were part of the same social scene but which you can relate to.

There are so many ways music can be connected that aren't accounted for by genre labels or "sounds like."

solomonb··on Pope tells priests to use their brains, not AI, to write homilies
One step closer to an Electric Monk
solomonb··on Music Discovery
I agree this works really well and do it, this is essentially what I meant when i said 'clicking around music brainz and wikipedia.' That said I wouldn't be satisfied with this as the only way i could discover new music. There are so many dimensions that don't get codified in wikipedia or music brainz.
solomonb··on Music Discovery
> Residents -> Pixies is certainly an odd recommendation. Having said that, where _can_ you go from The Residents? Daniel Johnston?

I would be truly impressed if a recommendation engine took me from The Residents to Balinese Gamelan. My aunt plays in a Gamelan orchestra with one member of the Residents and learning that somehow made so much sense to me. This are the kind of out of pocket recommendation that an engine will never capture.

solomonb··on Music Discovery
Music recommendation is such a hard problem. There are all these seemingly obvious relationships you can map between bands to create a big graph that looks good but that almost never captures what goes on when a human with deep music knowledge recommends music. Often the best recommendations have no obvious relationships to the band you like.

I played around with this tool a bit and didn't find it any better then other more traditional music discovery tools, that is to say not very effective.

For example, I entered John Zorn and was recommended a bunch of John Zorn's bands. I entered The Residents and got The Pixies :/

I think its more effective to click around on Music Brainz and Wikipedia.

solomonb··on Lil' Fun Langs
If you're accepting additions here is a fun one some friends and I did as experiment at the Topos Institute: https://github.com/ToposInstitute/polytt

And here is a set of single file lambda calculus implementations with a variety of extensions: https://github.com/solomon-b/lambda-calculus-hs

`polytt` is kind of an ended experiment but that lambda calculus repo i plan to extend in the near future.

solomonb··on Show HN: Micasa – track your house from the terminal
Thank you for the `nix app`!

Being able to launch it with:

     nix run github:cpcloud/micasa     
Is super convenient.

Actually we could go further and serve `micasa` via ssh:

    users.users.micasa = {
      isNormalUser = true;
      shell = pkgs.bashInteractive;
      openssh.authorizedKeys.keys = ...
    };
  
    services.openssh.extraConfig = ''
      Match User micasa
        ForceCommand ${micasaPkg}/bin/micasa
        AllowTcpForwarding no
        X11Forwarding no
    '';
Then we could put this in a nixosModule in your flake.nix. Would you be interested in a PR which does this?

    services.micasa-ssh = {
      enable = true;
      authorizedKeys = [ "ssh-ed25519 AAAA..." ];
      port = 2222;
    };
solomonb··on Co-Alegebraic Chat Bots in Haskell [Not AI]
A few friends and I have worked on this project off and on for a while now. The original idea was to create a bot for matrix but we ended up building a more general library for encoding bot behaviors as Mealy Machines that can be tensored together in a bunch of cute ways to build more complex bots. Those bots can then be run against a protocol encoded as a Moore machine.

I feel strongly that this is a the right model for a lot of potential applications, including an agentic harness for LLMs (which I have not tried yet).

solomonb··on Show HN: I'm launching a LPFM radio station
Sorry i mispoke here. We can recharge the full required energy budget for the day in 3 hours of sun.
solomonb··on Show HN: I'm launching a LPFM radio station
With 15kwh of batteries and 2500w of panels you can run for 3 days on batteries and recharge in 3 hours of full sun.
solomonb··on Show HN: I'm launching a LPFM radio station
Its /significantly/ more challenging to setup a medium wave station as you will need a giant antenna.

I absolutely love AM radio and would prefer to run an AM station but there is no realistic path, legally or technically, to doing it as a micro broadcaster, other then the Part 15 route which I have done.

solomonb··on Show HN: I'm launching a LPFM radio station
Thank you! I'm going to take a note about doing this.
solomonb··on Show HN: I'm launching a LPFM radio station
You are technically correct but taking that approach misses out on the purpose of community radio: community.

As a terrestrial radio station our goal is to serve and be a member of our the local San Fernando Valley community. Creating a physical space for the radio station is about creating a 3rd space for community members and hosts as much as it is for recording radio shows.

solomonb··on Show HN: I'm launching a LPFM radio station
Great question, sadly we haven't gotten to the point of operating our transmitter yet so we don't know if co-channel interference is going to be a significant issue or not. I can say tho that neither KAIA or KCAQ come through clearly within our contour.
solomonb··on Show HN: I'm launching a LPFM radio station
Thank you! The LPFM license system was started in 2000 so its pretty new.
solomonb··on Show HN: I'm launching a LPFM radio station
I think the suggestion is to use AREDN for our backhaul from the station to the transmit site instead of 802.11ah. So it wouldn't be for broadcast per se, but I am still skeptical that is an allowed use for AREDN.
solomonb··on Show HN: I'm launching a LPFM radio station
I would be really surprised if we are allowed to use AREDN.

We need a studio to be able to do live radio shows. Currently our hosts have to pre-record and submit through an online dashboard. The goal is to have a live studio in Shadow Hills where hosts can do their shows, bring on guests, take calls, etc.

solomonb··on Show HN: I'm launching a LPFM radio station
I worked with https://commonfrequency.org to acquire the license. Their mission is to help local community groups acquire LPFM licenses nationwide.
solomonb··on Show HN: I'm launching a LPFM radio station
I agree that there is a strong allure to being strictly terrestrial. I actually started such a station 15 years ago under the Part 15 rules for unregulated broadcast band transmission: https://en.wikipedia.org/wiki/KCHUNG_Radio

Almost immediately (like within the first week or so) everyone involved demanded an internet stream and now that station has two internet streams lol.

I've been thinking about setting up another part 15 station at my house as a personal project but for something like KPBJ the goal is to be a community resource. Terrestrial broadcast is super important to me and helps cement the station's place in our local community but we also want to be accessible to those who are not in this immediate area or who don't know how to use a radio (yes in 2026 that is an issue!).

solomonb··on Show HN: I'm launching a LPFM radio station
For terrestrial broadcast or online? You go through a handful of music industry organizations such as ASCAP and BMI. For terrestrial broadcast the costs are scaled to approximate listenership.
solomonb··on Show HN: I'm launching a LPFM radio station
https://stream.kpbj.fm

At the moment we are only airing a few new shows per day and filling the rest of our airtime with content from archive.org and other free sources (chosen by all our hosts), but over time more of the schedule will fill with original content.

solomonb··on Show HN: I'm launching a LPFM radio station
You essentially have to be in the right place at the right time. The FCC releases LPFM channels every year all over over the country. If you have a 501c3 non-profit within the designated broadcast area you can apply for the channel. They tend to award the channels to more established non-profits. There are no filing fees.

In our case we created the non-profit in anticipation of applying for this license. We got really lucky and no one else applied for the license and it was awarded to us.

solomonb··on Show HN: I'm launching a LPFM radio station
To be clear this is an FCC licensed LPFM station.

Also I am /much/ more interested in terrestrial radio but the reality is that the vast majority of listeners are online and not using a radio. : (

solomonb··on Show HN: I'm launching a LPFM radio station
Thanks! We haven't been using the mailing list much, I'm afraid of coming off spammy, but I appreciate the support and hope you enjoy the station!
solomonb··on Do Metaprojects
As someone who takes on _a lot_ of side projects, I like your idea of a metaproject!

I often wonder what draws me to pick up so many interests and goals. I used to think its leading me towards something but after so many years I have started to wonder if that is really whats going on. Maybe there is something more essential I can tease out of all my side projects that reveals what I am really after..

solomonb··on Do Metaprojects
The article defines it through an example:

> You've been wanting to take cooking classes, but you've also been wanting to join an improv group. If you don't have time/resources for both of these projects, you might choose a metaproject like "weekly dinner party with funny friends" -- it doesn't strictly meet the requirements from either project, but it might fulfill some deeper desire.

So the idea is to extrapolate a new project that satisfies some core aspects of multiple projects you dont have time for.

solomonb··on Parse, Don't Validate (2019)
From the article:

    validateNonEmpty :: [a] -> IO ()
    validateNonEmpty (_:_) = pure ()
    validateNonEmpty [] = throwIO $ userError "list cannot be empty"
    
    parseNonEmpty :: [a] -> IO (NonEmpty a)
    parseNonEmpty (x:xs) = pure (x:|xs)
    parseNonEmpty [] = throwIO $ userError "list cannot be empty"
Both consolidate all the invariants about your data; in this example there is only one invariant but I think you can get the point. The key difference between the "validate" and "parse" versions is that the structure of `NonEmpty` carries the proof that the list is not empty. Unlike the ordinary linked list, by definition you cannot have a nil value in a `NonEmpty` and you can know this statically anywhere further down the call stack.
← PreviousPage 5 of 16Next →