Archive for the ‘Cube Life’ Category

Day 10 of Coronavirus WFH

Friday, March 27th, 2020

Microbe

Two weeks down, and it's clear from the graphs of confirmed cases by the CDC, and now the New York Times, that this is in full-swing, and it's unlikely we'll see the end of this acceleration for at least a couple of weeks, and the real safety will be months away. But that's what happens in a pandemic, so we do the best we can with what we have, and hope that the hospitals aren't over-run.

This week at The Shop was a little slower than the past week, and I've taken to marking my ToDo list weeks with the ? emoji, just to remind me of the weeks where we were all WFH and so it'd be understandable why things dropped off a little. It looks like The Shop is offering leaves for those that want it - due to sickness, or family issues - all related to what we are all going through these days. Kinda nice.

I keep busy, so it's not all bad. I'm still doing the same things, so it's nice to know that even in a pandemic, people are people, and the craziness that I've known for years didn't evaporate. 🙂

Day 8 of Coronavirus WFH

Wednesday, March 25th, 2020

Today has been interesting because some folks are starting to show some really strain about all the forced confinement of the shelter-in-place orders from the local states. I know it can be tough... going out just feels risky now, and I'm profoundly grateful that I don't have to. But some aren't handling it well, and they aren't reaching out for the help they need.

It manifests itself in any number of ways, and I make sure yo make myself available for these people - to talk, or video chat, or listen... It's the little things that we can all do to help those that are struggling a little in this wild, crazy time. What I never imagined was that I would be one of the people offering comfort to someone else. This is a reversal I would never have seen coming.

On the up-side, things are going well at The Shop, and work is proceeding, at some sense of pace, to move forward. People generally are being kind to one another... there's a ton of pet pictures on Slack, and people are making shared Hnagouts to meet, casually, as a group. It's the evolution of what we have to do.

It's hard to imagine that this could go on for months... but the data from other countries is clear - this needs to stay in place for 4 to 8 weeks, and that helps to spread out the curve and buy time. Crazy days indeed.

Day 5 of Coronavirus WFH

Friday, March 20th, 2020

Microbe

Things are really escalating now... the Governor of Illinois is talking about issuing a shelter-in-place order for the entire State. That's some serious stuff. We will still be able to go to the grocery store, and drive-thru food, etc. but the casual trips out, and the large collections of people are over for now.

This has been a little creepy for me, but I'm able to take care of things, get food, and while there is rationing happening at the grocery store: 1 gal of milk... 1 bread item... 1 paper product... it's not horrible, and the point is that it's just temporary, and as soon as the trucks and logistics get geared up, then we'll be able to see normal supply again.

But for now... it's stepped up to the next phase, and it'll be a while before things get back to normal.

Day 4 of Coronavirus WFH

Thursday, March 19th, 2020

Microbe

Things are getting worse, as the numbers climb. At this point, things are getting out of hand, and the news is changing almost hourly. The markets have been up and down, but The Shop is asking people not to come into the office unless it's an emergency.

Pretty quick change for just three days. But that's what'll happen when you have something like this happen. It's certainly reminding me of all the viral outbreak movies you see - and while the mortality rate isn't like Ebola, it's bad enough, and that's reason enough to take this all very seriously.

Day 1 of Coronavirus WFH

Monday, March 16th, 2020

Microbe

The Coronavirus is spreading, and The Shop has said that if we aren't comfortable going into the office, it is acceptable to work from home (WFH) - after checking with your manager. Since I'd checked with my manager on just this issue last week, I was ready to start this week WFH for sure.

I don't believe the office is bad... but the Metro and Shuttle are going to be horrible - simply because many people will have the light version of the disease and spread it to many others. That's not their fault - they wouldn't necessarily know... but I could get it - and then unwittingly spread it to others. That's bad.

So I'm going to WFH and see how things play out. After all... I'm every bit as productive here as I am at the office.

Heading out to Seattle for Work

Sunday, January 12th, 2020

cubeLifeView.gif

I'm all packed up and ready to head to O'Hare for my flight to Seattle. The Shop is having some off-site meetings, so I'm going to fly out today, have two full days of meetings and activities, and then a day there to visit with the teams in Seattle that I typically only get to see on Hangouts, and then fly back on Thursday. It's not bad at all... but the flight will be long, and I'll need to find my happy place and just relax for the 4+ hrs in the small seat.

