HNHacker News
TopNewBestAskShowJobs

default-kramer

787 karma · joined January 30, 2017

submissionscomments
default-kramer··on Composable SQL (Functors)
Very nice. Adding this one to my list of "things other people wrote that nicely elucidate a shortcoming of SQL"

> Why would this be useful? Because SQL tables are global variables. By vanishing global variables, we automatically make every query fully testable.

And even if you don't care about testability, certainly you can appreciate that global variables are bad for composability.

default-kramer··on Ghost artists on Spotify
> Discovery Mode, its payola-like program whereby artists accept a lower royalty rate in exchange for algorithmic promotion. Like the PFC program, tracks enrolled in Discovery Mode are unmarked on Spotify; both schemes allow the service to push discount content to users without their knowledge.

I definitely noticed this aspect of Discovery Mode but didn't know that it was confirmed or public knowledge. Spotify's recommendations have been terrible for a long time now.

default-kramer··on There's No Such Thing as Software Productivity (2012)
Yeah, the comments on the post already said it all. First Isaac says

> You seem to be playing a definition word game. [...] Obviously productivity does approximate business value in a very meaningful way when it is defined in terms of delivered business value.

Then the author responds

> Martin asserts "any true measure of software development productivity must be based on delivered business value". I agree, and I propose there is no such thing. We're better off dropping metaphors altogether and just talking about what programmers do: Solve problems.

So I guess the author wants to replace the term "software productivity" with something like "problem-solving productivity, measured in terms of business value"...? Kind of silly IMO, but to each his own.

default-kramer··on Egoless Engineering
Kind of tangential, but:

> Then one day, our designer broke the build in the middle of the night. Everyone came in the next day and couldn’t work until they figured out what had happened.

I've heard this [campfire?] story before. A bad commit happens and now no one can do any work. And I don't understand... Is it really that big of a deal to have to revert to an older commit or comment out the broken code until it gets resolved? Sure, I can see it being annoying, but not bringing an entire group of developers to a standstill. What am I missing?

default-kramer··on Show HN: Trilogy – A Reusable, Composable SQL Experiment
> IMO these kinds of "shortcuts based on column naming across tables" usually end in disaster down the road.

But sometimes this decision has been made years ago and it's not realistic to change it now. I've wanted to do this many times, and I've never been the person who created said tables.

Also, certain use cases perform much better if you create temp tables with small subsets of data from the main tables. It sure would be nice to be able to reuse fragments of SQL written against the main tables... if only SQL were better.

default-kramer··on Show HN: Trilogy – A Reusable, Composable SQL Experiment
Sometimes you want to be able to do something like "run some SQL, but instead of using the normal tables use these temp tables I just created."

In particular, I wanted to do this in SQLite recently. I wanted to have one write process which would always remain unblocked. And I also wanted to be able to run certain tasks which would do some temporary/discardable DB manipulations as part of producing an output file. These tasks could open the SQLite DB in read-only mode; load relevant data into temp tables, manipulate that data, and write the output file. Everything would have worked great if only SQL were a more composable language.

default-kramer··on Writes large correct programs (2008)
A good first step would be let them keep their jobs, but strip them of any authority. This already happens at some companies - the architects provide guidance which dev teams are not required to follow.

I think it's absolutely insane that we live in a world where many people with an "architect" title don't write code, and sometimes have never written code in their life! That would be like a world full of chess coaches who don't play chess! They just read BS articles like "Skewers are the new forks" or whatever.

default-kramer··on Monorepo – Our Experience
> Refactoring across repository boundaries requires much more activation energy as compared to spotting and performing gradual refactorings across folder boundaries. Technically it is the same, but the psychological barriers are different.

I love the "activation energy" metaphor here. But I don't agree that "technically it is the same." At my current job, we have more than 100 minirepos and I am unable to confidently refactor the system like I normally would in a monorepo. It's not merely the psychological barrier. It's that I am unable to find all the call sites of any "published" function. Minirepos create too many "published" functions in the form of Nuget packages. Microservices create too many "published" functions in the form of API endpoints. In either case, "Find All References" no longer works; you have to grep, but most names are not unique enough.

For this reason, the kind of refactoring that keeps a codebase healthy happens at a much lower rate than all the other projects I've worked on.

default-kramer··on Why does man print "gimme gimme gimme" at 00:30? (2017)
I use "NOMERGE" plus the habit of grepping for it before I merge a branch.
default-kramer··on T-Mobile pays $16M fine for three years' worth of data breaches
I still think the C-suite won't care unless the cleanup/penalty costs get pulled directly from their bonus before anywhere else. Otherwise it will just be "oops, I tanked this business, better luck at the next one."
default-kramer··on You are not dumb, you just lack the prerequisites
When I think of "Computer Science" I definitely think that it respects "build great things from a small set of first principles" as much as any field. In fact, I might argue that CS is just a subset of pure math. It's those pesky Computer Engineering concerns, warts like memory locality and branch prediction, that make CS "less pure" than it could have been :) [no offense to CE, I personally love those warts]

