<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>Rob Conery</title><description>ME BLOOG</description><link>https://robconery.com/</link><image><url>https://robconery.com/favicon.png</url><title>Rob Conery</title><link>https://robconery.com/</link></image><generator>Ghost 5.88</generator><lastBuildDate>Mon, 08 Sep 2025 21:19:21 GMT</lastBuildDate><atom:link href="https://robconery.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Copilot, The Good Parts: Efficiency]]></title><description><![CDATA[There are so many opinions about Copilot and AI in general - many of them negative - and it's easy to see why. There are some good parts, however, and I want to explore them.]]></description><link>https://robconery.com/ai/copilot-the-good-parts-efficiency/</link><guid isPermaLink="false">684b35c5c2d3a16c365ae57d</guid><category><![CDATA[AI]]></category><category><![CDATA[Fun]]></category><category><![CDATA[Courses]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Thu, 12 Jun 2025 21:22:59 GMT</pubDate><media:content medium="image" url="https://images.unsplash.com/photo-1503437313881-503a91226402?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxjb2RlfGVufDB8fHx8MTc0OTc1OTQzMnww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1503437313881-503a91226402?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxjb2RlfGVufDB8fHx8MTc0OTc1OTQzMnww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Copilot, The Good Parts: Efficiency"><p>I have been working with Copilot non-stop since being laid off from Microsoft, and having a lot of fun doing it. In fact: <strong>I have a fun idea</strong> and I could use your help. I&apos;ll leave that until the end.</p><h2 id="the-problem">The Problem</h2><p>In my last post (<a href="https://a.bigmachine.io/?ref=robconery.com" rel="noreferrer">newsletter</a>) I talked about what I was working on at Microsoft right before I left, and why it was so exciting:</p><blockquote>I was giving workshops to&#xA0;<em>thousands</em>&#xA0;of internal folks (mostly engineers) on how best to increase efficiency with AI which, in my case, meant Copilot. I had workshops lined up for months, and was receiving multiple inquiries every day! It was absolute madness, but worth it as I was helping thousands of folks and also getting some great feedback.</blockquote><blockquote>The key was this:&#xA0;<em>focus on them and their work</em>. Just a dash of Copilot, here and there, goes a very, very long way and it really can bring joy to your day.</blockquote><p>I am well aware that people are <strong>experiencing ridiculous fatigue</strong> when it comes to Copilot. In fact, I asked this question at the end of the post:</p><blockquote class="kg-blockquote-alt"><strong>... what are your top two or three concerns when it comes to working with AI and Code?</strong></blockquote><p>I received an avalanche of replies, which I can summarize with:</p><ul>
<li>It will <strong>take jobs</strong> away and devalue our work. Entire teams will be replaced by a few devs with AI tools.</li>
<li>Programmers will <strong>forget how to program</strong>.</li>
<li>Code <strong>quality will decline</strong> or be entirely untrustworthy.</li>
<li>It takes <strong>too much time</strong> to vet the code.</li>
</ul>
<p>I agree with some of these sentiments, but I also think that Copilot is a tool, like any other, that we will need to learn how to use. Moreover, <strong>we will need to show new programmers how to use it properly</strong> so the concerns above are minimized.</p><p>Either way - these are valid concerns, but what if you sidestepped the code generation part and let Copilot do other things that help you through your day? With a little customization and an open mind, you can add so much to your day with what I like to call Copilot&apos;s &quot;Good Parts&quot;.</p><p>Let&apos;s take a look.</p><h2 id="massive-time-savers">Massive Time Savers</h2><p>Have you ever plodded through a codebase trying to figure out what&apos;s going on, or where a particular thing is happening? <em>Copilot can do that for you</em> without touching the code at all! It can also answer general coding questions quickly, write helpful shell scripts, and generate documentation for you based on Git commits.</p><p>None of these things actually generate code aside from the shell scripts, but those are utilities that aren&apos;t necessarily meant for production.</p><p>Here are a few others that I really like:</p><ul>
<li>Generate <strong>formatted Git commit messages</strong> which you customize with custom instructions.</li>
<li><strong>Fix CSS</strong> problems or, better yet, make something look less atrocious.</li>
<li><strong>Generate test data</strong> for a database using DDL or a JSON object as context.</li>
<li><strong>Create a database</strong> for you using nothing but a spec document.</li>
<li>Create a database <strong>change script</strong> using two DDL files.</li>
<li>Add <strong>open source documents</strong> for your project, including CoC, issue templates, LICENSE, SECURITY.md, and a CHANGELOG based on Git commits.</li>
</ul>
<p>This is just the beginning! You can do so much more by fine-tuning Copilot and telling it exactly what you want to see.</p><h2 id="customizing-and-templating">Customizing and Templating</h2><p>Many people don&apos;t quite understand what&apos;s possible with custom instructions. Yes, you can give it code styles or &quot;nudges&quot; as to how to do things, but you can also get very specific.</p><p>For instance, if you&apos;re a C# person, it&apos;s likely your company has a very specific way they want classes created. You can tell Copilot this (using <code>.github/copilot-instructions.md</code> in the root of your project):</p><pre><code class="language-markdown">Every class in the project should follow this convention:

