Clementine the Clown makes her professional debut at a local community fair this upcoming Saturday.  She’s been a long time evolving.  As a kid, I remember being a clown for a younger sibling’s birthday party.  As a young twenty-something, I was a clown for a church event.  I think I’ve always wanted to have a comic alter ego to let me express the silly side that perhaps hides a bit in day-to-day life.  That, and that opportunity to help someone find their smile?  Amazing.  There’s so much muck in the world…  any chance I get to spread a bit of positive-ness is my own little jab at sin and evil.

At one point, I quit software development and strongly considered being a children’s clown as my living.  Reality struck quickly: I had left software because it was consuming all of my time, including time I’d rather have been spending with my hubby (we had no kids at the time).  Children’s clowning would likely consume the weekends and evenings..  the very hours my hubby would be off of work.  I’ve since realized that school and library gigs might have been a way to make a path, but that’s come with further exploration into the clowning world.

About a year ago, I was at a Christian retreat with a group of total strangers, and confessed a dream I had to build a clown troupe as a ministry offering of our church.  Focus a group of folks on bringing joy and laughter into the world and go to places that need more joy and laughter: hospitals, nursing homes, church preschools, church itself, just about everywhere!  My retreat partners encouraged me, and I sought out a local clown alley as soon as I made it home.  That alley has helped connect me with a local clowning community and given me chances to perform in parades and other events, as well as learn at a regional clowning convention.

So Saturday, Clementine with her shoes of number 9, well below my actual shoe size as a person, much less a clown…  well, she’ll be engaging the kids in our community at the local fair.  A bit of tomfoolery and a bit of balloon twisting for the day.  I’ve set up a Facebook page to highlight her shenanigans, as well as her own email address.  We’ll see if Clementine can flap her wings / clown shoes a bit and fly.  With a bit of luck and a whole lot of practice and determination, Clementine might get to come out and play more often.

A friend just posted her ‘movie list’ results on Facebook – how many of some 150+ movies she’d seen. She commented that the quiz oughta be: ‘how many of these movies have you seen more than once’. Wow, I’d score really badly. I’m not a movie person. I like to go see the occasional movie, but I have no problem at all letting them pass by. And once they’ve passed by, no amount of shaming ‘you haven’t seen? You gotta see!!’ will make it change.

My hubby (to be at the time) kept a list of movies that he thought I oughta see. The guys at work keep mentioning movies that I’ve gotta see. Hey, they’re available on Netflix or Amazon or … just sit down and watch it. It’s a classic.

A movie’s 1-2 hours or more. Even if I sit there with my laptop or iPad and multi-task, that’s still a few hours on my rear. I work a desk job. I don’t need more hours on my rear. If I’m going to spend multiple hours on my rear, it’ll be listening to a great live concert. Or reading a great book. Or writing a blog post or two with a beer in my hand…

I need to be at work earlier this week than normal. We’re giving training on Docker and Kubernetes, and the first class session starts at 8. The classroom needs to be open earlier than that, and I want to be in and settled before the first student arrives.

That’s meant that I’ve set up a whole system of wakeup alarms, between my phone and my alarm clock.   The phone has multiple staggered times, and the clock has another one.  That’s to handle the challenge of sleeping through or turning off an alarm and remaining in bed.  But that means that once I’m up and moving, there can be multiple alarms that still go off. Did I mention that my husband _doesn’t_ need to get up earlier this week?

I’m now thinking through my optimum user interface to let me say, I’m up, keep the rest of the alarms from going off.  Is it: no more alarms at all today?  Is it: no more alarms within the next two hours?  Is it: show me a table of the alarms yet to go off this morning and let me turn them all off in one quick move?  Is it: here are my wakeup alarms – turn them all off, yet leave reminder alarms for later in the day?

Oh, and I’m hunting for the source code for the existing Alarm clock app and widget.  The app has an option to let me see its open-source licenses (Apache, MIT).  That bodes good things for getting to try something out..  I’ve only done minimal Android development before, just enough to make a UI to control a Furby.  I like the idea of solving a personal concern and getting to play in geekery.  Now we’ll see if liking the idea actually translates into hours spent sometime.

Passwords seem to me to mostly be a muscle memory thing.  I’m reminded of this every time I’m at a keypad with a different layout, or whenever I have to enter in a password into my phone or iPad.  My head knows the phrase that generated the password.  But my hands know which elements are numbers, which are capitalized, and whether there are any punctuation symbols in the mix.  They only know it, though, when they’re on a QWERTY keyboard.  Working through a touch screen interface just doesn’t cut it.  Half the time, to enter a password on a mobile device, I first have to turn to a computer, log out of whatever it is I’m seeking a password for, and then log in and see where my fingers “talked”.  In light of this, I’ve completely switched over to fingerprint and pin codes on my phone for getting into the device itself, but that doesn’t help me a whit when it comes to accessing other sites.