> most people just remember or know the skills set of the abstraction layer without ever understanding how that abstraction comes into the field in the first place

This sounds like you're describing pragmatic software development, or "software engineering" if you insist on sounding fancy. My degree was in SE and in retrospect I would have enjoyed CS more, but it really didn't matter in the long run. But I digress... the point is: a course that focuses on using an abstraction is a programming/SE course, whereas a course that focuses on the principles one might use to build such an abstraction is a CS course.

default-kramer··on Calling All Hackers
> The market is incentivized to deliver a product that meets the minimum bar to meet that checkbox, while being useless. I invite you to think of your favorite middleware or EDR vendors here. For passionate security founders considering raising venture, remember that this is what your "success" is being benchmarked against.

> Do not swallow blackpills. It's easy to get really cynical and think things are doomed

> Creating leverage for yourself. Hackers should not think of themselves as "oh I am this little guy fighting Big Corporation" or whatever. This is low agency behavior. Instead become the corporation and RUN IT THE WAY YOU THINK IT SHOULD BE RUN.

Should I do it? Does this mean me? Obviously not, because I don't know shit about EDR. But obviously neither does Crowdstrike. I mean really, I couldn't possibly do any worse... right? Right? On the internet, it's easy to feel outclassed. But IRL, a large majority of people suck at their job. So in theory this should work.

In practice, I guess I'm just blackpilled. For much less effort I can get paid 6 figures for 2 hours of work per week. [Also, I realize that winning at business is more difficult than I'm implying. But if my former bosses, who didn't do much other than yell at people and also drugs, could build a 25M/year business then you probably can too.]

default-kramer··on Stop Using Git Ignore
> Examples of folders included in the git ignore file are generated files like “.next” from NextJS or “test-results” from Playwright. These will be generated for every developer on the project regardless of their OS, IDE etc.

> Yes I am saying this is wrong… (let me know if you agree/disagree below)

I didn't realize that the first paragraph is saying "This is good"; I thought the second paragraph was saying that the first paragraph is bad.

default-kramer··on Stop Using Git Ignore
Exactly, sometimes it takes me some minutes of research to determine whether a certain file should be ignored or not. In that situation, it's very appropriate to put that in the repo's gitignore, preferably with comments explaining why the pattern is included/excluded.
default-kramer··on Stop Using Git Ignore
You've mentioned the "green square game" a lot, and I don't see how this is a problem. If someone makes a PR that is nothing but the .gitignore file, you can just reject it in one second. (Unless it is a well-researched and well-justified change, in which case you can gratefully merge it.)
default-kramer··on Stop Using Git Ignore
> As a maintainer, don’t fall into the trap of putting every possible exclusion into the repo’s git ignore. This really is a “sticky plaster” approach in my view. What we should try to do is up-skill and educate the community, so it benefits everyone in the long run.

Strong disagree. Please do continue trying to educate the community, but that's no reason to take the guardrails off.

default-kramer··on How good can you be at Codenames without knowing any words?
Yes, I agree the official Scrabble word lists are arbitrary and sometimes downright inexplicable. But assuming you're not trying to win official competitions, you can play with any dictionary you like.
default-kramer··on Ask HN: What are some "toy" projects you used to learn neural networks hands-on?
Oops, now that I look closer it's apparent there is some work that I never committed or pushed! I'll try to resolve that...
default-kramer··on Ask HN: What are some "toy" projects you used to learn neural networks hands-on?
Sorry, no Docker or anything like that but I'll share my story anyway because I had no idea if it would work and I was almost amazed by the results.

I made a prototype of a Dr Mario-inspired game with a new mechanic (the blank half-pill) in Racket. I hand-coded an AI, and then I wanted to see if I could train a NN to predict what that AI would play in any given game-state. Obviously this allows me to generate training data much faster than playing the game manually.

I did get it kind-of working, as you can see in the two most recent commits on this branch: https://github.com/default-kramer/fission-flare/commits/ML/

I learned that the most important factor for me was the size of the training data, e.g. training on 50k games is way better than 10k games. As I recall, I got it to correctly predict the hand-coded AI's move 77% of the time, and when it didn't get it right it usually had a plausible alternate move. I was pretty surprised with a relatively underpowered laptop and a severely undersized data set it was able to get that accurate. (I suppose it is easier to predict a deterministic algorithm's moves than a human player's moves.)