```csharp
/// &lt;summary&gt;
/// Class &lt;c&gt;Thing&lt;/c&gt; represents X business concern.
/// &lt;/summary&gt;
public class Thing {

  //Sensible factory methods here. Use test logic to decide.
  
  public override ToString(){
    //use a sensible property selection here
  }

  public string ToJson(){
    //serialize this class
  }
}
```</code></pre><p>I worked for a senior dev once who would become quite agitated if we didn&apos;t override <code>ToString()</code> on our classes. Call it a quirk, I guess.</p><p>The point is: <strong>Copilot is very good at following templates</strong>, which is extremely useful when dealing with boilerplate code! </p><h2 id="go-ahead-explore">Go Ahead, Explore!</h2><p>This is probably my favorite &quot;Good Thing&quot; with Copilot: <strong>I get to play around and find out.</strong> I love exploring things, whether it&apos;s a new language or framework, or maybe an open source application I want to use. Unfortunately, this kind of thing takes time.</p><p>For instance: the good people at Tailwind Labs just created <a href="https://tailwindcss.com/plus/templates/compass?ref=robconery.com" rel="noreferrer">Compass</a>, which is a Next.js template for hosting an online course:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/06/screenshot_185.jpg" class="kg-image" alt="Copilot, The Good Parts: Efficiency" loading="lazy" width="1144" height="721" srcset="https://robconery.com/content/images/size/w600/2025/06/screenshot_185.jpg 600w, https://robconery.com/content/images/size/w1000/2025/06/screenshot_185.jpg 1000w, https://robconery.com/content/images/2025/06/screenshot_185.jpg 1144w" sizes="(min-width: 720px) 720px"></figure><p>I&apos;m a Tailwind UI customer and something like this could be extremely useful for me. The only problem is that 1) I have very little time these days and 2) I don&apos;t know Next.js <em>at all</em> (I really should change that).</p><p>Without Copilot, exploring this template would be a quick &quot;no-go&quot;. <em>With</em> Copilot, however... well see for yourself! In 45 minutes I was able to switch out the Compass video player to use Vimeo (where I host my stuff), and convert my course pages (written in Markdown with frontmatter for the course and lesson data) to the <code>mdx</code> and JS format the Next site needed. I also learned a bit about Next.js and React, which is always fun.</p><p>As I mentioned, I recorded all of it with some light editing to make it more watchable. I captured the time, too, so you would believe me:</p><figure class="kg-card kg-embed-card"><iframe src="https://player.vimeo.com/video/1092901006?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"></iframe></figure><h2 id="heres-my-idea">Here&apos;s My Idea</h2><p>There is so much hype and nonsense surrounding Copilot that I was thinking of putting together a set of videos, articles, and workshop outlines to help people get the most out of Copilot <em>in the real world</em>.</p><p>At first, I thought it would be fun to post some videos to my YouTube channel. Then I thought it might be good to create a new channel focused on Copilot alone. And then I thought &quot;hmmm - what if I went all in and created a site that contained everything&quot;, including courses (free and paid) and workshops that you could sign your team up to.</p><p>Anyway: <strong>here&apos;s where you can help</strong>. It&apos;s another question and, like last time, you can reply to this email (if you&apos;re reading this as a newsletter) or ping me on social (links below). <strong>Would you be interested in watching me build a new business venture focused on Copilot, using Copilot itself</strong>?</p><p>If so, what topics would interest you most and/or least?</p><p>As an entrepreneur, I use AI for quite a few things and it&apos;s extremely helpful. The biggest, of course, is prototyping an idea and getting it out there. I also use it to think about marketing ideas, branding, and newsletter ideas. <strong>I never</strong> let it create the actual content for me - just outlining and providing some structure.</p><p>Thanks for reading!<br><strong>Rob</strong></p>]]></content:encoded></item><item><title><![CDATA[I Would Love to Work With You]]></title><description><![CDATA[Like so many, I was laid off from Microsoft on May 13, 2025. Never good news, but life moves on and I'm still fired up to do fun things with the right group of people.]]></description><link>https://robconery.com/life/i-would-love-to-work-with-you/</link><guid isPermaLink="false">6827a857c2d3a16c365ae4b0</guid><category><![CDATA[Life]]></category><category><![CDATA[News]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Fri, 16 May 2025 21:47:01 GMT</pubDate><media:content medium="image" url="https://images.unsplash.com/photo-1653038417332-6db0ff9d4bfb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDYwfHxyZXN1bWV8ZW58MHx8fHwxNzQ3NDI5NTE2fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1653038417332-6db0ff9d4bfb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDYwfHxyZXN1bWV8ZW58MHx8fHwxNzQ3NDI5NTE2fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="I Would Love to Work With You"><p>I suppose if I have a single skill that I could say &quot;this is what I&apos;m good at&quot;, it would be <em>telling a story</em>. I don&apos;t know why I have this skill, I just do. I remember when I realized I had it, too: it was my first year in college as I stared down at an essay I wrote and saw a big red &quot;A&quot; circled on the front page. &quot;See me&quot; was written under it.</p><p>I did as instructed and walked slowly up to the professor after class. Back in those days, we turned our essays in on actual paper, and mine was rolled up in my right hand with a bit of sweat starting to dampen the pages.</p><blockquote>Yes, sir? You wanted to see me?<br><br>I do Rob. I have to ask you about this paper. Is this your work, entirely?<br><br>Yes, of course. My mom is an English teacher and would never forgive me if she thought -<br><br>That&apos;s OK, I believe you. It&apos;s just... this image you&apos;ve created here with this sentence... It&apos;s wonderful. I&apos;m still thinking about it.</blockquote><p>What my professor was talking about was a phrase that hit me as I as I was trying to explain my childhood predilection for playing with words, especially ones that sounded funny, like <em>moist</em> or <em>pamphlet</em>. To try and explain this, I said that I &quot;liked to pound round words into square sentences&quot;. The idea of a &quot;round&quot; word had to do with the way it sounded in my brain, and a &quot;square&quot; sentence was a clunky one, so to spice things up I would... well you get it. </p><p>At the time, I honestly didn&apos;t think it was that profound; it was a one-off idea I had and just rolled with it. My professor loved it, and told me that I have a way with telling a story that he enjoyed, and that I shouldn&apos;t stop writing.</p><p>That&apos;s what a good teacher can do for you: help you see the skills inside that you never thought you had.</p><h2 id="taking-the-time-makes-the-difference">Taking the Time Makes the Difference</h2><p>I need time to create a story, however. I&apos;m not exactly skilled at improvisation and, indeed, it&apos;s gotten me in to trouble more than a few times. I like to toss the ideas and concepts in my mind, breaking them apart as I said above. No idea is ever fully-formed, and is usually a collection of other ideas repackaged. I like to rip off the packaging and see what makes the idea tick.</p><p>That was my job at Microsoft for the last 6 years. It was also my job before that, when I worked on my own, creating books like <a href="https://sales.bigmachine.io/imposter-second?ref=robconery.com" rel="noreferrer"><em>The Imposter&apos;s Handbook</em></a> and <a href="https://sales.bigmachine.io/curious-moon?ref=robconery.com" rel="noreferrer"><em>A Curious Moon</em></a> and video productions like <em>Take Off With Elixir </em>and <a href="https://sales.bigmachine.io/sql-orbit?ref=robconery.com" rel="noreferrer"><em>SQL in Orbit</em></a><em>.</em></p><p>That&apos;s only the first part of telling a story, however. The other part is <em>you</em>, sitting where you are right now, reading the words I&apos;m putting together. Not the pluralized &quot;you&quot;, meaning everyone out there reading this. No, and hopefully this doesn&apos;t sound creepy, but I&apos;m thinking of the singular you and how these words are settling into your eyes (if you&apos;ve made it this far).</p><p>Thinking about the audience was what made working on <em>This Developer&apos;s Life</em> such a cursedly wonderful side project. I would explore, play, try something new, rerecord... <strong>because I knew you might be listening</strong>.</p><p>Take the idea of <em>fonts</em>, for example. Most people (you included) probably don&apos;t think too much about them. Maybe you know one or two, and almost assuredly have one or two you hate (<em>Arial</em>, <em>Comic Sans</em>, etc).</p><p>So how do I spin the notion of fonts into a story? Good question, and here&apos;s the answer:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://thisdeveloperslife.com/post/2-0-5-typo?ref=robconery.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">2.0.5 Typo</div><div class="kg-bookmark-description">Who cares about typefaces and why should you? Well, these guys do and you should start caring. Rob and Scott explore the world of reading online with one of the godfathers in the world of typeface and fonts.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://thisdeveloperslife.com/favicon.ico" alt="I Would Love to Work With You"><span class="kg-bookmark-author">This Developer&apos;s Life</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://media.zencastr.com/image-files/6532b7d6e7ebb15eea49bc9a/13f03261-ed6c-4a18-921c-b0fa8876a957.jpg" alt="I Would Love to Work With You"></div></a></figure><p>I&apos;d write more about that episode (and fonts too), but I have to get back to this post. It&apos;s starting to wander some.</p><h2 id="omit-needless-words">Omit Needless Words</h2><p>I&apos;m a fan of Stephen King, and this is going to sound weird, but not because of his books, though I like many of them. I love his ability to weave a narrative and keep people guessing. That&apos;s really his trick: <em>always keep people guessing</em>.</p><p>I&apos;ve read his book <em>On Writing</em> perhaps 7 times over now, and I always hear something different. That&apos;s a good writer right there: he&apos;s kept me guessing to the point where I need to read the book repeatedly to see what else I&apos;ve missed.</p><p>King echoes William Faulkner&apos;s famous line (though no one can be sure who really said it first) in <em>On Writing</em> that I just love:</p><blockquote>Kill your darlings, kill your darlings, even when it breaks your egocentric little scribbler&#x2019;s heart, kill your darlings.</blockquote><p>It&apos;s the literary version of laying off a large percentage of your workforce, I suppose. </p><p>Another bit of advice that King echoes is from Strunk and White&apos;s <em>The Elements of Style</em>:</p><blockquote>Omit needless words</blockquote><p>I suppose I could apply that to this post, but I would rather apply it to my resume, if I&apos;m honest. </p><p>If I trimmed my resume as much as possible, killed every darling in there, and omitted every needless word, I would be left with this:</p><blockquote class="kg-blockquote-alt">I tell stories people like</blockquote><p>I can do other things too, of course, but what I love to do is just this: <strong>think about you, the reader or viewer, and tell you a story about what I&apos;m working on</strong>.</p><p>If you can use this sort of thing, here&apos;s my resume. I would love to work with you, to tell the story of your company and why it does what it does. Maybe you founded it, or perhaps you lead a small project within. No matter what: there&apos;s a story there to be told and I would love to help you tell it. That, and I need a job.</p><div class="kg-card kg-file-card"><a class="kg-file-card-container" href="https://robconery.com/content/files/2025/05/Rob-Conery-Resume-2025-1.pdf" title="Download" download><div class="kg-file-card-contents"><div class="kg-file-card-title">Rob Conery Resume 2025</div><div class="kg-file-card-caption">My Resume</div><div class="kg-file-card-metadata"><div class="kg-file-card-filename">Rob Conery Resume 2025.pdf</div><div class="kg-file-card-filesize">117 KB</div></div></div><div class="kg-file-card-icon"><svg viewbox="0 0 24 24"><defs><style>.a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;}</style></defs><title>download-circle</title><polyline class="a" points="8.25 14.25 12 18 15.75 14.25"/><line class="a" x1="12" y1="6.75" x2="12" y2="18"/><circle class="a" cx="12" cy="12" r="11.25"/></svg></div></a></div><p>Change can be extremely hard, especially when it&apos;s the destructive kind. I&apos;ll be OK. In fact <strong>I&apos;ll be more than OK, I&apos;ll be working with you</strong>. I hope.</p><p><em>With love and appreciation</em>,<br><strong>Rob</strong></p>]]></content:encoded></item><item><title>&#128121;<![CDATA[ The Wrath of the Junior Developer]]></title><description><![CDATA[There are a lot of opinions about AI, whether it helps or hinders our coding process and our team in general. Many are concerned that junior devs will be the ones impacted the most.]]></description><link>https://robconery.com/career/the-wrath-of-the-junior-developer/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0909</guid><category><![CDATA[Career]]></category><category><![CDATA[Opinion]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Wed, 18 Dec 2024 21:36:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image.jpeg" alt="&#x1F479; The Wrath of the Junior Developer"><p><em>Full disclosure: I work at Microsoft but what you&apos;re about to read is 100% my personal opinion. Don&apos;t @ me with &quot;dude from Microsoft claims...&quot; please...</em></p><p>I&apos;ve been deep in a&#xA0;<strong>rewrite of the AI chapter</strong>&#xA0;in&#xA0;<a href="https://sales.bigmachine.io/roadmap/?ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&apos;s Roadmap</em></a>, and I&apos;m trying to discuss the role of AI in a senior programmer&apos;s life... and I noticed something interesting as the AI discussions heat up in our industry:&#xA0;<em>we both fear and want to protect junior developers</em>.</p><p>What a weird straw man argument!</p><p><strong>Note</strong>:&#xA0;<em>this article addresses the presence of AI and might not be suitable for some readers.</em></p><h2 id="the-catalyst">The Catalyst</h2><p>Microsoft and GitHub announced a free tier for Copilot a few weeks ago which has a few limits on it (2000 completion requests, 50 text sessions). The idea is that people get to try Copilot and see what they think.</p><p>This, of course, was met with &quot;challenging&quot;&#xA0;<a href="https://news.ycombinator.com/item?id=42453341&amp;ref=robconery.com" rel="noopener noreferrer">responses</a>&#xA0;from people. Read the entire HN article linked, if you like, but it&apos;s a very typical HN discussion (i.e. inflammatory and not very productive). But it did make me think about one thing in particular:&#xA0;<strong><em>the simultaneous fear and guarding of junior developers</em>.</strong></p><p>To summarize the responses I&apos;ve seen:&#xA0;<em><strong>AI is making people dumber</strong>&#xA0;and my job harder because I have to deal with their dumb code! Who&apos;s going to help these dumb junior programmers!</em></p><p>I&apos;ve read over Reddit threads, BlueSky discussions, and had plenty of animated discussions with friends and colleagues, and every one of them is worried about the Big Bad/Sweet Innocent Junior Developer.</p><h2 id="we-love-them-we-fear-them">We Love Them, We Fear Them</h2><p>I used to use Visual Studio back in the mid-2000s when I was writing C# on a daily basis. One of the &quot;must-have&quot; tools at the time was&#xA0;<a href="https://www.jetbrains.com/resharper/?ref=robconery.com" rel="noopener noreferrer">Resharper</a>, which would help with navigation, refactoring, code exploration and a whole lot more.</p><p>For some reason it never clicked with me, but I&#xA0;<em>do</em>&#xA0;remember when it came out that the .NET community was up in arms over the need for a &quot;crutch&quot;.&#xA0;<strong>Senior developers would forbid</strong>&#xA0;the junior developers from using it because it would slow their &quot;growth&quot; and&#xA0;<strong>they needed to know the underlying code</strong>&#xA0;and why it was good or bad. Others argued that the tool itself can help with this process.</p><p>What a weird paradox.</p><p>On one hand: yes, taking time in code reviews to help a new programmer improve their code takes time and yes, I can see how that would be&#xA0;<strong>insanely frustrating if it was obvious that the code came from an automated process</strong>.</p><p>On the other hand:&#xA0;<em>what a great way to learn</em>. I mean... if the code works, it works! Let&apos;s see how to improve it now, and why that&apos;s important. You get to that point either way, but I might suggest you get their&#xA0;<em>faster</em>&#xA0;with the automated version.</p><h2 id="reducing-the-googlestackoverflowcopy-paste-cycle">Reducing the Google - StackOverflow - Copy-Paste Cycle</h2><p>I wrote about this in a previous note, but&#xA0;<strong>the best code you can expect from an LLM is the most&#xA0;<em>predictable</em>&#xA0;code</strong>. Sometimes this is good enough, sometimes it isn&apos;t. That part is up to you and your code review.</p><p>That code review should consider:</p><ul><li><strong>Provenance</strong>. Is there a copyright issue?</li><li><strong>Readability</strong>. How well can people understand what&apos;s going on? (You can, by the way, usually ask your LLM to make the answer more readable or follow a given style).</li><li><strong>Performance</strong>. How well will this scale? (Big O stuff).</li></ul><p>Here&apos;s the reality:&#xA0;<strong>your junior developer is going to Google whatever problem they are facing</strong>, probably end up on StackOverflow, and then copy/pasting the answer.</p><p>As a senior dev, you know this already. The only thing that&apos;s worse than these two cases is when they try on their own to figure it out and continually get it wrong, wasting everyone&apos;s time. This might be the best choice in terms of personal growth, but you&apos;ve got an app to ship!</p><p>Let&apos;s try an experiment.</p><h2 id="sqlite-transactions-in-nodejs">SQLite Transactions in Node.js</h2><p>Let&apos;s ask a simple question:</p><p>How can I do a transaction in SQLite using Node.js?</p><p>The&#xA0;<strong>OG method to answer this question is to RTFM</strong>. Start your timer...</p><p>(<em>10 minutes later</em>) I give up. I know the answer is likely out there, but I checked the docs for SQLite3 and also read up on&#xA0;<a href="https://github.com/TryGhost/node-sqlite3/wiki/API?ref=robconery.com#allsql--param---callback" rel="noopener noreferrer">the driver</a>. There is one mention of the word &quot;transaction&quot; so I know it&apos;s possible, but I have the rest of this email to write so... giving up.</p><h3 id="google-it">Google It</h3><p>I worked for 5 years as a programmer before Google came along and I don&apos;t know how I did it. It took just one search using the prompt above, and&#xA0;<a href="https://stackoverflow.com/questions/19272167/node-js-sqlite-async-transactions/19359165?ref=robconery.com" rel="noopener noreferrer">here&apos;s the answer</a>&#xA0;which was, of course, StackOverflow:</p><figure class="kg-card kg-image-card"><img src="https://embed.filekitcdn.com/e/86EgwmdwvthrNYSoA85pUc/qziAnMvaPsEu2Vf6xYY9Rx/email" class="kg-image" alt="&#x1F479; The Wrath of the Junior Developer" loading="lazy"></figure><p></p><p>This wasn&apos;t the first&#xA0;<em>hit</em>, however, which was 8 years old and I had to read through it before I realized it was out of date and didn&apos;t directly answer the question. With the code above, running&#xA0;<strong>serialize</strong>&#xA0;is the key... but if there are multiple connections to SQLite and a write comes in to the same record, apparently it causes problems.</p><p>More reading is in order, I suppose. Either way: total time spent was about 5 minutes.</p><h3 id="copilot">Copilot</h3><p>I asked Copilot the same question using the 4o model: </p><p>That took 20 seconds to type and get a response back. The code looks&#xA0;<em>basically</em>&#xA0;the same, and this is what I tell people all the time with respect to Copilot:</p><p>It&apos;s simply shortening the Google/StackOverflow/Copy-Past cycle.</p><p>That is truly&#xA0;<em>my</em>&#xA0;opinion. I know others feel differently.</p><h2 id="reviewing-the-code">Reviewing The Code</h2><p>Let&apos;s put our senior hats back on, shall we? When asking about the code used, we learn that the first example above was lifted from StackOverflow and then modified for clarity by our programmer.</p><p>I think we&apos;re all used to the drill by now:&#xA0;</p><p>Rewrite this routine and feel free to use the SO code as inspiration. Clean up the variable names to be in our style. I don&apos;t like seeing hand-written SQL, but this works for now. I might ask you to change or use a library in the future.&#xA0;<br>&#x200B;Good for you for recognizing parameterization so we don&apos;t have an injection attack. I don&apos;t like the way the connection is handled here, however, so make sure it persists so we don&apos;t screw up the transaction.<br>&#x200B;<br>Also, make it more generalized please...</p><p>For the second example, we would have the same concerns RE copyright and SQL injection. We ask for the same changes as above but, this time, our junior person is back within 10 minutes:</p><figure class="kg-card kg-image-card"><img src="https://embed.filekitcdn.com/e/86EgwmdwvthrNYSoA85pUc/hqNoYkhnkYbi9w36MPfnYf/email" class="kg-image" alt="&#x1F479; The Wrath of the Junior Developer" loading="lazy"></figure><p>Our junior wrote good notes during our review and pasted them directly into Copilot as a follow up prompt...</p><h2 id="is-this-a-good-thing">Is This A &quot;Good&quot; Thing?</h2><p>My&#xA0;<strong>goal with this post is not to come off as a &quot;pitch man&quot;</strong>&#xA0;for Copilot,&#xA0;<em>I promise</em>. I like discussions like this one because my opinions are still forming, and hearing other people&apos;s ideas are key.&#xA0;</p><p>Anyway: let&apos;s get right to it - if you&apos;re facing a shipping deadline, faster code is better. If you&apos;re worried about the growth of your junior developer, that&apos;s a concern here as well.</p><p>They didn&apos;t write this code, they&#xA0;<em>prompted</em>&#xA0;it. It&apos;s like people who call themselves brewers using computerized, all-in-one machines to handle temperature and timing! All you did was push a button!</p><p>For me, personally,<strong>&#xA0;I&apos;ll always take the win on this</strong>, which is&#xA0;<em>shipping</em>. In addition, and I think this is critical, is to step through the code with the junior person and:</p><ul><li>Ask if they&#xA0;<strong>understand it and how they tested it</strong>. Automated tests are OK, but they need to tell a story and the junior dev better be able to discuss that story.</li><li>Discuss&#xA0;<strong>copyright exposure</strong>.</li></ul><p>That last one is a BIG discussion, and how you and your company choose to address it is up to you. I need to sidestep going into detail on this, which I hope you understand, but I did want to recognize the need for the discussion.</p><p><strong>So:&#xA0;<em>what do you think</em><em>?&#xA0;</em></strong>Does shipping something on schedule outweigh the other concerns over AI? I read every reply - so hit me up!</p>]]></content:encoded></item><item><title><![CDATA[Following Your Imagination]]></title><description><![CDATA[
I learned to play ice hockey when I was 11 and, as a kid from Southern California, it wasn't easy. I learned how to skate and how to play the game at the same time, all while going through a massive growth spurt. My sister once called me a "baby giraffe on a frozen lake". Nice.]]></description><link>https://robconery.com/career/following-your-imagination/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb090a</guid><category><![CDATA[Career]]></category><category><![CDATA[Life]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Wed, 23 Oct 2024 20:37:00 GMT</pubDate><media:content medium="image" url="https://images.unsplash.com/photo-1534447677768-be436bb09401?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGRyZWFtfGVufDB8fHx8MTc0MjMyNzQ3MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1534447677768-be436bb09401?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGRyZWFtfGVufDB8fHx8MTc0MjMyNzQ3MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Following Your Imagination"><p>One of the hardest things to learn when it comes to skating is the &quot;hockey turn&quot;, which looks something like this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://robconery.com/content/images/2025/03/image-1.png" class="kg-image" alt="Following Your Imagination" loading="lazy" width="1346" height="732" srcset="https://robconery.com/content/images/size/w600/2025/03/image-1.png 600w, https://robconery.com/content/images/size/w1000/2025/03/image-1.png 1000w, https://robconery.com/content/images/2025/03/image-1.png 1346w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Photo Credit: Tim Bates/OJHL Images</em></i></figcaption></figure><p>This is hard. Very hard. If you master it, you can change direction and lose very little speed. When you&apos;re learning to skate, however, it&apos;s almost impossible to get your body to do this.</p><p>That&apos;s when my coach told me something that has stayed with me:</p><blockquote>Turn your head, your skates will follow</blockquote><p>He was right. This also works with surfing, skiing, and snowboarding among other sports. Just turn your head and your body will do the rest for you.</p><p>But how? How did my body know which way to shift my weight and balance if I had never done a thing like this before? It didn&apos;t make any sense, but oddly, it worked. I just needed to 1) look where I wanted to go and 2) trust my body to do the rest for me.</p><p>What kind of weird voodoo is this!</p><h2 id="turn-your-imagination-and-your-confidence-will-follow">Turn your imagination and your confidence will follow&#xA0;</h2><p>I was thinking about hockey turns when listening to&#xA0;<em>A Confident Mind</em>&#xA0;this last week (<a href="https://www.audible.com/pd/The-Confident-Mind-Audiobook/0063014866?ref=robconery.com" rel="noopener noreferrer">link</a>). The author, Nate Zinsser, believes that confidence in sports, business, or your personal life is a trained skill - not something you&apos;re born with.</p><p>What you&apos;re training is the same thing I was training when learning how to turn on skates: 1) imagine yourself doing the thing you need to do and 2) trust your subconscious to do the rest.</p><p>Honestly? This feels a bit too new-age for me. Affirmations and&#xA0;<em>The Secret</em>&#xA0;(where you just believe in yourself and divine purpose) were just a bit too precious, even for the 1980s and 90s, when they were popular. Isn&apos;t this just a repackaging of that whole idea?</p><p>Maybe. But as the author of our next book states:</p><p>You don&apos;t have to believe me. Try it for 30 days on your own and see if it works for you. I think you&apos;ll be surprised.</p><h2 id="you-and-your-machine">You and Your Machine</h2><p>The book I&apos;m referring to with the quote above has the unfortunate title&#xA0;<a href="https://www.audible.com/pd/Psycho-Cybernetics-Audiobook/B06XR2PJWC?ref=robconery.com" rel="noopener noreferrer"><em>Psycho Cybernetics</em></a><em>.&#xA0;</em>It was written in the 1960s and I think the author, Dr. Maxwell Maltz, was trying to be edgy.&#xA0;</p><p>The title refers to a &quot;helmsman&quot;, which is what &quot;cybernetic&quot; loosely refers to in Greek. The idea is that&#xA0;<strong>we have a machine inside of us, a &quot;goal-oriented mechanism&quot;</strong>, as Maltz calls it, that we can steer in a direction of our choosing. He doesn&apos;t suggest we can control it - only that we can give it a goal and let it do it&apos;s thing.</p><p>Like turning your head on a pair of mental hockey skates.</p><p>The premise of both of these books is that, through visualization, we can convince our subconscious (our inner machine) that we&apos;re not only capable of executing at a high level, but that we&apos;ve&#xA0;<em>actually done it already</em>, so the next time should be easy.</p><p>Both books have you visualize yourself in extreme detail, doing the thing you&apos;re not sure you can do. If you&apos;re speaking to an audience, you see the clicker in your hand and feel its weight. You listen to yourself effortlessly speaking at a casual pace as the slides click perfectly behind you. You pick out one or two faces in the crowd and watch them laugh at your asides, or look wide-eyed in astonishment at your big reveal.</p><p>In the end, you watch people clap for you and come up to shake your hand, telling you it was the highlight of their week.</p><p>This is where we run into an old friend:&#xA0;<em>Imposter Syndrome</em>. Do I really think I know enough to impact someone&apos;s entire week? Isn&apos;t it extremely arrogant of me to think I deserve claps and handshakes?</p><p>Damn I hate this feeling.</p><h2 id="sabotaging-yourself"><strong>Sabotaging Yourself</strong></h2><p>You know the drill: you work hard, achieve something, and instead of owning it, you think,&#xA0;<em>I just got lucky</em>&#xA0;or&#xA0;<em>they&#x2019;re going to find out I don&#x2019;t know what I&#x2019;m doing.</em>&#xA0;That&#x2019;s my default setting most of the time, especially when I&#x2019;m taking on something new. In other words:&#xA0;<em>I don&apos;t filter my self-perceptions very well.</em></p><p>This is self-sabotage, plain and simple, and serves nothing but your own ego.</p><p>I wrote about getting over Imposter Syndrome as a programmer in both&#xA0;<a href="https://sales.bigmachine.io/imposter-second/?ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&apos;s Handbook</em></a>&#xA0;and&#xA0;<a href="https://sales.bigmachine.io/roadmap/?ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&apos;s Roadmap</em></a>, and the idea is straightforward:</p><ul><li>Recognize these negative thoughts are&#xA0;<strong>toxic</strong>&#xA0;to you and your team.</li><li><strong>Refocus and reframe</strong>. Spend time being grateful you can support yourself doing something you love.</li><li><strong>Get curious</strong>. What don&apos;t you know? Write it down, dig in, and learn something new.</li><li><strong>Small steps</strong>, big changes. Take small actions to build your confidence, and ask lots of questions.</li><li>Write it all down in a&#xA0;<strong>journal</strong>. This helps internalize your process.</li><li><strong>Share</strong>&#xA0;what you&apos;ve learned. Nothing feels better than helping someone else.</li></ul><p>The most important part of this process is recognizing your toxicity, and taking action to refocus your thoughts. It might be hard to think that Imposter Syndrome is toxic, but it truly is.&#xA0;<strong>You drain the energy from others</strong>, who feel the need to make you feel better about yourself, and you drain the energy from the team. Most of all: you drain yourself of purpose, looking externally for proof that you belong where you are.</p><p>As Zinsser suggests, however: confidence isn&#x2019;t about&#xA0;<em>proving</em>&#xA0;anything. It&#x2019;s about reminding yourself of what&#x2019;s actually true&#x2014;your preparation, your effort, the work you&#x2019;ve already put in. The truth of your current situation is that you were hired to do the work, so people do believe in you. You just won&apos;t accept this.</p><p>Imposter syndrome isn&#x2019;t lying about the facts; it&#x2019;s just amplifying all the wrong ones. This works both ways, it turns out.</p><p><strong>The Dunning-Kruger Spiral</strong></p><p>I&apos;m sure you&apos;ve heard of the Dunning-Kruger effect, which is when&#xA0;<strong>people think they&#x2019;re better at something than they truly are</strong>&#xA0;because they<strong>&#xA0;don&#x2019;t know enough to realize how bad they are</strong>. Ever see someone talk like an expert after watching one YouTube video? That&#x2019;s Dunning-Kruger.</p><p>What&#x2019;s wild, though, is that the more you learn, the more you realize how much you&#xA0;<em>don&#x2019;t</em>&#xA0;know. And that can tank your confidence if you let it.&#xA0;</p><p>Zinsser reframes this:&#xA0;<strong>confidence isn&#x2019;t about knowing everything. It&#x2019;s about trusting that you can figure things out</strong>, that you can grow into the gaps. The whole &quot;I&#x2019;m aware of my shortcomings&quot; thing will feel less like a reason to doubt yourself and more like proof that you&apos;re on the right track.</p><h2 id="the-connection"><strong>The Connection</strong></h2><p>Here&#x2019;s where it all clicked for me:&#xA0;<strong>both imposter syndrome and the Dunning-Kruger effect mess with your perception of reality</strong>. Imposter syndrome keeps you stuck in the past, replaying every little mistake. Dunning-Kruger blinds you to what you don&#x2019;t know, which means you can&#x2019;t grow.&#xA0;</p><p>Confidence, though&#x2014;the kind Zinsser talks about&#x2014;is all about the present. It&#x2019;s about choosing to believe that what you&#x2019;ve done matters and what you&#xA0;<em>can</em>&#xA0;do will get you through the next challenge.</p><p>But what about your failures? We will fail in our endeavors - do we just ignore these?</p><p>Absolutely not! Zinsser talks about this with the &quot;next play&quot; mindset. When you screw up, which you will, what&apos;s your next move? You can&apos;t dwell on what you did wrong, thinking about all the ways in which you suck. What you&#xA0;<em>can</em>&#xA0;do is to learn from that failure, and make sure you don&apos;t do it again with your next plan.&#xA0;</p><p>Don&apos;t dwell on the past, don&apos;t believe too strongly in your bright and amazing future. Learn for the here and now and let the future unfold as it will.</p><h2 id="what-do-we-do-with-this"><strong>What Do We Do With This?</strong></h2><p>Maybe imposter syndrome isn&#x2019;t something we&#x2019;re supposed to&#xA0;<em>beat</em>. It&#x2019;s a signal&#x2014;a way of saying, &quot;Hey, here&#x2019;s where you can grow.&quot;&#xA0;</p><p>If you feel affronted by someone&apos;s condescension or you don&apos;t prepare for a conference talk because &quot;I&apos;m good at improv and I know this subject cold&quot; - maybe check yourself.</p><p>People with Dunning-Kruger don&apos;t know what they don&apos;t know, which I think is a great default.&#xA0;</p><p><strong>Confidence isn&#x2019;t about feeling 100% sure all the time. It&#x2019;s about choosing to act even when you&#x2019;re not sure.</strong></p><p>Confidence is the stuff that turns thoughts into action.</p><p>I love it.&#xA0;</p><p>You can&apos;t wait for some magical moment when you &quot;feel&quot; confident. You simply decide to keep going, keep learning, and keep showing up.&#xA0;</p><p>Keep. Showing. Up.</p>]]></content:encoded></item><item><title><![CDATA[It wasn't what you said, but how you said it]]></title><description><![CDATA[
I make videos for a living and I swear: each one is an adventure. You would think I would have a system down by now but, as it turns out, each video is a unique thing that demands it's own type of story telling.]]></description><link>https://robconery.com/writing/it-wasnt-what-you-said-but-how-you-said-it/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0911</guid><category><![CDATA[Writing]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Fri, 18 Oct 2024 20:58:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image-13.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image-13.jpeg" alt="It wasn&apos;t what you said, but how you said it"><p>H<a href="https://www.youtube.com/watch?v=QA9jlp-o5vQ&amp;ref=robconery.com" rel="noopener noreferrer">ere&apos;s the latest video</a>&#xA0;I did for the VS Code team. It&apos;s on Remote Development with VS Code, which is wild stuff! Many call it the &quot;killer feature&quot;, but that brings up an interesting problem:&#xA0;<em>how do you make a video about an &apos;interesting feature&apos;?</em></p><p>We discussed this internally (I work at Microsoft supporting VS Code). My initial thought was that I would show how you could set up and configure Ghost (the blogging platform) on a remote machine. I did a few takes on that idea but it turned out to be a video about Ghost, not VS Code Remote Development.</p><p>That wouldn&apos;t do. We needed something a bit more direct and engaging.</p><h2 id="the-tension-script">The Tension Script</h2><p>This video was for YouTube, and&#xA0;<strong>there is a particular structure that many YouTubers favor</strong>, and it goes something like this:</p><ul><li>Mercilessly grab your audience&apos;s attention.</li><li>Add bait for them to stick around until the end.</li><li>Build out your story in three acts, building and releasing tension with each act.</li><li>Wind up with a Big Reveal at the end.</li><li>Call to action to one of your other videos.</li></ul><p>If I used this script for the VS Code Remote video, I might do something like this:</p><p><em>Opening scene with a montage of Rob yelling at Vim, not being able to quit or maybe wandering around completely lost in a terminal session on the server.&#xA0;</em></p><p><em>Rob starts a remote connection with VS Code, muttering &quot;thank god...&quot; and then winking at the camera: &quot;stick around to the end and I&apos;ll share 5 tips that will save you hours when getting started. Don&apos;t forget to like a subscribe&quot;. &#x1F92E;</em></p><p>Yeah, I know. But if you want eyeballs and watch hours, you gotta play the game. Which is&#xA0;<strong>more about you as the presenter</strong>, less about your audience. Ew.</p><h2 id="tutorials-vs-stories">Tutorials vs. Stories</h2><p>With my original VS Code Remote script, I was trying to create a story that viewers could relate to. This can work, but it&apos;s really&#xA0;<strong>tough to tell a story and create a tutorial at the same time</strong>.&#xA0;</p><p>&#x200B;<a href="https://sales.bigmachine.io/curious-moon?ref=robconery.com" rel="noopener noreferrer">I took this to a whole new level with&#xA0;<em>A Curious Moon</em></a>. I really enjoyed writing it, but I kept wondering if I was doing it more for me, or for my reader. This is where things get interesting.</p><p>Tutorials have a &quot;standard&quot; structure:</p><ul><li>Introduce the topic and yourself.</li><li>Tell people what they&apos;re going to learn.</li><li>Present a problem your audience might face.</li><li>Present the solution, which is the thing your tutorial is about.</li><li>Summarize the problem and solution for retention.</li><li>Offer additional resources.</li><li>Say goodbye and thank you.</li></ul><p>I think this is a logical structure and it makes sense&#xA0;<em>to the presenter</em>. The problem is that&#xA0;<strong>tutorials that are structured like this are&#xA0;<em>boring</em></strong>&#xA0;and bored viewers don&apos;t retain things.</p><p>Stories, on the other hand, can be told with a variety of techniques, including Campbell&apos;s &quot;The Hero&apos;s Journey&quot;, which is every action or adventure movie you&apos;ve ever seen.</p><p>Star Wars, Lord of the Rings, The Barbie Movie...</p><ul><li>Call to adventure</li><li>&quot;No going back&quot; point</li><li>Meet the wizard in the forest, the teacher in the cave, etc.</li><li>Come close to death.</li><li>Defeat the dragon, just barely.</li><li>Return the hero.</li></ul><p>Working this into a tutorial video would be tricky, but probably fun:</p><p><em>Opening scene: Rob is eating a sandwich on his lunch break and gets an email from his boss, Burke Holland. Burke tells him the group needs a new blog, ASAP, and it has to be ready in two hours.</em></p><p><em>Rob drops his sandwich and uses his last Azure credit to create a Linux VM. He doesn&apos;t know what platform to go with, but just then he sees a tweet from John O&apos;Nolan, the cofounder of Ghost. He asks John for some help, and they get on a Zoom call together. They use VS Code&apos;s Remote feature to run the install scripts, update settings, and tweak the theme. Things are going well until...</em></p><p><em>John has to leave so Rob continues the installation but soon notices that things are starting to slow down to unusable levels. He realizes at the last second that he picked the wrong SKU! Everything he&apos;s done has been for nothing!&#xA0;</em></p><p><em>&quot;Use the elastic scaler, Rob...&quot; It&apos;s the familiar voice of Scott Hanselman, who has somehow appeared from nowhere. He hands Rob a magical slider bar which scales the server up a SKU or two, and then restarts it just in time...</em></p><p>I admit, it would be fun to make this video but, again, I think it would be&#xA0;<strong>more about me and less about you.</strong></p><h2 id="in-medias-res">In Medias Res</h2><p>That&apos;s a Latin term that means &quot;in the middle of things&quot; or, if you&apos;re a writer, &quot;starting in the middle&quot;. It&apos;s effective because it adds a layer of mystery to your story.</p><p>You&apos;re probably familiar with this plot device with title&apos;s like&#xA0;<em>The Bourne Ultimatum</em>,&#xA0;<em>Forrest Gump, The Fugitive</em>, or any detective story. You come in at the peak of tension and have to figure out how you got there, discovering more about the main character and what&apos;s happening as time goes on.</p><p>Here is an<strong>&#xA0;outstanding video I found on YouTube</strong>, where&#xA0;<a href="https://www.youtube.com/watch?v=Gksxu-yeWcU&amp;ref=robconery.com" rel="noopener noreferrer">the author restructures&#xA0;<em>Passengers</em></a>(Chris Pratt, Jennifer Lawrence) to start in the middle. It&apos;s told from Jennifer&apos;s point of view instead of Chris&apos;s, and turns into a tension-filled horror story! I think it&apos;s fantasic.</p><p>It would be fun to do this in a tutorial video. The opening scene could be Slack going off with downtime alarms:</p><p><em>Rob stumbles into his home office at 3am and everything is down. The server appears to be up but no services are running. Is it a disk space issue? DNS? Did we get hacked?</em></p><p><em>Rob opens up VS Code to see if he can get the site running locally using port forwarding. Nope, nothing. He starts the debugger to see where the error is and notices that his cache server isn&apos;t responding...</em></p><p>This would be entertaining, but would you actually learn something? Interesting dilemma.</p><h2 id="top-down">Top Down</h2><p>This is a standard way to structure a course or tutorial and is what I use most often. You start in a general way, then drill down into each topic.</p><p><em>In today&apos;s video you&apos;re going to learn about Remote Development with VS Code. This is incredibly useful if you can&apos;t work on your local machine, or if you prefer a more visual way to work on your server. You can run external code as if it were local, and you can even debug! Let&apos;s see how.</em></p><p>Tell people what they&apos;re going to get, then give it to them.&#xA0;</p><p>This is&#xA0;<strong>how universities might structure a Computer Science degree program</strong>. For instance:</p><ul><li><strong>First year</strong>&#xA0;would mostly be math and general education classes with Introduction to Computer Science and Programming.</li><li>In the&#xA0;<strong>second year</strong>&#xA0;you might get into data structures and algorithms, more math, computation and logic.&#xA0;</li><li><strong>Third year</strong>&#xA0;you might get into complexity theory, software engineering, networking and possibly an ethics class</li><li>The&#xA0;<strong>final year</strong>&#xA0;is the project year with advanced elective classes including Cybersecurity, Cryptography, AI/ML, Robotics, Compiler Design, Language Design, and advanced theory classes.</li></ul><p>I have a degree in Geology. At first, the classes I took seemed random and disconnected but as the years passed by, everything started to mesh and I got excited.</p><p>I remember taking a Structural Geology class (mountains, faults, big stuff) and Advanced Mineralogy and having one of those &quot;epiphany moments&quot;, where you could see how the chemistry and molecular structure of a dominant mineral could change the way a mountain was shaped. Melting limestone peaks and rounded granite domes look the way they do because of how they&apos;re made.</p><p>It&apos;s&#xA0;<em>that moment</em>, that connecting of the dots, that remains with you forever and fires you up!</p><h2 id="missing-cs-degree-outline-ideas">Missing CS Degree Outline Ideas</h2><p>I mentioned in the last email that I was considering creating a course called&#xA0;<em>The Missing CS Degree</em>&#xA0;and&#xA0;<strong>an overwhelming amount of you thought it was a darn fine idea</strong>.</p><p>But how do I structure such a thing? I have a few thoughts, but I decided to go with a typical curriculum structure (top down) but I&apos;m not all that sure how it translates to an online course.</p><p>I really could use your help. So far, I have these modules:</p><ul><li><strong>The Big Picture: History and Evolution of Computer Science</strong>. Ancient computers, Babbage, Lovelace, Turing, Hopper, Shannon, etc.</li><li><strong>Fundamentals of Logic and Problem Solving</strong>. Boolean and binary, Information Theory, Set Theory and SQL.</li><li><strong>Algorithms and Computational Thinking</strong>. Intro to data structures and algorithms. Recursion, etc.</li><li><strong>Theoretical Computer Science and Cryptography</strong>. State machines, Turing Completeness, Symmetric/Asymmetric encryption, P vs. NP with Prime Factorization and other NP Hard problems.</li><li><strong>Data Structures and Secure Data Storage</strong>. Trees, Graphs, Hashes, Tries, Trigrams and Bigrams. Hash Functions, graph traversal.</li><li><strong>Programming Paradigms</strong>. Asynchronous, functional, object-oriented, imperative, concurrency vs. parallel.</li><li><strong>Networking and Web Systems</strong>. TCP/IP, HTTP and DNS basics. Practical networking tools.</li><li><strong>Ethics in Programming</strong>. Discuss real world case studies. Quantum computing, AI and ML.</li></ul><p>I&apos;ll admit:&#xA0;<em>this seems ambitious&#xA0;</em>so please don&apos;t hold me to it! I want to start general and move into more specific things as we go along. There is a ton of overlap, especially with data structures and algorithms.</p><p><strong>What do you think? Add more? Maybe take a few things out?&#xA0;</strong>I&apos;m iffy on the Networking module but it&apos;s so useful to know. I had an&#xA0;<em>Operating Systems and Compilers</em>&#xA0;module in there but how often do we need to know that?</p><p>Thanks for wandering through story time with me! Grateful for each of you...</p><p><strong>Rob</strong></p>]]></content:encoded></item><item><title><![CDATA[Embracing Mediocrity]]></title><description><![CDATA[AI returns mediocre results by definition - so what do you do to make things better? And why is this "by definition"?]]></description><link>https://robconery.com/life/embracing-mediocrity/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb090b</guid><category><![CDATA[Life]]></category><category><![CDATA[Opinion]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Fri, 06 Sep 2024 20:39:00 GMT</pubDate><media:content medium="image" url="https://images.unsplash.com/photo-1584568694031-ec6898d6a92e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHZlbHZlZXRhfGVufDB8fHx8MTc0MzgzNjQwOHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1584568694031-ec6898d6a92e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHZlbHZlZXRhfGVufDB8fHx8MTc0MzgzNjQwOHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Embracing Mediocrity"><p>I was talking with a coworker the other day about one of the new AI offerings and how well it simulated human interaction. I was asking it to summarize some notes I had taken on a book, and it did a fantastic job - but I then mentioned something I truly believe:</p><blockquote>AI is mediocre, at best</blockquote><p>It has to be, by definition. It&apos;s just repeating back to us the most common and probable things that we have said to&#xA0;<em>it.&#xA0;</em>Or, as Scott Hanselman&#xA0;<a href="https://hachyderm.io/@shanselman/110065829678443226?ref=robconery.com" rel="noopener noreferrer">describes it</a>: &quot;AI is a sock puppet on your own hand&quot;:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-1.jpeg" class="kg-image" alt="Embracing Mediocrity" loading="lazy" width="854" height="453" srcset="https://robconery.com/content/images/size/w600/2025/03/image-1.jpeg 600w, https://robconery.com/content/images/2025/03/image-1.jpeg 854w" sizes="(min-width: 720px) 720px"></figure><h2 id="understanding-probability-and-information-theory">Understanding Probability and Information Theory</h2><p>&#x200B;<a href="https://www.scientificamerican.com/article/claude-e-shannon-founder/?ref=robconery.com" rel="noopener noreferrer">Claude Shannon</a>&#xA0;is one of the towering figures of Computer Science and mathematics that no one has heard of. He&#xA0;<strong>created the digital circuit&#xA0;</strong>by synthesizing George Boole&apos;s work with true and false (Boolean Algebra) with the base two numbering system (aka &quot;binary&quot;). That was for his Master&apos;s Thesis back in the 1930s.</p><p>Later in his life, he single-handedly&#xA0;<strong>started the Information Age</strong>&#xA0;by publishing his theorems on how you could &quot;quantify&quot; information. His breakthroughs led to compression algorithms, the notion of &quot;entropy&quot; in cryptography, and error correction.</p><p>He also laid the foundation for predictive analysis, which is key when it comes to error correction.</p><h2 id="surprise">Surprise!</h2><p>Back in the 1930s and 40s, people wanted to know just&#xA0;<strong>how much pure information they could send</strong>&#xA0;from point to point. This used to be done by telegraph, person-to-person, or actual letters in the mail. Wars, however, were becoming larger and more complicated, so the need to send more information in a shorter period of time was crucial.</p><p>Shannon realized that people communicate in extremely &quot;redundant&quot; ways, filling sentences with &quot;noise&quot; that don&apos;t communicate anything aside from non-useful pleasantries.&#xA0;</p><p>To him, the true measure of a sentence was its &quot;surprise&quot; - the unexpected thing that, quite literally, would surprise you, and that you would learn from.</p><p>Consider a&#xA0;<strong>text from my mom</strong>, checking in on me:</p><p>Hi Rob, hope you&apos;re having a nice day. I wanted to know if you could send me the link to the article you and I talked about the other day. Call me if you can. Love, mom</p><p><em>Note: yes, she really does sign off that way.</em></p><p><strong>This sentence is full of redundancy</strong>&#xA0;that, to an Information Theorist (or a network admin trying to reduce load on his pipes), could be made much more efficient, thus increasing it&apos;s &quot;surprise&quot;:</p><blockquote>ChatGPT &#x1F517;&#x1F926;&#x1F3FC;&#x200D;&#x2640;&#xFE0F;</blockquote><p>In my mom&apos;s first message, each sentence has a degree of predictability and form. In other words:&#xA0;<em>it&apos;s not all that surprising</em>. The only thing I learn is that she forgot the link for the ChatGPT article we talked about.</p><p>The second message makes this bleedingly clear.</p><p>Shannon realized two things from this:&#xA0;<strong><em>surprise</em>&#xA0;is useful for&#xA0;<em>compressing</em>&#xA0;information, but&#xA0;<em>redundancy</em>&#xA0;is good for&#xA0;<em>predicting</em></strong>&#xA0;what will be said.</p><h2 id="the-surprise-of-chatgpt-responses">The Surprise of ChatGPT Responses</h2><p>This brings us to the mediocrity part, and I do realize that it was a bit of a wander, but hey, it&apos;s Saturday and it&apos;s fun to learn CS stuff, isn&apos;t it?</p><p>When an LLM does its thing and chunks massive amounts of data, it&apos;s following a path laid down by Claude Shannon almost a century ago. Each bit of information is related to a previous bit based on the structure of the language being used - which is English, in most cases. Sometimes it&apos;s code, I suppose, but either way there&#xA0;<em>has&#xA0;</em>to be some underlying structure or nothing will work.</p><p>If I type the letter &quot;q&quot;, what letter will follow? In almost every case, it will be a &quot;u&quot; because that&apos;s the way English works. If I type the phrase &quot;The Little&quot; into Google&apos;s search box, the predictive bits in the background will do their thing for me:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-3.png" class="kg-image" alt="Embracing Mediocrity" loading="lazy" width="1502" height="1086" srcset="https://robconery.com/content/images/size/w600/2025/03/image-3.png 600w, https://robconery.com/content/images/size/w1000/2025/03/image-3.png 1000w, https://robconery.com/content/images/2025/03/image-3.png 1502w" sizes="(min-width: 720px) 720px"></figure><p>Google is able to do this by leveraging a more advanced form of a graph data structure called a &quot;Digital Tree&quot;, also called a &quot;Trie&quot;:<br></p><figure class="kg-card kg-image-card"><img src="https://embed.filekitcdn.com/e/86EgwmdwvthrNYSoA85pUc/oTfWHJXqfedzXyfziGKgnw/email" class="kg-image" alt="Embracing Mediocrity" loading="lazy" width="886" height="1011"></figure><p>This is, of course, is an extremely simplified doodle by yours truly - but the idea is the same:&#xA0;<strong>each letter you type decreases the possible result set</strong>, which increases the likelihood of an answer.&#xA0;</p><p>If I typed in &quot;HA&quot; and used this trie to predict what was next, my choices would be &quot;half&quot;, &quot;hang&quot;, &quot;hand&quot;, &quot;handball&quot;, and &quot;handbook&quot;. If I added an &quot;n&quot;, we get closer to the thing you&apos;re looking for, assuming we&apos;re working with word structures.</p><p>But here&apos;s the real question:&#xA0;<em>how was this trie created?</em>&#xA0;Randomly from a dictionary, or from an encyclopedia? Maybe it&apos;s a collection of every tweet ever written, which would be horrifying!</p><p>The transformers and algorithmic voodoo that LLMs use to predict an answer for a question work in much the same way:&#xA0;<em>using probability, based on the underlying model, to hand you the most likely answer</em>.&#xA0;</p><p>The most likely thing tends to be the most common thing, which can be good or bad depending what you need.</p><p>If you have a &quot;frozen pizza&quot; type of problem, then a Walmart answer will probably work just fine for you. If, however, you&apos;re trying to figure out your latte art with your new Rocket Espresso Cinquantotto Mignon, a Starbucks answer might be problematic.</p><p>This is what I think about, every time I use AI to help with a coding problem:&#xA0;<em><strong>this suggested answer is the most mediocre solution possible</strong>, given</em>&#xA0;<em>the source</em>.</p><h2 id="the-missing-cs-degree">The Missing CS Degree</h2><p>As you can tell, I love spending my weekends learning new things and writing about them if I find them interesting. That&apos;s how&#xA0;<a href="https://sales.bigmachine.io/imposter-second?ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&apos;s Handbook</em></a>&#xA0;(and the more recent&#xA0;<a href="https://sales.bigmachine.io/roadmap/?ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&apos;s Roadmap</em></a><em>)&#xA0;</em>was born!</p><p>Which got me thinking...</p><p>I wrote the first book over 8 years ago, and while I think it&apos;s still very relevant... I think there&apos;s a lot more I could do with the subject. Which led me to an idea...</p><p>Do you think a course with a title like &quot;<strong>The Missing CS Degree</strong>&quot; would be worthwhile? I&apos;ve been thinking about this since&#xA0;<a href="https://a.bigmachine.io/posts/what-is-your-time-and-knowledge-worth?ref=robconery.com" rel="noopener noreferrer">my last post</a>&#xA0;a few weeks ago - and no I wouldn&apos;t charge a ton of money for it! But I was thinking 6-8 hours of in-depth Computer Science and how it applies to what we do today.</p><p>If this is interesting to you, let me know! I&apos;m sketching out a few ideas for an outline.</p><p>Happy Saturday, thanks for reading!</p><p><strong>Rob</strong></p>]]></content:encoded></item><item><title><![CDATA[Using Obsidian as a Programming Journal]]></title><description><![CDATA[A journal is critical for your career - but it's more than just throwing words on a page. How do you organize things, and what process do you use? Let's find out...]]></description><link>https://robconery.com/career/using-obsidian-as-a-programming-journal/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb090c</guid><category><![CDATA[Career]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Tue, 20 Aug 2024 20:42:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image-2.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image-2.jpeg" alt="Using Obsidian as a Programming Journal"><p>In my last note I mentioned that I put my precious Bullet Journal on the shelf (which really does make me sad) and&#xA0;<strong>switched to Obsidian as my full time journal</strong>. I wrote about this process in&#xA0;<a href="https://sales.bigmachine.io/roadmap/?ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&apos;s Roadmap</em></a>&#xA0;as well.</p><p>I did this for these reasons:</p><ul><li>I like to&#xA0;<strong>review what I&apos;ve done</strong>&#xA0;for a given month, and often need to find a specific reference. That&apos;s difficult with a paper-based book.</li><li>I like saving&#xA0;<strong>code snippets</strong>.</li><li>I like&#xA0;<strong>using tags</strong>&#xA0;so I can roll up my notes and entries based on who or what.</li><li><strong>Searching</strong>&#xA0;is a massive time saver!</li><li>I love&#xA0;<strong>adding photos and screenshots</strong>. This is especially useful with Obsidian&apos;s canvas feature.</li></ul><p>I tried it for a month to see if it would make a difference and yes, without a doubt, it has changed everything for me.&#xA0;</p><h2 id="as-requested-a-video">As Requested: A Video</h2><p>There is so much to explain as to the how and why, so I made a video for y&apos;all which&#xA0;<a href="https://www.youtube.com/watch?v=k66W_wOQKVc&amp;ref=robconery.com" rel="noopener noreferrer">you can watch right here</a>.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/k66W_wOQKVc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Using Obsidian as a Bullet Journal"></iframe></figure><p>Hope this is helpful! Bullet Journaling is a wonderful process that&#xA0;<strong>keeps you focused on what matters</strong>&#xA0;and allows you to forget what doesn&apos;t. Something that can help all of us.</p><p>Talk to you soon!</p><p><strong>Rob</strong></p>]]></content:encoded></item><item><title><![CDATA[The Happiness and Terror of Shipping]]></title><description><![CDATA[<p>You would think that after&#xA0;<em>years</em>&#xA0;of development, the act of shipping something would be nothing but joy and relief. In the moment, however, &quot;pushing send&quot; is terrifying and feels like running naked into traffic.</p><p>That&apos;s what I&apos;m feeling right now because</p>]]></description><link>https://robconery.com/books/the-happiness-and-terror-of-shipping/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb090e</guid><category><![CDATA[Books]]></category><category><![CDATA[Shipping]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Mon, 20 May 2024 20:51:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image-10.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image-10.jpeg" alt="The Happiness and Terror of Shipping"><p>You would think that after&#xA0;<em>years</em>&#xA0;of development, the act of shipping something would be nothing but joy and relief. In the moment, however, &quot;pushing send&quot; is terrifying and feels like running naked into traffic.</p><p>That&apos;s what I&apos;m feeling right now because today is the day! After two years of planning, research, writing, and editing -&#xA0;<strong>it&#x2019;s ready to go</strong>:&#xA0;<a href="https://sales.bigmachine.io/roadmap/?coupon=UEWHDGJABB&amp;ref=robconery.com" rel="noopener noreferrer"><em>The Imposter&#x2019;s Roadmap</em></a><em>,</em>&#xA0;essential practices, tools, and skills for self-taught programmers. If you click that link, I&apos;ve thrown in a&#xA0;<strong>20% discount</strong>&#xA0;as a thank you for reading my emails.</p><p>The book is all about polishing your professional game, and includes:</p><ul><li>How to&#xA0;<strong>use GitHub like a pro</strong>&#xA0;(as opposed to a simple push with a PR).</li><li>Different&#xA0;<strong>styles of testing</strong>&#xA0;and when to use them, including TDD, BDD, System, Integration, and Exploratory.</li><li>How to create a&#xA0;<strong>developer&#x2019;s journal</strong>&#xA0;because keeping receipts is critical.</li><li>How to&#xA0;<strong>work with other people</strong>&#xA0;when you&#x2019;re not good at social interactions.</li><li>How to use GitHub to&#xA0;<strong>manage big projects</strong>, including discussions, setting up a build, running code reviews, and how to do a PR without making people cranky.</li><li>Using containers, from simple&#xA0;<strong>docker run</strong>&#xA0;to Kubernetes.</li><li><strong>Monitoring, logging</strong>, and disaster recovery.</li><li><strong>Architectural</strong>&#xA0;approaches for OO people.</li></ul><p>I tried to think of&#xA0;<em>everything</em>&#xA0;that I would want to know if I was moving up in my career, hoping to land in a lead position within the next year or so. You can learn the technical things, that&#x2019;s for sure, but there&#x2019;s a lot more to this game than understanding how to use Git.</p><p>To that end, I discuss soft skills throughout the book, and what it means to gain responsibility and influence without losing your soul. We also discuss how to spot a sociopath (there are so many of them) and what you can do to avoid people problems.</p><p>Want to see something else? I&apos;m happy to add it! Just let me know (hit reply) or fill out an issue on GitHub (link in book).</p><h2 id="why-i-wrote-this">Why I wrote this</h2><p>Back in 2004 I bought Mike Gunderloy&#x2019;s classic,&#xA0;<em>Coder to Developer</em>. I remember reading it in 7 hours as I flew to Hawaii, and it is, to this day, the fastest flight I&#x2019;ve ever been on.</p><p>I&#xA0;<em>devoured</em>&#xA0;this book - I wanted to know what &#x201C;the real pros&#x201D; did so I could have a reasonable conversation with them and not look and feel like an imposter. Fast-forward to 2024, and things have changed, drastically.</p><p>As a lead, you need to understand so many different systems and how they all work together. It&#x2019;s easy to feel left behind, which was me 8 years ago as docker started taking over and this thing called Kubernetes was what the &#x201C;pro&#x201D; developers were using.</p><p>I wrote this book for me. Instead of cobbling together some notes, I decided to go deeper and document everything with the goal of sharing with others.</p><h2 id="its-a-living-thing">It&apos;s a living thing</h2><p>The book is&#xA0;<a href="https://sales.bigmachine.io/roadmap/?coupon=UEWHDGJABB&amp;ref=robconery.com" rel="noopener noreferrer">up for presale</a>&#xA0;but I would say it&apos;s about 95% &quot;ready&quot;. I might add or expand some chapters based on feedback, but no matter what, you&apos;ll have access to every version from now until forever.</p><p><strong>If you&apos;re an&#xA0;</strong><a href="https://bigmachine.io/subscribe?ref=robconery.com" rel="noopener noreferrer"><strong>annual subscriber</strong></a><strong>, you can download the book straight away</strong>. It&apos;s right in your dashboard under &quot;Subscription Downloads&quot; (along with the other books I&apos;ve made).</p><p>If you would rather wait until the book is final, that should be in about a month and I&apos;ll send out another note at that time.</p><p>Hope you enjoy the book!</p><p><strong>Rob</strong></p>]]></content:encoded></item><item><title><![CDATA[Constraints and Logic in Your Database]]></title><description><![CDATA[Logic in your database... is that what constraints are? If you're a programmer, yeah, it's logic. If you're a data person, it's heaven.]]></description><link>https://robconery.com/postgres/constraints-and-logic-in-your-database/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0912</guid><category><![CDATA[Postgres]]></category><category><![CDATA[Fun]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Mon, 13 May 2024 21:01:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image-14.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image-14.jpeg" alt="Constraints and Logic in Your Database"><p>Most people aren&apos;t aware of the power of constraints in a database. They&apos;re there to enforce data rules, and you&apos;re probably familiar with a few of them, including:</p><ul><li>The&#xA0;<strong>null</strong>&#xA0;constraint, which won&apos;t allow null values.</li><li>The&#xA0;<strong>unique</strong>&#xA0;constraint, which ensures a record is always unique.</li><li>The&#xA0;<strong>primary key</strong>&#xA0;constraint, which I don&apos;t need to explain.</li></ul><p>Assuming you&apos;ve used these before, let me ask you a question:&#xA0;<strong>is this business logic?</strong>&#xA0;I think it&apos;s fair to say that&#xA0;<em>some</em>&#xA0;logic is being used here in the form of a very basic conditional statement:&#xA0;<em>if null then no</em>. Some people hate this idea.</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-7.png" class="kg-image" alt="Constraints and Logic in Your Database" loading="lazy" width="898" height="214" srcset="https://robconery.com/content/images/size/w600/2025/03/image-7.png 600w, https://robconery.com/content/images/2025/03/image-7.png 898w" sizes="(min-width: 720px) 720px"></figure><p>What about foreign key constraints?&#xA0;<a href="https://r.je/4-reasons-to-avoid-foreign-key-constraints-database-logic?ref=robconery.com" rel="noopener noreferrer">Articles like this one</a>&#xA0;claim you shouldn&apos;t, claiming that &quot;rules change, deployment becomes harder, unit testing, and application reuse&quot;.&#xA0;</p><p>I clearly have an opinion on this one, which is simple and direct: if your database can&#xA0;<strong>protect your data, do it.</strong>&#xA0;That&apos;s what constraints are there for, and protecting your data is far more important than reusing your application later on.</p><p>Let&apos;s test this notion.</p><h2 id="a-real-world-scenario-the-program-schedule">A Real World Scenario: The Program Schedule</h2><p>Back in 2021, I was tasked with creating a scheduler for Microsoft&apos;s LearnTV. It had to work like a guide on a regular television, which you can visualize as this:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-15.jpeg" class="kg-image" alt="Constraints and Logic in Your Database" loading="lazy" width="1770" height="1076" srcset="https://robconery.com/content/images/size/w600/2025/03/image-15.jpeg 600w, https://robconery.com/content/images/size/w1000/2025/03/image-15.jpeg 1000w, https://robconery.com/content/images/size/w1600/2025/03/image-15.jpeg 1600w, https://robconery.com/content/images/2025/03/image-15.jpeg 1770w" sizes="(min-width: 720px) 720px"></figure><p>Here are the requirements I had to meet:</p><ul><li>The start and end time needed to be at the top or bottom of the hour (like 14:00 or 14:30).</li><li>The duration had to be in 30 minute blocks, up to 2 hours (30, 60, 90, or 120).</li><li>There can be no overlap between programs.</li></ul><p>How would you implement this in a domain model? The start and end seem simple enough, as does the duration calculation. Checking for overlap, however, gets a bit tricky.</p><p>Or you could write up a few constraints. Here, I&apos;m using Postgres:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-16.jpeg" class="kg-image" alt="Constraints and Logic in Your Database" loading="lazy" width="926" height="567" srcset="https://robconery.com/content/images/size/w600/2025/03/image-16.jpeg 600w, https://robconery.com/content/images/2025/03/image-16.jpeg 926w" sizes="(min-width: 720px) 720px"></figure><p>If you&apos;re not used to SQL, this is going to be jarring. I suppose the same goes for learning any programming language or platform - it takes a little time, then you have a whole new toolset at the ready.</p><p>With 13 lines of code, we have defined our table and knocked out every single requirement above, including one more, which is to ensure that the start happens before the end.</p><p>Every program has a start and an end, so it makes sense to have a range as the data type (which is what&#xA0;<strong>tstzrange</strong>&#xA0;is - timestamp with a timezone range). You get at the range values using&#xA0;<strong>lower</strong>and&#xA0;<strong>upper</strong>, which define the boundaries of the range.</p><p>I can define a constraint using the&#xA0;<strong>check</strong>&#xA0;keyword, and then pass in a boolean expression that can be any valid SQL expression.</p><p>The&#xA0;<strong>duration</strong>&#xA0;is a computed column using generate, which I&apos;m then popping a constraint onto so that we can check the 30 minute block thing. We would need&#xA0;<strong>duration</strong>&#xA0;anyway in our code, so having it here, calculated by Postgres, makes good sense.</p><p>I had never used an exclusion constraint before I did this project and, if I&apos;m honest, that syntax is a bit weird and is something you just have to memorize. That one line is what keeps things from overlapping, using the&#xA0;<strong>&amp;&amp;</strong>&#xA0;operator.</p><h2 id="is-this-a-better-solution">Is This a Better Solution?</h2><p>If you don&apos;t know SQL, I don&apos;t blame you if you look at this and wonder if I&apos;ve lost my mind.&#xA0;<strong>That doesn&apos;t make it wrong</strong>. There are 13 lines of code here and it would take 30 minutes to Google and figure out what it does, and the reward for learning it is tremendous in my opinion.</p><p>Having data rules as close to the data makes sense. You can get around rules defined in code easily by writing a SQL query when you&apos;re in a hurry (like trying to fix a bug or running some report).&#xA0;</p><p>Can you unit test this? Of course. I know that many programmers will utterly refuse to test their code if it requires a database, and I understand that. It can slow things down, and also cause failure for ... reasons.</p><p>Rails freed me from this mindset, and I don&apos;t mind involving a test database. But that&apos;s me. It works for what I do, and it feels good to let go and do what feels right.</p><p>Will this logic change? Maybe. Perhaps we&apos;ll allow programs to be 15 minutes long in the future. This means we need to change code somewhere, either in our project, or in our database in the form of&#xA0;<strong>drop constraint&#xA0;</strong>on the&#xA0;<strong>slot</strong>, making the change, then&#xA0;<strong>alter table add constraint</strong>&#xA0;with the update.&#xA0;</p><p>Of course, you would want to check both.</p><p>Here&apos;s the thing, however:&#xA0;<em>when you rewrite that application, you won&apos;t need to rewrite this logic</em>. In my experience, rewrites happen far more than database changes, at least for me.&#xA0;</p><h2 id="ita-all-about-the-guarantee">It&apos;a All About The Guarantee</h2><p>In the end, what matters most to me is when my boss pings me and asks &quot;<strong>are you sure about these numbers</strong>?&quot; Reports are going to be based on these numbers (who viewed what, for how long, etc.) and whatever data is in the&#xA0;<strong>programs</strong>&#xA0;table needs to be as correct as possible.</p><p>As you think about your reply to this question, you might wonder whether your tests captured every case. You also might wonder if some other bit of code might have altered your data without you knowing it (observers, triggers, hooks, weird ORM relationships).</p><p>For me,&#xA0;<strong>having constraints like this are&#xA0;<em>guarantees</em></strong>. Data cannot exist in the table without complying, full stop. When you&apos;re asked about numbers being right, you should feel comfortable replying &quot;yes, they are&quot;.</p><p>It&apos;s all about the data, just be sure you&apos;re right.</p><h2 id="learning-more">Learning More</h2><p>I made a video about this exact thing just over a year ago, and you can&#xA0;<a href="https://www.youtube.com/watch?v=pfL-9ntZqnI&amp;ref=robconery.com" rel="noopener noreferrer">watch it up on YouTube</a>.</p><p>I also created&#xA0;<a href="https://bigmachine.io/courses/sql-orbit?ref=robconery.com" rel="noopener noreferrer">a full course on Postgres</a>&#xA0;and working with data, which I just put on sale for $20. This is a fun one, as we work with real data from the Cassini mission, and its exploration of Enceladus.</p><p>Happy querying!</p><p>Rob</p>]]></content:encoded></item><item><title><![CDATA[✈️ What's Your Exit Plan?]]></title><description><![CDATA[Retirement is one thing, being where you want to be and doing what you want to do when your current job is finished in another thing entirely. What’s your exit strategy?]]></description><link>https://robconery.com/career/what-is-your-exit-plan/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb090f</guid><category><![CDATA[Career]]></category><category><![CDATA[Life]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Tue, 19 Mar 2024 20:52:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image-11.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image-11.jpeg" alt="&#x2708;&#xFE0F; What&apos;s Your Exit Plan?"><p>It doesn&#x2019;t matter if you work for yourself, at a startup, or in a massive enterprise environment:&#xA0;<em>knowing what you&#x2019;re going to do when it&#x2019;s over is incredibly important to your career</em>. I work at Microsoft currently and before I started there in 2018 I pondered my &#x201C;end game&#x201D; &#x2013; where do I want to be when it&#x2019;s over and what do I hope to gain?</p><p>Let&#x2019;s dig in to this.</p><h2 id="big-techbig-enterprise">BIG TECH/BIG ENTERPRISE</h2><p>For a lot of people in a big tech company, the goal is to&#xA0;<strong>accumulate enough stock</strong>&#xA0;so you can live comfortably on top of your retirement savings plan. If the company is private then you take a bit of a risk here as the only way your stock is worth anything is if you can sell it.</p><p>Working for a publicly-traded FAANG(M) (Facebook, Apple, Adobe, Netflix, Google and Microsoft) is a sound plan. If you work at a company like Google or Microsoft for decades you will accumulate a giant chunk of stock that will stay relatively stable. Many of my friends have&#xA0;<strong>portfolios in the millions</strong>&#xA0;but that, of course, depends a lot on the performance of the company stock in the market.</p><p>How do you exit this kind of job? For many people it means retirement &#x2013; often at an age much younger than &#x201C;retirement age&#x201D; used to be.</p><p>Let&#x2019;s say you&#x2019;re this person and at some point in the future you&#x2019;ve been at Google for 25 years. You&#x2019;ve received promotions and a yearly stock grant, and you&#x2019;ve managed your investments well, retiring with X million dollars and a retirement plan worth Z.</p><p>In this scenario, what are X and Z? Moreover, what do you plan to do in your mid 50s? It might seem like a simple answer and who knows, maybe it is! Traveling is fun, but so is building something useful to the world and having a sense of meaning. You&#x2019;ve likely thought these things through &#x2013; but it might be worth discussing them with people who are facing retirement themselves, or who have just been through it.</p><p>Both of my brothers are at this point in their careers. My oldest brother is a retired college professor who is trying to figure out what he&#x2019;s going to do now that he doesn&#x2019;t have to create lesson plans. I asked him directly, and he didn&#x2019;t have an answer and instead shrugged in an &#x201C;<strong>I&#x2019;m sure I&#x2019;ll find something</strong>&#x201D; kind of way, but it&#x2019;s not hard to see that he feels a sense of loss.</p><p>My other brother drives a bulldozer and hauls dirt. He keeps saying he&#x2019;s going to stop and&#xA0;<strong>&#x201C;this is my last year, for sure&#x201C;&#x2026;</strong>&#xA0;but he hasn&#x2019;t. He enjoys what he does and keeps taking jobs. Working for yourself has that effect!</p><h2 id="solo-contractinghired-gun">SOLO CONTRACTING/HIRED GUN</h2><p>I&#x2019;ve worked on my own for many, many years prior to working at Microsoft and&#xA0;<strong>I like the freedom of it &#x2013; but I dislike the stress</strong>, especially when a contract is over and you don&#x2019;t have another one lined up.</p><p>After a few years things tend to smooth out and, hopefully, you&#x2019;re making more money than you need and you can save but let&#x2019;s face it: you&#x2019;ll be hard-pressed to make as much as a big tech company can offer in the form of stock + salary, unless you&#x2019;re very, very good. And maybe you are!</p><p>Either way:&#xA0;<strong>is this something you plan to do until you can&#x2019;t do it any more, or just don&#x2019;t want to</strong>? Work is harder to come by as you get older in this industry &#x2013; it&#x2019;s simply a painful truth. I used to get calls from recruiters constantly; this year I&#x2019;ve had 2.</p><p>If you&#x2019;re very good and very niche, the contract world can be extremely lucrative, but someday you&#x2019;ll complete your last contract and send your last invoice. What does that day look like to you, and what&#x2019;s next? THE STARTUP GRIND</p><p>I have created 3 companies so far. The first was a consulting company I founded with a friend in 1998. We did very well for a few years and went out of business in 2002 due to the whole dotcom implosion thing.</p><p>The second one, Tekpub.com, was&#xA0;<a href="https://www.pluralsight.com/newsroom/press-releases/pluralsight-acquires-tekpub--third-acquisition-in-3-months-?ref=bigmachine.io" rel="noopener noreferrer">sold to Pluralsight</a>&#xA0;in 2013. I&#x2019;m still running&#xA0;<a href="https://bigmachine.io/?ref=robconery.com" rel="noopener noreferrer">the third one</a>&#xA0;in my spare time &#x2013; which is where you&#x2019;re reading this post.</p><p>This is, perhaps, the hardest thing to consider when starting a company of your own: how will I leave this? More importantly:&#xA0;<strong>how do I want to leave this</strong>?</p><p>I know that I will either leave or dissolve my company at some point and I&#x2019;ve made the decision it will be when I&#x2019;m no longer here.&#xA0;<strong>I don&#x2019;t plan to retire</strong>! I want to keep writing books, articles and making videos until I absolutely can&#x2019;t do it anymore which means I&#x2019;m probably in the ground.</p><p>With Tekpub, my cofounder James Avery and I had this conversation in the very first week. We didn&#x2019;t think Tekpub would ever go public, nor did we want it to. We didn&#x2019;t want to deal with venture capital nor running a massive company. We felt that doing so would&#xA0;<strong>dilute the quality of our content</strong>&#xA0;and I still feel this way!</p><p>We knew that acquisition was a very likely outcome so we laid out some numbers we would entertain, how we would get to that point and also when. It basically worked out the way we thought it would but I&#x2019;ll be honest:&#xA0;<strong>selling my business was traumatic</strong>.</p><p>James and I built Tekpub from nothing and were doing very well for the most part. When I sold it I immediately missed it and wanted to start it all over again, which I kind of have with Big Machine.</p><p>For me acquisition was a nice windfall with short-term excitement, but I love what I do and I stopped being able to do it every day. I found out the hard way that money doesn&#x2019;t buy happiness and&#xA0;<strong>my exit plan sucked</strong>.</p><h2 id="so-where-you-goin-then">SO, WHERE YOU GOIN THEN?</h2><p>We&#x2019;re so lucky to be in this industry, with so many opportunities in front of us. One person can build a business from nothing and&#xA0;<a href="https://en.wikipedia.org/wiki/Mojang_Studios?ref=bigmachine.io" rel="noopener noreferrer">sell it to Microsoft for billions</a>&#xA0;of dollars. How insane is that?</p><p>You can also build a business like my friend&#xA0;<a href="https://www.llblgen.com/?ref=bigmachine.io" rel="noopener noreferrer">Frans Bouma</a>, who sells developer tools that enable him to take fun pictures in video games. Another friend,&#xA0;<a href="https://west-wind.com/?ref=bigmachine.io" rel="noopener noreferrer">Rick Strahl</a>, also sells developer tools that enable him to chase the wind between Hawaii and Oregon. These people are just fine without company stock, an IPO or acquisition and, instead,&#xA0;<strong>enjoy the work they do every day</strong>.</p><p>Other friends enjoy the security of a job at a FAANG(M) and know they&#x2019;ll be taken care of until the day they retire with their fat nest egg. They interact with coworkers every day, leave work behind them (for the most part) when they go home and don&#x2019;t stress out about their next paycheck.</p><p>The important thing is to&#xA0;<strong>know what you want to be doing and where you want to be when your current gig is done</strong>.</p>]]></content:encoded></item><item><title>&#129399;&#127997;<![CDATA[ Self Sabotage: The Good Parts]]></title><description><![CDATA[Personal growth books claim self-sabotage holds us back. Business hustle books frame it as a necessary thing. Which is it?]]></description><link>https://robconery.com/life/self-sabotage-the-good-parts/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0908</guid><category><![CDATA[Life]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Fri, 08 Mar 2024 21:31:00 GMT</pubDate><content:encoded><![CDATA[<p>I&apos;ve been listening to books about business and personal growth over the last month and I noticed something interesting when it came to the idea of self-sabotage:&#xA0;<strong>the entrepreneur/hustle culture thrives on it</strong>&#xA0;while the more &quot;emotionally intelligent&quot; people regard it as a&#xA0;<strong>blocker to personal growth</strong>.</p><p>Well then.</p><h2 id="climbing-a-mountain">Climbing a Mountain</h2><p>Let&apos;s start with the personal growth stuff, shall we? It&apos;s a bit more positive. I read a summary of the audiobook&#xA0;<em>The Mountain Is You</em>&#xA0;and I was intrigued:</p><p>Coexisting but conflicting needs create self-sabotaging behaviors. This is why we resist efforts to change, often until they feel completely futile. But by extracting crucial insight from our most damaging habits, building emotional intelligence by better understanding our brains and bodies, releasing past experiences at a cellular level, and learning to act as our highest potential future selves, we can step out of our own way and into our potential.</p><p>The idea of self-sabotage is straightforward: you subconsciously do things that keep you from doing things you&#xA0;<em>consciously</em>&#xA0;want to do, for instance:</p><ul><li>Make a lot of money or get a raise.</li><li>Start a business.</li><li>Go on a date with someone new after a divorce or breakup.</li></ul><p>I have suffered from this, in every case above. When success comes, I start to twiddle and optimize things, which invariably leads to bad things, like spending time writing code instead of content, or &quot;pivoting&quot; my side business when I don&apos;t need to, further causing me to not create content.</p><p>On the dating front, I find myself saying things and instantly regretting it. The first date I went on after my divorce was with a wonderful person that I would happily have kept seeing. Within 30 minutes I found myself talking about deeply personal things and ultimately blurted out &quot;you&apos;re the first person I&apos;ve been on a date with in almost 30 years&quot;.</p><p>Damn. It&apos;s hard to write about this.</p><p>The main signs of self-sabotage are:</p><ul><li><strong>Perfectionism</strong>. You never feel like something is finished, so you keep at it and don&apos;t try new things, because the first thing needs your attention. Or you say too much because you feel you haven&apos;t said enough to get your point across.</li><li><strong>Uprooting</strong>. Redoing, rebuilding, reshaping - focusing on the future and &quot;next time, I&apos;ll do it better&quot;.</li><li><strong>Pride</strong>&#xA0;(or stubbornness). You won&apos;t leave a bad situation, believing you can fix it.&#xA0;</li></ul><p>Each of these keeps you from focusing on the real problems of your life, apparently. I like this idea and the book resonated with me. In fact, it did more than that: it forced me to look directly at the root causes of why I do the things I do, and why I don&apos;t see &quot;results&quot; with the things I enjoy doing.</p><p>So... did it work? Well, let&apos;s see what the hustle culture says.</p><h2 id="broke-and-up-against-a-wall">Broke and Up Against a Wall</h2><p>I love listening to hustle books, and I know they get a bad rap from a lot of people, but I think that&apos;s an overreaction. Yes, there are the &quot;you gotta grind if you want it&quot; folks out there - I don&apos;t listen to them. And yes, there are slimy click-baiter social media freaks too, and not just in the personal productivity realm, mind you.</p><p>Anyway, here&apos;s who and what I&apos;ve been listening to:</p><ul><li><em>$100 Million Dollar Offers</em>&#xA0;and&#xA0;<em>$100 Million Dollar Leads&#xA0;</em>by&#xA0;<a href="https://www.audible.com/author/Alex-Hormozi/B099H3YM3R?ref=bigmachine.io" rel="noopener noreferrer">Alex Hormozi</a>. This guy is the embodiment of &quot;hustle bro&quot;, but he&apos;s a lot more than that, which I&apos;ll get into below.</li><li>&#x200B;<a href="https://www.audible.com/pd/Feel-Good-Productivity-Audiobook/B0CBNCT8W1?ref=bigmachine.io" rel="noopener noreferrer"><em>Feel Good Productivity</em></a>, by Ali Abdaal. A kinder, gentler approach to doing the things you want to do.</li><li>&#x200B;<a href="https://www.audible.com/pd/Million-Dollar-Weekend-Audiobook/B0C6YK4917?ref=bigmachine.io" rel="noopener noreferrer"><em>Million Dollar Weekend</em></a><em>,&#xA0;</em>by Noah Kagan. Practical tips on how to start a side business without spending a ton of time and money.</li><li>&#x200B;<a href="https://www.audible.com/pd/Atomic-Habits-Audiobook/1524779261?ref=bigmachine.io" rel="noopener noreferrer"><em>Atomic Habits</em></a><em>,&#xA0;</em>by James Clear. Of all the books here, this is the one that will change your life.</li></ul><p>This list is about 1/10th of the &quot;hustle books&quot;, as I like to call them, that I&apos;ve read over the last few years. Some are good, some make me cringe, but all of them have the same story:</p><p>I was broke and in trouble. I knew I had to do something, but all I had was a credit card and my friend&apos;s/mom&apos;s couch. That&apos;s when a friend/parent/partner suggested ...</p><p><strong>Alex Hormozi</strong>&#xA0;was ripped off by a business partner and some of his customers. He was over $100,000 in debt and had just 30 days to come up with an idea... which, through trial and error, came together.</p><p><strong>James Clear</strong>&#xA0;got hit in the face with a baseball bat that almost ended his baseball career. With the help of friends and family, he came up with a recovery system, focusing on small, 1% daily changes.</p><p><strong>Noah Kagan</strong>&#xA0;was #30 at Facebook but got fired because he accidentally let something slip at a conference. Down and out, feeling like a failure, he struggled to find his path...</p><p>You get the idea. In fact, I would say that&#xA0;<em>every single productivity/hustle book I&apos;ve read starts off like this</em>. Sure, there are exceptions, but the &quot;rags to riches&quot; clich&#xE9; is still very alive.</p><h2 id="and-then-i-realized">And Then I Realized...</h2><p>These stories always&#xA0;<strong>pivot around the Big Reveal</strong>&#xA0;that you can see a mile away. We all love success stories, don&apos;t we? Reading about someone else reaching 1 million MRR within 6 months is inspiring! If they did it, why can&apos;t we!</p><p>For one simple reason:&#xA0;<strong>these people live a life where they put themselves in a position with no other choice</strong>. Their backs, literally, against a wall.</p><p>Ali Abdaal&#xA0;<a href="https://aliabdaal.com/newsletter/quitting-medicine/?ref=bigmachine.io" rel="noopener noreferrer">wrote about this in a blog post</a>, when he announced he was leaving his career as a doctor (emphasis mine):</p><p>I&#x2019;ve had a bunch of conversations with friends and ex-colleagues thinking of leaving their jobs too, and trying to weigh up the pros and cons. One thing I&#x2019;ve noticed, which is what Paul Millerd points out in his excellent book&#xA0;<em>The Pathless Path</em>too, is that<strong>we all tend to underestimate our ingenuity</strong>. We think &#x2018;if I quit my job, and plan X doesn&#x2019;t work out, I&#x2019;ll have nothing to do, and then I&#x2019;ll be broke and homeless and unhappy and no one will love me&#x2019;. One of the main problems is the leap from &#x2018;plan X not working out&#x2019; to &#x2018;I&#x2019;ll have nothing to do&#x2019;. There&#x2019;s always stuff to do.<strong>We underestimate our ability to figure things out, to adjust, to make plans on the fly and execute them</strong>.</p><p>When I lived on Kauai, people would ask me constantly:&#xA0;<em>how did you ever decide to move here? That must have been hard...</em>&#xA0;and, honestly, it wasn&apos;t. My ex and I had talked about it for a year or so and then... just did it. I don&apos;t say this in a &quot;oh, well sure, you know me, I&apos;m awesome&quot; kind of way. Not at all! I had been through the Dotcom implosion and had a new child, and I was falling apart. We were young and took a chance, and everything we read about moving to Hawaii was &quot;there is no plan, there is only the doing of it&quot;. So we did it.</p><p>I left Microsoft in 2009 because I was struggling at the job for both personal and professional reasons. I hadn&apos;t planned on leaving, but before I knew it, the words were out of my mouth. I was stressed out, couldn&apos;t sleep, cranky, and my friends called me a &quot;broken record&quot; when I would complain. I was absolutely terrified when I quit (I had two young kids and a wife to support), but wow did I feel free. I decided to try a startup of my own instead of finding a full time job, and it worked out, thankfully. I still had to take side contracts, of course, but I found them when I needed.</p><p><strong>So, question:&#xA0;<em>are these examples of self-sabotage, or self-empowerment?</em>&#xA0;I honestly don&apos;t know.</strong></p><h2 id="is-this-a-contradiction">Is This a Contradiction?</h2><p>Alex Hormozi is one of my favorite authors, but I know a few people who think he&apos;s all hustle bro. I can see why - he talks at a million miles per hour and doubles down on &quot;if you focus on this and do these things, you&apos;ll make a lot of money&quot;.</p><p>The problem, however, is that you:</p><ul><li>Need to spend time&#xA0;<strong>finding an idea</strong>&#xA0;that people are interested in and then need to recognize when the&#xA0;<strong>changes you make actually work</strong>.</li><li>Have the drive to keep going, which usually means having the&#xA0;<strong>support of a partner or family</strong>. Alex is quick to point out that he wouldn&apos;t be who he is without his wife&apos;s support.</li><li>Have the ability to&#xA0;<strong>handle the success</strong>.</li></ul><p>That&apos;s the problem with all of the money-maker books! There&apos;s a lot of psychology you have to get through, which is usually addressed by &quot;go to therapy, it&apos;s good for you, I can&apos;t help you with that&quot;, which is good advice. But what if you, like me, were&#xA0;<strong>raised with the idea that rich people are assholes</strong>? If you read&#xA0;<em>The Mountain is You</em>, you&apos;ll come to understand that you&apos;ll keep yourself from making money because you don&apos;t want to be an asshole.</p><p>More than that, however, is that you have to swim in the deep end of the psychology pool if you want to build a business. If you follow Alex&apos;s, Noah&apos;s, and Ali&apos;s advice, you&apos;ll need to be comfortable with the notion of&#xA0;<strong>trying, pivoting, failing, and then trying again</strong>&#xA0;- and hope that you have people around you that can tolerate this.</p><p>This cycle of creation and evolution seems to sit squarely on top of the Perfectionism, Uprooting, and Pride behaviors discussed above. Perfectionism in that you&#xA0;<em>know</em>&#xA0;if you just try one more time, changing your sales copy, offer structure, or ad campaign, that&#xA0;<em>this time</em>&#xA0;you just might crack it. You might rebrand (or Uproot) your business during a pivot, giving your customers what you think they want. As long as you don&apos;t give up (Pride)!</p><p>In&#xA0;<em>The Mountain Is You</em>, the author portrays self-sabotage as the thing that&apos;s keeping you from growing. You&apos;re focused on problems outside yourself, offering a distraction from the issues inside you. This makes sense to me.</p><p>My hustle books, however, use these exact same mechanics in a more positive way:&#xA0;<em>as a way through to something better</em>. James Clear challenges you to improve your life by doing the smallest thing you can, every day. Putting your running shoes by the door is step one to ultimately becoming a runner. Is your focus on becoming a runner a distraction from your deeper issues?</p><p>I know that I wouldn&apos;t have what I have in this life, which I&apos;m very grateful for, if I didn&apos;t lean into my self-sabotaging tendencies. I know that I also could have let go a little earlier, letting that book or video course be finished, without trying to improve it and its sales copy.</p><p>I won&apos;t end this post with an &quot;it depends&quot; - far from it.&#xA0;<strong>I recognize these forces inside me now, and my work, at this point, is&#xA0;<em>not</em>&#xA0;to resist them</strong>, but to let them&#xA0;<strong>work for me, not against me</strong>. When a book or course is done, leave it alone. Reasonable A/B testing (2, maybe 3 rounds) is a good thing when it comes to sales copy, ads, and offers. Anything more than that is diminishing returns, time to move on.</p><p>So: a contradiction? Sure, just like most things in life; they can help and they can hurt.&#xA0;<em>The trick, William Potter, is not minding that it hurts</em>.</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/william_potter.jpg" class="kg-image" alt loading="lazy" width="800" height="530" srcset="https://robconery.com/content/images/size/w600/2025/03/william_potter.jpg 600w, https://robconery.com/content/images/2025/03/william_potter.jpg 800w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title>&#128124;&#127996;<![CDATA[ Divine Code Reviews]]></title><description><![CDATA[Reviewing someone else's code can be frustrating, but also a learning experience for everyone. Let's see how Stephen King might help us.]]></description><link>https://robconery.com/shipping/divine-code-reviews/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0910</guid><category><![CDATA[Shipping]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Sat, 02 Mar 2024 21:54:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/screenshot_592.jpg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/screenshot_592.jpg" alt="&#x1F47C;&#x1F3FC; Divine Code Reviews"><p>I was talking with my friend Tess Ferrandez at NDC London just over a month ago and we started talking about code reviews. She was&#xA0;<a href="https://ndclondon.com/agenda/better-code-reviews-ftw-03b1/0qf0kcod9s2?ref=bigmachine.io" rel="noopener noreferrer">about to go on stage</a>, and that was the subject of her talk (I can&apos;t find a link to the recording), which was ironic because it was also the chapter I was outlining for&#xA0;<em>The Imposter&apos;s Playbook</em>, which I&apos;m getting near to finishing.&#xA0;</p><p>I stood in the corner of the room, which was jam packed, as&#xA0;<a href="https://www.youtube.com/watch?v=BIwFAqq-pww&amp;ref=bigmachine.io" rel="noopener noreferrer">Tess offered her tips</a>&#xA0;on being more understanding, empathetic, and, in a word:&#xA0;<em>human</em>&#xA0;when you review someone else&apos;s code (thanks to Emad Mokhtar for finding the link!) .</p><p>This is something we should talk more about!</p><h2 id="advice-from-stephen-king">Advice from Stephen King</h2><p>Reviewing code for someone is, quite literally,&#xA0;<strong>an editing process</strong>. Your goal is to&#xA0;<strong>help them find the nugget of goodness</strong>, the&#xA0;<em>purpose</em>, if you will, of what they&apos;re trying to create. One of my favorite English teachers in college pushed me once, quipping:&#xA0;<em>whatever you&apos;re trying to say, just say it already</em>.</p><p>That was a bit forceful, but apparently what I needed at the time. It unlocked the idea of &quot;voice&quot; for me, and my writing dramatically improved from that point on.</p><p>I like how Stephen King describes the editing process in his book&#xA0;<em>On Writing</em>, which I&apos;ve read 3 times now:</p><blockquote>To write is human, to edit is divine.</blockquote><p>I like that, and I think we can adopt that idea in terms of code reviews:</p><blockquote>To code is human, to review is divine</blockquote><p>My English teacher unlocked something in me that changed my life. My friend&#xA0;<a href="https://di.nmfay.com/about?ref=bigmachine.io" rel="noopener noreferrer">Dian Faye</a>edited a book I wrote,&#xA0;<a href="https://sales.bigmachine.io/curious-moon?ref=bigmachine.io" rel="noopener noreferrer"><em>A Curious Moon</em></a>, and would consistently blow my mind with her ability to see what I was trying to say, and push me to say it. It&apos;s more than fair to say that book would not be what it is today without Dian&apos;s patient, kind, thoughtful, and ridiculously smart feedback.</p><p>I think we can do the same for others when we review their code.</p><h2 id="a-dedication-to-plot-and-scene">A Dedication to Plot and Scene</h2><p>The plot of most books is made up of a series of scenes that the characters move through. We can think of code this way, as reviewers, except instead of characters we might be dealing with bits of data wrapped in classes or structs of some kind.</p><p>Clarity of intent, when it comes to code, is paramount if you&apos;re trying to convey&#xA0;<em>why</em>&#xA0;a bit of code exists. As a programmer, it&apos;s important to set the scene for your reviewer, so they know what&apos;s happening and why.</p><p>I think this is a challenge for many programmers, myself included. Consider the following bit of code. I found this online, but it could&#xA0;<em>easily</em>&#xA0;be something I wrote! Let&apos;s pretend we&apos;ve been asked to review it, shall we?</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-6.png" class="kg-image" alt="&#x1F47C;&#x1F3FC; Divine Code Reviews" loading="lazy" width="1186" height="1318" srcset="https://robconery.com/content/images/size/w600/2025/03/image-6.png 600w, https://robconery.com/content/images/size/w1000/2025/03/image-6.png 1000w, https://robconery.com/content/images/2025/03/image-6.png 1186w" sizes="(min-width: 720px) 720px"></figure><p>What are your thoughts as you look over this code? What &quot;scene&quot; are we in and what characters are at work?</p><h2 id="channeling-terence-fletcher">Channeling Terence Fletcher</h2><p>Like any review, the code above has room for improvement. I&apos;m sure you see things, immediately, that you don&apos;t care for, such as:</p><ul><li>No comments.</li><li>Use of older JavaScript patterns.</li><li>Possible floating point math issues.</li></ul><p>To name just a few. Already sounds like I&apos;m picking on this poor person, doesn&apos;t it?&#xA0;<em>That&apos;s human nature</em>. I&apos;m absolutely&#xA0;<em>not</em>&#xA0;trying to nitpick here! If I&apos;m asked for a review, I should give a review, right?</p><p>Unfortunately, I sound like this guy:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/entj-terencefletcher-pics01.png" class="kg-image" alt="&#x1F47C;&#x1F3FC; Divine Code Reviews" loading="lazy" width="500" height="200"></figure><p>If you haven&apos;t seen&#xA0;<em>Whiplash</em>, by the way, please... change that! The professor above is Terence Fletcher, one of JK Simmons&apos; most amazing roles. The guy is terrifying.</p><p>Let&apos;s not be terrifying. Let&apos;s see what we can do to be &quot;divine reviewers&quot;, shall we?</p><h2 id="were-here-to-help-clarify">We&apos;re Here to Help Clarify</h2><p>If we understand that our role is to help our coder find the beautiful truth of their code, then this becomes a bit more fun! This, however, means that we need to address our inner Terence by&#xA0;<em>seeking the good</em>. Yes, we&apos;re being sugary and yes, there is a benefit to a dose of salt at times. We&apos;ll get there.</p><p>Here&apos;s a list of positive things we can do straight away:</p><ul><li>Does the code run?</li><li>Do the tests pass (yes there are tests with this code)?</li><li>Do we have opinions on how we would have written this?</li></ul><p>If we&apos;re reviewing a PR on GitHub, we ideally have a build that will go off, running whatever tests that our coder has put in place.&#xA0;<strong>That should be the first order of business.</strong></p><p>If there are no tests, which could easily be the case, then we&apos;re done with our review and we can reply in a supportive way:&#xA0;<em>adding a few tests would help me review this code in a much more efficient way. It would also add nicely to our build - can you add a few that cover the basics?</em></p><p>Or, if you&apos;re on good terms with the coder, your reply could be a bit shorter:&#xA0;<em>tests?&#xA0;</em>This would be the &quot;dose of salt&quot; I referred to above. Submitting code without tests is a waste of time - namely ours as a reviewer - and people should be reminded just how precious time is.</p><p>Let&apos;s assume we have tests, for now. The tests are reasonably complete and demonstrate that the code works, as far as the coder is concerned. This is good and positive stuff - let&apos;s find something else that&apos;s a positive!</p><p>I like the use of a hash for the cart&#xA0;<code>items</code>:</p><figure class="kg-card kg-image-card"><img src="https://embed.filekitcdn.com/e/86EgwmdwvthrNYSoA85pUc/iiCVsyqTw7LDNRCemueieX/email" class="kg-image" alt="&#x1F47C;&#x1F3FC; Divine Code Reviews" loading="lazy"></figure><p>I like this because I understand the scene, because I&apos;ve read this book before (if you will): we don&apos;t want duplicate items in the cart, so having a hash helps with that. I do think a comment here would be useful, however, because a few years from now we might forget how carts work!</p><p><strong>Comments tell our reviewers and our later selves about the scene unfolding in our code</strong>. If you take care to write comments that create a scene, you might also realize that you forgot something (happens to me all the time), or that something you&apos;ve written just doesn&apos;t make sense (also happens to me all the time).</p><p>On to the characters now - or the &quot;data&quot;. Who is in this scene, and should they be?</p><p>I&apos;m noticing that an&#xA0;<code>id</code>&#xA0;is being sent in for the item, which means that identifying an&#xA0;<code>item</code>&#xA0;in the cart lies outside the cart itself. This might be by design, but I&apos;m curious if the&#xA0;<code>item</code>&#xA0;has an identifier, like a&#xA0;<code>sku</code>, perhaps? If so, we can improve this method signature and, possibly, make the dialog a bit cleaner.</p><p>Finally,&#xA0;<code>item</code>&#xA0;is a bit generic and could benefit from more development - &quot;rounded out&quot; if you will. Let&apos;s suggest a little more clarity in terms of what&apos;s expected, using destructured assignment:</p><figure class="kg-card kg-image-card"><img src="https://embed.filekitcdn.com/e/86EgwmdwvthrNYSoA85pUc/vjB5Wrv7mcE9p3yrKbBxWA/email" class="kg-image" alt="&#x1F47C;&#x1F3FC; Divine Code Reviews" loading="lazy"></figure><p>Let&apos;s stop at three bits of feedback (comments, using the&#xA0;<code>item</code>&#xA0;identifier, and destructuring). If we&apos;ve done our job right, these suggestions might trigger a few ideas in our coder&apos;s head!</p><h2 id="offering-sparks-of-inspiration">Offering Sparks of Inspiration</h2><p>One of the things I didn&apos;t bring up in the first round of review is the lack of checks on the incoming data. What if there&apos;s no&#xA0;<code>sku</code>&#xA0;or&#xA0;<code>name</code>&#xA0;or the&#xA0;<code>price</code>&#xA0;is 0 or, worse, less than 0? How are discounts handled?&#xA0;</p><p>By offering the destructuring suggestion, we&apos;re nudging our coder to add details and make clear a few assumptions. Just seeing those three values coming in&#xA0;<em>naturally</em>&#xA0;makes you question their validity. That&apos;s the hope, anyway.</p><p>This code review might take a few rounds to get &quot;right&quot;. It&apos;s a discovery process that should focus on helping our coder sharpen things, not write code the way we think it should be written.</p><p>Would I like to see a&#xA0;<code>class</code>&#xA0;here? Sure! A factory method in addition to an empty constructor that creates a cart from data passed to it? Yes again. Does this code&#xA0;<em>need</em>that? I don&apos;t think so. It might come up in the future, and if it does, I can bring it up then. The important thing here is that our coder gets their PR in the door.</p><p>They might also ask if there is anything else they could do to improve the code. That&apos;s a tricky question because it means you think you know how to do it better, and maybe you do, but would adding patterns and refactoring things the way you like to see them really&#xA0;<em>improve</em>&#xA0;the code? It&apos;s working and the tests are passing!</p><p>So that&apos;s what I would say:</p><p>The code works. You&apos;ve added a few more tests, I see, and I like the way you&apos;ve used assert to ensure that price is correct and that there&apos;s a sku. This meets our requirements, but if they change, we can talk then.</p><p>That&apos;s a tough one, when you&apos;re asked &quot;how can I make this better&quot;.&#xA0;<strong>Answering that question highlights the gap between you and your coder</strong>, which can be discouraging. You might have a lot of experience, and flexing that can be destructive.</p><p>Conversely,&#xA0;<strong>your coder might have more current knowledge, or actually&#xA0;<em>more</em>experience than you</strong>&#xA0;in some areas. By offering your &quot;improvements&quot;, you might be limiting yourself rather than learning something new, which happens to me in every code review I&apos;ve ever done.&#xA0;</p><h2 id="thoughts">Thoughts?</h2><p>Obviously this is highly subjective stuff, but you can make a massive difference in someone&apos;s career by offering careful, thoughtful code reviews. Who knows, you might learn something!</p><p>Have some thought for me on this? How would you improve my code review process &#x1F607;?</p>]]></content:encoded></item><item><title>&#128123;<![CDATA[ Hacking Ghost for Fun and Profit]]></title><description><![CDATA[<p>Back in 2014 I created a course for Pluralsight called <a href="https://www.pluralsight.com/courses/hacking-ghost?ref=robconery.com" rel="noreferrer"><em>Hacking Ghost</em></a>, which is the CMS platform you&apos;re reading this post on (or maybe got an email from). I had a good time putting that course together, but Ghost has grown up a lot since then.</p><p>I&apos;</p>]]></description><link>https://robconery.com/fun/hacking-ghost/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0906</guid><category><![CDATA[Fun]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Mon, 12 Feb 2024 21:30:00 GMT</pubDate><media:content medium="image" url="https://images.unsplash.com/photo-1633826523932-fb137c3353b5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEwMXx8Z2hvc3R8ZW58MHx8fHwxNjk2NDY2NTIwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1633826523932-fb137c3353b5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEwMXx8Z2hvc3R8ZW58MHx8fHwxNjk2NDY2NTIwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x1F47B; Hacking Ghost for Fun and Profit"><p>Back in 2014 I created a course for Pluralsight called <a href="https://www.pluralsight.com/courses/hacking-ghost?ref=robconery.com" rel="noreferrer"><em>Hacking Ghost</em></a>, which is the CMS platform you&apos;re reading this post on (or maybe got an email from). I had a good time putting that course together, but Ghost has grown up a lot since then.</p><p>I&apos;ve been using it on my personal site (this one) for the last year or so and I really, really like it. Recently, however, I decided to see just how far I could push this platform to do a few things it was never meant to do.</p><p>Allow me to share, because some of y&apos;all might benefit!</p><h2 id="hosting-video-courses">Hosting Video Courses</h2><p>One of the things I have wanted for a very, very long time is a site that&apos;s all about content production while at the same time capable of hosting video courses. You can do it in WordPress, of course, and there are a few services out that there come close... but nothing like Ghost.</p><p>It&apos;s easy. That&apos;s really the selling point here. One thing that&apos;s extremely simple to do is to <a href="https://ghost.org/docs/themes/?ref=robconery.com" rel="noreferrer">create your own theme</a>. Ghost uses Handlebars under the hood (a Node/JS templating engine) and exposes a ton of helpers to you that allow you to create what you need. They also give you access to routing using a simple YAML file.</p><p>I have quite a few templates laying around, so I took one of them and made a blog theme that I like based on Bootstrap 5. I also did something that I&apos;ve wanted to do for years: I wedged in a Vue application so people can watch the courses I&apos;ve made.</p><p>Here&apos;s one that I just launched: <a href="https://robconery.com/course/accelerator/" rel="noreferrer"><em>The Imposter&apos;s Frontend Accelerator</em></a>. Click around! I think it works pretty well so far, though there might be a few bugs here and there.</p><p>Point is: Ghost is flexible enough that I could write up a Vue app, drop it into my theme, and show some courses! But there&apos;s a little more here too...</p><h2 id="hooking-up-supabase">Hooking Up Supabase</h2><p>Ghost doesn&apos;t give you access to its database, unlike WordPress (thank god). That means that if you need to access some data, like whether someone has bought one of your courses, you need to do something different.</p><p>For this, I used <a href="https://supabase.com/?ref=robconery.com" rel="noreferrer">Supabase</a>. It&apos;s basically a &quot;backend in a box&quot; that runs on Postgres and for me, <em>say no more</em> I&apos;m all over it. All of my business data is in there going back years and if you bought something from me, you&apos;re in there!</p><p>One service that Supabase offers is user authentication. They do this using magic links, email/password, and social. This presents a problem with Ghost because Ghost provides authentication too - so how do you synchronize the two?</p><p>Here&apos;s the fun part - and I think it works pretty well. Every user of this Ghost site has an account with a GUID as an ID. When you&apos;re logged in, Ghost gives me access to your information from my theme:</p><pre><code class="language-javascript">const email=&quot;{{@member.email}}&quot;;
const password=&quot;{{@member.uuid}}&quot;;</code></pre><p>Now this might make you want to puke, especially seeing the <code>password</code> reference there - but just think of it as an access token. I have a routine that fires when you visit the site that tries to log you in to Supabase (if you&apos;re logged in to Ghost). If that fails, I send your credentials to an edge function (another Supabase service) which adds you on the fly.</p><p>Once added, I know what you&apos;ve bought and what you can watch - all protected by Supabase&apos;s row-level security, which I&apos;ll let you read about... or I might write about it more at another time if you&apos;re interested.</p><p>Is it a hack? Sure! Does it work? Yes!&#x1F468;&#x1F3FB;&#x200D;&#x1F3A4;</p>]]></content:encoded></item><item><title><![CDATA[3 of the Best Things I Learned in the Last Year]]></title><description><![CDATA[I love learning new things - it keeps me going in this industry and, as my mom likes to remind me: learning keeps you alive. Here's what I learned last year.]]></description><link>https://robconery.com/career/3-of-the-best-things-i-learned-in-the-last-year/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb090d</guid><category><![CDATA[Career]]></category><category><![CDATA[Learning]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Tue, 07 Nov 2023 21:45:00 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2025/03/image-3.jpeg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2025/03/image-3.jpeg" alt="3 of the Best Things I Learned in the Last Year"><p>I love exploring and learning new things. While fun, sharing what I&apos;ve learned is even more rewarding.&#xA0;</p><p>I spent the majority of my free time over the last year&#xA0;<strong>finishing off&#xA0;<em>The Imposter&apos;s Roadmap</em>,</strong>which I just wrapped up final last weekend. Everything I&apos;m about to share is detailed in the book, and if you&apos;re interested,&#xA0;<a href="https://sales.bigmachine.io/roadmap/?coupon=UUH63ODDW&amp;ref=robconery.com" rel="noopener noreferrer">I have a discount for you</a>!</p><h2 id="1-the-github-project">1: The GitHub Project</h2><p>I was talking with Burke Holland a few months ago about using GitHub to run a technical project (using GitHub projects) and he shared with me that the VS Code Team (who we work with) uses&#xA0;<a href="https://github.com/microsoft/vscode/issues/215394?ref=robconery.com" rel="noopener noreferrer">a simple repository</a>&#xA0;with issues instead.</p><p>I found that confusing. GitHub has the notion of&#xA0;<a href="https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects?ref=robconery.com" rel="noopener noreferrer">actual projects</a>&#xA0;with Kanban boards, roadmaps, and customizable tasks... how could you use a repo to do this? Moreover: why?</p><p>Then he showed me their iteration plan:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-4.png" class="kg-image" alt="3 of the Best Things I Learned in the Last Year" loading="lazy" width="1200" height="728" srcset="https://robconery.com/content/images/size/w600/2025/03/image-4.png 600w, https://robconery.com/content/images/size/w1000/2025/03/image-4.png 1000w, https://robconery.com/content/images/2025/03/image-4.png 1200w" sizes="(min-width: 720px) 720px"></figure><p>Long story short: the VS Code team uses a &quot;parent&quot; issue called an iteration plan (from Agile), which covers a month&apos;s worth of work. On that issue, they create a set of tasks and notes, and tag the people responsible for each one. They also tag child issues, which they track from the plan. When the work is done, the task is checked.</p><p>All of the checklist tasks in an issue come with a &quot;Create Issue&quot; hover button, that you can see on the right side of the editor. If you click that, an issue is created and linked back to the parent. Crazy stuff.</p><p>The iteration plans are done in monthly milestones, so it&apos;s easy to go back and see the work performed in a given month. It&apos;s also easy to customize, which I love.</p><p>Burke and I liked this so much, we plugged it in for our group (which Burke leads) and it&apos;s been working wonderfully.</p><h2 id="2-bullet-journaling-with-obsidian">2: Bullet Journaling with Obsidian</h2><p>I&#xA0;<em>love</em>&#xA0;the&#xA0;<a href="https://bulletjournal.com/?ref=robconery.com" rel="noopener noreferrer">Bullet Journal</a>&#xA0;process. It has made a massive impact on me personally, and helped me see clearly where I waste effort, and what I really should be focusing on (like finishing the Roadmap book!).&#xA0;</p><p>The only downside is that it&apos;s hard to search and relate information. I find myself referencing collections 2 journals back sometimes, which breaks my mental flow when I have to go dig up the old journal and find what I was trying to remember.</p><p>I tried a few digital methods, including Notion, Apple Notes, and a few other writing apps - but none did what I needed. Then I decided to give&#xA0;<a href="https://obsidian.md/?ref=robconery.com" rel="noopener noreferrer">Obsidian</a>&#xA0;a try. Everything is stored locally in Markdown files, which you can sync using a cloud solution of choice (I use iCloud).</p><p>Over a weekend, I created a set of templates and a process to mirror the Bullet Journal method:</p><ul><li>My daily, monthly, and yearly logs sit in the root, tagged with the date.</li><li>Each month has its own directory, with all the daily logs moved into it at the end of the month.</li><li>A collection lives in the month it was created.</li><li>People and Processes are tags, so I can always find them when I need.</li></ul><p>The terminology here (daily logs, collections, etc.) is very Bullet Journal-y, but you pick it up fast.</p><p>Here&apos;s what it looks like:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-4.jpeg" class="kg-image" alt="3 of the Best Things I Learned in the Last Year" loading="lazy" width="1334" height="969" srcset="https://robconery.com/content/images/size/w600/2025/03/image-4.jpeg 600w, https://robconery.com/content/images/size/w1000/2025/03/image-4.jpeg 1000w, https://robconery.com/content/images/2025/03/image-4.jpeg 1334w" sizes="(min-width: 720px) 720px"></figure><p>Obsidian supports GitHub style Markdown, so you can add all kinds of flourishes to your notes, like special checkboxes and callouts. Everything is templated, so it&apos;s super easy to create your daily log and not forget something.</p><p>I&apos;m thinking I&apos;ll do a YouTube video about it. Reply if you&apos;d like to see that!</p><h2 id="3-code-generation-with-careful-prompting">3: Code Generation with Careful Prompting</h2><p>It&apos;s fair to say that most people I know are pretty tired of reading about AI, and I completely understand. That said, Burke (him again!) asked me to review&#xA0;<a href="https://www.youtube.com/watch?v=H3M95i4iS5c&amp;ref=robconery.com" rel="noopener noreferrer">a video he put out</a>&#xA0;on prompting, and it blew my mind. I just didn&apos;t know you could do these things!</p><p>It got me thinking: every demo I see that uses ChatGPT or Copilot uses a prompt to do a thing; but&#xA0;<strong>what if we thought of it more as a conversation, rather than a command</strong>?</p><p>I started playing around with a simple idea:&#xA0;</p><ul><li>Create a&#xA0;<strong>README</strong>&#xA0;that has the scope of what I&apos;m trying to do. Maybe I&apos;m building an e-commerce application, or something. I have a summary paragraph and then a bulleted list of services and functionality.</li><li>Create a&#xA0;<strong>SQL file&#xA0;</strong>that could be my dumped database schema, or what I hope to use at some point. The more detailed, the better.</li><li>Load these files up to ChatGPT (or whatever model you&apos;re using), starting with the README.&#xA0;</li></ul><p>The conversation, at that point, starts with something like:</p><p>What is the simplest file structure and project architecture I can use to build the application described in the README file?</p><p>I&apos;m using Copilot for this, and this response is pretty grand:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-5.jpeg" class="kg-image" alt="3 of the Best Things I Learned in the Last Year" loading="lazy" width="1323" height="1218" srcset="https://robconery.com/content/images/size/w600/2025/03/image-5.jpeg 600w, https://robconery.com/content/images/size/w1000/2025/03/image-5.jpeg 1000w, https://robconery.com/content/images/2025/03/image-5.jpeg 1323w" sizes="(min-width: 720px) 720px"></figure><p>I like what I see here, but I could do without controller and the config stuff. That&apos;s where the conversation part comes in - just tell the LLM what you want to have added or removed. Once you see one you like, you can actually tell ChatGPT to &quot;remember this&quot;, and it will!</p><p>Next you load up the SQL file, and prompt:</p><blockquote>Here is my database schema. Use this to create the models using Sequelize.&#xA0;</blockquote><p>It&apos;s&#xA0;<em>insane</em>&#xA0;how accurate the code is! The data types are correct, as are the null checks. Copilot (the LLM I&apos;m using here) was able to guess the relationships too. I&apos;m using the Chinook test database, by the way.</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-7.jpeg" class="kg-image" alt="3 of the Best Things I Learned in the Last Year" loading="lazy" width="903" height="527" srcset="https://robconery.com/content/images/size/w600/2025/03/image-7.jpeg 600w, https://robconery.com/content/images/2025/03/image-7.jpeg 903w" sizes="(min-width: 720px) 720px"></figure><p>It&apos;s not perfect, but that&apos;s fine, we&apos;re still way ahead. Sequelize, by the way, is a popular ORM for Node. Replace with whatever you use and, yes, it will generate a repository for you if you want! Even Command and Query objects if that&apos;s your thing!</p><p>Here&apos;s the fun part, however:</p><blockquote>Create a bash script that generates the code for the Sequelize models.</blockquote><p>This freaked me out the first time I saw it. Here&apos;s the response I got (yours might be different):</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2025/03/image-9.jpeg" class="kg-image" alt="3 of the Best Things I Learned in the Last Year" loading="lazy" width="1208" height="813" srcset="https://robconery.com/content/images/size/w600/2025/03/image-9.jpeg 600w, https://robconery.com/content/images/size/w1000/2025/03/image-9.jpeg 1000w, https://robconery.com/content/images/2025/03/image-9.jpeg 1208w" sizes="(min-width: 720px) 720px"></figure><p>I didn&apos;t know Sequelize has a CLI! I opened the terminal in VS Code and clicked the &quot;Run in Terminal&quot; button in the chat for each of the responses. The CLI generated the database migrations and model files I needed... and everything&#xA0;<em>worked</em>.&#xA0;</p><p>We live in wild times.</p><p>I do feel that it&apos;s a roll of the dice when you do things like this, and this time I got lucky and snapped a screenshot. Other times I&apos;ve had to go in and tweak a few things - but I&apos;m still far ahead, and honestly don&apos;t mind.</p><h2 id="theres-more">There&apos;s More...</h2><p>I&apos;ve learned so much in the last year, which is what I love about the work I do. I hope you found a little inspiration here, and if you want to know more,&#xA0;<a href="https://sales.bigmachine.io/roadmap/?coupon=UUH63ODDW&amp;ref=robconery.com" rel="noopener noreferrer">go get the book</a>!</p><p>Thanks again!</p><p>Rob</p>]]></content:encoded></item><item><title><![CDATA[Explain It Like I'm 5 - Why Are Hashes Irreversible?]]></title><description><![CDATA[How to explain hashing algorithms to 5-year olds? Well... I'll do my best in this post, which comes with a video too!]]></description><link>https://robconery.com/youtube/why-are-hashes-irreversible/</link><guid isPermaLink="false">67d88bee9fa6e1a2c5bb0907</guid><category><![CDATA[YouTube]]></category><dc:creator><![CDATA[Rob Conery]]></dc:creator><pubDate>Sun, 15 Oct 2023 19:39:57 GMT</pubDate><media:content medium="image" url="https://robconery.com/content/images/2023/10/hash-five.jpg"/><content:encoded><![CDATA[<img src="https://robconery.com/content/images/2023/10/hash-five.jpg" alt="Explain It Like I&apos;m 5 - Why Are Hashes Irreversible?"><p>I was reading Twitter/X the other day when I came across a compelling question from <a href="https://www.youtube.com/watch?v=9gIi6UK6w4Q&amp;ref=robconery.com" rel="noreferrer">Kevin Naughton</a>:</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">someone pls explain how hashing algorithms like SHA-256 are irreversible like i&apos;m 5 years old</p>&#x2014; Kevin Naughton Jr. (@KevinNaughtonJr) <a href="https://twitter.com/KevinNaughtonJr/status/1706005238899945814?ref_src=twsrc%5Etfw&amp;ref=robconery.com">September 24, 2023</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></figure><p>This is a wonderful question and, to be honest, something I didn&apos;t understand until a few years ago when I wrote part 2 of <a href="https://sales.bigmachine.io/imposter-second?ref=robconery.com" rel="noreferrer"><em>The Imposter&apos;s Handbook</em></a>. </p><p>As you can see, Kevin got a lot of replies and, if I&apos;m honest, there seems to be a lot of confusion. Old Rob might take up the challenge here, striking up some exciting conversation on Twitter about the nature of one-way functions... but let&apos;s be positive and dig in to some details.</p><h2 id="the-enemy-knows-the-system">The Enemy Knows the System</h2><p>There are a lot of very wrong replies to Keven&apos;s tweet and I don&apos;t want to call anyone out, but I will say that the theme of wrongness goes something like this:</p><blockquote>I have a bunch of things and if I scramble those things up and give them to you, you&apos;ll have no way to unscramble them.</blockquote><p>There were examples of candy, cake, a deck of cards, and so on and many of them made sense in a human way. I wouldn&apos;t want to unshuffle a deck of cards or unbake a cake! </p><p>But see here&apos;s the thing: if I know the result (a lovely cake) and your <em>exact </em>process, which I will because these are algorithms after all that <em>must</em> produce the exact same result - then it&apos;s possible for me to figure out the initial ingredients - easily I might add. It might take a while and some guessing, but in short order I <em>will</em> produce the exact same cake.</p><p><strong>When you bake a cake or shuffle cards, you&apos;re doing <em>encryption</em></strong>: turning one value into another following a process. </p><p>Hashing, on the other hand, is completely different. <strong>Hashing turns some value into an unrelated number using functions that you can&apos;t reverse</strong> - this last bit is the thing I think most commenters were missing. </p><h2 id="whats-a-one-way-function">What&apos;s a One-way Function?</h2><p>Let&apos;s take our cake&apos;s individual  ingredients and weigh them on a scale that only counts up to 11 grams and then starts again at 0:</p><figure class="kg-card kg-image-card"><img src="https://robconery.com/content/images/2023/10/screenshot_172.jpg" class="kg-image" alt="Explain It Like I&apos;m 5 - Why Are Hashes Irreversible?" loading="lazy" width="992" height="675" srcset="https://robconery.com/content/images/size/w600/2023/10/screenshot_172.jpg 600w, https://robconery.com/content/images/2023/10/screenshot_172.jpg 992w" sizes="(min-width: 720px) 720px"></figure><p>Some ingredients will weigh more than 11 grams, of course, but you would still record the number you see on the dial. For instance: 35o grams of flour would spin this dial around quite a few times before ultimately landing on the number 9.</p><p>This is a <em>modular</em> operation; <code>350 mod 11</code> to be specific:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://robconery.com/content/images/2023/10/screenshot_173.jpg" class="kg-image" alt="Explain It Like I&apos;m 5 - Why Are Hashes Irreversible?" loading="lazy" width="989" height="468" srcset="https://robconery.com/content/images/size/w600/2023/10/screenshot_173.jpg 600w, https://robconery.com/content/images/2023/10/screenshot_173.jpg 989w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">350 mod 11</span></figcaption></figure><p>Now, imagine that I do the same for every ingredient and record what the dial says using my <code>mod 11</code> scale, and then write that number down. It might end up being something like:</p><pre><code>Sugar: 4
Flour: 9
Eggs: 3
Oil: 3
Vanilla: 10
Milk: 3
Salt: 0
Butter: 8
Baking Powder: 4</code></pre><p>Now we have a number we can play with, or <em>compress</em>, in our hashing algorithm: <code>4933103084</code>. How did we get this number? Well you just saw me do it, but there&apos;s no way you could reliably figure out my ingredients list from here!</p><h2 id="hey-its-a-video">Hey, It&apos;s a Video!</h2><p>Want to see more? I made a video about all of this and I do hope you enjoy...</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/9gIi6UK6w4Q?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Hashes for 5-Year Old Programmers"></iframe></figure>]]></content:encoded></item></channel></rss>