<?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[brettmorgan.net]]></title><description><![CDATA[Thoughts from an inland sailor]]></description><link>https://www.brettmorgan.net/</link><image><url>https://www.brettmorgan.net/favicon.png</url><title>brettmorgan.net</title><link>https://www.brettmorgan.net/</link></image><generator>Ghost 5.22</generator><lastBuildDate>Wed, 08 Apr 2026 12:09:29 GMT</lastBuildDate><atom:link href="https://www.brettmorgan.net/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Adirondack chairs]]></title><description><![CDATA[<p>So my wife wanted some Adirondack chairs for around the fire pit. No problem I thought, I can make them. Little did I know how much effort it would take!</p><p>I bought some plans from <a href="https://www.rockler.com/adirondack-chair-templates-with-plan-and-stainless-steel-hardware-pack">Rockler.com</a>. The plans contained cardboard templates, lumber requirments, and cut &amp; assembly instructions. All</p>]]></description><link>https://www.brettmorgan.net/adirondack-chairs/</link><guid isPermaLink="false">636a74c43d78b8000136c58e</guid><category><![CDATA[diy]]></category><category><![CDATA[woodworking]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Mon, 22 Jul 2019 22:01:54 GMT</pubDate><media:content url="https://www.brettmorgan.net/content/images/2019/07/IMG_3764--1-.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://www.brettmorgan.net/content/images/2019/07/IMG_3764--1-.jpg" alt="Adirondack chairs"><p>So my wife wanted some Adirondack chairs for around the fire pit. No problem I thought, I can make them. Little did I know how much effort it would take!</p><p>I bought some plans from <a href="https://www.rockler.com/adirondack-chair-templates-with-plan-and-stainless-steel-hardware-pack">Rockler.com</a>. The plans contained cardboard templates, lumber requirments, and cut &amp; assembly instructions. All in all it was a pretty good set of plans.</p><p>My original intention was to make cedar chairs, but quickly found that cedar was out of my budget. Instead I settled for clear pine, with the plan to finish with a clear poly coat.</p><p>The hardest part was cutting out the pieces. I only had a jigsaw. For the first chair I really didn&apos;t have a long enough blade so my cuts required more sanding to even things out. I got a longer blade for the second chair and the cuts where more even. It would have been a breeze with a band saw. </p><p>For the round-over I used a <a href="https://www.rockler.com/trim-router-table">Trim Router Table</a>, also from Rocker. &#xA0;I clamped it to a board between two saw horse, and it worked great with my Dewalt 611 trim router.</p><p>I finished the chairs with 3 coats of Minwax water-based Helmsman Spar Urethane. &#xA0;I&apos;ll probably add another coat or two before the season is done.</p><p>They turned out nice!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_3669.jpg" class="kg-image" alt="Adirondack chairs" loading="lazy"><figcaption>Finishing</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_3759.jpg" class="kg-image" alt="Adirondack chairs" loading="lazy"><figcaption>Assembly</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_3701.jpg" class="kg-image" alt="Adirondack chairs" loading="lazy"><figcaption>1st Chair</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_3765-1.jpg" class="kg-image" alt="Adirondack chairs" loading="lazy"><figcaption>2nd Chair</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_3764.jpg" class="kg-image" alt="Adirondack chairs" loading="lazy"><figcaption>Ready for the fire. I built that fire pit too!</figcaption></figure><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Washing Machine Halloween Costume]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/X31WFq8NixE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><!--kg-card-begin: markdown--><p>It&apos;s been awhile since I&apos;ve posted, so I thought I&apos;d hightlight an oldie, but goodie.</p>
<p>We have to go back to Halloween 2016.  My daughter came to me and said that she and a friend wanted to be a washing machine and dryer.  Well,</p>]]></description><link>https://www.brettmorgan.net/washing-machine-halloween-costume/</link><guid isPermaLink="false">636a74c43d78b8000136c588</guid><category><![CDATA[3D Printer]]></category><category><![CDATA[cardboard]]></category><category><![CDATA[crafts]]></category><category><![CDATA[diy]]></category><category><![CDATA[halloween]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Tue, 09 Jul 2019 22:41:00 GMT</pubDate><media:content url="https://www.brettmorgan.net/content/images/2017/05/IMG_7891-1.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/X31WFq8NixE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><!--kg-card-begin: markdown--><img src="https://www.brettmorgan.net/content/images/2017/05/IMG_7891-1.jpg" alt="Washing Machine Halloween Costume"><p>It&apos;s been awhile since I&apos;ve posted, so I thought I&apos;d hightlight an oldie, but goodie.</p>
<p>We have to go back to Halloween 2016.  My daughter came to me and said that she and a friend wanted to be a washing machine and dryer.  Well, that got my brain spinning, and I had an idea of what I could do.</p>
<p>Here&apos;s what I ended up with.<br>
<img src="https://www.brettmorgan.net/content/images/2017/05/IMG_7891.jpg" alt="Washing Machine Halloween Costume" loading="lazy"></p>
<p>Pretty cool, right? So how did I get there.  I honestly can&apos;t remember if I started with a 3D model or a trip <a href="http://www.sparkfun.com">Sparkfun.com</a>.  Probably Sparkfun.  Here is a <a href="http://sfe.io/w138888">wishlist</a> with all the parts I used.</p>
<p>I had recently started using Autodesk Fusion 360 to do 3D modeling, so I used it to create a model of my washer/dryer idea.</p>
<p><img src="https://www.brettmorgan.net/content/images/2017/05/Washing_Machine_Custume_2017-May-31_05-34-35PM-000_CustomizedView23391378095.png" alt="Washing Machine Halloween Costume" loading="lazy"></p>
<!--kg-card-end: markdown--><p>Once I had the basic model and all the parts, it was a frantic weekend before Halloween to get these things built. &#xA0;Prototyping electronics, 3D printing parts, cutting cardboard, soldering final electronics, and final assembly. &#xA0;All 2x!</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7849.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7849.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7849.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7849.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7849.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7850.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7850.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7850.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7850.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7850.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7852.jpg" width="2000" height="2667" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7852.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7852.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7852.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7852.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7853.jpg" width="2000" height="2667" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7853.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7853.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7853.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7853.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7854.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7854.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7854.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7854.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7854.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7855.jpg" width="2000" height="2667" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7855.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7855.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7855.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7855.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7857.jpg" width="2000" height="2667" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7857.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7857.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7857.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7857.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7861.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7861.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7861.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7861.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7861.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div></div></figure><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7862.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7862.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7862.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7862.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7862.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7864.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7864.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7864.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7864.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7864.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7868.jpg" width="2000" height="2667" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7868.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7868.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7868.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7868.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7870.jpg" width="2000" height="2667" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7870.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7870.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7870.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7870.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7909.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7909.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7909.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7909.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7909.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7913.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7913.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7913.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7913.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7913.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7918.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7918.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7918.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7918.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7918.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://www.brettmorgan.net/content/images/2019/07/IMG_7927.jpg" width="2000" height="1500" loading="lazy" alt="Washing Machine Halloween Costume" srcset="https://www.brettmorgan.net/content/images/size/w600/2019/07/IMG_7927.jpg 600w, https://www.brettmorgan.net/content/images/size/w1000/2019/07/IMG_7927.jpg 1000w, https://www.brettmorgan.net/content/images/size/w1600/2019/07/IMG_7927.jpg 1600w, https://www.brettmorgan.net/content/images/size/w2400/2019/07/IMG_7927.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div></div></figure><figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/TNFKgmm-mNM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/OiDlPfZbdog?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><p>Here is the code used drive the costume. &#xA0;An Arduino Pro is the brains behind it.</p><!--kg-card-begin: markdown--><pre><code class="language-arduino">#include &lt;Adafruit_NeoPixel.h&gt;

