{"generator":"Jekyll","link":[{"@attributes":{"href":"https:\/\/connormonahan.net\/feed.xml","rel":"self","type":"application\/atom+xml"}},{"@attributes":{"href":"https:\/\/connormonahan.net\/","rel":"alternate","type":"text\/html"}}],"updated":"2022-07-31T20:40:23+00:00","id":"https:\/\/connormonahan.net\/feed.xml","title":"Connor Monahan","subtitle":"The research, projects, and other notes from Connor.","entry":[{"title":"IEEE Region 5 Drone Competition 2021","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2021\/04\/10\/drone-competition.html","rel":"alternate","type":"text\/html","title":"IEEE Region 5 Drone Competition 2021"}},"published":"2021-04-10T00:00:00+00:00","updated":"2021-04-10T00:00:00+00:00","id":"https:\/\/connormonahan.net\/2021\/04\/10\/drone-competition","content":"<p>Due to the impacts of COVID, the IEEE student robotics competitions were moved to an online format this year, where each team competed individually with an identical Tello EDU drone. The objective of the competition was to pop four colored balloons in a specified order within a 3m x 3m arena.<\/p>\n\n<p>My team, the WashU student branch, placed 3rd in our division by popping the first balloon quickly. A better run where we popped all four balloons within the time limits can be seen below:<\/p>\n\n<iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/wuHYLvlusmE\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"><\/iframe>\n\n<p>Some of our specific design decisions included the use of limonene-soaked sponges on the propeller guards to pop the balloons safely. Our software, based on the TelloPy SDK, solved for the position of the balloons as seen by the drone\u2019s onboard cameras by filtering for each bright color independently. The calculated distance, height, and angle to each balloon was used to allow the drone to come in for a smooth approach, while still taking precautions in the presence of noise. The source code of our control loops and computer vision solution is available on GitHub:<\/p>\n\n<p>https:\/\/github.com\/washuieee\/drone2021\/<\/p>","author":{"name":"Connor Monahan"},"summary":"Due to the impacts of COVID, the IEEE student robotics competitions were moved to an online format this year, where each team competed individually with an identical Tello EDU drone. The objective of the competition was to pop four colored balloons in a specified order within a 3m x 3m arena."},{"title":"Website Updates (again)","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2021\/01\/12\/website-updates.html","rel":"alternate","type":"text\/html","title":"Website Updates (again)"}},"published":"2021-01-12T18:46:00+00:00","updated":"2021-01-12T18:46:00+00:00","id":"https:\/\/connormonahan.net\/2021\/01\/12\/website-updates","content":"<p>After a year of not putting my website on my resume due to my laziness to fix the homepage, I have redone the entire site again. This time, with no dependencies on third party static site generators. Hopefully this should decrease my frustration with its maintenance and convince me to work on it more!<\/p>","author":{"name":"Connor Monahan"},"summary":"After a year of not putting my website on my resume due to my laziness to fix the homepage, I have redone the entire site again. This time, with no dependencies on third party static site generators. Hopefully this should decrease my frustration with its maintenance and convince me to work on it more!"},{"title":"Zero Hour Game Jam 2020","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2020\/11\/01\/zero-hour-game-jam-2020.html","rel":"alternate","type":"text\/html","title":"Zero Hour Game Jam 2020"}},"published":"2020-11-01T01:00:00+00:00","updated":"2020-11-01T01:00:00+00:00","id":"https:\/\/connormonahan.net\/2020\/11\/01\/zero-hour-game-jam-2020","content":"<p>For this year, the video game name generator gave us the topic \u201cKiller Crowbar DS\u201d. Thanks Julia for the artwork.<\/p>\n\n<p>Keep the convicts from escaping jail by using your mighty crowbar, or something like that.  If all convicts escape, you get buu buu\u2019d.<\/p>\n\n<p>Controls: Use A\/D or left\/right arrow to move laterally. Use spacebar to bonk the convicts. Refresh the page to restart the game.<\/p>\n\n<iframe src=\"https:\/\/itch.io\/embed-upload\/2914103?color=333333\" allowfullscreen=\"\" width=\"640\" height=\"500\" frameborder=\"0\"><a href=\"https:\/\/cmastudios.itch.io\/0hgame-2020\">Play Killer Crowbar DS on itch.io<\/a><\/iframe>\n\n<iframe src=\"https:\/\/itch.io\/embed\/807121\" width=\"552\" height=\"167\" frameborder=\"0\"><a href=\"https:\/\/cmastudios.itch.io\/0hgame-2020\">Killer Crowbar DS by cmastudios<\/a><\/iframe>","author":{"name":"Connor Monahan, Julia Smith"},"summary":"For this year, the video game name generator gave us the topic \u201cKiller Crowbar DS\u201d. Thanks Julia for the artwork."},{"title":"Like MNIST, but for 7-segment displays","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2020\/09\/27\/seven-segment-display-dataset.html","rel":"alternate","type":"text\/html","title":"Like MNIST, but for 7-segment displays"}},"published":"2020-09-27T00:00:00+00:00","updated":"2020-09-27T00:00:00+00:00","id":"https:\/\/connormonahan.net\/2020\/09\/27\/seven-segment-display-dataset","content":"<p>The original venue for this post is on\n<a href=\"https:\/\/np.reddit.com\/r\/MachineLearning\/comments\/j10ub1\/p_like_mnist_but_for_7segment_displays\/\">r\/MachineLearning<\/a>, reposted here as I have a working blog now.<\/p>\n\n<p>I was recently working on a data analysis project, part of which needed to detect the value of a seven segment display. I started by applying an MNIST-trained model, but the error was very high. I went looking for a different dataset and was not finding any easily accessible ones. Eventually, I found this <a href=\"https:\/\/bitbucket.org\/eoinf96\/7-segmentdigitgenerator\/src\/master\/\">image generator<\/a> that was designed to create datasets with seven segment display computer-generated images. I used it to create a dataset with ~17k samples, 0-9 digits. It worked well for my project, where I applied it with a random forest model. I don\u2019t plan to write a paper so thought I\u2019d leave the dataset here, to save someone else a few hours if faced with a similar task.<\/p>\n\n<p>Link to Dataset:\n<a href=\"https:\/\/s3.us-east-2.amazonaws.com\/public.connor.money\/sevensegdataset.npy\">sevensegdataset.npy<\/a><\/p>\n\n<p>Original generation and application, for reference: <a href=\"https:\/\/gist.github.com\/cmastudios\/7f29b6714a0936b900a1a7cd37cdf3f9\">datasetgenerator.ipynb<\/a><\/p>\n\n<p>Images are 28x28, flattened here.<\/p>\n\n<div class=\"language-python highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">features<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"p\">.<\/span><span class=\"n\">load<\/span><span class=\"p\">(<\/span><span class=\"s\">\"sevensegdataset.npy\"<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">X<\/span> <span class=\"o\">=<\/span> <span class=\"n\">features<\/span><span class=\"p\">[:,<\/span> <span class=\"p\">:<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\n<span class=\"n\">Y<\/span> <span class=\"o\">=<\/span> <span class=\"n\">features<\/span><span class=\"p\">[:,<\/span> <span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<div class=\"language-python highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">images<\/span> <span class=\"o\">=<\/span> <span class=\"n\">X<\/span><span class=\"p\">.<\/span><span class=\"n\">reshape<\/span><span class=\"p\">((<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">28<\/span><span class=\"p\">,<\/span> <span class=\"mi\">28<\/span><span class=\"p\">))<\/span>\n<span class=\"n\">plt<\/span><span class=\"p\">.<\/span><span class=\"n\">axis<\/span><span class=\"p\">(<\/span><span class=\"s\">'off'<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">plt<\/span><span class=\"p\">.<\/span><span class=\"n\">imshow<\/span><span class=\"p\">(<\/span><span class=\"n\">images<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">],<\/span> <span class=\"n\">cmap<\/span><span class=\"o\">=<\/span><span class=\"s\">'gray'<\/span><span class=\"p\">),<\/span> <span class=\"n\">plt<\/span><span class=\"p\">.<\/span><span class=\"n\">imshow<\/span><span class=\"p\">(<\/span><span class=\"n\">images<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">],<\/span> <span class=\"n\">cmap<\/span><span class=\"o\">=<\/span><span class=\"s\">'gray'<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre><\/div><\/div>\n<p><img src=\"\/images\/7seg0.png\" alt=\"Digit 0\" \/>\n<img src=\"\/images\/7seg1.png\" alt=\"Digit 9\" \/><\/p>\n\n<p>Labels are integers 0-9:<\/p>\n<div class=\"language-python highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">Y<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">],<\/span> <span class=\"n\">Y<\/span><span class=\"p\">[<\/span><span class=\"mi\">2<\/span><span class=\"p\">]<\/span>\n<\/code><\/pre><\/div><\/div>\n<p>gives us<\/p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>(9, 0)\n<\/code><\/pre><\/div><\/div>\n\n<p>Training a random forest classifier based on this dataset then allowed me to accurately classify individual inputs such as<\/p>\n\n<p><img src=\"\/images\/7seginputfirst.png\" alt=\"Inputs\" \/><\/p>\n\n<p>that was first preprocessed into 5 separate images<\/p>\n\n<p><img src=\"\/images\/7seginput.png\" alt=\"Inputs\" \/><\/p>\n\n<p>More details on the preprocessing I used in this example can be found in <a href=\"https:\/\/gist.github.com\/cmastudios\/7f29b6714a0936b900a1a7cd37cdf3f9#file-readscale-ipynb\">readscale.ipynb<\/a>.<\/p>","author":{"name":"Connor Monahan"},"summary":"The original venue for this post is on r\/MachineLearning, reposted here as I have a working blog now."},{"title":"Binary, Decimal, Hexadecimal","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2019\/01\/14\/binary.html","rel":"alternate","type":"text\/html","title":"Binary, Decimal, Hexadecimal"}},"published":"2019-01-14T00:00:00+00:00","updated":"2019-01-14T00:00:00+00:00","id":"https:\/\/connormonahan.net\/2019\/01\/14\/binary","content":"<h1 id=\"representation-of-different-bases-and-converting-to-decimal\">Representation of different bases, and converting to decimal<\/h1>\n\n<h2 id=\"decimal\">Decimal<\/h2>\n\n<p>We think of decimal as the base-10 system. The set of all decimal digits is $\\{0,1,2,3,4,5,6,7,8,9\\}$.<\/p>\n\n<p>Imagine we have a number 42 (base ten). We could rewrite it as each digit multiplied by a power of ten, like so: $42 = 4 * 10^1 + 2 * 10^0$.<\/p>\n\n<h2 id=\"binary\">Binary<\/h2>\n\n<p>The set of all binary digits is $\\{0,1\\}$.<\/p>\n\n<p>The same idea is true for binary numbers, also known as the base-2 system. Imagine we have a number 101010 (base two). We could rewrite it as each digit multiplied by a power of two, like so: $101010_2 = 1 * 2^5 + 0 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0$. If we wanted to get the decimal version of this, we could just simplify: $1 * 2^5 + 1 * 2^3 + 1 * 2^1 = 32 + 8 + 2=42$.<\/p>\n\n<h2 id=\"hexadecimal\">Hexadecimal<\/h2>\n\n<p>The set of all hexadecimal digits is $\\{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F\\}$, where A-F have decimal values of 10-15 respectively.<\/p>\n\n<p>The same idea is true for hexadecimal numbers, also known as the base-16 system. Imagine we have a number 2A (base sixteen). We could rewrite it as each digit multiplied by a power of sixteen, like so: $2A_{16} = 2 * 16^1 + 10 * 16^0$. If we wanted to get the decimal version of this, we could just simplify: $2 * 16^1 + 10 * 16^0 = 32 + 10 = 42$.<\/p>\n\n<h2 id=\"bringing-it-together-binary-and-hexadecimal-to-decimal\">Bringing it together: binary and hexadecimal to decimal<\/h2>\n\n<p>Above, we have seen that finding the value of a binary or hexadecimal number in decimal simply requires writing out each digit multiplied by its place value and then simplifying.<\/p>\n\n<h1 id=\"converting-decimal-to-binary-or-hexadecimal-by-repeated-division\">Converting decimal to binary or hexadecimal by repeated division<\/h1>\n\n<p>A technique for converting to either binary or hexadecimal is to take the number in decimal and successively divide by either 2 or 16 (depending on the target base), using the remainders to construct the resultant number. Say we want to convert 42 to binary. We would start to divide by 2:<\/p>\n\n<!-- thanks https:\/\/stackoverflow.com\/questions\/22867785 --->\n<p>\\(\\require{enclose}\n\\begin{array}{rll}\n    21\\\\\\\\[-3pt]\n   2 \\enclose{longdiv}{42}\\kern-.2ex \\\\\\\\[-3pt]\n      \\underline{42}  \\\\\\\\[-3pt]\n      0 \\\\\\\\[-3pt]\n  \\end{array}\\)<\/p>\n\n<p>Now, we know that the rightmost digit of the resulting binary number is 0, as that is the remainder of the division. We continue by dividing the previous quotient again:<\/p>\n\n\\[\\require{enclose}\n\\begin{array}{rll}\n    10\\\\\\\\[-3pt]\n   2 \\enclose{longdiv}{21}\\kern-.2ex \\\\\\\\[-3pt]\n      \\underline{20}  \\\\\\\\[-3pt]\n      1 \\\\\\\\[-3pt]\n  \\end{array}\\]\n\n<p>The remainder is 1, so the next digit to the left is a 1. Continue dividing until the quotient is 0 (the intermediate three divisions are left as an exercise for the reader):<\/p>\n\n\\[\\require{enclose}\n\\begin{array}{rll}\n    0\\\\\\\\[-3pt]\n   2 \\enclose{longdiv}{1}\\kern-.2ex \\\\\\\\[-3pt]\n      \\underline{0}  \\\\\\\\[-3pt]\n      1 \\\\\\\\[-3pt]\n  \\end{array}\\]\n\n<p>The final remainder is 1, so the leftmost digit of the resulting binary number is 1. Writing all the results next to each other, we get a result of 101010.<\/p>\n\n<p>The same technique works for converting to hexadecimal (simply divide by 16 repeatedly instead of 2). This technique generalizes to other bases as well.<\/p>\n\n<script>\nMathJax = {\n  tex: {\n    inlineMath: [['$', '$'], ['\\\\(', '\\\\)']]\n  }\n};\n<\/script>\n\n<script id=\"MathJax-script\" async=\"\" src=\"https:\/\/cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-chtml.js\">\n<\/script>","author":{"name":"Connor Monahan"},"summary":"Representation of different bases, and converting to decimal"},{"title":"Zero Hour Game Jam 2018","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2018\/11\/04\/0hgame-2018.html","rel":"alternate","type":"text\/html","title":"Zero Hour Game Jam 2018"}},"published":"2018-11-04T13:11:32+00:00","updated":"2018-11-04T13:11:32+00:00","id":"https:\/\/connormonahan.net\/2018\/11\/04\/0hgame-2018","content":"<p>For this year\u2019s zero hour game, the idea, art, and concept was designed by\nJulia, who was interested in making a corn dating simulator game.<\/p>\n\n<h2 id=\"play-the-game\">Play the game<\/h2>\n\n<p><a href=\"https:\/\/github.com\/cmastudios\/0hgame-2018\">Download and play game from source<\/a><\/p>\n\n<p>Install Python 3.7<\/p>\n\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>pip3 install pygame\npython3 game.py\n<\/code><\/pre><\/div><\/div>\n\n<h3 id=\"controls\">Controls<\/h3>\n\n<p>After selecting your corn, click to shoot butter at him.<\/p>","author":{"name":"Connor Monahan"},"category":{"@attributes":{"term":"0hgame"}},"summary":"For this year\u2019s zero hour game, the idea, art, and concept was designed by Julia, who was interested in making a corn dating simulator game."},{"title":"Arrays in Java","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2018\/02\/08\/arrays.html","rel":"alternate","type":"text\/html","title":"Arrays in Java"}},"published":"2018-02-08T00:19:57+00:00","updated":"2018-02-08T00:19:57+00:00","id":"https:\/\/connormonahan.net\/2018\/02\/08\/arrays","content":"<h1 id=\"simple-lists-with-arrays\">Simple lists with arrays<\/h1>\n\n<p>Simply put, an array is a very basic list. Lists have a wide variety of applications in programming.<\/p>\n\n<p>What are examples of useful lists?<\/p>\n\n<ul>\n  <li>Shopping list<\/li>\n  <li>Nearby Chinese restaurants<\/li>\n  <li>Students in a class<\/li>\n<\/ul>\n\n<p>Let\u2019s take a look at the last example. A list of students in a class may look like this in English: Jeffrey, Paul, Sydney, William, and Kyle. In Java, that list would be stored as an array like this:<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><code class=\"language-plaintext highlighter-rouge\">i<\/code><\/th>\n      <th>0<\/th>\n      <th>1<\/th>\n      <th>2<\/th>\n      <th>3<\/th>\n      <th>4<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><code class=\"language-plaintext highlighter-rouge\">students[i]<\/code><\/td>\n      <td>Jeffrey<\/td>\n      <td>Paul<\/td>\n      <td>Sydney<\/td>\n      <td>William<\/td>\n      <td>Kyle<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Every element in the array has a unique index starting from zero. There are five students in this array, so in Java,\u00a0<code class=\"language-plaintext highlighter-rouge\">students.length<\/code> would be equal to 5.<\/p>\n\n<p>for-loops are a very useful programming structure for manipulating arrays. To see why this is so, imagine needing to print the names of each student. Maybe you\u2019re trying to print a class roster or something. That could be done as follows, but this is inconvenient for many reasons:<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">students<\/span><span class=\"o\">[<\/span><span class=\"mi\">0<\/span><span class=\"o\">]);<\/span>\n<span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">students<\/span><span class=\"o\">[<\/span><span class=\"mi\">1<\/span><span class=\"o\">]);<\/span>\n<span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">students<\/span><span class=\"o\">[<\/span><span class=\"mi\">2<\/span><span class=\"o\">]);<\/span>\n<span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">students<\/span><span class=\"o\">[<\/span><span class=\"mi\">3<\/span><span class=\"o\">]);<\/span>\n<span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">students<\/span><span class=\"o\">[<\/span><span class=\"mi\">4<\/span><span class=\"o\">]);<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>Say Sally switched into this class. Or say Paul dropped the class. This code would then be invalid and require modification. And this code violates the DRY (don\u2019t repeat yourself) principle, as it is executing the same thing five times. The code could easily be converted to using a for loop, as follows:<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">students<\/span><span class=\"o\">.<\/span><span class=\"na\">length<\/span><span class=\"o\">;<\/span> <span class=\"n\">i<\/span><span class=\"o\">++)<\/span> <span class=\"o\">{<\/span>\n\t<span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">students<\/span><span class=\"o\">[<\/span><span class=\"n\">i<\/span><span class=\"o\">]);<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>This is equivalent to rewriting the mathematical statement $x_1 + x_2 + x_3 + x_4 + x_5$ as $\\sum_{i=1}^{5} x_i$<\/p>\n\n<p>Don\u2019t forget that this data structure can be applied to any sort of sequence of data, and the indices of each element can be useful (such as to define a student id).<\/p>\n\n<h1 id=\"tables-or-matrices-as-two-dimensional-arrays\">Tables or matrices as two-dimensional arrays<\/h1>\n\n<p>Other objects, such as tables and matrices, can also be represented in Java. What are some types of data that these might represent?<\/p>\n\n<ul>\n  <li>Logs from a car containing speed, braking, and engine temperature<\/li>\n  <li>Multiplication table<\/li>\n  <li>A digital image!<\/li>\n<\/ul>\n\n<p>Let\u2019s take a look at the first example. Such a table may look like this:<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>i \\ j<\/th>\n      <th>0<\/th>\n      <th>1<\/th>\n      <th>2<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>0<\/td>\n      <td>24.0<\/td>\n      <td>9.8<\/td>\n      <td>40.2<\/td>\n    <\/tr>\n    <tr>\n      <td>1<\/td>\n      <td>88.0<\/td>\n      <td>0.0<\/td>\n      <td>62.1<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Note that the implementation of tables as arrays in java requires that all columns be of the same data type. The convention is that when storing as a 2d array, the rows are the first dimension and the columns are the second.<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>\n<span class=\"kt\">double<\/span> <span class=\"n\">data<\/span><span class=\"o\">[][]<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">double<\/span><span class=\"o\">[<\/span><span class=\"mi\">2<\/span><span class=\"o\">][<\/span><span class=\"mi\">3<\/span><span class=\"o\">]<\/span> <span class=\"o\">{{<\/span><span class=\"mf\">24.0<\/span><span class=\"o\">,<\/span> <span class=\"mf\">9.8<\/span><span class=\"o\">,<\/span> <span class=\"mf\">40.2<\/span><span class=\"o\">},<\/span> <span class=\"o\">{<\/span><span class=\"mf\">88.0<\/span><span class=\"o\">,<\/span> <span class=\"mf\">0.0<\/span><span class=\"o\">,<\/span> <span class=\"mf\">62.1<\/span><span class=\"o\">}};<\/span>\n<span class=\"kt\">int<\/span> <span class=\"n\">rows<\/span> <span class=\"o\">=<\/span> <span class=\"n\">data<\/span><span class=\"o\">.<\/span><span class=\"na\">length<\/span><span class=\"o\">;<\/span>\n<span class=\"kt\">int<\/span> <span class=\"n\">columns<\/span> <span class=\"o\">=<\/span> <span class=\"n\">data<\/span><span class=\"o\">[<\/span><span class=\"mi\">0<\/span><span class=\"o\">].<\/span><span class=\"na\">length<\/span><span class=\"o\">;<\/span>\n\n<\/code><\/pre><\/div><\/div>\n\n<p>In this example, I use <code class=\"language-plaintext highlighter-rouge\">data.length<\/code> to access the number of rows, and I use <code class=\"language-plaintext highlighter-rouge\">data[0].length<\/code> to access the number of columns. This second operation works because as you can see the first element of data is itself an array of length 3.<\/p>\n\n<p>To then print out this table, it\u2019s necessary to use nested for-loops:<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Row\\tSpeed\\tBraking\\tTemp\"<\/span><span class=\"o\">);<\/span>\n<span class=\"c1\">\/\/ for all rows<\/span>\n<span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">row<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span> <span class=\"n\">row<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">rows<\/span><span class=\"o\">;<\/span> <span class=\"n\">row<\/span><span class=\"o\">++)<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"n\">row<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\t\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"c1\">\/\/ for all columns<\/span>\n    <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">column<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span> <span class=\"n\">column<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">columns<\/span><span class=\"o\">;<\/span> <span class=\"n\">column<\/span><span class=\"o\">++)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"n\">data<\/span><span class=\"o\">[<\/span><span class=\"n\">row<\/span><span class=\"o\">][<\/span><span class=\"n\">column<\/span><span class=\"o\">]<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"\\t\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n    <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\"<\/span><span class=\"o\">);<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>The code above iterates through the data by rows at the outer level and columns at the inner level. What if instead we wanted to say find the average of the speed, braking, and temperature? We can choose to iterate by columns and then rows if we choose to, as follows. All that is necessary is to swap the for-loops.<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">column<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span> <span class=\"n\">column<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">columns<\/span><span class=\"o\">;<\/span> <span class=\"n\">column<\/span><span class=\"o\">++)<\/span> <span class=\"o\">{<\/span>\n    <span class=\"kt\">double<\/span> <span class=\"n\">total<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span>\n    <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">row<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span> <span class=\"n\">row<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">rows<\/span><span class=\"o\">;<\/span> <span class=\"n\">row<\/span><span class=\"o\">++)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">total<\/span> <span class=\"o\">+=<\/span> <span class=\"n\">data<\/span><span class=\"o\">[<\/span><span class=\"n\">row<\/span><span class=\"o\">][<\/span><span class=\"n\">column<\/span><span class=\"o\">];<\/span>\n    <span class=\"o\">}<\/span>\n    <span class=\"kt\">double<\/span> <span class=\"n\">average<\/span> <span class=\"o\">=<\/span> <span class=\"n\">total<\/span> <span class=\"o\">\/<\/span> <span class=\"n\">rows<\/span><span class=\"o\">;<\/span>\n    <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Average of column \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">column<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\": \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">average<\/span><span class=\"o\">);<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<script>\nMathJax = {\n  tex: {\n    inlineMath: [['$', '$'], ['\\\\(', '\\\\)']]\n  }\n};\n<\/script>\n\n<script id=\"MathJax-script\" async=\"\" src=\"https:\/\/cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-chtml.js\">\n<\/script>","author":{"name":"Connor Monahan"},"summary":"Simple lists with arrays"},{"title":"Code Scope","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2018\/02\/04\/scope.html","rel":"alternate","type":"text\/html","title":"Code Scope"}},"published":"2018-02-04T16:07:38+00:00","updated":"2018-02-04T16:07:38+00:00","id":"https:\/\/connormonahan.net\/2018\/02\/04\/scope","content":"<p>A common nuance of programming is that of code scope. Scope refers to the variables that can be accessed from a particular section of code. Scope can also be local or global. In Java, new levels of scope are delimited by\u00a0<code class=\"language-plaintext highlighter-rouge\">{ ... }<\/code> blocks.<\/p>\n\n<p>From wikipedia:<\/p>\n\n<blockquote>\n  <p>In\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_programming\" title=\"Computer programming\">computer programming<\/a>, the\u00a0<strong>scope<\/strong>\u00a0of\u00a0a\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Variable_(programming)\" title=\"Variable (programming)\">variable<\/a>{.mw-redirect}\u00a0is the region of a\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_program\" title=\"Computer program\">computer program<\/a>\u00a0where the binding is valid: where the variable name can be used to refer to the entity. Such a region is referred to as a\u00a0<strong><span id=\"scope_block\">scope block<\/span><\/strong>. In other parts of the program the name may refer to a different entity (it may have a different binding), or to nothing at all (it may be unbound).<\/p>\n<\/blockquote>\n\n<p>Variables are declared like below. They cannot be\u00a0<strong>declared<\/strong> twice within the same scope.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Code sample<\/th>\n      <th>Type<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><code class=\"language-plaintext highlighter-rouge\">int x;<\/code><\/td>\n      <td>Declaration<\/td>\n    <\/tr>\n    <tr>\n      <td><code class=\"language-plaintext highlighter-rouge\">int x = 24;<\/code><\/td>\n      <td>Declaration and Assignment<\/td>\n    <\/tr>\n    <tr>\n      <td><code class=\"language-plaintext highlighter-rouge\">x = 24;<\/code><\/td>\n      <td>Assignment<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>In Java, imagine you have a class that looks like the following:<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">BankAccount<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nc\">String<\/span> <span class=\"n\">owner<\/span><span class=\"o\">;<\/span>\n    <span class=\"kt\">double<\/span> <span class=\"n\">balance_c<\/span><span class=\"o\">,<\/span> <span class=\"n\">balance_s<\/span><span class=\"o\">;<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>Then imagine it has a method like this:<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">deposit<\/span><span class=\"o\">(<\/span><span class=\"kt\">double<\/span> <span class=\"n\">amount<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n    <span class=\"n\">balance_c<\/span> <span class=\"o\">=<\/span> <span class=\"n\">balance_c<\/span> <span class=\"o\">+<\/span> <span class=\"n\">amount<\/span><span class=\"o\">;<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>The variable <strong>balance<\/strong> has\u00a0<strong>global scope<\/strong> and it can be accessed by the method deposit because it is declared outside of it.<\/p>\n\n<p>Imagine if the method looked like this:<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">deposit<\/span><span class=\"o\">(<\/span><span class=\"kt\">double<\/span> <span class=\"n\">amount<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">amount<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">String<\/span> <span class=\"n\">destination<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ask<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Savings or checking?\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">destination<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"savings\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">balance_s<\/span> <span class=\"o\">=<\/span> <span class=\"n\">balance_s<\/span> <span class=\"o\">+<\/span> <span class=\"n\">amount<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">destination<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"checking\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">balance_c<\/span> <span class=\"o\">=<\/span> <span class=\"n\">balance_c<\/span> <span class=\"o\">+<\/span> <span class=\"n\">amount<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>Would this method compile? It would not. The variable\u00a0<strong>destination<\/strong> has\u00a0<strong>local scope<\/strong>, however it will not be accessible by the if statements below because its declaration <code class=\"language-plaintext highlighter-rouge\">(String destination)<\/code> is within the scope of\u00a0<code class=\"language-plaintext highlighter-rouge\">if (amount &gt; 0) { ... }<\/code>. How would this be fixed?<\/p>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">deposit<\/span><span class=\"o\">(<\/span><span class=\"kt\">double<\/span> <span class=\"n\">amount<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n    <span class=\"nc\">String<\/span> <span class=\"n\">destination<\/span><span class=\"o\">;<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">amount<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">destination<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ask<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Savings or checking?\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"o\">}<\/span>\n    <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">destination<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"savings\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">balance_s<\/span> <span class=\"o\">=<\/span> <span class=\"n\">balance_s<\/span> <span class=\"o\">+<\/span> <span class=\"n\">amount<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">destination<\/span> <span class=\"o\">==<\/span> <span class=\"s\">\"checking\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"n\">balance_c<\/span> <span class=\"o\">=<\/span> <span class=\"n\">balance_c<\/span> <span class=\"o\">+<\/span> <span class=\"n\">amount<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div><\/div>\n\n<p>Move the declaration part up a level.<\/p>","author":{"name":"Connor Monahan"},"summary":"A common nuance of programming is that of code scope. Scope refers to the variables that can be accessed from a particular section of code. Scope can also be local or global. In Java, new levels of scope are delimited by\u00a0{ ... } blocks."},{"title":"Programming various Atmel chips","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/hardware\/2017\/11\/11\/programming-various-atmel-chips.html","rel":"alternate","type":"text\/html","title":"Programming various Atmel chips"}},"published":"2017-11-11T20:06:00+00:00","updated":"2017-11-11T20:06:00+00:00","id":"https:\/\/connormonahan.net\/hardware\/2017\/11\/11\/programming-various-atmel-chips","content":"<p>This is meant to be a compendium of programming guides for a series of useful Atmel chips.<\/p>\n\n<p>Diagram of the Arduino Uno, which will be used to program each of these chips:<\/p>\n\n<h2 id=\"atmega328p\">ATmega328P<\/h2>\n\n<p>Diagram: <img src=\"\/images\/pinoutmega328.png\" alt=\"ATmega328P pinout\" \/><\/p>\n\n<h3 id=\"one-time-burning-the-bootloader\">One time: burning the bootloader<\/h3>\n\n<ol>\n  <li>Connect an unwired Arduino to the computer.<\/li>\n  <li>Set Tools\/Board to \u201cArduino\/Genuino Uno\u201d and upload the example ArduinoISP sketch.<\/li>\n  <li>In Documents\/Arduino, create a new folder called \u201chardware\u201d.<\/li>\n  <li>\n    <p>Download\u00a0<a href=\"https:\/\/www.arduino.cc\/en\/uploads\/Tutorial\/breadboard-1-6-x.zip\">breadboard-1.6.zip<\/a> and unzip it in the hardware folder. The final directory tree should look like this:<\/p>\n\n    <p><img src=\"\/images\/idebootloaders.png\" alt=\"Arduino IDE hardware folder structure\" \/><\/p>\n  <\/li>\n  <li>Restart the Arduino IDE.<\/li>\n  <li>\n    <p>Wire the devices as shown.<\/p>\n\n    <p><img src=\"\/images\/wirediagrammega328.png\" alt=\"ATmega328P on a breadboard bootloader configuration\" \/><\/p>\n  <\/li>\n  <li>Connect a 10 \u00b5F capacitor from reset to ground on the Arduino.<\/li>\n  <li>Set Tools\/Board to \u201cATmega328 on a breadboard (8MHz internal)\u201d.<\/li>\n  <li>Set Tools\/Programmer to \u201cArduino as ISP\u201d<\/li>\n  <li>Click Tools\/Burn Bootloader.<\/li>\n  <li>Post the error it gives you in the comments below. (hopefully none)<\/li>\n<\/ol>\n\n<h3 id=\"every-time-uploading-sketches\">Every time: uploading sketches<\/h3>\n\n<ol>\n  <li>Set Tools\/Board to \u201cATmega328 on a breadboard (8MHz internal)\u201d.<\/li>\n  <li>Set Tools\/Programmer to \u201cArduino\/Genuino Uno\u201d<\/li>\n  <li>\n    <p>Wire the device like shown.<\/p>\n\n    <p><img src=\"\/images\/wirediagrammega328.2.png\" alt=\"ATmega328P on a breadboard programming configuration\" \/><\/p>\n  <\/li>\n  <li>Press the upload button.<\/li>\n<\/ol>\n\n<h2 id=\"atmega328-without-the-p\">ATmega328 (without the P)<\/h2>\n\n<p>Seriously consider buying a regular ATmega328P unless this is all they have at your local electronics store.<\/p>\n\n<h3 id=\"one-time-burning-the-bootloader-1\">One time: burning the bootloader<\/h3>\n\n<p>Follow the same instructions as for ATmega328P, but after step 3 edit \u201cboards.txt\u201d within Arduino\/hardware\/breadboard\/avr. Find the line that reads \u201catmega328bb.build.mcu=atmega328p\u201d and change atmega328<strong>p<\/strong> to atmega328. After step 9, revert this change (the bootloader causes the chip to respond in the same way as a ATmega328P).<\/p>\n\n<h3 id=\"every-time-uploading-sketches-1\">Every time: uploading sketches<\/h3>\n\n<p>Same instructions as for ATmega328P<\/p>\n\n<h2 id=\"attiny84-14-pin-dip\">ATtiny84 (14-pin DIP)<\/h2>\n\n<p>No bootloader is required.<\/p>\n\n<p>Diagram: <img src=\"\/images\/pinouttiny8485.png\" alt=\"ATtiny84\/85 pinout\" \/><\/p>\n\n<h3 id=\"uploading-sketches\">Uploading sketches:<\/h3>\n\n<ol>\n  <li>Connect an unwired Arduino to the computer.<\/li>\n  <li>Set Tools\/Board to \u201cArduino\/Genuino Uno\u201d and upload the example ArduinoISP sketch.<\/li>\n  <li>Open Arduino\u2019s preferences. In Additional Boards Manager URLs, insert\u00a0<code class=\"language-plaintext highlighter-rouge\">https:\/\/raw.githubusercontent.com\/damellis\/attiny\/ide-1.6.x-boards-manager\/package_damellis_attiny_index.json<\/code> and press OK.<\/li>\n  <li>Go to Tools\/Boards\/Boards Manager. Search for attiny. Click the first result and press Install.<\/li>\n  <li>Restart the Arduino IDE.<\/li>\n  <li>\n    <p>Wire the board as follows.<\/p>\n\n    <p><img src=\"\/images\/wirediagramtiny84.png\" alt=\"ATtiny84 on a breadboard programming configuration\" \/><\/p>\n  <\/li>\n  <li>Set Tools\/Board to ATtiny24\/44\/84<\/li>\n  <li>Set Tools\/Processer to ATtiny84<\/li>\n  <li>Set Tools\/Clock to 1MHz<\/li>\n  <li>Set Tools\/Programmer to Arduino as ISP.<\/li>\n  <li>Click Sketch\/Upload using Programmer.<\/li>\n<\/ol>\n\n<h2 id=\"attiny85-8-pin-dip\">ATtiny85 (8-pin DIP)<\/h2>\n\n<p>No bootloader is required.<\/p>\n\n<h3 id=\"uploading-sketches-1\">Uploading sketches:<\/h3>\n\n<p>Follow the instructions for the ATtiny84. For step 6, wire the board as follows:<\/p>\n\n<p><img src=\"\/images\/wirediagramtiny85.png\" alt=\"ATtiny85 on a breadboard programming configuration\" \/><\/p>\n\n<p>For step 7, select ATtiny25\/45\/85. For step 8, select ATtiny85.<\/p>\n\n<p>Sources:<\/p>\n\n<ul>\n  <li>https:\/\/www.arduino.cc\/en\/Tutorial\/ArduinoToBreadboard<\/li>\n  <li>http:\/\/42bots.com\/tutorials\/programming-attiny84-attiny44-with-arduino-uno\/<\/li>\n  <li>http:\/\/42bots.com\/tutorials\/how-to-program-attiny85-with-arduino-uno-part-1\/<\/li>\n  <li>http:\/\/www.pighixxx.com\/<\/li>\n<\/ul>","author":{"name":{}},"category":[{"@attributes":{"term":"Hardware"}},{"@attributes":{"term":"arduino,"}},{"@attributes":{"term":"atmel"}}],"summary":"This is meant to be a compendium of programming guides for a series of useful Atmel chips."},{"title":"Zero Hour Game Jam 2017","link":{"@attributes":{"href":"https:\/\/connormonahan.net\/2017\/11\/05\/zero-hour-game-jam-2017.html","rel":"alternate","type":"text\/html","title":"Zero Hour Game Jam 2017"}},"published":"2017-11-05T00:00:00+00:00","updated":"2017-11-05T00:00:00+00:00","id":"https:\/\/connormonahan.net\/2017\/11\/05\/zero-hour-game-jam-2017","content":"<p>Title: Zero Hour Game Jam 2017\nDate: 2017-11-05 01:00\nModified: 2018-12-23 18:01\nCategory: Games\nTags: 0hgame\nSlug: 0hgame-2017\nAuthor: Connor Monahan\nSummary: Me and Julia\u2019s submission \u201cSatan Cart Horror\u201d<\/p>\n\n<p>For this year\u2019s zero hour game, I again used a title generated by the video\ngame name generator. My game, \u201cSatan Cart Horror\u201d documents the life of a\nperson trying to escape from the depths of the underworld on a minecart.\nTo safe yourself, you must dodge the demons that attact constantly by jumping\nout of the cart temporarily by pressing the space bar.<\/p>\n\n<p><a href=\"https:\/\/cmastudios.github.io\/0hgame-2017\/\">Play the game in your web browser<\/a><\/p>\n\n<p>Controls: space bar to jump<\/p>\n\n<p><a href=\"https:\/\/github.com\/cmastudios\/0hgame-2017\/\">Download source code<\/a><\/p>","author":{"name":{}},"summary":"Title: Zero Hour Game Jam 2017 Date: 2017-11-05 01:00 Modified: 2018-12-23 18:01 Category: Games Tags: 0hgame Slug: 0hgame-2017 Author: Connor Monahan Summary: Me and Julia\u2019s submission \u201cSatan Cart Horror\u201d"}]}