https://ckdake.com/ckdake.com2022-05-26T00:40:37ZChris Kellyhttp://ckdake.com/tag:ckdake.com,2022-05-26:/content/2022/building-a-smarter-sprinkler-system.htmlBuilding A Smarter Sprinkler System2022-05-26T00:40:37Z2022-05-26T00:40:37Z<p>I moved into a house a year ago, and with some time between jobs finally had some time to get through a pile of projects. The existing sprinkler system controller turns on when it is not supposed to, and forgets everything whenever the power blips, which has been happening a lot.</p>
<p>This project (unfortunately) didn’t require buying any new tools, saved spending $100+ on a gadget, and hooks together a a handful of things pretty smoothly. Finished photo first:</p>
<div class="embedimg"><img src="/img/blog/2022/sprinkler-finished.jpg" style="width: 50%;"></div>
<!-- more -->
<h2 id="the-hardware">The Hardware</h2>
<p>What initially appeared to be a “smart” “two-wire” fancy system turned out to only have two wires because it only controls a single zone with a single solenoid. Great. 24V AC turns it on, no 24V AC turns it off. The existing controller had a 24V AC power adapter so all I needed was a way to switch the power on and off to the solenoid through existing wiring, automatically, on a schedule, and ideally taking into account the weather.</p>
<p>I did a little too much research, did some handwaving on the <a href="https://tech404.github.io">Tech 404 Slack</a> with an old coworker, and went and spend $7 on <a href="https://www.adafruit.com">Adafruit</a> for a few parts. I already had an old Rasberry Pi B+ hanging out, so a few days later a <a href="https://www.adafruit.com/product/4409">Non-Latching mini relay</a> showed up with a cable to attach it to the pi’s GPIO pins: <a href="https://www.adafruit.com/product/3894">STEMMA JST PH 2mm 3-Pin to Female Socker Cable</a>.</p>
<p>With some quick cutting/twisting/plugging and one existing wiring nut, I had the Pi connected to the relay, managing the 24V to the sprinkler system, and it worked via a few lines of python using CircuitPy.</p>
<div class="embedimg"><img src="/img/blog/2022/sprinkler-wiring.jpg" style="width: 50%;"></div>
<h2 id="the-software">The Software</h2>
<p>sshing to a computer and running a command is not a great way to turn a sprinkler system on, so it was time to hack some things together. First up was getting it responding to HTTP requests, and I spun up a simple web server to run in a <code>screen</code> sesion and turn the relay on and off. This would be better as a system daemon that starts on boot, but that is easy enough to fix later:</p>
<div class="CodeRay"><div class="code"><pre><code class="language-python"><span class="keyword">import</span> <span class="include">time</span>
<span class="keyword">import</span> <span class="include">board</span>
<span class="keyword">import</span> <span class="include">digitalio</span>
<span class="keyword">import</span> <span class="include">web</span>
status = <span class="predefined-constant">False</span>
relay = digitalio.DigitalInOut(board.D26)
relay.direction = digitalio.Direction.OUTPUT
relay.value = <span class="predefined-constant">False</span>
urls = (<span class="string"><span class="delimiter">'</span><span class="content">/(.*)</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">call</span><span class="delimiter">'</span></span>)
<span class="keyword">class</span> <span class="class">call</span>:
<span class="keyword">global</span> status
<span class="keyword">def</span> <span class="function">GET</span>(<span class="predefined-constant">self</span>, action):
<span class="keyword">global</span> status
<span class="keyword">if</span> (action == <span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span>):
<span class="keyword">if</span> status:
<span class="keyword">return</span> <span class="integer">1</span>
<span class="keyword">else</span>:
<span class="keyword">return</span> <span class="integer">0</span>
<span class="keyword">return</span> <span class="string"><span class="delimiter">"</span><span class="content">Beep bo beep!</span><span class="delimiter">"</span></span>
<span class="keyword">def</span> <span class="function">POST</span>(<span class="predefined-constant">self</span>, action):
<span class="keyword">global</span> status
<span class="keyword">if</span> (action == <span class="string"><span class="delimiter">'</span><span class="content">on</span><span class="delimiter">'</span></span>):
status = <span class="predefined-constant">True</span>
relay.value = status
<span class="keyword">elif</span> (action == <span class="string"><span class="delimiter">'</span><span class="content">off</span><span class="delimiter">'</span></span>):
status = <span class="predefined-constant">False</span>
relay.value = status
<span class="keyword">return</span> <span class="string"><span class="delimiter">"</span><span class="content">Beep bo beep beep!</span><span class="delimiter">"</span></span>
<span class="keyword">if</span> __name__ == <span class="string"><span class="delimiter">"</span><span class="content">__main__</span><span class="delimiter">"</span></span>:
app = web.application(urls, <span class="predefined">globals</span>())
app.run()</code></pre></div></div>
<p>Next was connecting this to homebridge using Andi’s simple and well-documented <a href="https://github.com/Supereg/homebridge-http-switch#readme">homebridge-http-switch Plugin</a>. This exposes a virtual switch in HomeBridge (and thus HomeKit and a button on my phont) to turn the realy on and off. I sat in my front yard and turned the sprinklers on and off a few times. Very rewarding.</p>
<p>I debated how to set up scheduling, but after more digging around, I stumbled into Mayank’s extremly comprehensive <a href="https://github.com/MTry/homebridge-smart-irrigation#readme">Homebridge Smart Irrigation</a> plugin. This one was a bit of a beast to configure, but it’s worth it. I can enable/disable watering days based on local watering restrictions, and leave the rest to the plugin which uses a HomeKit automation to trigger the virtual switch that turns the relay on and off. Based on the weather forecast and the capabilities of my system, it automatically runs the sprinkler for the “right” amount of time (and doesn’t turn it on in the rain or before/after the rain).</p>
<p>Part of getting this right was knowing the square footage covered by the system (enter: measuring tape), and the water volume the system spits out. Conveinently, the <a href="http://flumewater.com">Flume</a> I have for catching leaks let me know that this thing burns 7.2Gallons/minute when on. The end result is that on many days, the sprinkler runs for 4 to 11 minutes at around 6am, and my plants are a lot happier.</p>
<h2 id="making-the-hardware-pretty">Making the hardware pretty</h2>
<p>Last up, this mess of wires was… messy. I didn’t take sufficient before photos to show how bad things get, but it wasn’t pretty.</p>
<p>In my garage is a <a href="https://www.prusa3d.com/category/original-prusa-mini/">Prusa MINI+ 3D printer</a> which behaves like an appliance. Put a STL file on a thumb drive, receive a print. I found a new case for the Rasberry Pi that is wall mountable: <a href="https://www.thingiverse.com/thing:922740">Raspberry Pi 3 (B/B+), Pi 2 B, and Pi 1 B+ case with VESA mounts and more</a> and an “everything box” to put the relay and wire junctions into: <a href="https://www.thingiverse.com/thing:1680291">Customizable everything box</a>. Two hours later, these were ready to go and mounted on the wall. Scroll back to the top for the finished product.</p>
<h2 id="next-steps">Next steps</h2>
<p>It probably makes sense to use something opensource to map HTTP requests on the Rasbperry Pi to control the relay, which would start automatically on boot, say something other than “Beep bo beep”, etc, but it works as is! Next up is “Project Dollhouse” which is… significantly more involved.</p>
tag:ckdake.com,2022-05-17:/content/2022/a-wild-five-years.htmlA Wild Five Years2022-05-17T19:55:37Z2022-05-17T19:55:37Z<p>My last update here was in 2017, and since then a lot has happened.</p>
<div class="embedimg"><img src="/img/blog/2022/IMG_0870.jpeg"></div>
<ul>
<li>mtb2k18 in Squamish and Whistler, BC</li>
<li>Moved to New Canaan, Connecticuit in 2018 to manage software engineering teams at <a href="https://www.bridgewater.com">Bridgewater Associates</a> for 2 years</li>
<li>mtb2k19 in Sedona, AZ</li>
<li>Added a 2019 Knolly Warden to the stable and rode a bunch of chunky rocky mountain bike trails and downhill parks all around New England, including attending NEMBAFest at the Kingdom Trails in East Burke, VT. Met a handful of great people, built some trails, and rode every wednesday night including when it was 17F out.</li>
<li>Family Vacation to London and Disney Paris</li>
<li>Christmas with San’s family in Getaria, Spain</li>
<li>Went to AWS re:invent 2019</li>
<li>A global pandemic began. Lots of Zwift.</li>
<li>Moved back, temporarily to Newnan, GA, and permanently back to in-town Atlanta, GA to manage software engineering teams at <a href="https://www.zenput.com">Zenput</a>
</li>
<li>Had a second kiddo.</li>
<li>mtb2k21 in Crested Butte, CO</li>
<li>Retired my 2016 Yeti ASR Enduro and added a 2021 Commencal Meta AM HT to the stable to replace it for XC and adventure riding, back to the Tuesday night ride in town.</li>
<li>Lots of traveling and bike adventures</li>
<li>Starting a new job on May 23. Stay tuned for details!</li>
</ul>
<p>The theme here got a (minor) facelift today, and with a few weeks between jobs I’m much more caught up on ‘projects’ than I’ve been in a long time so this place may start to see a little bit more regular updates. I owe you some blog posts, stay tuned for:</p>
<ul>
<li>Mountain biking in Squamish/Whistler, Sedona, and Crested Butte</li>
<li>What I learned building a dollhouse from scratch</li>
<li>Mountain biking at <a href="https://paulsmountainplace.bike">Paul’s Mountain Place</a>
</li>
<li>What I learned building a sprinkler system controller with Homebridge and some electronics parts</li>
<li>Reflections on Middle Management</li>
<li>Any requests?</li>
</ul>
<!-- more -->
tag:ckdake.com,2021-08-23:/content/2021/mountain-biking-in-crested-butte.htmlMountain Biking in Crested Butte, CO2021-08-23T01:24:46Z2021-08-23T01:24:46Z<p>TODO!</p>
tag:ckdake.com,2020-12-02:/content/2020/the-year-of-zwift.htmlThe Year of Zwift2020-12-02T01:24:46Z2020-12-02T01:24:46Z<p>TODO!</p>
tag:ckdake.com,2019-10-12:/content/2019/mountain-biking-in-sedona-az.htmlMountain Biking In Sedona2019-10-12T01:24:46Z2019-10-12T01:24:46Z<p>TODO!</p>
tag:ckdake.com,2019-07-02:/content/2019/nembafest.htmlNEMBAfest at the Kingdom Trails2019-07-02T01:24:46Z2019-07-02T01:24:46Z<p>TODO!</p>
tag:ckdake.com,2018-08-14:/content/2018/mountain-biking-in-british-columbia.htmlMountain Biking In British Columbia2018-08-14T01:24:46Z2018-08-14T01:24:46Z<p>TODO!</p>
tag:ckdake.com,2018-07-16:/content/2018/downhilling-at-killington.htmlDownhilling in Killington, VT2018-07-16T01:24:46Z2018-07-16T01:24:46Z<p>TODO!</p>
tag:ckdake.com,2017-10-16:/content/2017/mountain-biking-in-pisgah-nc.htmlMountain Biking in Pisgah, NC2017-10-16T22:30:37Z2017-10-16T22:30:37Z<p>(<a href="http://ckdake.com/content/2009/mountain-biking-in-santa-fe.html">2009: Santa Fe, NM</a>, <a href="http://ckdake.com/content/2010/road-biking-in-portland-or.html">2010: Portland, OR</a>, <a href="http://ckdake.com/content/2011/mountain-biking-in-colorado.html">2011: Colorado</a>, <a href="http://ckdake.com/content/2012/2012-mountain-bike-trip-sun-valley.html">2012: Sun Valley, ID</a>, <a href="http://ckdake.com/content/2013/mtb-2k13-park-city.html">2013: Park City, UT</a>, <a href="http://ckdake.com/content/2014/mountain-biking-in-oakridge-oregon">2014: Oakridge, OR</a>, <a href="http://ckdake.com/content/2015/mountain-biking-in-jackson-wyoming">2015: Jackson, WY</a> <a href="http://ckdake.com/content/2016/mountain-biking-in-moab-utah">2016: Moab, UT</a>)</p>
<p>It was finally time to make the drive from home to Brevard, NC to ride around Pisgah for a week for #mtb2k17. All kinds of technical downhills, some great miles of flow, even less views than North GA. Paul flew in from Portland, Kurt drove over from Charlotte, and the rest of us all drove up from Atlanta in a handful of cars. This was my first bike trip on my own mountain bike (instead of a rental) which was great, and the rest of the crew had a great spread of their own bikes and some sick rentals from <a href="https://www.thehubpisgah.com">The Hub</a> (who also have all the maps and draft beer you need). We stayed at a <a href="https://www.airbnb.com/rooms/8016924">great AirBnB</a> a quick bike ride from town. The first night we turned on TNT and Star Wars was on, a different Star Wars was on every night, so we watched all of them and added Rogue One from Jason’s Netflix account the last evening. Best beer of the trip for me was Lorelai IPA by Bhramari Brewing Company, and second place was far too close to call between Asheville Brewing’s Perfect Day IPA, Lazy Hiker Brewing’s Slack Pack, and Catawba Brewing’s Hopness Monster.</p>
<!-- more -->
<h2 id="day-1---davidson-cove-creek-daniels-ridge">Day 1 - Davidson, Cove Creek, Daniel’s Ridge</h2>
<p>Ah, a nice easy intro to Pisgah. We missed a turn and did a silly out and back that turned from technical to overgrown over a little over a mile, but found our way back. Best 2 trail-side waterfalls of the day were here, Cove Creek was a really nice flowly (but almost too flat) downhill, and Daniel’s ridge was a great technical intro to what would come later on the trip. Dinner was some fancy mexican food at Quixote in Brevard which was delicious but missing that ‘uncomfortably full’ feeling that I look for in my mexican food.</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/albums/72157687577031983" title="Pisgah Day 1: Cove Creek + Daniel's Ridge"><img src="https://farm5.staticflickr.com/4446/23651453938_dba3573ef2_z.jpg" width="640" height="427" alt="Pisgah Day 1: Cove Creek + Daniel's Ridge"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<iframe height="405" width="590" frameborder="0" allowtransparency="true" scrolling="no" src="https://www.strava.com/activities/1215377627/embed/92120cedcaea17386086f0de722de293098e6150"></iframe>
<iframe src="https://player.vimeo.com/video/237456259" width="640" height="360" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><a href="https://vimeo.com/237456259">2017.10.04 Cove Creek downhill</a> from <a href="https://vimeo.com/ckdake">Chris Kelly</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<iframe src="https://player.vimeo.com/video/237331348" width="640" height="360" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><a href="https://vimeo.com/237331348">2017.10.04 Daniel's Ridge downhill</a> from <a href="https://vimeo.com/ckdake">Chris Kelly</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<h2 id="day-2---bracken-black-mountain">Day 2 - Bracken, Black Mountain</h2>
<p>Bracken is new and machine built and has oh-so-much flow. It’s an out-and-back from a nice parking lot, and has the best trailside signage of any trail I’ve ever seen. We mosied uphill, then ripped downhill at several times the speed of sound, and Brian’s injury from a overcooked berm exit that had us stop by urgent care afterwards didn’t even need stiches. After getting him cleaned up, we headed over to Black Mountain for a pretty long gravel road climb, followed by a 2 mile hike-a-bike climb, and a long afternoon of super-technical downhill, followed by the fantastic flowly lower Black. We all were out of gas by the end, and when we got to our car, there was Marc with his car and beers for each of us. Thanks Marc! Then we had some killer post roast that Paul had slow-cooking all day.</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/albums/72157661193402408" title="Pisgah Day 2: Bracken and Black Mountain #mtb2k17"><img src="https://farm5.staticflickr.com/4447/37522138541_619e7b0ae7_z.jpg" width="640" height="427" alt="Pisgah Day 2: Bracken and Black Mountain #mtb2k17"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<iframe height="405" width="590" frameborder="0" allowtransparency="true" scrolling="no" src="https://www.strava.com/activities/1217007326/embed/2a90cae4ecda53553ebabe39f1443ed15209eff2"></iframe>
<iframe src="https://player.vimeo.com/video/237423052" width="640" height="360" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><a href="https://vimeo.com/237423052">2017.10.05 Bracken downhill</a> from <a href="https://vimeo.com/ckdake">Chris Kelly</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<iframe height="405" width="590" frameborder="0" allowtransparency="true" scrolling="no" src="https://www.strava.com/activities/1217007376/embed/5fb26bea3d7420a3ebb807f5ace53f19d880f363"></iframe>
<iframe src="https://player.vimeo.com/video/238154127" width="640" height="360" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><a href="https://vimeo.com/238154127">2017.10.05 - Black Mountain downhill</a> from <a href="https://vimeo.com/ckdake">Chris Kelly</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<h2 id="day-3---laurel-pilot-rock-south-mills-squirrel-gap-laurel-creek">Day 3 - Laurel, Pilot Rock, South Mills, Squirrel Gap, Laurel Creek</h2>
<p>Kurt joined us to show us around on Day 3, and he may have been trying to kill us. We parked at the bottom of Laurel which was a nice, but never quite ending climb. It was a perfect sort of technical, with most of it being very rideable and bits that required some work. Pilot Rock was very technical heading down, but it had a nice view halfway through which was a good chance to shake out the arms and hands. Down we continued, and at the bottom a few people split off to cruise back to town while the rest of us headed for South Mills and Squirrel Gap. Less elevation gain and less technical, these were fine and great. Unfortunately, after a lot of miles, these end at ‘the bottom’ of Pisgah and we ended the day with a ~1000ft climb back to the car. Fortunately, it was a nicely inclined gravel road. Everyone regrouped at The Hub and we ended up at Magpie Meat and Three for dinner. Hangry CK wouldn’t put up with a table wait, so we took a table outside with the limited menu and ended up with a pretty fanstastic spread of food. Good call CK.</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/albums/72157687661813033" title="Pisgah Day 3: Laurel + Pilot + South Mills + Squirrel #mtb2k17"><img src="https://farm5.staticflickr.com/4486/36872143103_8c176516b8_z.jpg" width="640" height="427" alt="Pisgah Day 3: Laurel + Pilot + South Mills + Squirrel #mtb2k17"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<iframe height="405" width="590" frameborder="0" allowtransparency="true" scrolling="no" src="https://www.strava.com/activities/1218303144/embed/cb772a48551816fa10748e10fb6a1aa602f45dde"></iframe>
<iframe src="https://player.vimeo.com/video/238307403" width="640" height="360" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><a href="https://vimeo.com/238307403">2017.10.16 Pilot Rock downhill</a> from <a href="https://vimeo.com/ckdake">Chris Kelly</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<iframe src="https://player.vimeo.com/video/238234583" width="640" height="360" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><a href="https://vimeo.com/238234583">2017.10.06 Squirrel Gap downhill</a> from <a href="https://vimeo.com/ckdake">Chris Kelly</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<h2 id="day-4---dupont">Day 4 - Dupont</h2>
<p>On to something totally different, Dupont is east of Pisgah and is lower and flowier. There are still plenty of climbs and plenty of work to do, but it’s more of the “you get out of it what you put into” trail than the other things we’ve ridden. 1000s of turns, and Kurt flawless guided us through them including dropping into some nice downhill from an abandoned airstrip, checking out the waterfall from Last Of The Mohicans, and eating lunch on a dock on a tiny lake. Not bad. We didn’t make it to the northernmost parts of Dupont, and opted instead to pack up and head to Sierra Nevada’s eastern fortress of a brewery. It’s the biggest brewery I’ve ever been too, and the food and beer were great. It was a long 30 minute drive home from the brewery, and thankfully Jason had some BBQ going all day at the house so second dinner was even better than first dinner.</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/albums/72157687590855784" title="Pisgah Day 4: Dupont South #mtb2k17"><img src="https://farm5.staticflickr.com/4469/36889489163_7fd587a5fb_z.jpg" width="640" height="427" alt="Pisgah Day 4: Dupont South #mtb2k17"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<iframe height="405" width="590" frameborder="0" allowtransparency="true" scrolling="no" src="https://www.strava.com/activities/1219751150/embed/8fc6bf8d930af898615c9a8b0b34a5736247f27b"></iframe>
<h2 id="day-5---drive-home">Day 5 - Drive home</h2>
<p>The weather snuck in on us and rained out Day 5, so we drove back home a day early. Even without the epic mileage and distance (and views) of years past, my core and upper body was pretty wrecked from all the technical downhills and I didn’t mind calling it a little early this go around. We missed Kitsuma, Heartbreak, Bent Creek, Dupont North (Ridgeline), and a few others so there will definitely be a long weekend or two in the future to check these out.</p>
<h2 id="stats">Stats</h2>
<ul>
<li>4 days, 6 star wars movies, 1 brewery, many pints at The Hub</li>
<li>90.1 miles (A new low: Pisgah is Technical y’all)</li>
<li>12h 50m, of moving time</li>
<li>13,329 feet of climbing (Not a new low: what goes down must first go up.)</li>
</ul>
<h2 id="in-summary">In Summary</h2>
<p>Pisgah is a “must do” mountain biking destination. Staying in small-town Brevard is cost effective and has all the groceries, beer, restaurants, and bike shops that you could possibly need. The trails get pretty far into the backcountry, and while signed well, a map (and knowing how to use it) is mandatory. You might as well find a riding buddy familiar with the area as that’ll save you all kinds of trouble. If you want long semi-technical climbs or gravel road climbs, you’ll find both. If you want super fun flowy downhills or super-super-technical downhills that have any sane person walking at least small portions of, you’ll fine both of those too. Just make sure you know where you’re going because you could end up out there for a long time doing a lot of hike-a-bike both uphill and downhill. It’s not that easy to ride from town (without making it a super big day) and we ended up driving to trailheads every day, the furthest one was about and hour drive with a lot of gravel, and we didn’t investigate shuttles because we had enough truck coverage to carry everyone. As always, let me know if you want to join us next year. I’m thinking Squamish?</p>
tag:ckdake.com,2016-11-07:/content/2016/dreamforce.htmlDreamforce 20162016-11-07T15:33:26Z2016-11-07T15:33:26Z<p>If you’re in the Salesforce ecosystem, you know what a big deal Dreamforce is. I’ve been working on Saleforce’s B2B Marketing Automation product Pardot for almost 2 years and I’d heard the hype, but didn’t really get how big of a deal it was. Last year I was building new teams and my teams didn’t yet have things for announcing at Dreamforce, but this year we were building software and had a lot to show off.</p>
<h2 id="announcing-wave-for-b2b-marketing">Announcing “Wave for B2B Marketing”</h2>
<p>First up, the reason Salesforce shipped me over to California for Dreamforce: A year’s effort by one of my engineering teams culminated in our product launch at Dreamforce, “Wave for B2B Marketing”</p>
<blockquote class="twitter-tweet" data-lang="en">
<p lang="en" dir="ltr">Launch day = cake for lunch! Congratulations to the team that built Wave for B2B Marketing! <a href="https://t.co/rUmLWKdh8S">pic.twitter.com/rUmLWKdh8S</a></p>— Pardot Engineering (@PardotEng) <a href="https://twitter.com/PardotEng/status/788049809395638272">October 17, 2016</a>
</blockquote>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<!-- more -->
<p>This small bunch of people (plus one remote person, and the 20+ people in Marketing, Pricing, Licensing, etc) worked together over the year to build and ship Pardot’s 3rd unique product, a powerful analytics tool for marketing data from Pardot, built on the Salesforce Analytics Cloud platform. Here’s some links to find out more:</p>
<ul>
<li><a href="http://www.pardot.com/blog/salesforce-announces-wave-b2b-marketing-analytics-every-b2b-marketer/">http://www.pardot.com/blog/salesforce-announces-wave-b2b-marketing-analytics-every-b2b-marketer/</a></li>
<li><a href="http://www.salesforce.com/analytics-cloud/marketing-wave/overview/">http://www.salesforce.com/analytics-cloud/marketing-wave/overview/</a></li>
<li><a href="https://www.pardot.com/solutions/wave-b2b-marketing/">https://www.pardot.com/solutions/wave-b2b-marketing/</a></li>
</ul>
<p>While Danielle (product manager) and Michael (UX) got most of the on-stage time doing announcements and roadmap sessions, I spoke at 3 different ‘hands on sessions’ to introduce people to the product and answer questions. Thats me!</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/30725937142/in/album-72157671524243053/" title="20161004_164702000_iOS"><img src="https://c7.staticflickr.com/6/5618/30725937142_b564c05a83_z.jpg" width="640" height="480" alt="20161004_164702000_iOS"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<p>Further up the orgchart, screenshots and demos of Wave for B2B Marketing were presented in rooms with 400+ people:</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/30842434235/in/album-72157671524243053/" title="20161005_171803815_iOS"><img src="https://c4.staticflickr.com/6/5771/30842434235_2e3928335a_z.jpg" width="640" height="480" alt="20161005_171803815_iOS"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<p>As well as during the “Salesforce for Marketing” keynote with 1000s of people in attendance and lots more watching online. Neat!</p>
<p><a data-flickr-embed="true" href="https://www.flickr.com/photos/ckdake/30842439155/in/album-72157671524243053/" title="20161006_165511000_iOS"><img src="https://c4.staticflickr.com/6/5812/30842439155_b591e14d52_z.jpg" width="640" height="480" alt="20161006_165511000_iOS"></a><script async="" src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<h2 id="being-an-engineering-manager-at-dreamforce">Being an Engineering Manager at Dreamforce</h2>
<p>My speaking sessions were during some of the big keynotes so I didn’t get to most of them, and a lot of the content is really a lot more relevant to customers and Salesforce users than it is to me. I was able to fit in some roadmap sessions for other parts of the company which is a great way to find out some of the things that are coming down the pipe (especially in Analytics Cloud).</p>
<p>Pardot hosts a Customer Advisory Board summit on the first day of Dreamforce, where I got to sit down at a table with a handful of Pardot customers and find out what is working well and working poorly with them without it going through several layers of filters. This was extremely helpful and re-enforced the importance of making sure we (in engineering) know what we are building and that we are building the right thing.</p>
<p>After the CAB and after my talks, I got to speak with a lot of customers. They all had tons of questions, and not a single one of the questions was new to me. This is great because it means we (Pardot, and especially our Product Managers) have been doing their homework. The things we’ve build do things our customers need, and they’re excited about the things on our roadmap. More reporting, more Sales+Marketing alignment, more Account Based Marketing, Campaign Influence Multitouch Attribution, and more reporting. It’s all happening and, as we’ve seen from the first few weeks following the Wave for B2B Marketing launch, people will be lining up to buy what we are creating.</p>
<h2 id="mindfulness">Mindfulness</h2>
<p>The last day of Dreamforce is always a ‘weird one’. While the tech things are still going on, the primary track for the day is on something different. I was free Friday so I sat in the entire “Mindfulness” keynote track. No individual specific moment was life changing, but just sitting and absorbing for a few hours was pretty impactful: From Monks encouraging us all to slow down, to Larry Brilliant (helped lead Smallpox eradication) and Daniel Goleman (author of <a href="http://amzn.to/2fy21zI">Emotional Intelligence</a>) chatting on stage for a bit about being Mindful and doing good in the world, to Nadine Burke talking about her work around neurodevelopmental results of toxic stress that mirror toxic environmental exposure.</p>
<h3 id="larry-brilliant-and-daniel-goleman">Larry Brilliant and Daniel Goleman</h3>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
</div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BLRZhS7Btoh/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Larry Beilliant and Daniel Goleman on stage talking about using compassion and doing good. #df16</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A photo posted by Chris Kelly (@ckdake) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-10-07T18:31:40+00:00">Oct 7, 2016 at 11:31am PDT</time></p>
</div></blockquote>
<script async="" defer src="//platform.instagram.com/en_US/embeds.js"></script>
<h2 id="and-of-course-some-bicycles">And of course, some Bicycles</h2>
<p>No trip would be complete without sneaking in a few bike rides. I did miss the U2 Concert and the Flo-rid-a Concert for these, and that’s okay.</p>
<h3 id="hawk-hill-sunrise">Hawk Hill Sunrise</h3>
<p>First things first, at 6am Monday I convinced a few co-workers to rent road bikes and head across the Golden Gate bridge and up Hawk Hill for Sunrise. This worked out pretty well and of course, photos don’t do it justice.</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
</div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BLGpg7shTJZ/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Gooooooood morning #dreamforce #df16</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A photo posted by Chris Kelly (@ckdake) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-10-03T14:19:47+00:00">Oct 3, 2016 at 7:19am PDT</time></p>
</div></blockquote>
<script async="" defer src="//platform.instagram.com/en_US/embeds.js"></script>
<h3 id="butter-lap-sunset">Butter Lap Sunset</h3>
<p>Wednesday evening is time for <a href="http://butterlap.com">Butter Lap</a> with a spread of people from San Francisco and an occasional person I can convince to join me. Caleb recently moved from Atlanta to SF and it didn’t take much convincing to get him to join in on his new bike.</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
</div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BLNFcmrhkdF/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">#butterlap sunset</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A photo posted by Chris Kelly (@ckdake) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-10-06T02:19:18+00:00">Oct 5, 2016 at 7:19pm PDT</time></p>
</div></blockquote>
<script async="" defer src="//platform.instagram.com/en_US/embeds.js"></script>
<h3 id="night-mountain-biking">Night Mountain Biking</h3>
<p>Lastly, I heard though an internal Salesforce group about a night mountain bike ride in-town. Given that I do something similar in Atlanta every week, I pretty much had to do this. Thursday evening after only getting a little bit lost, on the side of a random looking road I met up with two other mountain bikers: a fellow Salesforce person and one that used to work at Salesforce and now works at Strava. This is a bit more on-the-down-low than Butter lap, as it requires the right bike and lights, and some of the trails may not be quite bike-legal. Shh. Lots of climbing and lots of pretty nice singletrack descending, as well as some views that beat anything we get riding at night in Atlanta. And they brought me a beer. Awesome.</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
</div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BLP0OdtBT5a/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Night mountain biking in SF has better views than ATL</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A photo posted by Chris Kelly (@ckdake) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-10-07T03:46:33+00:00">Oct 6, 2016 at 8:46pm PDT</time></p>
</div></blockquote>
<script async="" defer src="//platform.instagram.com/en_US/embeds.js"></script>
<h2 id="lots-more">Lots More</h2>
<p>I walked around town a lot, caught up with old and new friends for food and drink, and ate a lot. If I missed you, sorry and I’ll be back soon!</p>
<h3 id="fleet-week-air-show">Fleet Week Air Show</h3>
<p>Friday afternoon was practice for the Fleet Week Air Show, and I think is the first air show I’ve actually made it to. Sean D. Tucker flying for Oracle was pretty amazing to watch, and the Blue Angels and Breitling both put on a really good show.</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
</div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BLR-Ik0hBt-/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">#fleetweek air show practice to finish up a long week at #df16</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A photo posted by Chris Kelly (@ckdake) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-10-07T23:51:36+00:00">Oct 7, 2016 at 4:51pm PDT</time></p>
</div></blockquote>
<script async="" defer src="//platform.instagram.com/en_US/embeds.js"></script>
<h3 id="autumn-approves">Autumn approves</h3>
<p>People say I don’t post enough baby photos so here’s one of Autumn with her (RED) Astro from Dreamforce that pitched in to the $3M that Dreamforce raised for cancer research:</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div>
</div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BLWjgY4BzcR/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Autumn seems pretty stoked with her #df16 (red) edition Astro</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A photo posted by Chris Kelly (@ckdake) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-10-09T18:35:08+00:00">Oct 9, 2016 at 11:35am PDT</time></p>
</div></blockquote>
<script async="" defer src="//platform.instagram.com/en_US/embeds.js"></script>