For this trip, I put all my IMAP email accounts on my iPad so that I could take it with me for notes and essential emails, and it's not a lot more to carry in my bag. Yeah, I'll have to take it out at the security checkpoint, but that's worth it to be able to take everything it holds with me. I really think it'll work out well.

I've plotted the route to the O'Hare economy lot into my car, and should be able to just get things loaded up, and on the road. Just need to stay calm for the flight... 🙂

Frustration with Speed Coding Interviews

Wednesday, September 18th, 2019

Clojure.jpg

Yesterday I had an interesting phone screen with someone, and the seemingly common practice of asking a candidate to code on the phone - in a shared web-based environment again came up. I recognize that any employer can have any legal criteria for employment, and the "Coding Phonescreen" is a very common one. You get to see if the person can write code in a few minutes as opposed to inviting them for a day-long interview cycle that can cost considerably more. It's decent logic.

But it really doesn't tell the story, does it?

Speed Coding has about the same relationship to real development as a college classroom has to Jeopardy!... yeah, the material is the same, but the skills to be able to do well in one do not necessarily translate to the other. And the most critical skill in the speed forms is pattern recognition of the problem.

If you've seen this problem before, and written a simple solution to it, then you're in good shape. You know the flow, you know the pitfalls, and you can talk your way through it - like you're talking your way through directions to a local restaurant. No pressure, you're showing someone something you know, and it happens to take a few steps. No biggie.

But if you're at all unsure, then you're not going to get time to think about the solution before being expected to answer it. This is the problem with Speed Coding - if you know the answer, it's fine. But then it's not really seeing if you can think on your feet... if you don't know the answer, you're likely going to make one or two edge-case mistakes, and those will be clearly visible to the person that knows the solution.

The problem I ran into was a binary tree issue, and while I had been practicing my Speed Coding in Clojure, the nature of the binary tree really leaned towards a C++ solution, and that was not horrible, but it was a lot less friendly to edge-conditions.

I ended up writing something like this:

  struct Node { int value; Node *left; Node *right };
 
  bool stored(Node *me, op) {
    bool   retval = true;
    if (retval && (me->left != NULL) && (me->left op me->value)) {
      retval = stored(me->left, op);
    }
    if (retval && (me->right != NULL) && (me->value op me->right->value)) {
      retval = stored(me->right, op);
    }
    return retval;
  }

and the missed edge-case is that once you are one, or more, steps down in the tree, it's possible to have the relative position of the values be correct, but the absolute position to be false. There are two ways to solve this, in this code:

  1. Pass limits down with the call - this could be done with max and min arguments and then in the recursive calls, place the correct values there, and test them as well.
  2. Scan up the tree on each check - this could be a walk-up the tree and check to see that you aren't in violation of the location you have. This would take more time because of all the walking, but it'd work.

