a plate of food with rice meat and vegetables a group of items on a table a vase filled with purple flowers a pair of shoes a close up of a flower a bowl of food on a plate a close up of a toy a bowl of food on a table a close up of food on a plate a couple of people posing for the camera a can of food a vase of flowers sitting on top of a wooden table a group of colorful flowers a white plate topped with meat and vegetables a vase of flowers on a table a close up of a bottle a group of purple flowers a white plate topped with different types of food on a table a close up of a bottle a plate of food with a slice of cake on a table a white plate topped with meat and vegetables a woman standing in front of a television a pink flower on a wooden table many different types of food on a plate a doughnut sitting on top of a metal rack a donut on a grill a room with a large mirror a woman sitting at a table with a plate of food a computer sitting on top of a table a vase of flowers on a table a group of shoes on the floor a pile of fries on a plate a close up of a plate of food with rice and vegetables a plate of food on a table a close up of a phone a white plate topped with pasta and cheese a close up of a newspaper a piece of food a close up of food on a grill a white plate topped with pasta and vegetables a pile of food
Happy Planner
Inspiration

I have a paper planner problem. Maybe.

I have tried probably every todo app under the sun and they all suffer from the same fatal flaw for me: the window/tab/app gets buried and I stop referring to it. Now, if I was rich with unlimited space, maybe I’d get a monitor just for a todo app. But, I’m not! And I also embrace the small child in me who still loooooooves stickers and an endless supply of gel pens.

My basic planner method is the same no matter what the actual paper product is:

  • A weekly overview of things I need to accomplish or focus on that week along with a summary of how I felt about last week and things I’m grateful for (I think this is corny and I am here to admit that it is a nice thing to do for mindfulness).
  • A section for each day where I write down the top 3 things I have to get done that day (or more realistically, really should get done) and any other todos that come up.
  • Somewhere to take notes.

Some additional nice things to have are: tracking various kids’ activities, food management, and keeping memories.

In the layout above, I’ve repurposed some sections to fit whatever I needed, and ended up using the 3-part box that typically would be last week summary/this week summary/gratitude for some notes on my sister’s wedding instead, but it’s a good overview of how I use things. On the left there are things that really about the week or some specific item of planning (trips, in this case) that isn’t really tied to a given day. I also like to use a quote/phrase sticker down at the bottom, and eventually added a photo of an actual spontaneous girls’ night in an empty area.

On the right there’s one box where you have a line per day, and I split that in half to put my workout schedule – currently following P90X 3 – and the main meal I need to plan each day. After that there’s one box for each day of the week, where I was pretty good about writing down my top 3, if not actually getting through them. It was my first week back at work after sabbatical, I’ll forgive myself. The Saturday box is covered by another photo I printed out of a special memory I wanted to keep of that day, which perfectly fits inside the box. I use an HP Sprocket I picked up for super cheap for little photo stickers and I’m pleased with it, full price is perhaps a little steep but it’s really fun to have, especially because I only have a black and white laser printer at home.

Each Monday morning I sit down and get things mostly set up – drawing 3 circles for each day, reviewing the fridge, reflecting on the past week, transferring any continuing projects or todos, picking out some stickers, etc. I don’t really go for color schemes or any particular theme with stickers, but it’s a fun way to repurpose or define sections and emphasize things.

Top 4 priorities sticker
Planner sticker!

So how did I end up going from a dot grid notebook to this fancy thing? And what is the deal with the stickers? Well… last fall, I went to Target, as one does, and randomly picked up a pad of planner stickers that jumped out at me because they were really well-designed, nice paper, and the bulk of the stickers were for writing down your top 3-5 things to do in a cute little box. Perfect for how I set up my days!

I really enjoyed the stickers so I went online to try to find more of them and… couldn’t. Turns out they were a limited Target-specific release that I lucked upon. But it did lead me to the company and their core product – the Happy Planner. I’ll be honest – I got completely sucked in to browsing stickers because again, I LOVE STICKERS, but didn’t really find the planners all that appealing because most of them focused on more of a sticker-centric artsy layout, rather than writing on lines. I ended up ordering some sticker books to pick up from a craft store on my next trip to the US, and when I went, I browsed their planners in person and found this one with a layout and relatively understated design that actually appealed to me.

