Posts by Randy Gingeleski

Don’t Give Up

My personal trainer's business card says "don't give up."

At the gym, it's never applied. I pay for training and if I cheat on reps, that's on me. Sometimes you work out and get nauseous. There's a Wall of Vomit for that.

When I did almost give up was on my quest to leave Lockheed Martin. Leave my cubicle. It started late September 2016.

I was working a menial project and wasn't growing as an engineer. There was an opportunity cost to staying at the company. I dream huge for myself, and couldn't get there at LM.

Like Emma Watson in The Circle, my biggest fear is unrealized potential.

For 10 weeks I hit InterviewBit really hard. Learned more about algorithms and data structures than all of undergrad. At work I'd secretly get in more study time, coding common solutions over and over.

Working at Bloomberg was in my sights. I made it to an on-site interview and left there feeling great. For two weeks I waited, walking around Lockheed like it'd all be over soon...

Until it wouldn't. Until the no.

I wanted to throw up. I wanted to cry. I felt like an anvil crushed me.

It took a few days for my mind to produce a next move. Like delayed reaction to a punch in the face.

First, I blogged about what happened. I talked about it with a good friend. "Getting it out" raised my spirits. The world wasn't over.

Then I thought, well, I need something more for my resume. So many big firms didn't even get back to me. I need to tighten this resume to get more opportunities.

This was the pivotal moment - I kept moving forward. To help my resume, I got involved in an open source project I'd been lurking on. A connection I made there led me to my new company.

Overall, by moving forward at that hardest moment, success was achieved.

Was it tempting to settle into Lockheed Martin for the long haul? In a sick way, yes. I could've started a master's degree at Syracuse University and/or signed a lease on an apartment. Gotten a prescription for antidepressants. Started drinking heavily at "happy hours." Complacently tried to enjoy (??) my situation.

But I didn't give up. I kept my goal in mind, acting and making decisions through that lens.

Things ended up better than they would've at Bloomberg. Victory was that much sweeter when a 6-month-old vision became reality.

Life has a funny way of working itself out when you persevere. When you keep - at - it.

Don't give up.

10-Year-Old Me, What Can I Say

My first-grade teacher, who I remained close with throughout elementary school, added me on Facebook.

At ten years old I was dead set on becoming a fantasy writer. That's when I wrote The War of Lord Capani. I was just... so different.

I knew you have to accept a Facebook request like this. But beyond that I wasn't sure what to do.

If we meet, get coffee or whatever, I think I'd disappoint. I was supposed to become an author of Stephen King magnitude.

When do I write now? Blog posts (hello). Software documentation.

Never fiction. At ten years old I wanted to tell stories about imaginary characters. Now I struggle to tell my own.

This led me to a question I'd yet to ask myself. Several times, a friend and I have chatted about "what would your 17-year-old self think if they could see you now?"

What would my *10-year-old* self think?

What do we have in common? I remember this internal dialogue I had to express on paper. Again, at the time it came from my imagination, now it seems to come from consciousness. The human struggle. 😏

I put so much effort into The War of Lord Capani. My younger self would be thrilled to know it got published.

I'd break it to him that the book sold 200 copies. The publishing company was shady. His/my second book would do much worse.

More people will read these words than will ever read those books combined.

Not only will you not write fiction, you'll hardly ever read it. You still get books for Christmas but not one of them was fiction this year.

He'll ask if he/I/we now write for a living. Now obsessed with the capitalist pursuit, I'll smirk and explain it's difficult to do that. Most that do write for the Huffington Post or some other unrespectable outlet, living in poverty.

What you do at the moment is engineer software for underwater vehicles, I'll say. You wrote about robots so much and now - kind of - write robots.

He'll say that sounds really cool then I'll emphasize the word 'sounds'. Whether I extol the quiet desperation of cubicle life is TBD.

Maybe he asks why my face is scruffy or I have a tan in the winter or my back is relatively big. I'll give an overview of self improvement, and girls, then explain his chubbiness.

"Protein, carbs, fat - pick two and make one of them protein." He won't get it.

I haven't even gotten into the trouble he faced at 17, over computer mischief. How much duress he caused our parents. Mom's tears. At least there was the upside of cybersecurity skills.

