<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link rel="stylesheet" href="/css/blog.css" media="screen" type="text/css">
  <link rel="shortcut icon" href="/favicon.ico"  type="image/x-icon"/>
  

  <title>ebullient·works</title>
  <meta name="description" content="Nothing poetic here, just a collection of things. Some are &quot;how I did this so I can remember later&quot;, others are &quot;this is totally cool!&quot;, and some are somethi...">
  
  <link rel="canonical" href="http://www.ebullientworks.com/">
  
  <link rel="alternate" type="application/rss+xml" title="ebullient·works" href="/feed.xml">
</head>

<body>
  <div class="wrapper">
    <header class="head">
  <h1><a href="/">ebullient·works</a></h1>
  <div>
    [ <a href="/about/">About</a> · <a href="/archive/">Archive</a> ]
  </div>
</header>

    <main class="articles">
  
    
    
    <article>
      <header>
        <h1><a href="/2018/09/20/debug-gulp.html">Debug gulp</a></h1>
      </header>
      <section class="post_excerpt">
          <p>I had a gulp build unhelpfully finishing with:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(node:12030) UnhandledPromiseRejectionWarning: null
(node:12030) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:12030) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
</code></pre></div></div>

<p>So I added this to my gulpfile:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>process.on('unhandledRejection', (reason, p) =&gt; {
  console.log('Unhandled Rejection at: Promise', p, ', reason:', reason);
});
</code></pre></div></div>

