Results: 21
-
Hell yeah NASA
2024-04-23 21:20
NASA engineers never fail to amaze as they get Voyager 1 sending data again from interstellar space.
-
Timeout Killer
2024-05-05 12:51
Timeouts and Cancellations for Humans
Nice article on the difficulties of actually doing timeouts correctly. And an idea for a malicious endpoint that returns 1 byte every second or so for the same request to keep poorly coded timeouts from triggering.
-
1BRC in rust in depth
2024-08-25 09:20
Just found a really awesome, super in-depth write-up of a high performance computing approach to the 1 billion row challenge using Rust. I'll probably try and tackle this myself sometime soon. I've been itching to get some experience with really hyper-optimized computing.
-
Masonry Layout CSS
2024-04-23 21:22
Help us invent masonry layouts for css grid level 3
I remember getting this working in ~2013 with flexbox columns, but I had to do a complicated interleaving operation to make the sequence correct from left to right then top to bottom. Cool to see this happening finally.
-
The context of a link should give you a reason to follow it
2021-07-29 21:36
When linking Zettel in a Zettelkasten, we should include the link in the context of the connection itself. That is to say, connections should be described in the Zettel that is connecting (or forward linking) to another Zettel.
For example, imagine I'm writing about apples and find that there's a striking similarity in how they grow to pears. I want to link from the Zettel about apples to the pear one, but I want to include the reason for the connection.
You could also make connections that are interesting about things that are not related. This concept is somewhat subtle, but there might be a good reason for saying that apples are very different to oranges. That reason should be in the context of the link.
Good
Apples grow in such and such a way that is nearly identical to
[[pears]]
. They have the same x and y, and do the same z.Apples are strikingly different to
[[oranges]]
in almost every way. They taste completely different, are different colors, grow differently. Because of their massive differences, the saying "comparing apples to oranges" is a ubiquitous way to signify two completely dissimilar things.Bad
See
[[pears]]
Contrasts with
[[oranges]]
-
The Final Edition of Embedded Muse
2024-10-22 01:01
After 27 years, The Embedded Muse, an awesome programming newsletter focused on embedded systems issued its 500th and final edition. Its editor Jack Ganssle recently retired and is winding the newsletter down as part of getting to full retirement. Fittingly, the final issue has some really nice reflections on industry, programming careers, and life.
It's always a little sad to see things like these wind down on the internet. In the age of the enshittification of the internet, I value places like The Embedded Muse, where real people publish real thoughts and insights for others to enjoy and learn from and that facilitate forming genuine human connections. Obviously, change is the only constant and Jack should take his well deserved retirement, but that doesn't mean I won't miss it.
-
CodeMash 2020 - Review
A More Formal Report on a Conference
2020-04-01 00:00
A review of the sessions I attended, what I learned, and how I liked the overall experience of CodeMash 2020.
Short Post
I said in my live blog post from CodeMash that I was going to do a follow up to the conference and review the experience. Since there were other people at Beam interested in writing about their experiences too, we decided to pool our effort as a team and write a single post for the Beam Engineering Blog. Because it was co-authored by other Beamers on Beam time, I'm not sure if I should cross-post it in its entirety. Instead, here's a link to the finished product, Yet Another CodeMash Blog Post. Go check it out.
On a final note, if you're on the fence about CodeMash, I'd strongly recommend going. I had a great time and would definitely go back in the future.
-
When to write a new Zettel
2021-07-27 22:38
When should I write a new note vs adding or changing an existing note or set of notes? The answer is to break this down into three categories:
- When you don't have any existing notes that relate to the topic, write a new note.
- When your note is considerably different than existing notes on the general topic, write a new note and be sure to link correctly.
- When your note matches existing notes, modify them. Note that this use of "modify" includes re-structuring, creating, deleting, updating, linking, or anything else.
-
Tech — Work — Ramblings
2016-10-27 00:00
#structure #microblog #tech #ramblings #work #blog
This page serves as a simple index of all my blog posts. This list should be roughly equivalent to searching for the #blog tag.
If you're looking for my shorter #microblog posts, see 202208270000 Microblog.
- 202208010000 Making a Rust Roguelike
- 202206171206 Delivery Performance vs Value Delivery
- 202205150000 Learning Rust
- 202205010000 Making a Fitbit Sense Watch Face
- 202109150000 Idea Gardening
- 202109010000 Prototype Expand Consolidate
- 202108010000 Designing for Big Screens
- 202107150000 Working in Public
- 202107010000 Unifying My Domain
- 202106010000 Rewrites Are (Almost) Never the Answer
- 202105010000 The Silent Majority of Engineering
- 202009010000 The Only Correct Way to Organize Code
- 202007010000 2019 Work Reads
- 202006150000 Gestalt Principles of Design
- 202006010000 Revamping My Blog
- 202004010000 CodeMash 2020 - Review
- 202001080000 CodeMash 2020 - Live
- 201911150000 What React and Kubernetes Teach Us About Resilient Code
- 201810010000 Development Estimates
- 201809010000 Piping Code With GitLab CI
- 201808010000 Cloud Native Computing
- 201807010000 Architecting a More Modern System
-
Staff engineer promotion packet
2022-07-31 09:47
Here are some questions to ask yourself in order to prepare a promotion packet for a staff engineering position.
- What are your Staff projects? What did you do? What was the project’s impact (including a well-defined goal)? What made this project complex? Keep it very short and then link out to supporting design documents1
- What are the high-leverage ways you’ve improved the organization?
- What is the quantifiable impact of your projects? (Did you increase revenue by $10 million? Did you reduce year-on-year customer support tickets by 20%?)
- Who have you mentored and through what accomplishments?
- What glue work do you do for the organization? What’s the impact of that glue work?
- Which teams and leaders are familiar with and advocates for your work? What do they value about your work? One sentence, include data (e.g. survey data) when possible
- Do you have a real or perceived skill or behavior gaps that might hold you back? For each, how would you address the concern? One sentence each
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
Architecture Decision Records
2022-04-02 12:18
An Architecture Decision Record (ADR) is a document that captures a decision, including the context of how the decision was made and the consequences of adopting the decision.[^blake2020]
While the name implies that these would be used for mainly architecture level decisions, many people advocate for using them for nearly any decision, no matter how mundane.[^blake2020][^perkins2020] The purpose of recording as much as possible is to facilitate the 202110231449 Externalization of knowledge for software projects and product organizations. (202110231440 Knowledge is the backbone of a product organization)
ADRs are beneficial because they enable persistence and transfer of knowledge. They’re a great example of the 202110231445 The SECI model of organizational knowledge in action. They take 202110231457 Tacit knowledge and transform it into 202110231459 Explicit knowledge
ADRs can be used proactively to propose changes, or retroactively to record decisions that were already made.
My experience with ADRs has been split across two levels of use.
- Organization-wide — Valuable to an extent, but can be used poorly to push things that shouldn’t be approved under the guise of seeking wide consensus. The important thing for these to work are having good, competent coworkers and/or to have people who are not afraid to actively dissent in a widely public forum. They can be an invitation for people to engage in costly bike-shedding or an indispensable log of the collective mind of a group. Which side of this your group falls on is hard to tell and requires some radical candor to identify.
-
Notes should be densely linked
2021-09-09 11:32
Pushing ourselves to add lots of links to our 202109091129 Evergreen notes makes us think deeply about the connections that a concept might have (202109091134 Notes should be concept-oriented).[^matuschak2017dense] Since 202209091130 Notes should be atomic, we can also make links across boundaries that might even surprise us (202109091131 Notes should surprise us).
Finding the right links is also valuable. It requires that we re-read old notes and approximate a spaced repetition pattern.
By recording connections manually and intentionally, we build fine-grained associations between our atomic notes. These fine-grained associations allow organic structures to emerge (202109091133 Notes should associate organically). The network of connections that emerges here is arguably more valuable for knowledge accumulation (202109060836 Knowledge should accumulate) and management (202109060845 Knowledge is a heterarchy) than the contents of the notes themselves.
202209091142 Notes are the fundamental unit of knowledge work and manually connecting them amounts to nothing short of interpreting the units and finding patterns. From there, it's trivial to synthesize our multiple interpretations and models into a final thought — for instance, a written work.
-
Idea gardening
2021-09-09 09:47
Idea gardening is the practice of sitting on ideas so that they can germinate in your mind on the back-burner. If the idea is something you're thinking about occasionally over a period of time, you'll find that each time you revisit the idea, there's more there than when you left it. Our minds have a fascinating way of working on things without requiring conscious thought.
Related to 202107272242 The Art of using a Zettelkasten in that a Zettelkasten is a structured, textual way to plant atomic ideas as Zettel and let them grow and expand and link together over time through additions, linkages, and updates.
Idea gardening is half of the 202109091124 Anti-flow state. There's also a 202109091125 Free association of thought aspect that happens in idea gardening, but the anti-flow state is more deliberate time to allow the harvesting of an idea garden.
Idea gardening has been shown to be effective at facilitating creativity and original thought (202211030958 Creative accomplishments happen over time), though also creating a tendency towards moderate procrastination. (202110212227 Moderate procrastination facilitates creativity)
The Idea Garden
We plant ideas, consciously or not, deep in the depths of our mind. The place is dark, quiet, and damp, heavy with the breath of life.
-
Unifying My Domain
A Question of Scope
2021-07-01 00:00
Bringing all my projects under one roof.
I've been working a lot of small projects lately, learning some cool things, and wanting to write about it all. At the same time, I want to host the projects so I can link to them and show them off.
So I started updating my old site so that I could use it for hosting these projects, but then thought better of it. Instead of blogging on my blog, putting my portfolio on my homepage, and other things on other sites and domains, I'm just going to put it all in one place.
I think this approach is a good idea for a few other reasons too:
- All the code will live in one place so I'll be much more likely to maintain it and keep evolving it over time to be the tool that I want it to be.
- Building things is quicker and easier because I don't have to bootstrap a new project every time.
- I can easily expose all of my ongoing work to the world.
- There's no question about where something new should live.
On the other hand, there are some downsides:
- The project will get big.
- I'll be constrained by the tech and framework I chose here. It'll be more difficult to show off something like a Haskell project.
- Rewrites are tricky to do well. Though I have a leg up here because I'm the demanding stakeholder as well as the developer and customer.
-
Coaching underperformers
2021-10-18 11:58
Underperformers may not realize that they have an inflated sense of their performance. Managers should figure out the cause of their lack of awareness. In the process, they will either uncover what support the underperformer needs or confirm that they just might not be able to do the job and that they should reset expectations accordingly.
This situation is very draining on time and emotions for everyone involved. It's better to fix it right away.
Another insidious risk is that by allowing this to go on, a manager may be tacitly endorsing substandard performance, causing other employees to become demotivated, disengaged, or angry about the situation. (202110181231 Don't tacitly endorse bad behaviors)
Possibilities for alleviating the issue:[^kislik2020]
- 202110181203 Be clear about expectations — This can seem painful, but it's better for everyone in the long run. You have to be super clear on expectations.
- Provide employees with resources and support — If their natural skills are insufficient, they may not even perceive their deficits. It's important to coach, mentor, and get them in a position where they can grow and succeed.
- Determine whether you're willing to continue investing in the individual — If you're not, it's much more practical to reduce your expectations. Do not abandon them, but do not spend more time on then than is required. You should spend your discretionary time on your top performers (202110181205 Invest discretionary time in top performers). This also includes deciding whether they are below the acceptable line or above it.
Good -> great
can be abandoned, butfailing -> ok
cannot. If they're failing and can't improve, it's time to let them go.
-
Stir Trek 2024
2024-04-30 10:34
Selected Sessions
time room rank speaker track session 08:45 could not attend -
Prototype, Expand, Consolidate
2021-08-26 13:02
An efficient, sustainable engineering loop can be describe through the motto prototype, expand, consolidate.[^foote1994] This loop consists of three eponymous phases. This has also been referred to as the Fractal Model of software development lifecycles.
Phases
Prototype
Our primary objectives during the prototyping phase are learning about the problem space and fitting a solution to that. We pick specific portions of the problem space to stake our understanding to and just start building something.
We deliberately don't spend time trying to build perfect understanding and systems during this phase. Doing so is a waste of time because we're inevitably blind to the realities at the end location without walking the path first.
Expand
Our next objective is to expand. Similar to prototyping, we expand our understanding of the problem space and the robustness of our solution. This is the phase where nuance comes in. People find themselves saying "I didn't know that worked like that" or "I didn't know it needed to be able to do that" which causes us to expand our knowledge and systems to incorporate new ideas and functions.
There's another optional objective in this phase though.
-
The Entry Point
2021-04-29 15:22
#new #thread #source #structure #wip
This is the main entry point into my knowledge graph. At the risk of being prescriptive about categories and connections, a single top-level entry point is useful to maximize discoverability. If you're looking for other things I do, check out my home page.
The lofty goal of this project is to contain all of my knowledge. I hope this will be a lifelong project where I can learn, collect, and create a record of my thoughts in a simple, plain-text format that should never become obsolete.
Workflow
This will change drastically over time, but in an effort to keep myself organized, here's my process.
- Find a source of information
- Create a #source note with solid citations (managed in Zotero) for taking notes while consuming the source.
- Create, link, and manage the Zettel and my Zettelkasten.
For more information on the why and how of using a Zettelkasten, see 202107272242 The Art of using a Zettelkasten.
Tags
- The #structure tag is used for structure notes. These are hubs of Zettel that are connected under some sort of idea. They help with discoverability and maintenance of the Zettelkasten as a whole.
- The #source tag is a single Zettel to organize the notes I take while working through some source material. Each Zettel that's a #source is also a #structure Zettel. For example, I take notes while reading a book in a Zettel that's named for the book's title and tag it with the #source tag. These notes aren't technically needed if we do a good job citing sources, but it's helpful during the initial reading and note taking for long-form content that requires multiple sessions.
-
The Art of using a Zettelkasten
2021-07-27 22:42
Using a Zettelkasten is more of an art than a science. It's a personal relationship with an extension of your knowledge. Above all, it's important to just consistently work and think in this system to get the most out of it.
Personal preferences
- 202109091129 Evergreen notes
- 202107272238 When to write a new Zettel
- 202107292312 Project structure notes should answer a question
- 202107292136 The context of a link should give you a reason to follow it
- 202109091133 Notes should associate organically
- 202109091131 Notes should surprise us
- Use a reference manager. The references in the manager should only be ones that have been read and processed, ready to be cited in Zettel as I write them as the last step to processing a source. Don't clutter the reference manager with things I would like to read some day.
- Use a plain text editor and files. This makes everything much more cross-compatible and future proof.
Workflow
There are categories of things that I do regularly, and my Zettelkasten has a specific single place in a broader workflow. It's important to understand how we think and how the processes we use to do that thinking and synthesizing affect your ultimate knowledge (202109080847 As We May Think).
-
Designing for Big Screens
An Experiment in Adding More
2021-08-01 00:00
I've always wanted to see what was possible on the web when we use all the space we're given. Today we look at my take on how to add more for those who have the extra real estate.
There's that old, inaccurate saying, "we only use 10% of our brain". As terrible as it is, it's stuck with me over the years for some reason and it popped into my head the other day while working on this site.
I was trying to decide how to handle extra large breakpoints and was settling on containers with a
max-width
so that the content stays centered and predictable. It works well, but when using a ultra-wide screen or ultra-high resolution screen there's a lot of blank space just hanging around. So I started trying to think of a way to make the site more useful for people with all that extra real estate. After all, more and more people are using UHD screens.Note: For the rest of this post, I'm going to use the abbreviation UHD to refer to anything that's got enough screen space to end up in this category where there's usually a lot of blank space. Typically, I'm thinking of screens that are over 1440p. So something more in the 4k range, but not necessarily. A ultra-wide 1080p screen might also be considered UHD in this context just because it has much more horizontal space than a typical 1080p screen.
-
Remote team management
2021-10-22 08:45
This structure note records my learnings from taking the Coursera How to Manage a Remote Team course.[^murph2020] These notes come from a time before my Zettelkasten and are longer, more verbose, and less atomic than I'd normally like, but I'm just going to leave them as they are. That way, I can link to them and search for their contents without investing the time in breaking them down more.
Managing a team of remote workers presents unique challenges and opportunities:
Communication is Crucial
Embracing Asynchronous Communication
In a world dictated by calendars and schedules, people are conditioned to operate in synchronicity — meaning that they inhabit the same physical or virtual space at the same time. Asynchronous communication is the art of communicating and moving projects forward without the need for collaborators or stakeholders to be available at the same time your message is sent.
In an all-remote setting, mastering asynchronous workflows is vital to avoiding dysfunction and increasing efficiency. The benefits include enabling your team to work effectively across time zones, reducing meetings, and enabling team members to work on a flexible schedule — all of which raise morale and productivity. However, shifting to this way of working requires a lot of large and small adjustments.