I know one, maybe two, people from grade school that have changed as much as me. Everyone else you could predict how they'd end up.

10-year-old Randy wouldn't like me. I'm not sure about my first-grade teacher either.

Gambling, The Multiverse, and Making Luck

I used to deal cards at the Turning Stone casino in upstate New York. One of my good childhood friends works there now on my recommendation. Sadly, he seems to be addicted to gambling.

Casino employees, barring technicians, are allowed to play the gaming machines. It's virtually impossible to get around their house edge. Conspirators can more easily exploit card games.

I love the gaming industry for its charm, glamour, and applied statistics. But gambling makes me nauseous. I think about what went into the money I'm losing - my time, creativity, grit. Especially right after a 2 AM to 10 AM shift.

Maybe this mindset is the exception. Unfortunately my friend doesn't have it. From the sounds of a recent, increasingly rare encounter, he's playing the machines after every shift.

"I was up two hundred! I was hitting every bonus. But then my luck went south."

I expressed surprise that he wasn't too exhausted after his shift. He does nights like I used to.

"Well, the machines were hot."

What am I rambling about here? Luck.

A slot machine is just a Linux terminal. The code it executes puts the same odds behind what patterns appear on every bet.

There's nothing 'hot' or 'cold' about that. You'd have to factor in luck.

Aren't we all lucky

One of the books I read this summer was Stephen Hawking's A Brief History of Time. As someone who struggled with AP Physics in high school, I highly recommend it.

Something you realize as you read it is how unlikely it is that we're all here. The human race. And that we can /think/ about how unlikely it is, mention it on the Internet, and almost anyone else on the planet can read that.

Aren't we all lucky? Wasn't it lucky all these events happened and now we're here?

I don't believe in luck, where luck is some quantifiable thing.

As if we could graph out these spikes in luck, over billions of years, that ultimately resulted in Earth and us and the Internet.

The luckier and unluckier universes

Something I do believe in is the multiverse theory. It sounds more outlandish than luck, but there's a better scientific basis.

The idea is that there are infinite variations of our own universe happening concurrently.

So, infinite times over, there's a version of you that's less lucky than the one reading this. Who doesn't have a phone or computer... doesn't have clean water, who's dead.

The implication of that, however, is an infinite amount of luckier versions too. Where you can fly or are made of ice cream or have wheels where your legs are.

Coincidentally this concept gets mentioned in A Brief History of Time - Stephen Hawking is a proponent. But a better overview would be this Sam Harris podcast if you're interested.

Making luck

Why do we care about luck? What's the root of superstitions? Why call a slot machine 'hot' or 'cold'?

We want good things to happen to us. That's it.

Instead of wasting mental energy over luck, there are some things you can do with a better track record.

These are strongly related:

  • Have an open mind
  • Practice strong mindset

What's an open mind? Trying new things when opportunities arise. Saying "yes" to unfamiliar experiences. If you're honest with yourself, any downside is probably minimal, avoidable, or nonexistent.