Here’s the thing: this ecosystem of products can really suck you in. There’s an entire world of YouTubers dedicated to showing how they sit down each week to do “spreads” and explaining the pros and cons of the different layouts (mine is called a dashboard layout, apparently) and flipping through sticker books and buying dedicated planner totes. I am perhaps not at that level (though turns out of my beloved friends is at the cutting-custom-stickers level so I mostly just text her about this), but I did get a couple other things that are worth mentioning.

I also picked up a pack of project planning paper in a bigger size and figured I’d try them out before committing to the whole disc-bound system. I ended up enjoying it so much I bought one of their notebooks in that size with a cover I like a lot to hold that paper. I really like being able to customize the contents of that particular notebook without it being a hardcover binder, so it currently has a combination of project sheets and regular lined paper.

And finally, besides the ever-growing pile of sticker books, I have one of their recipe organizers. I have a pretty sizeable collection of cookbooks that I use a lot, and the internet is a treasure trove, but I find myself continuing to write down favorites we make constantly and I’m tired of digging out a giant book for, recipes from friends and family, and modified versions of things that I’ve figured out over several iterations. There’s this funny orange journal I’ve had for almost 20 years that’s become the place I write recipes down (after cutting out several pages of teenage angst at the front), but I figured a structured recipe keeper that still lets me just write stuff down would marry the desire to have something polished with my preference to not futz with my computer any more than I already do. To be fair, I do end up printing the recipe names and foiling them (another post someday, maybe!), but that’s it for the computer involvement 🙂 The disc-bound system also comes in handy again there, because I’ve added a page for common weights and conversions that I use frequently and are spread out between several different books.

Anything else you want to know? Just ask! And I’m sure I’ll change my mind again 6 months from now, because I’m always trying to manage myself better.

Project planner
Bonus photo of one of the project pages, from my swipe card jukebox
Standard
a piece of cake sitting on top of a table a man standing next to a sign a close up of a plant a glass of beer on a table a close up of a bunch of stuffed animals a group of palm trees next to a tree a group of shoes on top of a table
Swipe card jukebox
Music, Technology

Building a swipe card jukebox using a Raspberry Pi

You know how everybody hates on recipe blogs that start posts with stories even though a) it’s good for copyright and b) stories can tell you a lot of things about humans and the why and how of their food, well if that’s you then you’re going to hate this tech recipe! Or you’ve already scrolled past this.

So. Last year, I saw this tweet:

I have never done any hardware tinkering, but I immediately wanted to make one of these for my kids. The oldest is pretty good with making requests from voice assistants, but the little one isn’t there yet and we have some other problems anyway: preferring edited or specific alternate versions, difficulty requesting things that aren’t in English, and often a lot of people in the house making a lot of noise, which leads to yelling and garbled results. (See what I did there, I defined the problems I was trying to solve for, it’s like I’m good at my job or something.)

Since I have a few Raspberry Pis I’ve acquired as conference speaker gifts, I wanted to try to use as many existing parts as possible. My first thought was that I would like to play audio through an unused Google Home Mini, but it doesn’t have aux-in and honestly I just could not decipher the documentation around Google Assistant+Actions and those type of generic names and entangled services make things highly unsearchable. I decided to go with regular audio output and figure I can keep iterating with software and/or hardware over time.

The original maker doesn’t seem to have ended up doing a write up of what he did, so I took a look at other similar things people have built. I found this blog post, which took me to their code on GitHub. Availability and pricing as well as a love for the more tactile experience told me I still wanted to use swipe cards rather than RFID, and I don’t really know Python and wanted to make something with as little configuration or dependency management as possible so I figured I was on my own code-wise. That said, that blog post gave me a general direction for approach and led me to Pi MusicBox, which also serves as the base for my player.

I finally ordered the materials off Amazon mid-December for my spouse to bring back from his trip to the US, and got to work because I only had a week to get it all done. Here’s my planner page I worked on to get a head start while I waited:

