Solving the 5x5 cube is similar (but slightly easier) than solving the 4x4. The process is the same but there are fewer edge cases.
The steps are
Reduce it to a 3x3 by
Solving the center
Solving the edges
Handle any edge parity
Solve the 3x3
Center Solve
The center solve is the exact same as a 4x4, just a litle bigger.
Solve the white square
Solve the opposite side (yellow square)
Solve any of the remaining sides
Solve the adjacent side (it could be any side, but it’s just easier to solve the adjacent side since it means less flipping the cube around)
Solve the remaining two sides in one go
Edges
Free Slicing
To speed things up you can use the “free slicing” method.
Which pretty much means you solve 8 of the edges w/out making sure you get the center squares resolved after each pass.
This just speeds up the process. Once you have 8 out of the 12 edges solved, you put them at the top and bottom and then resolve the center squares.
After this, you can solve the remaining 4 edges the “normal” way: one block at a time and always bringing the square faces back to solved after every move.
Flipping an edge
In order to pair up an edge you may need to flip one of the edge pieces.
For example, you would want to flip the orange/blue piece in the top right with the bottom right red/green piece. This will let you slot in the blu/orange piece in the next move.
If you were to get a pet (or another one!) what would you name it?
What’s your go to cocktail?
What is one thing you wish was never invented?
What’s an interesting experience you’ve had with a wild animal?
What’s a good first date idea?
What’s a great soup?
The world is about to end. What song do you cue up on Spotify?
What’s something you’ve never done before?
What’s something that you have done?
What’s something you’ll never do?
If potatoes became illegal what would their street name be?
You can set up a teleport between two places and it stays there, where are you putting it?
Vik’s new motto in life is “I hate DBT”. What’s your motto?
What’s the most surprising animal you’ve ever petted?
How would you describe your height without using numbers?
What was the first phone you owned?
What’s a great song for a rainy day?
What’s one thing you would treat yourself to regularly if money was no object
Have you ever seen a ghost?
What is something every junk drawer must have in order to be considered a junk drawer?
What is something you’d love receiving as a gift but no one even considers giving you because you’re an adult?
What was awesome as a kid, but sucks as an adult?
What sucked as a kid but is great as an adult?
You are sentenced to death penalty, but you can choose how you die. What do you choose?
if you could rename any sports team, what would it be?
What’s the next book you want to read?
What’s the next show or movie you want to watch?
What show or movie would you like to rewrite the ending for?
If you could save one character from dying in a movie/book/song/fable/anecdote, who would you save?
When does night start
When is bedtime?
If someone tells you that “Next Wed. meeting, that was at noon, has now been moved forward by 2 hours.” What time is the meeting next Wed?
What’s your favorite winter holiday song?
What was your favorite store as a kid?
What’s the first site you open in the morning?
As we move into the new year, what are some 2022 accomplishments you’d like to share?
What simple things in life bring you joy?
What’s a movie cliché that infuriates you?
What is a annoying song to hear on 24h loop?
You wake up tomorrow and are the only human on planet earth. How do you spend your day?
You get to create your new nickname, but it must include an animal. What is it?
What’s your Chinese Zodiac sign?https://images.chinahighlights.com/allpicture/2021/09/f372e03de36e475b933aa81e.jpg
What was one of the worst movies that you saw in theatres?
You wake up tomorrow as a housecat living in a comfy home with a nice couple. You have all of the knowlege you have now. What do you do?
What’s your go-to social media platform?
What movie scenes will you never stop laughing at?
What’s a piece of BAD advice that you took and then regretted? For example, staying up until 3AM to watch The Postman…
What’s a relatively common food that you don’t like?
What do you want on a pizza?
What have you bought (gadget or otherwise) that has made your life easier/better?
What’s your favorite Starbucks topping?
If you won the lottery and never had to work again, what would your average day look like?
What is your favorite food you get to cheer you up?
With Festivus coming up, what’s a grievance you want to air?
What is your best dream?
What is your worst dream?
In alternate universe where you didn’t end up being a programmer, what’s your profession?
What’s a fun gift you’ve given someone?
What’s a fun gift you’ve received?
What’s the best trip (traveling wise) you ever had?
If you are a robot what would you say to convince others you aren’t?
What’s a slack channel that has some good content?
What’s something that you’re looking forward to? Eg. a new show/movie/album/song, a phone/computer/tv/car/apartment upgrade, a vacation/holiday/birthday, the end of the day, midday nap/snack-break
What movie could you watch over and over without getting tired of it?
What’s a song lyric you always get wrong?
What’s an overrated movie
What’s one of your go to subredits?
What would you blog about?
What’s a weird or bad roommate situation you’ve had?
If you were a professional burglar, what would be your calling card? (Think: The Wet Bandits)
What’s something you’re snobby about?
What are your Turkey Day plans this year?
What did you buy during BFCM?
If you had to choose a favorite number what would it be and why?
What would you change if you were CEO?
What would you do if you were invisible for a day?
What’s a book you enjoyed as a kid?
What’s a movie you enjoyed as a kid?
What’s a work (not necessarily here) achievement that you are proud of?
What’s the first thing you do when you get home from a trip?
What’s the most beautiful place you’ve ever been?
What’s your “goto” joke?
What’s one of your favorite baked good?
What’s one of your favorite cheeses?
What’s one of your favorite smells?
What’s one of your favorite sport to play (as usual for sporting questions, please interpret the term “sport” as broadly as you need in order to answer the question)
What’s a food from where you grew up that you go back there for? (or if that’s far away, what’s one that you miss)
What’s your favorite desert and dessert?
What’s your go to pie?
What’s a Halloween themed show you like? (Series, specific episode, whatever)
What was a hard interview question that you got?
What topic could you give a 20-minute presentation on without any preparation?
What was a notable costume (maybe for Halloween) you had growing up or later?
What was something you thought would be easy until you tried it?
If you found yourself in a Connecticut Yankee in King Arthur’s Court situation, what would you “invent” first?
What was something you thought would be hard until you tried it?
What was the first album/tape/cd/mp3 you bought?
What was the name of the street you grew up on?
What was the worst job you ever had?
What works of art have really made an impression on you?
What would the title of your autobiography be?
What song do you hate and have to turn off the radio when it comes on?
What subjects should be taught in school but aren’t?
What superpower would you want?
What teacher did you have that you didn’t like? Why?
What is your favorite city in the US? (or a city you like)
If you were to add a new murder weapon in Clue, what would it be?
What’s the last video game you played? (Finally one Carol can answer!)
What’s the useless app on your phone?
What’s your Chipotle (or similar restaurant) order?
Do you have siblings? How many? What kind? Older? Younger?
What’s your favorite fake band?
If you were a hoarder, what would you hoard?
What’s your [best
worst
funniest
etc.] Josh impression?
What’s your real life super power? For example, I’m great at sleeping.
What’s your real life super weakness? For example, if you can’t sleep.
What’s one of the first software projects you made for fun? (i.e., you made it for the fun of it, you had fun making it, it did something that was fun, etc?)
What’s an underrated app that’s surprisingly useful?
What’s a good fruit?
What yogurt do you like?
What is a good piece of advice you’ve received?
What is the most useless thing on your desk right now?
What is the weirdest food combination you’ve made and tried? (This one is inspired by a Howard story)
What is the worst fruit?
What is your biggest pet peeve?
What is your cellphone wallpaper?
What is your favorite childhood vacation?
What is your favorite family tradition?
What is your favorite magical or mythological animal?
What is your favorite sport to watch? If you don’t like watching sports, take the question as broadly as possible
What movie have you seen lately (it’s been a while since the last time this was asked, maybe you’ve read a new thing since then?
What is your favorite holiday and why?
What music do you put on when you want to get pumped?
What class would you want to take?
What country is on your bucket list to visit?
What fictional family would you be a member of?
What have you done your entire life but are still bad at?
What hobby would be a lot of fun to get into?
What household chore do enjoy the most?
What’s your least favorite chore?
What isn’t part of a nutritious breakfast?
How long would you have survived 200 years ago?
If you were in the Addams Family, what type of monster would you be?
If you were a salesperson, what would you be great at selling?
What did have for dinner last night
What kind of cheese do you like?
What ice cream flavor do you like?
If you could meet any historical figure, who would you choose and why?
If you could meet any living person for dinner, who would you pick and why?
If you could pick up a new skill in an instant what would it be?
If you could shop for free at one store, which one would you choose?
If you could start a charity, what would it be for?
If you had a personal assistant, what would be the first thing you ask them to do?
If you had to teach a class, what class would it be?
If you left your current life behind and ran away to follow your dreams, what would you be doing?
If you were a wrestler what would be your entrance theme song?
Name a brand you are loyal to
Name a fun historical fact.
Name a toy you enjoyed playing with as a kid.
Name one thing that was on your bucket list that you’ve done
What are you kind of snobby about? (Team called out that this was a dupe pretty early)
What band would you travel back in time to see?
What celebrities have you met?
How many tabs do you have open on IntelliJ right now?
As a child, what did you want to be when you grew up?
As a kid, what was your go-to routine for a sick day?
Besides insects and spiders and murder hornets, what animals annoy you the most?
Best movie that would be improved if all characters were muppets except one. Name the non-muppet character.
Favorite Movie
Favorite Sci Fi
Favorite quick service restaurant
Favorite song in a genre you don’t normally like
Have you ever broken a bone or gotten a scar? How’d it happen?
If someone made a movie of your life, what genre would it be?
If you could be a cartoon character for a week, who would you be?
If you could go back in time and pay more attention to any class in high school, what would you choose?
If you could have an actual spirit animal what would they be?
If you could have any job in the company for a week, what would it be?
If you could magically become fluent in any language, what would it be?
What’s one of your favorite Beatles songs?
Do you update chrome when it asks? If not, why not? If so, why?
Which celebrity would you like to be stuck in an elevator with?
Which celebrity would be the worst to be suck in an elevator with?
What’s something you never plan to get at the grocery store but buy anyway?
What’s a candy you never have been able to get on board with?
If history was a movie what characters would have plot armor?
What did someone do to make you hate them instantly?
What is a safety tip everyone should know about?
You switch on news channel and it shows news of a zombie outbreak on the other side of the world, what are the steps you take to get ensure safety for when it hits your area?
What is something that people in your profession understand, but the general public can’t seem to grasp?
Who’s a fun over the top actor to watch? For example, Nick Cage.
The Turkey Game: Music Edition. Take the name of a well known song and replace one word with the word “Turkey”. For example: “Stairway to Heaven” can become “Stairway to Turkey”.
How many tabs do you have open in Chrome right now?
What’s a favorite late night snack?
Answer any question you want without telling us what the question is. We’ll try to guess the question.
What do you snack on during the day?
What would you name your car?
What’s a kids movie that’s also enjoyable for adults?
What channel/streaming service do you like to watch?
What’s the worst movie from the past 10 years that you’ve seen?
If you were asked to pitch a reality show, what would your idea be?
If you could have a key role in any tv show what tv show would you pick?
What’s a bad episode of a TV show you like, and why?
What’s a good piece of advice you’ve gotten?
What would you have renamed Facebook?
Tell me a fact you don’t think I’d know.
If you could rename the earth, what would you name it?
What species is likely to take over the earth similar to Planet of the Apes?
What is one of the most beautiful song you have ever heard?
I keep getting into conversations about modern cartoons which invariably end with people asking for recommendations. So here’s my list of great cartoons from the point of view of 40 year old guy with no kids.
Here’s a few dozen more icebreaker questions to use.
What’s a scary sci-fi villain?
If someone used you as an example of “what not to do”, what example would they use?
What is your guilty pleasure song?
What is your guilty pleasure movie / TV?
What is your guilty pleasure meal?
What is your guilty pleasure dessert?
What is the first thing that you do when you wake up?
What’s a good rom-com?
What’s a good mystery movie?
What’s a good comedy movie?
What’s a good animated show?
What’s a good animated movie?
What is something that people should simply stop doing?
What off brand item is better than its brand name counterpart?
What was the first major news story you remember as a child?
Who is your favorite female protagonist?
You can’t time travel, but your phone has the internet from 5 years in the future. What do you search for first?
What song would you put on a mixtape for Your Party?
What song would you put on a mixtape for Getting Down?
What song would you put on a mixtape for Cooking?
What song would you put on a mixtape for Cleaning?
What song would you put on a mixtape for Your Road Trip?
What song would you put on a mixtape of TV show theme songs?
What’s your favorite snack?
What type of doughnut do you like?
What’s an absurd moment in an otherwise serious movie?
If you had to live in a world alongside one supernatural class of villains (zombies, vampires, etc.) which would it be and why?
What’s the first video game you remember playing?
What’s the first TV show you remember enjoying that wasn’t intended for children?
What Disney movie have you watched the most (or at least a lot)?
What’s a Disney memory you have?
If you could read a book again for the first time, what would it be?
What are you boycotting til the day you die?
Without looking it up, what would you expect to buy at a “package store”?
What looks fun in movies, but in real life is miserable?
What’s a show that never had a bad episode?
If it turns out that one species of animal has been aliens spying on Earth the whole time, what animal do you think it is?
What do you consider “simple pleasures of life”?
What are the worst answers to the interview question “where do you see yourself in five years”?
What is a place you will never go again?
If animals could talk, which would be the most rude?
In the WFH era, which coworker that you haven’t already met would you most like to meet IRL?
What made you smile this week?
What’s a song that will never get old to you?
What problem is often overlooked in apocalyptic movies/TV shows that could kill?
What was cool when you were young but isn’t cool now?
What seems harmless but could actually kill you?
If you could have an unlimited supply of anything other than money, what would it be?
What’s a band you want to listen to more of?
How many unread emails do you have in your work inbox?
How many unread text messages do you have on your phone?
What was the last time you did something for the first time?
What album has no skips?
If you could erase all memories of listening to a song so you could listen to it for the first time but you lose all memories associated with it, what song would you pick?
If all animals were horse sized, which would be the most majestic to ride into battle?
What cartoon character would make a good CEO?
What’s one of your favorite sandwiches?
What’s one of your favorite soups?
What’s one of your favorite drinks?
What’s a song lyric that you like?
Who was one of the nicest people you have met?
What’s a word or phrase used to mean their opposite? (for example, using the word “literally” to literally mean “figuratively”)
Create a new Crayola color name.
What would you store in a fanny pack?
What’s an out-of-character thing you’ve done recently?
What fast food restaurant do you like?
What’s your pizza order?
What’s your Uber rating?
What would your Uber rating be as a DRIVER?
Halloween is approaching, what monster would you prefer getting chased by?
What is your favorite “old school” device/gadget?
What’s something you can easily eat 6 of?
What’s a sequel that came out at least 10 years after the previous movie that you enjoyed?
In your opinion, what’s an underrated movie?
What’s the best trip (traveling wise) you ever had?
If you were a robot what would you say to convince others you aren’t?
What’s a slack channel that has some good content?
What’s something that you’re looking forward to? Eg. a new show/movie/album/song, a phone/computer/tv/car/apartment upgrade, a vacation/holiday/birthday, the end of the day, midday nap/snack-break
What movie could you watch over and over without getting tired of it?
What’s a song lyric you always get wrong?
What’s an overrated movie?
What’s one of your go to subredits?
What would you blog about?
What’s a weird or bad roommate situation you’ve had?
If you were a professional burglar, what would be your calling card? (Think: The Wet Bandits)
What’s something you’re snobby about?
What are your Turkey Day plans this year?
What did you buy during Black Friday (the day or weekend after Thanksgiving)?
What’s something you’ve only started to like after college?
What’s a discontinued food or beverage item you wish would return?
What’s a strong opinion you have about something that’s not important?
What’s a movie you think I haven’t seen that Josh would like? (The “I” in this scenario is whoever is asking the icebreaker question)
What’s something you are an expert in?
What types of shoes do you wear?
What company or team reference would make a good band name?
What’s a skill you would like to learn in the new year?
Design a movie marathon. Minimum 4 movies.
What would your New Year’s resolution be? (If you have one, then say it, if you don’t then make one up!)
What’s a movie you haven’t seen in a while that you need to rewatch?
What’s something that you thought everyone else did but learned later in life that it was just you/your family/your community?
What is a new skill you learned?
What is a good late night driving song?
What’s a fact that you still don’t believe?
What’s a movie that you enjoy that wouldn’t be made today?
What’s a good non-super-hero movie from the past 10 years?
Who was one of the best teachers you had?
Should hexagons be drawn “flat-top” or “pointy-top” ?
What’s your favorite Disney character?
What’s a favorite new food/restaurant you’ve discovered recently?
What’s the most magical place on earth?
What’s the worst place on earth?
Which would you give up for rest of your life: tacos or pizzas?
Grammy’s Christmas Eve gravy with lobsters is one of my favorite parts of the holiday season. Plan for 1 lobster per person, with maybe an extra lobster or two for leftovers. Any excess gravy (or lobster) can be reserved for bisque.
Ingredients
6 lobsters (between 1-1/4 to 1-1/2 pounds each)
8 cans of tomato puree
8 cans of water (use the empty puree cans)
1 large onion
4 to 8 large cloves of garlic
Olive oil
Salt
Itallian seasoning to taste
1/2 pound thick spaghetti
Make the Gravy
Mince & crush garlic
Dice onion
Heat LARGE pot with enough oil to cover the bottom
Add onion, garlic, salt, Italian seasoning
Cook until shimmering (5 to 10 minutes)
While waiting for that to cook, open the 8 cans of tomato
Add tomato puree and water
Cover and bring up to a simmer
Uncover and let simmer for ~2 to 4 hours
Make the Lobster
This can be a little messy. I normally get two large disposable baking pans to hold and organize the lobster parts. A dishtowel that you’re not terribly attached to can be used when holding the lobsters’ claws and knuckles to avoid getting knicked by the sharp bits.
Dismember the lobsters
Using a dishtowel, grab the arms and twist them off the body
Using the same dishtowel, break the knuckles off the claws by snapping perpendicular to how the claw bends
Using a sharp knife that doesn’t have a heal, cut the tail off the body. The back end of the blade can be slid between the shell to start the cut safely.
Using the same knife, cut the tail at the third section from the front
Grab a cleaver or other heavy knife, knotch a slit in the back of the claw, once the blade is lodged far enough in, you can twist the knife and crack off the end of the claw. The end typically won’t come all the way off, but that’s fine. You’re just looking to make it easier to get at the meat once it’s cooked. Don’t forget to take the rubber bands off the claws at this point.
Using kitchn sheers, cut lengthwise down the knuckle
Dump everything into the boiling (or near boiling) gravy
Let cook for 15 minutes, or until the shells all turn red. Over cooking isn’t too big of a deal.
Serving
As per tradition, each person must eat at least two plates of spaghetti. After that it’s a free-for-all grabbing whatever lobster you can.
Recently, I’ve been doing a small plate of spaghetti and serving only the claws and tails. I reserve the body and knuckle meat for bisque.
Leftover lobster and gravy from Christmas Eve can be made into a tasty bisque. This soup can be made in stages, with each componenet refrigerated. When you are ready for the soup, combine and let everything come up to temp, cooking the fresh seafood.
Ingredients
4 - 6 quarts lobster gravy
Seafood
leftover lobster (pick through the bodies and knuckles)
1 pound shrimp (cut them in half if they are large)
1 pound scallops
Bechemel
1 stick butter
4 tablespoons flour
2 cups milk
Splash of cognac or white wine
Salt and peper to taste
Make the Béchamel Sauce
This can be done the night before and kept in the fridge until needed.
Melt the stick of butter with 4 table spoons of flour to make a roux
Slowly incorporate 2 cups of milk
Reserve Lobster and Gravy
Reduce 6 to 8 quarts of lobster gravy (lobster removed) by about 1/3 so you have 4 to 6 quarts of lobster gravy remaining.
Pick through the remaining lobster to get leftover meat. The bodies and knuckles are the best source after Christmas Eve dinner.
Combine lobster and gravy
Refrigerate over night if you don’t want to make the bisque right away
Assemble the Bisque
Bring the béchamel sauce back up to temp
Slowly incorporate the tomato sauce into the béchamel
Mix in one laddle full at a time and stir
Once three or so laddles are in, then you can dump the rest in
A few months ago I posted a list of my Question of the Day icebreakers. Here are some new ones I’ve used since then.
Any plans for the holiday break?
Each Planet Earth installment takes about 2,089 film shooting days, or just over 5.7 years non-stop. If you were tasked with being the editor for one animal of your choice to present a story to the Planet Earth audience, which animal (or even climate) would you choose?
Favorite Movie
Fun animal fact!
If at the end of your life your stats were displayed what is your most impressive stat?
If someone used you as an example of “what not to do” what example would they use?
If you could pick a fictional character for a roommate, who would you choose?
If you could pick up a new skill in an instant what would it be?
If you got to pick the one person that would be the ambassador for the human race to meet the aliens, who would you choose?
If you had a PAST ONLY time machine where/when would you go to?
If you had to teach a class, what class would you teach?
If you were to play some sort of table top RPG, what alignment would you be? (http://easydamus.com/alignment.html)
If you were to play some sort of table top RPG, what class type would you be? (http://easydamus.com/alignment.html)
If your life were a song who would sing it?
In 40 years, what will people be nostalgic for?
Liam Neeson has kidnapped you! What one person (real or fictional) would you want to try and save you?
Name a “children’s movie” that you think is too scary for kids
Name a fun prank you’ve played on someone.
Name an actor whose hair you wish you had?
Other than no longer having to stand during standup, what’s a small silver lining of working from home?
What Christmas song will make you change the channel or turn off the radio if it comes on?
What Question of the Day do you want to ask in the New Year? (yes, this question is both a cop out and an attempt to get more questions)
What band/singer do you refuse to believe people could hate?
What can you brag about because of somewhere that you’ve worked?
What candy do you hate?
What did you do during the end of year break?
What did you miss: What movie that “everyone has seen” have you not seen?
What do you put on in the background when you really want to focus?
What do you say in place of a swear instead of just swearing?
What do you think is humanity’s greatest achievement?
What entirely instrumental song do you really enjoy?
What has caused you to quit a job?
What is a stand up comedy bit that you like?
What is an unnecessary and expensive item that you are extremely tempted to buy right now?
What is the creepiest thing/occurrence you have ever witnessed
What is your “never again” brand item store or restaurant ?
What is your favorite color to wear?
What is your favorite sport to watch? If you don’t like watching sports, take the question as broadly as possible.
What is your favorite poem?
What is your idea of a perfect Sunday afternoon?
What made up “holiday” theme do you want Josh to use for his Zoom background?
What merit badge would you like to earn?
What moment from your childhood do you think is a good indicator of how you were gonna turn out?
What movie is better the second time watching it?
What movie were you excited to watch but was a disappointment?
What pets did you have growing up?
What song do you know all the words to? (or at least most of the words)
What toy did you always want as a kid, but never had?
What useful emoji is missing from your company’s Slack emojis?
What’s a favorite holiday movie? (Any holiday will do)
What’s a gift that you’ve given someone that you’re proud of?
What’s a holiday candy that you look forward to? (any holiday)
What’s a random historical domino effect that you absolutely love?
What’s a scary sci-fi villain?
What’s something that made you feel old?
What’s something you romanticize? (a time period? a subculture? a place?)
What’s the first thing you do when you get home from a long trip?
What’s your “goto” joke?
What’s your New Years BLANK (Resolution, Plan, Goal, Hope, Expectation, etc)
What’s your drink of choice? (Either alcoholic or non.)
What’s your favorite Summer Olympics sport?
What’s your favorite day of the week and why?
What’s your favorite mask?
What’s your favorite tea/coffee?
What’s your go to bagel order?
What’s your go-to diner order?
What’s your perfect sandwich?
When did you almost turn into Batman?
When did you like the movie more than the book
When does it begin to feel a lot like Christmas for you? (If you do not celebrate Christmas, replace with any other holiday. If you do celebrate Christmas and would prefer to substiture for another holiday, please do.)
Where’s your favorite place to nap?
Which Super Smash Bros character would you be?
Which harry potter character are you?
Who was your role model growing up?
Without looking it up, how do you pronounce kubectl”?”
You are an alien. Your alien comrades have the opportunity to create a crop circle once a human year. What is your chosen design for the year 2020?
You are hiring someone to create a fake athletic profile for your child that will be used in your child’s college application to USC. What sport do they play?
You win a contest and the prize is the privilege to add another person to Mt. Rushmore. Who are you adding?
You’ve just won the lottery and are now worth millions. What do you do on Monday?
I’ve been trying to get into woodworking for the past few months. Most of my resources have been YouTube videos and reddit. I’m compiling a list of the channels that I go to regularly and enjoy.
Woodworking for Mere Mortals has a lot of videos focusing on the “weekend woodworker” that doesn’t have a lot of tools, shop space, or time. Lots of great intro videos for how to use tools, what you really need to get started, and what projects you can tackle. Steve also has a woodworking class for $150 that has very detailed project videos and plans.
DIY For Knuckleheads. Lots of great project videos that feature beginner friendly techniques and how to make great use out of cheap or free wood. Great tip knackers!
Stumpy Nubs has a lot of how to’s and other beginner friendly content. Their “cool tool” series is great too.
Bourbon Moth has professional level project videos (as in they are mostly commissioned projects that he’s working on). His series on cabinet building is really good. He also has a 5 part series on building a boat. Recently he’s added a cocktail video each month.
Wood Work Web is mostly short videos focusing on either a series of useful tips or a specific technique.
Fisher’s Shop has a lot of project based videos. Most projects feel like they can be done by a beginner stretching from their comfort zone. Plus the outtakes at the end are a lot of fun.
Rex Kruger. This channel goes into a lot of details on hand tools, especially planes. Rex has great information on building up your workshop (and bench) to make you successful using hand saws and planes. He also has lots of recommendations on how to do things inexpensively and where and when you should spend the money. This includes stuff like how to buy an inexpensive plane and tune it to work well.
3x3Customhas a lot of really cool project builds. She’s definitely not a beginner but her builds feel accessible.
April Wilkerson’s has some great videos on shop organization. She has a lot of videos on detailed furniture and deck builds but I really like the way she thinks about organization and packing in as much functionality to her shop storage as possible. I want her miter saw stand.
After the registers and the ALU, the program counter module was pretty easy. It
is a 74LS161 4-bit binary counter connected to a 74LS245 8-bit transceiver. As
with the other modules, the transceiver is only there to easily control reading
or writing to the bus.
Using a binary counter IC to build a program counter may seem like cheating,
but there’s no reason to make everything harder than it needs to be. The
counter’s output and input are wired to the transceiver, the enabled pin is put
high, connect the clock, and you’re good to go…
Well, that’s what the instructions said. Whenever I tried to run the counter it
kept flashing “one”. After a few seconds of feeling crushingly defeated on what
was supposed to be the easiest build of the project, I thought it felt like the
counter was being constantly reset. I looked at the chip’s data sheet and saw
that pin 1 is the clear pin. We hadn’t wired it to anything so it was floating.
The pin is inverted, so I tried tying it high. Lo and behold, the counter now
works.
I still need to wire up some permanent lights for the module. The ones in the
video are part of the pack of lights I wired up for quick testing last time (or
the time before that… sometime). They have resistors built in and just have a
pair of pin Dupont connectors on the bottom so I can easily plug them in
anywhere I want.
Now that I have two registers to store whatever (8-bit) values I want in them, what next? Let’s add them together! (Or subtract them).
The ALU
The ALU reads directly from the A and B registers and computes the sum of those two values. It bypasses the bus and reads directly from the registers, whether or not they are set to output their values. The ALU has two modes, add and subtract.
In subtract mode (when the control line is brought high), it subtracts the value in register B from register A. Subtraction works by negating the output of the B register and then adding that negative number to A. Two’s Complement is used to represent a negative number in binary. This pretty much boils down to flipping all the bit and then adding one. Eight XOR gates are used to flip the bits (the subtract signal is the other input to the gate) and then add one by setting the carry bit on the adder high. The carry bit is normally used when using multiple 4-bit adder chips together to add 8 bits together (or 12 or 16… etc).
Building and Debugging
So far this is has been the most complicated part of the computer to build. This is purely because of the number of connections to be made and how much they overlap. If you’re off by one pin for one wire the entire output is messed up and you have to wade through all the criss crossing wires to figure out what is wrong. The problem gets worse when you have multiple wires in the wrong spot… which is what happened to me.
I learned two useful approaches to this problem
Write out a table of all of the connections
Use a multimeter to test for voltage levels in addition to continuity
Tabling Connections
In order to know which if a wire is connecting the wrong pins on two IC’s, you need to know which are the right pins. So after blindly staring at the forest of wires, I went back to the pin outs of the IC’s and wrote a few tables to track what I should expect to be where. I did them by hand in a notebook, but this is essentially what I have.
The A Input
The A register is simpler than the B register since it connects directly to the adder and does not need to be negated.
A Register Bit
A Transceiver Pin
Adder Pin Name
Adder Pin
8
2
A4
Left 12
7
3
A3
Left 14
6
4
A2
Left 3
5
5
A1
Left 5
4
6
A4
Right 12
3
7
A3
Right 14
2
8
A2
Right 3
1
9
A1
Right 5
This basically just tells me that if I think I’m having an issue with the most significant bit in the A register (bit 8), then I need to check to see if the wire from the transceiver’s second pin connects to the twelfth pin on the left adder. Once I run down all the pins combinations to make sure that they are correct, I can be confident that the register is wired up correctly and move on to the B register.
The B Input
As alluded to above, the B register is a touch more complicated because it goes through a set of XOR IC’s as well.
B Register Bit
B Transceiver Pin
XOR Pin Name
XOR Pin
8
2
A4
Left 12
7
3
A3
Left 9
6
4
A2
Left 4
5
5
A1
Left 1
4
6
A4
Right 12
3
7
A3
Right 9
2
8
A2
Right 4
1
9
A1
Right 1
The other input pins on the XOR chips were easy and didn’t really require a complex table. All of the B pins were connected to eachother and then the carry in bit on the rigth adder
Pin Name
XOR Pin
XOR B4
Left 14
XOR B3
Left 10
XOR B2
Left 5
XOR B1
Left 2
XOR B4
Right 14
XOR B3
Right 10
XOR B2
Right 5
XOR B1
Right 2
Adder Carry In
7
And then the output of the XOR chips feeds back into the two adders
B Register Bit
XOR Pin Name
XOR Pin
Adder Pin Name
Adder Pin
8
Y4
Left 11
B4
Left 11
7
Y3
Left 8
B3
Left 15
6
Y2
Left 6
B2
Left 2
5
Y1
Left 2
B1
Left 6
4
Y4
Right 11
B4
Right 11
3
Y3
Right 8
B3
Right 15
2
Y2
Right 6
B2
Right 2
1
Y1
Right 2
B1
Right 6
One of the bigger mistakes here is that I wired the left XOR to the right adder. Not sure why I was so certain that was the right thing to do at the time but I did it consciously and certain that it would work out.
Adder Output
And now all that we need to do is wire the adder outputs to the transceiver.
Summation Bit
Output Transceiver Pin
Adder Pin Name
Adder Pin
8
2
Left Σ4
Left 11
7
3
Left Σ3
Left 15
6
4
Left Σ2
Left 2
5
5
Left Σ1
Left 6
4
6
Right Σ4
Right 11
3
7
Right Σ3
Right 15
2
8
Right Σ2
Right 2
1
9
Right Σ1
Right 6
Using a Multimeter
The most straightforward way to use the multimeter to verify the connections is to use the continuity feature:
Turn on the multimeter
Put the red lead on one pin
Put the black lead on the pin you hope it’s connected to (this is where the charts come in handy)
If you hear a tone, then the wiring is good. If you don’t, then you found a problem. Move the black lead to other pins to determine which pin the other end of the wire is connected to. Even if there was a tone, it may be useful to place the black lead on other pins to check for a short. This would mean that another wire connected to this IC is incorrect.
The upside of this approach is that it is simple. The downside is that it requires testing every connection. This is a pretty simple layout and it has upwards of forty connections to check. Another option is to do voltage reading to test which connections have voltage running through them. This is essentially the same as hooking up an LED in parallel to each of the pins to see its output. Set the multimeter to 5v DC setting, put the black wire to ground, and then put the red wire on the IC pin. I like to use alligator clamps coming out of the multimeter connected to jumper wires. That way the wires can be plugged directly into the breadboard and you can monitor voltages as the state changes.
Output
The final component here is wiring up LED’s. I decided it would be easiest to read the output if I made more LED strips that could plug into the breadboard with headers. I’ve improved on the original design by using LED’s with with the resistors built in. This reduces the amount of soldering I need to do and makes the result a little more compact. Speaking of which, I also used 3mm LED’s instead of the original 5mm.
I’ve finished the registers for y project of building an 8-bit computer using TTL chips. I have built two general purpose registers (an “A register” and a “B register) as well as the instructor register for the computer. This step took a lot more time than the clock module. The main difficulties were cutting the wires to the correct size and then after that the thing just didn’t work. I couldn’t store or transfer any data.
What is a Register?
So what exactly did I build in the past few weeks? The computer I’m working on will have a certain amount of RAM to store information during the execution of a program. This information is both the data in the program as well as the program itself. For example, I can write a program that will add the numbers 2 and 4. The values 2 and 4 will be stored in RAM when the program is loaded into the computer. In addition to that, the program itself will be stored in memory. In a modern computer, the program would be stored on the hard drive, but it would eventually be loaded into RAM before it executes, and the data would probably be entered by a user. My computer won’t have either a hard drive or any form of user input. It will all just be stored directly in RAM.
Following the 2 plus 4 example, my computer can’t operate directly on the data in RAM. It can only add (or subtract) numbers that are stored in the registers. This means that we’ll need to copy the data from their location in RAM into either the A or B register. Once there the arithmetic-logic unit (the next part of the build) can operate on them. Basically, the register is short term storage for data being used very soon.
There are three operations you can do with a register:
Write to it
Read from it
Clear it
Normally, you can’t easily inspect the data currently in the register. That would be boring and make it super hard to understand what’s going on at any given time in the computer. These registers have 8 red LED’s that will show the current state of the register.
Transferring data from one register to another (or to another part of the computer), that data is written and then read from the bus. The bus is pretty simple component that wires all the components together using 8 parallel input/outputs. Coordination is required so that only one thing is writing to the bus at a given time and that the component that wants that data is reading from it. For now that’s done manually, but wiring in that logic will be an important part of what makes this a computer.
Cutting Wires
Last time, I built the clock module for my 8-bit computer and I had a hell of a time cutting and stripping the wires just right. I could reliably cut the wires the right length, but then I couldn’t take off exactly 0.3” of insulation on either side using my strippers. I had two options: get good or buy more reliable strippers.
I went with the latter and picked up a set of Knipex wire strippers. These things are amazing. Set the length to strip, insert wire, pull trigger, repeat. The exact right amount is stripped each and every time. No worries about setting the right gauge wire, it auto adjusts. Pure joy to work with after fumbling around last week. I can now complete wiring tasks in minutes that would take hours without them.
They are a little on the pricey side but they will save me so much time and effort that they are worth it. I’d highly recommend them if you can afford it.
The Build
Each register uses :
2 4-bit 74LS173 (register)
1 8-bit 74LS245 (transceiver)
The remaining transceiver, OR gates, and adders in the picture will be used for the ALU.
The register chips are 4 bits each, which is why two are needed to store 8 bits total. They are wired together (clocks, read signal, output signal, etc) so that they can be used as a single logical unit. They are wired to always output their data so that we can see their state in the LED’s. That’s why the transceiver is needed to toggle writing that state to the bus when the computer needs to read from the register.
Each breadboard will be dedicated to a register. The top two will be the A and B registers, the bottom one will be used for the instruction register. The top two will be on the right side of the computer, the bottom one will be on the left. The transceiver chip will need to be connected to the bus (which will be in the middle) so it will be convenient to have that as close to the bus as possible (just to avoid messy wiring). Other than that, the three registers will be identical
Here we can see the connections keeping the pairs of register chips in sync with each other. The white wires (on the bottom) will be used as the clock input, the yellows are signals to read or clear data.
The rest of the work is to just wire up the 8 channels connecting the registers and transceivers.
LED’s
After wiring everything up and testing it by trying to read off of a mocked out bus … Nothing worked.
I spent hours following the video checking and rechecking my connections. Everything looked right. Reading r/beneater had a lot of posts about how important resistors are to the project despite being largely omitted from the videos. So I tried adding some in series to the LEDs to see if it would make a difference. Yes it did! Everything works now (well mostly, I still had a few wires crossed).
Now my question was: how do I want to lay out the LED’s and resistors? There’s not a lot of space when it’s just the LED’s, how am I supposed to cleanly sneak eight resistors in? My first attempt was to wire one resistor up in parallel with all of the LED’s. After checking with Reddit, it became apparent that the brightness of the LED’s would fluctuate depending how many were turned on at any given time. That didn’t sound great so back the drawing board.
I thought I could solder a row of male headers to some protoboard and then add the eight LEDs and resistors. I’d need to add a female header on the side to connect it to ground. This felt like it was just about in my skill set, so I gave it a try.
I figured I’d make four of these for the three registers and the ALU. The first step was to cut the protoboard down to size and then sand the edges so they were no longer sharp.
I cut the first one by scoring it with a razor blade and then snapping the ends off and then filing it down by hand. It took a while but in the end I had a nice result. Too bad I didn’t account for all the space I needed so I cut that one too small 🙁. It was late so I tabled it for the next day when I needed to break out the Dremel for another project anyway. This time I quickly cut the ends with the Dremel and then used the tool to do a first pass on the filing. I still finished it up by hand, but it was much faster.
Turns out that the coaster my in-laws brought me back from a trip a few years ago is the perfect size to hold a PCB. I used that as a base and then filed the sides down to be nice and smooth.
It took some trial and error to figure out the exact best way to solder everything in place. First I soldered two 4 pin male headers to the bottom of the board. They were spaced so they’d fit directly into the breadboard and connect to the registers.
Next I placed the LED on the top of the board and bent the anode lead back up through the board to solder to the top of header. This may have been easier if I had done it first and then soldered in the headers.
The cathode leads were then soldered to a resistor that was placed at an angle behind it. The angle allowed me to line up all of the resistors and just solder them together in a line leading to the female header on the end.
This mostly worked (I had a bad LED in the middle I had to swap out) but took me all day to do the soldering and testing for one LED strip. I could probably do the second strip a little faster now that I worked out some of the kinks. Instead of tackling that project, the next day I woke up and bought a few packs of LED’s with resistors built in. This would at least let me make progress in my tests without having to solder everything first. And maybe I can come up with a better plan.
I bought two types of LEDs. One kind has the resistor directly in the housing. I bought the mixed bag of colors as well as another hundred each of the reds and blues. These are 3mm instead of the 5mm ones I already had. Worst case scenario, I can work them into the same type of LED strip but have it take up less space and not have to solder in an additional resistor. The other type has the resistor soldered to the anode lead in a long wire. I got the mix pack for these as well, twenty each of white, red, blue, green, orange, and yellow. To simplify testing, I crimped Dupont connectors to the ends of a bunch of these in groups of four.
And with that, I was able to test all of the registers and bus at the same time.
I recently picked up Ben Eater’s 8-bit computer kit.
The entire walk through for Ben’s computer can be found on
youtube.
The idea is to build a fully functioning 8-bit computer entirely on a
breadboard. This should be a great learning experience for me considering I’ve
never built anything particularly complicated in electronics. The first step is
to create the clock module that powers the rest of the computer. The clock he’s
designed has some interesting features
Speed control using a potentiometer
Step through mode - the clock advances when you manually press a button
A circuit to switch between these two modes
Halting the clock by setting the halt line high
This is step 1 of the clock module, the variable speed portion. It uses a 555
timer to produce the square wave that powers the LED. That LED is eventually
going to be removed from the board when the entire module is done, which is why
it hasn’t been cut down.
The clock kit comes with pre-cut jumper wires that you can use. The drawback to
them is that you can’t control the color for each length of wire. So I dug into
the second kit to pull out the spools of 25 foot colored wires. I figure if I
start with those wires now then the color coding will be consistent for the
entire project. Not only that, but the red wires will be the same shade for the
entire time.
That said, my biggest difficulty so far has been gettin’ gud at trimming the
breadboard wires. Ben’s computer winds up being very neat and orderly with the
wires. I’m hoping to get something close to that. I’ve tried breaking out my
calipers to start measuring every wire I cut. That’s helped a bit. I’ve also
tried bending the wires across the edge of the breadboard. I’ll keep it up and
jot down any more notes as I try new methods.
After several hours of practice, I think I have a system.
Cut a length of wire and strip some off the end (really doesn’t matter how much)
Use the bare part as a grip as you pull off the remainder of the insulation
Put the wire into the end of the breadboard, N-1 from the edge, where N is the number of breadboard holes you need the wire to travel.
Bend the wire down 90 degrees exactly where it comes out of the breadboard (this ensures you leave the exact right amount of bare wire to go into the breadboard)
Angle the rest of the wire going off the breadboard
Cut a piece of insulation the same length as the distance from where the wire is placed in the board to the end of the breadboard
Slip that insulation back on to the wire
Bend the remaining bare wire 90 down, using the edge of the board as a guide
Trim the excess wire just above the bottom of the breadboard
If you need a bunch of wires at once, measure out the right length past the edge of the breadboard and leave that piece of wire in. Then use that as the guide for other pieces you need to cut. There are eight holes at the bottom end of the board, so you can do eight wires pretty quick.
I used the above method to cut the wires for the rest of the work:
Today’s build was fun. It took most of the day (I really need to get better at
cutting wires to length), but I did a lot of other things in there like make
dinner and watch an episode of Better Call
Saul.
For all of the details on how this works, I recommend checking out Ben’s
youtube
videos. He goes into more details than I could.
Since we started working remote I’ve been asking my team 1 “Question of the
Day” during standup. I started by posing the question at the start of the
meeting, but have since switched to asking before the meeting. This gives
people some time to come up with better answers. I try to avoid asking for
“favorites” because that can put too much pressure on people to come up with
the right answer. So instead of “What’s your favorite movie?” (which is
definitely on the list) I’d ask “What’s a movie you’ve enjoyed recently?”
As a child, what did you want to be when you grew up?
As a kid, what was your go-to routine for a sick day?
Besides insects and spiders, what animals annoy you the most?
Best movie that would be improved if all characters were muppets except one. Name the non-muppet character.
Brewsters Millions: If you had to spend $10 M in one month, how would you do it? Like the movie, you can’t have anything to show for it at the end of the month.
Favorite Movie
Favorite Sci Fi
Favorite color to wear
Favorite lunch spot (when you were working in your most recent office)
Favorite lunch spot currently
Favorite quick service restaurant in NYC
Favorite restaurant in NYC
Favorite song in a genre you don’t normally like
Have you ever broken a bone or gotten a scar? How’d it happen?
How much wood COULD a woodchuck chuck if a woodchuck could chuck wood?
If someone made a movie of your life, what genre would it be?
If you could be a cartoon character for a week, who would you be?
If you could go back in time and pay more attention to any class in high school, what would you choose?
If you could have an actual spirit animal what would they be?
If you could have any job in the org for a week, what would it be?
If you could magically become fluent in any language, what would it be?
If you could meet any historical figure, who would you choose and why?
If you could meet any living person for dinner, who would you pick and why?
If you could pick up a new skill in an instant what would it be?
If you could shop for free at one store, which one would you choose?
If you could start a charity, what would it be for?
If you had a personal assistant, what would be the first thing you ask them to do?
If you had to perform on a talent show, what would you do?
If you had to teach a class, what class would it be?
If you left your current life behind and ran away to follow your dreams, what would you be doing?
If you were a wrestler what would be your entrance theme song?
Name a brand you are loyal to
Name a fun historical fact.
Name a toy you enjoyed playing with as a kid.
Name one thing that was on your bucket list that you’ve done
What are you kind of snobby about?
What band would you travel back in time to see?
What book have you read lately (it’s been a while since the last time this was asked, maybe you’ve read a new thing since then?)
What celebrities have you met?
What class would you want to take?
What country is on your bucket list to visit?
What do you look forward to about getting older?
What fictional family would you be a member of?
What have you done your entire life but are still bad at
What hobby would be a lot of fun to get into?
What household chore do enjoy the most?
What ice cream flavor do you like?
What is the best fruit?
What is the best piece of advice you’ve received?
What is the most useless thing on your desk right now?
What is the weirdest food combination you’ve made and tried?
What is the worst fruit?
What is your biggest pet peeve?
What is your cellphone wallpaper?
What is your favorite childhood vacation?
What is your favorite family tradition?
What is your favorite holiday and why?
What is your favorite magical or mythological animal?
What is your favorite or memorable childhood vacation?
What is your favorite sport to watch? If you don’t like watching sports, take the question as broadly as possible.
What movie have you seen lately (it’s been a while since the last time this was asked, maybe you’ve read a new thing since then?)
What music do you put on when you want to get pumped?
What song do you hate and have to turn off the radio when it comes on?
What subjects should be taught in school but aren’t?
What superpower would you want?
What teacher did you have that you didn’t like? Why?
What topic could you give a 20-minute presentation on without any preparation?
What was a notable costume (maybe for Halloween) you had growing up or later?
What was something you thought would be easy until you tried it?
What was something you thought would be hard until you tried it?
What was the first album/tape/cd/mp3 you bought?
What was the name of the street you grew up on?
What was the worst job you ever had?
What was your favorite game to play when you were a kid?
What was your worst haircut experience?
What works of art have really made an impression on you?
What would the title of your autobiography be?
What would you change if you were CEO?
What would you do if you were invisible for a day?
What’s a book you enjoyed as a kid?
What’s a movie you enjoyed as a kid?
What’s a work (not necessarily here) achievement that you are proud of?
What’s the first thing you do when you get home from a trip?
What’s the most beautiful place you’ve ever been?
What’s your “goto” joke?
What’s your favorite Summer Olympics sport?
What’s your favorite baked good?
What’s your favorite cheese?
What’s your favorite dessert?
What’s your favorite smell?
What’s your favorite sport to play (as usual for sporting questions, please interpret the term “sport” as broadly as you need in order to answer the question)
What’s your go-to diner order?
What’s your perfect sandwich?
What’s the best or worst prank you’ve played on someone?
What’s the most outdated piece of tech you still use regularly?
What’s your drink of choice? (Either alcoholic or non.)
When did you like the movie more than the book?
When you’re having a bad day, what do you do to make yourself feel better?
Where’s the most surreal area you been to?
Where’s your favorite place to nap?
Which celebrity chef would you like to fix you a meal?
Who is one of your favorite (living) musicians?
Who is your favorite athlete?
Who was your favorite teacher?
Who would play you in a movie of your life?
You have a week to spend in a place you’ve never been before (travel not included), where do you go?
You have to sing karaoke, what song do you pick?
You have your own late night talk show, who do you invite as your first guest?
Updates:
Updated 8/18/2020 with 20 more questions!
Update 6/3/2021 I added more questions in a follow up post
I’ve been working on a project to create a Bluetooth “keyboard” with arcade
buttons as the switches. Of course I want the buttons to light up. And I’d like
to do this without using too many pins on my microcontroller. Naively if I had
ten buttons (which I do) that would be 20 pins for the buttons and LED’s. The
board I’m using has 21 pins. So that’s
doable, but then doesn’t leave room for a lot of expansion (I also want a
volume knob for instance…).
Button Matrix
The solution I looked at was well documented around the web. I mostly used this
sample from
Adafruit since
I was looking for examples using CircuitPython. I used a pair of Adafruit’s
STEMMA wired buttonsto wire this up.
The two rows of five colored buttons mimicked my real world project so it
helped to visualize what I was doing. Each button has a 3 wire JST connection
coming out of it with a white, black, and red wire. The white and black wires
form a circuit when the button is pressed. For each board of five wires (my
row), I connected all the black wires to the ground rail on a breadboard to
wire them together (the rail wasn’t connected to ground). The other board was
wired to the other power rail. For my columns, I just paired up each of the
colors (the two blues, the two whites, etc). I plugged their corresponding
white wires to a row on the breadboard. I believe that the red button is
intended to be wired to a pull-up resistor which I didn’t need for this project.
Just so they wouldn’t be in the way, I wired them up similar to the white
wires.
Then to connect to the board, I plugged the two rows (the power rails) to pins
6 and 7 of my board. The columns were plugged into 9, 10, 11, 12, 13. I
pulled sample code from the Adafruit site and tweaked it to my configuration (2
rows instead of 4, 5 columns instead of 3, pin numbers, etc). The
adafruit_matrixkeypad library does most (all) of the heavy lifting here.
Whenever I pressed any button, it would show up as if
the corresponding button on the next row was also pressed. After some hand
wringing and checking all of my connections I realized that my breadboard
actually has a short across those power rails. After pulling out all of the
connections, rotating the board, and trying again, it worked just fine.
IC the Lights
Next I needed to get the lights working. I knew you easily create
this type of output using shift registers. And as it happens I have
about a dozen of
74HC595’s
kicking around in a drawer. Problem is, I had no clue how to use
them. I got lucky with some articles I happened to stumbled upon
that had an example. Page 98 (according to the PDF, it’s 111 if
you’re using the numbers on the bottom of page) of the Experiments
Guide for
Metrohas an article about adding “More LED’s”. That’s a good start for
the wiring up. Only two problems.
The sample code is in C not CircuitPython
I want 10 LED’s not 8
Instead of figuring things out from scratch, I did a little googling and came
across nuke66’s
project
which was pretty much exactly what I needed. Again, all I had to do was change
the pins to what I had. The sample pretty much just toggled everything on or
off. Controlling all of the lights at the same time is pretty easy, so why not
something more fun? Let’s create a binary timer. Count from 1 to 256 (2 raised
to the 8th) using the LED’s as outputs. So I made (minimal) changes to code.
Sadly, I didn’t think to take a video of this marvel of modern electronics.
importtimeimportdigitalioimportboardimportsimpleiodata=digitalio.DigitalInOut(board.D2)data.direction=digitalio.Direction.OUTPUTlatch=digitalio.DigitalInOut(board.D4)latch.direction=digitalio.Direction.OUTPUTclk=digitalio.DigitalInOut(board.D3)clk.direction=digitalio.Direction.OUTPUTdata=0whileTrue:data+=1if(data==256):data=0# write to 595 chip
latch.value=Falsesimpleio.shift_out(data,clk,data)print("sending: {0:#010b} {0}".format(data),end="\n")latch.value=Truetime.sleep(0.1)
Next up: light them up based on which button is pressed. The button matrix already allows you to attach data to the button object which you get back when you query what’s been pressed. Instead of a meaningless label, why not just put in the id of the LED? Numbering each LED with a power of two will let me simply add up the keys pressed and send that out to shift register.
That works except for the last two buttons which are greater than the default 8
bit limit of simpleio.shift_out. How do I wire in those two LEDs? I could
just wire in a second shift register with 3 more wires but that would be more
wires than it would take to just wire in two more LED’s, make the code more
complicated, and be really dumb.
The designers of the 595 agree with me. As it turns out, you can daisy chain
multiple chips together. The bad news: I have no idea how to approach that.
After some more google I found a bunch of videos that were helpful in that they
showed what I wanted to do, but unhelpful in that it was a mess of wires and
not clear what they were doing. OK, videos out. Guess I’ll have to read to get
the answer here.
Mostly I was looking for a good diagram, which is what I found on
protostack.
Following this I saw that all I needed to do was:
Connect pin 9 from the first shift register to pin 14 of the second one
Connect pin 11 on both chips together
Connect pin 12 on both chips together
I had started off on a half size breadboard so I needed to tear down everything
I had to make room for the new chip and LED’s. In doing so I forgot to tie the
OE (output enabled) to ground. This had some annoying and confusing results.
Essentially the output would flicker because nothing was telling it whether to
be on or off. The output would be more reliable if I held some of the wires
(which really confused me). This reminded me of last time when I forgot to
include a pull-up resistor in a button. I’d like to say that’s how I discovered
the problem. But no, I went the classic route of taking it apart again and
redoing all of the connections. I realized I didn’t have enough wires to
connect the pins to ground and that’s what I had forgot.
Now that I had everything wired correctly, I still needed to figure out how to
control the additional input. If I tried sending anything higher than 255 I was
still not getting my new LED’s to light up. Reading through the CircuitPython
doco,
I saw that the shift_out function has a default paramter of bitcount set to
Well… I want 16 bits. Setting that parameter worked.
In my last go round I spent a lot of time mucking about with C++ to get things
working. While searching through the Adafruit
site, I came across a newer Bluetooth friendly
device, this one capable of running
CircuitPython. There’s even a tutorial for
turning it into a Bluetooth
keyboard.
So I bought two. Due to Covid and the fact that Adafruit is focusing on
producing PPE, it took an extra week or so to arrive. I got them this week and
immediately started playing.
CircuitPython
CircuitPython is a version of Python that will run on a whole bunch of
boards. Anything in the Adafruit line
that is “Express” seems to be able to run it. Some Arduino boards support it as
well.
Installation is pretty trivial on the Feather Express I got. The Adafruit site
has a pretty thorough
explanation.
Pretty simply though, you plug it in to your computer. It will install itself
and then automatically present itself as a file system.
When that happens, go to the CircuitPython download
site, download the installation for your
board, and then drop that into the new folder. The board will restart and now
the root folder will have code.py. Write your python there. Whenever you save
it will automatically reload and run that script.
Hello World
The Hello World app is pretty easy (in fact it’s what comes in code.py by
default.
print("Hello World")
That’s it. This will just print “Hello World” to the serial bus. You see it by
opening up the serial port and watching it. While you can use the Serial
Monitor from the Arduino IDE, it’d be nice to no longer need that tool at all.
Luckily, PuTTY can handle serial ports as well as SSH. First you need to figure
out what port the device is connected to. If you have multiple devices they’ll
all connect to a different port, even if they aren’t plugged in at the same
time. Which is convenient since you can mentally associate a different port
with each device. To determine which port it’s using open up the Device Manager
and expand the Ports (COM & LPT) node. It will be listed there. In my case,
it was port 12.
Fire up PuTTY, select the serial radio button, and enter COM12 in the
address bar. I left the speed at 9600 and it worked fine. Press connect and
you’re now connected to the console output of your board. You may need to
restart the program (just save it again).
I had some issues using vim, which was disappointing. Saving wouldn’t trigger a
restart. I moved to Visual Studio Code. My preferred way to work is actually
with both tools running, using VS Code for most editing tasks and switching to
vim for specific types of edits. This actually works out pretty well. The only
hiccup is that after saving in vim, I need to switch to VS Code and save it
again if I want the code to run. It seems that the interpreter tries to
evaluate the code before vim is done saving it.
Another nice touch is that any syntax or runtime errors automatically go to the
serial output. For example, if you try to call a function that doesn’t exist, the board
will stop evaluating and just dump the error out. Since you may not be looking
at the serial output all the time, the board will flash it’s lights so you know
there’s an error.
Back to the Box
Seeing as I already had a working set of buttons implemented in C++ on my
button box, I wanted to try and rewrite that code in Python. It took me a
couple of nights (and some frustration) to get it working in C++. On the other
hand, it was about an hour or so to rewrite it all in Python. I had a couple of
things going for me.
I had better examples (including
nearly
exactly what I
wanted)
in CircuitPython
I already compiled a list of all keystrokes I wanted to be able to perform
Adafruit has put together a great set of libraries that makes the tasks I
was looking to perform really easy
In addition to that, the feedback loop is super fast in CircuitPython. Write
code. Save. Debug. Repeat. No compiling, no lengthy deploy process since it’s
just a small script.
So not only was I able to bang out the code to get me back to where I was
pretty easily, I was able to add the code to turn the rotary encoder (spinning
knob) that was already on the box into a volume knob.
Today’s pull
request
has a bunch of files in it, but mostly because I checked in the python
dependencies I need in order to get. I also included a couple of scripts that
I wrote to just test specific things in isolation (like buttons or the rotary
encoder).
Hardware
The hardware side was a little trickier. First, these boards don’t come with
the headers attached. So I had to solder them myself. This is normally a scary
point for me, but because of another project I had been working on, I was a
little more confident going in. In fact I took this as an opportunity to solder
a bunch of headers on a variety of boards I had lying around. This went pretty
well (no shorts!) and didn’t take too long. I made some mistakes, but was able
to fix them all.
This is what the board looked like when I was done. The blue sticker is there to differentiate it from other types of boards (which have another color sticker) and my other board of the same type (which has a different number written on it)
And here’s a close up of the soldering work.
My next problem was that the buttons seemed to be firing presses pretty
sporadically. After about half an hour of frustrated debugging, I realized that
the sample code I was using wasn’t explicitly setting the buttons to use a
pull-up resistor. Adding the line button_top_red.pull = Pull.UP for each
button fixed that! There was another way to handle this, plugging a third wire
from the button to the 3.3v pin on the board. The STEMMA
buttons I have for breadboarding do
have a third wire, and I was able to confirm that plugging it into power would
fix the issue. The reason I prefer the pull-up resistor solution was because I
have no idea where I’d attach a third wire to the buttons I have. This is a
hole in my understanding how buttons work. I’m fine with it for now, but will
need to figure this out at some point.
At this point, I was at parity with what I had before but I really wanted a
volume knob. I found that I would absentmindedly spin the knob on the box even
though I knew it didn’t do anything. I really wanted it to work. The code was
easy, and it was easy to test with my breadboard friendly rotary encoder that I
had. But the one I had in my box didn’t have the easy to attach to header pins.
So I grabbed a piece of protoboard, cut it down to size a bit, and soldered the
encoder to it along with some wires.
This is what it looks like from the top (and plugged into a breadboard for testing)
Conclusion
It was a really busy day, but much more productive than I have been in the
past. Between the speed of developing with CircuitPython and confidence built
up with the electronics aspects, I was able to take on more than I normally
would and be confident that I would finish everything.
With all of the Zoom meetings and working from home, I decided to tackle the task of configuring my buttons project to be able to control Zoom. The big things I wanted were:
Start a new Zoom meeting
Mute/unmute
Enable/disable video
Close my Zoom meeting (I hate fumbling with the UI and clicking multiple buttons on the screen to get out of a meeting)
Share screen
Zoom has a list of shortcuts on their site. Most of what I want are easy key combos. For example, starting a meeting is command + control + v. Some of them were a bit more complicated though. Closing a Zoom meeting or sharing a screen both have shortcuts, but the shortcuts bring up a dialog box. Having to click more buttons on my keyboard or with mouse defeats the purpose of dedicated hardware buttons. Luckily, both of those situations have pretty standard flows. Closing a Zoom maps to command + w followed by enter. Sharing maps to command + shift + s then right arrow and then finally enter.
Refactor
Basically I need to be able to support chords. This will take a refactor. As it
stood, the code just had a giant switch block (really lots of if’s) that
figured out which key set to send. Now I need to be able to send multiple keys
per button press. It’s high time I create a command class. For lack of a better
name, I’ll call it QuinCommand. It can take up to five different key
combinations that it will play out in order. (get it? “quin”… okay so it’s my
name too. It works on multiple levels.) It will need to be able to send out
Bluetooth commands, so we’ll need to abstract that out to a dedicated class
too. Sticking with my theme of picking bad names, that’ll be called Blue.
This cleans up a lot of my main file. All that that’s left is to pull out all
of the constants that define the specific key combos and comments that describe
them and where to get more info on creating more. That was a lot of code that
gets moved to CommandsConstants (probably the best name of the bunch…).
With all of this cleanup done a couple of things stood out at me. First,
there’s still a lot of boilerplate code that I’m no longer using. Delete it.
Second, there’s a whole sub-folder of code kicking around that was copy and
pasted of this project. It confuses me whenever I open up the project. Delete
that too.
Much better.
Relearning C++
It’s been ~20 years since I’ve seriously written any C++. And that was high
school. So this entire refactor took a lot of googling. How to make classes,
how to define a header file in such a way that you can include it multiple
times. How to handle arrays or strings. That last bit kicked my ass quite a
bit. I’d like to say I researched and figured out the right way to do things.
But no, I just stack overflowed (the site) for a bit tried a bunch of things
until something worked. I’m 💯 percent sure that it’s not the best answer. I’m
trying to send constant length constant strings around, there has to be a way
to do that without resorting to a memcpy. At the end of the day (and it
really was the end of the day when I was working on this – I was tired) I
went with a cludge that worked.
Wrapping up
I’d like to change the commanding architecture to be based off of an interface
(or an abstract class with all virtual methods… cuz C++) and have completely
custom logic for what happens when each command is invoked. It’d also be nice
to wrap the command in a button class that tracks the state of the button press
and handles whether or not to resend a command if I haven’t taken my finger off
the button yet. Realistically, that’s probably not going to happen for a long
while. The box works well enough for now and I have a couple of new
boards on order that run python. So
it’s likely that I’ll be porting this over to that, which should have a faster
development feedback loop for me.
Writing all of this C++ really made me miss the simplicity of C#.
I’ve finally taken the time to configure Windows
Terminal.
I’ve been a big fan of ConEmu in the past. It has
tons of configurable settings and features. But honestly, I switched to it for
the easier copy/pasting in the command line. Since the new Windows Terminal
can do that, then I thought it would be worth giving a shot.
Below is my current configuration after about an hour of reading docs and
fiddling. I like that I was easily able to find the Desert
theme (which is what I’ve been using for
vim for over a decade now).
Interesting tidbits I stumbled across while reading the docs
Holding alt while opening the settings will open the default settings
Pressing any arrow key while holding alt will jump to the pane in that
direction.
Pressing any arrow key while holding alt-shift will resize current the pane
in that direction
Settings are reloaded as soon as you save the settings file. No need to
reload tabs. This confused me while I was trying out different color schemes
Chrome-style shortcuts work for zooming in/out in a pane
Aero doesn’t work on my Surface3 🙀
Wishlist
It would be nice to be able to click on links in the console and have them open
in my browse. There’s an
issue open for that, so
hopefully it makes it into an upcoming version.
Another ConEmu feature that I would love to see is the ability to open up a
tab as an administrator The
current workaround is to Ctrl+Shift+click on the icon in the taskbar to open
a dedicated admin prompt. This is a bit more work than I’m used to, but most of
what I’m adminning about for is to just run
Chocolatey. I can make due.
It’s been a while since I’ve worked on my Arduino project to create a Bluetooth
keyboard. In that time I have been using my keyboard a little bit, but it needs
some work, ranging from small tweaks to major overhauls. This post is to remind
me how to do the small tweaks. Some of it will be very specific to my current
setup.
The first thing I’m remembering, and this sounds really dumb but I had to
relearn it, was that the Arduino needs to be on. I had assumed that merely
plugging it into my laptop would have been enough, but nope. Fully powered on.
Check. ✔
Now that the board is on, we can verify all of the settings in Arduino IDE,
including making sure the correct board is selected and the correct com port is
being used. For my setup Adafruit Feather 32u4 and COM3 are the expected
values.
Select Board
Select COM Port
Now that the board is connected, to view debug output while it’s running you
can open up the Serial Monitor with Ctrl-Shift-M.