But what I'd wanted to do was to write it in Clojure, but the data structure didn't jump out at me. Until this morning. 🙂 This morning I spent the minute or two thinking about the data structure, and then formulated the following solution:

  ;; [val left right]
  ;;       10
  ;;    5      15
  ;;  1   7  12   20
  (def good [10 [5 [1] [7]] [15 [12] [20]]])
 
  ;;       10
  ;;    5      15
  ;;  1   17  12   20    -- the 17 is out of place
  (def bad [10 [5 [1] [17]] [15 [12] [20]]])
 
  (defn sorted?
    "Function to check a binary tree to see if it's sorted for proper
     searching."
    [[v lt rt] op]
    (let [ltv (first lt)
          rtv (first rt)]
      (and (or (nil? lt) (and (every? identity (map #(op % v) (flatten lt)))
                              (check lt op)))
           (or (nil? rt) (and (every? identity (map #(op v %) (flatten rt)))
                              (check rt op))))))

What I really like about this solution is that it checks the entire subtree with the operation. This means that the effort to do one, is really checking all of them. This is what I wanted to write, and it works perfectly.

But I didn't force the issue, and pull back and take the time to think. My mistake. I won't make it again.

UPDATE: a friend and I were talking about this same problem, and he came up with a solution that was very clever - the structure can be validated by simply assuming that the structure is a sorted binary tree, and then calculating the min and max values of the tree.

The catch being that if you get to a node where the current value isn't within the min and max, then you have to fail, and return nil. It's really quite amazingly simple in that it's very fast, very easy to understand and adds the additional benefit of returning the extremum of the tree.

  (defn bst-rx*
    "returns extent [min max] of valid bst or nil if invalid"
    [t]
    (cond
      (nil? t) nil
      (vector? t) (let [[v l r] t
                        lx (if l (bst-rx* l) [v v])
                        rx (if r (bst-rx* r) [v v])]
                    (when (and lx rx (<= (lx 1) v (rx 0)))
                      [(lx 0) (rx 1)]))
      :else [t t]))
 
  (defn bst-rx?
    [t]
    (boolean (bst-rx* t)))

Very Funny Tweet about Scaling

Tuesday, July 9th, 2019

Amazon EC2 Hosting

Yesterday I saw this very enjoyable tweet and it made me smile - quite a lot... because I do interviews often, and they are almost always about Architecture and Design, and scaling is one of the key use-cases to explore. It really helps see how the candidate approaches the problem:

Used to pay $5/mo on a small instance for my personal site. Then I discovered Kubernetes and realized my site didn't scale! No canary deployments! So I upgraded and pay $200/mo now. Took weeks to configure. Millions of people can now read my resume. Damn, it's never looked better
-- @malaroto

When faced with a scaling problem, AWS has been amazingly good - and amazingly bad for junior developers on the path of learning their craft. On the up-side, it's wonderfully full-featured, stable, available, on-demand in every way, and global. On the downside, it doesn't require any effort to use - so the first answer most jump to, is to build something that doesn't need to be built with unnecessary complexity that will work, but slows down the ability for someone else to understand the solution, and it's basically just wasting money.

"Not my dime" - is accurate, but not really the point. The point is to understand the problem, and then fix the problem, but if everything is able to be solved with millions of dollars of computing infrastructure, there seems to be no motivation to solve it with an hour of understanding and code refactoring.

So I giggle... they will have their day - a massive supercomputer in a grain of sand - ubiquitous and omnipresent... and then there will be no need to understand the why of issues... and that will be too bad. There will always be a need for craftsmanship.

Colors Can Be a Dangerous Thing

Monday, July 8th, 2019

Google Docs

This morning I was just checking over a few Google Docs where I'd made some comments for the author, and wanted to see if there was still a reason to keep the doc(s) open to make it easy to respond to the notes, or resolve them for the author. And I noticed that the author had chosen to use an odd color for the word Draft in the header - Goldenrod. Now I'm not a style snob... but that struck me as an odd color for something that you might want to draw attention to. I mean, the text is black on white, and then there's the obvious red for alarm, and green for good... but what about the non-obvious Draft?

And then it got me thinking about the other really unusual uses of color I've seen at The Shop on documents -- and I"m not talking about spreadsheets - I think those are universally accepted as examples of hideous color combinations... No, these are documents that have had background colors... foreground colors... just amazing combinations, that seem to have no sense as to why they are colored this way.

And it isn't something that I have to correct - it's just something that makes me giggle, and I need to put a face with the color choices, and it's usually someone that is not what I'd call a Creative Professional. It's understandable - they want things to stick out - but with so many things that need to stick out, they have to use colors to classify them. It's just like the line from The Incredibles:

Then when everyone is super, no one will be.
- Syndrome

But that doesn't stop some folks from making the most creative color pairings I think I've seen. It's just something I find funny about people... we're all different, and we all bring our own background to everything we do. 🙂

Fun Egg Hunt at The Shop

Tuesday, April 16th, 2019

cubeLifeView.gif

This morning we had a Spring Egg Hunt at The Shop, and some of the eggs had candy, and others had tickets that could be redeemed for prizes up at the front desk. Given when I come into the office, it was pretty hard not to find a bunch of eggs. They were all just laying out in the open.

After I'd found a few, I decided to lay it all out on my desk to see what I'd managed to haul in. Not too bad for just walking around the office. 🙂

Climate Egg Hunt Loot