#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define SW1 6
#define SW2 7
#define SW3 8
#define SW4 9

#define LED_STRIP_PIN 10

Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, LED_STRIP_PIN, NEO_GRB + NEO_KHZ800);

const int startButton = 12;

int isRunning = LOW;
int buttonState;
int lastButtonState = HIGH;

unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

unsigned long lastStepTime = 0;
unsigned long stepTime = 4;
int step = 0;

int rainbowStep = 0;

void setup() {
  Serial.begin(9600);
  pinMode(SW1, INPUT_PULLUP);
  pinMode(SW2, INPUT_PULLUP);
  pinMode(SW3, INPUT_PULLUP);
  pinMode(SW4, INPUT_PULLUP);

  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);

  pinMode(startButton, INPUT_PULLUP);

  lastStepTime = millis();
    
  strip.begin();
  strip.show();
}

void loop() {
  switchTopLeds();
  //readStartButton();
  setStripLeds();
}

void switchTopLeds() {
  // Read swtiches
  int sw1State = digitalRead(SW1);
  int sw2State = digitalRead(SW2);
  int sw3State = digitalRead(SW3);
  int sw4State = digitalRead(SW4);


  // Set LEDS
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  if(sw1State == LOW) {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
  } else if(sw2State == LOW) {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
  } else if(sw3State == LOW) {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, LOW);
  } else if(sw4State == LOW) {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
  }
  
}

void readStartButton() {
  int reading = digitalRead(startButton);
  //Serial.println(reading);
//
//  if(reading != lastButtonState) {
//    lastDebounceTime = millis();
//  }
//
//  if((millis() - lastDebounceTime) &gt; debounceDelay) {
//    if(reading != buttonState) {
//      buttonState = reading;
//      Serial.println(buttonState);
//      if(buttonState == HIGH) {
//        isRunning = !buttonState;
//      }
//    }
//  }
  if(reading == LOW) {
    red();
  }
  lastButtonState = reading;
}

void setStripLeds() {
  unsigned long currentTime = millis();
  if((currentTime - lastStepTime) &gt; stepTime) {
    if(step &gt;= strip.numPixels()) {
      step = 0;
    }

    int sw1State = digitalRead(SW1);
    int sw2State = digitalRead(SW2);
    int sw3State = digitalRead(SW3);
    int sw4State = digitalRead(SW4);
    int bigButtonState = digitalRead(startButton);

    
    //Piper
//    if(bigButtonState == LOW) {
//      red();
//    } else if(sw1State == LOW) {
//      blueBlackSpin(step);
//    } else if(sw2State == LOW) {
//      blueGreenSpin(step);
//    } else if(sw3State == LOW) {
//      redBlackSpin(step);
//    } else if(sw4State == LOW) {
//      rainbow();
//    } else {
//      blue();
//    }

    //Lotus
    if(bigButtonState == LOW) {
      blue();
    } else if(sw1State == LOW) {
      yellowRedSpin(step);
    } else if(sw2State == LOW) {
      redPinkSpin(step);
    } else if(sw3State == LOW) {
      blueGreenSpin(step);
    } else if(sw4State == LOW) {
      rainbow();
    } else {
      red();
    }



    
    //rainbow();
    
    //blueBlackSpin(step);
    //redBlackSpin(step);
    //yellowRedSpin(step);
    //colorWhiteSpin(step);

    lastStepTime = currentTime;
    step++;
  }
    
}

