HNHacker News
TopNewBestAskShowJobs

solomonb

1,311 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 Why Haskell?
> a function which returns Y | Null can be replaced with a function which returns Y without changing code on the call site.

Yes this falls out of injectivity.

> the function type (X -> Y|Null) can be improved by rewriting the function to (X|Null -> Y)

I agree that any value received by the former function (`X`) can be received by the latter function (`X|Null`). However you cannot rewrite the former to have the signature of the latter.

You would need to write:

prf : (X -> Y|Null) -> X|Null -> Y

You would have to be able to convert a `Null` value into a `Y`.

You could definitely use `X|Null -> Y` to implement `X -> Y|Null` but that is not what you are claiming.

solomonb··on Why Haskell?
The original poster said they want to use Haskell professionally but that they are struggling to understand how to structure programs.

> Once you're there, I don't think 'choosing an effect system' is a perilous question. The monad transformer library, mtl, is an effect system, the second simplest one after IO.

I'm aware of that, generally when people say "choose effect system" they mean choose some algebraic effect system, all of which (in Haskell) have huge pitfalls. The default should be monad transformers unless you have some exceptional situation.

solomonb··on Why Haskell?
So in your hypothetical language with union types `X | Null -> Y` is a function that can actually return `Y | Null`? Why would you want to allow that as an implicit behavior? This would make for surprising and unclear error handling requirements.

One of the main points of encoding error information in the type system in the type system is that it forces you to account for it when you modify your code.

By "weakening" your assumptions on your function to allow it to produce Null values you have introduced a new requirement at all your call sites. Everywhere that you call this function now needs to handle the Null value. Its a GOOD thing that Haskell forces you to handle this via the type system.

solomonb··on Why Haskell?
> 1. Decide on an effect system

This shouldn't even be proposed as a question to someone new to Haskell. They should learn how monad transformers work and just use them. 90% of developers playing around effect systems would be just fine with MTL or even just concrete transformers. All Haskell effect systems should be considered experimental at this point with unclear shelf lives.

Everything else you said I agree with as solid advice!

solomonb··on The Art of Finishing
I think you and I are on the same page, the point of a limited list of tasks is... to have a limited list of tasks. : )

It really is liberating.

solomonb··on The Art of Finishing
You end up with more smaller tasks.

A big part of the idea with my system is that you only identify 5 tasks at a time. Anything more then that and it becomes overwhelming. So the idea is to peel off the first 5 actionable tasks from your project(s), deal with those before thinking further about the project.

Yes this implies having a general sense of how to accomplish the project and the tasks involved, but no it does not mean you need to have a master plan with every step mapped out. Every 5 steps you get to re-assess and course correct.

solomonb··on The Art of Finishing
I think this gets back to what I said about being okay with bike-shedding. Researching and exploring the design space is a critical part of every project. Its okay to commit time to thinking, planning, and exploring.

I feel that as engineers we generally react negatively to the idea of bike-shedding or "building cathedrals" but the reality is that there is always a bike-shed. The question we should be asking is not should we deliberate over the design of the project, but rather to what degree does this project (and consequently the business in paid situations) benefit from deliberation.

In the case of personal projects, I am far more concerned with the process then the outcome and will allow myself to indulge in bike-shedding maximally.

solomonb··on The Art of Finishing
IME as you approach the limit you can create an infinite number of tasks. The key for me is to pick tasks which balance expedience and bang for buck value, but if you are experiencing intense writers block then I see no problem with a task like "open editor."
solomonb··on The Art of Finishing
Thanks. I have heard a lot about GTD but never sat down and read it. I definitely want to read it one of these days but I also must say that after years of trying different productivity systems I find that the absolute simplest systems are the best for me.
solomonb··on The Art of Finishing
It depends on the circumstances and how you want to prioritize things. Generally I'll take on the 5 easiest tasks across all my 'active' projects.
solomonb··on The Art of Finishing
I relate heavily to the author's dilemma. My projects span from math, to programming, to pinball repair, to amateur radio, to gardening, to mycology, to who knows what else. I personally enjoy the process of bike-shedding and endlessly exploring the solution space for a problem. That said, there is a point where you need to make hard decisions and button up projects.

As long as I don't care what project gets completed at what time, I've found a little trick to broadly move the needle. I jokingly call it "Sol's fast five" but the name is actually pretty on point.

I take a step back, look around me, and pick out the first five things I can reasonably achieve in less then a day prioritizing things where I have all the tools and materials at hand. These 5 things are never entire projects, the goal is to maximally decompose the projects until each action is as close to trivial as possible.

Once I have my list of 5 things I stop thinking about anything else and strictly work towards those 5 goals. There is a sense of relief in having reduced the scope and the tasks tend to be finished very quickly. Checking them off the list always feels good.

Once I have completed my 5 items I start a new list and pick out the next five items. This can feel like a huge reward.

