Look at this orange: Now look at this orange: It’s the same orange. But, look how much more orange it looks with the red mesh on top of it: If you buy bags of oranges (at least at many places in the US), they frequently come in this red mesh bag. This bag makes the oranges look more orange. Oranger. Here’s what that looks like at a local grocery store1: Ripe oranges are usually oranger, so this bag makes the oranges look better than they may actually be. Maybe the secret is to never buy b...| Caffeinspiration
Sometimes I just love a good visualization, and there’s something about radar charts that makes them so approachable. Maybe it’s the asymmetry or the mapping to 2D space, but they give an immediate view across multiple dimensions. The other day, I was chatting with a colleague of mine about different areas you can grow in as a software engineer, and I was reminded of something I had been thinking about for a while: what would it look like to visualize your strengths and weaknesses with so...| alexanderell.is
Note: this post requires a basic familiarity with the songs discussed. If you’re not familiar with them, I’d recommend you listen to at least a portion of the following three songs: Free Bird by Lynyrd Skynyrd (YouTube) Cat’s in the Cradle by Harry Chapin (YouTube) Killing In The Name by Rage Against The Machine (YouTube) There are many musical genres I like, and what I listen to usually depends on my mood at the time.| alexanderell.is
The other day, I was thinking about less-obvious skills that I find helpful for working as a software engineer. Some skills are obvious, like understanding technical topics, learning new things, and thinking like a computer, but there’s a separate class of unobvious skills that an outsider may not immediately think of when they imagine a career in software.1 Empathy and communication are the main ones that come to mind.2 3| alexanderell.is
You’re given a list of integers and a target number. You can add, subtract, multiply, or divide numbers, and you can use the result for future operations. Once you have used a number in an operation, you may not use it again. Your task is to find a combination of arithmetic steps to get to the target number. For example, if you’re given [1, 2, 3] and the target is 9, a valid path would be the following:| alexanderell.is
Because I spend my entire workday on the computer, my mouse is very important to me. With my basic optical mouse, I’m far from a connoisseur, but there are a few things that I’m just so used to that I notice any changes immediately. For example, it’s easy for me to notice changes to my mouse acceleration, and even the slightest change in acceleration throws me off. I notice it so much that I have a program on my laptop to disable any mouse acceleration — even the default lowest value ...| alexanderell.is
There are things that are hard to measure, and there are things that are easy to measure. I think about this duality a lot when it comes to software engineering, especially when it comes to the difficult task of measuring developer productivity and engineer effectiveness1. Taking a very naive approach, there are many easily measurable aspects of the job that you could use2: Jira tickets closed Number of pull requests submitted (or reviewed) Number of lines of code Number of interviews given N...| alexanderell.is
Let’s say, purely hypothetically, that you’re in Joshua Tree National Park. Your partner dropped you off in the morning, and you’ve spent the day hiking and scrambling in pretty populated areas of the park. You arranged to meet your partner at 4:45PM at the place where they dropped you off. You’re currently in possession of a cell phone (though without any service), some snacks and water left over from your day, a notebook, and a pen.| alexanderell.is
I’m a big fan of trying new things. Part of the process that I’ve come to enjoy is facing and getting over my initial hesitations and reaffirming that it’s OK to be bad at things. Trying something new for the first time can be scary. There’s an element of vulnerability, where you’re clearly showing that you’re not good at something. It’s like I’m going to show up at the rock climbing gym and they’re all going to judge me for being the out of shape noob.| alexanderell.is
There’s a trap I used to fall into that has happened more times than I’d like to admit1. The typical scenario would be something like this: There’s a hobby I’m into (or starting to get into) I find myself wanting to do that hobby more than I currently am I find some THING that seems like it would help I somehow convince myself that having that THING would make the difference I purchase that THING The THING only slightly helps, and I may or may not do the hobby more Much like the scrol...| alexanderell.is
I dabble with DNS for work, and I’m frequently checking if CNAMEs are properly configured. CNAMEs are Canonical NAMEs, kind of like nicknames, that indicate that one domain name is a nickname for another domain name. For example, you probably encounter CNAMEs that map from the classic www subdomain: www.example.com CNAME example.com This entry indicates that example.com is the Canonical NAME for www.example.com. When you go to www.example.com, your DNS resolver sees this entry and looks up ...| alexanderell.is
A woodsman was once asked, “What would you do if you had just five minutes to chop down a tree?” He answered, “I would spend the first two and a half minutes sharpening my axe.” When it comes to solving a problem with code, I’ve found a few things that help make the process more efficient. The code is the output, but like sharpening the axe, there are a few things I do outside of writing code that makes it easier.| alexanderell.is
I like to window shop houses on Zillow. I really enjoy the recent trend of 3D interior scans, as they help give you a feeling for what the place is like, and it allows for another way to explore the space without seeing it in person, which is key for a good cross-country window shopping experience. The other day, I was looking at a 4 story townhouse, and I noticed a few weird things on its 3D model.| alexanderell.is
I got into programming after college, but there was a brief period of time when I had first tried to learn how to program. It didn’t stick, and I was thinking the other day about why that first attempt didn’t keep. It was during one of my college summers (2012 or so) when I was working as an intern at a small law firm in Vermont. My day to day duties varied heavily, with some days being very busy and other days being filled with nothing to do, and in some of that downtime, I decided to le...| alexanderell.is
When I usually think about context in the meta, non-technical part of being a software engineer, I usually think of context switching and swapping your brain’s focus and working memory from one mode to another, switching from focused programming to a status meeting or trying to fit in a little coding time in the 30 minute blocks in between meetings. Another aspect of context I’ve been thinking about recently is the separation of work context and home context.| alexanderell.is
I like to talk about small mistakes I’ve made. I’m a big proponent of psychological safety, and as a champion for it, I think it’s very important to talk about times you’ve slipped up or done something dumb. We all make mistakes, and there are times when you feel silly for doing something. This is one of those times. I recently merged a large pull request in Envoy that required a lot of work.| alexanderell.is
There’s nothing quite like merging a pull request that has been pending for months. It’s so satisfying. At Google, they have little badges for your internal user profile. One of the ones you can get celebrates the longest time delta in between creating a change and submitting it. For example, if you create a PR on August 1st and submit it on September 1st, you’d probably get the 1-month PR badge.| alexanderell.is
If you’re ever near a relatively low flying airplane, you may have noticed that it sounds like it’s in a different spot in the sky than where it actually is. You can hear the loud engines, and your ears tell you it should be in one place, but your eyes tell you it’s clearly well ahead of its noise. It’s a funny visual trick, and, living near the Boston airport flight path, I was thinking the other day about how it works.| alexanderell.is
Here’s a scenario. First, you download an app for a service that has some sort of in-person component, like picking up an order or meeting a driver at the curb. When using that app for the goal, be it that order or that meeting, it’s very helpful to have notifications, since they give you the current status and it can be important to coordinate. You’d like to get a notification for when your order is ready, since that takes away the need for you to repeatedly poll the app and refresh co...| alexanderell.is
I’m working on a color picking/finding game, and part of it will be asking the user to pick a color from a range of colors. This got me thinking: what are some ways we can represent RGB color space? RGB One way to think of colors, especially colors on computers, is as a combination of three different primary colors: Red, Green, and Blue. If we say how much of each color we want, we can build a color from the values.| alexanderell.is
In-flight messaging I was on a Delta flight the other day, and I was thinking about how they offer free messaging from your smartphone. How do they limit the wifi? Maybe they have some basic filter that says “deny everything except the urls for these 3 messaging apps”, which makes sense conceptually. What if we don’t want to pay for wifi and we still want to be able to browse the web?| alexanderell.is
This is a game for matching musical notes. JavaScript is needed to run this game. If you don’t have it enabled, I totally get it — I often don’t like it either. This is a simple ear-training game for matching notes. Play along with your favorite instrument! You can also try singing/whistling, but note that the pitch detection is hand rolled and rough around the edges — apologies if it makes any mistakes, especially for lower notes.| alexanderell.is
I saw a math puzzle the other day on Hacker News. It reads as follows: Two numbers are chosen randomly, both are positive integers smaller than 100. Sandy is told the sum of the numbers, while Peter is told the product of the numbers. Then, this dialog occurs between Sandy and Peter: Peter: I don’t know the numbers. Sandy: I don’t know the numbers. Peter: I don’t know the numbers.| alexanderell.is
I think a lot about the human part of code, especially the work our brains do when writing and reading it and interfacing with the computer. Rachelbythebay had a great take on a way to inject some brain-processing into a technical task - when you’re running a command to affect n servers, maybe it would be good to type that number in manually. The idea is to force you to take in that number through your usual input devices (I’d say eyes, but some people are using text-to-speech stuff or si...| alexanderell.is
What’s in a minute? It can be sixty long seconds, or it can be just a blink of the eye. Easy ways to slow time down If you’re trying to slow time down, see how long a minute feels for any of the following: If you’re able to, hold a plank for 60 seconds Read the Elementary Rules of Usage section from The Elements of Style If you’re able to, sprint at full speed for 60 seconds After asking a question to a group and hearing no response, wait for 60 seconds before offering the answer Try ...| alexanderell.is
This is a game for playing Wordle with Morse Code. JavaScript is needed to run this game. If you don't have it enabled, I totally get it — I often don't like it either. MORSE CODLE q w e r t y u i o p a s d f g h j k l Enter z x c v b n m -- Guess the MORSE CODLE in four tries.| alexanderell.is
I recently saw a common clickjacking dark pattern when trying to pause a video the other day. On a Bloomberg news autoplaying video, the sound is initially muted. Clicking anywhere on the video will unmute it. It would be pretty easy to have an invisible element overlaying the video that listens for a click, and it looks like that's probably what we have here: What's interesting is that the control panel (pause, play, scrubbing, etc.| alexanderell.is
I often walk my dog around a small reservoir near my apartment. It’s a perfect distance for tiring a small terrier, and it’s a beautiful area. There are a number of signs around the reservoir that tell you to not swim in the water (as it’s a backup emergency water supply) and to not walk on the ice when it’s frozen over in the winter (as it’s very, very cold if you fall in).| alexanderell.is
There’s a common pattern I’ve seen when learning something new, where you can effectively move towards a larger goal by working on problems just outside of your reach. I did a little thinking about what that would look like and how to find the right steps to take. Circles of knowledge: what I do and do not know Let’s say you have some general knowledge in some areas. I sometimes think about knowledge and “things you know and understand” as some sort of multidimensional blob that can...| alexanderell.is
Discoverability I spend a lot of my time thinking about UX and design, and I try to consciously think about it in the wild when I can. One of the things that always catches my eyes is the idea of discoverability, or how a user is able to discover that action X does some thing Y. A basic way to do so is to rely on patterns that we’re all familiar with.| alexanderell.is
Every now and then, there will be the type of problem to solve where I know it will require an extra cup of coffee, a long block of dedicated time, and a lot of careful reading, debugging, note taking, and going for walks to think. This is often “subtle bugs that are hard to repro but we need to fix” territory; it’s not fun greenfield development with a lot of brand new code (which, of course, would be a problem-free fresh start…), but instead, probably a small PR with only a few lin...| alexanderell.is
WebSocket (WS) connections are pretty neat. I’ve gotten to play around with them before, both for personal and professional projects, but my view has mostly been at a high level and concerned mainly with the things that I can build on top of them. I haven’t spent much time digging through the protocol. I thought it would be pretty interesting to build a toy WS server from scratch. Like many other projects, I find building a toy system to be such a good way to learn more, and I’ll be tal...| alexanderell.is
Software engineering is cursed with uncertainty. When we’re solving big new problems with software, if the exact problem has been solved before, we could just reuse the solution that already exists. Frequently though, the exact problem (or combination of problems) hasn’t been solved before, and we need to come up with a way to solve it. Have you felt that feeling? That moment of uncertainty, where you don’t know what the solution will look like.| alexanderell.is
Before I got into tech, I worked at a tutoring company in the Northern Virginia suburbs of Washington, D.C., doing a mix of schoolwork-related tutoring and standardized test prep. From a business perspective, it made so much sense - you have kids taking standardized tests and parents who wanted their kids to do well on them. Here we have the SAT, a measurable evaluation that can be an immediate help to your future if you do well on it (though whether or not it’s truly a good evaluation is w...| alexanderell.is
I like to keep a debugging lab notebook when I’m working through a particularly tricky problem. It’s nothing fancy, just a new tab visit to docs.new and a quick @today to add today’s date. I usually try to describe the problem and the specific issue I’m having, including any reproduction steps or screenshots (frequently copied over from the issue tracker). I try to summarize the issue and my understanding of how things work, though this frequently leads to a handful of open questions ...| alexanderell.is
I’ve been playing with the Web Audio API recently, and I made a basic app that will detect the pitch of incoming tones using your microphone. You can try it by pressing “Start” (be sure to try both the sine wave and the frequency displays), and I’ll be walking through how it works below. Start Press start to begin Rounding options: No rounding Round to nearest Hz Round to nearest note Smoothing options: No smoothing Basic smoothing Very smoothed (note must be more consistent and held ...| alexanderell.is
Usually, biographies go through someone’s story in roughly chronological order. OK, that’s a little too linear, like a page-a-day journal for your entire life. Realistically, you’re going to focus on different parts of the subject’s life more than others. You can imagine that broken up into chapters, too. Maybe our subject’s childhood is generally passed over in favor of the more interesting middle-life. This general flow makes sense, because you can do some fun foreshadowing by men...| alexanderell.is
I’m declaring defeat. Infinite scroll has won. There is an endless supply of interesting things to consume online, and there are teams and teams of very smart people working very hard to get me to keep watching. One more video means one more metric counter incrementing, one more engagement click, one more step towards growth, ad revenue, product success… The danger for me is that I fall in. It’s so easy to open an app in an automatic movement of muscle memory, filling up an empty moment...| alexanderell.is
It’s one of the little things I miss about working in-person with other people. Writing software can involve so many different tools. Before my current remote working times, one of the ways I picked up on efficient ways to use some of the tools involved was from seeing how coworkers navigated them, especially when they had a lot more practice with them. A colleague and I would be looking at their screen together, working with a tool that I had an OK understanding of, when they’d use a fea...| alexanderell.is
Playing sound with the Web Audio API Playing Morse code Morse code timing Playing letters, words, and sentences Adjusting the speed The Listening Game The “Speaking” game Parsing the incoming signal into Morse code Hooking it up to user input Finishing thoughts Last week, I posted a pair of games I made to play with Morse code in your browser.| alexanderell.is
Be sure to also check out my other Morse code game, Morse Codle, a daily Morse code Wordle puzzle. This is a pair of games for playing with Morse Code. Since the games play the signals as sound, I recommend headphones (wired if possible for the latency) and a low volume. Game options are available towards the bottom. Unfortunately, JavaScript is needed to run these games. The only JS running on my site is for the games (no tracking, etc) if you want to enable it.| alexanderell.is
traceroute is a tool you can use to trace the route of packets from your computer to another computer. It lets you see each step that your packets take along the way. For example, the following is the result of running traceroute from my computer in Massachusetts to “example.com”: You can see that it took 8 hops to get from my computer to the destination IP (93.184.216.34), and you can see the associated timing for three different attempts for each step.| alexanderell.is
There are many good things about JavaScript. There are also bad things about JavaScript. There are many cases of well-intentioned features in JavaScript being used for unhelpful purposes. These features can help support rich web applications with impressive features and capabilities, but they can often be used antagonistically, in the sense that they aren’t helpful for the user (like intercepting your clipboard commands). I find these cases interesting, and I wanted to explore a few of thes...| alexanderell.is
Shazam’s loading screen I was pleasantly surprised by Shazam’s iPhone app loading screen, and I took a look into what makes it stand out. Here’s what it looked like: This felt different, and it made me look at the experience of opening apps. I started by spending a bus ride home from work opening and closing apps to get a feel for why this wasn’t like other apps. Loading… A loading screen tells a user that the app or other result is not ready yet.| alexanderell.is
I worked through the third basic project in the Arduino Starter Kit Projects Book. I like to write about the projects to reinforce my own understanding. The third project, the “Love-O-Meter”, creates a simple circuit with a temperature sensor. Using the Analog-to-Digital converter, the Arduino reads in the value coming from the temperature sensor, then lights up a combination of 3 LEDs depending on that value. Here’s what my circuit looked like:| alexanderell.is
I take the MBTA 86 bus as part of my commute in the morning. It runs from Reservoir in Brighton to Sullivan Station in Cambridge, and it stops at Harvard on the way, which is where I get off. Right after the Eliot street stop, there are two ways for the bus to get underground to the Harvard stop. One way is to go down Bennett St., take a right on University Road, take a right on Mt.| alexanderell.is
Arduinode I’ve been working through the Arduino Starter Kit projects recently, and I wanted to try a new project that was outside of the pre-made booklet. Working with an offline Arduino (intranet of things?) has let me learn a great deal, and I wanted to see how difficult it would be to connect my Arduino to a simple Node server, which would get me ready to connect it in any future projects.| alexanderell.is
Investigating a bug in Moment.js In this post, I walk through the steps I took while investigating a bug in Moment.js, an open source JavaScript library for dealing with dates and times. Rather than write about what would have ideally happened (the steps of which would look like 1) see bug, 2) know issue, 3) investigate fix, 4) open PR), I wanted to include the entire process, which included some| alexanderell.is
The disconnect between “what seems like it should happen” and “what happens” causes you to push doors that are to be pulled, tap ads that load in the place of content, and cast null into 0 by accident in JavaScript. For more on JavaScript’s unintuitive behavior, please watch (or rewatch) wat. Much of this behavior can be explained by JavaScript’s casting. From ECMAScipt: “The ECMAScript language implicitly performs automatic type conversion as needed.| alexanderell.is
In my last post, I looked into some JavaScript casting and explored why 0 <= null evaluates as true. For this post, I’d like to investigate another unexpected behavior in JavaScript: why typeof(null) evaluates as 'object'. This is a well-known bug, and we’ll investigate first in the ECMAScript specification followed by a deep dive into an early implementation of JavaScript to see the bug in its natural habitat. The main idea is that the code assigned each item some bits for use as flags f...| alexanderell.is
I’ve found that one of the best ways for me to really understand anything is to implement it myself. Between the ECMAScript spec and a few lines of JavaScript, you can build a chunk of knowledge for a very specific area of JavaScript. Doing this often is a great way to gain a deeper understanding of the language, and it’s a great exercise in reading the docs, reading code, and creating your own solution.| alexanderell.is
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. Jamie Zawinski Regular Expression Lookbehinds I recently came across an interesting regular expressions use case that led to an interesting look into regular expressions, JavaScript engines, and release versions. In particular, I was trying to find a certain substring from a string that did not contain a substring preceding it.| alexanderell.is
I’m a fan of small toy projects that have the sole purpose of demonstrating a concept. This is a small project that demonstrates how a cache server works. I think it’s important to balance toy projects with getting exposure to production-level code. While this project has been helpful for understanding the idea, an open source project like [Squid-Cache] (https://github.com/squid-cache/squid) is definitely on my reading list! At the very simplest level, an HTTP server responds to requests.| alexanderell.is
I enjoy looking at design in everyday life and the balance between how things are designed and how people try to use them. A store I visited recently had bad customer flow, and the signs were there. There was literally a sign telling customers where to line up for the checkout line. Customers didn’t naturally line up there, and an employee was correcting customers who missed the sign. This is bad design.| alexanderell.is
Exploring a simple machine I took apart a simple spray bottle to see how it kept fluid flowing only in one direction from the reservoir to the nozzle. It does so with simple check valves made of two pieces of plastic, a spring, and a small sphere. It’s a simple way to solve a tricky problem. A simple spray bottle One way flow It’s often useful to restrict flow to only one direction.| alexanderell.is
MapReduce Explained Using the Ten Hundred Words People Use Most Often MapReduce is a good way to take a big job that would take a long time on one computer and break it up into smaller jobs that can be done by simple computers. If you can break down a big job into smaller jobs, you can run the smaller jobs on many simple computers. If you have a lot of simple computers, you can do a lot of the smaller jobs at the same time, and this can make your job go a lot faster.| alexanderell.is
Junk mail is so interesting at its odd intersection between design, advertising, and psychology. I usually try to pay attention to the ways that things around me are designed, and recently I’ve been saving some junk letters that are particularly interesting in their attention-grabbing efforts. Here are a few of the notable envelopes I’ve received in the past few months. What if we didn’t put any information on it and made it look exotic?| alexanderell.is
One of the best ways to learn and come up with new ideas is to focus intensely on a problem, then let your mind wander. I’ve enjoyed doing this when problem solving and learning, and recently I’ve been thinking about how weird it is to build trust in your unconscious to do the work for you, especially when it comes to technical work. Letting your mind focus and letting your mind wander The first recommendation I have for anyone taking a meta look at learning is Barbara Oakley’s Learning...| alexanderell.is
Looking for an em dash I was recently trying to find an em dash character to use in a piece of writing. Since I don’t have the shortcut memorized—for future reference, shift+option+minus on Mac—I did a quick search for it. I didn’t see one on the search results page to copy, so I clicked into the first result: “The Punctuation Guide”: From https://www.thepunctuationguide.com/em-dash.html I’m a sucker for a good copy and paste, so I selected the em dash character, copied it, and ...| alexanderell.is
I’ve been working in software for a few years, and I’ve come to take it for granted that I am not my work. My work exists in some separate sphere, where it can easily be critiqued, dissected, refactored, or improved by me or anyone else. It’s as if it’s in a separate pond from my private one, where any ripples don’t cross the pebbly barrier to the rest of me. I’m still proud of the things I make and still take ownership over code, projects, and problems, but those things are separ...| alexanderell.is
It was around 4PM a few Fridays ago when I heard that something had gone wrong, and I volunteered (was volunteered?) to help fix it. There was a broken internal configuration that blocked future immediate work for an upcoming launch that same day. I hadn’t worked on this particular system, just similar things before, but because I’m decent at visualizing and debugging these things, my colleague asked me for help with it.| alexanderell.is
I’ve recently been getting more interested in distributed systems, and I wanted to get experience building some of the concepts I’ve read about. My interest lies more on the software and system design side – more “how would we design and build an example of a distributed file system across four computers?” than “how do I make a reliable home server to play media?” – which is why my focus is on playing around with some toy software problems instead of worrying about what a real...| alexanderell.is
I recently put together a Raspberry Pi cluster to try out some toy distributed systems projects, and I wanted to start with a basic monitoring program to get my feet wet and work out the following: Getting each node running and set up with software Running Go on each machine Deploying code to each machine Nodes listening & responding to RPCs Sending/receiving RPCs between laptop and nodes As I’ve previously mentioned, this isn’t meant to be production grade, since I would just grab one of...| alexanderell.is
You’re reading this in the future. Isn’t that weird? Even I’m reading this in the future. Let’s say I write the last “C” in this sentence at 7:41:50 EDT in the evening of Friday April 16, 2021, or exactly 1618616510 seconds since January 1, 1970, UTC. Even as I started typing this next sentence, let alone editing this and pushing this to my blog, that time has passed, and we’ve all moved on.| alexanderell.is
There are many ways for computers to talk to other computers. A commonly used approach is a Remote Procedure Call, or an RPC. An RPC allows for the abstraction of calling another computer’s procedure as if it were a local one with all of the transmission and communication taken care of. Let’s say we’re writing some math program on a single computer and we have some procedure or function that handles checking if a number is prime.| alexanderell.is
I recently read Turing’s Cathedral, a book about the early history of computers, and it largely focused on the life and brilliant times of John von Neumann, who was, to put it simply, a genius. It is both fascinating and disappointing to learn about a brain that works so much better than your own. Fascinating because the wide spectrum of human ability has led to a brain so capable. That we (in the general, humanity sense of “we”) are able to perform such feats is incredible.| alexanderell.is
“I’m going to be 29 anyways, so I might as well be 29 with a Master’s.” — me 5 years ago debating whether I should take classes On June 5, 2017, I started taking classes at Tufts University while working full time. On January 4, 2022, I submitted the final draft of my Master’s thesis. Much like my past self had hoped, I’ve made it 4 years in the future, and I’m done with my Master’s program.| alexanderell.is
Editor’s note: the following document was found in a collection of papers and assignments, apparently dating from late 2020 when the author was stuck inside studying distributed systems. An additional note, written in green and red Crayon on the back of a CVS receipt, was found stapled to the document: “it is now winter . this work features only approximate explanations. it favors silliness over accuracy in some sections. it should be taken with a light hearted grain of salt” [sic].| alexanderell.is
The other day I was reading about the development of personal computers and the desktop GUI, and I was thinking about how comfortable we all have become with the analogy of the “desktop” for our personal computers. We place files in folders and keep them on our desktops. There’s a lot of physical action going on. Humans are very good at understanding spaces, especially when it comes to remembering physical spaces, and it got me thinking about how we commonly visualize code.| alexanderell.is