After doing the ML stuff I decided, "okay, enough prototyping, time to turn this into a semi-polished game using Godot." Well it turns out Godot, although it is amazing, is significantly less fun than Racket. So I got this far before I got sick of it and moved on to a different project: https://blockcipherz.com/

default-kramer··on How good can you be at Codenames without knowing any words?
But saying zero disallows your team from guessing at all, right? Maybe "<death card hint> 666" would work.

A common pattern in our play groups is when the other team is just 1 away from winning and you cannot find a clue that covers all your remaining words, you come up with the best clue you can and say "99" so that it's clear "The number is irrelevant to the clue here, just keep guessing until you win or you miss."

Edit: I'm wrong. From the rules: "If 0 is the number, the usual limit on guesses does not apply. Field operatives can guess as many words as they want. They still must guess at least one word."

Edit2: And instead of 99, my play groups should have been using "unlimited." Again from the rules: "Sometimes you may have multiple unguessed words related to clues from the previous rounds. If you want your team to guess more than one of them, you may say unlimited instead of a number. For example feathers: unlimited."

default-kramer··on How good can you be at Codenames without knowing any words?
I gotta disagree, I'm way more accepting of Scrabble list memorizers (even though I'll never be one) because word knowledge was intended by the game designers to be a part of the game.

Memorizing the spymaster layouts was almost certainly not intended by the designers of Codenames. Probably someone realized it was possible, but as other commenters mention the increased friction of fully randomized layouts isn't worth it when almost no one will want to do this.

default-kramer··on Scrum is the Symptom, not the Problem
I thought the opening line "Scrum is horrible" made it immediately clear that this is an opinion piece. I can't speak for this author, but when I say something like "your data fits in RAM" or "just say no to microservices" I am well aware that some data actually does not fit in RAM and sometimes microservices are actually appropriate.

I'm pretty happy at a Scrum shop right now, but I appreciated reading this. If you have a passionate opinion forged from personal experience, I think it's best to just present it that way rather than trying to tone it down or dress it up into something tamer but more universally correct.

default-kramer··on Smart jerks aren't worth it
Absolutely nailed the tone of mandatory corporate training.
default-kramer··on Show HN: Lisp in C#
Ah, this is actually what I had in mind by "interop". So from C# I can evaluate some Lisp code and then test that the result is `PairType` (for example)? Maybe this is so obvious it goes without saying, but I didn't see any examples of that.
default-kramer··on Show HN: Lisp in C#
Cool, thanks for showing. Are you planning for any sort of FFI/interop in either direction? I don't see it in your TODO, but I also don't understand why you would write it in C# unless you had this in mind.
default-kramer··on Judge dismisses DMCA copyright claim in GitHub Copilot suit
I'm not legally inclined, but... code and music are different? There must be different standards for when code is too similar, for when music is too similar, for when pictures are too similar, for when books are too similar.

Also, remixes almost always do contain verbatim lyrics and/or samples from the original song. LLM output isn't supposed to contain verbatim copies, but I've been told that sometimes it does. (I don't know much about LLMs and I don't think Copilot is useful. I want my 2010-era Intellisense back, when it was extremely fast and predictable.)

default-kramer··on A bunch of programming advice I'd give to myself 15 years ago
Of course this can vary wildly, but I've never felt afraid to defy management on that one. Half the time, they don't even need to know. And the other half of the time... what are they going to do? Fire me? Fine, then their project will be filled with nothing but wallpaper-patchers and I'll be somewhere else doing good work.

(And of course, sometimes just patching the wallpaper is the right course of action, but it's rare to find management capable of accurately assessing this trade-off.)

default-kramer··on Designing a website without 404s
I mostly agree, but also... it kinda is a dark art? I just read the "Reduce duplicate content" section [1] because my gut reaction was "yeah, I agree, this guy is going to get SEO-penalized for this" but of course I don't actually know. And although my few years of experience dealing with this stuff still want to say "you will get SEO-penalized for this", Google's own guidelines do not: "If you're feeling adventurous, it's worth figuring out if you can specify a canonical version for your pages. But if you don't canonicalize your URLs yourself, Google will try to automatically do it for you. [...] again, don't worry too much about this; search engines can generally figure this out for you on their own most of the time. "

[1] https://developers.google.com/search/docs/fundamentals/seo-s...

default-kramer··on Designing a website without 404s
Lay people certainly might bookmark a medication they buy often, and if "the smart website silently replaces the correct drug with something similar but wrong" they might end up accidentally ordering and even consuming it.
default-kramer··on Try Clojure
> It was okay until someone wrote a thing in php (!!) in a day that would be have taken at least a month in Java. Maybe two. I understand the "good" of Java, but for me personally, the cost of that good is just incredible tedium. This is personal and I understand that.

You understand that this has everything to do with Java and nothing to do with the JVM, right?

← PreviousPage 3 of 10Next →