<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace V5 Site Server v5.13.505-303 (http://www.squarespace.com) on Tue, 17 Jul 2018 10:14:00 GMT--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Blog</title><link>http://www.chipchilders.com/blog/</link><description></description><lastBuildDate>Wed, 12 Aug 2015 19:40:48 +0000</lastBuildDate><copyright></copyright><language>en-US</language><generator>Squarespace V5 Site Server v5.13.505-303 (http://www.squarespace.com)</generator><item><title>Buildpacks in Lattice</title><category>buildpacks</category><category>cloud foundry</category><category>paas</category><dc:creator>Chip Childers</dc:creator><pubDate>Wed, 12 Aug 2015 16:13:06 +0000</pubDate><link>http://www.chipchilders.com/blog/2015/8/12/buildpacks-in-lattice.html</link><guid isPermaLink="false">1301759:18650419:35441702</guid><description><![CDATA[<p>Lattice <a href="https://github.com/cloudfoundry-incubator/lattice/releases/tag/v0.3.0">v0.3.0 just shipped</a> (if you don't know much about Lattice, go to <a href="https://github.com/cloudfoundry-incubator/lattice/releases/tag/v0.3.0">Lattice.cf</a>), and for me the big news was the newly added support for <a href="https://docs.cloudfoundry.org/buildpacks/">Cloud Foundry Buildpacks</a> within a Lattice cluster.</p>
<p>The goal of Lattice is to get a portion of the larger Cloud Foundry platform repackaged into an easily consumable system that makes getting started with the Cloud Foundry technologies straight forward for individuals and small teams. If you want to understand this a little better, watch <a href="https://www.youtube.com/watch?v=lAbho46INYc">James Bayer and Colin Humphreys talk about Lattice</a> at the 2015 CF Summit North America.</p>
<p>In previous releases, Lattice was limited to only running completed Docker images within the cluster. Now that we have Buildpack support, Lattice is really able to give you a much better taste of what it means to use Cloud Foundry. Have some code? Just push it to Lattice and let it do the work to build the container for you.</p>
<p>Here's how to use it:</p>
<p><strong>Setup</strong></p>
<p>For this walkthrough, I'll be using the Vagrant box version of Lattice (using VirtualBox). These instructions assume v0.3.0 of both Lattice and the ltc command line tool. The same process should work for future versions of Lattice, we well as different deployment options (like one of the Terraform configurations for different IaaS environments).</p>
<p>You can grab the ltc cli tool from the bottom of the <a href="https://github.com/cloudfoundry-incubator/lattice/releases/tag/v0.3.0">release notes</a>.</p>
<p>To get the latest&nbsp;</p>
<pre>&gt;  git clone https://github.com/cloudfoundry-incubator/lattice.git
&gt; cd lattice
&gt; git checkout v0.3.0
&gt; vagrant up --provider virtualbox
</pre>
<p>This should result in a running box with the Lattice system initialized. If it worked correctly, you'll see:</p>
<pre>==&gt; default: Lattice is now installed and running.
==&gt; default: You may target it using: ltc target 192.168.11.11.xip.io
</pre>
<p>By default, the Lattice box environment will be unauthenticated so it's easy to get ltc to target the cluster:</p>
<pre>&gt; ltc target 192.168.11.11.xip.io
Blob store is targeted.
Api Location Set
</pre>
<p>I've run into issues where xip.io doesn't resolve via some DNS servers, so if you have that issue consider using another DNS server like Google's 8.8.8.8 address.</p>
<p>At this point, you should have a functional Lattice system and ltc should be able to talk to it. Give it a test by running 'ltc list'.</p>
<pre>&gt; ltc list
------------------------------= Apps =-------------------------------
No apps to display.

------------------------------= Tasks =------------------------------
No tasks to display.
</pre>
<p><strong>Get a Sample App</strong></p>
<p>Now we're ready to find some source code that we want to run within Lattice. Since Lattice is specifically designed to be a BYOS (bring your own services), my example will not require any database or other backend services. It's a simple Python Flask based web app. Obviously it's a trivial Hello World example, but you can easily extrapolate and see how this would be useful for non-trivial systems.</p>
<p>The sample application we'll be using can be found on GitHub at <a href="https://github.com/chipchilders/sample-python">https://github.com/chipchilders/sample-python</a>. Go ahead and clone the repo now (from a working directory that's not within the lattice project's directory):</p>
<pre>&gt; cd ~
&gt; git clone https://github.com/chipchilders/sample-python.git
&gt; cd sample-python
</pre>
<p>There are only three files in the repo:</p>
<p>&nbsp;</p>
<ul>
<li>Procfile - the file that helps Flask startup</li>
<li>requirements.txt - the list of modules needed to run the app, in this case it's only Flask</li>
<li>hello.py - the basic web app that we'll be hosting within Lattice</li>
</ul>
<p>&nbsp;</p>
<p>The contents of hello.py are pretty straight forward. The file creates a route for '/' that returns the string "Hello World! Im an instance number X", where X is the Lattice instance number (as retrieved from the app's environment variables).</p>
<pre>from flask import Flask
import os

app = Flask(__name__)

cfindex = os.getenv("INSTANCE_INDEX")

@app.route('/')
def hello_world():
    return 'Hello World! I am instance number ' + str(cfindex)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)
</pre>
<p>My example assumes that 8080 is a reasonable listening port, since that's the default port that Lattice expects from containers. There's lots of flexibility here, but defaults will do for the example.</p>
<p><strong>Build the Droplet</strong></p>
<p>Lattice uses the same terminology as Cloud Foundry for the container images created via buildpacks: Droplets. Droplets are the result of taking code from the user and running it through the staging process.</p>
<p>Step one is to do a build of the droplet:</p>
<pre>&gt; ltc build-droplet sample-python https://github.com/cloudfoundry/python-buildpack
</pre>
<p>The command tells ltc to build the local directory into a droplet, naming it "sample-python" and using the cloudfoundry/python-buildpack. When you want to do something in other languages, the same process applies. Just be sure to specify an appropriate buildpack.</p>
<p>If everything is working correctly, you'll see Lattice stage the code and build a Droplet image:</p>
<pre>Submitted build of sample-python
08/12 14:52:58.93 [BUILD|0] Successfully created container
08/12 14:53:07.60 [BUILD|0] -------&gt; Buildpack version 1.5.0
08/12 14:53:07.67 [BUILD|0] -----&gt; Installing runtime (python-2.7.10)
08/12 14:53:15.09 [BUILD|0] -----&gt; Installing dependencies with pip
08/12 14:53:15.44 [BUILD|0]        Collecting Flask (from -r requirements.txt (line 1))
08/12 14:53:15.60 [BUILD|0]          Downloading Flask-0.10.1.tar.gz (544kB)
08/12 14:53:15.96 [BUILD|0]        Collecting Werkzeug&gt;=0.7 (from Flask-&gt;-r requirements.txt (line 1))
08/12 14:53:16.04 [BUILD|0]          Downloading Werkzeug-0.10.4-py2.py3-none-any.whl (293kB)
08/12 14:53:16.11 [BUILD|0]        Collecting Jinja2&gt;=2.4 (from Flask-&gt;-r requirements.txt (line 1))
08/12 14:53:16.18 [BUILD|0]          Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
08/12 14:53:16.25 [BUILD|0]        Collecting itsdangerous&gt;=0.21 (from Flask-&gt;-r requirements.txt (line 1))
08/12 14:53:16.31 [BUILD|0]          Downloading itsdangerous-0.24.tar.gz (46kB)
08/12 14:53:16.46 [BUILD|0]        Collecting MarkupSafe (from Jinja2&gt;=2.4-&gt;Flask-&gt;-r requirements.txt (line 1))
08/12 14:53:16.53 [BUILD|0]          Downloading MarkupSafe-0.23.tar.gz
08/12 14:53:16.66 [BUILD|0]        Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, Flask
08/12 14:53:16.79 [BUILD|0]          Running setup.py install for MarkupSafe
08/12 14:53:17.50 [BUILD|0]          Running setup.py install for itsdangerous
08/12 14:53:17.66 [BUILD|0]          Running setup.py install for Flask
08/12 14:53:18.00 [BUILD|0]        Successfully installed Flask-0.10.1 Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.10.4 itsdangerous-0.24
08/12 14:53:37.28 [BUILD|0] Exit status 0
08/12 14:53:37.51 [BUILD|0] Uploaded /tmp/droplet to http://192.168.11.11.xip.io:8444/blobs/sample-python/droplet.tgz.
08/12 14:53:37.52 [BUILD|0] Exit status 0
08/12 14:53:37.55 [BUILD|0] Uploaded /tmp/result.json to http://192.168.11.11.xip.io:8444/blobs/sample-python/result.json.
08/12 14:53:37.56 [BUILD|0] Exit status 0
08/12 14:53:37.60 [BUILD|0] Deleted http://192.168.11.11.xip.io:8444/blobs/sample-python/bits.zip.
08/12 14:53:37.61 [BUILD|0] Exit status 0
Build completed
</pre>
<p>To confirm that the droplet is registered in the cluster, you can run "ltc list-droplets" (or my favorite shorthand "ltc lsd").</p>
<pre>&gt; ltc lsd
Droplet		Created At		Size
sample-python	08/12 18:53:37.00	29.5M
</pre>
<p>Next, we will launch one instance with the "ltc launch-droplet" comment. You'll need to specify a name for the application (yes, multiple apps can be launched from the same droplet), as well as the name of the droplet to launch from. I used my imagination and named my app "test" in the example below:</p>
<pre>&gt; ltc launch-droplet test sample-python
No port specified. Defaulting to 8080.
Creating App: test
.08/12 15:04:55.53 [APP|0] Successfully created container
....08/12 15:05:00.01 [APP|0]  * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
.08/12 15:05:00.39 [HEALTH|0] healthcheck passed
08/12 15:05:00.39 [HEALTH|0] Exit status 0

test is now running.
App is reachable at:
http://test.192.168.11.11.xip.io
</pre>
<p>And there we go! You should be able to see the app working by hitting http://test.192.168.11.11.xip.io. You can also now take advantage of the other features of Lattice, like scaling up / down (ltc scale), automatic health management and log aggregation.</p>
<p><strong>Let's play with Lattice</strong></p>
<p>To see the app list:</p>
<pre>&gt; ltc list
------------------------------= Apps =-------------------------------
App Name	Instances	DiskMB		MemoryMB	Route
test		1/1		0		128		test.192.168.11.11.xip.io, test-8080.192.168.11.11.xip.io =&gt; 8080

------------------------------= Tasks =------------------------------
No tasks to display.
</pre>
<p>To see the details of the "test" app:</p>
<pre>&gt; ltc status test
==========================================================================================
      test
------------------------------------------------------------------------------------------
Instances	1/1
Start Timeout	0
DiskMB		0
MemoryMB	128
CPUWeight	100
Ports		8080
Routes		test.192.168.11.11.xip.io =&gt; 8080
		test-8080.192.168.11.11.xip.io =&gt; 8080
Annotation	{"droplet_source":{"host":"192.168.11.11.xip.io","port":"8444","droplet_name":"sample-python"}}
------------------------------------------------------------------------------------------
Environment

MEMORY_LIMIT="128M"
PROCESS_GUID="test"
PORT="8080"

==========================================================================================
      Instance 0  [RUNNING]
------------------------------------------------------------------------------------------
InstanceGuid	a4aac9d3-fba5-453b-71ba-ec2004a17138
Cell ID		cell-01
Ip		192.168.11.11
Port Mapping	60004:8080
Uptime		3m57s
Crash Count 	0
CPU 		0.12%
Memory 		13.5M
------------------------------------------------------------------------------------------
</pre>
<p>Scaling up or down:</p>
<pre>&gt; ltc scale test 5
Scaling test to 5 instances
.....................
App Scaled Successfully
</pre>
<p>Now you should notice when you hit the app's web page that the index will jump around between the 5 instances on each refresh.</p>
<p>Also, the "ltc list" command should now show 5 instances running, and "ltc visualize" should show that there are 5 containers running on your cell (or cells if you deployed a Lattice cluster).</p>
<pre>&gt; ltc list
------------------------------= Apps =-------------------------------
App Name	Instances	DiskMB		MemoryMB	Route
test		5/5		0		128		test.192.168.11.11.xip.io, test-8080.192.168.11.11.xip.io =&gt; 8080

------------------------------= Tasks =------------------------------
No tasks to display.

&gt; ltc visualize
Distribution
cell-01: &bull;&bull;&bull;&bull;&bull;
</pre>
<p>And if you want fancy visualizations of your Lattice environment, check out <a href="http://xray.cf/">xray.cf</a> from the kind folks at Pivotal. It will connect to your Lattice environment from your browser, so it even works with your local VirtualBox Lattice instance.</p><p><span class="full-image-block ssNonEditable"><span><img style="width: 250px;" src="http://www.chipchilders.com/storage/xray.png?__SQUARESPACE_CACHEVERSION=1439407314108" alt="" /></span></span></p>
<p><strong>Now let's break something!</strong></p>
<p>Lattice includes both health management (keeping it's promises) as well as great logging visibility into the cluster's operations. To test this out, we can mess with the cluster by killing processes and watch as Lattice heals around our malevolence.</p>
<p>To start, open two terminal windows. In one, we'll use "vagrant ssh" to cause some damage. In the other, we'll watch as Lattice responds.</p>
<p>Get started by running "ltc logs test" in the first terminal to start watching the logs for your test application:</p>
<pre>
&gt; ltc logs test

08/12 15:24:32.79 [HEALTH|0] healthcheck passed
08/12 15:24:32.79 [HEALTH|0] Exit status 0
...
</pre>
<p>Now in the other terminal, use "vagrant ssh" to log into the Vagrant box so we can do some damage:</p>
<pre>
&gt; vagrant ssh
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.16.0-30-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
vagrant@ubuntu-trusty-64:~$ ps -ef | grep iodaemon | grep -v grep | awk '{print $2}'
13469
14531
14580
14636
14665
</pre>
<p>That's the list of PIDs for the 5 instances of the Lattice app. Go ahead and kill -9 one or more of them!</p>
<pre>
vagrant@ubuntu-trusty-64:~$ sudo kill -9 13469 14531
</pre>
<p>If you go over to the terminal window showing logs, you will see that Lattice will notice the issue and quickly restart new app instances within the cluster automatically.</p>
<pre>
08/12 15:28:33.13 [HEALTH|0] healthcheck passed
08/12 15:28:33.14 [HEALTH|0] Exit status 0
08/12 15:28:38.50 [HEALTH|4] healthcheck passed
08/12 15:28:38.51 [HEALTH|4] Exit status 0
08/12 15:28:40.65 [APP|0] Creating container
08/12 15:28:40.66 [APP|4] Creating container
08/12 15:28:41.68 [APP|0] Successfully created container
08/12 15:28:42.34 [HEALTH|1] healthcheck passed
08/12 15:28:42.34 [HEALTH|1] Exit status 0
08/12 15:28:42.80 [APP|4] Successfully created container
08/12 15:28:45.47 [HEALTH|3] healthcheck passed
08/12 15:28:45.56 [HEALTH|3] Exit status 0
08/12 15:28:45.73 [HEALTH|2] healthcheck passed
08/12 15:28:45.81 [HEALTH|2] Exit status 0
08/12 15:28:48.97 [HEALTH|0] healthcheck failed
08/12 15:28:48.99 [HEALTH|0] Exit status 1
08/12 15:28:49.08 [APP|0]  * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
08/12 15:28:49.55 [HEALTH|0] healthcheck passed
08/12 15:28:49.58 [HEALTH|0] Exit status 0
08/12 15:28:50.87 [APP|4]  * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
08/12 15:28:51.03 [HEALTH|4] healthcheck passed
08/12 15:28:51.04 [HEALTH|4] Exit status 0
</pre>
<p>So there go... All the fun of Lattice, now with buildpacks!</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-35441702.xml</wfw:commentRss></item><item><title>Room roving robot - phase 1</title><category>arduino</category><dc:creator>Chip Childers</dc:creator><pubDate>Wed, 08 Jan 2014 01:00:57 +0000</pubDate><link>http://www.chipchilders.com/blog/2014/1/7/room-roving-robot-phase-1.html</link><guid isPermaLink="false">1301759:18650419:34545735</guid><description><![CDATA[<p>My second holiday project was a bit more fun than <a href="http://www.chipchilders.com/blog/2014/1/6/holiday-amusement-with-simple-arduino-circuits.html">just blinking lights</a>. I decided to tear apart a $10 RC jeep and control it with the Arduino. For this project, I added a motor shield on top of the Arduino that I purchased at the same Radio Shack where I found the RC car (Who would have thought that Radio Shack would get back to the hobby electronics game, after they seemed to be turning into a cell phone store!). The shield is the <a href="http://seeedstudio.com/wiki/Motor_Shield_V1.0">Seeed Motor Shield V1.0</a>, which sits on top of the Arduino and passes through the Analog input pins as well as Digital pins 1 through 7. The shield is a bit clunky, because it has to sit on top of a shield stack but it served it's purpose.</p>
<p>Starting with the car itself, I stripped it down to just it's bare essentials, including clipping the battery connector wires off of the RC circuit board to remove that board (but reuse the 3x1.5V AA battery casing). The front steering and rear drive motors were connected to the RC board via nice little female connectors that happen to easily accept small gauge pins from the seeed ARDX experimentation kit I started this whole process using. The battery casing took a little finagling to get wire leads connected to the exposed leads, but I just pushed a long section of wire into the coils.</p>
<p>After snipping off a bit of plastic from the frame, I managed to get a pretty flat surface for the Arduino (with motor shield) to sit on top of. &nbsp;A little electrical tape, and bam... &nbsp;easy mounting is always the best for quick projects. &nbsp;I was also able to use the space directly above the rear drive motor to nestle a 9V battery that feeds the Arduino.</p>
<p>Here are some photos of the project:</p>
<p>The first photo shows the whole contraption with everything but the 9V battery attached (the little guy comes to life when that's attached... &nbsp;I guess I need an on-off switch).</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FIMG_0394%201.JPG%3F__SQUARESPACE_CACHEVERSION%3D1389030062620',750,1000);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-24159287-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1389030062621" alt="" /></a></span></span></p>
<p>Next is the underside where you can see that I'm reusing the 3 slot battery casing for the motor power source. Also notice that little red dial on the front, which comes in handy. It's a front wheel alignment device, which was needed after all the handling I did of the car to take it apart.</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FIMG_0391.JPG%3F__SQUARESPACE_CACHEVERSION%3D1389030260773',750,1000);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-24159325-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1389030260774" alt="" /></a></span></span></p>
<p>Next is a closer look at the electronic stack from the front of the car. This shows one of the female plugs from the motors, and how nicely the experimentation kit wires fit right into it.</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FIMG_0392%201.JPG%3F__SQUARESPACE_CACHEVERSION%3D1389030289054',750,1000);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-24159328-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1389030289055" alt="" /></a></span></span></p>
<p>Last is the electronics stack from the rear of the car. The four wires coming out of the green terminals on the motor shield are the wiring for the two motors. The space above the rear drive motor that I use for the 9V battery that powers the Arduino is visible as well. You can also see that, when the 9V isn't on the car, there's easy access to the Arduino's USB port for uploading programs.</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FIMG_0393%201.JPG%3F__SQUARESPACE_CACHEVERSION%3D1389030323617',750,1000);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-24159337-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1389030323618" alt="" /></a></span></span></p>
<p>The circuits for this project are (again) fairly simple, since the Arduino / Motor shield combination makes it easy to use PWM functionality from the Arduino to control current flowing to the two motors. The only other connections are the two battery power sources. I actually started by feeding power from a 9V into the motor shield, and setting the passthrough jumper on the shield to allow it to send power down to the Arduino. After playing with that a bit, I realized it was better to isolate the power source for the controller from the power for the motors.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.chipchilders.com/storage/RobotPrototype1.png?__SQUARESPACE_CACHEVERSION=1389124017759" alt="" /></span></span></p>
<p>For the initial program, I hard coded a path for the car that moves it forward while executing an s-curve, then stops, then reverses a bit, and then starts all over again.</p>
<p><script src="https://gist.github.com/chipchilders/8306431.js"></script></p>
<p>Last, here's a short video of the car in action (and getting a reaction from my dog!).</p>
<p><iframe width="560" height="315" src="http://www.chipchilders.com//www.youtube.com/embed/dSQYj3ZkTGg?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>Next up, I'll be adding an ultrasonic distance sensor to the front grill of the robot (the <a href="http://www.parallax.com/product/28015?SortField=ProductName,ProductName">PING)))</a> sensor) and two infrared reflective sensors to let me do line tracking (<a href="http://www.seeedstudio.com/wiki/Grove_-_Infrared_Reflective_Sensor">here</a>).</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34545735.xml</wfw:commentRss></item><item><title>Holiday Amusement with Simple Arduino Circuits</title><category>arduino</category><dc:creator>Chip Childers</dc:creator><pubDate>Mon, 06 Jan 2014 15:00:37 +0000</pubDate><link>http://www.chipchilders.com/blog/2014/1/6/holiday-amusement-with-simple-arduino-circuits.html</link><guid isPermaLink="false">1301759:18650419:34545325</guid><description><![CDATA[<p>I had some spare time over the holidays, and decided to break out an Arduino that I had been sitting on for over a year. &nbsp;Since this was my first time playing with the microcontroller, I decided to start with some very simple LED cirtuits and programs.</p>
<p>For example, here's one where there are 2 LEDs on the breadboard, one standard blue LED and one RGB LED.</p>
<p>Circuit Diagram:</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.chipchilders.com/storage/PlayingWithLights.png?__SQUARESPACE_CACHEVERSION=1389027249876" alt="" /></span></span></p>
<p>Arduino Sketch:</p>
<p><script src="https://gist.github.com/chipchilders/8285810.js"></script></p>
<p>Video of it in action (don't mind the mess of wires and extra parts on the breadboard... &nbsp;I was playing with lots of different circuits):</p>
<p><iframe width="420" height="315" src="http://www.chipchilders.com//www.youtube.com/embed/2LUS-CGcZ-M?rel=0" frameborder="0" allowfullscreen></iframe></p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34545325.xml</wfw:commentRss></item><item><title>Two podcast appearances in December</title><category>cloudstack</category><category>cumulogic</category><category>press</category><dc:creator>Chip Childers</dc:creator><pubDate>Mon, 30 Dec 2013 20:25:09 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/12/30/two-podcast-appearances-in-december.html</link><guid isPermaLink="false">1301759:18650419:34533349</guid><description><![CDATA[<p>I had some fun being a guest on two different podcasts in December, talking about both <a href="http://cloudstack.apache.org/">Apache CloudStack</a> and <a href="http://www.cumulogic.com/">CumuLogic</a>, and I figured I'd share the recordings here.</p>
<p>First up,&nbsp;<a href="http://www.digitalnibbles.com/">Digital Nibbles</a>, hosted by <a href="https://twitter.com/ruv">Reuven Cohen</a>&nbsp;and <a href="https://twitter.com/techallyson">Allyson Klein</a>, was a two guest show with <a href="https://twitter.com/duncanjw">Duncan Johnston-Watt</a> (from <a href="http://www.cloudsoftcorp.com/">CloudSoft</a>) and I splitting the time. Duncan's was up first (and he's worth the listen), but you can jump to minute 25 to hear my interview. We talked primarily about CumuLogic, but also spent some time discussing CloudStack.</p>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/126761244&amp;color=0039f8&amp;auto_play=false&amp;show_artwork=false&t=34:45"></iframe></p>
<p>Next, <a href="https://twitter.com/aarondelp">Aaron Delp</a> interviewed me for episode 125 of <a href="http://www.thecloudcast.net/">The Cloudcast</a>. This was my second time on this particular podcast, and it was just as fun the second time around. Aaron really gets the cloud market, so it was great to discuss some of the ins-and-outs of both Apache CloudStack's community and CumuLogic's potential with him.</p>
<p><iframe src="http://www.buzzsprout.com/3195/136633-the-cloudcast-125-building-advanced-cloud-services?iframe=true" width="100%" height="71" frameborder="0" scrolling="no"></iframe></p>
<p>Thanks to both of these podcasts for inviting me to share a bit about my move to CumuLogic. Hopefully the brief introduction I gave was enough for people to understand why I made the move, and why I'm excited about CumuLogic's future!</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34533349.xml</wfw:commentRss></item><item><title>Excited for the CloudStack Collab Conference EU</title><category>cloudstack</category><dc:creator>Chip Childers</dc:creator><pubDate>Mon, 18 Nov 2013 15:33:06 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/11/18/excited-for-the-cloudstack-collab-conference-eu.html</link><guid isPermaLink="false">1301759:18650419:34436103</guid><description><![CDATA[<p>I'm wrapping up my final travel preparations before jumping on an airplane this evening, headed to Amsterdam for the <a href="http://cloudstackcollab.org/">CloudStack Collaboration Conference EU 2013</a>. I'm really excited about this conference for a number of reasons:</p>
<p>&nbsp;</p>
<ul>
<li>The planning was largely executed by the local community in Europe (tip of the hat to the amazing team at <a href="http://www.schubergphilis.com/">Schuberg Philis</a>)</li>
<li>Sponsorship of the conference is coming from an <a href="http://cloudstackcollab.org/sponsors">extreemly diverse group of companies</a>, including many that are sponsoring a CloudStack conference for the first time (and many stalwarts of the community)</li>
<li>An amazing <a href="http://cloudstackcollab.org/schedule">schedule of talks</a>, including some fantastic keynotes from industry leaders like John Willis (<a href="https://twitter.com/botchagalupe">@botchagalupe</a>), Mark Hinkle (<a href="https://twitter.com/mrhinkle">@mrhinkle</a>) and Mark Burgess (<a href="https://twitter.com/markburgess_osl">@markburgess_osl</a>).</li>
<li>The hundreds of attendees, including users, developers and many vendors that support the users and community. &nbsp;</li>
</ul>
<p>While <a href="http://cloudstack.apache.org/">Apache CloudStack</a>&nbsp;may not get as much press as other similar open source projects, one thing really stands out to me about this community: we have an <strong>very</strong> active user-base that gives back to the project in big ways time and time again. This isn't always the case with open source software. Frequently, developers are users of their own code in some respects, but the user community tends to just take the results of that work. While the Apache philosophy is that the projects are producing software for the public good (and consider themselves "givers" with no strings attached), it's a really strong statement about the value of the software when you see so many users step up and help drive documentation, testing and user to user support for the software. In the CloudStack community, we're constantly seeing organizations and individuals start using the software <strong>and</strong>&nbsp;step up with support for the community in one way or another.</p>
<p>I consider the CloudStack Collaboration Conferences to be the embodiment of this collaborative spirit. You won't find a huge "vendor expo hall", or even thousands of attendees. &nbsp;What you <strong>will</strong>&nbsp;find at one of these conferences is a tight nit community (OK, well, tight nit with hundreds of individuals) coming together to share their experience with others, explore ideas for making the software better and find new ways to extend the overall CloudStack ecosystem.</p>
<p>I've shared my views on what should make an infrastructure orchestration project's <a href="http://youtu.be/XdGG0hubs9U">community tick in the past</a>, and to me the key is one thing: projects like Apache CloudStack should aim to be <strong>easy to deploy and operate</strong>. IT doesn't deploy IaaS for fun. IT deploys it to be more flexible for the application owners. And the application owners don't build and deploy apps for fun either (well OK, some do). Applications are for end users, which is something that we should never forget in all the hype that surrounds "cloud".</p>
<p>What I've found, is that this basic understanding of why CloudStack exists is well understood by the CloudStack community. That's why our conferences are so great to attend... &nbsp;they're about collaborating, sharing, learning... &nbsp;all in the service of making infrastructure get out of the way for the end users.</p>
<p>If you're coming to the conference, find me and say hi. I always love to meet new people (or meet virtual friends in person). If you can't join us, but want a flavor for the community, watch the <a href="https://twitter.com/search?q=%23CCCEU13&amp;src=typd&amp;f=realtime">#CCCEU13</a> hashtag on twitter. We're also planning on providing live video streams of the talks (more on that will be posted as soon as we get the final details).</p>
<p>See you in Amsterdam!</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34436103.xml</wfw:commentRss></item><item><title>The hidden value in CumuLogic DBaaS – Reducing Operational Risk by Making Availability Configuration Automatic</title><category>cumulogic</category><dc:creator>Chip Childers</dc:creator><pubDate>Mon, 11 Nov 2013 20:38:48 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/11/11/the-hidden-value-in-cumulogic-dbaas-reducing-operational-ris.html</link><guid isPermaLink="false">1301759:18650419:34418495</guid><description><![CDATA[<p class="p1"><strong><em>Fair warning - this is a commercial post origionally published on the CumuLogic corporate blog. That being said, I think that CumuLogic's DBaaS is valuable enough to share here on my personal blog as well.</em></strong></p>
<p class="p1">As I spend the time to get to know the CumuLogic platform better <a href="http://www.cumulogic.com/welcome-chip/"><span class="s1">in my new role</span></a>, I&rsquo;ve realized&nbsp;something that I think is worth sharing:</p>
<blockquote>
<p class="p2">Not only are the modular / composable services useful as a developer or system administrator to make their application&nbsp;deployments easy, but deploying through CumuLogic platform is actually a great way to&nbsp;reduce your operational risk.</p>
</blockquote>
<p class="p1">Think about it this way: If you&rsquo;re a developer, how many times have you put off setting up a backup job for your new MySQL DB until it&rsquo;s too late?&nbsp;For me, this is one of those tasks that I&nbsp;frequently&nbsp;forget to deal with. If you&rsquo;re a sysadmin, what level of availability do you usually setup for your&nbsp;new databases? Do you settle for two nodes? Do you even get around to dual nodes if the requestor doesn&rsquo;t ask for it? How about software&nbsp;updates? Do you always get to them on schedule?</p>
<p class="p1">The fact is, many, many databases are deployed without all of the appropriate configuration that makes them &ldquo;production ready&rdquo;. Backups,&nbsp;replicas and software updates all become trivially easy using CumuLogic&rsquo;s DBaaS product. Seriously&hellip; it&rsquo;s very easy.</p>
<p class="p1">Want your MySQL database to be in a three node cluster? Just pick that option. Want it to be 5 nodes? Click + on the node count field twice and,&nbsp;boom, done. Backups? No problem either&hellip; just a few clicks away, and you&rsquo;ve picked a backup window, set a retention policy, and can feel&nbsp;confident that you&rsquo;re data is safe.</p>
<p class="p1">An argument could be made that you could just use Puppet or Chef recipes to deploy your MySQL DB, and manage the configuration through&nbsp;that. Well, consider CumuLogic DBaaS as another tool in your toolbox that makes things even easier than before. How about combining your existing&nbsp;Puppet or Chef code with a call to the CumuLogic API to provision the database? Easily done.</p>
<p class="p1">Want to learn more? Head over to <a href="http://www.cumulogic.com">cumulogic.com</a>.</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34418495.xml</wfw:commentRss></item><item><title>My next career move</title><category>personal</category><dc:creator>Chip Childers</dc:creator><pubDate>Fri, 11 Oct 2013 14:02:30 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/10/11/my-next-career-move.html</link><guid isPermaLink="false">1301759:18650419:34325574</guid><description><![CDATA[<p>It's fall, so time for a new beginning…  or wait, is that supposed to be in the spring?  Well either way, I've decided to make a pretty large career move after 10 great years with SunGard Availability Services, starting in November. This is an exciting change for me, so I wanted to share some of my thoughts about where I'm going and why.</p>

<p><strong>So what's the new gig?</strong></p>

<p>I'll be joining <a href="http://www.cumulogic.com/">CumuLogic</a> as their VP of Product Strategy as of November 4th.  </p>

<p><strong>Why am I betting on CumuLogic?</strong></p>

<p>Keep in mind that my opinions below are just that: my opinions, based on what I know so far.</p>

<p>In deciding to make this move, I've spent several months getting to know the company a bit, internalizing their position and approach to the market, and hearing about their future plans. I came to the conclusion that CumuLogic has a <strong>really</strong> strong story to tell. Their focus on offering products that <em>compliment</em> various IaaS projects / products with modular services is the key to that story. When I say "modular services", I'm referring to DBaaS, Elastic LB, Cache as a Service, etc...  Their product basically open up the possibility for public and private cloud operators to immediately add value <em>above</em> the basic VM and object storage services in a reusable and flexible way.</p>

<p>What makes me believe that these <em>modular</em> services are needed? Well, AWS is the clear leader in the IaaS space. This shouldn't be in question for anyone who follows the cloud services market. For me, one of the most significant reasons for this leadership is that they offer <em>more than</em> just EC2 / VPC / S3. These services are being adopted by Amazon's customers, particularly those customers that want to go "all in" with their adoption of the platform.  And once AWS has them using these services, discussion of moving to a provider offering only virtual machines becomes exceptionally difficult.</p>

<p>The huge opportunity for Cloud Service Providers (CSPs), as well as IT departments offering private clouds to their internal consumers, is to expand their offerings beyond the basic IaaS elements. This embrace and extend approach to the proven AWS model has been argued to death in the blog-o-sphere (see examples <a href="http://www.cloudscaling.com/blog/cloud-computing/openstack-aws/">here</a> and <a href="http://blog.gardeviance.org/2013/08/the-interface-doesnt-matter.html">here</a>), and by looking at how to make their environments not just API compatible, but semantically similar, operators will be able to attract more users to their environments.  Importantly, this needs to include more than just VMs, object storage and networking configuration.  It requires the added services!</p>

<p>So again, why do I think that CumuLogic is the right place for me? Simple: They have laid a solid foundation for enabling "anything as a service", and are already successfully delivering modular cloud service capabilities to users and operators today.  This includes their Database Service (MySQL), NoSQL Service (MongoDB), Load Balancing, Elastic Cache (memcached), and Framework Service features. In the future this will continue to expand, both in underlying framework choices and the service constructs themselves. It's a great starting point!</p>

<p><strong>Last word, for now...</strong></p>

<p>I'm obviously going to be in learning mode for the immediate future, and I can't wait to get started digging in with CumuLogic's customers, prospects, partners and (of course) the <a href="http://www.cumulogic.com/about-us/">great team</a> waiting for me there.  If you're using CumuLogic, considering their products, or are a current / prospective partner, I'm looking forward to speaking with you.</p>
]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34325574.xml</wfw:commentRss></item><item><title>Videos from CloudStack Collaboration Conference 2013.</title><category>ccc13</category><category>cloudstack</category><category>speaking</category><dc:creator>Chip Childers</dc:creator><pubDate>Sat, 28 Sep 2013 17:21:56 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/9/28/videos-from-cloudstack-collaboration-conference-2013.html</link><guid isPermaLink="false">1301759:18650419:34291534</guid><description><![CDATA[<p>While we get ready for the <a href="http://cloudstackcollab.org/">CloudStack Collaboration Conference EU - 2013</a>, the folks at <a href="http://buildacloud.org/">Open@Citrix</a> have recently posted videos from the talks at the Collab Conference back in June in Santa Clara.  Below are the two talks that I gave at that event.</p>
<p><strong>Opening Keynote - State of the Project: Apache CloudStack in 2013</strong></p>
<p>Slides can be found here: <a href="http://www.slideshare.net/chipchilders/cloudstack-release-41">http://www.slideshare.net/chipchilders/cloudstack-release-41</a></p>
<p><iframe width="420" height="315" src="http://www.chipchilders.com//www.youtube.com/embed/XdGG0hubs9U?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p><strong>Lessons Learned in the CloudStack 4.1.0 Release</strong></p>
<p>Slides can be found here: <a href="http://www.slideshare.net/chipchilders/cloudstack-collab-2013-keynote">http://www.slideshare.net/chipchilders/cloudstack-collab-2013-keynote</a></p>
<p><iframe width="420" height="315" src="http://www.chipchilders.com//www.youtube.com/embed/X0jrzfr8BOE?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p><strong>Panel: CloudStack &amp; Cloud Storage: Where are We at, and Where Do We Need To Go?</strong></p>
<p>I also had the chance to sit on a panel with some heavyweights in the distributed / cloud storage industry to talk about CloudStack, cloud storage and where we are going as an industry.</p>
<p><iframe width="560" height="315" src="http://www.chipchilders.com//www.youtube.com/embed/wZa3DG0KxSc?list=UU9VU9uvQTOkw29LICWSRhyw" frameborder="0" allowfullscreen></iframe></p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34291534.xml</wfw:commentRss></item><item><title>A Heat Map for CloudStack Host Status</title><category>cloudstack</category><category>d3.js</category><category>ruby</category><dc:creator>Chip Childers</dc:creator><pubDate>Thu, 05 Sep 2013 20:31:34 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/9/5/a-heat-map-for-cloudstack-host-status.html</link><guid isPermaLink="false">1301759:18650419:34230823</guid><description><![CDATA[<p>As part of my ongoing work around <a href="http://www.chipchilders.com/blog/2013/8/29/prototype-ops-dashboard-for-cloudstack.html">visualizing the status of a large CloudStack environment</a>, I've been developing a heat map visualization for current host status. Here's what I've come up with so far:</p>
<p><span class="full-image-block ssNonEditable"><span><img style="width: 300px;" src="http://www.chipchilders.com/storage/Heatmap.png?__SQUARESPACE_CACHEVERSION=1378413177945" alt="" /></span></span></p>
<p>I'm making use of <a href="http://d3js.org/">d3.js</a>, a fantastic library that helps make it easy to bind data to page DOMs (in this case, SVG elements). You can view the <a href="https://github.com/chipchilders/cs-operator-dashboard/blob/heatmappost/cs-operator-dash/app/views/zone/_hostheatmap.erb">relevant code on github</a> to see the implementation details.</p>
<p>In the above example, there is only one pod. Clusters (there are 8 in the example) are represented by the rows of cells, and each cell represents a host.</p>
<p>While it was interesting to get to know d3.js better, the more interesting challenge has been in coming up with a good model for what information would cause various colors to appear. Do I focus on one capacity variable like memory? Should I just focus on host status and resource state attributes? After considering the options, I arrived at a bit of a hybrid decision about how to best approach the problem.</p>
<p>First, I created a view that combines a number of relevant metrics to determine the right color for each host. The primary decision point for color is the host's "resourcestate" attribute, where resource states like "Unmanaged" or "Maintenance" would grey out the host's cell. Resource states like "Error" turn the host cell red. If the resource state is "Enabled", I move on to checking the status of the host. Similar to resource state, status values that represent transitional and down conditions are immediately reflected as either gray or red.</p>
<p>Getting through the resource state and status checks, a healthy and "Up" host then has it's CPU and Allocated Memory capacity metrics checked. Whichever is at a higher percentage filled is then used to indicate the capacity of the host. The colors are a green -&gt; orange -&gt; red linear scale, with 0% being green, 50% being orange, 100% being red, and things inbetween scaled accordingly between the two closest set points.</p>
<p>One other thing I decided to do was to be able to select specific capacity metrics (ignoring the "which is greater" check for the overview visualization. Ex:</p>
<p><span class="full-image-block ssNonEditable"><span><img style="width: 300px;" src="http://www.chipchilders.com/storage/heatmapcpu.png?__SQUARESPACE_CACHEVERSION=1378413992838" alt="" /></span></span>I'm still prototyping here, so obviously expect more testing and changes over time, but I've added this visualization to my zone dashboard:</p>
<p><span class="full-image-block ssNonEditable"><span><img style="width: 400px;" src="http://www.chipchilders.com/storage/dashboardwithheatmap.png?__SQUARESPACE_CACHEVERSION=1378415219531" alt="" /></span></span></p>
<p>A current issue I have with the scheme above, is that it's hard to tell the difference between a happy host that just happens to be filling up, and a host with an error. I'll have to solve that by selecting different colors perhaps.</p>
<p>The other issue I have is dealing with scale (there's that challenge again). &nbsp;I haven't tested this out yet, but I suspect that a dashboard version of this heatmap would actually elevate the cells from being hosts to clusters (or even pods). Dynamically deciding what level of granularity to display would probably make sense.</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34230823.xml</wfw:commentRss></item><item><title>Prototype Ops Dashboard for CloudStack</title><category>cloudstack</category><category>cloudstack_ruby_client</category><category>ruby</category><dc:creator>Chip Childers</dc:creator><pubDate>Thu, 29 Aug 2013 20:22:50 +0000</pubDate><link>http://www.chipchilders.com/blog/2013/8/29/prototype-ops-dashboard-for-cloudstack.html</link><guid isPermaLink="false">1301759:18650419:34212622</guid><description><![CDATA[<p>I've been thinking about the Apache CloudStack UI's experience for operators, and although it's great in small environments, I believe that there could be significant improvement in the way that operators review and manage larger clouds. The layout of the native CloudStack UI is more focused on a graphical experience that helps explain the internal structure to the viewer. With a larger environment, the operator is (most likely) less interested in visually seeing relationships between the various infrastructure bits. What they want, is a dashboard view into their capacity (all available aspects), with drilldowns. They also need a much cleaner way to review the event stream that's generated by the system. To those ends, I started working on a project to create a prototype that might be one way to meet these needs. As with most of my postings these days, this is a fairly incomplete project at the moment so YMMV quite a bit.</p>
<p>If I get the viewing of data to the point where I'm happy, the next phase would be to consider how a large scale operator might want to perform and / or track changes to the platform itself. That's a long ways off though.</p>
<p><strong>The Screenshots</strong></p>
<p>The initial screenshot below will eventually be the zone listing page, who's goals should be to easily view the capacity and status of each zone. It really needs to be multi-region aware, but it's not yet.</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FOps%20Dash%20Zone%20List%20Screen%20Shot%202013-08-29%20at%204.21.29%20PM.png%3F__SQUARESPACE_CACHEVERSION%3D1377807904140',304,981);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-23413481-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1377807904141" alt="" /></a></span></span></p>
<p>Drilling into an example zone, the zone properties and current capacity are the first elements visible. I'm not quite sure that the properties should be as prominant, but that's what I started with. Below these bits, are trends for the capacity (go figure, trending helps in doing capacity planning!).</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FOps%20Dash%20Zone%20Detail%20Screen%20Shot%202013-08-29%20at%204.04.52%20PM.png%3F__SQUARESPACE_CACHEVERSION%3D1377807931505',1006,1453);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-23413485-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1377807931506" alt="" /></a></span></span></p>
<p>I've also got a very raw view into the event stream from the management server started as well:</p>
<p><span class="thumbnail-image-block ssNonEditable"><span><a href="javascript:showFullImage('/display/ShowImage?imageUrl=%2Fstorage%2FOps%20Dash%20Event%20Raw%20Screen%20Shot%202013-08-29%20at%204.22.12%20PM.png%3F__SQUARESPACE_CACHEVERSION%3D1377807874638',435,983);"><img src="http://www.chipchilders.com/storage/thumbnails/15279618-23413474-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1377807874638" alt="" /></a></span></span></p>
<p><strong>Technical Summary</strong></p>
<p>I'll readily admit that I picked Ruby and Ruby on Rails purely because I wanted to get some hands on experience with Rails (and to get a little better at core Ruby). The prototype code is on github in my <a href="https://github.com/chipchilders/cs-operator-dashboard">cs-operator-dashboard</a>&nbsp;repo.</p>
<p>The project is broken up into three parts:</p>
<p>&nbsp;</p>
<ol>
<li>cs-operator-dash: contains the Rails UI</li>
<li>cs_eventconsumer: a gem that can run a daemon process to pull CloudStack events out of a RabbitMQ broker and push them into MongoDB</li>
<li>cs_capacityretriever: a gem that can run a daemon process to periodically pull various capacity information from a CloudStack management server via my <a href="http://chipchilders.github.io/cloudstack_ruby_client/">cloudstack_ruby_client</a> gem, again pushing that data into MongoDB</li>
</ol>
<p>&nbsp;</p>
<p>Obviously this requires a running CloudStack management server (configured with the RabbitMQ event handler). It also requires MongoDB to store the data from the 2 daemon processes.</p>
<p>The basic concept is that the cs-operator-dash Rails app is largely read-only, and works with data being populated into MongoDB via the two daemon processes. cs-operator-dash uses the Mongoid ORM to map the appropriate models to the collections being created by the back-end processes.</p>
<p>One of the main benefits to using a "collector &gt; datastore &lt; UI" architecture is that it allows the data to be stored as a historical record (that's how I get the trend lines).</p>
<p>You can dig through the code if you're interested, and feel free to poke me with pull requests and / or github issues if you want to see something else. Remember though... &nbsp;it's just a prototype. ;-)</p>]]></description><wfw:commentRss>http://www.chipchilders.com/blog/rss-comments-entry-34212622.xml</wfw:commentRss></item></channel></rss>