148 karma · joined September 10, 2015
- A search and rescue team. Not only do I get exercise, fresh air, and the good feels of helping someone on their worst day, I also build very strong bonds with people I'd never have met otherwise.
- Tabletop RPG's. I've joined a few groups and while not all have worked out, a couple have really stuck and we've become great friends. It's also a great excuse to sit around a table without digital distraction and really enjoy one another's company.
- Finally, Burning Man. The burner community has been a godsend for me. Always interesting and engaging, sometimes sarcastic and snarky, never a dull moment.
- doing each action correctly
- finding micro optimizations (if I turn the mower this way, I get that stupid piece of grass that I can never get without another entire pass)
- or, dare I say, finding joy in a job well done helps me get into a "mindfulness"(?) mindset
"Job" meaning everything from "put my shoes on" to "sharpened the mower blade well" to "made the pass with that mower perfectly" to "got all the yard work done". Focusing on the small bits first seems to snowball into the larger ones.
I think getting into the mindfulness mindset and finding joy is what has really helped me. The work itself is boring, tedious, etc. However, pride in a job well done feels good, which creates a positive feedback loop. This year, the yard work has felt less terrible and the yard is looking better than ever.
I'm not quite there yet with software development, but applying the same sort of strategy has been helping over the past couple of weeks. Not every day is omg-amazing but the good days are starting to outweigh the bad ones.
nevermind, managed to get this working for fish, just add it to the end of your ~/.config/fish/config.fish file :)
# log every command
function cmd_log --on-event fish_preexec
if test (id -u) -ne 0 # if we're already sudo, don't log
echo $(date "+%Y-%m-%d.%H:%M:%S"): $(pwd): $argv >> ~/.logs/cmd-history-$(date "+%Y-%m-%d").log
end
end
And, since I keep editing this comment... blog post about it with all credit to OP and OP's inspirationPodman used to be a bit rough on mac but it's gotten significantly better, especially with podman-desktop. docker-compose even works with it as it does something on the backend to swap out the docker socket. I wouldn't recommend doing podman-compose as it looks to be mostly unmaintained? Or at least no new releases have been cut in a couple of years.
As an example: Cognitive Behavioral Therapy (CBT) vs. Eye Movement Desensitization and Reprocessing (EMDR) vs. Freudian Psychotherapy vs. Ketamine Therapy vs. [insert whatever modality you'd like]
Assorted Non-Book Readings:
- https://randsinrepose.com/dont-skip-this/
- http://www.stilldrinking.org/programming-sucks
- https://sysadvent.blogspot.com/2019/12/day-21-being-kind-to-...
- https://donellameadows.org/archives/leverage-points-places-t...
- https://changelog.com/posts/rich-hickeys-greatest-hits
- https://github.com/papers-we-love/papers-we-love/blob/master...
- http://www.cs.unc.edu/techreports/86-020.pdf
Books:
- The Phoenix Project: Gene Kim, Kevin Behr, George Spafford
- Deep Work: Cal Newport
- The Art of Leadership: Michael Lopp (Rands)
- Extreme Ownership: Jocko Willink and Leif Babin (once you get through the ho-rah stuff it's a fantastic read)
- Time Management for System Administrators: O'Reilly (fantastic for interrupt driven work)
- Elements of Clojure: Zachary Tellman (not just for Clojure devs)
Most of our days on the data migration team were spent tracking down missing connections between entities, inconsistencies in the data that our clients had found, etc. I took a "find a string in every column" stored procedure and rewrote it as a python desktop app. Once the basic functionality was there I multithreaded it to run each query simultaneously. After that, I provided a graph-layout GUI that the users could click through and build their queries dynamically based on existing connections they'd already found.
No idea if it's still a thing anymore but it was amazing for my team. We went from guessing at relationships between entities because we didn't want to wait for the stored proc to run for hours to knowing which entities had what relationships in minutes. Single best thing I've ever written.
What's a good name? I love the phrasing from _Elements of Clojure_ by Zachary Tellman [1]
> Names should be narrow and consistent. A *narrow* name clearly excludes things it cannot represent. A *consistent* name is easily understood by someone familiar with the surrounding code, the problem domain, and the broader [language] ecosystem.
Interviewing can definitely be a numbers game but in hindsight (and just my experience) it's important to only go for companies where you think you'd be happy working.
As for onboarding, whether it's a remote first, omg-remote-because-of-covid, or an in-person company I've had varied results. My experience at most startups is that onboarding is pretty low on the priority list and quality is very dependent on the hiring manager and the team you've been hired onto.
Bonus points for those companies because they didn't have to "figure it out" or change upper management corporate culture to go remote.
I wish more people would follow this advice. I've made it a habit to try to make the world an infinitesimally better place every day. It doesn't always work out, but the effort is a huge boon to my mental health and maybe I succeed and the world is a better place.
- Snow Crash - Neal Stephenson: it has its flaws but is still a rocket ride through a not-so-farfetched cyberpunk dystopia. I love the tongue-in-cheek nature of it as well "Hiro Protagonist" being the main character :D
- Extreme Ownership - Jocko Willink and Leif Babin: a different take on leadership than I've read previously, once you get through the first couple bits on "we're SEALs and badass" sort of stuff there's some amazingly good leadership qualities on display.
- Every Tool's a Hammer - Adam Savage: As a weekend warrior maker, this book speaks to my soul. It gives my brain permission to make mistakes and learn in a way that few others have.
- Michael Pollan: pretty much anything written by him has wit, intelligence, research, practical experience, etc. Love his writer's voice and most of his audiobooks seem to be read by him, a fun bonus!
Async function calls work like "normal" until they hit a yield statement. When they do, they yell back up the callstack "hey, I'm going to be waiting for a while, let something else happen while I am".
When that happens, one of two things can happen. 1. Either there's nothing else to do, in which case we wait until something that has yielded to no longer be waiting. 2. Something else is done waiting and it's waiting for its turn. In which case, it's allowed to continue at this point until it either returns or yields again.
In this sense, instead of yielding a value, the function is yielding the stack to something else that can use it while it's waiting.
Async is great for when you're waiting on external processes to complete (database calls, API calls, etc). It's terrible for any CPU heavy tasks because, at least in the Python world, it can still only use a single CPU. In this way, again, specific to Python, it's use-case is much closer to multithreading than multiprocessing.
Another way to think about the machinery behind the scenes is it's a queue of callstacks. If an async call yields the primary stack, its callstack is thrown onto the queue. The queue of callstacks is then processed in order.
Hope that helps! Took me a long while to wrap my head around it and I still struggle reading it some of the time.
It's missing: - "what if the quotes are smart quotes?" - This applies to both quotes inside a field and quotes wrapping a field - "what if the file doesn't have a header?" - "what if a logical record is spread over multiple lines?" - Yeah... so, you have line 23 that has the majority of the data in the expected columns, line 24 has additional data in columns 23, 25, and 28 that's supposed to be appended onto the previous line's data that also appears in columns 23, 25, and 28. Line 25, same thing, but line 26 starts a new logical record.
Seen all three above in the wild and Python's (pretty awesome) CSV code didn't handle them. Queue the custom code that wraps Python's core CSV parsing.