void fullWhite() {
  
    for(uint16_t i=0; i&lt;strip.numPixels(); i++) {
        strip.setPixelColor(i, strip.Color(0,0,0, 255 ) );
    }
      strip.show();
}

void blue() {
  uint16_t i;
  int b = -210;
  
  for(i=0; i&lt;strip.numPixels(); i++) {
    strip.setPixelColor(i, strip.Color(0,0,abs(b)));
    b = b + 7;
  }
  strip.show();  
}

void red() {
  uint16_t i;
  int r = -210;
  
  for(i=0; i&lt;strip.numPixels(); i++) {
    strip.setPixelColor(i, strip.Color(abs(r),0,0));
    r = r + 7;
  }  
  strip.show();
}

void blueBlackSpin(int step) {
  uint16_t i;
    int b = -210;
    
    for(i=0; i&lt;strip.numPixels(); i++) {
      strip.setPixelColor(computeOffset(i,step), strip.Color(0,0,abs(b)));
      b = b + 7;
    }
    strip.show();
}

void redBlackSpin(int step) {
  uint16_t i;
    int r = -210;
    
    for(i=0; i&lt;strip.numPixels(); i++) {
      strip.setPixelColor(computeOffset(i,step), strip.Color(abs(r),0,0));
      r = r + 7;
    }
    strip.show();
}

void yellowRedSpin(int step) {
  uint16_t i;
    int g = -210;
    
    for(i=0; i&lt;strip.numPixels(); i++) {
      strip.setPixelColor(computeOffset(i,step), strip.Color(255,abs(g),0));
      g = g + 7;
    }
    strip.show();
}

void redPinkSpin(int step) {
  uint16_t i;
    int b = -210;
    
    for(i=0; i&lt;strip.numPixels(); i++) {
      strip.setPixelColor(computeOffset(i,step), strip.Color(255,0,abs(b)));
      b = b + 7;
    }
    strip.show();
}

void colorWhiteSpin(int step) {
  uint16_t i;
    int r = -120;
    int g = -120;
    
    for(i=0; i&lt;strip.numPixels(); i++) {
      strip.setPixelColor(computeOffset(i,step), strip.Color(abs(r),abs(g),255));
      r = r + 4;
      g = g + 4;
    }
    strip.show();
}

void blueGreenSpin(int) {
  uint16_t i;
  int g = 0;
  int b = 255;

  for(i=0; i&lt;strip.numPixels(); i++) {
      if(g &gt; 255) {
        g = 255;
      }
      if(b &lt; 0) {
        b = 0;
      }
      strip.setPixelColor(computeOffset(i,step), strip.Color(0,g,b));
      g = g + 8;
      b = b - 8;
    }
 strip.show();
  
}

int computeOffset(int loc, int step) {
  int newLoc = loc + step;
  if(newLoc &gt;= strip.numPixels()) {
    newLoc = newLoc - strip.numPixels();
  }
  return newLoc;
}

