ahipple | 11 months ago | on: The Real Book (2021)
ahipple's comments
ahipple | 2 years ago | on: Consumer Reports finds 'widespread' presence of plastics in food
ahipple | 2 years ago | on: 95% of OpenAI Employees (738/770) Threaten to Follow Sam Altman Out the Door
ahipple | 2 years ago | on: How to burnout a software engineer, in 3 easy steps
"Nothing gets sold until something gets built"
I suspect I'm not alone in saying this, but having started my "tech" career in marketing/eCommerce agencies, I have _definitely_ worked in organizations where the sales team would sell absolutely anything they could get somebody to agree to buy -- fully ignorant of whether it had been (or even COULD be) built.ahipple | 2 years ago | on: Svelte is surprisingly easy to learn
> It's invoked whenever a named variable that is mentioned in the block is explicitly assigned to.
This makes sense in the sense that it's a contract that I can accept and use, but it does imply the existence of a parsing pipeline & runtime of unknown (to me) complexity & capabilities -- exactly the sort of thing a prospective user of the framework would need to learn about sooner or later.
ahipple | 2 years ago | on: Svelte is surprisingly easy to learn
Sounds promising, but the first examples contrasts a React `useEffect` hook (a simple function call, into which you pass a callback and a dependency array) with
<script>
$: {
console.log("Count Changed!", count)
}
</script>
<!-- html -->
Which prompted in me roughly these questions:- Is this actually just JavaScript?
- Oh, is `$` a label? [I googled this to confirm it is]
- I thought JavaScript didn't have a `goto` statement? [I googled this to confirm it doesn't]
- How does this ever get invoked? [I still don't know the answer to this question -- MDN says that labels can only be used with `break` and `continue` statements]
- Does it get invoked only when `count` changes?
- If so, how?
- If not, how do I specify the dependencies?
It might 'just work', but it's also not 'just JavaScript'.
ahipple | 3 years ago | on: When coal first arrived, Americans said 'no thanks'
ahipple | 3 years ago | on: Show HN: I built an interactive course that helps you learn Vim faster
As noted in a sibling, you can press * (shift+8) in normal mode with your cursor over a word to find the next instance of the word. This also updates the search pattern so you can use n and shift+n to navigate forward and back between matches.
If you combine this with other bits of the vim "grammar" (which I do think encourages a kind of feature discovery, although I agree there's a large learning "hump" to get over to take advantage of it), you can use something like cgn to change the currently-focused search match, n to navigate to the next search match, and . to replay the command.
So while it's not exactly the same as multi-cursor, you can achieve something very similar (and just as fast) with the following sequence:
1. In normal mode, place the cursor over the symbol you wish to edit
2. Press key: \* (read: "find the next occurrence of the current symbol and update the search pattern to be that string")
3. Press keys: cgn (read: "change the search match under the cursor")
4. Type the new symbol
5. Press ESC to return to normal mode
6. Press keys: n. (read "find the next occurrence of the search pattern [set in step 2] and repeat the last command [the edit from steps 3-5]")
7. Repeat 6 until all symbols are replaced
Or, in raw keystrokes, I might replace all six "foo"s in a document with "bar" by typing the following sequence of characters (having placed the cursor over a "foo"): *cgnbar<ESC>n.n.n.n.n.It may seem complex compared to something like multi-cursor editing, but the nice thing here is that there are concepts here that are extensible beyond the scope of that specific edit, and can yield similar "speedy" workflows but on a much wider set of tasks.
- c[something] is a pattern that means "change [the given region]", so you could construct similar commands with different regions (`ciw` to change inside the current word, `ca{` to change the current curly-bracketed region (inclusive), and so on)
- [something]gn is a pattern that means "[do something] to the next search match", so you could delete it with `dgn`.
- . can replay many types of commands, so if I have a more complex sequence of edits to apply starting at a search match, I could do that too (not just simply replacing the symbol).
It's a very powerful paradigm.
ahipple | 3 years ago | on: The Colorado Safety Stop is the law of the land
The easy solution that's often chosen is to add a stop sign to these intersections, but this tends to result in largely-unnecessary stopping and starting, which then tends to increase the number of conflicts (because the traffic on the through street tends to congest at the new stop rather than passing quickly through it).
A better solution would address the nature of the risk -- speed -- more directly. Traffic calming techniques like narrowing the road, or deflection (manufactured bends in the road or speed humps) would improve outcomes for all road users more than a stop sign that creates congestion (and therefore conflict).
ahipple | 6 years ago | on: How to Enable DNS-over-HTTPS in Firefox
ahipple | 9 years ago | on: Time for the ‘teenage coding god’ meme to die
Not to say that success correlates with skills, I suppose, but he's fairly well-regarded as an innovator from an early age. Odd choice of example from the article's author.
Most level-headed people I think regard the book as a useful tool, a step in the growth journey. As egos and insecurities enter the mix you'll occasionally find somebody who'll proclaim that the Real Book is purely a crutch and you should start and end with the ear-training bits or you're "doing it wrong".