<?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[YODA - ZipCode.Rocks]]></title><description><![CDATA[YODA: Resources for Zip Code Wilmington]]></description><link>https://yoda.zipcode.rocks/</link><image><url>https://yoda.zipcode.rocks/favicon.png</url><title>YODA - ZipCode.Rocks</title><link>https://yoda.zipcode.rocks/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Fri, 03 Apr 2026 14:37:21 GMT</lastBuildDate><atom:link href="https://yoda.zipcode.rocks/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Procedural Epistemology - YowZa]]></title><description><![CDATA[<p>In the foreword to the second edition of the canonical text <em>Structure and Interpretation of Computer Programs</em>, which was taught to entry level computer science students at MIT for the better part of two decade, authors Harold Abelson, Gerald Sussman and Julie Sussman provide a provocative answer to this question.</p>]]></description><link>https://yoda.zipcode.rocks/procedural-epistemology-yowza/</link><guid isPermaLink="false">63dc1e2f82cf255235e3bc4a</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Thu, 02 Feb 2023 20:34:47 GMT</pubDate><content:encoded><![CDATA[<p>In the foreword to the second edition of the canonical text <em>Structure and Interpretation of Computer Programs</em>, which was taught to entry level computer science students at MIT for the better part of two decade, authors Harold Abelson, Gerald Sussman and Julie Sussman provide a provocative answer to this question.{1}(Abelson, Sussman and Sussman, <em>Structure and Interpretation of Computer Programs, 2nd Ed.</em>, xxiii)</p><blockquote><em>Underlying our approach to this subject [computer programming] is our conviction that &#x201C;computer science&#x201D; is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology&#x2014;the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of &#x201C;what is.&#x201D; Computation provides a framework for dealing precisely with notions of &#x201C;how to.&#x201D;</em></blockquote>]]></content:encoded></item><item><title><![CDATA[Some Links to Research]]></title><description><![CDATA[<p>as you design your games and Casino...</p><ul><li><a href="https://math.hws.edu/javanotes/c5/s4.html">https://math.hws.edu/javanotes/c5/s4.html</a></li><li><a href="https://codereview.stackexchange.com/questions/161773/object-oriented-design-of-card-deck">https://codereview.stackexchange.com/questions/161773/object-oriented-design-of-card-deck</a></li><li><a href="https://www.infoworld.com/article/2077217/card-engine-in-java.html">https://www.infoworld.com/article/2077217/card-engine-in-java.html</a></li><li><a href="https://www.geeksforgeeks.org/design-data-structuresclasses-objectsfor-generic-deck-cards/">https://www.geeksforgeeks.org/design-data-structuresclasses-objectsfor-generic-deck-cards/</a></li><li><a href="http://homepage.divms.uiowa.edu/~slonnegr/oosd/22OOD.pdf">http://homepage.divms.uiowa.edu/~slonnegr/oosd/22OOD.pdf</a></li><li><a href="http://techdive.in/java/card-game-using-java">http://techdive.in/java/card-game-using-java</a></li><li><a href="https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-blackjack-and-a-deck-of-cards.md">https:</a></li></ul>]]></description><link>https://yoda.zipcode.rocks/some-links-to-research/</link><guid isPermaLink="false">6372698382cf255235e3bc2d</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Mon, 14 Nov 2022 16:20:13 GMT</pubDate><content:encoded><![CDATA[<p>as you design your games and Casino...</p><ul><li><a href="https://math.hws.edu/javanotes/c5/s4.html">https://math.hws.edu/javanotes/c5/s4.html</a></li><li><a href="https://codereview.stackexchange.com/questions/161773/object-oriented-design-of-card-deck">https://codereview.stackexchange.com/questions/161773/object-oriented-design-of-card-deck</a></li><li><a href="https://www.infoworld.com/article/2077217/card-engine-in-java.html">https://www.infoworld.com/article/2077217/card-engine-in-java.html</a></li><li><a href="https://www.geeksforgeeks.org/design-data-structuresclasses-objectsfor-generic-deck-cards/">https://www.geeksforgeeks.org/design-data-structuresclasses-objectsfor-generic-deck-cards/</a></li><li><a href="http://homepage.divms.uiowa.edu/~slonnegr/oosd/22OOD.pdf">http://homepage.divms.uiowa.edu/~slonnegr/oosd/22OOD.pdf</a></li><li><a href="http://techdive.in/java/card-game-using-java">http://techdive.in/java/card-game-using-java</a></li><li><a href="https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-blackjack-and-a-deck-of-cards.md">https://github.com/tssovi/grokking-the-object-oriented-design-interview/blob/master/object-oriented-design-case-studies/design-blackjack-and-a-deck-of-cards.md</a></li></ul><p>and for dice game</p><ul><li><a href="https://codereview.stackexchange.com/questions/40919/basic-java-dice-game">https://codereview.stackexchange.com/questions/40919/basic-java-dice-game</a></li></ul><p>And a VERY cool and useful alternate Java Textbook <a href="https://math.hws.edu/javanotes/index.html">https://math.hws.edu/javanotes/index.html</a></p>]]></content:encoded></item><item><title><![CDATA[Day 3]]></title><description><![CDATA[<p>Yes, you have lots to do, work these software installs in when you can, it&apos;ll make some of day go faster; <em>get them done before coming back from the noon break</em>;</p><h2 id="some-needed-installs">Some Needed Installs...</h2><h3 id="brew">Brew</h3><ul><li>Visit <a href="https://brew.sh/">https://brew.sh/</a>.</li><li>Follow the directions under &quot;Install Homebrew&quot;.</li></ul><h3 id="jdk-1801">JDK</h3>]]></description><link>https://yoda.zipcode.rocks/java/day-3/</link><guid isPermaLink="false">62b46e2382cf255235e3bc01</guid><category><![CDATA[Java]]></category><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Thu, 23 Jun 2022 13:58:59 GMT</pubDate><content:encoded><![CDATA[<p>Yes, you have lots to do, work these software installs in when you can, it&apos;ll make some of day go faster; <em>get them done before coming back from the noon break</em>;</p><h2 id="some-needed-installs">Some Needed Installs...</h2><h3 id="brew">Brew</h3><ul><li>Visit <a href="https://brew.sh/">https://brew.sh/</a>.</li><li>Follow the directions under &quot;Install Homebrew&quot;.</li></ul><h3 id="jdk-1801">JDK 18.0.1</h3><ul><li>Visit <a href="https://download.oracle.com/java/18/latest/jdk-18_macos-x64_bin.dmg">Oracle&apos;s</a> download page for the Oracle JDK.</li><li>Download the dmg for Java JDK 18.</li><li>Use the downloaded dmg to install the application. </li><li>(double click the DMG to install)</li></ul><h3 id="jdk-18">JDK 1.8</h3><ul><li>Visit <a href="https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u332-b09/openlogic-openjdk-8u332-b09-mac-x64.pkg">https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u332-b09/openlogic-openjdk-8u332-b09-mac-x64.pkg</a></li><li>and install that PKG file.</li></ul><h3 id="intellij">IntelliJ</h3><ul><li>Download the <strong>dmg</strong> for the <strong>Community version for Mac</strong>.</li><li>Visit <a href="https://www.jetbrains.com/idea/download/#section=mac">JetBrains&apos;</a> download page for IntelliJ.</li><li>Use the downloaded dmg to install the application.</li><li><strong>Did YOU install the COMMUNITY edition? (not the Pro)</strong></li></ul>]]></content:encoded></item><item><title><![CDATA[Evaluating an expression]]></title><description><![CDATA[<p>Consider the following test class. There is another class in this project, <code>Calculate</code> with a method that has a <em>method signature</em> of <code>public Double run(String expr)</code>. What this means is if I create an object of type <code>Calculate</code> called <code>engine</code>, I can then call the <code>run</code> method as in</p>]]></description><link>https://yoda.zipcode.rocks/evaluating-an-expression/</link><guid isPermaLink="false">62a7375b82cf255235e3bbbe</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Mon, 13 Jun 2022 13:21:37 GMT</pubDate><content:encoded><![CDATA[<p>Consider the following test class. There is another class in this project, <code>Calculate</code> with a method that has a <em>method signature</em> of <code>public Double run(String expr)</code>. What this means is if I create an object of type <code>Calculate</code> called <code>engine</code>, I can then call the <code>run</code> method as in something like <code>double actual = engine.run(&quot;( 4 + 5 )&quot;);</code> and I should expect that <code>actual</code> will be equal to <code>9.0</code>.</p><p>How would you write a class and a method to do this? How do you read in the string expression, figure out what it means and then calculate and return the answer?</p><p>Take a look at each of the tests below and ponder how you might build such a class. How would you break this problem down into phases that can be called one after another to go from a string argument <code>expr</code> to a <code>double</code> return value.</p><pre><code class="language-java">package rocks.zipcode;