And in other news, I’ve now got a Samsung S8, hence my futzing with passwords this evening.  Discovery: the S8 uses a nano SIM, whereas the S5 used a larger form factor.  Ergo, a trip to the TMobile store or a session on the phone with TMobile is in my near future to resolve a phone number conversion onto the new SIM card.

“Hi, Raju. Thanks for thinking of me – these are exactly the sort of technical skills I’m using now. However, I have NO interest in commuting to McLean. The DC Beltway is a life-sucking endeavor. Good luck in your recruiting efforts!”

The above was my response to a recruiter who was looking for someone with microservices, Docker, and Kubernetes experience.  I fit all of that.  But he specified a job in McLean, VA.  For those of you who don’t live in the DC area, to get to McLean, VA, I’d have to go around the DC Beltway.  And, per my note back to poor Raju, “the DC Beltway is a life-sucking endeavor”.  The image that comes to mind is from The Princess Bride, where our hero Wesley is strapped into a machine that’s supposed to suck the life-force right out of him.  (For anyone not familiar with the scene, see https://www.youtube.com/watch?v=BbgyppGqBgg.)

For the record for any recruiter that may catch wind of this post, the Baltimore Beltway is only slighter better.  I’m not interested in traveling either of them, just as a matter of quality of life.  And yes, I’ve tried Metro and MARC.  No, your commuter benefits package to pay for those don’t interest me.  I’ll keep my career path nicely tucked away between the two circles of traffic hell, thank you very much.  But good luck in your recruiting!

 

Trying out a new form of organizer…  doing it a bit more simplistically.   Instead of hauling around a DayTimer where each day’s page needed to be the same size (and for which I ended up lugging around a bunch of sheets of mostly empty paper), I’m trying out a technique called bullet journaling.  Each day, I keep notes of appointments to keep, things to do, and any notes worth mentioning.  I keep a monthly calendar page, sort of like a calendar on the wall in my kitchen.  Just holds enough to remind me of an event.  I keep a future plans page – listing any events that don’t fit on the current month’s calendar.  And there’s an index page at the front, where I log any significant entries I think I’ll want to get back to.

For some folks, their bullet journals are as much works of creative expression as organization.  That’s not me.  My writing is still scribbles, I don’t doodle or calligraphy in it, and if I’ve changed ink colors, it’s because that was the pen at hand.  Today I did upgrade a bit, and started pasting in a calendar printable, rather than writing the days out on the page.  I’m also trying out a monthly habit tracker printable to see if it helps keep me accountable for reading my Bible and exercising.  Housecleaning might make the list, too, I guess…

I’ve been testing this out since November and am very happy with how it’s worked out for me.  I’ve generally been the type to lug around notebooks anyway to jot things down in – this just extends that with a bit of structure.

 

Some stuff for work is running on a Kubernetes 1.3 cluster.  It nicely restarted when something went wrong in its environment.  That’s good.  Our pods were logging – that’s good.  But when the pod restarted, its logs were lost: that’s bad.  No idea why the pod restarted to help determine if it’s something we should either prevent or add a health check for.  So, now I’m evaluating logging solutions appropriate for our Kubernetes environment.  And because I’m a geek, I’m blogging about it here in my pjs on my day off: you know you’re in the right field when you’re enjoying researching something for it on your day off.

Scope of problem: not trying to log all of the kubernetes events themselves: that’s the job of the infrastructure.  Which also means then I’m not worried about filtering out messages I shouldn’t see from pods that aren’t my own.  I want to collect log messages in my namespace, have them tagged (at least) by which application source they came from, and I want to have them be archived _off_ of the cluster.  The guys running the infrastructure are great, but if they reconfigure the cluster (as happens occasionally) or have a hiccup with their persistent volumes, still want my logs.

A bit of survey suggests there are two primary solutions out there: Fluentd or Logstash, one of the components of the ELK stack.  Both are open-source.  I’ve long heard of ELK, though not yet myself futzed with it in a system.  I’ve seen many stickers for Fluentd in open-source conferences…  :-)  I’ve also noticed Fluentd as part of the Cloud Native Computing Foundation‘s list of supported projects.  Hmm..  that last bit gives me a bit of bias towards Fluentd, sight unseen.

So now to look for other folks comparisons of the two to pick the first one to try out..  My strategy is to start with one and see if it’s ‘good enough’ to meet our needs.  But I’ll often rely on what the ecosystem has already discovered to make my choice between.