I love paper planners, this is a Happy Planner project sheet which I’m really enjoying, maybe I’ll write a post on how I use planners at some point and really become a Planner Person.

First up was testing the card reader and setting up the writer, which was not a smooth process. I had to find the writer software online, because who has a CD drive anymore? The driver took forever to finish installation for some reason, but once it got there it seemed to work. Except that the card reader wasn’t returning anything. I tried a regular old bank card (I used one for a defunct account just to be extra safe) and only got numbers, no name, even though having done my time in retail I knew my name should show up in the magstripe data. I tried writing data to a fresh card in all 3 tracks and would only get tracks 2 and 3 from the reader, or sometimes even just track 3. Seems like a malfunctioning card reader (I’ve also occasionally noticed ghost input now that the jukebox has been running for a few days). Update in 2020: I got a second card reader and it works correctly.

Because tracks 2 and 3 can only contain numbers, I decided that the best route to go would be to just encode numbers sequentially and grab that line from a list of Spotify URIs for playback. My first few tests got nowhere – successful write, but wouldn’t read. I tried finding a new card reader in person but to no avail. I tried test data again and… it worked? That’s when I realized that my test data had three numbers, so I tried putting 001 and voilà, that fixed it. After thinking through it a bit, I actually realized that this was the best route anyway – if a Spotify URI stops working, I can swap it out, and the usual ISO encoding for cards is all-caps anyway, and the URIs are case-sensitive.

I decided to put the number on all 3 tracks since the reader seemed to unpredictably read either one or both of tracks 2 and 3 and I might replace it later. This was pretty easy in the card writer software, which allows you to create cards from a file, which I generated using a quick and dirty Bash script. I also made a card with 999 as a special case for toggling playback – there is also a local web server you can access for various functionality including shutdown/reboot, but a basic toggle seemed useful for the kids.

The script itself is extremely small – it does a little Bash magic (parameter expansion!) to extract the first number it comes across, strips off any leading zeroes, and then gets the indicated line from a list of song URIs if it’s not a special case card and plays said song. I stressed about it for a long time but in the end, my first working run was less than 10 lines of code.

For labels, the initial inspiration indicated that they made a React app that pulled in the data to make printables, which is super cool! I, however, am a weirdo who despite being a programmer is still often faster knocking stuff out in Photoshop/Illustrator as opposed to writing a whole app. I also wanted to use artwork besides album covers for many of the cards so that my 2 year-old can differentiate between tracks from a Mother Goose Club or El Reino Infantil album and pick what she wants – this has already proven successful 🙂

I did not hand-make a fancy box, though I might end up 3D printing something eventually, but I did discover that some of the drawer organizers I use were a great size and are good enough for now. Here’s what I ended up with for Christmas morning:

I enjoy posting about the process of building or learning things, and I’ve had a lot of people asking me about this, so I think it makes sense to blog about the process and the result. So now that you know why I decided to build a jukebox and how I arrived at the choices I made, let’s get into the step-by-step.

Materials

  • Raspberry Pi (any model, 2+ recommended)
  • MicroSD card (1GB+)
  • Speakers
  • WiFi adapter if needed for the Pi
  • Magnetic stripe cards (mine)
  • Magnetic stripe card writer (mine)
  • Magnetic stripe card reader that emulates keyboard input (mine, the first one I had so you can avoid that one because of the issues)
  • Spotify Premium account (protip if you have kids: use a family account and set up individual accounts for devices so you don’t run into playback limitations and you keep your recommendations somewhat more sane, I name them things like Alexa so if you ever see a reference to an Alexa Sandí associated with me please know that is not my actual child and somebody has sold or stolen my data)
  • A computer that can flash SD cards, run the card writer driver and software (I’m on a 12″ MacBook), and if you want to use my templates, access Adobe Illustrator
  • USB keyboard and HDMI monitor for initial setup (I used my Magic Keyboard with a cable and a TV)
  • Whatever you need to print 2×3″ labels (I had them printed onto adhesive sheets at Office Depot and cut them to size myself)