void rainbow() {
  uint16_t i, j;
  if(rainbowStep &gt; 255) {
    rainbowStep = 0;
  }

  for(i=0; i&lt;strip.numPixels(); i++) {
    strip.setPixelColor(i, Wheel((i+rainbowStep) &amp; 255));
  }
  strip.show();

  rainbowStep++;

}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos &lt; 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos &lt; 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[brettmorgan.net is back]]></title><description><![CDATA[<p>I finally had some spare time, so I got brettmorgan.net back up. &#xA0;<a href="https://blog.cloud66.com/stuck-docker-cloud-shutdown/">Docker Cloud went bust</a> on me, so I had to redeploy everything on a new server. &#xA0;Since it had been awhile I also had to upgrade my Ghost publishing software from 0.11 version all</p>]]></description><link>https://www.brettmorgan.net/brettmorgan-net-is-back/</link><guid isPermaLink="false">636a74c43d78b8000136c58f</guid><category><![CDATA[Docker]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Mon, 08 Jul 2019 22:03:00 GMT</pubDate><content:encoded><![CDATA[<p>I finally had some spare time, so I got brettmorgan.net back up. &#xA0;<a href="https://blog.cloud66.com/stuck-docker-cloud-shutdown/">Docker Cloud went bust</a> on me, so I had to redeploy everything on a new server. &#xA0;Since it had been awhile I also had to upgrade my Ghost publishing software from 0.11 version all the way to 2.25. &#xA0;Using a Digital Ocean Droplet and Docker I was able to bring the old version up, and then follow to upgrade steps to version 1, and then to version 2. &#xA0;It took a few hours, but all&apos;s working well now. &#xA0;Now to post some projects!</p>]]></content:encoded></item><item><title><![CDATA[Dragon Mask]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>To follow up on <a href="https://www.brettmorgan.net/wolf-mask/">Wolf Mask</a>, I made a Dragon Mask for my other daughter.  Sorry I only have a few pictures.</p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8871.jpg" alt loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8869.jpg" alt loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8870.jpg" alt loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8872.jpg" alt loading="lazy"></p>
<!--kg-card-end: markdown-->]]></description><link>https://www.brettmorgan.net/dragon-mask/</link><guid isPermaLink="false">636a74c43d78b8000136c58b</guid><category><![CDATA[mask]]></category><category><![CDATA[costume]]></category><category><![CDATA[diy]]></category><category><![CDATA[cardboard]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Wed, 28 Feb 2018 02:42:56 GMT</pubDate><media:content url="https://www.brettmorgan.net/content/images/2018/02/IMG_8871-1.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8871-1.jpg" alt="Dragon Mask"><p>To follow up on <a href="https://www.brettmorgan.net/wolf-mask/">Wolf Mask</a>, I made a Dragon Mask for my other daughter.  Sorry I only have a few pictures.</p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8871.jpg" alt="Dragon Mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8869.jpg" alt="Dragon Mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8870.jpg" alt="Dragon Mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8872.jpg" alt="Dragon Mask" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Wolf mask]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I made this mask last year for my daughters play.  Basically all corrugated cardboard.  I 3D printed the eyes and painted.  Molding clay for the teeth.</p>
<p>The Mask in Action<br>
<img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8442.jpg" alt="Mask in action" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8388.jpg" alt="Mask front" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8367.jpg" alt="Mask frame" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8369.jpg" alt="Partial fur" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8375.jpg" alt="Hard at work" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8390.jpg" alt="Eye closeup" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8391.jpg" alt="Mask Straight own" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8392.jpg" alt="Mask side" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8394.jpg" alt="Mask back" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8385.jpg" alt="Mask on my wife" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></description><link>https://www.brettmorgan.net/wolf-mask/</link><guid isPermaLink="false">636a74c43d78b8000136c58a</guid><category><![CDATA[cardboard]]></category><category><![CDATA[costume]]></category><category><![CDATA[3D Printer]]></category><category><![CDATA[crafts]]></category><category><![CDATA[diy]]></category><category><![CDATA[mask]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Wed, 28 Feb 2018 02:16:00 GMT</pubDate><media:content url="https://www.brettmorgan.net/content/images/2018/02/IMG_8389.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8389.jpg" alt="Wolf mask"><p>I made this mask last year for my daughters play.  Basically all corrugated cardboard.  I 3D printed the eyes and painted.  Molding clay for the teeth.</p>
<p>The Mask in Action<br>
<img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8442.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8388.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8367.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8369.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8375.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8390.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8391.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8392.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8394.jpg" alt="Wolf mask" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_8385.jpg" alt="Wolf mask" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Cardboard Armor]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>My daughter needed some armor for her 6th grade Joan of Arc presentation.  I got the idea from here, <a href="https://mymodernmet.com/knight-cardboard-costume-diy/">Knight Cardboard Costume</a>.  Here are a couple pics.  I forgot to take one my daughter.  Maybe when she gets it back from school.</p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_0631--2-.jpg" alt="Armor with dress" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_0632.jpg" alt="Armor closeup" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></description><link>https://www.brettmorgan.net/cardboard-armor/</link><guid isPermaLink="false">636a74c43d78b8000136c589</guid><category><![CDATA[cardboard]]></category><category><![CDATA[costume]]></category><category><![CDATA[diy]]></category><category><![CDATA[crafts]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Wed, 28 Feb 2018 01:50:52 GMT</pubDate><media:content url="https://www.brettmorgan.net/content/images/2018/02/IMG_0631--1-.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_0631--1-.jpg" alt="Cardboard Armor"><p>My daughter needed some armor for her 6th grade Joan of Arc presentation.  I got the idea from here, <a href="https://mymodernmet.com/knight-cardboard-costume-diy/">Knight Cardboard Costume</a>.  Here are a couple pics.  I forgot to take one my daughter.  Maybe when she gets it back from school.</p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_0631--2-.jpg" alt="Cardboard Armor" loading="lazy"></p>
<p><img src="https://www.brettmorgan.net/content/images/2018/02/IMG_0632.jpg" alt="Cardboard Armor" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Awesome Waterjet Cutter]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I want this!  Any angel investors out there what to pay for my Makerspace!</p>
<p><a href="https://www.kickstarter.com/projects/1294137530/the-first-desktop-waterjet-cutter">The First Desktop Waterjet Cutter</a></p>
<iframe width="800" height="450" src="https://www.kickstarter.com/projects/1294137530/the-first-desktop-waterjet-cutter/widget/video.html" frameborder="0" scrolling="no"> </iframe><!--kg-card-end: markdown-->]]></description><link>https://www.brettmorgan.net/awesome-waterjet-cutter/</link><guid isPermaLink="false">636a74c43d78b8000136c587</guid><category><![CDATA[makerspace]]></category><category><![CDATA[tools]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Thu, 15 Sep 2016 13:13:16 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I want this!  Any angel investors out there what to pay for my Makerspace!</p>
<p><a href="https://www.kickstarter.com/projects/1294137530/the-first-desktop-waterjet-cutter">The First Desktop Waterjet Cutter</a></p>
<iframe width="800" height="450" src="https://www.kickstarter.com/projects/1294137530/the-first-desktop-waterjet-cutter/widget/video.html" frameborder="0" scrolling="no"> </iframe><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Weekend Project: New Quadcopter Landing Gear]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>My quadcopter has been collecting dust for about a year because of broken landing gear from a hard landing.  I decide last weekend that it was time to fix that.</p>
<p>I&apos;d been using some Lego to as landing gear to give room for my <a href="http://www.helipal.com/tarot-t-2d-brushless-gimbal-for-gopro-hero-3.html">Tarot GoPro gimbal</a>.  See</p>]]></description><link>https://www.brettmorgan.net/weekend-project-new-quadcopter-landing-gear/</link><guid isPermaLink="false">636a74c43d78b8000136c586</guid><category><![CDATA[Quadcopter]]></category><category><![CDATA[Drones]]></category><category><![CDATA[3D Printer]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Thu, 12 May 2016 14:07:33 GMT</pubDate><media:content url="https://www.brettmorgan.net/content/images/2016/05/IMG_6809.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://www.brettmorgan.net/content/images/2016/05/IMG_6809.jpg" alt="Weekend Project: New Quadcopter Landing Gear"><p>My quadcopter has been collecting dust for about a year because of broken landing gear from a hard landing.  I decide last weekend that it was time to fix that.</p>
<p>I&apos;d been using some Lego to as landing gear to give room for my <a href="http://www.helipal.com/tarot-t-2d-brushless-gimbal-for-gopro-hero-3.html">Tarot GoPro gimbal</a>.  See here:<br>
<img src="https://www.brettmorgan.net/content/images/2016/05/IMG_3237.jpg" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<p>I&apos;ve broken a few of those Lego beams, so I decided I needed something different.</p>
<p>Since I have a <a href="https://printrbot.com/shop/assembled-simple-metal-with-heated-bed/">Printrbot Simple 3D Printer</a>, I figured I could design some new landing gear and print them out.</p>
<h3 id="design">Design</h3>
<p>Lately, my goto application for 3D design is <a href="http://www.openscad.org">OpenSCAD</a>.  OpenSCAD uses 3D objects to compose your 3D model.  OpenSCAD also uses a scripting language to create objects rather then click and drag techniques.  Being that I&apos;m a software engineer, this method works nicely for me, but shouldn&apos;t scare off non-programmer&apos;s.</p>
<p>My design for landing gear would be composed of two distinct parts, which I&apos;ll call a strut and a cross.  To make one leg I&apos;d need 2 struts and 3 crosses.  Here&apos;s what the pieces look like and the script to create them.</p>
<p><em>Strut</em></p>
<p><img src="https://www.brettmorgan.net/content/images/2016/05/landing-struct.png" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<pre><code>$fn=100;

