Typically you align a pipeline like so:
df
|> rbind(other_df)
|> select(...)
But these topics are largely left to code formatters these days.1,087 karma · joined March 13, 2013
HN@DUNCANREGAN.COM
Typically you align a pipeline like so:
df
|> rbind(other_df)
|> select(...)
But these topics are largely left to code formatters these days.Now apologies for the aside—and I know I'm likely wading into a very expansive topic and reducing it down to something simple—but why in Rust, if the types are known:
struct Song {
title: String,
artist: String,
rating: i64,
}
do you have to call `.to_string()` on things that look a lot like strings already? Song::new("Hate Me".to_string(), "Blue October".to_string(), 9)
Couldn't the compiler just do that for you?> I see young men, my townsmen, whose misfortune it is to have inherited farms, houses, barns, cattle, and farming tools; for these are more easily acquired than got rid of. Better if they had been born in the open pasture and suckled by a wolf, that they might have seen with clearer eyes what field they were called to labor in. Who made them serfs of the soil? Why should they eat their sixty acres, when man is condemned to eat only his peck of dirt? Why should they begin digging their graves as soon as they are born?
https://en.m.wikipedia.org/wiki/Control_Strip
Solves this exact issue.
Though hopefully, once the idiom is learned, I'll be able to remember it :)
Curious as to why a scan \ rather than a reduction /?
Say what you will about clarity, but my mind sort of glossed over the intention in the python and rust code, focusing instead on the syntax, while the q code made me consider what was actually happening.
0: https://modelcontextprotocol.io/specification/2025-06-18/bas...
One is to build multiple function heads that pattern match on the arguments. If it’s an error tuple, pass it along. Build up your pipeline and handle any errors at the end.
Another is to use the `with else`[0] expression for building up a railroad. This has the benefit of not having to teach your functions how to pass along errors. Error handling in the else block can be a little gnarly.
I find it a little more manual than languages that have a `runEffect` or compose operator. In large part that’s due to the :ok, :error tuples being more of a convention than a primitive like Either/Result.
0: https://elixirschool.com/en/lessons/basics/control_structure...
I don’t find Linear to be all that quick, but apparently Mac OS thinks it’s a resource hog (or has memory leaks). I leave linear open and it perpetually has a banner that tells me it was killed and restarted because it was using too much memory. That likely colors my experience.
https://www.arraycast.com/episodes/episode111-ideal-array-la...
I don’t feel Claude code helps one iota with the issue in 1319. If anything, it has increased the prevalence of “ongoing development” as I auto mate more things and create more problems to solve.
However, I have fixed up and added features to 10 year old scripts that I never considered worth the trade off to work on. It makes the cost of automation cheaper.
I get stuck in ways I’ve never experienced in my life; my brain feels like it stopped working (but has reserved the bandwidth to shout at me the whole time “you’re blowing this!”). Then shortly after the call ends, sitting quietly, a path forward opens and suddenly I’m working on a solution, which it’s own special kind of hell—to know you could do it but didn’t and now some stranger out there thinks you’re a real idiot.
Studying/practicing has mixed results as you are taking away time from your partner and kid, this causes feelings of guilt. I found the more time I spent practicing, the more leetcode hards I solved, the worse I got. It was paradoxical! It was additionally demoralizing!
I only share all of this to say that circumstances change; you change. What once was easy becomes hard—maybe just for now, maybe forever, I don’t know. What I do know from my time at Big Co., is that this style of interview (often aped at smaller co.) is employed as one of the stated goals is to remove opportunity for biases (test everyone the same "quantifiable" way). However, my experiences lead me to believe that it falls short in that regard. As I said, people change, and a candidate who becomes a coworker with a high tolerance for stress today might not have the same appetite in a few years. Surely removing biases is about seeking balance, but I think certain types of interviews are blind to the imbalances they might cause.
Sure reducers could be a bear (and asynchronous actions were hard), but the easily testable and portable logic-less views were really nice to work with.
Having worked in a number of codebases from React’s earliest days until now, I see echos of the bad old mixin days in the usage of hooks.
There may very well be a texture to “hand crafted” software that will be totally lost on users. But I kind of doubt the difference will be anything like the difference in furniture.
In that case, you have put a stop to it and point out that it would already be done if it hadn’t decided to blow it all up in an effort to write a one time use codemod. Of course it agrees with that point as it agrees with everything. It’s the epitome of strong opinions loosely held.
Not really sure if it’s just me, but I don’t really reach for them in my work anymore. Not sure if it’s because everything used to be a blog and now everything is an app, lower information density, or that content is less likely to be text.
To this point, GUIs; going forward, AI agents. While the intention rhymes, the meaning of these systems diverge.
Though the general API lockdown was started long before that, and like you, I’m skeptical that this new wave of open access will last if the promise doesn’t live up to the hype.
I think the problem is exacerbated by the fact that issue trackers follow fashion; and it’s more common that you are using the flavor of the week; and that flavor isn’t close to feature complete; and new features get added at a glacial pace.
I suppose this is a long winded way of stating how annoyed I am with branch names derived from linear ticket’s titles for tracking purposes, and I wish I could use some other form of metadata to associate commits with an issue, so that I could have more meaningful PR titles (enforced that I must use the linear branch name as the title).
Though I’ll admit that it’s an issue of a size that’s more appropriate to gripe about on the internet than try to change.
1. I use AI to find my way in a sprawling micro(service|frontend) system that I am new to. This helps cut down massively on the “I know what to do, I just can’t figure out where.” I started a new job where everyone has years of context as to how things fit together and I have none. I feel strongly that I need to give an honest effort at finding things on my own before asking for help, and AI certainly helps there.
2. Anything I stumble upon in a dev/deployment process that leans too heavily into the “good behavior/hygiene,” I try to automate immediately for myself and then clean up to share with the team. In the past, I might have tried to adopt the common practice, but now it’s less effort to simply automate it away.
3. There is value in using AI in the same manner as I use vim macros: I use the planning mode heavily and iterate like crazy until I’m satisfied with the flow. If the task has a lot of repetition, I typically do the first one myself then let the AI take a whack at one or two. If I don’t like the process, I update the plan. Once I see things going smoothly, I give the AI the ok to finish the rest (making atomic commits so that it’s not just one big ball of wax). This is pretty similar to how I record macros (make one change yourself, record the macro on the next line, test it out for a line or 2, re-record if necessary, test again, plow through the rest).
4. When I come across something that needs to be fixed/could be improved but isn’t related to my task at hand, I do a few minutes of research and planning with the AI, and instead of coding a solution, we create a todo document or an issue in a tracking system. This wasn’t happening before because of the context switching required to write good documentation for later. Now it’s more of the same thing but akin to a dry run of a script.
5. I can quickly generate clear and easy to read reports to allow other teammates to give me feedback on work in flight. Think about a doc with before and after screenshots of changes throughout an app produced by a playwright script and a report generator that I can rerun in under a minute whenever I want.
I’m finding that I really enjoy the skipping the tedious stuff, and I’m also writing higher quality stuff because I have more bandwidth. It helps me collaborate more with my non dev peers because it lowers the barrier to sharing.
Important to note that in my experimenting, I haven’t had great luck with winding it up and setting it loose on a task. Too often it felt like being a junior engineer again, doomed to throw spaghetti at the wall. Once I started using AI as an assistant, I felt things really started to click. Software development is about writing code, but it’s about a lot of other things too. It’s nice when the AI can help write code, but it’s fantastic when it helps you accomplish the other things.