<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Dustin Briles]]></title><description><![CDATA[Dustin Briles]]></description><link>https://dustinbriles.com/</link><image><url>https://dustinbriles.com/favicon.png</url><title>Dustin Briles</title><link>https://dustinbriles.com/</link></image><generator>Ghost 5.87</generator><lastBuildDate>Fri, 27 Feb 2026 11:18:10 GMT</lastBuildDate><atom:link href="https://dustinbriles.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[OSSU blog #8 - Calculus]]></title><description><![CDATA[It's been a while since my last OSSU post - about 14 months. During that time I started and finished single-variable calculus.]]></description><link>https://dustinbriles.com/ossu-blog-8-calculus/</link><guid isPermaLink="false">6710540fca2efe2a0406d1fb</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Thu, 17 Oct 2024 02:01:35 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #8 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for context.</div></div><h2 id="calc-1a-1b-and-1c">Calc 1A, 1B, and 1C</h2><p>It&apos;s been a while since my last OSSU post - about 14 months. During that time I started and finished single-variable calculus. Similar to Programming Languages A, B, and C, there are three online courses (if you do the Open Learning Library (OLL) version) but it&apos;s really one big course (MIT &apos;s 18.01). </p><p>I took AP Calculus AB and BC in high school and got a 5 and 4 (respectively) on the exams. On the off chance he ever sees this: thank you for being an awesome instructor, Mr. Sade. You made calculus genuinely fun and interesting. </p><p>All of the material in 18.01 is stuff I had learned before, but much like the OSSU prerequisite math, I had forgotten a lot of it. </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/10/image.png" class="kg-image" alt loading="lazy" width="2000" height="406" srcset="https://dustinbriles.com/content/images/size/w600/2024/10/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/10/image.png 1000w, https://dustinbriles.com/content/images/size/w1600/2024/10/image.png 1600w, https://dustinbriles.com/content/images/size/w2400/2024/10/image.png 2400w" sizes="(min-width: 720px) 720px"></figure><p>That being said, it still took me over a year to finish going through material I had already learned previously. Though it took two years in high school (AP Calc AB and BC are each two semesters), in college this course is only a single semester. On one hand, this is embarrassing. On the other, I am happy to have finished with a lot of confidence in the material, after a few weeks-long breaks, and while I have a full-time job, family, social life, etc.</p><h3 id="the-course">The course</h3><p>This course was fine, but could be better. I think my high school calc teacher did a better job, but it&apos;s probably not fair to compare my experience then to how I experienced this course now. I wish there were more practice problems readily available, but you can find more elsewhere (e.g. in <a href="https://ocw.mit.edu/courses/18-01-single-variable-calculus-fall-2006/?ref=dustinbriles.com" rel="noreferrer">the OCW version</a> of the course, which I&apos;d probably recommend over the OLL courses at this point). </p><p>In particular I would have liked to see more optimization problems. We got a lot of those in my high school calc classes and they were monumentally helpful, even (or especially) when they were hard to make sense of. Sometimes a fellow student would mouth off, which would prompt Mr. Sade to quickly devise a practice problem asking us to figure out how quickly said student would be buried under a conical pile of sand. Good times.</p><p>I &quot;passed&quot; the class by taking the practice final and self-assessing my answers against the given solutions. I scored a little over 77% on the first try. I did award myself partial credit where I thought it appropriate, though obviously that&apos;s a subjective thing. Unsurprisingly, most of my mistakes had nothing to do with calculus and everything to do with basic algebra. </p><h3 id="study-habits">Study habits</h3><p>Part of the reason this took so long is: I scaled back how much time I spent on OSSU. Most weeks it was down to the 7.5 hours/week minimum I had set for myself, and sometimes even less than that. This time included watching videos, reading content, and doing practice problems and exams. I&apos;m going to need to increase my study time to make it through the rest of OSSU in any sort of timely matter, especially since the next course is Math for CS (i.e. discrete math), which I do not have much prior experience with.</p><p>Another problem was that late 2023/early 2024 was kind of a crazy time in my personal and work life, so I sometimes went <em>weeks </em>without doing any calculus. When you take a break that long, the problem is twofold: you obviously lose any forward progress you would have made during the break, but you also have to spend additional time to get back to where you were when you stopped. There&apos;s a similar problem when you stop going to the gym for a while - you can&apos;t just show up again after 6 weeks and expect to lift the same weight.</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/10/image-1.png" class="kg-image" alt loading="lazy" width="1224" height="694" srcset="https://dustinbriles.com/content/images/size/w600/2024/10/image-1.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/10/image-1.png 1000w, https://dustinbriles.com/content/images/2024/10/image-1.png 1224w" sizes="(min-width: 720px) 720px"></figure><p>In prior posts I lamented about how I could have avoided similar problems with a little more discipline, by being a little more intentional - but this time around it was simply a matter of priorities (my apologies dear reader, but I won&apos;t be going into the details here).</p><h3 id="flash-cards">Flash cards</h3><p>I used flash cards heavily for this course. I made a card in Anki for anything I thought was remotely important and tried to keep up with daily reviews. This served me well when doing practice questions and tests - I typically did not need to look up formulas or other such information. It was also useful to have these things in the front of my brain when watching lectures and digesting new material. It should be said that despite all their advantages, <strong>flash cards are <em>not</em> a substitute for practice problems</strong>. </p><h3 id="displaying-math-things-in-anki">Displaying math things in Anki</h3><p>Anki has support for MathJax built in (MathJax is not quite the same as LaTeX, but it&apos;s similar). Most of my calculus Anki cards have MathJax in them. It&apos;s come in handy a few times at work too - there is a lot of crossover between MathJax and many other math display engines.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://dustinbriles.com/content/images/2024/10/image-2.png" class="kg-image" alt loading="lazy" width="664" height="334" srcset="https://dustinbriles.com/content/images/size/w600/2024/10/image-2.png 600w, https://dustinbriles.com/content/images/2024/10/image-2.png 664w"><figcaption><span style="white-space: pre-wrap;">One of my Anki cards</span></figcaption></figure><p>You can press <code>ctrl+m, m</code> (or <code>cmd+m, m</code> on Mac) to add inline MathJax in Anki. I used this Math StackExchange post as a cheatsheet: <a href="https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference?ref=dustinbriles.com">https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference</a>. </p><h3 id="more-responsibilities">More responsibilities</h3><p>I have also become a social organizer for the UTC_Night cohort in the OSSU Discord community. This means I help facilitate the little community we have in that cohort. This happens primarily through the weekly check-ins, but there&apos;s usually a fair bit of chatter in the channel throughout the week too. I&apos;m happy to report I&apos;ve made a few more acquaintances in this cohort since becoming a social organizer, which is part of the reason I joined the OSSU community in the first place.</p><h3 id="next-up">Next up:</h3><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/10/image-3.png" class="kg-image" alt loading="lazy" width="1112" height="612" srcset="https://dustinbriles.com/content/images/size/w600/2024/10/image-3.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/10/image-3.png 1000w, https://dustinbriles.com/content/images/2024/10/image-3.png 1112w" sizes="(min-width: 720px) 720px"></figure><p>I loved calculus in high school, and I love it still, but the truth is that it&apos;s probably not going to make much of an appearance in the rest of my OSSU studies and possibly also my career. My next course is discrete math, which has A LOT to do with computer science. Calculus is listed as a prerequisite, but honestly I&apos;m not sure how much help it is going to be. </p><p>In any case, I&apos;m excited to learn some new math and hope to have another post here by early January!</p><h3 id></h3><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[I put way too much effort into my system locale]]></title><description><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-text"><strong>tl;dr</strong> - I wanted to display date and time in a certain format. Couldn&apos;t do it. Built a custom locale file based on the <strong>English (Sweden)</strong> locale. Feeling cute, might change my preference again later.</div></div><p>I recently installed <a href="https://asahilinux.org/?ref=dustinbriles.com">Fedora Asahi Remix</a> on my M2 Macbook Pro. The</p>]]></description><link>https://dustinbriles.com/i-put-way-too-much-effort-into-my-system-locale/</link><guid isPermaLink="false">65af109678393308204059af</guid><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Sat, 27 Jan 2024 03:30:02 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-text"><strong>tl;dr</strong> - I wanted to display date and time in a certain format. Couldn&apos;t do it. Built a custom locale file based on the <strong>English (Sweden)</strong> locale. Feeling cute, might change my preference again later.</div></div><p>I recently installed <a href="https://asahilinux.org/?ref=dustinbriles.com">Fedora Asahi Remix</a> on my M2 Macbook Pro. The installation was <em>super </em>smooth and honestly took me by surprise - I went from <code>curl</code> to a fully-operational Linux distro in about 5 minutes.</p><p>However, I was frustrated with the region and locale settings. I wanted to use the American English defaults for everything except for date and time, which should be formatted <code>yyyy-MM-dd</code> (year-month-day, numerical) and <code>HH:mm</code> (24 hour time with leading 0s), respectively.</p><p>As an aside: the point-and-click method for changing the region (<strong>System Settings -&gt; Region and Language</strong>) is kind of finicky - sometimes the changes take effect immediately, sometimes they take effect but the system settings show the old settings until you reboot, and sometimes the settings don&apos;t take effect at all until a reboot. </p><p>Anyway, I thought the C locale was close enough:</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/01/image.png" class="kg-image" alt loading="lazy" width="2000" height="464" srcset="https://dustinbriles.com/content/images/size/w600/2024/01/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/01/image.png 1000w, https://dustinbriles.com/content/images/size/w1600/2024/01/image.png 1600w, https://dustinbriles.com/content/images/2024/01/image.png 2034w" sizes="(min-width: 720px) 720px"></figure><p>This uses the three-letter abbreviation instead of the number of the month, which wasn&apos;t a deal breaker. However, for some reason it does include <em>seconds</em> on the time on the lock screen (<code>HH:mm:ss</code>) and I did <em>not</em> want this. Displaying seconds does consume more battery but mostly <em>I just didn&apos;t like it this way</em>. While probably not a big deal (how often is the lock screen actually displayed?), it&apos;s not what I wanted. </p><p>After a little more searching, I found exactly what I wanted in <strong>English (Sweden)</strong>, aka <code>en_SE</code>. </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/01/image-1.png" class="kg-image" alt loading="lazy" width="2000" height="372" srcset="https://dustinbriles.com/content/images/size/w600/2024/01/image-1.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/01/image-1.png 1000w, https://dustinbriles.com/content/images/size/w1600/2024/01/image-1.png 1600w, https://dustinbriles.com/content/images/2024/01/image-1.png 2042w" sizes="(min-width: 720px) 720px"></figure><p>The only problem: when attempting to select this locale, I received an error: <em>Could not find the system&apos;s available locales using the localectl tool. Please file a bug report about this at https://bugs.kds.org</em> </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/01/image-2.png" class="kg-image" alt loading="lazy" width="2000" height="75" srcset="https://dustinbriles.com/content/images/size/w600/2024/01/image-2.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/01/image-2.png 1000w, https://dustinbriles.com/content/images/size/w1600/2024/01/image-2.png 1600w, https://dustinbriles.com/content/images/size/w2400/2024/01/image-2.png 2400w" sizes="(min-width: 720px) 720px"></figure><p>Despite being listed as an option, The <code>en_SE</code> locale was not actually available to use, which was VERY confusing. How could it give me examples of what the current date and time would look like in this format if it didn&apos;t have access to that format? I also found a few other locales with this same listed-but-not-actually-useable issue. I did find this error referenced on the KDE bug tracker, but unfortunately I didn&apos;t find any easy solutions (e.g. <a href="https://bugs.kde.org/show_bug.cgi?id=479213&amp;ref=dustinbriles.com">https://bugs.kde.org/show_bug.cgi?id=479213</a>)</p><p>At this point I knew it was time to stop playing around with the GUI and use a terminal. I opened Konsole and ran <code>localectl list-locales | grep en</code> to show the list of available English locales on my system, and sure enough <code>en_SE</code> was not one of them. </p><p>I had never added a new locale to any operating system before, but I guess this was as good a time as ever to learn how. I read the <a href="https://docs.fedoraproject.org/en-US/fedora/latest/system-administrators-guide/basic-system-configuration/System_Locale_and_Keyboard_Configuration/?ref=dustinbriles.com#sect-Keyboard_Configuration-Resources">Fedora documentation for configuring the system locale</a>, read the <a href="https://man7.org/linux/man-pages/man5/locale.5.html?ref=dustinbriles.com">man page for locale files</a>, and luckily also stumbled across some other internet folk who had this same issue and a similar desire to make dates and times look the way they want. I learned that you can create a properly formatted locale definition file, build it with <code>localedef</code>, and make it available for use in the <code>localectl</code> tool (and also it&apos;ll actually work in the system settings GUI). </p><p>Coincidentally, at least one other person must have gone through this exact process with the <code>en_SE</code> locale because I found a gist with a locale definition and build instructions for a version of the <code>en_SE</code> locale. This locale file still had Swedish settings for telephone number formatting and default paper size, which I did not want, so I forked the gist and modified the locale definition and build instructions slightly:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://gist.github.com/el-pato/49b094855a04aafbca3ebb875475cdf9?ref=dustinbriles.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">en_SE locale</div><div class="kg-bookmark-description">en_SE locale. GitHub Gist: instantly share code, notes, and snippets.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://gist.github.com/fluidicon.png" alt><span class="kg-bookmark-author">Gist</span><span class="kg-bookmark-publisher">262588213843476</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://github.githubassets.com/assets/gist-og-image-54fd7dc0713e.png" alt></div></a></figure><p>I confirmed the freshly built, custom <code>en_SE</code> locale was available for use:</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/01/image-3.png" class="kg-image" alt loading="lazy" width="1116" height="850" srcset="https://dustinbriles.com/content/images/size/w600/2024/01/image-3.png 600w, https://dustinbriles.com/content/images/size/w1000/2024/01/image-3.png 1000w, https://dustinbriles.com/content/images/2024/01/image-3.png 1116w" sizes="(min-width: 720px) 720px"></figure><p>Time for the test - would activating this locale actually do what I want? I had already become familiar with the terminal-based locale configuration tools, so I decided to set the locale there rather than in the system settings GUI. I also decided to use the <code>en_SE</code> locale only for the time, rather than set it as the global locale. This pretty much negated the changes I made in my version of the locale definition file (since we&apos;re only using the date and time format anyway):</p><pre><code class="language-bash">sudo localectl set-locale LC_TIME=en_SE.UTF-8</code></pre><p>I had to restart for the changes to take effect, but I <em>finally</em> got what I wanted. </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2024/01/image-4.png" class="kg-image" alt loading="lazy" width="684" height="90" srcset="https://dustinbriles.com/content/images/size/w600/2024/01/image-4.png 600w, https://dustinbriles.com/content/images/2024/01/image-4.png 684w"></figure><p>This was a lot of work just to make the date and time look how I wanted, but I did learn a fair bit about locales in Linux. To be honest though, the date format in the C locale (<code>dd-mmm-yyyy</code>, e.g. <code>26 Jan 2024</code>) is growing on me. It totally removes any confusion about whether the first number refers to the day or the month (i.e. is it <code>MM-dd-yyyy</code> or <code>dd-MM-yyyy</code>?) The good news is now I know how to make a custom locale file to do what I want, because I still don&apos;t want to see seconds on my lock screen.</p><p>Alternatively, I could spend my time doing anything else. We&apos;ll see what happens.</p>]]></content:encoded></item><item><title><![CDATA[OSSU blog #7 - PLC]]></title><description><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #7 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="programming-languages-part-c">Programming Languages, Part C</h2><p>The last course in the Programming Languages course trilogy. I am going to</p>]]></description><link>https://dustinbriles.com/ossu-blog-7/</link><guid isPermaLink="false">64d9181a7839330820405844</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Sun, 13 Aug 2023 19:05:52 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #7 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="programming-languages-part-c">Programming Languages, Part C</h2><p>The last course in the Programming Languages course trilogy. I am going to miss learning from Dan Grossman. Programming Languages A, B, C were some of the most instructive, satisfying, and <em>fun</em> courses I&apos;ve ever taken. Here&apos;s to hoping (probably naively) that the rest of the OSSU curriculum is this awesome. </p><h3 id="my-progress">My progress</h3><p>I went on vacation in the middle of taking this course, so it took me about 2 weeks longer to complete than I initially estimated. I didn&apos;t lose <em>all</em> my momentum, but even after just a 10 day break I had to put in some real effort to get back up to speed before I could make forward progress again. Another reminder that consistency is <em>incredibly</em> important. </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/08/image.png" class="kg-image" alt loading="lazy" width="1220" height="604" srcset="https://dustinbriles.com/content/images/size/w600/2023/08/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/08/image.png 1000w, https://dustinbriles.com/content/images/2023/08/image.png 1220w" sizes="(min-width: 720px) 720px"></figure><h3 id="my-experience">My experience</h3><p>As good as this course was, I still came out with a much higher view of functional programming than object oriented programming. Now that it&apos;s been a few weeks and I&apos;ve had time to digest eveything, I have come to adopt the &quot;right tool for the job&quot; mentality, but OOP just did not land with me like functional programming did. </p><p>One of the assignments was to port an interpreter written in SML to Ruby. Over and over I found myself thinking that the Ruby version of the program was so much more complex and involved so much more ceremony than the SML version. I felt like I was spending a lot of my time in Ruby setting up to do the thing I wanted to do, instead of just doing the thing. It was also harder for me to follow the path my code would take, which consequently made debugging my Ruby code harder and cost more time than in SML. This echos my (limited) experience in other heavily OOP languages like C# (though debugging was a little easier in C# because of the tooling and it being staticly typed). However, I did feel like a wizard after nailing the double-dispatch portions of the porting assignment on my first attempt. </p><p>I also developed a <em>strong</em> preference for static typing over dynamic typing. There were a number of times I discovered a bug in my Ruby code after <em>way</em> too much debugging, only to realize that the problem was a minor typo or some other simple mistake that caused the program to misbehave in some weird way. The perfect example of this came from another student&apos;s solution while I was peer reviewing it (warning: this is a bit technical):</p><p>There was a method that should <em>never</em> return <strong>false,</strong> but was returning <strong>false</strong> in certain situations. The problem was here:</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/08/image-1.png" class="kg-image" alt loading="lazy" width="2000" height="159" srcset="https://dustinbriles.com/content/images/size/w600/2023/08/image-1.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/08/image-1.png 1000w, https://dustinbriles.com/content/images/size/w1600/2023/08/image-1.png 1600w, https://dustinbriles.com/content/images/2023/08/image-1.png 2000w" sizes="(min-width: 720px) 720px"></figure><p>The issue is in that one-line ternary expression. Evertything before the <strong>?</strong> should be wrapped in parenthesis, otherwise Ruby will evaluate the <strong>and </strong>of everything before the <strong>and</strong> keyword, and <em>everything </em>to the right of it. In other words, with the way this code is written, the <strong>and</strong> expression is the outermost operation, not the ternary expression - which will always return a Boolean value. The correct version of this code is this (notice the <strong>and</strong> expression wrapped in parenthesis):</p><pre><code class="language-ruby">(inbetween(@x, seg.x1, seg.x2) and inbetween(@y, seg.y1, seg.y2)) ? Point.new(@x, @y) : NoPoints.new
</code></pre>
<p>To top it off, this was buried beneath a few layers of double-dispatch shenanigans. It took me about an hour to figure this out, and who knows how much time was spent by the student who originally wrote the code - this didn&apos;t pass the given tests so I&apos;m guessing the student just gave up trying to fix it and turned it in. Static typing would have caught this <em>before runtime</em> and would have given a helpful error message.</p><h2 id="next-up">Next up</h2><p>I decided to take a small break from Core Programming and start on Core Math. I have fond memories of learning Calculus in high school and I am much more excited to revisit that than learn more about object-oriented programming. I could feel some resistence toward toward the thought of learning &quot;Object Oriented Design&quot; with Java, so I figure this was the better move to avoid burnout and preserve consistency.</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/08/image-2.png" class="kg-image" alt loading="lazy" width="1220" height="632" srcset="https://dustinbriles.com/content/images/size/w600/2023/08/image-2.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/08/image-2.png 1000w, https://dustinbriles.com/content/images/2023/08/image-2.png 1220w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[OSSU blog #6 - PLB]]></title><description><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #6 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="programming-languages-part-b">Programming Languages, Part B</h2><p>Programming Languages Part A, Part B, and Part C are really one whole</p>]]></description><link>https://dustinbriles.com/ossu-blog-6/</link><guid isPermaLink="false">649b79bf78393308204056e2</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Wed, 28 Jun 2023 00:58:38 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #6 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="programming-languages-part-b">Programming Languages, Part B</h2><p>Programming Languages Part A, Part B, and Part C are really one whole course broken up into three pieces, so it was both useful and satisfying that I was able to keep up the momentum from <a href="https://dustinbriles.com/ossu-blog-post-5/">Part A</a>. I finished this course exactly on time:</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/06/image-6.png" class="kg-image" alt loading="lazy" width="1280" height="598" srcset="https://dustinbriles.com/content/images/size/w600/2023/06/image-6.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/06/image-6.png 1000w, https://dustinbriles.com/content/images/2023/06/image-6.png 1280w" sizes="(min-width: 720px) 720px"></figure><p>The course was a lot of fun, but I have to be honest and say that programming in Racket was not nearly as fun as programming in SML. Some possible reasons:</p><ul><li>The amount of parentheses can get kind of ridiculous. Relevant xkcd: <a href="https://xkcd.com/297/?ref=dustinbriles.com">https://xkcd.com/297/</a></li><li>Maybe I&apos;m spoiled by how nice SML&apos;s syntax (and especially case expressions) are</li><li>Racket isn&apos;t novel to me like SML was (the How to Code courses use something <em>very</em> similar to Racket)</li><li>This course had me doing more complicated things than I was doing in Part A with SML</li><li>I enjoyed the static typing in SML more than the dynamic typing we used in Racket. Things just felt more neat, tidy, and orderly in a static type system.</li></ul><p>Whatever the reason(s) were: I was less happy programming with Racket in this course than SML in Part A, but I still enjoyed myself.</p><p>Just like in previous courses, I had a number of &quot;a ha&quot; moments where things that were confusing before suddenly clicked. I love when that happens. I feel like my understanding of computer science and programming has improved <em>dramatically</em> in just the four courses I&apos;ve taken so far, even though none of them are particularly deep. Among the &quot;a ha&quot; moments in this course were:</p><ul><li>how promises work</li><li>how streams work</li><li>memoization (function caching)</li><li>(related to the above) even in a functional paradigm, mutation is sometimes genuinely useful, or even necessary</li></ul><p>The final homework in this course has you writing a very basic interpreter for a &quot;language&quot; created solely for the purpose of this homework, aptly called &quot;Made Up Programming Language&quot;, or MUPL. In the past I would sometimes read posts and articles about someone writing an interpreter for some language and it would feel so far above my capabilities and knowledge that I wouldn&apos;t even know where to start. To be honest, I wasn&apos;t even sure what an &quot;interpreter&quot; was. Obviously writing this <em>incredibly</em> basic interpreter for an <em>incredibly<strong> </strong></em>basic language is nothing to brag about, but I no longer feel like &quot;interpreters&quot; is a topic reserved for higher life forms. I genuinely had a blast with this homework assignment.</p><h2 id="next-up">Next up:</h2><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/06/image-7.png" class="kg-image" alt loading="lazy" width="1280" height="598" srcset="https://dustinbriles.com/content/images/size/w600/2023/06/image-7.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/06/image-7.png 1000w, https://dustinbriles.com/content/images/2023/06/image-7.png 1280w" sizes="(min-width: 720px) 720px"></figure><p>Programming Languages, Part C is the last course in this series. It uses Ruby and aims to teach Object Oriented Programming with a dynamic type system and contrast it with Functional Programming. At this point I am <em>very</em> much on the functional programming train, so we&apos;ll see if Dan Grossman (the instructor for these courses) can convince me that OOP is just as awesome. OOP is what I learned when I first started programming, so the novelty probably won&apos;t be there like it was with FP, but I am excited nonetheless. </p><p>I intend to keep this pace going through Part C as well. Hopefully you&apos;ll see another blog post from me in mid to late July!</p>]]></content:encoded></item><item><title><![CDATA[OSSU blog #5 - PLA]]></title><description><![CDATA[This is the first blog post I've written about OSSU where I don't have to explain why I failed so miserably to meet my goals, and that...]]></description><link>https://dustinbriles.com/ossu-blog-post-5/</link><guid isPermaLink="false">647a8dd641da58078f7c01d1</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Sat, 03 Jun 2023 19:06:48 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #5 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="programming-languages-part-a">Programming Languages, Part A</h2><p>This is the first blog post I&apos;ve written about OSSU where I don&apos;t have to explain why I failed so miserably to meet my goals, and that feels <em>really</em> good.<em> </em>I finished the course about a week earlier than planned:</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/06/image.png" class="kg-image" alt loading="lazy" width="634" height="304" srcset="https://dustinbriles.com/content/images/size/w600/2023/06/image.png 600w, https://dustinbriles.com/content/images/2023/06/image.png 634w"></figure><p>This is another course that I thoroughly enjoyed. It hit that sweet spot where the content was difficult enough to be challenging, but not so difficult that it was discouraging. </p><h3 id="software-setup">Software setup</h3><p>I completed this course using both a MacBook and a Windows 10 laptop. Setup was not nearly as hard as the course made it sound, though that might be in part because I used Visual Studio Code instead of Emacs. I already use VSCode on a daily basis and didn&apos;t see a good reason to learn Emacs.</p><p>Setup on Windows was <em>really</em> easy. I just installed SML and this extension (for VSCode): <a href="https://marketplace.visualstudio.com/items?itemName=vrjuliao.sml-environment&amp;ref=dustinbriles.com">SML Environment</a>. I used the SML REPL from the terminal in VSCode.</p><p>Setup on MacOS was a little more complicated, but not terribly so:</p><ul><li>SML installed fine, though it uses Rosetta since (as of now) there is no native SML compiler for Apple Silicon. I did not experience any performance issues or bugs but the stuff you program in this course is not terribly large or complicated, so I can&apos;t say whether or not the Rosetta layer would be an issue if you were doing something more complex.</li><li>The default shell in MacOS is <strong>zsh</strong> now, not <strong>bash</strong>. All I had to do was add a <strong>PATH</strong> export in my <strong>~/.zshrc</strong> file: <br><em>export PATH=&quot;$PATH:/usr/local/smlnj/bin&quot;</em></li><li>There was an issue using command history (actually anything involving the arrow keys) in the SML REPL. For example, if I pressed the up arrow key to get my previous command, a bunch of random characters would appear instead. Evidently <a href="https://stackoverflow.com/questions/1911861/how-to-fix-the-sml-nj-interactive-system-to-use-arrow-keys?ref=dustinbriles.com">this has been an issue for a <em>long</em> time</a>. My solution was to install <strong>rlwrap</strong> and then run the SML REPL like this: <strong>rlwrap sml</strong></li></ul><p>I created a new repo in Github and used git to keep my notes and homework in sync between my Windows and Mac laptops.</p><h3 id="course-content">Course content</h3><p>I settled into a routine pretty quickly, and I think it worked pretty well:</p><ol><li>Watch all videos at 1.5x speed, taking notes and programming along. Rewatch any videos where the material was harder to grasp.</li><li>Skim through the section summary, paying particular attention to topics that were difficult to understand in the videos.</li><li>Do the homework, referencing the section summary and <a href="https://smlfamily.github.io/Basis/index.html?ref=dustinbriles.com">SML language documentation</a> when I get stuck.</li></ol><p>The homework assignments in this course were <em>incredibly</em> important. I started each one with a 70-80% grasp of the week&apos;s material and finished feeling <em>very </em>confident in the material. Everything sort of clicked into place as I worked through the problems. This was particularly true of concepts like lexical scope and closures.</p><p>In my opinion the peer reviews were almost equally important. I didn&apos;t get a lot of good peer review feedback - sometimes it was even frustrating - but the process of reading other students&apos; code and critiqueing it was really helpful. I saw code that was both worse and better than my own, and then had to articulate what specifically was good or bad about that code. This granted me additional clarity that I didn&apos;t have even after completing the homework myself.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://dustinbriles.com/content/images/2023/06/image-2.png" class="kg-image" alt loading="lazy" width="707" height="145" srcset="https://dustinbriles.com/content/images/size/w600/2023/06/image-2.png 600w, https://dustinbriles.com/content/images/2023/06/image-2.png 707w"><figcaption>Sometimes the peer reviews were frustrating... (from my journal in Notion)</figcaption></figure><h3 id="tests-are-still-really-important">Tests are still really important</h3><p>The test file you get for each homework is nowhere near exhaustive. You are expected to write more tests for each of your functions. I passed each homework the first time I turned it in, and this would not have happened if I didn&apos;t first write a bunch of good tests for each of my functions. These tests also helped me identify issues with other students&apos; code during peer reviews.</p><p>I got slightly lazy about this in homework 3, and it cost me some time and effort. You have to write a helper function called <strong>longest_string_helper </strong>and the basic test file had no test for this function. I decided to skip writing tests for this function as well. When I turned in my work to the autograder, I passed (i.e. scored more than 80%) but was surprised to see that I was docked points even though all my tests passed. </p><p>After carefully re-reading the relevant homework problem, looking at the sample solution, and looking at the type that SML inferred for my function, I realized that I had slightly misunderstood what the <strong>longest_string_helper</strong> function was supposed to do. In short, I needed to compare the size of two strings in my helper function, not in the functions that <em>called</em> my helper function. If I had written even a single good test for <strong>longest_string_helper</strong> it&apos;s likely I would have realized this immediately, because it probably would not have even type-checked. I wish I could show you the specifics here, but sharing this code is against the TOS for the course.</p><h2 id="next-up">Next up:</h2><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/06/image-5.png" class="kg-image" alt loading="lazy" width="650" height="297" srcset="https://dustinbriles.com/content/images/size/w600/2023/06/image-5.png 600w, https://dustinbriles.com/content/images/2023/06/image-5.png 650w"></figure><p>I jumped right into the next course, Programming Languages Part B, which should take about 3 weeks to complete. I am really enjoying the momentum I have right now, and while I don&apos;t expect to complete <em>every</em> OSSU course ahead of schedule, I am hoping to complete them at least within a week of my estimated finish date. Here&apos;s to hoping the 4-months-overdue phase of my OSSU studies was indeed just a phase. </p>]]></content:encoded></item><item><title><![CDATA[OSSU blog #4]]></title><description><![CDATA[Where have I been?
I last posted about OSSU on January 10th of this year. Almost four months ago. I wish I could say that in that time I was...]]></description><link>https://dustinbriles.com/ossu-blog-4/</link><guid isPermaLink="false">6456a1ca41da58078f7bff6a</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Sat, 06 May 2023 21:56:19 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #4 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="where-have-i-been">Where have I been?</h2><p>I last posted about OSSU on January 10th of this year. Almost four months ago. I wish I could say that in that time I was tearing through courses and Getting Stuff Done&#x2122; but the truth is:</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/05/image.png" class="kg-image" alt loading="lazy" width="1172" height="610" srcset="https://dustinbriles.com/content/images/size/w600/2023/05/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/05/image.png 1000w, https://dustinbriles.com/content/images/2023/05/image.png 1172w" sizes="(min-width: 720px) 720px"></figure><p>It took me over four months to finish a single course. I publicly committed to ~15 hours/week of study and a blog post every month. Obviously neither of these happened, and I&apos;m pretty embarrassed about it. Some contributing factors to this:</p><ul><li>At work, I had some significant projects pop up. Among them was dealing with the fallout from the <a href="https://blog.lastpass.com/2022/12/notice-of-recent-security-incident/?ref=dustinbriles.com">LastPass breach</a> (we moved to 1Password), a SharePoint migration, and <em>another</em> vendor incident. Between these things, other projects, and the normal day-to-day stuff, much of the the time I had set aside for OSSU ended up used to get other stuff done. </li><li>I had some pretty serious stuff come up in my personal life. I&apos;m not going to go into detail, but OSSU took a backseat for a while.</li><li>Between the work stuff and personal stuff, there were two periods of about a month where I did not work on the How to Code: Complex Data course at all. Consequently, when I got back into the course I had to spend some time re-familiarizing myself with the course content. I think I went through chapter 12 of the course two or three times. </li></ul><p>Moving forward I&apos;m making the following adjustments to my routine:</p><ol><li>Shooting for 10 hours every week (instead of 15). This was something I had considered after my last blog post too. It is honestly just a more realistic goal right now.</li><li>A blog post after every course (instead of every month). This is a more natural place to take a short break and I&apos;m typically in a more reflective mood after completing something anyway.</li></ol><h2 id="how-to-code-complex-data">How to Code: Complex Data</h2><p>I really enjoyed this course. I said something similar at the end of the previous course, but I really do understand the functional programming hype now. I have plenty more to learn, but this course challenged me in ways that were sometimes frustrating, but also fun and rewarding. </p><p>There&apos;s a project where you build a Sudoku solver. It sounds like a daunting project at first, but if you break the problem down into small chunks and follow the recipes, it kind of just comes together. There were many times during this course where things felt magical and reminded me of why I like programming so much in the first place. </p><p>While I do understand functional programming a little better now, it is still pretty foreign to me. This was, honestly, a positive thing. In <a href="https://dustinbriles.com/ossu-blog-post-3/">OSSU blog #3</a> I said: &quot;I have a tendency to just sit down and start working on the problem at hand, without much effort to plan things out first&quot;. While the first How to Code course offered <em>strong incentives</em> to think hard about the problem you were solving before you solve it, this course made it <em>impossible</em> to do otherwise - at least for me. </p><p>Learning about abstract functions was also a big deal. I&apos;ve written plenty of javascript and python, but my understanding of <strong>map()</strong> was limited to: &quot;everyone says I should use <strong>map()</strong> if I need to call the same function on all elements in a list&quot;. After completing this course not only do I have a much better understanding of what <strong>map()</strong> does and why I should use it, but I have gained that same understanding for abstract functions in general. Functions like <strong>map()</strong>, <strong>filter()</strong>, and <strong>sum()</strong> no longer seem like black magic to me. </p><p>I also feel like I have a much better grasp on recursion in general. Even as I started this course it still felt like magic. I&apos;m sure the next course (Programming Languages, Part A) will be humbling, but for now I&apos;m enjoying it. </p><p>Similar to the abstract functions revelation, I also know what people mean when they talk about trees and graphs as data structures. It wasn&apos;t quite the brain-melting experience I had as when abstract functions clicked with me, but I suspect it&apos;ll be at least as important later on.</p><h2 id="discord">Discord</h2><p>The OSSU community on Discord was really helpful while I took this course. I had some people check my work on a few assignments and I can&apos;t overstate how beneficial it is to get constructive feedback while you&apos;re learning something new. &#xA0;</p><p>My attendance at the weekly check-ins has still been pretty abysmal. Stuff in my personal life has calmed down a bit so my attendance should get better. I am also considering a switch to another cohort with a different weekly check-in time. </p><h2 id="whats-next">What&apos;s next?</h2><p>I&apos;m diving right into Programming Languages, Part A with much excitement. Hopefully another blog post in 5-6 weeks!</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/05/image-1.png" class="kg-image" alt loading="lazy" width="1236" height="592" srcset="https://dustinbriles.com/content/images/size/w600/2023/05/image-1.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/05/image-1.png 1000w, https://dustinbriles.com/content/images/2023/05/image-1.png 1236w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[OSSU blog #3]]></title><description><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #3 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="how-to-code-simple-data">How to Code: Simple Data</h2><p><a href="https://www.edx.org/course/how-to-code-simple-data?ref=dustinbriles.com">This course</a> was next up after the math prerequisites. A large chunk</p>]]></description><link>https://dustinbriles.com/ossu-blog-post-3/</link><guid isPermaLink="false">63bbffe048e2870623617eaa</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Wed, 11 Jan 2023 02:19:16 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #3 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> for the full background on why I&apos;m doing this</div></div><h2 id="how-to-code-simple-data">How to Code: Simple Data</h2><p><a href="https://www.edx.org/course/how-to-code-simple-data?ref=dustinbriles.com">This course</a> was next up after the math prerequisites. A large chunk of this course involved information that was completely new to me, which on one hand was a bit surprising given my existing technical background, but on the other hand I had never done any <em>real</em> work with functional programming. Object-oriented programming and Java were the standard when I was in college the first time. </p><p>After taking this course, I think I understand some of the hype behind functional programming. There is a certain elegance about it, and at least for me, recursive functions are kind of magical. That feeling hasn&apos;t worn off too much even as I work through the next course (How to Code: Complex Data).</p><p>This course also revealed (and helped correct) some poor development habits that had crept in over the years:</p><h3 id="make-sure-the-problem-is-well-defined">Make sure the problem is well-defined</h3><p>I don&apos;t do this <em>all</em> the time, but when I program I have a tendency to just sit down and start working on the problem at hand, without much effort to plan things out first. Consequently, I often end up rewriting things from scratch and changing design decisions frequently as I go. I know that this is not the optimal way to do it, but things usually work out.</p><p>This course, like any good instructional course, emphasizes the opposite. Before you write code, you need to ask questions like: What is the problem I am trying to solve? What specific` things does this function need to do? What constants do I need? What is the function changing? Should I sketch out the flow of the program first?</p><p>These are basic concepts when tackling <em>any</em> problem. They are not unique to programming. I try to plan well in all areas of my personal and work life - and yet, I had become undisciplined in this specific area. As I solved the small, relatively simple problems in this course, I was reminded that proper planning goes a <em>long</em> way. It&apos;s hard to describe how important this is unless you&apos;ve experienced the boost in productivity for yourself. </p><h3 id="write-good-tests-and-write-them-first">Write good tests, and write them first</h3><p>I&apos;ve done a little bit of work with testing frameworks over the years, but this course forces you to write tests before your functions are written. This was <em>extremely</em> helpful in two ways (there are probably more ways but these were the most obvious to me): </p><ol><li>It makes writing the function easier because you have a clearer idea of what you want the function to do</li><li>It&apos;s easier to catch bugs and unexpected behavior if you make changes in the future. &#xA0; </li></ol><h3 id="bias-to-simpler-functions">Bias to simpler functions</h3><p>When I say &quot;simple&quot; I mean it as the opposite of &quot;complex&quot;. A single function should not try to do too much. Functions that only do a few things are preferable to functions that try to do a bunch of things in one place. Simpler functions are, in general, easier to write, maintain, and understand. </p><p>I will sometimes write functions that are big, long, sprawling messes and leave them that way. This course helped remind me that it is a good idea to not do that. </p><h2 id="study-habits-and-routine">Study habits and routine</h2><p>The plan:</p><ol><li>Study a minimum of 15 hours every week</li><li>Work through one course at a time, and definitely no more than two at a time.</li><li>Actively participate in the Discord community. &#xA0;</li></ol><h3 id="15-hoursweek">15 hours/week</h3><p>I struggled with this one the last few months. There was a period of about 20 days in November where I didn&apos;t work on OSSU at all. I took a week off around Thanksgiving when I was out of state with family, but for over a month after we got back at least one person in my immediate family was sick. I personally got sick three times between late November and early January, one of which was with whatever variant of COVID is going around. </p><p>We&apos;ve got two young kids, one of which is in school, and the weather was changing so on one hand this is kind of expected, but on the other hand three times in a month is a lot. After I got sick the first time, I fell off track with my sleeping and exercise habits. I think this may have played a part in weakening my immune system. I&apos;m back on track now and I&apos;ve also started to implement some of the habits I learned in these Huberman Lab podcasts: </p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/nm1TxQj9IsQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Master Your Sleep &amp; Be More Alert When Awake | Huberman Lab Podcast #2"></iframe></figure><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/h2aWYjSA1Jc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Sleep Toolkit: Tools for Optimizing Sleep &amp; Sleep-Wake Timing | Huberman Lab Podcast #84"></iframe></figure><p>It took me over two months to complete How to Code: Simple Data. This is far too slow a pace. My pace has been better since I started How to Code: Complex Data, but I&apos;m really going need to drive forward harder if I want to complete OSSU in two years. </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2023/01/image.png" class="kg-image" alt loading="lazy" width="1226" height="240" srcset="https://dustinbriles.com/content/images/size/w600/2023/01/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2023/01/image.png 1000w, https://dustinbriles.com/content/images/2023/01/image.png 1226w" sizes="(min-width: 720px) 720px"></figure><h3 id="one-course-at-a-time">One course at a time</h3><p>No problems with this one, as you might expect. I struggled to complete a single course in two months, so I&apos;m not really feeling tempted to add more courses to my workload.</p><h3 id="participate-in-the-discord-community">Participate in the Discord community</h3><p>The weekly check-ins for the UTC Night cohort have been text-only for a while, which is kind of disappointing, but I&apos;m not sure I would have attended voice chats much either. There&apos;s been a push recently for more voice chat check-ins, and I&apos;d like to do better about attending them. </p><p>That said, I have been a bit more active on Discord than when I was taking the math prerequisites. It is a legitimately helpful place for getting your questions answered. I even answered a question or two myself, which gave me a nice feeling of validation after taking so long to complete How to Code: Simple Data. </p><h2 id="whats-next">What&apos;s next?</h2><p>As I write this, I&apos;m working steadily through the next course: How to Code: Complex Data. I am progressing at a decent pace and am really enjoying the course so far. All the (frankly annoying) work you put in to get disciplined about function signatures, type comments, etc in HtC: Simple Data really pays off in this course.</p><p>I missed a few months of blogging (this post was due in November), but I&apos;m hopeful that things are back on track now.</p><p></p>]]></content:encoded></item><item><title><![CDATA[OSSU blog #2 - the math prerequisites]]></title><description><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #2 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> if you want to know more about why I&apos;m going through OSSU and blogging about it.</div></div><h2 id="i-forgot-a-lot-of-math">I forgot a lot of math</h2><p>The first thing I</p>]]></description><link>https://dustinbriles.com/ossu-blog-post-2/</link><guid isPermaLink="false">6345c8bc568f8f0815065ae3</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Mon, 17 Oct 2022 22:00:23 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F449;</div><div class="kg-callout-text">This is post #2 in a series I&apos;m writing as I go through the OSSU curriculum. <a href="https://dustinbriles.com/ossu-blog-1/">Read post #1</a> if you want to know more about why I&apos;m going through OSSU and blogging about it.</div></div><h2 id="i-forgot-a-lot-of-math">I forgot a lot of math</h2><p>The first thing I did for OSSU (other than the &quot;learning how to learn&quot; stuff - see <a href="https://dustinbriles.com/ossu-blog-1/">blog post #1</a>) was tackle <a href="https://github.com/ossu/computer-science/blob/master/FAQ.md?ref=dustinbriles.com#how-can-i-review-the-math-prerequisites">the math prerequisites</a>. I considered &quot;passing&quot; to be when I could do the course challenges in Khan Academy and score at least 80%. It took me ~13 weeks to get this done.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://dustinbriles.com/content/images/2022/10/image.png" class="kg-image" alt loading="lazy" width="1713" height="377" srcset="https://dustinbriles.com/content/images/size/w600/2022/10/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2022/10/image.png 1000w, https://dustinbriles.com/content/images/size/w1600/2022/10/image.png 1600w, https://dustinbriles.com/content/images/2022/10/image.png 1713w" sizes="(min-width: 720px) 720px"><figcaption>My updated OSSU course tracker</figcaption></figure><p>As you can see in the screenshot above, I <em>greatly</em> underestimated how long it would take for me to complete the math prerequisites. The <strong>estimated finish date</strong> was based on how quickly I was progressing through <strong>Arithmetic</strong>,<strong> Geometry</strong>, and <strong>Pre-algebra</strong> in Khan Academy, which in hindsight was a silly thing to do. My progress got <em>much</em> slower as I got about halfway through <strong>High School Math 2</strong>, and <strong>High School Math 3</strong> alone took me 6 weeks to complete. </p><p>The most frustrating part of High School Math 2 and 3 was that I had forgotten <em>just enough</em> from high school that I needed to review most sections in their entirety, but everything was pretty easy after I relearned it. When I graduated high school (over ten years ago) I had done enough math to pass the AP exam for Calc 2, so sitting through videos and working practice problems about the side-angle-side theorem and converting radians to degrees was pretty boring - but I had legitimately forgotten how to do that stuff, so it was necessary.</p><p>I probably could have skipped more sections than I did, but this would have contradicted my goal of learning computer science well. If math is important in computer science (and it is), I want to make sure my foundation is rock solid. I even went as far as making Anki cards for some of the formulas and concepts as I was relearning them, just to make sure they <em>really</em> stuck.</p><h2 id="i-have-already-benefitted-professionally-from-ossu">I have already benefitted professionally from OSSU</h2><p>I recently had to do a <em>deep</em> dive into some technical indicators involved in our financial trading systems at <a href="https://www.semwealth.com/?ref=dustinbriles.com">SEM</a> (where I work). This involved figuring out the inner workings of a fairly custom exponential moving average function and then reinplementing it myself. </p><p>I happened to be working through summations and series in Khan Academy at the exact same time, which was perfect timing. I can say, without a doubt, that revisiting those math concepts helped me complete the task faster and with far more confidence.</p><h2 id="study-habits-and-routine">Study habits and routine</h2><p>I had a section in post #1 called <strong><a href="https://dustinbriles.com/ossu-blog-1/#how-am-i-going-to-tackle-the-cirriculum">How am I going to tackle the curriculum?</a> </strong>Long story short, I planned to:</p><ol><li>Study a minimum of 15 hours every week</li><li>Work through one course at a time, and definitely no more than two at a time.</li><li>Actively participate in the Discord community. &#xA0;</li></ol><p>It&apos;s been about 6 weeks since the last OSSU blog post. Here&apos;s how things have worked out since then:</p><h3 id="15-hoursweek">15 hours/week</h3><p>I was really good about this at first. My wife and I are usually pretty intentional about planning our lives each week - we sit down with our calendar, our list of activities, things we want to accomplish, etc and schedule all of it - including blocking out chunks of time for me to study without any interruptions. I was also exercising regularly, getting up in the morning and taking cold showers, and trying to get 8 hours of sleep every night. </p><p>At some point in September, my wife and I both got sick at the same time. It lasted for a few days and needless to say - especially with young kids in the house - it was a rough week. As you might expect, it also totally upended our routines. After we got better, it was hard to jump back into how things were before. I should have anticipated this and prepared for it, but even after getting better I didn&apos;t resume my exercise routines, I stopped making sure I was going to bed on time, and I was lax about completing my daily tasks. To nobody&apos;s surprise, this affected my ability to wake up early, my energy levels, and my motivation. I didn&apos;t completely stop working on OSSU (or the other things in my life), but my general level of productivity was <em>far</em> lower than before we got sick. I think there were 4 straight weeks where I did not hit 15 hours of studying, which certainly played a part in why High School Math 3 took me six weeks to complete. &#xA0; &#xA0; </p><p>I&apos;m pretty much back on track now, and I&apos;m also done slogging through the math prerequisites - so I&apos;m expecting the next month to be much more productive. </p><h3 id="one-course-at-a-time">One course at a time</h3><p>I had no issues sticking with this, with one minor exception: in late August I was feeling a little burnt out on the math prerequisites. This is something I anticipated, and as I talked about in OSSU post #1 the solution was to do two courses in parallel so that I could bounce between them when I was feeling unmotivated. With this in mind, I started the <strong>How to Code: Simple Data</strong> course on EdX.</p><p>Shortly afterward, I regained my motivation for math and switched back to concentrating on the math prerequisite courses exclusively. However, the audit track for the EdX course (i.e., the option that allows you to take the course for free) expires after a certain amount of time. With some courses you can just re-enroll after the expiration date, but with other courses you can&apos;t regain access unless you pay for the verified track. This course was the latter.</p><p>My solution was to create a second EdX account using plus addressing and enroll in the course under that account. If you don&apos;t know what plus addressing is, a quick explanation is: if you have an email account <strong>test@example.com</strong>, you can add a <strong>+</strong> and an arbitrary string after your username but email will still be delivered to the same inbox. In other words, I could sign up to EdX a second time with the address <strong>test+edx2@example.com</strong> because EdX considers it a different email address than <strong>test@example.com</strong>, but any email sent to the plus address variation will go to the exact same inbox. I essentually created two different EdX accounts that are both tied to the same email account.</p><h3 id="actively-participate-in-the-discord-community">Actively participate in the Discord community</h3><p>I was pretty consistent with this, though the &quot;UTC Night&quot; cohort was smaller than I expected. I had an audio call with one member the first week I joined, but the cohort has done text check-ins since then. I also try to check in daily on the channels for whichever course I&apos;m currently working on, but I haven&apos;t found a lot of opportunity to say something useful or ask a good question yet. I&apos;m guessing this will change as I move into the &quot;proper&quot; OSSU curriculum now that I&apos;m done with the math prerequisites. </p><p>That&apos;s all I&apos;ve got for this update. I still plan to blog about once per month, so look for update #3 some time in November. Thanks for reading!<br></p>]]></content:encoded></item><item><title><![CDATA[OSSU blog #1 - why and how]]></title><description><![CDATA[<p>I recently committed myself to completing the <a href="https://github.com/ossu/computer-science?ref=dustinbriles.com">OSSU computer science cirriculum</a>. This post is the first in (what I hope to be) a series of blog posts that document my journey. This post will address what led me to OSSU, why I decided to document my experience in public, and</p>]]></description><link>https://dustinbriles.com/ossu-blog-1/</link><guid isPermaLink="false">62ed599cf47f940f08ffe3b3</guid><category><![CDATA[OSSU]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Tue, 06 Sep 2022 01:07:42 GMT</pubDate><content:encoded><![CDATA[<p>I recently committed myself to completing the <a href="https://github.com/ossu/computer-science?ref=dustinbriles.com">OSSU computer science cirriculum</a>. This post is the first in (what I hope to be) a series of blog posts that document my journey. This post will address what led me to OSSU, why I decided to document my experience in public, and how I intend to tackle the cirriculum. </p><h2 id="why-am-i-learning-computer-science">Why am I learning computer science?</h2><p>A little backstory: I always knew that my career would involve playing guitar or messing with computers. The first time I tried college, my plan was to major in guitar performance and minor in computer science. Due to a bunch of immature decisions, this didn&apos;t work out and I ended up dropping out and falling into traditional sysadmin IT work. I liked the work I was doing well enough - and I did eventually get a degree in Information Technology from <a href="https://www.wgu.edu/?ref=dustinbriles.com">WGU</a> - but this was not my first choice; I like programming far more than taking care of infrastructure.</p><p>Fast forward to today: I work for <a href="https://www.semwealth.com/?ref=dustinbriles.com">SEM Wealth Management</a>, which has a number of proprietary financial trading systems that have been developed over the better part of 30 years. The trading team at SEM recently decided it was time to rework and modernize some of the technology behind these trading systems. I was asked to participate in this, and so I started brushing up on my Python. </p><p>I&apos;ve been <em>loving </em>it. I&apos;m doing a lot of programming and learning new things every day. However, as I attempt to understand and develop new features for these trading systems, I am finding myself at the edge of my knowledge and abilities pretty regularly. Given that this project involves a lot of math and a lot of programming, it seemed appropriate to finally finish my education in computer science - which, with the benefit of hindsight, is what I should have done the first time I went to college. If anyone in my family is reading this: yes, I admit you were right.</p><h2 id="why-ossu-in-particular">Why OSSU in particular?</h2><p>I initially considered going back to college to get a formal degree in Computer Science, but the ROI for that at this point in my life is not very high. Formal education is not cheap and there are two main reasons I don&apos;t think the value of a CS degree justifies the cost in my current situation:</p><ol><li><strong>I need flexibility.</strong> I&apos;m married, have kids, work a full time job, and the closest university is 30 minutes away. I could certainly make it happen, but attending classes and doing school work on a rigid schedule would have a high cost. There are plenty of online degree programs for computer science, which would afford me the flexibility I need, but that brings us to point #2</li><li><strong>I don&apos;t need another credential.</strong> My singular concern is developing competency. I&apos;m not looking for another job and even if I was, my resume, portfolio, and ability to demonstrate skills and knowledge would matter <em>far</em> more than having another bachelor&apos;s degree in a field so closely related to my first one. &#xA0; </li></ol><p>With that being said, the credential you get at the end is just one benefit of college. A formal program also gives you a community, accountability, and direct access to instructors (i.e. mentorship). These things are significant. I knew that if I wasn&apos;t going to go through a formal CS program I needed to try and replicate the benefits of one as much as possible. I like to think of myself as a self-motivated autodidact, but the truth is that I <em>need</em> to be surrounded both by people who are in the trenches with me and people who have already done what I am doing. I&#x2019;m not special and need guidance, accountability, and mentorship as much as anyone else. </p><p>I started researching what my options were. I initially entertained the idea of doing a bootcamp, but the goals of a bootcamp aren&apos;t really aligned with my goals; bootcamps seem to be more like jobs programs than formal education programs. I eventually narrowed my options down to OSSU and <a href="https://teachyourselfcs.com/?ref=dustinbriles.com">Teach Yourself Computer Science</a>, and ultimately OSSU won out because it fit my criteria best. You can read the <a href="https://github.com/ossu/computer-science?ref=dustinbriles.com#summary">summary section in the OSSU README</a> for more details, but in short:</p><ul><li>The OSSU cirriculum is intended to meet a <a href="https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf?ref=dustinbriles.com">formally defined set of guidelines for what makes a good computer science program</a></li><li>Courses are either self-paced or run multiple times per year. </li><li>Courses usually have homework and assignments. Many of the courses require you to pay to get the assignments graded by a real person, though.</li><li>There is an active OSSU Discord server with channels for specific courses. There are also a few cohort communities that hold weekly check-in meetings. A number of people knowledgeable in CS and the OSSU cirriculum are also hanging out in the server - at least one of them has the server role of &quot;Tutor&quot;.</li></ul><p>Teach Yourself Computer Science looked good, but unfortunately it lacks a community. As I mentioned above, a community and at least some level of accountability are <em>very</em> important to me. </p><h2 id="why-am-i-blogging-about-this">Why am I blogging about this?</h2><ol><li><strong>Accountability</strong>. I know that at some point I&apos;m going to want to quit. Maybe it&apos;ll be because of some situation in my personal life. Maybe I&apos;ll get really frustrated with one of the courses. I won&apos;t be on a college campus every day around other motivated people. I&apos;m not paying any money to take these classes. My job isn&apos;t on the line if I don&apos;t complete the cirriculum. There are plenty of things that could affect my motivation. Blogging about my journey is a way to introduce some accountability - if I tell my friends, family, and Discord community that I will be posting regularly about OSSU, they will expect me to do just that. If I stop, there is a pool of people who could ask &quot;what happened?&quot; and &quot;why did you quit?&quot;.</li><li><strong>It helps establish a routine. </strong>Not much to say here - establishing routines is a good way to deal with the times that you don&apos;t feel motivated. </li><li><strong>I get to practice communicating.</strong> It usually takes me a while - far longer than I&apos;d like - to organize my thoughts into something communicable. For example, it&apos;s been about 3 weeks since I first started this blog post. I also tend to be overly verbose and the essence of what I&apos;m saying is often lost in the noise. Blogging regularly gives me an opportunity to practice this skill and get better at communicating<em>.</em></li></ol><h2 id="how-am-i-going-to-tackle-the-cirriculum">How am I going to tackle the cirriculum?</h2><p>I think there are three main things here:</p><ol><li>Organizing my time</li><li>Organizing my studies</li><li>Participation in the community</li></ol><h3 id="organizing-my-time">Organizing my time</h3><p>The OSSU README says you can finish the cirriculum &quot;within about 2 years if you plan carefully and devote roughly 20 hours/week to your studies&quot;. I&apos;m going to shoot for 15 hours per week <em>at a minimum</em>. I think this is incredibly realistic, and that&apos;s intentional; I don&apos;t want to set a lofty goal and then feel unmotivated when I inevitably fail to meet that goal. Here&apos;s how I plan to spend my time on OSSU during the week:</p><ol><li>I have permission from my boss to spend up to 1.5 hours per day studying at work since this has a direct effect on my performance and abilities at work. If I can do this 5 days/week, that&apos;s <strong>7.5 hours/week</strong>.</li><li>Over the course of a normal Monday-Friday outside of work, I can for sure dedicate three 2-hour blocks. That&apos;s <strong>6 hours/week</strong>. </li><li>Over the course of a normal weekend, I can for sure dedicate two 2-hour blocks. That&apos;s <strong>4 hours/week</strong>. </li></ol><p>This adds up to <strong>17.5 hours/week</strong>. This gives me some wiggle room to meet the minimum 15 hours/week even if I can&apos;t do 1.5 hours every day at work. If I have a more time during the week or on the weekend, I can get even more done. It is almost certain that I will have more than 4 hours available on the weekends but I am intentionally not including that in my calculations because the goal is simply <em><strong>at least 15 hours per week.</strong></em></p><p>I&apos;ll plan the specific time slots on a week-to-week basis. I&apos;ve got two young kids - not every week is going to look the same.</p><h3 id="organizing-my-studies">Organizing my studies</h3><p>One thing I&apos;ve realized about myself is that I can only juggle so many things as once (an earth-shattering realization, I know). With this is mind, I&apos;m going to try and stick to one course at a time. If I start to get burned out on a course or need variety for some reason, I&apos;m willing to do two courses in parallel - but no more than that. </p><p>I am also intentionally not setting any goals in terms of finishing X courses in Y amount of time. I will finish each course in the amount of time that it takes for me to learn the material - remember, my goal is to learn CS well, not get a credential. That being said, OSSU provides an estimated time to complete each course. I can use these numbers as a benchmark to help assess my competency; if I finish a course faster than the estimated time, that could mean I didn&apos;t learn the material deeply. If I&apos;m delayed, that could mean I need some extra guidance. </p><p>I&apos;m planning to track all of this in <a href="https://www.notion.so/?ref=dustinbriles.com">Notion</a> (which I&apos;ve become rather fond of). I set up a basic table to track the courses I&apos;m working on, and each of the rows in this table contains a page where I can take notes, document progress, or whatever else I need to do. </p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2022/09/image.png" class="kg-image" alt loading="lazy" width="1277" height="540" srcset="https://dustinbriles.com/content/images/size/w600/2022/09/image.png 600w, https://dustinbriles.com/content/images/size/w1000/2022/09/image.png 1000w, https://dustinbriles.com/content/images/2022/09/image.png 1277w" sizes="(min-width: 720px) 720px"></figure><p>As a side note, you may notice the first three &quot;courses&quot; that I completed in that table are not actually part of the OSSU cirriculum. I came across these resources a little while ago and they totally changed how I approach learning new things, so I thought it might be a good idea to revisit them before starting OSSU. Here are the links if you&apos;re interested:</p><ul><li><a href="https://www.coursera.org/learn/learning-how-to-learn?ref=dustinbriles.com">https://www.coursera.org/learn/learning-how-to-learn</a></li><li><a href="https://www.youtube.com/watch?v=Z-zNHHpXoMM&amp;ref=dustinbriles.com">https://www.youtube.com/watch?v=Z-zNHHpXoMM</a></li><li><a href="https://www.youtube.com/watch?v=ukLnPbIffxE&amp;ref=dustinbriles.com">https://www.youtube.com/watch?v=ukLnPbIffxE</a></li></ul><h3 id="participation-in-the-community">Participation in the community</h3><p>There are three cohort communities in the OSSU Discord server, each corresponding to an 8-hour period of time, and you&apos;re meant to join the cohort that aligns best with the window of time you spend working on OSSU material. I joined the &quot;UTC Night&quot; cohort, which covers 8:00pm - 4:00am UTC (which is currently 4:00pm - 12:00am Eastern Time). Each cohort has a weekly check-in, and I intend to attend these as much as possible.</p><p>I think it makes sense to spend a few minutes every day checking in on the Discord channels for my cohort community and the course(s) that I am currently working on. I don&apos;t want to be a stranger in these communities, so I&apos;d like to participate in discussions and ask my own questions as much as possible. </p><p>As for blogging: I think a cadence of one post every month makes sense. My intuition is that a month is just long enough to 1. give me enough new experiences to write about and 2. not interfere with my studying.</p><p>Kudos to you if you&apos;re still here - this post is sitting at just about 2,000 words. Hopefully OSSU blog post #2 will be a little shorter! </p>]]></content:encoded></item><item><title><![CDATA[Populate fields that aren't in a Django ModelForm]]></title><description><![CDATA[Populate and save a model field that you don't want to include in the ModelForm]]></description><link>https://dustinbriles.com/populate-fields-not-in-a-modelform-django/</link><guid isPermaLink="false">61f0228e2560780c0be21965</guid><category><![CDATA[development]]></category><category><![CDATA[django]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Tue, 25 Jan 2022 23:00:00 GMT</pubDate><content:encoded><![CDATA[<p>I ran across an issue today that, in hindsight, was simple and probably a result of not reading the <a href="https://docs.djangoproject.com/?ref=dustinbriles.com">Django documentation</a> thoroughly enough. I&apos;m definitely still in the &quot;learning&quot; phase of my relationship with Django.</p><p>Consider this (imperfect) example: you&apos;re using a <strong>ModelForm</strong> to allow users of your web app to create a Student. The user would supply the student&apos;s name, date of birth, and address in a form, but the student ID should be generated based on their other information (e.g. name and date of birth). </p><p>The <strong>ModelForm</strong> object won&apos;t give you access to the underlying Model&apos;s <strong>student_id</strong> field unless you include it with the form, which is undesirable. You could also save the Student to the database, then update its <strong>student_id </strong>field, but that&apos;s pretty inefficient. The better solution:</p><pre><code class="language-python"># Model
class Student(models.Model):
    student_id = models.CharField()
    name = models.CharField()
    dob = models.DateField()
    address = models.CharField()
    