module triangle(w, h) {
    linear_extrude(height=h) {
        polygon([[0,0],[w,0],[w/2,(w/2)*tan(45)]]);
    }
}

module grid(w,h) {
    translate([1,0,0]) triangle(w,h);
    translate([0,w+1,0]) rotate(-90) triangle(w,h);
    translate([w+1,w+2,0]) rotate(180) triangle(w,h);
    translate([w+2,1,0]) rotate(90) triangle(w,h);
}

difference() {
    cube([18,150,2]);
    translate([4.5,4,0]) cylinder(h=3,d=3);
    translate([13.5,4,0]) cylinder(h=3,d=3);
    
    translate([8,50,0]) cube([2,6,3]);
    translate([8,100,0]) cube([2,6,3]);
    translate([6,146,0]) cube([6,2,3]);
    
    translate([3,15,0]) grid(10,3);
    translate([3,32,0]) grid(10,3);
    
    translate([3,62,0]) grid(10,3);
    translate([3,82,0]) grid(10,3);
    
    translate([3,112,0]) grid(10,3);
    translate([3,129,0]) grid(10,3);
}
</code></pre>
<p>This code could be cleaned up a bit, but it did the job.  Using Modules really simplified things.</p>
<p><em>Cross</em></p>
<p><img src="https://www.brettmorgan.net/content/images/2016/05/landing-cross.png" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<pre><code>module triangle(w, h) {
    linear_extrude(height=h) {
        polygon([[0,0],[w,0],[w/2,(w/2)*tan(45)]]);
    }
}

module grid(w,h) {
    translate([1,0,0]) triangle(w,h);
    translate([0,w+1,0]) rotate(-90) triangle(w,h);
    translate([w+1,w+2,0]) rotate(180) triangle(w,h);
    translate([w+2,1,0]) rotate(90) triangle(w,h);
}

