<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hunter Watson]]></title><description><![CDATA[A place for things and stuff]]></description><link>https://lumen.netlify.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Jun 2021 03:21:06 GMT</lastBuildDate><item><title><![CDATA[Hunter-friendly chocolate banana muffins]]></title><description><![CDATA[I have a bunch of allergies. I'm posting my recipe here for chocolate banana muffins so that I can access it from anywhere!]]></description><link>https://lumen.netlify.comchocolate-banana-muffins</link><guid isPermaLink="false">https://lumen.netlify.comchocolate-banana-muffins</guid><pubDate>Wed, 16 Jun 2021 03:12:25 GMT</pubDate><content:encoded>&lt;p&gt;Preheat oven to &lt;strong&gt;375ºF&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1/2 Cup &lt;strong&gt;Margarine&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;/&lt;em&gt;Beat&lt;/em&gt;/&lt;/p&gt;
&lt;p&gt;1 Cup &lt;strong&gt;Sugar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;/&lt;em&gt;Beat&lt;/em&gt;/&lt;/p&gt;
&lt;p&gt;3 Tablespoon &lt;strong&gt;Canola Oil&lt;/strong&gt;&lt;br&gt;
3 Tablespoon &lt;strong&gt;Water&lt;/strong&gt;&lt;br&gt;
2 Teaspoon &lt;strong&gt;Baking Powder&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;/&lt;em&gt;Mix&lt;/em&gt;/&lt;/p&gt;
&lt;p&gt;1/4 Teaspoon &lt;strong&gt;Salt&lt;/strong&gt;&lt;br&gt;
2 Teaspoon &lt;strong&gt;Baking Powder&lt;/strong&gt;&lt;br&gt;
1/4 Cup &lt;strong&gt;Cocoa&lt;/strong&gt;&lt;br&gt;
1 &lt;strong&gt;Mashed Banana&lt;/strong&gt;&lt;br&gt;
1 Teaspoon &lt;strong&gt;Vanilla&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;/&lt;em&gt;Mix&lt;/em&gt;/&lt;/p&gt;
&lt;p&gt;Fold 1 Cup &lt;strong&gt;Flour&lt;/strong&gt;&lt;br&gt;
Fold 1/4 Cup &lt;strong&gt;Water&lt;/strong&gt;&lt;br&gt;
Fold 1 Cup &lt;strong&gt;Flour&lt;/strong&gt;&lt;br&gt;
Fold 1/4 Cup &lt;strong&gt;Water&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;Fill muffin tins 3/4 full
Bake at &lt;strong&gt;375ºF&lt;/strong&gt; for &lt;strong&gt;25 minutes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let cool for &lt;strong&gt;15 minutes&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[my favourite video games to play with my girlfriend]]></title><description><![CDATA[I recently quarantined with my girlfriend for 14 days. We tried a lot of different couch co-op games on my switch, and these were our favourites :)]]></description><link>https://lumen.netlify.comswitch-couch-coop</link><guid isPermaLink="false">https://lumen.netlify.comswitch-couch-coop</guid><pubDate>Tue, 26 Jan 2021 04:18:55 GMT</pubDate><content:encoded>&lt;p&gt;Thanks to Covid-19, I’ve had a lot of time to refine my video game preferences over the past few months. I no longer have any interest in vast, open-world, single-player, plot-driven games with 144-hour play-times featuring next-gen graphics that only the newest hardware can support. On the other side of the spectrum, I’ve grown away from competitive, online, multiplayer games. Additionally, I’ve always been a fan of big party games like the Jackbox games sets, but those games require a handful of players, which requires a handful of scheduling and organization. &lt;/p&gt;
&lt;p&gt;However, somewhere between these two genres is an extremely under-appreciated set of games I like to call “Gaby Games” (My girlfriend’s name is Gaby. I was going to call it girlfriend games, but then I realized that’s not very inclusive and implies some generalization about females and video games, which isn’t my intention at all). &lt;strong&gt;Gaby Game Definition:&lt;/strong&gt; A local co-op game for 2 people with simple controls, charming gameplay, and some form of progression.&lt;/p&gt;
&lt;p&gt;Here’s a list of my favourite couch co-op Nintendo Switch games, along with a rating out of 10 by Gaby:&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-castle-crashers-remastered-85&quot;&gt;&lt;a href=&quot;#4-castle-crashers-remastered-85&quot; aria-label=&quot;4 castle crashers remastered 85 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. &lt;a href=&quot;https://www.nintendo.com/games/detail/castle-crashers-remastered-switch/&quot;&gt;Castle Crashers Remastered&lt;/a&gt; (8.5)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/media/castle_crashers_0.jpg&quot; title=&quot;Castle Crashers Game Cover&quot;&gt;&lt;/p&gt;
&lt;p&gt;Castle Crashers is a 2D hack-and-slash game that was originally released in 2008. The game features a co-op campaign with a straight-forward progression system. New mechanics and features are introduced in almost every level, keeping us interested and invested through the whole game.&lt;/p&gt;
&lt;p&gt;Here’s the thing, the controls are a little more complicated than the other games on this list, but the skill-floor is very low, meaning you don’t have to know what you’re doing to have fun. Throughout almost the entire game, you can basically button mash through any combat (other than boss fights) with relative success. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/castle_crashers.jpg&quot; title=&quot;Castle Crashers Gameplay&quot;&gt;&lt;/p&gt;
&lt;p&gt;This game is equal parts cute, crude, silly, and exciting, but most of all, it’s a lot of fun.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I liked that we had to work together. Also, upgrading was fun, like, I liked being rewarded XP to choose what to use it on. Plus the other rewards like food, weapons, money, and gems… idk what the gems were now that I mention it. Ooh and I liked having to figure out the bad guys’ kryptonite also how money was obtainable, like we didn’t have to be SUPER good to buy several potions.”&lt;/p&gt;
&lt;p&gt;- Gaby&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;em&gt;Similar Game(s):&lt;/em&gt; &lt;a href=&quot;https://www.nintendo.com/games/detail/full-metal-furies-switch/&quot;&gt;&lt;em&gt;Full Metal Furies&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;3-super-mario-party-85&quot;&gt;&lt;a href=&quot;#3-super-mario-party-85&quot; aria-label=&quot;3 super mario party 85 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. &lt;a href=&quot;https://www.nintendo.com/games/detail/super-mario-party-switch/&quot;&gt;Super Mario Party&lt;/a&gt; (8.5)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/media/super_mario_party_0.jpg&quot; title=&quot;Super Mario Party Cover&quot;&gt;&lt;/p&gt;
&lt;p&gt;This is the only big-name game on this list, but we had a lot of fun playing it. Mario Party is a board-game-esque party game peppered with exciting and creative mini-games between rounds. The maps aren’t anything to call home about relative to other games in the series, but the batch of mini-games in this newest Mario Party is pretty solid. It also features a 2v2 mode (we played against CPUs), which features some new mechanics and co-operative mini-games. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/super_mario_party.jpg&quot; title=&quot;Mario Party Gameplay&quot;&gt;&lt;/p&gt;
&lt;p&gt;Mario Party is Mario Party… there isn’t too much to say about it, but I wanted to include it on the list.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Umm… I like the mini-games. And that it’s unpredictable - like u could be losing and come out with the dub.”&lt;/p&gt;
&lt;p&gt;- Gaby&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Similar Game(s): uhhhhh…&lt;/em&gt; &lt;a href=&quot;https://mariokart8.nintendo.com/&quot;&gt;&lt;em&gt;Mario Kart 8 Deluxe&lt;/em&gt;&lt;/a&gt;&lt;em&gt;?&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-the-stretchers-90&quot;&gt;&lt;a href=&quot;#2-the-stretchers-90&quot; aria-label=&quot;2 the stretchers 90 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. &lt;a href=&quot;https://www.nintendo.com/games/detail/the-stretchers-switch/&quot;&gt;The Stretchers&lt;/a&gt; (9.0)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/media/stretchers_0.jpg&quot; title=&quot;The Stretchers Game Cover&quot;&gt;&lt;/p&gt;
&lt;p&gt;The Stretchers is… zany. It’s an action/puzzle game that requires teamwork and coordination. The gimmick is, for a large portion of the game, you have to skillfully maneuvour together as two “medics” on either side of a stretcher.&lt;/p&gt;
&lt;p&gt;This game is non-stop silliness. The plot is outrageous; the gameplay is cartoony; the collaborative movement is hilarious; if you step on a skateboard, your character goes flying, and at the end of the level, you get docked an insignificant amount of points for getting “skateboarded.” The whole game is amusing and requires teamwork throughout. Even when driving between levels, one person drives this indestructible ambulance while the other activates a boost and controls the deployable wings.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/stretchers_1.jpg&quot; title=&quot;The Stretchers Gameplay&quot;&gt;&lt;/p&gt;
&lt;p&gt;This game is weird but tons of fun. I think we beat the game in a few nights (maybe 7 hours for the whole game), but we laughed out loud at least once every session.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I liked how silly it was. We laughed a lot. And the levels were always different and fun. I liked having to always work together, and the driving added a fun element.”&lt;/p&gt;
&lt;p&gt;- Gaby&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Similar Game(s):&lt;/em&gt; &lt;a href=&quot;https://www.nintendo.com/games/detail/moving-out-switch/&quot;&gt;&lt;em&gt;Moving Out&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href=&quot;https://www.nintendo.com/games/detail/phogs-switch/&quot;&gt;&lt;em&gt;Phogs!&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;1-out-of-space-couch-edition-95&quot;&gt;&lt;a href=&quot;#1-out-of-space-couch-edition-95&quot; aria-label=&quot;1 out of space couch edition 95 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. &lt;a href=&quot;https://www.nintendo.com/games/detail/out-of-space-couch-edition-switch/&quot;&gt;Out of Space: Couch Edition&lt;/a&gt; (9.5)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/media/out_of_space_0.jpg&quot; title=&quot;Out Of Space Game Cover&quot;&gt;&lt;/p&gt;
&lt;p&gt;I describe this game to my friends as “Overcooked but a good game.” Out of Space, also referred to as “The Cleaning Game” by Gaby, was our favourite video game to play together.&lt;/p&gt;
&lt;p&gt;Basically, you arrive at a procedurally-generated, alien-infested space ship, and you win by cleaning it. Sounds fun, right? &lt;/p&gt;
&lt;p&gt;But here’s the thing: you need to generate resources, make multiple shot-calls about short-term (order a pizza) vs. long-term (buy a pumpkin generator) decisions, tackle evolving aliens with different tools (mop, bucket of water, dog). Ugh this game is just so easy to get into but is full of choices and communication. In Overcooked, it feels like it’s the two of you vs. the clock - but in Out of Space, it’s the two of you vs. your environment vs. yourselves vs. the spaceship vs. time and space.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/out_of_space_1.jpg&quot;&gt;&lt;/p&gt;
&lt;p&gt;Gaby wasn’t feeling it at all after trying the tutorial, but once she got into it a little more, we probably played an hour or two of it every day of our quarantine. I highly recommend this game.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Very fun. A bit stressful at times… If you like your heart rate increasing while playing a game, then this game is for you. But ya I like having to conquer a whole map, and working together is fun. Also, being able to move stuff and purchase things, like you can make it fun it’s kind of like playing house while having to complete an objective.”&lt;/p&gt;
&lt;p&gt;- Gaby&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Similar Game(s):&lt;/em&gt; &lt;a href=&quot;https://www.nintendo.com/games/detail/overcooked-2-switch/&quot;&gt;&lt;em&gt;Overcooked 2&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href=&quot;https://www.nintendo.com/games/detail/catastronauts-switch/&quot;&gt;&lt;em&gt;Catastronauts&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href=&quot;https://www.nintendo.com/games/detail/lovers-in-a-dangerous-spacetime-switch/&quot;&gt;&lt;em&gt;Lovers in a Dangerous Spacetime&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[solving a Rubik's Cube very slowly]]></title><description><![CDATA[I don't know how people complete a Rubik's Cube really quickly, but here's an unoptimized way to solve one fairly slowly. I used to think people who could solve a Rubik's Cube were geniuses with elite spacial awareness, but now I know they're just bored.]]></description><link>https://lumen.netlify.comrubiks-cube</link><guid isPermaLink="false">https://lumen.netlify.comrubiks-cube</guid><pubDate>Thu, 17 Oct 2019 05:07:14 GMT</pubDate><content:encoded>&lt;p&gt;This guide will explain how to solve a Rubik’s cube in five (5) steps. For the first half, we’ll put WHITE on the top and halfway through we’ll switch to YELLOW on the top. Also, the algorithm steps are from left to right, then top to bottom.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;1-first-layer-sides&quot;&gt;&lt;a href=&quot;#1-first-layer-sides&quot; aria-label=&quot;1 first layer sides permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. First Layer Sides&lt;/h2&gt;
&lt;p&gt;Okay so I’ve decided to not include steps for how to get the white cross because I think it’s the only reasonable “problem-solving” part of the cube. You’ll need to figure out how to make a WHITE cross on the top of the cube (don’t worry about the corners). Make sure the sides are lined up with the correct colour like in the picture below on the left. Good luck and have fun.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/1-top_cross.png&quot; title=&quot;Starting and Ending Point&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-first-layer-corners&quot;&gt;&lt;a href=&quot;#2-first-layer-corners&quot; aria-label=&quot;2 first layer corners permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. First Layer Corners&lt;/h2&gt;
&lt;p&gt;Now we can start with the mindless algorithms. With WHITE on the top, find the corner piece that goes in the top-right corner (in the image it’s the WHITE-RED-BLUE piece) and line it up somewhere on the right side.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/2-row1_corners.png&quot; title=&quot;Top Layer Corners&quot;&gt;&lt;/p&gt;
&lt;p&gt;Repeat the shown algorithm with WHITE on the top until the corner piece is in the correct position with the correct orientation. Repeat this step with all 4 WHITE corners.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If the corner you’re looking for is in the top layer but in the wrong position or wrong orientation, do the algorithm with the piece in the top right.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;3-second-layer-sides&quot;&gt;&lt;a href=&quot;#3-second-layer-sides&quot; aria-label=&quot;3 second layer sides permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Second Layer Sides&lt;/h2&gt;
&lt;p&gt;With WHITE on the top, orient the bottom layer so that it matches one of the positions in the image below and do the associated algorithm depending on the direction.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/3-row2_sides.png&quot; title=&quot;Middle Layer&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If the piece is in the correct position but the wrong orientation, do one of the above algorithms to put a different piece in that spot and then preform the algorithm. You can use this tip if none of the correct pieces are in the bottom row.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;4-third-layer-sides&quot;&gt;&lt;a href=&quot;#4-third-layer-sides&quot; aria-label=&quot;4 third layer sides permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. Third Layer Sides&lt;/h2&gt;
&lt;p&gt;The first two layers should be complete! Flip the cube over so that YELLOW is on top. Orient the cube so the YELLOW sides match one of the patterns below (don’t worry about the corners). Repeat the algorithm until you complete the YELLOW cross.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/4-bottom_cross.png&quot; title=&quot;Third Layer Sides 1&quot;&gt;&lt;/p&gt;
&lt;p&gt;Twist the top until the most YELLOW side pieces line up with the correct colour on the sides. Use the following algorithm to swap two YELLOW side pieces.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/5-row3_sides.png&quot; title=&quot;Third Layer Sides 2&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;5-third-layer-corners&quot;&gt;&lt;a href=&quot;#5-third-layer-corners&quot; aria-label=&quot;5 third layer corners permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5. Third Layer Corners&lt;/h2&gt;
&lt;p&gt;With YELLOW on top, find a corner with the correct position (doesn’t need to have the correct orientation) and put that in the front-top-right of your hold. Perform the algorithm until all corners are in the correct position (don’t worry about orientation). If no corner is in the correct position, do the algorithm with any side as the face and then find a correct corner.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/6-bottom_corner_positions.png&quot; title=&quot;Third Layer Corner 1&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: This next part gets wonky and temporarily screws up the progress we’ve made in other areas. Trust yourself and keep going.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;All corners should be in the correct position (but maybe not the correct orientation). With YELLOW on top, perform the following algorithm until the corner is in the correct orientation. &lt;strong&gt;Don’t change your front side -&lt;/strong&gt; Rotate the top layer so the next wrong-orientation corner is in the top right. Repeat this algorithm until the corner is in the correct orientation. Do this for all corners until the top layer is complete. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/7-bottom_corner_orientation.png&quot; title=&quot;Third Layer Corners 2&quot;&gt;&lt;/p&gt;
&lt;p&gt;You might need to do a final twist on the top layer to line everything up.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I really hope that made sense. I think the pictures do at the very least. &lt;a href=&quot;https://www.speedcube.com.au/pages/how-to-solve-a-rubiks-cube&quot;&gt;Here&lt;/a&gt; is a link to the tutorial I used.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[drinking game app idea]]></title><description><![CDATA[Being a 20-ish-year-old who hasn't matured enough to appreciate casual drinking while conversing with friends, I frequently end up playing some kind of drinking game at events. Most of them are alright, some of them are okay, but none of them are exactly what I want. That's why I'm going to (try to) make one.]]></description><link>https://lumen.netlify.comdrinking-game-app-idea</link><guid isPermaLink="false">https://lumen.netlify.comdrinking-game-app-idea</guid><pubDate>Wed, 21 Aug 2019 16:16:12 GMT</pubDate><content:encoded>&lt;p&gt;Picture this: you’re at a pre-drink with some friends, some friends of friends, and that one friend of a friend who you sort of have a crush on. People are casually drinking and having a good time, but the vibe is kind of dying. Someone suggests you all play a drinking game and everyone agrees… but what game?&lt;/p&gt;
&lt;p&gt;Beer pong is fun, but there are too many of you. Flip cup is exciting, but it doesn’t give you a chance to really get to know each other. Your friend learned a new game while studying abroad, but no one really wants to learn the complicated rules. Games like King’s Cup are great if you have a deck of cards, but the game quickly loses steam. Nothing is a perfect fit for the night.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;From the &lt;em&gt;very&lt;/em&gt; limited research that I’ve done, there are 3 qualities of a good drinking game:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The rules are simple&lt;/li&gt;
&lt;li&gt;It brings people together&lt;/li&gt;
&lt;li&gt;It is enjoyable&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;But what about the 3 qualities of a &lt;strong&gt;&lt;em&gt;great&lt;/em&gt;&lt;/strong&gt; drinking game:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The rules are simple - &lt;em&gt;and the game is easily accessible&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;It brings people together - &lt;em&gt;regardless of who they are and their state at the party&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;It is enjoyable - &lt;em&gt;throughout the whole game, and it’s replayable&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The closest thing to a great drinking game I’ve played is a mobile app called “Picolo” (&lt;a href=&quot;https://apps.apple.com/ca/app/picolo-drinking-game/id1001473964&quot;&gt;iOS&lt;/a&gt;/&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.picolo.android&amp;#x26;hl=en_CA&quot;&gt;Android&lt;/a&gt;). Picolo is simple, can be played with just a single phone and any number of people, and is usually pretty fun. It checks the boxes for a good drinking game but falls short when evaluated against my great game list.&lt;/p&gt;
&lt;p&gt;Firstly, the game has some brain-dead prompts that aren’t fun, leading to skipping of cards and a loss of momentum, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;posting on Facebook&lt;/li&gt;
&lt;li&gt;“rule” cards that span multiple rounds&lt;/li&gt;
&lt;li&gt;extremely sexual cards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Second, the game lacks understanding about who the players are and their relationships. This can lead to some awkward, mood-killing situations, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the designated driver is told to finish their drink&lt;/li&gt;
&lt;li&gt;someone in a relationship has to do something romantic with someone other than their partner&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So here’s my app pitch:&lt;/p&gt;
&lt;h1 id=&quot;harmony&quot;&gt;&lt;a href=&quot;#harmony&quot; aria-label=&quot;harmony permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Harmony&lt;/h1&gt;
&lt;p&gt;Harmony is a personalized drinking game made for human beings.&lt;/p&gt;
&lt;h2 id=&quot;player-rules&quot;&gt;&lt;a href=&quot;#player-rules&quot; aria-label=&quot;player rules permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Player Rules&lt;/h2&gt;
&lt;p&gt;What if your game knew the players. What if it knew that Adam wasn’t drinking, Britney and Charlie were a couple, Daniel will do almost anything, and Ethan has a crush on Fiona. With the option to configure player rules (player statuses and player relationships), Harmony is able to respect people’s choices while simultaneously play matchmaker. It’s a real crowd-pleaser.&lt;/p&gt;
&lt;h2 id=&quot;curated-prompts&quot;&gt;&lt;a href=&quot;#curated-prompts&quot; aria-label=&quot;curated prompts permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Curated Prompts&lt;/h2&gt;
&lt;p&gt;There are lots of prompt-based drinking games. Harmony would feature the best prompts from these games, and more importantly, not have any of the shitty ones.&lt;/p&gt;
&lt;h2 id=&quot;custom-prompts&quot;&gt;&lt;a href=&quot;#custom-prompts&quot; aria-label=&quot;custom prompts permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Custom Prompts&lt;/h2&gt;
&lt;p&gt;Collections of prompts, sometimes referred to as cards, can be added or removed based on the vibe of the night. Each prompt has a “spiciness” rating from 1 to 5, where 1 is something you could play with your new coworkers and 5 is… intense. Before the game, players can set a range of what levels they want to play with. Additionally, new prompts will be consistently added to keep the game fresh.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[helping people help themselves]]></title><description><![CDATA[I recently attended a workshop about coaching through active listening and powerful questions. This post notes the key takeaways from the session.]]></description><link>https://lumen.netlify.comhelping-people-help-themselves</link><guid isPermaLink="false">https://lumen.netlify.comhelping-people-help-themselves</guid><pubDate>Sun, 21 Jul 2019 03:44:07 GMT</pubDate><content:encoded>&lt;p&gt;I’ve always put a lot of emphasis on making decisions based on logic and reasoning. People would ask me for advice and I would disregard most emotional factors, or at least value them less than rational ones. But then I realized two things: (1) People don’t want to be told what to do, and (2) People are people with emotions that are valid. &lt;/p&gt;
&lt;p&gt;And last week I learned how to put these two learnings in motion when helping people work through their problems. I attended a workshop about coaching through active listening and powerful questions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-is-active-listening&quot;&gt;&lt;a href=&quot;#what-is-active-listening&quot; aria-label=&quot;what is active listening permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What is Active Listening?&lt;/h2&gt;
&lt;p&gt;Active listening is about &lt;strong&gt;consciously listening rather than waiting to speak&lt;/strong&gt;. The flow of the conversation should be driven by the speaker and &lt;strong&gt;should not follow some predetermined agenda&lt;/strong&gt;. It’s important to &lt;strong&gt;develop an understanding with the speaker to develop a cooperative atmosphere&lt;/strong&gt;. Here are some things to consider when active listening:&lt;/p&gt;
&lt;h3 id=&quot;1-let-the-other-person-talk&quot;&gt;&lt;a href=&quot;#1-let-the-other-person-talk&quot; aria-label=&quot;1 let the other person talk permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Let the other person talk&lt;/h3&gt;
&lt;p&gt;Make it clear that you’re there to listen. They should be leading the conversation. Don’t make the conversation about you&lt;/p&gt;
&lt;h3 id=&quot;2-embrace-the-silence&quot;&gt;&lt;a href=&quot;#2-embrace-the-silence&quot; aria-label=&quot;2 embrace the silence permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Embrace the silence&lt;/h3&gt;
&lt;p&gt;Silence allows the speaker to share extra information. Staying silent also proves to the speaker how devoted you are to listening. It will probably be awkward, but you’ll get over it. Phrases like “go on” can help continue the conversation if the silence is unbearable.&lt;/p&gt;
&lt;h3 id=&quot;3-let-them-know-youre-listening&quot;&gt;&lt;a href=&quot;#3-let-them-know-youre-listening&quot; aria-label=&quot;3 let them know youre listening permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Let them know you’re listening&lt;/h3&gt;
&lt;p&gt;Clarify what you’re hearing by paraphrasing and acknowledging certain parts of what the speaker is saying. Digging into certain word choices can undercover feelings that they might not be sharing yet. Reflect on what’s been said and confirm suspicions drawn from “reading between the lines”.&lt;/p&gt;
&lt;h2 id=&quot;what-are-powerful-questions&quot;&gt;&lt;a href=&quot;#what-are-powerful-questions&quot; aria-label=&quot;what are powerful questions permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What are Powerful Questions?&lt;/h2&gt;
&lt;p&gt;Powerful questions are ones that &lt;strong&gt;provoke more questions&lt;/strong&gt;. They are &lt;strong&gt;open-ended&lt;/strong&gt;, &lt;strong&gt;surface feelings/opinions&lt;/strong&gt;, and *should not lead the other person to a conclusion”. Here are some things to consider when asking active questions:&lt;/p&gt;
&lt;h3 id=&quot;1-investigate-further-underneath-the-surface&quot;&gt;&lt;a href=&quot;#1-investigate-further-underneath-the-surface&quot; aria-label=&quot;1 investigate further underneath the surface permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Investigate further underneath the surface&lt;/h3&gt;
&lt;p&gt;Similar to paraphrasing, questions should demonstrate your understanding as well as get the user to reflect on what they said. It’s also a chance to create clarity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What did you mean by … ?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Can you tell me more about … ?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-challenge-current-assumptions&quot;&gt;&lt;a href=&quot;#2-challenge-current-assumptions&quot; aria-label=&quot;2 challenge current assumptions permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Challenge current assumptions&lt;/h3&gt;
&lt;p&gt;Questions should make the receiver consider their own assumptions. They might have a preconceived idea of what will/should happen, but that might not be the only, or best, choice.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What will happen if you don’t take this step?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Are there any alternatives?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-guide-the-person-towards-what-they-want&quot;&gt;&lt;a href=&quot;#3-guide-the-person-towards-what-they-want&quot; aria-label=&quot;3 guide the person towards what they want permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Guide the person towards what they want&lt;/h3&gt;
&lt;p&gt;Once you’ve explored the problem space and you’re ready to start a conversation about taking action, questions can help the person consider options to move forward.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What have you tried so far?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What kind of help will you need?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;If a friend was in your shoes, what advice would you give them?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Although these questions are good starting points, powerful questions should be reactions from active listening. My favourite question to ask is &lt;em&gt;If a friend was in your shoes, what advice would you give them?&lt;/em&gt; That one really stuck with me from the session.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[custom search engine shortcuts]]></title><description><![CDATA[Sometimes we want our searches to be more specific than Google. Maybe we want to search something on wikipedia, netflix,  or google translate. Maybe you think it takes one-too-many clicks to search for a site, go to it, and search from there. Here's the solution.]]></description><link>https://lumen.netlify.comcustom-search-engines</link><guid isPermaLink="false">https://lumen.netlify.comcustom-search-engines</guid><pubDate>Fri, 05 Jul 2019 03:45:00 GMT</pubDate><content:encoded>&lt;p&gt;I tried using DuckDuckGo for a couple days (privacy, unbiased results, control, blah blah blah), but I found myself preceding every search with &lt;code class=&quot;language-text&quot;&gt;!g&lt;/code&gt;. DuckDuckGo has these things called &lt;em&gt;!Bangs&lt;/em&gt;, which are “shortcuts that quickly take you to search results on other sites”, according to &lt;a href=&quot;https://duckduckgo.com/bang&quot;&gt;their website&lt;/a&gt;. For example, if I want to search “dog” on Wikipedia, I can type &lt;code class=&quot;language-text&quot;&gt;!w dog&lt;/code&gt; in the search field at the top of my browser, and it will take me to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dog&quot;&gt;search result of dogs on wikipedia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;!Bangs&lt;/em&gt; were the only thing stopping me from switching back to Google search… But then I found out you can homebrew your own bangs with Google and I instantly switched back.&lt;/p&gt;
&lt;h2 id=&quot;creating-custom-search-engines&quot;&gt;&lt;a href=&quot;#creating-custom-search-engines&quot; aria-label=&quot;creating custom search engines permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Creating Custom Search Engines&lt;/h2&gt;
&lt;p&gt;In Google Chrome, go to settings (⌘ + ,), scroll down to &lt;em&gt;Search Engine&lt;/em&gt;, and select &lt;em&gt;Manage Search Engines&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In the &lt;em&gt;Other search engines&lt;/em&gt; section, you might see a bunch of random stuff. These are websites automatically adding them for you. Feel free to delete these so there’s no conflicts when you add your own. When you select &lt;strong&gt;Add&lt;/strong&gt;, a modal will pop up:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/custom_search_engine.png&quot; alt=&quot;add search engine&quot; title=&quot;Add New Search Engine&quot;&gt;&lt;/p&gt;
&lt;p&gt;There’s 3 fields with sort of crappy names, but here’s what they mean:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search Engine&lt;/strong&gt;: This is the name of your custom search. You never type this in, but it will display after you’ve activated the custom search.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyword&lt;/strong&gt;: This is your shortcut to activate the custom search. I personally follow the same structure as DuckDuckGo’s &lt;em&gt;!Bangs&lt;/em&gt; by preceding the shortcut with a &lt;code class=&quot;language-text&quot;&gt;!&lt;/code&gt;, but it can be whatever you want. I suggest picking a short-ish term that is related to the site you’re querying.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;URL with %s in place of query&lt;/strong&gt;: This field requires a little work. Go to the site you want to make a custom search for and make a search. You’ll most likely see your search reflected in the URL. Take this URL and substitute &lt;code class=&quot;language-text&quot;&gt;%s&lt;/code&gt; with the term that you searched.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here’s an example for searching for subreddits on Reddit:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/custom_search_example.png&quot; alt=&quot;add search engine example&quot; title=&quot;New Search Engine Example&quot;&gt;&lt;/p&gt;
&lt;p&gt;To use this custom search, type the &lt;strong&gt;keyword&lt;/strong&gt; into your browser search bar, hit &lt;em&gt;space&lt;/em&gt; or &lt;em&gt;tab&lt;/em&gt;, and then type your query.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/custom_search.gif&quot; alt=&quot;using custom search gif&quot; title=&quot;Using Custom Search&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;my-custom-search-engines&quot;&gt;&lt;a href=&quot;#my-custom-search-engines&quot; aria-label=&quot;my custom search engines permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;My Custom Search Engines&lt;/h2&gt;
&lt;p&gt;Here’s a list of the custom searches I currently have set up (along with the config):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;Search Engine&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Keyword&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Reddit&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!sr&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://www.reddit.com/r/%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Google Drive&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!drive&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://drive.google.com/drive/search?q=%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Google Translate (to French)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!2fr&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://translate.google.com/#en/fr/%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Netflix&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!netflix&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://www.netflix.com/search?q=%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;YouTube&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!yt&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://www.youtube.com/results?search_query=%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Genius (Lyrics)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!genius&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://genius.com/search?q=%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Thesaurus&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!t&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://www.thesaurus.com/browse/%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;Google Maps&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;!m&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://www.google.com/maps/search/%s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you want more inspiration (or keyword suggestions), check out &lt;a href=&quot;https://duckduckgo.com/bang&quot;&gt;DuckDuckGo’s !Bangs page&lt;/a&gt; for a very, very long list of shortcuts they have set up.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[making your git commit history pretty]]></title><description><![CDATA[There's hundreds of reasons why the commit history on your feature branch is a mess: testing things that don't work, reverts, you were pairing with someone and didn't want to waste their time while you tried to think of a good commit message. Regardless, here's how to clean up your git commits by rewriting history.]]></description><link>https://lumen.netlify.comgit-interactive-rebase</link><guid isPermaLink="false">https://lumen.netlify.comgit-interactive-rebase</guid><pubDate>Fri, 05 Jul 2019 01:56:38 GMT</pubDate><content:encoded>&lt;p&gt;During my last co-op, I was tasked with migrating some services to CircleCI. Due to some complications with local development, my testing process consisted of committing my changes, pushing to a remote branch, and seeing if the build passed. Unfortunately, this led to &lt;em&gt;lots&lt;/em&gt; of ugly, super minor commits, often with fairly careless commit messages.&lt;/p&gt;
&lt;p&gt;After I squashed all of the bugs, I was left with a bunch of uninformative commits with seemingly meaningless messages like “trying this” and “it should work now” (it didn’t work). Fortunately, one of my coworkers introduced me to interactive rebasing.&lt;/p&gt;
&lt;p&gt;When I first learned about git, &lt;code class=&quot;language-text&quot;&gt;git commit --amend&lt;/code&gt; was a staple in my workflow. There was a lot of pressure to write concise, yet descriptive commit messages, especially when I was pairing with a coworker. The command loads the previous commit message into your editor and allows you to change the message. This is great, but it only works for renaming the most recent commit.&lt;/p&gt;
&lt;p&gt;Interactive rebasing is like the super hero version of &lt;code class=&quot;language-text&quot;&gt;git commit --amend&lt;/code&gt;. Rebasing can solve some of the same problems as merging can, but for this guide, I’ll just be talking about using it in interactive mode to rewrite your history.&lt;/p&gt;
&lt;p&gt;Let’s start with an example:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/git_rebase_example.png&quot; alt=&quot;git example screenshot&quot; title=&quot;git log example&quot;&gt;&lt;/p&gt;
&lt;p&gt;The commits in the previous photo are show newest (top) to oldest (bottom). So we have our master branch, and we’ve checked out to a new branch called &lt;code class=&quot;language-text&quot;&gt;feature-branch&lt;/code&gt;. In this new branch we’ve made 4 commits:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Add a major component&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix a typo in the component&lt;/strong&gt;. This doesn’t need its own commit and we wish it was part of the previous commit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add a new python file&lt;/strong&gt;, but we have a typo in the commit message.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make a minor change to the python file&lt;/strong&gt;. Let’s say this change is minor enough that it probably doesn’t deserve its own commit.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;important-warning&quot;&gt;&lt;a href=&quot;#important-warning&quot; aria-label=&quot;important warning permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Important Warning&lt;/h2&gt;
&lt;p&gt;Interactive rebasing shouldn’t be used on public branches. It rewrites the history, which can be destructive if other people are working on the same branch. These operations are irreversible. If you really want to rebase your public branches, check with your team and make sure they’re all okay with it.&lt;/p&gt;
&lt;p&gt;If you’ve already pushed commits to a remote repo (probably in a PR), you’ll need to do the interactive rebase locally, then &lt;em&gt;force push&lt;/em&gt; your feature branch. I suggest using &lt;code class=&quot;language-text&quot;&gt;git push --force-with-lease&lt;/code&gt; to ensure you’re not clobbering other people’s changes with your &lt;em&gt;force push&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;interactive-rebase&quot;&gt;&lt;a href=&quot;#interactive-rebase&quot; aria-label=&quot;interactive rebase permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Interactive Rebase&lt;/h2&gt;
&lt;p&gt;Let’s clean up our commits. First, we need to decide how far back we want to rewrite our commits. We can pick a specific SHA, reference based on where our HEAD pointer is (&lt;code class=&quot;language-text&quot;&gt;HEAD-5&lt;/code&gt; will let us edit the last 5 commits), or we can edit all the commits from this branch (&lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt;). Let’s do the last option. From our feature branch, we’ll run:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;git rebase -i master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/media/git_rebase_master_i.png&quot; alt=&quot;git interactive rebase screenshot&quot; title=&quot;git rebase screenshot&quot;&gt;&lt;/p&gt;
&lt;p&gt;When we run the command, something like this will pop up in a text editor. It’s a little overwhelming, but if we break it up into components it makes a lot of sense.&lt;/p&gt;
&lt;p&gt;The first section shows the commits we are editing in the following format: &lt;code class=&quot;language-text&quot;&gt;&amp;lt;command&amp;gt; &amp;lt;SHA&amp;gt; &amp;lt;commit message&amp;gt;&lt;/code&gt;. The next important section is the set of commands. For this post, we’ll only be looking at &lt;em&gt;pick&lt;/em&gt;, &lt;em&gt;reword&lt;/em&gt;, and &lt;em&gt;fixup&lt;/em&gt;. If you want to read more about the other options, there’s lot of &lt;a href=&quot;https://git-scm.com/docs/git-rebase&quot;&gt;documentation&lt;/a&gt; online.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pick&lt;/strong&gt; is the default. This will use the commit without altering it at all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;reword&lt;/strong&gt; lets us edit the commit message. This is slightly different than &lt;strong&gt;edit&lt;/strong&gt;, which lets us change other aspects of the commit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fixup&lt;/strong&gt; merges the commit to the previous commit. This is useful when adding a very minor change onto a different commit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can also use the shortened version of the commands - &lt;strong&gt;p&lt;/strong&gt;, &lt;strong&gt;r&lt;/strong&gt;, and &lt;strong&gt;f&lt;/strong&gt; respectively.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now that we know how to use these commands, let’s make some changes to our history. We want to keep our first commit how it is (&lt;strong&gt;pick&lt;/strong&gt;), combine our second commit with our first (&lt;strong&gt;fixup&lt;/strong&gt;), reword our third commit message (&lt;strong&gt;reword&lt;/strong&gt;), and combine our fourth commit with our third (&lt;strong&gt;fixup&lt;/strong&gt;).&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/git_rebase_select.png&quot; alt=&quot;git rebase commands screenshot&quot; title=&quot;git rebase example&quot;&gt;&lt;/p&gt;
&lt;p&gt;When we save this file, git will work from newest (bottom) to oldest (top), stopping whenever it requires user input. It starts with the fixup operation, which will combine the commit with the previous. Then it will go to the reword operation. The rebase operation will pause and prompt the user to reword the commit.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/git_rebase_edit.png&quot; alt=&quot;git reword screenshot&quot; title=&quot;git rebase reword example&quot;&gt;&lt;/p&gt;
&lt;p&gt;In the text editor, we can fix the typo in our commit message, save, and exit. This will resume the rebase operation. The next two steps, fixup and pick, don’t require user input, so it will finish and return us to our normal command line prompt. Let’s see what our git logs look like now.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/git_rebase_result.png&quot; alt=&quot;git rebase result screenshot&quot; title=&quot;git rebase result&quot;&gt;&lt;/p&gt;
&lt;p&gt;Nice. Our four commits are now two, clean commits without any typos or minor changes. This was a fairly simple example, but interactive rebasing can be super useful for more complex fixes (but make sure you double check everything). It&apos;s good practice to clean up your commits before getting a code review, since a clear commit history can communicate your changes and your approach.</content:encoded></item><item><title><![CDATA[homemade duplicate tab keyboard shortcut]]></title><description><![CDATA[Google Chrome has a lot of useful keyboard shortcuts, but there are still a handful of features that aren't mapped to keys. This post will showcase the least elegant method for duplicating a tab... but at least you will feel like a power user.]]></description><link>https://lumen.netlify.comduplicate-tab-keyboard-shortcut</link><guid isPermaLink="false">https://lumen.netlify.comduplicate-tab-keyboard-shortcut</guid><pubDate>Thu, 23 May 2019 04:55:15 GMT</pubDate><content:encoded>&lt;p&gt;Google Chrome has a whole bunch of useful &lt;a href=&quot;https://support.google.com/chrome/answer/157179&quot;&gt;keyboard shortcuts&lt;/a&gt;; however, there are still some features that can only be accessed by using the mouse. Fortunately, if we want to duplicate a tab, we are given all the tools we need to hack together our own solution. I’m doing this on a Mac, but all of these shortcuts can be mapped to other operating systems.&lt;/p&gt;
&lt;p&gt;To duplicate the tab you are in, execute the following shortcuts in sequence:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;⌘ + l       // this is a lowercase L
⌘ + return
⌘ + 9&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;If you just want duplicate a tab and not open it, you can exclude the &lt;code class=&quot;language-text&quot;&gt;⌘ + 9&lt;/code&gt; at the end&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;why&quot;&gt;&lt;a href=&quot;#why&quot; aria-label=&quot;why permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Why?&lt;/h2&gt;
&lt;p&gt;This works because the url will be selected after jumping to the address bar, and then the page is opened in a new tab (since the action is to go to that url). Unfortunately, this tab will be added to the end of the tabs, so if we have 5 tabs open and we want to duplicate tab 2, the tab 2 copy will be in the 6th position. Fortunately, we can use the &lt;em&gt;jump to last&lt;/em&gt; tab command to open the duplicate tab regardless of how many tabs we have open.&lt;/p&gt;
&lt;h3 id=&quot;jump-to-address-bar-⌘--l&quot;&gt;&lt;a href=&quot;#jump-to-address-bar-%E2%8C%98--l&quot; aria-label=&quot;jump to address bar ⌘  l permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Jump to Address Bar (&lt;code class=&quot;language-text&quot;&gt;⌘ + l&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;This shortcut moves the focus to the address bar (which shows the current url)&lt;/p&gt;
&lt;h3 id=&quot;open-in-new-tab-⌘--return&quot;&gt;&lt;a href=&quot;#open-in-new-tab-%E2%8C%98--return&quot; aria-label=&quot;open in new tab ⌘  return permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Open in New Tab (&lt;code class=&quot;language-text&quot;&gt;⌘ + return&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Most people know that if you hold &lt;code class=&quot;language-text&quot;&gt;⌘&lt;/code&gt; and then select something with the mouse (click a link, press a button), it will complete that action in a new tab. This concept is the same, except it uses &lt;code class=&quot;language-text&quot;&gt;return&lt;/code&gt; or &lt;code class=&quot;language-text&quot;&gt;enter&lt;/code&gt; instead to select.&lt;/p&gt;
&lt;h3 id=&quot;jump-to-last-tab-⌘--9&quot;&gt;&lt;a href=&quot;#jump-to-last-tab-%E2%8C%98--9&quot; aria-label=&quot;jump to last tab ⌘  9 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Jump to Last Tab (&lt;code class=&quot;language-text&quot;&gt;⌘ + 9&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;⌘ + 1&lt;/code&gt; through &lt;code class=&quot;language-text&quot;&gt;⌘ + 8&lt;/code&gt; will bring you to a specific tab in your window (&lt;code class=&quot;language-text&quot;&gt;⌘ + 4&lt;/code&gt; will open the 4th tab). &lt;code class=&quot;language-text&quot;&gt;⌘ + 9&lt;/code&gt; brings you to the last tab. So if you have 40 tabs open, it will open the 40th. If you have 2 tabs open, it will bring you to the 2nd.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The alternative is right-clicking the tab we want to duplicate, and selecting &lt;code class=&quot;language-text&quot;&gt;duplicate&lt;/code&gt; from the menu. This is nice because you don’t have to have that tab open, it create the duplicate in the next tab space, and it takes less actions to complete… but it isn’t nearly as flashy.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[having fun with TextExpander]]></title><description><![CDATA[TextExpander is a handy tool that lets you insert "snippets" using keyboard shortcuts or abbreviations. This post explores some of my most used shortcuts as well as some fun stuff you can do with it.]]></description><link>https://lumen.netlify.com/posts/having-fun-with-textexpander</link><guid isPermaLink="false">https://lumen.netlify.com/posts/having-fun-with-textexpander</guid><pubDate>Fri, 17 May 2019 03:40:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;what-is-textexpander&quot;&gt;&lt;a href=&quot;#what-is-textexpander&quot; aria-label=&quot;what is textexpander permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What is TextExpander&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://textexpander.com/&quot;&gt;TextExpander&lt;/a&gt; is a handy tool that lets you insert “snippets” using keyboard shortcuts or abbreviations. They market it to enterprise customers who want their support team to have consistent, accurate boilerplates for responses and statements, but there’s plenty of functionality for normal people like me. I currently have the $3.33/month plan for one user.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/textexpander_personal.gif&quot; alt=&quot;text-expander-demo&quot; title=&quot;TextExpander Demo&quot;&gt;&lt;/p&gt;
&lt;p&gt;Basically you can set &lt;em&gt;snippets&lt;/em&gt;, which will replace the abbreviation that you create for it. For example, when I type &lt;code class=&quot;language-text&quot;&gt;;em&lt;/code&gt; (short for email), right the abbreviation gets &lt;em&gt;expanded&lt;/em&gt; to my email, &lt;code class=&quot;language-text&quot;&gt;hunter@hunterwatson.ca&lt;/code&gt;. You can categorize your shortcuts with groups, which can be activated/deactivate within certain apps. Each group also lets you choose a &lt;em&gt;delimiter&lt;/em&gt; (mine is &lt;code class=&quot;language-text&quot;&gt;;&lt;/code&gt;) which will prefix your abbreviation (since making just &lt;code class=&quot;language-text&quot;&gt;em&lt;/code&gt; expand into my email would be amess).&lt;/p&gt;
&lt;p&gt;Here’s what the UI looks like when making these shortcuts (I have the darkmode enabled because it makes me feel like a programmer):&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/textexpander_menu.png&quot; alt=&quot;text-expander-interface&quot; title=&quot;TextExpander Menu&quot;&gt;&lt;/p&gt;
&lt;p&gt;The left bar houses all of the groups, and each group can be expanded to see the snippets within them. The &lt;code class=&quot;language-text&quot;&gt;Content&lt;/code&gt; can be changed to Plain Text, Picture, JavaScript, and some others. The big white text box is your outputted message, or snippet; you can add values like dates, fill-ins, and cursor movements with the dropdowns at the top of the section. &lt;code class=&quot;language-text&quot;&gt;Abbreviation&lt;/code&gt; is the input, so when you type this prefixed by the delimiter it will turn into the snippet. The delimiter is set in the group, so you shouldn’t add it to the abbreviation.&lt;/p&gt;
&lt;p&gt;You can hide the application from your doc and just have it show in the top menu bar which is nice. Another cool feature is receiving a notification whenever you type out a snippet instead of using the abbreviation. It’s a nice reminder that I can save time by using the app.&lt;/p&gt;
&lt;h2 id=&quot;texexpander-uses&quot;&gt;&lt;a href=&quot;#texexpander-uses&quot; aria-label=&quot;texexpander uses permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TexExpander Uses&lt;/h2&gt;
&lt;p&gt;The most obvious use is creating shortcuts for frequently used terms. I have my phone number (&lt;code class=&quot;language-text&quot;&gt;;phone&lt;/code&gt;), address (&lt;code class=&quot;language-text&quot;&gt;;home&lt;/code&gt;), email (&lt;code class=&quot;language-text&quot;&gt;;em&lt;/code&gt;), and various other personal bits of information set up with abbreviations.&lt;/p&gt;
&lt;h3 id=&quot;emojis&quot;&gt;&lt;a href=&quot;#emojis&quot; aria-label=&quot;emojis permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Emojis&lt;/h3&gt;
&lt;p&gt;I’ve also set up a Slack-like emoji system I can use in other applications. Surrounding an emoji term with colons will create that emoji. For example, &lt;code class=&quot;language-text&quot;&gt;:eyes:&lt;/code&gt; -&gt; 👀, &lt;code class=&quot;language-text&quot;&gt;:triumph:&lt;/code&gt; -&gt; 😤, and &lt;code class=&quot;language-text&quot;&gt;:joy:&lt;/code&gt; -&gt; 😂. I only added my frequently used emojis, but you can subscribe to a free, premade list with all the emojis if you don’t want to go through the work of picking and choosing.&lt;/p&gt;
&lt;h3 id=&quot;clipboard-macros&quot;&gt;&lt;a href=&quot;#clipboard-macros&quot; aria-label=&quot;clipboard macros permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Clipboard Macros&lt;/h3&gt;
&lt;p&gt;There’s some cool functionality you can do with the &lt;code class=&quot;language-text&quot;&gt;clipboard&lt;/code&gt; feature, which let’s you use whatever you have copied. The TextExpander website suggests using it for various business-y things (When writing an email, if you don’t want to misspell the first name of the person your emailing, copy/paste their first name!), but that’s not very useful for someone who rarely communicates to people. I found some cool uses with the JavaScrirpt functionality.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/textexpander_fun.gif&quot; alt=&quot;text-expander-clipboard&quot; title=&quot;TextExpander Clipboard&quot;&gt;&lt;/p&gt;
&lt;p&gt;Both of these are just for fun and the memes associated with them are super outdated, but I use them nonetheless. The &lt;a href=&quot;https://knowyourmeme.com/memes/clap-emoji-%F0%9F%91%8F&quot;&gt;&lt;em&gt;ratchet clap&lt;/em&gt;&lt;/a&gt; macro is great for sarcastically emphasizing a point, and the &lt;a href=&quot;https://knowyourmeme.com/memes/mocking-spongebob&quot;&gt;&lt;em&gt;mocking SpongeBob&lt;/em&gt;&lt;/a&gt; macro is used for… well… mocking.&lt;/p&gt;
&lt;p&gt;The code for &lt;code class=&quot;language-text&quot;&gt;;clap&lt;/code&gt; (&lt;em&gt;Content: JavaScript&lt;/em&gt;):&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; str &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;TextExpander&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pasteboardText&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    result &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; String&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fromCodePoint&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0x1F44F&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

result &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The code for &lt;code class=&quot;language-text&quot;&gt;;mock&lt;/code&gt; (&lt;em&gt;Content: JavaScript&lt;/em&gt;):&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; str &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;TextExpander&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pasteboardText&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; counter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        result &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;counter &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            result &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toUpperCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            result &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toLowerCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        counter&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
result &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;json&quot;&gt;&lt;a href=&quot;#json&quot; aria-label=&quot;json permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;JSON&lt;/h3&gt;
&lt;p&gt;The clipboard functionality can also be used for pretty-printing JSON.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/textexpander_json.gif&quot; alt=&quot;text-expander-json&quot; title=&quot;TextExpander JSON&quot;&gt;&lt;/p&gt;
&lt;p&gt;The code for &lt;code class=&quot;language-text&quot;&gt;;json&lt;/code&gt; (&lt;em&gt;Content: JavaScript&lt;/em&gt;):&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;clipboard&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;I’m still pretty new to TextExpander, but I’m pretty happy with it so far. I’m planning on adding some trash-talking macros so I can flame people in League of Legends without actually typing the whole thing out.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[tinkering with my terminal]]></title><description><![CDATA[A step-by-step guide on how I configure my terminal on MacOS using iTerm2, Zsh, and a whole bunch of other technologies. This post also includes a reference to my config file if anyone wants to copy my setup exactly.]]></description><link>https://lumen.netlify.com/posts/tinkering-with-my-terminal</link><guid isPermaLink="false">https://lumen.netlify.com/posts/tinkering-with-my-terminal</guid><pubDate>Thu, 16 May 2019 03:40:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;/media/iterm2_screenshot.png&quot; alt=&quot;finished terminal preview&quot; title=&quot;Fully Customized Terminal&quot;&gt;&lt;/p&gt;
&lt;p&gt;I was talking with my fellow interns about our personal workspace setups, and I was super surprised when two of them said they use the default Mac &lt;code class=&quot;language-text&quot;&gt;terminal.app&lt;/code&gt; with no customization whatsoever. I thought I was going to blow their mind when I whipped out my spiffy, colourful, dark-theme terminal prompt, but to my surprise, they were having none of it.&lt;/p&gt;
&lt;p&gt;”&lt;em&gt;Yeah, but it does the same stuff, so what’s the point?&lt;/em&gt;”, one of them said.&lt;/p&gt;
&lt;p&gt;And then I froze… I didn’t have a response. Was it true? Was my gorgeous, fully customized terminal equivalent to the default, out-of-the-box version despite the countless hours I’ve devoted to the iterative process of creative the perfect command prompt? Was everything a waste of time?&lt;/p&gt;
&lt;p&gt;Or was I just so used to my &lt;em&gt;power-user-enabled&lt;/em&gt;, &lt;em&gt;ergonimically-crafted&lt;/em&gt;, &lt;em&gt;beeaaauuutiful&lt;/em&gt;, that the advantages became second nature? Was I so comfortable with the brainchild I created that I started to take it for granted?&lt;/p&gt;
&lt;p&gt;The answer is… probably something in between. Anyways here’s a little guide on how I set up my terminal. Obviously you can (and should) change any of the configurations to your liking.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Note: This guide only focuses on the aesthetic changes. I’ll be making another post about the added features and benefits of some of these changes.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;0-install-brew&quot;&gt;&lt;a href=&quot;#0-install-brew&quot; aria-label=&quot;0 install brew permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;0. Install Brew&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt; is a package manager for Mac (and Linux). If you’re doing any kind of software dev stuff on your Mac, you’ll probably end up using it to install packages and dependencies.&lt;/p&gt;
&lt;p&gt;In your command prompt, run the following command:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;/usr/bin/ruby -e &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;1-set-up-iterm2&quot;&gt;&lt;a href=&quot;#1-set-up-iterm2&quot; aria-label=&quot;1 set up iterm2 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Set Up iTerm2&lt;/h2&gt;
&lt;p&gt;iTerm2 offers a lot of benefits over the default Mac terminal… but I mostly use it because it supports a lot of different colours.&lt;/p&gt;
&lt;h2 id=&quot;install-iterm2&quot;&gt;&lt;a href=&quot;#install-iterm2&quot; aria-label=&quot;install iterm2 permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Install iTerm2&lt;/h2&gt;
&lt;p&gt;Install iTerm2 &lt;a href=&quot;https://www.iterm2.com/&quot;&gt;here&lt;/a&gt; or run the following command:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;brew cask &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; iterm2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;customize-colours&quot;&gt;&lt;a href=&quot;#customize-colours&quot; aria-label=&quot;customize colours permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Customize Colours&lt;/h3&gt;
&lt;p&gt;Open the application and navigate to the Colors tab (&lt;code class=&quot;language-text&quot;&gt;iTerm2 -&amp;gt; Preferences -&amp;gt; Profiles -&amp;gt; Colors&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/iterm2_colors.png&quot; alt=&quot;iTerm2 Colors Tab Screenshot&quot; title=&quot;iTerm2 Colors Tab&quot;&gt;&lt;/p&gt;
&lt;p&gt;In the bottom right corner, you can select a preset. I’m rocking with a slightly altered &lt;a href=&quot;https://draculatheme.com/iterm/&quot;&gt;Dracula&lt;/a&gt; theme I think… I’m not sure. But you can download my presets &lt;a href=&quot;https://github.com/hunterwatson/dotfiles/tree/master/terminal/color_presets&quot;&gt;here&lt;/a&gt;. Here’s a side by side comparison with &lt;code class=&quot;language-text&quot;&gt;meemoo&lt;/code&gt; on the left and &lt;code class=&quot;language-text&quot;&gt;yubah&lt;/code&gt; on the right:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/media/iterm2_theme_comparison.png&quot; alt=&quot;iTerm2 Color Preset Comparison Screenshot&quot; title=&quot;iTerm2 Color Preset Comparison&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;change-font&quot;&gt;&lt;a href=&quot;#change-font&quot; aria-label=&quot;change font permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Change Font&lt;/h3&gt;
&lt;p&gt;Navigate to the Text tab (&lt;code class=&quot;language-text&quot;&gt;iTerm2 -&amp;gt; Preferences -&amp;gt; Profiles -&amp;gt; Text&lt;/code&gt;). At the bottom of the tab, you’ll want to change the font that supports special symbols. You can download my preferred fonts &lt;a href=&quot;https://github.com/hunterwatson/dotfiles/tree/master/terminal/fonts&quot;&gt;here&lt;/a&gt;, or you can check out &lt;a href=&quot;https://github.com/ryanoasis/nerd-fonts#patched-fonts&quot;&gt;this&lt;/a&gt; selection.&lt;/p&gt;
&lt;h3 id=&quot;configure-other-iterm2-settings&quot;&gt;&lt;a href=&quot;#configure-other-iterm2-settings&quot; aria-label=&quot;configure other iterm2 settings permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Configure Other iTerm2 Settings&lt;/h3&gt;
&lt;p&gt;Spend some time looking around the other settings tabs and change things to your liking. I don’t remember what I changed in here, but it should mostly be preference. One thing I have enabled is &lt;code class=&quot;language-text&quot;&gt;Unlimited scrollback&lt;/code&gt; from the Terminal tab (iTerm2 -&gt; Preferences -&gt; Profiles -&gt; Terminal), which lets you scroll wayyyyyyy back to see your old stuff.&lt;/p&gt;
&lt;h2 id=&quot;2-set-up-zsh-and-other-stuff&quot;&gt;&lt;a href=&quot;#2-set-up-zsh-and-other-stuff&quot; aria-label=&quot;2 set up zsh and other stuff permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Set Up Zsh (and other stuff)&lt;/h2&gt;
&lt;p&gt;By default, your Mac uses &lt;code class=&quot;language-text&quot;&gt;Bash&lt;/code&gt;. Zsh (&lt;em&gt;sometimes called Z-Shell&lt;/em&gt;) is a fancy shmancy version of it. I’ll get into some features later. &lt;a href=&quot;https://ohmyz.sh/&quot;&gt;Oh my Zsh&lt;/a&gt; is a configuration framework for Zsh. I don’t really know what it does, but I appreciate it.&lt;/p&gt;
&lt;p&gt;Install Zsh&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install zsh zsh-completions&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Install Oh my Zsh&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;sh -c &amp;quot;$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;customize-your-zshrc&quot;&gt;&lt;a href=&quot;#customize-your-zshrc&quot; aria-label=&quot;customize your zshrc permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Customize your &lt;code class=&quot;language-text&quot;&gt;~/.zshrc&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;This file houses all the custom configurations we’re about to do. Remember that whenever you make a change you’ll need to run &lt;code class=&quot;language-text&quot;&gt;source ~/.zshrc&lt;/code&gt; or restart your terminal for the changes to take effect.&lt;/p&gt;
&lt;h4 id=&quot;install-powerlevel9k-theme&quot;&gt;&lt;a href=&quot;#install-powerlevel9k-theme&quot; aria-label=&quot;install powerlevel9k theme permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Install Powerlevel9k Theme&lt;/h4&gt;
&lt;p&gt;I like &lt;a href=&quot;https://github.com/bhilburn/powerlevel9k&quot;&gt;Powerlevel9k&lt;/a&gt; because it’s super customizable.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Add the theme to your &lt;code class=&quot;language-text&quot;&gt;~/.zshrc&lt;/code&gt; file&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;ZSH_THEME=&amp;quot;powerlevel9k/powerlevel9k&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Your prompt is gonna probably look absolutely wild, especially compared to the white, default terminal. Now is a good chance to &lt;a href=&quot;https://github.com/bhilburn/powerlevel9k/wiki/Show-Off-Your-Config&quot;&gt;take a look at other people’s prompts&lt;/a&gt; for inspiration. I think you can just copy-paste their config file into yours. &lt;a href=&quot;https://github.com/hunterwatson/dotfiles/blob/master/terminal/.zshrc&quot;&gt;Here&lt;/a&gt; is my personal configuration (what you saw in the screenshots). I think mine is pretty humble, but still makes me feel like I’m &lt;em&gt;hacking the mainframe&lt;/em&gt;.&lt;/p&gt;
&lt;h4 id=&quot;stylize-your-prompt&quot;&gt;&lt;a href=&quot;#stylize-your-prompt&quot; aria-label=&quot;stylize your prompt permalink&quot; class=&quot;anchor&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Stylize Your Prompt&lt;/h4&gt;
&lt;p&gt;There’s a ton of options, all of which are explained in &lt;a href=&quot;https://github.com/bhilburn/powerlevel9k/wiki/Stylizing-Your-Prompt&quot;&gt;the docs&lt;/a&gt;, but I’ll walk through the user config part of my &lt;code class=&quot;language-text&quot;&gt;~/.zshrc&lt;/code&gt;. I’m going to ignore the plugins and some other utility stuff and just focus on the aesthetics, since I plan on covering functionality and additional features in another post.&lt;/p&gt;
&lt;p&gt;The first line sets what &lt;a href=&quot;https://github.com/bhilburn/powerlevel9k/blob/master/README.md#available-prompt-segments&quot;&gt;prompt segments&lt;/a&gt; you want to see. I wanted a simple design so my values are &lt;code class=&quot;language-text&quot;&gt;dir&lt;/code&gt; (directory: show the directory you’re in) and &lt;code class=&quot;language-text&quot;&gt;vcs&lt;/code&gt; (version control system: show some helpful git stuff). The lines after that are setting the symbol for separators, of which I don’t have any. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir vcs)
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=&amp;#39; &amp;#39;
POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR=&amp;#39; &amp;#39;
POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS=&amp;#39;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The following line removes the prompt on the right hand side. I considered adding on to track the time, but it felt too cluttered to me.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;POWERLEVEL9K_DISABLE_RPROMPT=true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can set the number of subdirectories to go down before it starts shortening the prompt. In my workspace setup, my terminal usually only has half of the screen, and I don’t want a long directory wrapping around and taking up two lines, so after the 5th directory it will shave them off the front.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;POWERLEVEL9K_SHORTEN_DIR_LENGTH=5&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/media/iterm2_shorten.png&quot; alt=&quot;subdirectories screenshot&quot; title=&quot;Shorten Subdirectories&quot;&gt;&lt;/p&gt;
&lt;p&gt;My prompt shows the directory and vsc information on one line, and the input on another. You can add this new line functionality by inserting the following lines. I chose to not have a prompt prefix on the first line, but use the class &lt;code class=&quot;language-text&quot;&gt;$&lt;/code&gt; on the one where I actually type stuff.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=&amp;#39;&amp;#39;
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=&amp;#39;$ &amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;By default, Powerlevel9k has a bunch of icons in the prompt. I didn’t love it so I set them to a blank string.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;POWERLEVEL9K_ETC_ICON=&amp;#39;&amp;#39;
POWERLEVEL9K_FOLDER_ICON=&amp;#39;&amp;#39;
POWERLEVEL9K_HOME_ICON=&amp;#39;&amp;#39;
POWERLEVEL9K_HOME_SUB_ICON=&amp;#39;&amp;#39;
POWERLEVEL9K_VCS_BRANCH_ICON=&amp;#39;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The rest of the prompt config lines are for colours. There are foreground and background components for each section of the prompt (dir, vsc, etc.); however, some of the sections can have different colours depending on what directory you’re in, the status of your git repository, and a couple of other things. You can find all the supported colours by running this snippet in your terminal:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sh&quot;&gt;&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;for code ({000..255}) print -P -- &amp;quot;$code: %F{$code}This is how your text would look like%f&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;Voila, if you’ve followed those steps (and used a little bit of critical thinking to cover the gaps I missed) you should have a nifty, new terminal set up just the way you like it (at least aesthetically). In the near future I’m going to post a Part 2 where I’ll cover some cool functionality of your new prompt, my favourite plugins, and some other technical things.&lt;/p&gt;</content:encoded></item></channel></rss>