(Still, if an acquaintance wants to steal a car with you, don't do it.)

What's a strong mindset? Being optimistic. Practicing mindfulness to ground yourself - instead of worrying about how many minutes are left in your workday, tell yourself "there's no place I'd rather be." Think about how fortunate you are to have the things you do, whether that means an Internet-connected phone or working limbs. Keep a journal of your day.

Read the book Gorilla Mindset. It covers all these as a quick, enjoyable read. The paperback is $10 on Amazon but the audiobook is free with an Audible trial.

Another thing you can do - nurture skills that increase your odds of success. Define success however you'd like. Odds are, binge-watching TV doesn't contribute to you being successful. Binge-anything probably doesn't. But what about going to the gym? Working through HackerRank exercises?

Conclusion

I don't believe in luck. But maybe, like God, luck's existence is just impossible to confirm or deny.

Regardless, there are tried-and-true ways we can improve the odds of good things happening to us.

Keep in mind that hunting around for 'hot' slot machines doesn't seem to be one of them.

2016 in Review

This year, more so than any 2013-15, has been a lot of ups and downs.

Take my review of 2015 - the only bad thing was my grandma passing. I wouldn't even call my time at NYCM bad. It was kind of funny, I'll never forget it.

In 2016, I spent a good amount of time unchallenged at work. The moments when that was worst, I had job interviews at places I'd much rather have been. They didn't work out.

I didn't travel as much as I'd have liked. When I did, Selena Gomez didn't fall in love with me.

I was breaking weightlifting PRs then suffered a debilitating back injury.

Someone lied about me to the police after I cut them off in traffic. State police tracked me down at my parents' house, scaring my mother as they tried to intimidate me.

But the good outweighs the bad.

The really dull project at work got canceled right before Christmas, causing reassignment for everyone.

I reconnected with friends I'd fallen out of touch with. I appreciate people in my life that moved away more when I do see them.

I'm set to travel more in 2017.

Maybe my deadlift isn't as heavy, but I'm in overall better shape than ever. I found a great personal trainer, whose gym and workouts I look forward to as post-workday therapy. Most people I went to high school with have gotten fat by now.

I spent a summer rowing, figured out I wasn't bad at it, and had a lot of fun.

Job interview failures pushed me to "choose myself" and circle back to my personal brand. I have a stronger vision of where I have to go.

I finally formed my own LLC. A close friend did too. We both scored some freelance work, and things might really take off this next year.

(If you're interested in cybersecurity see our site War and Code)

I'm probably forgetting more on either side. The point is, there was resistance with swings the other way too.

Oh well. Time to go forward. Here's to 2017.

That 2017 New Year’s Resolution

Typically I don't do New Year's resolutions. Stuff like "lose 10 pounds of bodyfat" is stupid and chances are you'll fail.

This year, though, here's mine... (is this one or two)

Take more risks, make more adventure.

Is that corny? I haven't done an ideal amount of either this year. You can read about it - my self-centered review of 2016 will be out soon.

But, hey, my head is up. I'm still winning.

If you care, this was my 2015✌️

Analyzing GoGo 21 for Optimal Strategy

There are sites where you can play "casual" games against other people for money. One of the more interesting games, in my opinion, is inspired by blackjack.

On Worldwinner / GSN Cash Games it's called Catch 21 and on Royal Games it's GoGo 21. The gist is you get a standard deck of cards, and given a maximum of four concurrent "hands", you try to make as many 21's as possible. You can't go over, you can throw away cards, you get points for speed but get the most for accuracy.

Months ago, working on my Scrabble Boggle bot, I'd take breaks and play this game, trying to deduce optimal strategy. It's easy to play - what's the best way to play?

I recently ran simulations to figure it out.

TL;DR

"WHAT'S THE OPTIMAL STATEGY??"

For humans, the best way to play is trying to make 21 (duh-huh) or trying to make 11 if that's not possible. Otherwise put the cards wherever they can go. It actually helps to always consider the decks from left to right, instead of some random frantic order.

For computers, optimize the human strategy. You have the processing power and memory to constantly track which cards are most abundant in the deck. There are times when, if you can't make 21, you won't necessarily be trying to make 11. Example - there are two 7's left in the deck and 1 ten. It would be preferable to set up a 14 instead of an 11.

How to play

Still don't understand how to play? I think it's easiest to show. Here's a YouTube video someone playing GoGo 21.

Analysis, up to optimal human strategy

To initially analyze the game, I wrote a rough Python script to simulate it.

Then I just added parts and checks as I went along.

The first strategy I tried out is the simplest. Look at the first hand - as long as it's possible to add cards, do that. If you can't, look at the second hand. And so on, until you can't put a card anywhere, at which point you start to discard.

The metrics I've judged these strategies on are blackjacks per match and discards per match. Obviously - and these have a negative correlation - we want to maximize blackjacks and minimize throwaways.

All figures from here in are from 100,000 sim rounds.

  • 567,600 blackjacks = 5.676 / game
  • 1,889,862 throwaways = 18.89862 / game

Next, I was curious about a small tweak. Instead of methodically analyzing the open decks, left to right, what if we randomized that part?

Things actually turned out worse.

  • 563,862 blackjacks = 5.63862 / game
  • 1,911,062 discards = 19.11062 / game

At this point, I decided to use some more realistic strategy. I added a check to look at all the hands to see if we could make 21 and then put the card there if so.

  • 902,747 blackjacks = 9.02747 / game
  • 1,138,283 discards = 11.38283 / game

Now we're getting somewhere. I added another check after the one for 21, this time to check for 11. Since the most common card value is 10, the next best thing to 21 is usually 11.

  • 959,662 blackjacks = 9.59662 / game
  • 1,056,945 discards = 10.56945 / game

So that's the best strategy for humans, I'm quite certain.

Deducing optimal strategy for computers

Computers are better built to play this game. For my next strategy, after the 21 check, I'd calculate the most common card value* left in the deck then subtract it from 21. Whatever the result was, that's what we'd be shooting for.

* Note I always counted aces as being worth 11, because I was extra lazy in this prototype script.

Most of the time, yes, most common card is 10 so we still shoot for 11. But once in a blue moon it's not.

  • 961,034 blackjacks = 9.61034 / game
  • 1,056,246 discards = 10.56246 / game

At this point I decided to write out a more elaborate simulator than my initial hackjob. My ultimate goal was to expand on the check I described above, now considering the abundance of all cards left in the deck.

The better simulator is here on Github. Here are results from running what I deem optimal computer strategy.

  • 973,889 blackjacks = 9.73889 / game
  • 1,054,623 discards = 10.54623 / game

Just a little better, but so small it could've been lost in Monte Carlo run stats fuzz.

Ultimately the crack to a blackjack-inspired game is really just card counting. Big surprise, right?

Closing

One way to figure out a game's optimal strategy is by coding its basics, then testing strategies over thousands of runs.

That's what I did here. The initial script took maybe 5 minutes to write.

Obviously, all games aren't this simple. I don't think it's as easy to model Texas Hold'em.

Stay tuned for a possible followup post, with a bot. The trickiest part of that would be the image recognition. We'll see. 🙂

The Software Interview Breakup

Some three months ago I decided I wanted a new job, that I was going back to New York. And this time I was serious.

I got all the usual books but did most of my studying on InterviewBit.

After a good month of that I landed a phone interview with a prestigious New York finance company. That was perfect because finance, like security and game theory, is a big side interest of mine.

It was exciting. I got super nervous for the phone interview, and that went kind of shaky. A first date.

Three weeks went by - I thought it wasn't happening. Then I got called for an on-site. I had a month before that and went really hard preparing.

The night before and the morning of were really stressful. But I knew what to do. I took some nootropics, practiced algorithm fundamentals, rehearsed my explanatory and behavioral answers.

I listened to I Believe I Can Fly and The Time is Now like four dozen times.

Then I put on a tie and walked uptown. Got there appropriately early, noticing there were some other people there for a software interview... then that turned into 16 people.

That's okay, they're probably hiring a lot of engineers. I talked with this one guy from Canada and we became temporary buddies for the tour.

Then it was showtime. We all sat in this big conference room, employees coming to get us one by one.

The setup was an hour's interview with an initial person, then a lunch break, then another hour with someone else. Okay.

Person 1 and I got off to a good start. I went through my resume, my rehearsed answers paying off. Then I initially struggled with the first algorithm, but got through with a few hints. He asked about optimization and I got that. He asked another, shorter algo question and I got that.

Lunch break. Don't throw up.

Person 2 came in and I completely pwned everything he gave me.

I walked out of the building feeling really good. I texted my parents and a couple good friends that I thought I made it. I was elated. I went out for prime rib that night.

Except, almost two weeks later, no, I didn't get it. Mentally all my eggs had been in that basket. Now they were scrambled. It would've been the perfect career move, for my career and otherwise.

I'd felt this way before, when my first serious girlfriend and I stopped talking. Then I started developing mental systems for dealing with things, I guess. And at this moment in life I care more about myself than girls.

Part of me wanted to cry, part of me wanted to have the Air Force whisk me away to work cyber command, part of me wanted to move back to New York anyway and try to make it work. I didn't end up doing any of those.

After about four hours I got it together. (Gorilla Mindset)

A friend was having a tougher time. He was about to leave town too, was all set up, but got a DWI. It's (likely) closed the door to his opportunity entirely.

We'd gotten together to talk because of the parallels to our situations. At least I didn't have a charge like his floating over me. The legal bills, the car damage.

For me, it'd just take longer than I thought to leave my cubicle.

Which Programming Language Should You Learn?

The simple answer to this question is "all of the above."

At Lockheed Martin, you might see three different projects in three different languages - C, C++, Java. And parts of those three have you touching Python, HTML, CSS, Javascript, Makefile, and Gradle.

Interviewers for Google and Bloomberg will tell you their firms have similar philosophies on language. Largely language agnostic, using different things for different projects or use cases.

When you start out, you'll just be learning one language. Probably C++ or Java in an academic setting. I would recommend Python at Codecademy if you're a beginner.

Whatever that language ends up being, think of it as your starter Pokémon.

As you continue training, there are more Pokémon (languages) you'll encounter. Some you'll like, some not so much, and how much you use each will vary.

How much StackOverflow you need will vary.

There are strengths (Python with machine learning libraries), weaknesses (package management in C), quirks, and similarities (Java vs Javascript syntax).

Trying to make one language work for every situation will hurt you as a software engineer. You can (probably) do machine learning with PHP, but it doesn't have the libraries Python has for it. I have only the vaguest idea of how you'd start web development in C.

Sometimes I feel as if I haven't "mastered" any one language. But even the languages themselves keep changing over time (i.e. Java 9 is coming).

It's more about knowing enough to take on the projects you want to. I know Java deep enough for programming interviews, Python enough to bot online games, etcetera. There's not a point (or language) when the learning is done.

Considerations for Self-Driving Car Engineers

Udacity recently announced a self-driving car engineer nanodegree. There's a strong possibility, in my opinion, of getting relevant employment at the end. It'll cost you 9 months and $2,400.

The announcement email had me reconsidering my own career goals. It's relevant to me because my software engineering work for the last year has revolved heavily around autonomous vehicles.

Here are some conclusions I reached, and things for potential car engineers to think about.

Location

Where do you want to live?

If you work in the defense, aerospace, or automotive industries, it's very hard to live in a big city. The exception maybe being Detroit.

Why? What we engineer takes up a lot of physical space, for tinkering and experimentation if not the final products.

The most desirable places for someone with this nanodegree likely include Tesla, Mercedes Benz, and SpaceX.

Here are where those three employers seem to be putting their engineering people.

Based off searches of their career sites.

Tesla - Deer Creek, California; Fremont, California

Mercedes Benz - Sunnyvale, California; Redford, Michigan; Ann Arbor, Michigan; Montvale, New Jersey

SpaceX - Hawthorne, California; McGregor, Texas

Consider whether these are places you want to live. I currently live in Syracuse, New York and won't judge. 🙂

Side note: I mention SpaceX because I feel there's a big overlap in the content - see the below video which includes a lot of autonomy.

Advancement Opportunities

This will get a little more speculative.

Most of the places that will be hiring self-driving car engineers are not young companies. Therefore I think their approaches to advancing employees will reflect their age.

Maybe, regardless of overtime, performance, and/or accomplishments, it takes 3-4 years to get a promotion. (i.e. Software Engineer to Senior Software Engineer)

This is the impression on the defense side of autonomous vehicles. The younger the company, though, the less likely I'd think this is.

(Within reason - by "young" I mean Tesla or SpaceX and not some super fresh startup)

Testing

There's going to be an ungodly amount of unit and integration testing behind these self-driving cars.

If you look at the safety requirements behind human safety-critical spacecraft, you can get the idea. 100% path coverage.

That means every possible path through the code has to be executed at least once by your tests. It's stricter than branch coverage which is stricter than line coverage.

Say you've got the following...


if (b == 7)
{
    b--;
}
else if (b != 0
{
    b = 40;
}

if (a > 90)
{
    c = false;
}

System.out.println(a + b);

What are your paths? Whatever ends up getting tested here, maybe asserting the values of a, b, and c, you'll need to run those assertions through -

  • the first if with the second if
  • the first if without the second if
  • the else if with the second if
  • the else if without the second if
  • just the second if
  • none of the conditionals

The big question mark is how much of this responsibility will fall on self-driving car engineers. It might just go to dedicated software engineers in test.

When actual self-driving car engineer job postings begin going up, I guess we'll get a better idea.

Conclusion

When the self-driving car engineer nanodegree was announced, I gave it serious thought. As someone with relevant software experience already I can assume it'd be easy to get hired afterward.

However, mostly for the "location" reason mentioned above above, I'm not applying.

I do believe it would be better for many ~18-year-olds than going to college.

ExigoSource Review

ExigoSource is a subscription service that does research for Amazon resellers. Basically they hunt for arbitrage opportunities between Amazon and other online vendors, upon which you could capitalize.

Not sure how well-known it is - I heard about it somewhere on Quora.

Here's a review after a few days of use.

Signup and pricing

Pricing is $99/month for members. The website claims to have just a limited number of memberships, and will have you sign a form to join a waiting list.

In about 12 hours from when I got onto the waiting list, I was offered membership.

So this might just be a marketing gimmick, or there's a very high turnover rate.

Layout of the service

There's one area with a few guides, which aren't anything really special. They suggest you buy a label printer, etc.

The main draw of the website is the dashboard. It's clean and gets right to the point with the information you need.

The header of the dashboard (really it's a spreadsheet) describes all the metrics - entry data, product image, link to the product on Amazon, category, retail price (what you can buy it for someplace on sale), Amazon's lowest "Fulfilled by Amazon" price, Amazon sales rank, ROI as a percent, estimated monthly sales, net profit, weight and dimensions, then links to the item's price history on Amazon.

As you'll see as I walk through an example case, though, the metrics aren't entirely forthcoming...

Example

Here's a reselling opportunity from 9/17/2016 that was presented on ExigoSource. I'm going to blur the specifics so as not to compromise the privacy of the site.

exigosource-case-1_01

Now, ignore the ROI and net profit seen in the screenshot because those are simply taking the lowest price on Amazon and subtracting the current retail price at Walmart.

Price at Walmart = $7.39 per unit

Lowest price on Amazon = $9.96 per unit

Let's look into that Amazon price. The first thing you'll notice is that Amazon isn't directly selling this toy at all. Anyone that wants to purchase (sales rank was in the 10,000s so people were buying) has to do so through independent Amazon sellers.

exigosource-case-1_02b

Diving into that $9.96 figure, we'll see that the vendor with that price is not using Fulfilled by Amazon and is therefore charging shipping. So, with FBA, what we could reasonably charge people is $15.74 like everyone else is.

exigosource-case-1_03

Reasonable price on Amazon = $15.74

Now we'll analyze the $7.39 we were quoted on Walmart. Say we plan to buy 50 units.

The total cost, since shipping is free, ends up as $399.06 with taxes included. However, maybe $399.06 in dollars at Walmart isn't necessarily $399.06 in cash.

What do I mean? We could buy a gift card for Walmart at less than face value. I used Gift Card Granny, which searches many gift card resale sites, to figure out we can save 3.14%.

exigosource-case-1_04

Saving 3.14% on $399.06 means our total for 50 units is now $386.53.

Real price at Walmart = $7.73 per unit

Now, we can't ship directly from Walmart to Amazon. In order to use Fulfilled by Amazon there's some minor prep work that Walmart warehouse employees won't do for us, like barcode-labeling the boxes.

This creates a variable in the sales equation that's difficult to gauge - how much prepping and shipping from us to Amazon will cost. For simplicity's sake I'll give a flat rate of $50.00 (or $1.00 per unit).

Real price to us = $8.73 per unit

Throwing some figures into Amazon's FBA calculator...

exigosource-case-1_05

After Amazon costs we're left with $9.31 a unit, and we know each unit costs us $8.73, so that's a lousy $30 profit for all this work. We also put over $400 at risk to make it happen.

What kinds of goods are researched?

From what I saw over a ~3 day span, kids' toys and baby products. If you're on some kind of list for doing weird things with kids and/or babies, you probably don't want to be taking these shipments at your house.

When I'd go to crunch the numbers, everything seemed to turn out like the case above with low profit per piece. You'd need to buy hundreds of these items to make anything lucrative.

Bottom line

ExigoSource offers a 3-day refund from the time you sign up. As you can tell from my writing above, I wasn't really enthusiastic and ended up getting the refund.

I will say their customer service is fantastic. Turnaround was very quick, no hassle.

ExigoSource overall is an interesting concept because I think their research is done by proprietary scraping software. If you saw my Scrabble Boggle bot, you know I'm into writing software to make money. Something along these lines may be a future project.