At some point in every software developer’s career (and likely so for other knowledge work), they are subjected to a tomato-based hazing ritual known as "the Pomodoro Technique".
The process is always the same:
The Initiate overhears the Senior Engineer Cabal during one of their cloaked rituals—the Morning Standup—as they describe the number of Pomodoros a task will take. During their open office peer one-on-one, the Initiate vocalizes their curiosity of how Italian tomatoes map to man-months, to which the Senior Engineer coyly responds:
INSERT_TIMER_APP_HEREto keep track of your Pomodoros. All other timer apps suck.
And off the Initiate goes, never to be seen again. Not because they’re working, but because they’re testing alternative Pomodoro tracking apps. Only 173 to go...
Even if this story is only a shoddy attempt at half a polite chuckle, the Pomodoro Technique is both very real, very misunderstood, adored, and occasionally even effective.
What about those interruptions? Leaving distractions—called “internal interruptions” in the lingo—aside for a moment, what are you supposed to do if others interrupt you?
According to the original Scripture, you are supposed to “inform effectively, negotiate quickly to reschedule the interruption, and call back the person who interrupted you as agreed.”
For such a prescriptive schedule of work, there’s nothing to acknowledge when that interruption is to be rescheduled for. Furthermore, as a leader I’m interrupted constantly, so this is not a small issue: it’s core to how I need to work.
Interruptions kill Pomodoros. This is why so much of the language, writing, and culture of Pomodoro users talks about “protecting the Pomodoro.”
When your work is about interruption—when your work is about being the interruptable one—then you yourself have taken the Pomodoro Technique to a farm upstate.
I’m still working on the same problem, but the solution I’m using today works better than I initially expected:
For a few months now I’ve had a small device running in the corner of my office. On it displays the current time, and most importantly a buzzer goes off at :25 and :55 when it’s “time” to take a break, and at :30 and :00 when that “break” would be over.
Do I actually take those breaks? Almost never, but the little buzzer keeps me informed of the break time I’m missing through my various meetings and interruptions, and my subconscious does a remarkable job of nudging me each time the buzzer goes off just how much of a debt I’ve accumulated. Practically speaking I only get to pay up a couple times a day, but now it’s become a conscious, guilt-free choice both to take the interruption and to take the break(s) I’ve neglected.
When I first started using the Pomodoro Technique circa 2009, my emotional takeaway was the feeling that I’d taken control of my time, no longer controlled by it. My tomato timer may be dead and gone, but this new timer has resurrected that feeling of control and determination, and I look forward to working with it for even longer.
I have a relatively ecclectic library of music. In the above screenshot is an English electronic band, a French disco artist, and two American bands: one rock, and one bluegrass.
With a library like this, it can be downright jarring to shuffle everything.
Each music app has its own way of dealing with this problem, but none do so completely. Playlists? Terrible if a song fits more than one mood or genre or whatever. Tagging? Way too manual and finicky. Recommendations? Too biased and will eventually converge on one style of music.
I've dealt with each long enough to know how to get them to work, but I had really hoped there was a better way. After more than a decade of these sorts of jagged, jarring, manual, and often lackluster listening experiences, I had an idea: what if I could shuffle my library by album, rather than by song?
I know this isn't a novel idea. I have two of those oldschool, drum-based CD changers, each of which supports this exact feature. That said it's always felt like an ancillary feature, and hard to control. What if I could see a queue of those CDs, filter out CDs that I don't feel like today, etc.?
I have plenty of issues with Spotify. They don't pay their artists enough. It's a terrible solution for long-term library "storage", as they're constantly breaking whether a song or album is Saved to your collection. Their library of music is incomplete in selective ways. Their recommendations are White-centered.
That said they're the best option to try out this idea, and this was an opportunity to try Glitch.
But using Spotify for this worked great! If you go to the ABRPT app, you can (after Glitch warms up the app) log in with Spotify and see a preview of what random 8 albums ABRPT wants to queue up. Clicking Apply appends those albums (song-by-song due to a limitation of the Spotify API) to the end of your Play Queue.
If you don't have an active Spotify device, this may fail; start Spotify playback on the device you want, and try again.
If you want to check out the code, it's all available here on Glitch. Check it out, and let me know what you think!
TL;DR: The Today Display holds a single 2.5" by 3" index card, just big enough for the most important notes and tasks for the day. The STL is available on Thingiverse.
This design was inspired by the Analog Kickstarter. I liked the idea of a card holder to localize my daily tasks, but I already have a "productivity system". Everybody does. I already have a rolling backlog of work that needs to be done. Most people do. All I wanted was a card holder.
Furthermore, a full-size index card (3"x5") is too big for a single day's tasks: cutting the cards in half produces just the right size for the most important work I need to accomplish, and nothing more.
I keep yesterday's card around long enough to help update my team with any leftover notes. With any luck, though, I've spent a few moments at the end of the previous day starting today's card:
At the top of the card, I put the date. Along the left edge of the card are bullets: a dot for a task, and a dash for some critical but not actionable detail. As mentioned above, if I think it won't fit on the card, it belongs somewhere else.
Don't overthink it.
Did you ever have a random idea that you couldn't get out of your head? The most ridiculous, out-of-nowhere idea provides its own rationale as it lives between your ears. So it was with this logo.
Initially I was just playing around with various forms. As with most visual work, I doodled and doodled and doodled. Eventually, I started playing around with two of my favorite characters: the ambersand (&) and the question mark (?).
If you'll excuse my over-the-top nerdiness here, take a second and think about these little things: on the one hand, a visual portmanteau of the Latin word "et", and on the other a "lightning flash" to end a sentence. Beautiful! Unique! Absolutely incredible.
As I was playing with them, I realized you could flip the ampersand, and connect it to the question mark. It was a really fun corruption of those symbols, and it stuck in my brain.
At some point in a project I realized I'm losing steam—maybe it's interest, maybe time, maybe energy—and my solution to that is always the same: lower the bar, and ship. Now that I had a logo idea that I liked, I dropped it into Sketch and shipped it as fast as I possibly could. Plain color. "Good enough" Bezier curves fitting the transition between the two characters. Export to SVG. Move on.
After I deployed it, though, it haunted me a bit: did it "mean" anything? Well, no. Did it need to? Well, no. If it did, what would it?
Again, the logo doesn't mean anything. It's not special. It's an accident, and I love it. But your brain needs it to mean something. If you're like that, too, take your pick:
And now that I've published even this ridiculous screed, my brain can rest.
I really thought I had finally built a simple, maintainable, modern, single-page application.
When I returned to this project after only six months, every build resulted in nothing but errors. Errors as far as the eye could see.
No environment should be this hostile.
You just can't walk away.
I've never experienced anything like this from a programming environment, before or since.
For better or worse, browsers remain a ubiquitous application host, and one required of any business, no matter how small.
So what do you do?
One option might be compile-to-JS, and I want to keep an eye on that space. None of those options are so mature or so stable or so accessible that they can really compete, though! And culturally, they feel just as churn-driven as the environment they hope to replace.
Perhaps ironically, the reason not to is that it feels like untested water. So many modern applications moved away from 100% server rendering, touting it as "faster" and "better for users".
Is that still true? Who is pushing the boundaries of an alternative?
I've used too many to expect the next to be any different, and I've been using them too long to expect them to improve.
I'm disappointed because I really want this ubiquitous, accessible development environment to change.
I'm disappointed because I still feel it WILL change, and I might miss it.
I'm disappointed because I can't wait for it to change to stay here, on the web, making apps.
The final episode of my Project Kong series, a fun (and adorable, if I do say so myself) demonstration of how it works.
This video touches on the basics of what we need from Bluetooth and the little RedBear we installed earlier in the series: tracking. Bluetooth, particularly the current standard for Bluetooth Low Energy, makes a good platform for wirelessly tracking physical objects.
In our case, BLE is what Kong will use to track the person it's trying to follow and protect; a small wearable on the person makes the individual “visible” to Kong.
This video is an admittedly very shallow dive into the theory of AI, all to support the question, "Where does Kong need to go from here?" If you're looking for a deeper dive, here are a few respources:
This video has our first modification to the Donkey Car; we restore the use of the original remote control. To do so we use a RedBear Duo to read the PWM signals comming from the RC receiver, forwarding them on as control codes over a serial connection made to the Raspberry Pi.
This video starts with a quality of life improvement: we move the main power switch for the car itself to a much easier-to-access location. It's been life-changing for the rest of this project. As a part of that section of the video, I show the macroscopic I've used for all the adjustments: “opening up” the car like a book, mounting the custom components to the flat platform, etc.
Also, mounting tape.
After a quick run-through of how to boot everything up, the video walks through the basics of calibration. The original documentation can be found on the Donkey Car website.
Finally, we go for our first test drive! Huzzah!
The music in this video includes “Days Like These”, “Golden Hour”, and “In My Dreams” by LAKEY INSPIRED: https://soundcloud.com/lakeyinspired
With the hardware fully assembled, this episode focuses on installing the software, connecting the car to the local Wi-Fi network, and creating the scaffolding for our Donkey Car project. This is the second of three in this series dedicated to assembling a Donkey Car without modification.
The accompanying documentation can be found on the Donkey Car website, but in particular, the following links will be helpful:
The music in this video is “Elevate” by LAKEY INSPIRED: https://soundcloud.com/lakeyinspired
The first step for Project Kong is to assemble the hardware sent by Arm for the Donkey Car. This video (originally intended for YouTube) walks through that process.
The actual hardware assembly (i.e. not the intro or outro) was the first thing I recorded for this series, and it may show. That said, I think it's a useful supplement to the official Donkey Car docs.
Best of luck, and do get in touch if you have any issues.
This video introduces the first videographed project: Kong.
Kong is a small, autonomous, beginner-friendly rover designed to help with elopement in children living on the Autism spectrum. It leverages the Donkey Car platform for the car, adding a RedBear Duo for Bluetooth scanning (and some other, wonderful capabilities revealed later).
I had the privilege of giving this talk twice more: at Bellingham Codes later that fall, followed by LibertyJS in front of the biggest audience I've ever had the pleasure of presenting to. It's a flurry of “out of the text” conclusions drawn from the ECMA-262 Specification, and it was a delight to prepare.
I've been working on a simple video series for months. I've been learning how to shoot, organize, edit, practice, re-shoot, re-edit, render, and export video. I've been prototyping the project being recorded, writing scripts, and rebuilding the project as a one man film crew. I have designed and re-designed title cards and social media icons and banners.
And then I uploaded the above to YouTube.
First, I uploaded it to my personal Google Account, but I realized it would be safer to upload it to a separate, branded account. By YouTube's own recommendation, I created a Brand Account for this content. I uploaded the first few episodes, and went to bed.
The next morning, my account was disabled. No explanation.
In their typical tone, Google “helpfully” suggested I could request my account be reinstated. I did, and went back to waiting.
After a week, they disabled my Google Account (not the Brand Account), and reenabled it. Cue pats on the back.
I've gone through that rigamarole twice more, and still no satisfactory solution or explanation. If you've ever heard me say, “Choose a vendor that cares you exist,” this is exactly what I'm talking about. If this project was reliant on YouTube (to make money, it kinda is), it was dead on arrival, and I have no recourse.
Choose a vendor that cares you exist.