import static org.junit.Assert.*;

public class CalculateTest {

    @org.junit.Before
    public void setUp() throws Exception {
    }

    @org.junit.After
    public void tearDown() throws Exception {
    }

    @org.junit.Test
    public void runSimple() {
        Calculate engine = new Calculate();

        String args2 = &quot;( 4 + 5 )&quot;;
        double expected = 9.0;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }
    @org.junit.Test
    public void runAlexTest() {
        Calculate engine = new Calculate();

        String args2 = &quot;( -4 + 5 )&quot;;
        double expected = 1.0;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }

    @org.junit.Test
    public void runSimpleRPN() {
        Calculate engine = new Calculate();

        String args2 = &quot;( 4 5 + 7 3.0 / * )&quot;;
        double expected = 21.0;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }

    @org.junit.Test
    public void runFailedTestNoParens() {
        Calculate engine = new Calculate();

        String args2 = &quot;4 + 5&quot;;
        double expected = 9.0;
        double actual = engine.run(args2);
        assertNotEquals(expected, actual, 0.0001);
    }

    @org.junit.Test
    public void runSimple2() {
        Calculate engine = new Calculate();

        String args2 = &quot;( ( 4 + 5 ) * ( 7 / 3.0 ) )&quot;;
        double expected = 21.0;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }

    @org.junit.Test
    public void runSimple3() {
        Calculate engine = new Calculate();

        String args2 = &quot;( sqrt ( 2.0 ) * sqrt ( 5.0 ) )&quot;;
        double expected = 3.162277660;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }

    @org.junit.Test
    public void runLongerDemo() {
        Calculate engine = new Calculate();

        String args2 = &quot;( ( ( 4 + 5 ) * ( 7 / 3.0 ) ) - ( 13 / 6.0 ) )&quot;;
        double expected = 18.833333333;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }

    //( ( 5 + ( 3 * 8 ) ) &#x2013; ( 2 * 7 ) )

    @org.junit.Test
    public void runFromReadme() {
        Calculate engine = new Calculate();

        String args2 = &quot;( ( 5 + ( 3 * 8 ) ) - ( 2 * 7 ) )&quot;;
        double expected = 15;
        double actual = engine.run(args2);
        assertEquals(expected, actual, 0.0001);
    }


}</code></pre>]]></content:encoded></item><item><title><![CDATA[Great Java]]></title><description><![CDATA[<p>Let&apos;s begin with this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yoda.zipcode.rocks/content/images/2022/02/image.png" class="kg-image" alt loading="lazy" width="1214" height="638" srcset="https://yoda.zipcode.rocks/content/images/size/w600/2022/02/image.png 600w, https://yoda.zipcode.rocks/content/images/size/w1000/2022/02/image.png 1000w, https://yoda.zipcode.rocks/content/images/2022/02/image.png 1214w" sizes="(min-width: 720px) 720px"><figcaption>https://www.quora.com/profile/Joshua-Bloch-1</figcaption></figure><p>And then, and be careful, do not plagarise code:</p><ul><li><a href="https://github.com/iluwatar/java-design-patterns">https://github.com/iluwatar/java-design-patterns</a></li><li><a href="https://github.com/javaee-samples/javaee8-samples">https://github.com/javaee-samples/javaee8-samples</a></li><li><a href="https://github.com/phishman3579/java-algorithms-implementation">https://github.com/phishman3579/java-algorithms-implementation</a></li></ul><p>And the last of these, well, it&apos;s quite a beautiful thing.</p><p>Now,</p>]]></description><link>https://yoda.zipcode.rocks/great-java/</link><guid isPermaLink="false">61f934f082cf255235e3bb9c</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Tue, 01 Feb 2022 13:28:49 GMT</pubDate><content:encoded><![CDATA[<p>Let&apos;s begin with this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yoda.zipcode.rocks/content/images/2022/02/image.png" class="kg-image" alt loading="lazy" width="1214" height="638" srcset="https://yoda.zipcode.rocks/content/images/size/w600/2022/02/image.png 600w, https://yoda.zipcode.rocks/content/images/size/w1000/2022/02/image.png 1000w, https://yoda.zipcode.rocks/content/images/2022/02/image.png 1214w" sizes="(min-width: 720px) 720px"><figcaption>https://www.quora.com/profile/Joshua-Bloch-1</figcaption></figure><p>And then, and be careful, do not plagarise code:</p><ul><li><a href="https://github.com/iluwatar/java-design-patterns">https://github.com/iluwatar/java-design-patterns</a></li><li><a href="https://github.com/javaee-samples/javaee8-samples">https://github.com/javaee-samples/javaee8-samples</a></li><li><a href="https://github.com/phishman3579/java-algorithms-implementation">https://github.com/phishman3579/java-algorithms-implementation</a></li></ul><p>And the last of these, well, it&apos;s quite a beautiful thing.</p><p>Now, who the hell is Joshua Bloch and why should you pay attention to things he says?</p>]]></content:encoded></item><item><title><![CDATA[Git/Github Articles]]></title><description><![CDATA[<p>Yeah? You think you know how to write a git commit message?</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cbea.ms/git-commit/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to Write a Git Commit Message</div><div class="kg-bookmark-description">Commit messages matter. Here&#x2019;s how to write them well.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://cbea.ms/favicon.ico" alt><span class="kg-bookmark-author">cbeams</span><span class="kg-bookmark-publisher">cbeams</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://cbea.ms/content/images/2021/01/git_commit_2x.png" alt></div></a></figure><p></p><p>How to make a nice looking github account page</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.sitepoint.com/github-profile-readme/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to Create an Impressive GitHub Profile README -</div></div></a></figure>]]></description><link>https://yoda.zipcode.rocks/git-github-articles/</link><guid isPermaLink="false">61f84f3582cf255235e3bb8f</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Mon, 31 Jan 2022 21:08:19 GMT</pubDate><content:encoded><![CDATA[<p>Yeah? You think you know how to write a git commit message?</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cbea.ms/git-commit/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to Write a Git Commit Message</div><div class="kg-bookmark-description">Commit messages matter. Here&#x2019;s how to write them well.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://cbea.ms/favicon.ico" alt><span class="kg-bookmark-author">cbeams</span><span class="kg-bookmark-publisher">cbeams</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://cbea.ms/content/images/2021/01/git_commit_2x.png" alt></div></a></figure><p></p><p>How to make a nice looking github account page</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.sitepoint.com/github-profile-readme/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to Create an Impressive GitHub Profile README - SitePoint</div><div class="kg-bookmark-description">Did you know you can create a stunning GitHub profile README page? Learn how to add images, social and blog links, GitHub stats, and more.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.sitepoint.com/favicons/512x512.png" alt><span class="kg-bookmark-author">SitePoint</span><span class="kg-bookmark-publisher">Nida Khan</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://uploads.sitepoint.com/wp-content/uploads/2022/01/1643073859github-readme.jpg" alt></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Google Styleguides]]></title><description><![CDATA[<p>How have we been missing these?</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://google.github.io/styleguide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Google Style Guides</div><div class="kg-bookmark-description">Style guides for Google-originated open-source projects</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">styleguide</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://i.creativecommons.org/l/by/3.0/88x31.png" alt></div></a></figure><p>Handy. Very handy.</p>]]></description><link>https://yoda.zipcode.rocks/google-styleguides/</link><guid isPermaLink="false">61f84bb282cf255235e3bb65</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Mon, 31 Jan 2022 20:51:28 GMT</pubDate><content:encoded><![CDATA[<p>How have we been missing these?</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://google.github.io/styleguide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Google Style Guides</div><div class="kg-bookmark-description">Style guides for Google-originated open-source projects</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">styleguide</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://i.creativecommons.org/l/by/3.0/88x31.png" alt></div></a></figure><p>Handy. Very handy.</p>]]></content:encoded></item><item><title><![CDATA[JumpStartPhilly Jumpinar - DataAnalytics for Philly]]></title><description><![CDATA[<p>Notes on the demo Kris did during the ZipCodeWilmington tech portion. 24 January 2022</p><h1 id="web-sites">Web sites</h1><p>These were just used to show how much info there is out there. </p><ul><li>Market Stats <a href rel="noopener noreferrer nofollow">https://philly.curbed.com/2017/4/7/15209526/philadelphia-housing-rental-statistics-pew-report</a></li><li>Redfin -<a href rel="noopener noreferrer nofollow"> https://www.redfin.com/city/15502/PA/Philadelphia/</a></li></ul>]]></description><link>https://yoda.zipcode.rocks/jumpstartphilly/</link><guid isPermaLink="false">61eef60a82cf255235e3bb4b</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Mon, 24 Jan 2022 18:56:18 GMT</pubDate><content:encoded><![CDATA[<p>Notes on the demo Kris did during the ZipCodeWilmington tech portion. 24 January 2022</p><h1 id="web-sites">Web sites</h1><p>These were just used to show how much info there is out there. </p><ul><li>Market Stats <a href rel="noopener noreferrer nofollow">https://philly.curbed.com/2017/4/7/15209526/philadelphia-housing-rental-statistics-pew-report</a></li><li>Redfin -<a href rel="noopener noreferrer nofollow"> https://www.redfin.com/city/15502/PA/Philadelphia/housing-market</a></li></ul><p>BUT I particularly liked these Aaron Kreider Maps: <a href rel="noopener noreferrer nofollow">http://www.campusactivism.org/philly/value.php</a></p><ul><li>NOTICE this site also has a number of other maps views along the bottom of the pages here.</li></ul><p>But then a really good site for Data related to housing in the City of Philadelphia: <strong>Property web site</strong>: <a href rel="noopener noreferrer nofollow">https://property.phila.gov/</a></p><h3 id="getting-a-handle-on-a-property-and-its-neighborhood">Getting a handle on a property and its neighborhood</h3><p>Sample of Data Analytics for a target property</p><ul><li>square footage property values for houses near by</li><li>there are some analytics you can do</li><li>Use <strong>Property</strong> web site to produce CSV files of property local/near to the address you are researching</li><li>a CSV file (&#x201C;comma separated values&#x201D;) is a common data file and one that can be used in lots of ways.</li><li><strong>Property</strong> allows you to find the values of a specific property you are investigating</li></ul><p>you can then get the CSV file and put it into Google Sheets to tinker with.</p><ul><li>look at the rows with $1 transfer values as they will skew the averages. you might consider removing those rows.</li></ul><p>add averages to the formulas in the cells at the bottom of the sheet.</p><ul><li>to learn how to do that, here is a tutorial on averaging data in a column <a href rel="noopener noreferrer nofollow">https://www.lifewire.com/google-spreadsheets-average-function-3123872</a></li><li>average property value by adding a formula to the cell at the bottom of the column</li><li>DIVIDE average value by square footage</li></ul><p>These numbers</p><ul><li>can give you per-ft2 number for your other project financials</li><li>can help you decide which properties meet your risk profile.</li></ul><h3 id="data-engineering-tools">Data Engineering Tools</h3><p>Google Sheets is decent.</p><p>The easiest way is to get a gmail account (for free, if you don&#x2019;t have one)</p><ul><li><a href="https://accounts.google.com/" rel="noopener noreferrer nofollow">https://accounts.google.com/</a></li><li>look for <strong>Create account</strong> link</li><li>lets you use google sheets and save docs there</li></ul><h3 id="pha-lottery-properties">PHA Lottery Properties:</h3><p>Can be used as samples for the links above. These addresses were taken from the PHS Lottery of last December.</p><p>2933 W MASTER ST</p><p>3033 W STILES ST</p><p>3041 W STILES ST</p><p>623 W JEFFERSON ST</p><p>3222 N ETTING ST</p><p>63 E SEYMOUR ST</p>]]></content:encoded></item><item><title><![CDATA[Shell: old school]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Shell. Terminal. Bash.</p>
<p><img src="https://yoda.zipcode.rocks/content/images/2018/10/ttyxterm.png" alt="xterm" loading="lazy"></p>
<p>All names for the command line interpreters we use when programming/coding in the 21st century.</p>
<p>A Unix shell is a command-line interpreter or shell that provides a command line user interface for Unix-like operating systems(like Linux &amp; MacOS). The shell is both an interactive command</p>]]></description><link>https://yoda.zipcode.rocks/shell-old-school/</link><guid isPermaLink="false">60c9fcdc82cf255235e3ba78</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Wed, 16 Jun 2021 13:43:55 GMT</pubDate><media:content url="https://yoda.zipcode.rocks/content/images/2018/10/tty2.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://yoda.zipcode.rocks/content/images/2018/10/tty2.png" alt="Shell: old school"><p>Shell. Terminal. Bash.</p>
<p><img src="https://yoda.zipcode.rocks/content/images/2018/10/ttyxterm.png" alt="Shell: old school" loading="lazy"></p>
<p>All names for the command line interpreters we use when programming/coding in the 21st century.</p>
<p>A Unix shell is a command-line interpreter or shell that provides a command line user interface for Unix-like operating systems(like Linux &amp; MacOS). The shell is both an interactive command language and a scripting language, and is used by the operating system to control the execution of the system using shell scripts.</p>
<p><img src="https://yoda.zipcode.rocks/content/images/2018/10/macterm.png" alt="Shell: old school" loading="lazy"></p>
<p>Users typically interact with a Unix shell using a terminal emulator; however, direct operation via serial hardware connections or Secure Shell are common for server systems. All Unix shells provide filename wildcarding, piping, here documents, command substitution, variables and control structures for condition-testing and iteration.</p>
<p>The most generic sense of the term shell means any program that users employ to type commands via a keyboard. A shell hides the details of the underlying operating system and manages the technical details of the operating system kernel interface, which is the lowest-level, or &quot;inner-most&quot; component of most operating systems.</p>
<ul>
<li><a href="https://maker.pro/linux/tutorial/basic-linux-commands-for-beginners">https://maker.pro/linux/tutorial/basic-linux-commands-for-beginners</a></li>
<li><a href="https://swcarpentry.github.io/shell-novice/">https://swcarpentry.github.io/shell-novice/</a></li>
<li><a href="https://www.ibm.com/developerworks/library/l-linux-shells/index.html">https://www.ibm.com/developerworks/library/l-linux-shells/index.html</a></li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Notes on k3s]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>To access the &quot;cluster&#x2019;s API&quot; server from our local machine, we only need to get the kubeconfig file created on the node during the setup.</p>
<blockquote>
<p>$ mkdir ~/k8s<br>
$ cd ~/k8s<br>
$ sudo cat /etc/rancher/k3s/k3s.yaml &gt; k3s.yaml</p>
</blockquote>
<p>We then need to change the server</p>]]></description><link>https://yoda.zipcode.rocks/notes-on-k3s/</link><guid isPermaLink="false">60c9fcdc82cf255235e3baa3</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Fri, 30 Apr 2021 12:30:28 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>To access the &quot;cluster&#x2019;s API&quot; server from our local machine, we only need to get the kubeconfig file created on the node during the setup.</p>
<blockquote>
<p>$ mkdir ~/k8s<br>
$ cd ~/k8s<br>
$ sudo cat /etc/rancher/k3s/k3s.yaml &gt; k3s.yaml</p>
</blockquote>
<p>We then need to change the server key so it references the remote IP address of node1 instead of the localhost.</p>
<blockquote>
<p>$ sed -i &apos;&apos; &quot;s/127.0.0.1/$IP/&quot; k3s.yaml</p>
</blockquote>
<p>Finally, we configure our local kubectl so it uses the kubeconfig file (k3s.yaml) we&#x2019;ve just retrieved. A simple way is to set the KUBECONFIG environment variable so it points towards the configuration file.</p>
<blockquote>
<p>$ export KUBECONFIG=$PWD/k3s.yaml</p>
</blockquote>
<p>And maybe you should put this into your ~/.bashrc</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[ZCW-K3S]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="session2">Session 2</h2>
<p>Let&apos;s setup a different power user on the Pi.</p>
<p>Once your Raspberry PI 4 completed booting Raspbian, you can remotely connect to it with SSH. Open your terminal and type this command:</p>
<blockquote>
<p>ssh pi@raspberrypi.local</p>
</blockquote>
<p>This logs in the pi user. Keep in mind that</p>]]></description><link>https://yoda.zipcode.rocks/zcw-k3s/</link><guid isPermaLink="false">60c9fcdc82cf255235e3baa2</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Wed, 21 Apr 2021 17:37:59 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="session2">Session 2</h2>
<p>Let&apos;s setup a different power user on the Pi.</p>
<p>Once your Raspberry PI 4 completed booting Raspbian, you can remotely connect to it with SSH. Open your terminal and type this command:</p>
<blockquote>
<p>ssh pi@raspberrypi.local</p>
</blockquote>
<p>This logs in the pi user. Keep in mind that the default password is raspberry (unless you&apos;ve changed it).</p>
<h3 id="createanewuseranddeletethepiuser">Create a new user and delete the pi user</h3>
<p>As you noticed in the previous session, the default user in Raspbian is pi with password raspberry. Everyone that ever played with a Raspberry PI knows this. Thus it is highly recommended to change the password for the pi user as soon as possible. My personal recommendation is to take this a step further: create a new user and delete the pi user altogether.<br>
To create a new user, run the command:</p>
<blockquote>
<p>sudo adduser <em>newusername</em></p>
</blockquote>
<p>Replace <em>newusername</em> with the username of your preference. The command prompts you to enter some basic information about the new user, including the password. You can leave any of this blank, except the password. The password should be a strong one.</p>
<p>As a next step, add the new user to the same groups as the pi user belongs to (just excluding the pi group itself). The following one-liner pipes together a few commands to achieve this. (This should all be on ONE line in the terminal)</p>
<blockquote>
<p>groups | sed &apos;s/pi //g&apos; | sed -e &quot;s/ /,/g&quot; | xargs -I{} sudo usermod -a -G {} <em>newusername</em></p>
</blockquote>
<p>Before actually removing the pi user, close the current SSH connection and establish a new one. This time login as the newly created user:</p>
<blockquote>
<p>ssh <em>newusername</em>@raspberrypi.local</p>
</blockquote>
<p>After verifying that you can login as the new user, it is time to remove the pi user, including its home directory:</p>
<blockquote>
<p>sudo deluser --remove-home pi</p>
</blockquote>
<p>Now we have a new user, one that has all the same privileges of the pi user without the world guessing what your username is.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Airflow Links]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Read some about Luigi and how to do pipeline/workflow stuff in standard python leveraging a package like Luigi. Then use your understanding to look into how Airflow works.</p>
<ul>
<li>Luigi
<ul>
<li><a href="https://luigi.readthedocs.io/en/stable/example_top_artists.html">https://luigi.readthedocs.io/en/stable/example_top_artists.html</a></li>
</ul>
</li>
<li>Link luigi to airflow
<ul>
<li><a href="https://www.kdnuggets.com/2019/03/data-pipelines-luigi-airflow-everything-need-know.html">https://www.kdnuggets.com/2019/03/</a></li></ul></li></ul>]]></description><link>https://yoda.zipcode.rocks/airflow-links/</link><guid isPermaLink="false">60c9fcdc82cf255235e3baa1</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Mon, 23 Nov 2020 15:59:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Read some about Luigi and how to do pipeline/workflow stuff in standard python leveraging a package like Luigi. Then use your understanding to look into how Airflow works.</p>
<ul>
<li>Luigi
<ul>
<li><a href="https://luigi.readthedocs.io/en/stable/example_top_artists.html">https://luigi.readthedocs.io/en/stable/example_top_artists.html</a></li>
</ul>
</li>
<li>Link luigi to airflow
<ul>
<li><a href="https://www.kdnuggets.com/2019/03/data-pipelines-luigi-airflow-everything-need-know.html">https://www.kdnuggets.com/2019/03/data-pipelines-luigi-airflow-everything-need-know.html</a></li>
</ul>
</li>
</ul>
<p>Then, read these airflow articles to help support what you&apos;re seeing about Airflow.</p>
<ul>
<li>Airflow Articles
<ul>
<li><a href="https://towardsdatascience.com/step-by-step-build-a-data-pipeline-with-airflow-4f96854f7466">Step by step: build a data pipeline with Airflow</a></li>
<li><a href="https://towardsdatascience.com/https-medium-com-xinran-waibel-build-data-pipelines-with-apache-airflow-808a4de79047">Build Data Pipelines with Apache Airflow</a></li>
<li><a href="https://towardsdatascience.com/building-a-production-level-etl-pipeline-platform-using-apache-airflow-a4cf34203fbd">Building a Production-Level ETL Pipeline Platform Using Apache Airflow</a></li>
<li><a href="https://airflow.apache.org/docs/apache-airflow/stable/tutorial.html">Airflow Tutorial</a></li>
<li><a href="https://github.com/soggycactus/airflow-repo-template">Airflow Template Repo</a></li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Bugs in Labs and Software]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Often times, early in cohorts, students begin to discover two things. The first is that materials they are using are incomplete, vague and contain mistakes or errors that cause confusion. The second thing is that some students discover that these revelations disturb them a great deal.</p>
<p>One of the unfortunate</p>]]></description><link>https://yoda.zipcode.rocks/bugs-in-labs-and-softare/</link><guid isPermaLink="false">60c9fcdc82cf255235e3baa0</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Thu, 29 Oct 2020 16:05:47 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Often times, early in cohorts, students begin to discover two things. The first is that materials they are using are incomplete, vague and contain mistakes or errors that cause confusion. The second thing is that some students discover that these revelations disturb them a great deal.</p>
<p>One of the unfortunate aspects of a life spent coding is that you&apos;re most often dealing with incomplete information or data, incomplete or inarticulate (badly written) documentation, tests that are unreliable, specifications which are not specific, requirements that are vague, incomplete or misleading, and sometimes, just sometimes, actually deliberate disinformation meant to disrupt your work.</p>
<p>The best advice we can offer is this: &quot;don&apos;t let it bother you&quot;. Or as an early ZCW instructor used to say &quot;get over it right now&quot;.</p>
<h3 id="stateoftheart">State of the Art</h3>
<p>Software is still - in spite of decades of global effort by all kinds of computer scientists, engineers, and coders - an art. (Some would argue it is not clear it can be <em>engineered</em> either.) Perhaps the most important software book(s) of the last 50 years is Donald Knuth&apos;s <strong>The Art of Computer Programming</strong> (which is currently at 5 volumes and 9998 pages). And if Prof. Knuth says it&apos;s an Art, rest assured it is.</p>
<p>So the precision which many people expect coding/programming to have in creation and maintenance is simply not there. Sure, we can approach some kind of formality of method, with practice, but alas, ours is not precise field. Detailed yes, complex yes, but error-free and &quot;bug free&quot; - no way.</p>
<h3 id="bugzilla">Bugzilla</h3>
<p>To handle the &quot;metadata&quot; of bugs, special programs are developed to maange the database aspects of tracking all the brokenness that exists in software.</p>
<p><a href="https://www.bugzilla.org">Bugzilla</a> was an early bug tracking system for large software systems and products. It was used to track issues, features, desires, errors, and of course, bugs. All software has bugs, seeking to reduce the number of bugs in an application is very desirable; but it is a moving target. We need bug trackers like Bugzilla. So much so that Github has issue tracking built into <em>every</em> repository. Many places used Bugzilla for years, some still do. It had this quirk, inserted deliberately, of &quot;zarro boogs&quot;</p>
<h3 id="zarroboogs">Zarro Boogs</h3>
<p>Bugzilla returns the string &quot;zarro boogs found&quot; instead of &quot;0 bugs found&quot; when a search for bugs returns no results. &quot;Zarro Boogs&quot; is intended as a &apos;buggy&apos; statement itself (a misspelling of &quot;zero bugs&quot;) and is thus a meta-statement about the nature of software debugging, implying that even when no bugs have been identified, some may exist.</p>
<p>The following comment is provided in the <a href="https://www.bugzilla.org">Bugzilla</a> source code to developers who may be confused by this behaviour:</p>
<h4 id="zarroboogsfound">Zarro Boogs Found</h4>
<p>This is just a goofy way of saying that there were no bugs found matching your query. When asked to explain this message, Terry Weissman (an early Bugzilla developer) had the following to say:<br>
I&apos;ve been asked to explain this ... way back when, when Netscape released version 4.0 of its browser, we had a release party. Naturally, there had been a big push to try and fix every known bug before the release. Naturally, that hadn&apos;t actually happened. (This is not unique to Netscape or to 4.0; the same thing has happened with every software project I&apos;ve ever seen.) Anyway, at the release party, T-shirts were handed out that said something like &quot;Netscape 4.0: Zarro Boogs&quot;. Just like the software, the T-shirt had no <em>known bugs</em>. Uh-huh. So, when you query for a list of bugs, and it gets no results, you can think of this as a friendly reminder. Of <em>course</em> there are bugs matching your query, they just aren&apos;t in the bugsystem yet...<br>
&#x2014; Terry Weissman<br>
From The Bugzilla Guide &#x2013; 2.16.10 Release: Glossary</p>
<p>So, strive to make software better, but software is never perfect. And it is truly hubris to think you can make it perfect; the <strong>nemesis of bugs</strong> is the only result. Only three things are certain: death, taxes, software bugs, and off-by-one-bugs.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[the CPU]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Before the OS Concepts lecture, I&apos;d like you to watch these videos.</p>
<p>They break down the complexities of the CPU, Memory and so on within a modern microprocessor. They move at a decent pace, and explain pretty clearly quite a few concepts you need to understand before you</p>]]></description><link>https://yoda.zipcode.rocks/the-cpu/</link><guid isPermaLink="false">60c9fcdc82cf255235e3ba94</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Tue, 04 Aug 2020 19:32:04 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Before the OS Concepts lecture, I&apos;d like you to watch these videos.</p>
<p>They break down the complexities of the CPU, Memory and so on within a modern microprocessor. They move at a decent pace, and explain pretty clearly quite a few concepts you need to understand before you can really get WHY an Operating System for a computer is such an important concept. Things like Windows, Linux, Android, iOS and MacOS each perform largely the same services for software written on top of them. But how does the bits of a program actually get interpreted (or decoded) into action deep inside the processor?</p>
<p>This is about an hour and 45 minutes of videos. Get some popcorn and a glass of wine, sit back and...</p>
<p><a href="https://youtu.be/O5nskjZ_GoI">Early Computing</a><br>
<a href="https://youtu.be/LN0ucKNX0hc">Electronic Computing</a><br>
<a href="https://youtu.be/gI-qXk7XojA">Boolean Logic and Logic Gates</a><br>
<a href="https://youtu.be/1GSjbWt0c9M">Representing Numbers and Letters with Binary</a><br>
<a href="https://youtu.be/1I5ZMmrOfnA">Calculation - the ALU</a><br>
<a href="https://youtu.be/fpnE6UAfbtU">Registers &amp; RAM</a><br>
<a href="https://youtu.be/FZGugFqdr60">The Central Processing Unit</a><br>
<a href="https://youtu.be/zltgXvg6r3k">Instructions &amp; Programs</a></p>
<p>And at this point, think not about the 1-core, 8-bit CPU you&apos;ve been conceptualizing in these videos; let&apos;s think about a 4-core, 64-bit machine. Everywhere you had things moving around using 8-bit bytes, start thinking about a 64-bit <em>word</em> (that&apos;s right, 8 bytes or 64-bits move all at once). All wthin a single core, but then let&apos;s add 3 more cores, and now we have something approaching a modern smart phone CPU...</p>
<p>Wondrous Strange, eh?</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Notes on Conway's Game of Life]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Cellular Automata.</p>
<ul>
<li><a href="https://bitstorm.org/gameoflife/">https://bitstorm.org/gameoflife/</a> good sim on page, several great patterns pre-built.</li>
<li><a href="https://www.quantamagazine.org/john-conways-life-in-games-20150828/">https://www.quantamagazine.org/john-conways-life-in-games-20150828/</a> bio of Conway, plus good desc of game.</li>
<li><a href="https://web.stanford.edu/class/sts145/Library/life.pdf">https://web.stanford.edu/class/sts145/Library/life.pdf</a> bad PDF of 1970 SciAm article</li>
<li><a href="https://www.ibiblio.org/lifepatterns/october1970.html">https://www.ibiblio.org/lifepatterns/october1970.html</a> very</li></ul>]]></description><link>https://yoda.zipcode.rocks/notes-on-conways-game-of-life/</link><guid isPermaLink="false">60c9fcdc82cf255235e3ba93</guid><dc:creator><![CDATA[Kristofer Younger]]></dc:creator><pubDate>Tue, 21 Jul 2020 13:11:45 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Cellular Automata.</p>
<ul>
<li><a href="https://bitstorm.org/gameoflife/">https://bitstorm.org/gameoflife/</a> good sim on page, several great patterns pre-built.</li>
<li><a href="https://www.quantamagazine.org/john-conways-life-in-games-20150828/">https://www.quantamagazine.org/john-conways-life-in-games-20150828/</a> bio of Conway, plus good desc of game.</li>
<li><a href="https://web.stanford.edu/class/sts145/Library/life.pdf">https://web.stanford.edu/class/sts145/Library/life.pdf</a> bad PDF of 1970 SciAm article</li>
<li><a href="https://www.ibiblio.org/lifepatterns/october1970.html">https://www.ibiblio.org/lifepatterns/october1970.html</a> very simple version of 1970 SciAm article.</li>
<li><a href="https://web.stanford.edu/class/sts129/Alife/html/Life.htm">https://web.stanford.edu/class/sts129/Alife/html/Life.htm</a> 1990&apos;s page of Life, with bad HTML.</li>
<li><a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">https://en.wikipedia.org/wiki/Conway&apos;s_Game_of_Life</a> wikipedia on Life.</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>