# ModelForm
class AddStudentForm(forms.ModelForm):
    class Meta:
        model = Student
        # don&apos;t include student_id
        fields = [&apos;name&apos;, &apos;birthday&apos;, &apos;address&apos;]
        

# View
def add_student(request):
    ...
    if form.is_valid():
        # this will gave you an instance of the Student model without saving it to the db
        student = form.save(commit=False)
        
        # then you can create the student_id and save to the db
        student.student_id = create_id(student.name, student.dob)
        student.save()
    ....</code></pre>]]></content:encoded></item><item><title><![CDATA[OneDrive and git - don't do it]]></title><description><![CDATA[<p>I recently turned on OneDrive&apos;s &quot;Known Folder Move&quot; feature, which syncs your &quot;known folders&quot; (<strong>Documents</strong>, <strong>Downloads</strong>, and <strong>Pictures</strong>) to OneDrive. I had been keeping my git repositories in my <strong>Documents</strong> folder, which means they were now being synced to OneDrive. </p><p><strong>tl;dr</strong> - OneDrive&</p>]]></description><link>https://dustinbriles.com/onedrive-and-git-dont-do-it/</link><guid isPermaLink="false">61e17f172560780c0be21888</guid><category><![CDATA[development]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Fri, 14 Jan 2022 16:25:00 GMT</pubDate><content:encoded><![CDATA[<p>I recently turned on OneDrive&apos;s &quot;Known Folder Move&quot; feature, which syncs your &quot;known folders&quot; (<strong>Documents</strong>, <strong>Downloads</strong>, and <strong>Pictures</strong>) to OneDrive. I had been keeping my git repositories in my <strong>Documents</strong> folder, which means they were now being synced to OneDrive. </p><p><strong>tl;dr</strong> - OneDrive&apos;s known folder move is nice for general use, but don&apos;t put your git repositories in a folder synced by OneDrive (e.g. <strong>%UserProfile%\Documents\GitHub\</strong>)</p><h2 id="why-not">Why not?</h2><p>By default, OneDrive will try to save space by removing files that haven&apos;t been used in a while (re-downloading them when necessary). Think of how this could affect a <strong>node_modules</strong> or <strong>venv</strong> folder; need to work on a project you haven&apos;t touched in a week? Gotta wait while OneDrive re-downloads thousands of files. Running <strong>npm install</strong> for the first time in a project? OneDrive is about to go nuts trying to sync thousands of files. You can mitigate some of these issues - e.g. marking folders &quot;always keep on device&quot; - but even then, these things really do get in the way.<br><br>There&apos;s also often some hooplah involved when deleting a repository (remember that pesky <strong>node_modules</strong> folder with thousands of files?). OneDrive also has some restrictions on what types of files will be synced, and some other restrictions that you might run into as a developer (e.g. certain characters not allowed in filenames). If any of these restrictions are violated you&apos;ll get complaints from OneDrive. Not worth the hassle in my opinion.<br><br>I started keeping git repositories in the root of my user profile, sometimes within a subfolder there (e.g. <strong>%UserProfile%\GitHub</strong>). Obviously the repositories won&apos;t be backed up in OneDrive, but if something happens to my computer, I can just clone the repository again and reinstall the packages (assuming I&apos;ve been pushing changes to remote/origin regularly)<br><br>Known folder move is great for most other, non-repository things though!</p>]]></content:encoded></item><item><title><![CDATA[Django template formatting in VSCode]]></title><description><![CDATA[<p>I&apos;m currently learning Django. Doing things in Visual Studio Code has been an awesome experience - except for one thing.</p><p>Whenever I would save a template, some sort of autoformatting would happen and make my Django template tags look really undesirable. Here&apos;s an example (shoutout to</p>]]></description><link>https://dustinbriles.com/django-template-formatting-in-vs-code/</link><guid isPermaLink="false">611fbd07dc785b0dce376377</guid><category><![CDATA[development]]></category><dc:creator><![CDATA[Dustin Briles]]></dc:creator><pubDate>Fri, 20 Aug 2021 15:41:18 GMT</pubDate><content:encoded><![CDATA[<p>I&apos;m currently learning Django. Doing things in Visual Studio Code has been an awesome experience - except for one thing.</p><p>Whenever I would save a template, some sort of autoformatting would happen and make my Django template tags look really undesirable. Here&apos;s an example (shoutout to the <a href="https://tutorial.djangogirls.org/?ref=dustinbriles.com">Django Girls tutorial</a>):</p><p><strong>Before saving:</strong></p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2021/08/image-3.png" class="kg-image" alt loading="lazy" width="763" height="288" srcset="https://dustinbriles.com/content/images/size/w600/2021/08/image-3.png 600w, https://dustinbriles.com/content/images/2021/08/image-3.png 763w" sizes="(min-width: 720px) 720px"></figure><p><strong>After saving:</strong></p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2021/08/image-1.png" class="kg-image" alt loading="lazy" width="711" height="211" srcset="https://dustinbriles.com/content/images/size/w600/2021/08/image-1.png 600w, https://dustinbriles.com/content/images/2021/08/image-1.png 711w"></figure><p>This would happen every time I pressed <strong>Ctrl + s</strong>. Obviously it was pretty annoying. I think the culprit was the built-in HTML autoformatter, so I played with some of the built-in settings in VSCode but ultimately nothing I did with those settings fixed this. </p><h3 id="solution">Solution</h3><p>Installed this plugin (simply named <strong>Django</strong>): <a href="https://marketplace.visualstudio.com/items?itemName=batisteo.vscode-django&amp;ref=dustinbriles.com">https://marketplace.visualstudio.com/items?itemName=batisteo.vscode-django</a></p><p>Added some lines to my workspace json file under <strong>settings</strong>:</p><pre><code class="language-json">&quot;settings&quot;: {
	&quot;files.associations&quot;: {
		&quot;**/*.html&quot;: &quot;html&quot;,
		&quot;**/templates/**/*.html&quot;: &quot;django-html&quot;,
		&quot;**/templates/**/*&quot;: &quot;django-txt&quot;,
		&quot;**/requirements{/**,*}.{txt,in}&quot;: &quot;pip-requirements&quot;
	},
},</code></pre><p>After reloading VSCode, the language for my Django template files was automatically set to <strong>Django HTML</strong> and the undesirable autoformatting problem was gone.</p><figure class="kg-card kg-image-card"><img src="https://dustinbriles.com/content/images/2021/08/image.png" class="kg-image" alt loading="lazy" width="737" height="285" srcset="https://dustinbriles.com/content/images/size/w600/2021/08/image.png 600w, https://dustinbriles.com/content/images/2021/08/image.png 737w" sizes="(min-width: 720px) 720px"></figure><p></p><p></p><p></p>]]></content:encoded></item></channel></rss>