difference() {
    cube([18,37,2]);
    cube([6,2,2]);
    translate([12,0,0]) cube([6,2,2]);
    translate([0,35,0]) cube([6,2,2]); 
    translate([12,35,0]) cube([6,2,2]);
  
    translate([3,5,0]) grid(10,3);
    translate([3,20,0]) grid(10,3);
}
</code></pre>
<p>There&apos;s probably a way to have common library for modules and import it, but I&apos;ll have to look into that.</p>
<p>With the design finished I was able export the model to STL format right form OpenSCAD.</p>
<h3 id="print">Print</h3>
<p>I loaded the STL file into <a href="https://ultimaker.com/en/products/cura-software">Cura</a> to do the slicing and then exported the GCode.  My rough parameters where:</p>
<ul>
<li>Layer height: 0.2mm</li>
<li>Shell thickness: 0.8mm</li>
<li>Bottom/Top thickness: 0.6mm</li>
<li>Fill Density: 50%</li>
<li>Printing temperature: 200 C</li>
<li>Bed temperature: 70 C</li>
</ul>
<p>I loaded the GCode into my <a href="https://github.com/guysoft/OctoPi">OctoPi</a> version of <a href="http://octoprint.org">Octoprint</a>, and printed out the pieces.</p>
<p>While Printing<br>
<img src="https://www.brettmorgan.net/content/images/2016/05/IMG_6794-1.jpg" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<p>The Parts<br>
<img src="https://www.brettmorgan.net/content/images/2016/05/IMG_6805-1.jpg" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<p>Glued together<br>
<img src="https://www.brettmorgan.net/content/images/2016/05/IMG_6807.jpg" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<p>Attached to Quad<br>
<img src="https://www.brettmorgan.net/content/images/2016/05/IMG_6808.jpg" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<p>Close up<br>
<img src="https://www.brettmorgan.net/content/images/2016/05/IMG_6811.jpg" alt="Weekend Project: New Quadcopter Landing Gear" loading="lazy"></p>
<p>They didn&apos;t turn out bad.  We&apos;ll see if they hold up.</p>
<p>Next up, folding gear!!</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Moved to Docker Cloud]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;ve always liked to use my website to test out new technology. Recently I stopped hosting a few external sites for friends and family, which closed down my revenue stream to cover hosting charges.  I was only paying $45 a month, but that adds up over a year.</p>]]></description><link>https://www.brettmorgan.net/moved-to-docker-cloud/</link><guid isPermaLink="false">636a74c43d78b8000136c585</guid><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Wed, 27 Apr 2016 20:34:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;ve always liked to use my website to test out new technology. Recently I stopped hosting a few external sites for friends and family, which closed down my revenue stream to cover hosting charges.  I was only paying $45 a month, but that adds up over a year.  I needed a cheaper option to host brettmorgan.net.</p>
<p>Enter <a href="http://cloud.docker.com">Docker Cloud</a>. I&apos;ve been using Docker on and off for about a year now. In my day job we successfully rolled out a UI regression testing framework using Docker. Now I could have set up Docker on my previous hosting provider, but that wouldn&apos;t saved me any money.  Plus I wanted to give Docker Cloud a try.</p>
<p>Docker Cloud is a framework to automate the process of deploying your environment in the cloud.  After a bit of research I was able to successfully migrate brettmorgan.net in one night.</p>
<p>Here&apos;s what I did.</p>
<p><strong>Create a Node</strong></p>
<p>First thing you need to do is set up a <em>Node</em>.  A <em>Node</em> is the server that will have docker installed on it and will hold your containers.  With Docker cloud you can have many nodes, but for my simple site I have one.  The easiest way to get a node is to point Docker Cloud to a cloud provider that you already have an account with.</p>
<p>Since I was trying to do this on the cheap, I set up a $5/month account with <a href="http://www.digitalocean.com">Digital Ocean</a>.  I then went into Docker Cloud and filled out a simple form to create a node.  This created a small server for me at Digital Ocean, it was all automated, very nice!</p>
<p><strong>Create some Services</strong></p>
<p>Now that I had a node, I wanted to create some services to run on it.  Turns out services are just docker containers, with some extract features to link services together.</p>
<p>I played around with setting up a Ghost container, and an Nginx container, and basically got every thing working, all without creating my own custom Docker images.  I was able to use some plain images on <a href="http://hub.docker.com">Docker Hub</a> and just configure them with some environment variable and volume mappings.  I did this all from the Docker Cloud UI.</p>
<p>This was great, but there was another feature of Docker Cloud I wanted to try out, Stacks.</p>
<p><strong>Create a Stack</strong></p>
<p>I wanted a change a few of my services and add my another service to my node. Rather then do this all manually through services, I decide to use the Stack feature in Docker Cloud.  My understanding is that is a lot like Docker Compose (I have used so, I can&apos;t really make comparison).</p>
<p>The idea of a Stack is that you create a Stackfile, that specs out all your services.  Then you just start your stack and all the services come up.  I was really easy to set up a stack file with all the services I needed.</p>
<p>Here is my stack file with private stuff changed.</p>
<pre><code>lb:                                 #load balancer
  image: &apos;dockercloud/haproxy:latest&apos;
  links:
    - ghost                         #linked to ghost
    - web                           #linked to web
  ports:
    - &apos;80:80&apos;
  roles:
    - global
ghost:
  image: &apos;ptimof/ghost:latest&apos;
  command: &apos;npm start -production&apos;
  environment:
    - &apos;GHOST_URL=http://any.site.com&apos;  
    - &apos;VIRTUAL_HOST=*site.net&apos;      #lb proxies to here
  volumes:
    - &apos;/path/to/ghost/content:/var/lib/ghost&apos;  #maps to ghost content on host
web:
  image: &apos;nginx:latest&apos;
  environment:
    - VIRTUAL_HOST=foo.site.com     #lb proxies to here
    - VIRTUAL_HOST_WEIGHT=1
  volumes:
    - &apos;/host/path:/usr/share/nginx/html:ro&apos;