Fluentd vs. Logstash: A Comparison of Log Collectors: logz.io uses both.  My takeaway – leans towards Fluentd in its recommendation, even though it’s built on ELK

Fluentd vs. Logstash: Panda Strike’s tried both..  They’ve ended up with EFK (ElasticSearch, Fluentd, Kibana) as their platform for reasons of stability and performance.  Side note: describes logs forwarders vs. log shippers.  Found another post on their site that describes EFK in action for JMeter load testing result visualization.    Another side note: found a good bit of useful content in their blog overall..  adding ’em to the rotation of stuff to keep an eye on…

Fluentd vs Logstash: Jason Wilder walks through both.  Older post (Nov 2013) but assuming all is still relevant, good technical info.

Outcome: looks like I’ll be starting with Fluentd.

 

 

 

 

I got a cold-call from a recruiter today, seeing if I’d be interested in a Technical Manager job.  That’s right in my bailiwick: I tend to be more technical than most technical managers, but she had me pegged in the right general zone of job, anyway.  What surprised me was her saying she had a resume of mine from 2006.  Wow.

Luckily for me, 2006 rang a bell.  That’s the year my son was born, so that’s the year I traded a commute around the Beltway to a job I loved for a new series of adventures with a company closer to home.

In 2006..  I was building an e-commerce system using Struts.  I _think_ we were debating a rewrite in Struts 2.  Somewhere in that time frame, I became a certified Scrum practitioner.  (I’ve since let the certified part of that lapse, though I’d still consider myself a Scrum practitioner.  Just one who doesn’t pay certification fees to prove her worth.)  We’d do production deployments once a week, beginning at 11pm and working through the night until we succeeded or rolled back.

Since then, I’ve done all sorts of things…  OSGi in its relatively early days.  Grails web applications that I helped take GOSS (government open-source) and then fully open-sourced.  D3 visualizations for SBIRs.  Actually, D3 visualizations for two different SBIRs.  Many hours realizing I needed to better grok D3.  Lots of business development.  Winning multiple proposals and then staffing teams to do the technical delivery.  Where those teams typically included me, hands-on coding.  Ramping up on AngularJS and Node to lead a “thin-client” team.  That’s as opposed to the program’s thick-client team building on top of Java Swing – thankfully, although I managed the overall UI team, didn’t have to wade too far into the Swing code.  Docker containers containing stub implementations of enterprise system interfaces we wanted vendors to be able to execute against.  Now Kubernetes: figuring out how to deliver and sustain systems in a cloud.  I’ve delivered two OSCON briefings, one using an Arduino and C and one using Go and a Raspberry Pi.

It’s been a fun 10 years.  If she calls again, though, she’d better go find my updated resume.  For the record, LinkedIn’s got a pretty good idea of what I’ve been up to…

Needed a pick-me-up, so went to the tea shop. Ooh, bubble tea. I’ve heard good things, let me give it a try…

Reaction: bleah. Tea should not have floaters. And then I looked up calories and carbs. Double-bleah. Straight tea and/or espresso for me next time.

A few months ago, I joined a software team that’s making use of Kubernetes as a platform to provide elastically scalable software services.  It’s Docker + more magic.

One of the tenets espoused by some folks building container deployments is that a container should only have the software on it required to run a single process / microservice.  The particular software system I’m deploying is a private Docker registry, but to deliver the service, there are currently 4 Docker containers in play.  (I actually think that to solve a problem I’m having, I’ll need to add two more.)

One of the containers wasn’t behaving nicely for me today.  The container provides a web user interface and needs to communicate with a database provided by another container to store and retrieve its data.  But the logs were saying that the user interface container couldn’t log into the database.

The first two options that came to mind:

– the hostname wasn’t accessible to the ui container

– the port wasn’t open on the database container

Turns out, it was neither of those: it was a badly shared database password.  But in trying to prove or disprove those options, I ran into a challenging problem.  See, the UI container _only_ had the binary for the UI process on it.  Which meant: it didn’t have ssh, telnet, curl, wget, netstat, or any of the various other options I came up with to verify network connectivity between the containers.  How to get my answer?  Google + Stack Exchange to the rescue!

In recent versions of bash (which thankfully the golang image did provide), bash will let you access TCP and UDP ports directly, ala

cat < /dev/tcp/databasehost/3306

Running the above from the ui container got me a garbled prompt received from the database container, which proved that the hostname resolved AND the port was open, all in one command.

Kudos to Peter Mortenson and his answer on superuser.com  for helping me crack the bug.  Tuesday’s bug (courtesy of the Monday holiday) will be to see if Beego.Run() doesn’t crash if I manage to map in the app.conf file not otherwise being provided through my Kubernetes replication controller descriptor.  Not good to have applications just stop without an error message!!