<p>which netted me this:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Unhandled Rejection at: Promise Promise {
  &lt;rejected&gt; null,
  domain:
   Domain {
     domain: null,
     _events: { error: [Object] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } } reason: null
</code></pre></div></div>

<p>Not much better.</p>

<p>Let’s try debugging gulp! How do I do that again?</p>

<p>In VS Code, let’s create a debug configuration that is brain-bashingly simple. Add this to launch.json:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      {
        "type": "node",
        "request": "attach",
        "name": "Attach to Remote",
        "address": "127.0.0.1",
        "port": 9229,
        "localRoot": "${workspaceFolder}/resources",
        "remoteRoot": "Absolute path to the remote directory containing the program"
      }
</code></pre></div></div>

<p>Now launch gulp with some options. I’m using <code class="highlighter-rouge">npx</code> here because I detest <code class="highlighter-rouge">npm install -g</code>:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ npx -n --inspect-brk gulp build
</code></pre></div></div>

<p>This process will now wait until VS Code attaches. At which time, do check the “Uncaught Exceptions” box in the breakpoint section of the debug panel.</p>

<p>Press play, and .. there it is. A much clearer picture of what tipped over. I feel so much better.</p>

<p>(Hope this helps, future self)</p>

      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">20 September 2018</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">gulp</a></li>
          
            <li><a href="">javascript</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2018/03/10/IndexConf-CloudNative.html">What is a Cloud Native application, anyway?</a></h1>
      </header>
      <section class="post_excerpt">
          <p>This is my first attempt at talking about what is going on with Cloud Native applications these days. Given at IndexConf in San Francisco.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/28r4H_xWPPo" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>

      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">10 March 2018</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">conference</a></li>
          
            <li><a href="">microservices</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2017/12/08/SpringOne.html">Doing the scary thing: Mainstage at SpringOne</a></h1>
      </header>
      <section class="post_excerpt">
          <p>I will absolutely confess that it was daunting to start with, but that once I was out on the stage, everything was fine.</p>

<p>I will also confess to ad nauseum rehearsal. To reciting what I had to cram into two segments (one only 2 minutes long, and the other 2 minutes and 30 seconds) to every inanimate object in my hotel room: lamps, laptops, mirrors, showerheads, and I’m pretty sure my pillow while I was sleeping.</p>

<p>I didn’t really wrap my head around what I wanted to say until the night before. Things just didn’t fall into place before then. But hey, I lived! It was quite the experience.</p>

<blockquote class="twitter-tweet" data-lang="en">
<p lang="en" dir="ltr">Watch the <a href="https://twitter.com/hashtag/SpringOne?src=hash&amp;ref_src=twsrc%5Etfw">#SpringOne</a> mainstage lightning talks on Distributed Systems, featuring <a href="https://twitter.com/cdavisafc?ref_src=twsrc%5Etfw">@cdavisafc</a>, <a href="https://twitter.com/meaghnk?ref_src=twsrc%5Etfw">@meaghnk</a>, <a href="https://twitter.com/midatlantictez?ref_src=twsrc%5Etfw">@midatlantictez</a>, <a href="https://twitter.com/ebullientworks?ref_src=twsrc%5Etfw">@ebullientworks</a>, and Mathangi Venkatesan. <a href="https://t.co/PVxlz1ta5V">https://t.co/PVxlz1ta5V</a></p>— Pivotal (<a href="https://github.com/pivotal" class="user-mention">@pivotal</a>) <a href="https://twitter.com/pivotal/status/941051353761288192?ref_src=twsrc%5Etfw">December 13, 2017</a>
</blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">08 December 2017</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">conference</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2017/11/27/airhacks-fm.html">Java EE ebullience — airhacks.fm podcast with Adam Bien</a></h1>
      </header>
      <section class="post_excerpt">
          <p>I spent an excellent few hours recording a podcast with Adam Bien.</p>

<p>CORBA? OpenLiberty? Robots? The glory days of object marshaling? Such a trip down memory lane! We could easily have talked for another hour.</p>

<p>Can you hear my rings clinking on my favorite mug? Yes, yes you can.</p>

<p>Give it a listen: <a href="https://s3.eu-central-1.amazonaws.com/airhacks.fm/airhacksfm_3.mp3">Java EE ebullience</a>.</p>


      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">27 November 2017</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">java-we</a></li>
          
            <li><a href="">liberty</a></li>
          
            <li><a href="">podcast</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2017/11/12/git-on-ipad.html">Git with edit on an iPad?</a></h1>
      </header>
      <section class="post_excerpt">
          <p>We shall see how this goes over time, but so far? Oh hell yes.</p>

<p>I am experimenting with a cute little app (I have, sad to say, fallen head over feet into the Apple ecosystem. Other devices might seem cool, but not worth the gymnastics. Ecosystem stickiness is a thing.) that allows me to edit. code. from. my. iPad.</p>

<p>Why would I want to do that?</p>

<ul>
  <li>Device junky that I am, I totes splurged and got an iPad Pro, with its little keyboard.</li>
  <li>I would really really really like to make more entries to this blog, for example. This is a nice alternative to hauling laptop around.</li>
  <li>I want to see how far I can push this über tiny device thing, that ALSO happens to have a stylus (yes, I am one of those people that thinks better long-hand).</li>
</ul>

<p>So exciting!</p>

<p>The one challenge with this, in particular, is that I can’t get the Jekyll preview that I could if I were running locally. The iPad Pro is quite the workhorse… but it doesn’t (yet, ha!) run Docker containers.</p>

<p>Oh, right. The app: <a href="https://workingcopyapp.com">Working Copy</a>. It also integrates with <a href="https://ioctocat.com">iOctocat</a>.</p>


      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">12 November 2017</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">git</a></li>
          
            <li><a href="">toys</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2017/05/02/jekyll.html">Jekyll templates with Docker containers</a></h1>
      </header>
      <section class="post_excerpt">
          <p>It took me a few tries (divided attention #FTW), but I realized that after messing with blogs for over 10 years, I’ve seen all the things! Way back in the beginning was Movable Type (which I didn’t realize was still a thing), followed by PHP-based CMS like Textpattern and Nucleus CMS, and then a brief flirtation with Blogger (someone made me do it). I have somehow avoided ever having to maintain templates for WordPress (?!). These systems all come back to some pretty basic concepts around templating.</p>

<p>The one snag was loathing having to do anything with ruby. I have never had anything but grief and pain installing ruby anywhere. But hey! We have docker now! Put it in a container and forget about it. WOOT!</p>


      </section>
      
      <div>[<a class="read-more" href="/2017/05/02/jekyll.html">more</a>]</div>
      
      <footer class="byline">
        <div>posted <time class="post_date">02 May 2017</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">docker</a></li>
          
            <li><a href="">jekyll</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2017/05/01/blogs.html">From then to now.. blogs over 12 years</a></h1>
      </header>
      <section class="post_excerpt">
          <p>Yes, I confess, I did .. umm.. censor my blogs over the years. When facebook arrived, blog posts about nasty headaches and reactions to the latest headlines could all go away. The exodus of content continued with the advent of Twitter. Which left this blog, which I’ve tended on and off for close to 14 years, in the lurch!</p>

<p>There is also the small matter of how much time I have to spend on blog posts between work, kids, and this mammoth garden we have going in the back yard. The mammoth garden is totally my fault, we started it as an excuse to get me <em>outside</em>. It worked.</p>

<p>However, it has become obvious that a return to blogging is overdue. To start with, Game On! needed a blog! We kept having little tidbits to share, that needed a home. I made an initial foray into creating a blog with Jekyll to build a <a href="http://blog.gameontext.org">new blog for Game On!</a>. I kind of liked how that worked, AND it meant I could stop having to edit posts via the web, and so I’ve now brought that to my own blog, too.</p>

<p>Next post: the jekyll stuff.</p>

      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">01 May 2017</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">blog</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2016/05/16/game-on-explore-microservices-with-a-text-based-adventure.html">Game On! Explore microservices with a text-based adventure</a></h1>
      </header>
      <section class="post_excerpt">
          <p>Microservices: the buzz is everywhere. Given the breadth of technologies related to the term, it can be difficult to get a full picture of what a Microservices architecture should look like, or to understand why it is said that microservices architectures both remove and introduce complexity at the same time. <a href="https://gameontext.org">Game On!</a> is a throwback text-based adventure built to help you explore microservices concepts.</p>

<p><a href="https://developer.ibm.com/wasdev/blog/2016/05/04/game-explore-microservices-text-based-adventure/">Continue with post on <span class="caps">IBM</span> developerWorks</a></p>

      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">16 May 2016</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">gameontext</a></li>
          
            <li><a href="">java</a></li>
          
            <li><a href="">liberty</a></li>
          
            <li><a href="">microservices</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2016/01/27/swagger-first-api-design.html">Swagger-first API design</a></h1>
      </header>
      <section class="post_excerpt">
          	<p>I’ve been working for the past few months on building Game On! a microservices-based application that is intended to show both what a microservices architecture looks like, and to make it easy for people to play with such a system without having to start from the ground up themselves.</p>

	<p>We started with a best-guess set of services, and over time, it became pretty apparent that our first pass at a map building service (the Concierge) was both misleading in purpose and insufficient in function. It did serve its purpose, filling in for service discovery in a way, but we were growing beyond what the service could do. </p>



      </section>
      
      <div>[<a class="read-more" href="/2016/01/27/swagger-first-api-design.html">more</a>]</div>
      
      <footer class="byline">
        <div>posted <time class="post_date">27 January 2016</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">gameontext</a></li>
          
            <li><a href="">java</a></li>
          
            <li><a href="">liberty</a></li>
          
            <li><a href="">microservices</a></li>
          
            <li><a href="">swagger</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
    
    
    <article>
      <header>
        <h1><a href="/2015/12/16/shell-prompt-crazy-for-git-submodules.html">Shell prompt crazy for Git Submodules</a></h1>
      </header>
      <section class="post_excerpt">
          	<p>I’ve run a somewhat odd little script to generate my command prompt for years now, sets some colors, adds some indicators of what kind of shell I’m in (sudo or tmux/screen or ssh or.. ).</p>

	<p>Given I now have to work with git and submodules, I’ve revised that to include information provided about git generated by this script: <a href="https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh">https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh</a></p>

	<p>The difference is worth it, in understanding at a glance what is going on without typing <code>git status</code> or variant every two seconds. ;)</p>

	<p>I’ve also been using some very useful aliases to make working with submodules sane, as documented here: <a href="https://book.gameontext.org/walkthroughs/git.html">Game On! Advanced Adventures / Git Submodules</a></p>

      </section>
      
      <footer class="byline">
        <div>posted <time class="post_date">16 December 2015</time>
</div>
        <div class="tags">tags: <ul>
          
            <li><a href="">gameontext</a></li>
          
            <li><a href="">git</a></li>
          
            <li><a href="">microservices</a></li>
          
            <li><a href="">scripts</a></li>
          
          </ul>
        </div>
      </footer>
    </article>
  
</main>
<nav class="prev-next">
  <div class="center"><a href="/archive/">More..</a></div>
</nav>

  </div>
  <footer class="foot">
  <div id="copyrights">© 2002-2019 Erin Schnabel</div>

  <!-- SVG from https://github.com/encharm/Font-Awesome-SVG-PNG -->
  <div>
    <a target="_blank" href="https://github.com/ebullient" title="ebullient on GitHub"><svg viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1664 896q0 251-146.5 451.5t-378.5 277.5q-27 5-39.5-7t-12.5-30v-211q0-97-52-142 57-6 102.5-18t94-39 81-66.5 53-105 20.5-150.5q0-121-79-206 37-91-8-204-28-9-81 11t-92 44l-38 24q-93-26-192-26t-192 26q-16-11-42.5-27t-83.5-38.5-86-13.5q-44 113-7 204-79 85-79 206 0 85 20.5 150t52.5 105 80.5 67 94 39 102.5 18q-40 36-49 103-21 10-45 15t-57 5-65.5-21.5-55.5-62.5q-19-32-48.5-52t-49.5-24l-20-3q-21 0-29 4.5t-5 11.5 9 14 13 12l7 5q22 10 43.5 38t31.5 51l10 23q13 38 44 61.5t67 30 69.5 7 55.5-3.5l23-4q0 38 .5 89t.5 54q0 18-13 30t-40 7q-232-77-378.5-277.5t-146.5-451.5q0-209 103-385.5t279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z" fill="#fff"></path></svg></a>
    <a target="_blank" href="https://twitter.com/ebullientworks" title="Follow @ebullientworks"><svg viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z" fill="#fff"></path></svg></a>
    <a target="_blank" href="https://www.linkedin.com/in/erinschnabel/" title="Erin Schnabel on linked.in"><svg viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z" fill="#fff"></path></svg></a>
    <a target="_blank" href="https://gameontext-slackin.mybluemix.net/" title="ebullient on gameontext.slack.com"><svg viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1583 776q62 0 103.5 40.5t41.5 101.5q0 97-93 130l-172 59 56 167q7 21 7 47 0 59-42 102t-101 43q-47 0-85.5-27t-53.5-72l-55-165-310 106 55 164q8 24 8 47 0 59-42 102t-102 43q-47 0-85-27t-53-72l-55-163-153 53q-29 9-50 9-61 0-101.5-40t-40.5-101q0-47 27.5-85t71.5-53l156-53-105-313-156 54q-26 8-48 8-60 0-101-40.5t-41-100.5q0-47 27.5-85t71.5-53l157-53-53-159q-8-24-8-47 0-60 42-102.5t102-42.5q47 0 85 27t53 72l54 160 310-105-54-160q-8-24-8-47 0-59 42.5-102t101.5-43q47 0 85.5 27.5t53.5 71.5l53 161 162-55q21-6 43-6 60 0 102.5 39.5t42.5 98.5q0 45-30 81.5t-74 51.5l-157 54 105 316 164-56q24-8 46-8zm-794 262l310-105-105-315-310 107z" fill="#fff"></path></svg></a>
    <a target="_blank" href="https://pinboard.in/u:ebullient" title="pinboard.in"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewbox="0 0 25 25" enable-background="new 0 0 25 25" xml:space="preserve"><polygon fill="#fff" points="13.908,14.85 9.211,19.547 9.961,15.412 3.571,7.706 0,7.894 7.895,0 7.895,3.007 15.412,9.773 20.111,8.647 15.227,13.721 25,24.436 "></polygon></svg></a>
    <a target="_blank" href="/feed.xml" title="Subscribe"><svg viewbox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M576 1344q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm512 123q2 28-17 48-18 21-47 21h-135q-25 0-43-16.5t-20-41.5q-22-229-184.5-391.5t-391.5-184.5q-25-2-41.5-20t-16.5-43v-135q0-29 21-47 17-17 43-17h5q160 13 306 80.5t259 181.5q114 113 181.5 259t80.5 306zm512 2q2 27-18 47-18 20-46 20h-143q-26 0-44.5-17.5t-19.5-42.5q-12-215-101-408.5t-231.5-336-336-231.5-408.5-102q-25-1-42.5-19.5t-17.5-43.5v-143q0-28 20-46 18-18 44-18h3q262 13 501.5 120t425.5 294q187 186 294 425.5t120 501.5z" fill="#fff"></path></svg></a>
  </div>
</footer>

  <script type="text/javascript">
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-1146860-5', 'auto');
    ga('send', 'pageview');
  </script>


</body>
</html>