</code></pre>
<p><a href="http://cloud.docker.com">Docker Cloud</a> made deploying my site really simple.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Clojure Transducers]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I like this blog post on Clojure Transducers, <a href="http://elbenshira.com/blog/understanding-transducers/">Understanding Transducers</a>.  Explains transducers very simply.</p>
<!--kg-card-end: markdown-->]]></description><link>https://www.brettmorgan.net/clojure-transducers/</link><guid isPermaLink="false">636a74c43d78b8000136c584</guid><category><![CDATA[Clojure]]></category><category><![CDATA[Transducers]]></category><category><![CDATA[Blog Post]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Thu, 30 Jul 2015 19:16:25 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I like this blog post on Clojure Transducers, <a href="http://elbenshira.com/blog/understanding-transducers/">Understanding Transducers</a>.  Explains transducers very simply.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Shapeoko 3 CNC Machine]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>A couple of weeks ago I recieved my new <a href="http://www.shapeoko.com">Shapeoko 3</a> CNC Machine. It&apos;s a kit, so some assembly was requried. Having only evenings, after the kids are asleep, to work on my hobbies, it took me 2 or 3 nights to get the machine assemblied. Every thing</p>]]></description><link>https://www.brettmorgan.net/shapeoko-3-cnc-machine/</link><guid isPermaLink="false">636a74c43d78b8000136c583</guid><category><![CDATA[cnc]]></category><category><![CDATA[Shapeoko 3]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Mon, 08 Jun 2015 15:52:26 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>A couple of weeks ago I recieved my new <a href="http://www.shapeoko.com">Shapeoko 3</a> CNC Machine. It&apos;s a kit, so some assembly was requried. Having only evenings, after the kids are asleep, to work on my hobbies, it took me 2 or 3 nights to get the machine assemblied. Every thing was pretty straight forward. I think the most challenging steps where getting to machine squared up and getting the belts tightened properly.</p>
<ol>
<li>Squaring: put the whole frame together with out completely tighten the screws. Pull out your trusty square and check all that all parts are square to each other. I also measured a lot of places to make sure they are the same. When everything rolled nicely on the tracks I was good.  We&apos;ll see if I need to tweek more.</li>
<li>Belt tigtening: This took me a lot of trial and error.  Basically I extended the belt bracket screws as far as they&apos;d go, with the belt as taught as I could get by hand.  I then tighted bracket screws to the wall.  I had to readjust many times.  Still I don&apos;t think I have correct tension.  In my first cut, I saw some weird tracking issues (see letter M below).</li>
</ol>
<p>So here are some picks and a video of first test with Sharpie.</p>
<p><img src="https://www.brettmorgan.net/content/images/2015/06/IMG_4692.jpg" alt="Shapeoko 3 Assembled" loading="lazy"><br>
<img src="https://www.brettmorgan.net/content/images/2015/06/IMG_4694.jpg" alt="Shapeoko 3 Control Board, X &amp; Z axis closeup" loading="lazy"><br>
<img src="https://www.brettmorgan.net/content/images/2015/06/IMG_4698.jpg" alt="Shapeoko 3 Router mount" loading="lazy"><br>
<img src="https://www.brettmorgan.net/content/images/2015/06/IMG_4699.jpg" alt="Shapeoko 3 Y axis rail" loading="lazy"></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/BLIj2C3PqIk" frameborder="0" allowfullscreen></iframe>
<p>First Cuts: Notice how the letter M is a little messed up.  I used the following softward tools</p>
<ul>
<li><a href="http://www.indeeo.com/idraw/">iDraw</a> - to design sign</li>
<li><a href="http://jscut.org/jscut.html">jscut</a> - to generate GCode</li>
<li><a href="http://openscam.com">OpenSCAM</a> - to view simulated cuts</li>
<li><a href="http://carbide3d.com/downloads/">Carbide Motion</a> - Load GCode to Shapeoko 3</li>
</ul>
<p><img src="https://www.brettmorgan.net/content/images/2015/06/IMG_4763-1.jpg" alt="Shapeoko 3 First cut - sign" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Docker]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>So many cool technologies, so little time.</p>
<p>For the first half of 2015 I&apos;ve worked to exponentially expand the software team I work on to over 100 people. This has brought of changes organizationally (another topic), and now requires that we make changed to our application architecture to</p>]]></description><link>https://www.brettmorgan.net/docker-ignite-voltdb-and-more-clojure/</link><guid isPermaLink="false">636a74c43d78b8000136c582</guid><category><![CDATA[Docker]]></category><category><![CDATA[databases]]></category><category><![CDATA[interviews]]></category><category><![CDATA[development]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Thu, 14 May 2015 18:37:13 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>So many cool technologies, so little time.</p>
<p>For the first half of 2015 I&apos;ve worked to exponentially expand the software team I work on to over 100 people. This has brought of changes organizationally (another topic), and now requires that we make changed to our application architecture to allow such a large team to be productive.</p>
<p>The current application I work on is one monilithic beast. In order for it to scale, be performant, and allow for more developers to work on it, it needs to be broken into multiple processes. If only it was that easy.</p>
<p>The bureaucracy where I work is very thick, and getting the necessary infrastructure to develop a multi tiered application is numbingly difficult. Enter <a href="https://www.docker.com">Docker</a>.</p>
<p>I just listened to an James Turnbull interview on Software Engineering Radio, <a href="http://www.se-radio.net/2015/01/episode-217-james-turnbull-on-docker/">episode #217</a>. He layed out nicely how my team could use Docker containers for developer resources. Check it out. It&apos;s good stuff.</p>
<p>Also check out the Michael Stonebraker interview, <a href="http://www.se-radio.net/2013/12/episode-199-michael-stonebraker/">episode #199</a> if you want to know where database technology is going.  Really insightful.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[I got hacked]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Today I got an email from the nice sysadmins at <a href="http://www.rimuhosting.com">Rimuhosting</a> telling me that my VPS had been hacked, and the hacker installed a root level exploit.</p>
<p>I&apos;d like to thank the Rimuhosting sysadmins for there quick response.  They identified excessive network traffic coming from my host, investigated,</p>]]></description><link>https://www.brettmorgan.net/i-got-hacked/</link><guid isPermaLink="false">636a74c43d78b8000136c581</guid><category><![CDATA[hacked hosting]]></category><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Wed, 18 Mar 2015 01:35:15 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Today I got an email from the nice sysadmins at <a href="http://www.rimuhosting.com">Rimuhosting</a> telling me that my VPS had been hacked, and the hacker installed a root level exploit.</p>
<p>I&apos;d like to thank the Rimuhosting sysadmins for there quick response.  They identified excessive network traffic coming from my host, investigated, shutdown my VPS and then sent me an email.  The email included all my options.  I choose to recover from a backup, then change all my passwords.  That worked, and got me back up an running in under 15 minutes.</p>
<p>Thanks Rimuhosting for the help.  If you need a VPS check out <a href="http://www.rimuhosting.com">Rimuhosting</a>.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[iBeacon]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>So I had a <a href="http://www.raspberrypi.org">Raspberry Pi</a> kicking around and it was just screaming to be used for a new project.  Previously I had set it up as a <a href="http://blog.wellsb.com/post/29412820494/raspberry-pi-vpn-server">VPN server</a> to access my home network when I was away.  Alas, things have changed, and a VPN is no longer needed,</p>]]></description><link>https://www.brettmorgan.net/ibeacon/</link><guid isPermaLink="false">636a74c43d78b8000136c580</guid><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Fri, 08 Aug 2014 17:28:33 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>So I had a <a href="http://www.raspberrypi.org">Raspberry Pi</a> kicking around and it was just screaming to be used for a new project.  Previously I had set it up as a <a href="http://blog.wellsb.com/post/29412820494/raspberry-pi-vpn-server">VPN server</a> to access my home network when I was away.  Alas, things have changed, and a VPN is no longer needed, so rather then collect dust it is time to repurpose my Pi.</p>
<p>Check out this <a href="http://pingbin.com/2012/12/30-cool-ideas-raspberry-pi-project/">index of great Projects</a> you can do with your Raspberry Pi!</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[What interests me now in software]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>As a software developer I continually check out what&apos;s new in software.  Whether it is a programming language, framework, or application, I love checking things out and seeing how they might help me, or teach me something new.  Here&apos;s what I&apos;m looking at now.</p>]]></description><link>https://www.brettmorgan.net/what-interests-me-now/</link><guid isPermaLink="false">636a74c43d78b8000136c57f</guid><dc:creator><![CDATA[Brett Morgan]]></dc:creator><pubDate>Thu, 20 Feb 2014 18:56:15 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>As a software developer I continually check out what&apos;s new in software.  Whether it is a programming language, framework, or application, I love checking things out and seeing how they might help me, or teach me something new.  Here&apos;s what I&apos;m looking at now.</p>
<ul>
<li><a href="http://clojure.org">Clojure</a> - I steered clear of it for a long time, but recently found a great tutorial, <a href="http://www.braveclojure.com">Clojure for the Brave and True</a>.  It&apos;s a great way to dive into Clojure and understand functional programming.  It might be easier to get <a href="http://www.scala-lang.org">Scala</a> into my workplace, but understanding Clojure will strengthen my functional use of Scala.</li>
<li><a href="http://www.gnu.org/software/emacs/">Emacs</a> - and oldie by goody, Clojure integration with Emacs is nice (see tutorial above).  While IDE&apos;s like Eclipse and IDEA are nice, they can get bloated.  Emacs is speedy.  Now if I could only remember all the shortcuts.</li>
<li><a href="http://www.playframework.com">Play Framework</a> - Great web framework if you want to get started with Scala (works with Java also).</li>
<li><a href="http://twitter.github.io">Twitter Libraries</a> - I&apos;ve become a big fan of the libraries that Twitter has opensourced.  Lots of great stuff.  Here are the ones dug into.
<ul>
<li><a href="http://twitter.github.io/finagle/">Finagle</a> - RPC framework used at Twitter.  I need to get the stodgy old bank I work for to start using this. Protocol agnostic, use http, <a href="http://thrift.apache.org">Thrift</a> or something else to talk between systems.
<ul>
<li><a href="https://github.com/twitter/scrooge">Scrooge</a> - Thrift code generator for Scala</li>
</ul>
</li>
<li><a href="http://twitter.github.io/zipkin/">Zipkin</a> - Distributed tracing.  If you have a distributed architecture, it is really hard to figure where in the chain that problem lies without tracing.  I know from experience.  I&apos;m currently looking to add distributed tracing to system I work on.</li>
<li><a href="http://getbootstrap.com">Bootstrap</a> - Web front-end framework.  Great library to allow developers to make usable, good looking sites without a designer.</li>
</ul>
</li>
<li><a href="http://nodejs.org">Node.js</a> - I&apos;ve just played around with it a bit, and can see the interest.  Lot&apos;s of <a href="https://www.npmjs.org">plugins</a> are being developed.  I quickly set up team chat client/server with <a href="http://socket.io">socket.io</a> plugin.  Plus the fantastic blogging software I use is written on top of Node, <a href="https://ghost.org">Ghost</a>.</li>
<li>Yet to look at, but interested in
<ul>
<li><a href="https://github.com/twitter/ostrich">Ostrich</a></li>
<li><a href="https://github.com/twitter/kestrel">Kestral</a></li>
<li><a href="http://angularjs.org">AngularJS</a></li>
</ul>
</li>
</ul>
<p>To stay informed I use <a href="http://pinboard.in">Pinboard</a>, a social bookmarking site that heavily slanted towards techies.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>