Process

  1. Set up Pi MusicBox. I found their documentation to be perfectly adequate, just note that when setting up Spotify you have to authorize and generate tokens that are copied into the config file.
  2. Boot up the Raspberry Pi with the card reader plugged in and log in. Test Spotify playback by running mpc add spotify:track:7GhIk7Il098yCjg4BQjzvb && mpc play
  3. Optional but recommended: fork my GitHub repo so you have your own copy and can keep your song list edits there. After forking, be sure to edit jukebox.sh to point to the songs.txt in your own repo.
  4. Run curl https://raw.githubusercontent.com/helen/swipe-jukebox/master/jukebox.sh > jukebox.sh (substitute in your own username if you’ve forked the repo above).
  5. Set root to auto-login on boot and /root/jukebox.sh to run after login so the setup can live headlessly going forward. These instructions work well, noting that the user for MusicBox is root, not pi.
  6. Run bash jukebox.sh; this will download the song list referenced in the script as songs.txt. Enter a number like 1 at the prompt that says Swipe: to ensure the script is working as expected. If you want to quit the script, hit ctrl-c.
  7. Edit songs.txt to your liking. I have found the easiest way to do this is to create a Spotify playlist and then select-all, right click, go to the Share menu item, select Copy Spotify URIs, and paste the result into the file. I also decided to paste the results into a Google Sheet along with the titles and artists extracted using a playlist converter tool so I have them conveniently numbered and saved separately.
  8. Encode the cards. I found the easiest way to do this was to write them from a file, which just loads up each record sequentially and writes it to the next card you swipe. There’s both a sample file that goes up to 250 in the repo, as well as the Bash script I used to generate that file in case you want to go higher or if you get interrupted and need to make a subset. I wrote the number for each card on the back and also tested every card in the reader after writing, which at this point should trigger the appropriate playback.
  9. Create the labels for the cards. I recommend you make them 2″ x 3″. There is an Illustrator template in the repo for those of you who are graphically-inclined. The intended artwork area is 1.5 inches square.
  10. Print the labels for the cards and stick them on – I tested each individual one again before putting the label on because I am extremely particular, but if you make a mistake it’s fine, you can change the order of the URIs in the songs.txt file (and your playlist, if using one).
  11. Shut down the Raspberry Pi – I find it easiest to do this by navigating to the web interface (typically at http://musicbox.local).
  12. Box everything up and plug it in again to test the whole experience. When it’s headless, you’ll want to wait a minute or two for the green light to stop blinking so much for everything to be ready to go.
  13. Enjoy!

If you build one, please let me know! I’d also love to hear any tips or tricks or issues you come across if you try following along with this – I’m a software developer, as far as I’ve ever experienced there are always going to be bugs 🙂

Standard
a woman sitting on a plate a close up of a green plant a slice of pizza on a plate a close up of a newspaper a close up of food a bowl of salad on a white plate
a close up of a piece of paper a little girl sitting in front of a television
a person posing for the camera a view of a city at sunset a plate of food with a slice cut out a group of fireworks in the sky a plant in a garden a boy sitting on the ground a plate of pasta with sauce and cheese a pair of red shoes a group of people sitting at a table a piano in a room a view of a large building a bed with a red blanket a plate of food on a table
Personal

Looking back on 2018

Something I’ve been thinking about a lot lately is how for all the (terrible) posting I do online, I still consider myself a relatively private person. Knowing where I went to high school and when I graduated isn’t going to help you figure out my passwords or security question answers anyway, but I don’t mean that kind of privacy. Specifically, I avoid sharing anything that I feel could be weaponized against me and/or my family. Things like my hopes and dreams, my kids’ faces and names, the ins and outs of my relationships with friends and family. Which means I think you’ll find all of one annual introspection post from me from several years ago – I love reading them from other people and celebrating their accomplishments with them across the internet, but I generally don’t share back.

2018 was a big year for me though, and really what I’m doing right now is writing a post so that I can unpack it all for myself before deciding whether I’m comfortable sharing about it. Here we go.

Continue reading
Standard