I've used this system to great effect in the past few years.

solomonb··on Linux: We need tiling desktop environments
Same. I've used XMonad forever but 90% of the time I have single applications open full screen. I use XMonad's tabs feature heavily. So in one virtual desktop I have an editor and a few terminals which I tab between, then in another virtual desktop I do the same for web browsing, and another virtual desktop for comms.
solomonb··on Linux: We need tiling desktop environments
You can do tabbed windows in XMonad.
solomonb··on State Monad for the Rest of Us
I do agree with what you're saying about the value of referential transparency and the formal definition of a function as a lambda term. In fact, I work professionally as a Haskell developer and highly value this aspect of the language design; equational reasoning is a really powerful tool.

My point is that functional programming as engineering practice and language family is broader then variants of pure lambda calculi and Haskell occupies one particular place in that broad space.

solomonb··on State Monad for the Rest of Us
A lot of people mistake Purity as a language feature for meaning a more pure functional language. What makes a language functional is that their basic unit of abstraction is functions, not whether they isolate IO effects by default.
solomonb··on Lensy Moore
How far can we get leveraging the lens library in Haskell to model Moore Machines and Wiring Diagrams?
solomonb··on Gone 10 years, World’s Biggest Bookstore still grips readers
Moe's Books in Berkeley.
solomonb··on Gone 10 years, World’s Biggest Bookstore still grips readers
I agree, it really doesn't have very many books.
solomonb··on Cindy Lee might be the future of music
> Human authenticity doesn’t easily boil down to being “content” so there’s likely to be major issues resulting from your definitions.

I didn't claim human authenticity is equal to content creation. I meant that with the further rise of 'AI nightmare human free generative content' as you perfectly describe it, there will be a backlash where people seek out more authentic experiences.

You can already see this as a reaction to social media where people gravitate towards private group chats and discord servers.

> Humans are also easily found, being human and authentic, in the real world

I think you underestimate how much of our lives our influenced by the online world. Digital media saturates our lives.

That said, I would love to imagine people gravitating towards local community as a reaction of the death of the internet. I'm actually in the process of starting an LPFM radio station.

> The online one is destined to become an AI nightmare of human-free generative “content” from this point onwards.

Well said.

solomonb··on Cindy Lee might be the future of music
I feel strongly that the future of media content will be a search for human authenticity buried under an ocean of generic generated content.
solomonb··on Psychedelia syndrome: the pixels and code of Jeff Minter's 'Psychedelia'
Is there a print copy of this available?
solomonb··on Show HN: Sonauto – A more controllable AI music creator
This is technically really impressive but does anyone actually _want_ mass produced AI music?
solomonb··on The U.S. government may finally mandate safer table saws
What brand of blades did you use? Most of mine were Forrest or Tenryu. The Forrest blades are very heavy.
solomonb··on The U.S. government may finally mandate safer table saws
I think they make their money in the scale. They have a pickup guy who drives all over Los Angeles to pick up blades from all their customers. We had him come in every 2 months. He would return a batch of sharpened blades and take whatever blades were dull.

Definitely an old school style of business.

solomonb··on The U.S. government may finally mandate safer table saws
Yes I have the industrial grade Sawstop. I ran a professional carpentry business for years using it as our main saw. I probably bought it around 2012 or 2013, I can't remember exactly.

I don't know what to tell you. I ran a professional shop, I'm not a hobbyist. I couldn't tell you how many feet of lumber I've shoved through my table saw. I've never personally had the Sawstop pop due to a safety issue, but every single time it happened in the shop I was able to remove the blade and get it serviced for around $30-40 depending on how many teeth were lost. Most of my saw blades are greater then $100 new so this cost is worth it.

solomonb··on The U.S. government may finally mandate safer table saws
Professional sharpeners have tools for testing blade conditions. We had a guy who would drop by the shop once every couple months and pickup all our used blades to service.

This is really standard fare with professional carpentry. I don't understand why so many people here are in shock at the concept of blade servicing.

solomonb··on The U.S. government may finally mandate safer table saws
It really depends on the cost of the blade.
solomonb··on The U.S. government may finally mandate safer table saws
When I ran a woodshop we would get our blades resharpened for about $30 and new teeth were a few dollars each. Its absolutely worth it when your blades are $100+
solomonb··on The U.S. government may finally mandate safer table saws
I've done it plenty of times. New teeth cost a few bucks when you get your blade resharpened.

When you have blades high cost blades ($100+) its absolutely worth it to get them resharpened and teeth replaced.

solomonb··on The U.S. government may finally mandate safer table saws
Nitpick: It doesn't destroy your blade. You just have to get it resharpened and possibly get some new teeth brazed on.

Otherwise, yeah i agree its annoying to pop the break on a wet piece of wood or a missed nail.

← PreviousPage 10 of 16Next →