Posts by Randy Gingeleski

Stagnant = Obsolete

Recently I've gotten back into doing technical interviews, floating in security clearance purgatory for my normal job. You always get asked the same sort of stuff .
"What are you looking for?"
And I'm honest. I say that I'm looking to grow my technical skills, in the way coding for production allows. In the way being surrounded by and working with bright people allows. In the way incessantly writing unit tests for legacy code doesn't allow. There's a knowledge ceiling to JUnit.
Image credit - Raheja Tower Flickr
Image credit - Raheja Tower Flickr
One of my interviewers, a software architect, had a solid response.
"In our industry, anyone who's stagnant becomes obsolete."

Unproven

When you haven't done full-time industry work in the technical field, you're unproven. No matter how much stuff you have on your Github or how many contracts you've worked. That doesn't seem to hold much weight with interviewers. Coding with a team for production is different. This has become apparent in how much I end up babbling about my software engineering class from St. John's (CUS 1166, spring 2015 semester). That's the only time I've truly coded with a bunch of other people. Wide range of skill proficiency. Havoc over Subversion. Frustration abound. In the end we made this ugly thing called menusearch, but it worked. Being a full-time software engineer or developer is a whole bunch of that. Maybe more people who know what they're doing. What you work on for your first year in the field, out of school, could dictate your entire career timeline.

Two different job scenarios

Here are two very real scenarios. For both, you're a recent BS Computer Science grad, only planning to be there a year, and Java's the vehicle of choice. Any mention of "new code" means test-driven and heavily documented, similar company culture. Salary's algebraic because it's highly dependent on location.
Image credit - EOG
Image credit - EOG
First scenario - huge corporation, lots of name recognition. Salary offer of X. Day-to-day you write unit tests on legacy code. It's implied that after maybe a year and a half you'll be trusted to start writing a bit of real code. The new code to maintenance split is 20/80. Second scenario - sizable firm but still growing, concentrated to your state, hardly any name recognition. Salary offer of 25% greater than X. Day-to-day you're writing a lot of new code, all of the company's software is newer in-house stuff. You have a supervisor who mentors you. Since everything is fairly new you get to suggest and try out new technologies where appropriate. The new code to maintenance split is 60/40. At the end of the year, which scenario results in the greatest market value bump? This could pace the trajectory of your whole career.

"Why can't I do the same thing forever?"

If you never want to expand your professional skills, there's always McDonald's. You can make $15/hour by 2021 and pretend inflation doesn't exist.
"Workers are hopeful their lives will change with the dramatic increase in their pay." Okay. Image & quote credit
Image credit - Syracuse.com
Meanwhile in the tech field... What were traditionally different business departments - telecom and IT - have merged as phones became computers. Certain facilities stuff, like HVAC and surveillance, will likely follow. Unified digital infrastructure. The in-demand languages and technologies are shifting all the time. Here you have Github trends:
Image credit - RedMonk
And then job growth trends, ten languages altogether:
Programming-Job-Trends-Traditional
"Traditional" languages. Image credit - Indeed.com
"Modern" languages. Image credit - Indeed.com
Change occurs even within languages themselves.
  • Major new versions - i.e. functionality from HTML4 to HTML5, setting up the death of Flash Player.
  • Repurposing - i.e. Java, originally intended for programming hardware like VCRs, is now a force of nature from corporate to mobile.
If a programmer from 1985 time-traveled into a modern software shop, he'd be irrelevant beyond the basics. Literally BASIC.
Commodore 64 Programmer's Guide, table of contents.
Commodore 64 programmer's guide, table of contents.

Conclusion

Being stagnant in the technical field makes you obsolete. Nothing's evolving at a pace quite like technology. Those of us that work with it have to evolve too. Success in doing so yields increasing average earnings. This can be realized via job hopping or internal promotion. Failure to do so results in decreasing market value - until zero.

The Language of Skynet

A new Terminator movie comes out tomorrow, presenting an opportunity to discuss a controversial AI topic. Especially now with the whole drones / LAWS tug-of-war.

Skynet -- a war-fighting superintelligence -- is a "sexy" computer science project if there ever was one. I want to look at what it is from a technical perspective, what the real-life roots of such a system may be, how to feed it data, and the logical issues involved.

skynet-terminal
Image credit - Jake Sargeant's Vimeo

What is Skynet?

From the Terminator Wikia page:

Skynet is the world's first Automated Defense Network ... It is the controlling force behind all of the battle units. It pools data from battle units, develops tactics and coordinates attacks.

It's the antagonist of the franchise, viewing humanity as a threat and hence fighting against it. Let's ignore that for now.

A working definition: automated defense program that pools data from battle units, develops tactics and coordinates attacks.

How about a nice game of chess?

In the short-lived Terminator TV show, a very preliminary version of Skynet was a computer called 'The Turk.'

It's alluded that, although the machine just plays chess, it's more of a general game player:

Andy describes the Turk 2 in a way that could also apply to Skynet and the Terminator AI: having a hunger for learning but not always learning the right lessons. Terminator Wikia
Image credit - Terminator Wikia
Image credit - Terminator Wikia

General game playing is an exercise in AI programming. Instead of coding something that just plays chess or specializes in one game, you're coding something that can play any game.

So how does that work? There's a whole MOOC on it, but basically:

  • Two parties are connected by a server. Could be a GGP with a human, or two GGPs.
  • Server will monitor moves for validity, inform parties of state changes, and provide initial data.
  • Initial data contains the rules, in Game Description Language, plus the starting state.
  • Rules include conditions of success -- how to know there's a winner.
  • Game commences. For each move, the GGP applies some kind of algorithmic logic like Monte Carlo.

If you're into technical material, check out Hilmar Finnsson's Generalized Monte-Carlo Tree Search Extensions for General Game Playing (pdf link).

The WOPR from 1983's WarGames was a general game player repurposed for military applications.

Image credit - Ross Kingsland
Image credit - Ross Kingsland

The fuel of general game playing

Data. No matter how fancy you get with algorithms, GGP relies on data.

It needs just enough to get started. Rules and initial state.

IBM has a paper on "general description language" (pdf link). Versatile modeling language for conferring complex designs.

Game Description Language is the most common data format for GGP systems. However, there was a commercial program called Zillions of Games that had its own language. And yet another system called Metagame with another language.

As far as I'm concerned, these 3 languages for describing games are a subset of general description language. They confer complex design... of games.

Adaptable AI systems need to be fed information in this sort of way. Standardized format capable of describing what's pertinent to them.

For game playing, that's any game in the universe. Even ones that haven't been invented yet.

What does every game have? Going to the most fundamental traits:

  • Roles / players
  • Initial state
  • Possible moves
  • State updates
  • Terminal conditions
  • Goal state

Add syntax and you can describe any game to a machine.

Image credit - Zillions of Games
Image credit - Zillions of Games

General Warfare Description Language

Skynet is more concerned with war than games. To program it, you would need some kind of General Warfare Description Language.

Military technology is evolving rapidly. Tomorrow's nukes could be antimatter weapons, tomorrow's firearms could be directed energy.

This language has to rely on absolute fundamentals so as not to become obsolete. Examples:

  • Entities - outside of the system's direct control, like human soldiers and manned vehicles.
    • Friendly
    • Hostile
    • Civilian
    • Uncertain
  • Units - directly controllable by the system, like instances of LAWS. (pdf link to CSS analysis)
  • Methods - components of units with the capacity to affect entities, like firearms.

By no means is this comprehensive. If one were to build Skynet, it would have to be.

Issues with a GGP-based Skynet

The "pools data from battle units" part isn't too complex.

Fledge out General Warfare Description Language or something like it.

Start streaming data into it. Presumably most, if not all, surveillance is digitized in a mass processable way.

"Develops tactics and coordinates attacks" is where things get dicey. That's where the Lethal Autonomous Weapons Systems arguments are currently at, and where campaigns like Stop Killer Robots are coming from.

In the Terminator battle, things are fairly polarized. Humans versus machines. Each wants to wipe out the other.

Machines: scan with pyroelectric infrared sensors. Human? Shoot.

Humans: is that a machine or one pretending to be a human? Shoot.

Real life isn't like that. It's harder to teach a machine what to do.

Image credit - heavyarmor.wordpress.com
Image credit - heavyarmor.wordpress.com

Tangibility & Computer Science

Something I think every computer science student will eventually ponder is the tangibility of what they're doing.

Programming and algorithms definitely. Networking as that becomes increasingly wireless. Engineering as everything gets smaller or implanted into body parts.

(Image credit - David Icke)
(Image credit - David Icke)

My existential crisis

Well, an existential crisis is where you question the foundations of life. Not sure what the proper term is for questioning the foundations of this work.

When I first learned to code (C++ course in high school), it was like magic. I was thrilled with forcing the computer to obey my commands. Even if it was just making fizzbuzz print to console.

College beat that honeymoon period to death. Working on my own projects made me content.

Things got shaky when I did my blackjack certification (2014). I would drive home from class wondering if I'd "chosen" the right "path" in life.

Quotations there to combat the you-can-suddenly-be-an-astronaut-at-80-years-old-if-you-really-want-to argument with ambiguity.

When you're dealing cards, your work is right there in front of you. Manipulating cards and cheques. You can gauge how well you're doing by how pissed off the floor supervisor is. It's a trade.

My dad is an electrician, also a trade. You can touch (sometimes) the results. We'll drive by some train yard, he'll say he made all the lights work.

Computer science is... in the computer. So:

These aren't all bulletproof points, but were what I struggled with at that time.

Maybe you have too or maybe they look like UNIX beard ramblings.

unix-beard
(Image credit - The SANgeek)

Relating to computer science tangibly

This is where I am now.

Code, bits, bytes - it's like molecular architecture version 2. Evolving a lot faster than we can organically.

Most of your work might go unnoticed. I imagine the average Facebook user can't begin to understand how much logic and creativity makes that service possible. They'll still go on there 20 times a day, living vicariously through their "friends."

Your work might get phased out. Maybe you worked on the AOL web browser a decade ago, now it's webmail and clickbait for older people. You were still part of how most people got online for years.

(Image credit - ExtremeTech)
(Image credit - ExtremeTech)

Computer science makes it possible to call the police or fire department from virtually anywhere.

To get online (networking), order a pizza (papajohns.com), and have a family movie night (Netflix). Then share it with the whole world if you want (Twitter, Facebook, etc etc etc).

To track and disable truck engines from flying laser beams.

https://instagram.com/p/0FwHFnQJwK/

There's now some level of programming and networking at play in just about anything. Microwaves, phones, TVs, cars...

One person's contributions can play a key role in affecting millions or billions. Helping save lives or the world.

Closing

It was really stupid of me to get into a rut about this when I did.

If you're in a spot like that now, just look around. Our present way of living relies on computing.

That's pretty tangible.

Tips for Doing Business on Craigslist

Conducting business through Craigslist used to be a pleasure.

Back in the six months after I got my driver's license (2011-2012), I was selling event tickets in considerable volume. Stubhub hadn't gotten too popular yet. Craigslist was my biggest lead generator.

Most weeks I'd do about a dozen deals from there and nobody ever flaked.

(Image credit - Prepper Chimp, edited)
(Image credit - Prepper Chimp, edited)

Now things are different. Whether I used the Syracuse or New York sites, items or real estate, things have shifted from decent volume / decent quality to high volume / low quality.

Example

For perspective, I've been trying to find a new tenant for my current apartment. The landlord and I made a deal where I can get out of my lease 3 months early (moving out at the end of April instead of July) if I can find someone decent to come in.

No problem, right? For New York real estate this place isn't a bad deal, well-located near St. John's, not in the hood or anything.

For this past Saturday and Sunday I scheduled a total of 31 appointments (half hour blocks between 9 and 5).

Here's how they turned out:

  • 13 were just no-shows (41.935%)
  • 4 cancelled (12.903%)
  • 3 showed up between 5 and 15 minutes late (9.677%)
  • 2 showed up 15 to 25 minutes late (6.452%)
  • 3 showed up between 5 and 15 minutes early (9.677%)
  • 6 out of 31 (19.355%) showed up on time (+/- 5 minutes)

If you aggregate no-shows and cancellations, that's nearly a 55% flake rate.

(Image credit - Wizard of Oz)
(Image credit - The Wizard of Oz, edited)

This was the fourth weekend I did showings. Perhaps I shouldn't have been showing so far away from May, as people aren't that serious, but it gave me a chance to experiment.

Here are some tips on (efficiently) doing business with Craigslist.

Minimizing flakes

In my opinion, it starts with the title of your ad.

Lovely Apt. w/ Office - Avail. 5/1 - Right by St. John's (Fresh Meadows)

While the word "lovely" sounds British, I hoped it would weed out meth heads.

By putting "Right by St. John's", with Fresh Meadows after that, so people have a pretty good idea of where it is.

If there's a major point you need to get across, write it all over and consider putting it in the title.

Originally I got a lot of questions about earliest move-in date, as I'd only specified it once.

I re-wrote it three times:

move_in
Yes that's my current bedroom.

No more questions about that.

In addition to taking advantage of Craigslist's built-in tags to get your points across (in the above image, they're in the upper right-hand corner), spacing out your ad makes it easier to read.

ad_whitespace

At the end, I gave explicit instructions for contacting me:

Screen Shot 2015-03-06 at 10.31.28 AM

If the person actually contacted me with their name and what they do, I found there was a high probability of them keeping their appointment.

I placed priority on getting back to those people. If there were still time slots to fill, I attempted to do so with the "Hey this is Larry can I see your apartment" responders.

To use some Internet marketing jargon, the ad should be a filter / funnel of qualified leads to you. So then we get into actually communicating -

Communicating high value (text)

Perhaps unsurprisingly, texting to minimize flakes for Craigslist is similar to minimizing flakes for online dating.

Your time is valuable. This Internet stranger should be honored to deal with you.

Focus on logistics, keep language succinct, and using all lowercase seems to help.

No "Hey! Thanks for getting back to me!" or "Have a nice day! :-)" or any of that. You should probably never those anyway, but especially not for business.

succinct_texting

Communicating high value (email)

For email, you can be a little more formal.

Also, and this goes for whenever I'm writing email, I try to space things out so they're easy to read.

I'd say they could see my place Saturday or Sunday...

initial_email
Giving the address, because presumably if they Google Maps it and dislike the area for whatever reason, our interaction ends there.

... usually they'd reply with availability (or say both)...

Sunday I'm available in the morning.

... then I'd look at Google Calendar and tell them a time.

From Friday morning when I drafted this post.
From Friday morning when I drafted.

Whether you're listing a product (where you have a singular meeting time) or real estate (where you could have 8 hours of a day when you're showing), try to control the scheduling interaction.

Don't ask "Okay how about Sunday at 12:30?", say "Let's do Sunday at 12:30. See you then."

That's finality, that's you taking control.

Most people will come back with "Alright see you then" or "Great", it's confirmed and you're good.

If they don't respond at all in confirmation, they're likely not showing up.

Communicating high value (phone)

I don't use the phone much for Craigslist.

I already get a lot of random calls trying to place me into Rails jobs or graduate programs. I can do without more.

In the listing, specify "text or email" as preferred communication. It makes keeping track of everyone easier.

preferred_communication

Plus cutting down on actual phone calls saves time. But what happens if someone still does it?

I screen to voicemail. If they sound like a good lead, I'll still follow up.

Heavy accent I can't understand? Delete.

Work part-time at Burger King and probably can't afford the rent? Delete.

Come across like a serial killer? Delete.

A final point - every person I scheduled over the phone (3 out of 31) was a no-show.

Handling "Craigslist friends"

Sometimes, with really high volume stuff like apartment listings in New York, you'll still get a weirdo who will text you like you're his friend.

This one guy kept texting me days before the appointment we scheduled, asking me all sorts of dumb questions, is it okay to bring his mom along, where am I moving to, etc.

Being totally abrasive and ignoring them could jeopardize your appointment.

Give one word answers, and if they give you an out (i.e. a response that doesn't require an answer) don't respond.

Your time is more valuable than being super friendly with a lonely Craigslist stranger.

(Image credit - FJ)
(Image credit - Funny Junk)

Handling creeps

About as often, you'll just get a plain creepy person.

This one guy texted me around 9:30 one night:

hello randy

He tried calling at 11, then again at 2.

It should go without saying - ignore these. Don't be so desperate for leads that you follow up.

Closing

I used my apartment as an example here but have had similar experiences listing other things.

There was a time when it was really easy to deal on Craigslist. That time has passed - whether because attention spans and reliability are decreasing as a whole or because there are just more people using the site, I don't know.

Poor results are likely if you just wing it.

These tips might help you in selling a product or housing. If you're on there searching for a transexual lover, this post may not have been helpful.

Cracking the Data Science Interview

While I'll probably never directly work as a data scientist, skills of that nature are becoming more prevalent throughout the tech scene. There was definitely a presence at Uncubed.

Nir Kaldero gave a solid list of interview questions on Quora, kind of an answer to "how can I crack the data science interview?"

As a study tool, here are answers and additional resources. Credit to Nir for the questions obviously. Reference links for everything are at the end of attributed statements.

Data Science Disciplines
(Image credit - Wikimedia)

Entry- or Mid-Level Position Interview Questions

What is P value?

The P value (or calculated probability) is the estimated probability of rejecting the null hypothesis H0 when that hypothesis is true. Usually the null hypothesis is one of "no difference" - like "no difference in blood pressure between groups A and B." - StatsDirect

Wikipedia entry on P value.

What is regularization? Which problem does regularization try to solve?

Regularization is tuning or selecting the preferred level of model complexity so your models are better at predicting (generalizing). If you don't do this your models may be too complex and overfit or too simple and underfit, either way giving poor predictions.

To regularize you need 2 things:

  1. A way of testing how good your models are at prediction, for example using cross-validation or a set of validation data (you can't use the fitting error for this).
  2. A tuning parameter which lets you change the complexity or smoothness of the model, or a selection of models of differing complexity/smoothness.

Basically you adjust the complexity parameter (or change the model) and find the value which gives the best model predictions. - Toby Kelsey

Wikipedia entry on regularization.

Quora page on regularization.

How can you fit a non-linear relationship between X and Y into a linear model?

As an example - X could be age, Y could be income.

What is the probability of getting a sum of 2 from 2 equally weighted dice?

To arrive at a sum of 2...

What about a sum of 4?

For a sum of 7...

What is gradient descent method?

"Gradient descent is a first-order optimization algorithm. To find a local minimum of a function using gradient descent, one takes steps proportional to the negative of the gradient (or of the approximate gradient) of the function at the current point." - Wikipedia

Read Eren Golge's answer

Wikipedia entry on gradient descent. Quora page on gradient descent.

Which clustering methods are you familiar with?

Cluster Analysis: Basic Concepts & Algorithms (pdf) - University of Minnesota

Statistical Clustering (pdf slides) - Texas A&M University

Wikipedia entry on cluster analysis.

Which libraries for analytics / data science are you familiar with in Python?

Probably the most prevalent: "pandas" Python data analysis library

9 Python Analytics Libraries - Data Science Central

Python for Data Analysis via O'Reilly

What is an eigenvalue?

To really understand eigenvalues, you need a grasp on eigenvectors.

"In linear algebra, an eigenvector or characteristic vector of a square matrix is a vector that does not change its direction under the associated linear transformation." - Wikipedia

eigenvector-grid
Image credit - Wikipedia
“The eigenvalue… tells whether the special vector x is stretched or shrunk or reversed or left unchanged…" - MIT

Eigenvalues & Eignvectors (pdf) from MIT

Khan Academy: Introduction to eigenvalues & eigenvectors

Wikipedia entry on eignvalues and eigenvectors.

A question on Baye's Law

"Bayes' Law relates current probability to prior probability." - Wikipedia

(Image credit - Air & Space Power Journal)
Image credit - Air & Space Power Journal

A question of time series

If you have a data set with 100 observations for each Xi, and 3 lag-effect variables of X1, how many predictions will you have if you run any simple linear regression?


Advanced-Level Position Interview Questions

What is the difference in the outcome (coefficients) between the L1 and L2 norms?

Read Quote of YunFang Juan's answer to What is the difference between L1 and L2 regularization? on Quora

Wikipedia entry on regularization.

Quora page on regularization.

What is Box-Cox transformation?

"… Many real data sets are in fact not approximately normal. However, an appropriate transformation of a data set can often yield a data set that does follow approximately a normal distribution. … The Box-Cox transformation is a particularly useful family of transformations." - Engineering Statistics Handbook
box-cox
Image credit - Online Stat Book

Engineering Statistics Handbook page on Box-Cox transformation.

Online Stat Book page on Box-Cox transformation.

Wikipedia entry on Box-Cox distribution.

What is multicollinearity?

Multicollinearity (also collinearity) is a statistical phenomenon in which two or more predictor variables in a multiple regression model are highly correlated, meaning that one can be linearly predicted from the others with a non-trivial degree of accuracy. - Wikipedia

It can cause strange results when attempting to study how well individual independent variables contribute to an understanding of the dependent variable. Investopedia

Examples of contexts in which multicollinearity arises - survival analysis, interest rates for different terms to maturity. Wikipedia

The simplest way to resolve multicollinearity problems is to reduce the number of collinear variables until there is only one remaining out of the set. - Investopedia

Quora page on multicollinearity.

Will gradient descent methods always converge on the same point?

Wikipedia entry on gradient descent.

Quora page on gradient descent.

Is it necessary that gradient descent methods will always find the global minima?

guide through the intuition and explain some of the math

Quora page on gradient descent.

Questions about natural language processing (NLP)

Wikipedia entry on natural language processing.

Quora page on natural language processing.

A question in combinatorics

Combinatorics is a branch of mathematics concerning the study of finite or countable discrete structures. Aspects of combinatorics include:

  • Counting the structures of a given kind and size, deciding when certain criteria can be met, and constructing and analyzing objects meeting the criteria.
  • Finding "largest", "smallest", or "optimal" objects.
  • Studying combinatorial structures arising in an algebraic context, or applying algebraic techniques to combinatorial problems. - Wikipedia

Quora page on combinatorics.

(Image credit - University of Miami)
(Image credit - University of Miami)

Bonus: Top 3 Algorithms for Data Scientists

Credit to William Chen, these are expanded upon from his Quora answer here.

Logistic Regression / Linear Regression

"For binary classification and regression."

Quora page on logistic regression.

Quora page on linear regression.

Random Forests

"For classification."

Quora page on random forests.

TF-IDF

"For textual analysis."

Quora page on TF-IDF.


If you have no idea what Quora is, check it out and follow me. It's like a more intelligent Yahoo Answers.

How to Do Shift Work

From a period beginning last May I did a bunch of shift work, dealing cards. Specifically graveyard which is 2 AM - 10 AM. There were some positives. The major negative, however, is that the human body wasn't meant to keep hours like that. Primitive man was asleep in his cave at 2 AM. It was rough on me to begin with, and in an effort to save others the learning curve here are some tips. These kind of apply to any weird shift work.
(Image credit - Pokerpedia)
(Image credit - Pokerpedia)

Sleep mask & earplugs

With this kind of work, you'll be sleeping during sun hours. There's no way around it. It's also quite likely there will be outside noise during these hours. Other people or pets in your house, neighbors mowing the lawn, etc. A simple solution to both is this sleep mask and ear plug set. You'll have to get over the goofiness.
You could even sleep in the car at work, like this industrious woman. (Image credit - Amazon)
You could even sleep in the car at work, like this industrious woman. (Image credit - Amazon)
This didn't apply to me, but heavy sleepers may want to get a really loud alarm or one that shakes your pillow. Just in case the ear plugs nullify your alarm clock.

Modafinil

If you're doing weird hours, your doctor will write you a script for modafinil. Right on the Provigil site it mentions shift work disorder.
(Image credit - Divided States)
(Image credit - Divided States)
The first night I took the stuff, I did it at the 200 mg prescribed dosage. And I tweaked out. While my dealing skills were at 110%, everything was almost painfully bright and colorful. This is an issue in a casino. If I looked at a card too long, the focus hurt my eyes. I also became extremely anxious about talking to anyone. The next night I used a pill cutter to take 100 mg. That was the sweet spot for me. I don't recommend starting out at 200 mg. Another thing is that the effectiveness goes down with consecutive days of use.
  • Day 1: 100% effect
  • Day 2: 60% effect
  • Days 3 - 5: 20% maybe
So I would only take it 2/5 work days. Another big note - even at 100 mg, I found it really difficult to sleep in the 12 hour window after taking the stuff. Perhaps time usage accordingly. Overall I do recommend modafinil for shift workers. In the beginning, just be cautious with it and try to gauge the effects. Everyone's body is different.

Sleeping

On the actual topic of sleeping, it depends on when you are most active. My daily schedule looked like this for a while:
  • 12:00 AM - wake up, take modafinil
  • 2:00 AM to 10:00 AM - work
  • 12:00 PM to 6:00 PM - sleep
  • 10:00 PM to 12:00 AM - sleep
(Image credit - Pixshark)
(Image credit - Pixshark)
The big thing is that you try to be consistent about your active/dormant hours, even on your days off. Switching things up could throw off your Circadian rhythm.

Glasses

I found sunglasses and "computer glasses" helped make it easier for me to sleep. This could be placebo, or the eyewear may have helped block blue light. Supposedly that can hurt your sleepiness. As soon as I got out of work, sunglasses on. I would leave them on indoors when I got home, watching TV and stuff. Blue light paranoia.
(Image source - Imgur)
(Image source - Imgur)
More recently I got computer glasses (these cheap ones instead of $80 Gunnars) because I spend much of the day staring at a screen. Those could be more suitable for watching TV right before you go to bed.

Closing

Not sure if I could stand pulling another grave job, but swing shift (starting between 6 PM and 10 PM) might be okay. Hopefully these tips help shift work suck less for somebody. Good luck.
Just getting off work. (Image credit - Bitovi)
Just getting off work. (Image credit - Bitovi)

Comfort Manipulation in Online Gaming

I've never been to a casino where the slots or tables are sitting on a hard surface. You probably haven't either. The design of physical casinos is an art - at least more regarded as such than i-gaming development. Architects use the physical space to keep guests from getting lost, presidents of gaming carefully map slot layout to pull people where desired, and whoever does the floors manipulates comfort levels.
Little Creek Casino in Shelton, WA. (Image credit - Flickr)
Little Creek Casino in Shelton, WA. (Image credit - Flickr)

Comfort manipulation in physical gaming spaces

Let's focus on the floors. A brief lesson. Around the machines and the tables, there's plush commercial carpeting. It's easy on your feet and you feel comfortable. When you leave the gaming area, suddenly you're walking on marble tile or some other hard material. Your feet feel worse. You become uncomfortable. Subliminally, you associate being on the gaming floor with comfort.

Can this be brought online?

I don't know how much of an effect this whole charade has on revenue, and doubt anyone truly does. It'd be impossible to research in any meaningful way. With that said, I theorize it's possible to achieve the same effect with an online gaming experience. Changing the design of an online casino costs much less than changing a physical one.

Comfort polarity

So in a physical casino you have polar opposites of comfort. They're your tools of psychological manipulation and they're really simple.
  • Well-padded carpets = comfortable, as you're playing or at a restaurant.
  • Stiff marble = uncomfortable, as you're walking around or leaving.
Casino Comfort Polarity What can be the comfort poles with online gaming? Well, when players are actually in an active game, that's favorable and they're generating revenue. When they're looking through your game library or requesting a payout, maybe that's when marble floors are appropriate. With no way to psychologically affect guests through their feet, you could utilize the eyes. Mix the highly visual experience of i-gaming with color psychology. If you believe in that, there are a number of appropriate color associations. A pair that could work -
  • Green produces calm, a feeling of refreshment, is associated with wealth, and it's the easiest color on the eye.
  • Red causes people to react with speed and force, plus calls for action to be taken. It can be harsh on the eye.

Closing

It's impossible to measure how much of an effect playing with guest comfort levels has on physical casino revenue. Online nearly everything is possible to measure and experiment with. Can the carpeting / marble effect be reproduced in i-gaming? Theoretically, if color psychology is to be believed, playing with website colors could do it. Green is already on many virtual tables. Red in the game selection screens is just a CSS change away. Ultimately, this may all be a bunch of baloney. Or it may just not be this simple. Split-testing an array of different colors or "materials" in i-gaming design could ultimately lead to a revenue boost.
(Image credit - Gizmine)
(Image credit - Gizmine)

What Does Computer Science Have to Do with Business?

I'm in a 4000-level accounting class and we were doing group work. At some point my partner and I got on the topic of me not being an accounting major.

Him: "So you're like, a finance major?" (The class is 'Financial Statements Analysis')

Me: "Computer science with business admin."

Him: "Oh wow - what are you doing in this class?!"

Normally options and dual majors are between complementary fields. Accounting and management. Foreign language and international studies. Economics and math. Computer science and business - they're similar too, it's just not as obvious.

(Image credit - Village Voice, edited)
(Image credit - Village Voice, edited)

Simplicity vs. functionality

One of the tenets of good programming is to do the simplest thing that could possibly work.A software engineer should be able to more or less understand your codebase, walking in off the street. Writing simple code not only saves time, but is generally less buggy and easier for everyone to understand. Simplicity is big in business too. Supposedly at McDonald's there are written procedures for everything down to cleaning the toilets.Employees are getting paid by the hour. Turnover's probably high - things must be easy to learn. Dirty toilets ruin the "dining experience." Whoever wrote the toilet cleaning instructions had to consider what would get the toilet satisfactorily clean while being time efficient. The KISS principle permeates good computer science and good business. Complexity is to be minimized.
(Image credit - Hasbro)
(Image credit - Hasbro)

Planning before doing

More often than not, success in both fields requires some level of planning. In computer science, writing pseudo-code or drawing a flow diagram can clarify the logic behind a program before you start writing. You design a network before you build a network. "Pre-production" work helps get things right the first time. For business matters, planning helps put everyone on the same page. This can be drafting that toilet cleaning manual or doing a business plan sketch. Frequently you won't be working alone, maybe not even with people you like. Nobody is a mind reader. Solid communication makes for quality management and productive code collaboration. There's no plainer way to communicate than something written down.
Cave Drawing
(Image credit - Fanning Art)

Quality and efficiency

For both computer science and business, the "big picture" is to reach a point where quality and efficiency are as high as they can be. Think back to high school math.
(Image credit - RC Groups)
(Image credit - RC Groups)
That's where you're trying to go. And how you get there isn't even so different for each. Business - adhering to economic order quantities, cutting non-value added processes, expanding or contracting the workforce as needed ... Computer science - DRY programming (economic amount of code), limiting abstraction (non-value added processes), implementing or dropping features as deemed appropriate ...

Speed vs. progress

What level of output can we push the business to without sacrificing the quality of labor, and therefore overall progress? You can only spread a workforce so thin before people start leaving. In the casino business, if you have a shortage of dealers, you can start forcing part-timers to 40 hour weeks and full-timers to 48 hour weeks. But, especially with weird hours like graveyard shift, maybe then your dealers become really sleep-deprived. They see their families less so morale goes down. Now you have way more dealer errors than ever before, either costing the house in money or guest satisfaction. With tech startups, it seems like 80 hour workweeks and sleeping under your desk are fetishized. How does this affect the quality of code? Number of bugs? What people are saying about you on Glassdoor? As an individual programmer, how fast can you write code before quality slips? How much planning can you cut out before your codebase confuses even you? This may be more a business thing than computer science thing. Still, to some extent, finding a balance between speed and progress applies to both.
(Image credit - Car Insurance Comparison)
(Image credit - Car Insurance Comparison)

Closing

The studies of computer science and business aren't terribly different. There's a lot of different terminology dressing up similar principles. Will all good computer scientists make strong businesspeople, or vice versa? That's open to interpretation.

How to Supplement the St. John’s CS Program

At the time of this writing, there are some things missing from the St. John's University computer science curriculum. I don't want to be at a disadvantage to other CS grads, should I have to join the workforce. You probably wouldn't either. Luckily computer science is a field where demonstrable skill (largely) trumps formal schooling. We can fill in the gaps.
(Image credit - BabyNerds)
(Image credit - BabyNerds)

What's missing?

Take a look at the requirements for CS majors at St. John's, then compare those to Syracuse or most other programs. You'll notice a lack of:
  • Discrete math
  • Parallel computing
  • Computer architecture (present but optional)
  • Algorithms (present but optional)

How to supplement

Most anything from my studies can be found online - and the same is true for absences. Here are some suggestions. You can otherwise use an MOOC aggregator for these topics.

Discrete math

Discrete Math A, Discrete Math B - these are from an Italian university but available in English se non puoi parlare italiano. Self-paced, start anytime. Bonus: Mathematics for Computer Science - SJU doesn't have its most competent faculty teaching CS math topics, let's put it that way.

Parallel computing

Heterogeneous Parallel Programming - from University of Illinois at Urbana-Champaign. Parallel Programming - possibly a more advanced offering, from MIT.

Computer architecture

Computer Architecture - a Princeton course. I recommend against taking this at SJU.

Algorithms

Algorithms: Design & Analysis Part 1, Part 2 - both from Stanford via Coursera.
(Image credit - BlenderGuru)
(Image credit - BlenderGuru)

Closing

There are holes in the St. John's CS program that could leave graduates at a disadvantage. Hopefully in the future 9 mandatory credits of theology might be swapped for algorithms or parallel computing coursework. Until then - happy learning. Will make an edit if I post notes from these.

Is Uncubed Edge Any Good?

In an earlier post I mentioned that I'd signed up for Uncubed Edge, which at that time I grouped into the same realm as Treehouse and Code School. However, after going through the content, it's really not in that same group. Uncubed Edge Screenshot with Contently

Treehouse vs. Code School vs. Uncubed Edge

They're all online means of learning tech topics. You could go as far as to call them "schools." Treehouse shows you how to do specific things with web development. Code School shows you how to do specific things with, more particularly, programming. Uncubed Edge shows you how certain startups achieved something, with the intention of helping you achieve that with your startup. Here are examples from each just to illustrate - Treehouse: Build a Fully Functioning Web Application with AngularJS, Build a Choose-Your-Own-Adventure Story App on Android, Use Python on the Web with Flask ... Code School: JavaScript Best Practices, CoffeeScript, Ruby Bits, Testing with RSpec ... Uncubed Edge: How Contently Built a Large Audience, How Gilt.com Became Responsive and Adaptive, How Gilt Saves Hundreds of Hours with MetaSQL ...

Is Uncubed Edge any good? Worth the $19/month?

While I've enjoyed the content so far, I'm hesitant to say it's worth $19/month for new users. If there's one 30-minute lecture released each week, that's just 2 hours of new content per month. The worth of that seems closer to the $5/month rate I was grandfathered at. If you asked me if Treehouse is any good and worth the money, I would tell you it's good and worth $25/month. At $50/month they give you a lot of conference content, probably also worth it, though I've only been a silver member. As Uncubed Edge grows, it could get to the point of being worth the new member price.
Image credit - twentydollarbill.info
(Image credit - twentydollarbill.info)
 

What's in each "class"?

Here are my notes from the early courses if you're curious as to what they actually entail. This could help you forge a purchasing decision. Though if you do sign up, I recommend still watching these in their entirety. Here I'm really just skimming. Note that they're also brief - each class/lecture being an average of 30 minutes altogether. Uncubed Edge Dashboard

 Building a Large Audience (with Contently)

Taught by and credit to - Shane Snow, Joe Lazauskas 3 main strategies to grow their publication / audience:
  1. Data-driven content creation
  2. Original research
  3. A/B testing (split testing)
Data-driven content creation
  • Google Analytics - wasn't possible to see whether the user was scrolling, highlighting, whether they had  YouTube open in another tab...
  • Get a user to spend at least 3 engaged minutes with your content, there's an over 50% likelihood of them coming back in the next week.
  • Built their own analytics product (Contently Insights) which essentially measures how engaged users are with the content.
  • For example, there's a running aggregate timer for each user. Time each individual user spends on each story - what they care about.
  • You can write things that get a lot of people but don't hold their attention and build a relationship. (Reach vs. building an audience)
Contently Insights Screenshot
(from Contently Insights)
  • Insights proved better than Google Analytics when it came to measuring growth, audience building, future success pieces.
  • Sometimes an in-house solution for metrics can be best.
  • Getting more data-focused about content on the publication helped build an audience quickly.
Original research
  • They were writing interesting things, but not introducing "really new" content to the Internet.
  • With original research, you're producing content people will quote and recite.
  • By introducing the research Contently also became applicable to journalists. Then journalists are pointing to you.
  • "There's going to be research." Then captured emails - if you wanted to get the research report, had to submit your email.
  • Siphoned off audience from all the places writing about them.
  • Email is still the most important tool you have as a publisher. It's a relationship you own, and it's the spark that starts the fire of sharing.
  • Here's one of their studies on disparity between "sponsored content" on social media and organic content:
Contently Sponsored Content Deception
(from Contently)
  • That was just introducing new research on the back of old research. Proved extremely popular.
  • If you think a piece will go really big, it may not be worth collecting emails. What you get may not be what you truly want.
  • OKCupid's Trends blog - not targeting online daters, but reporters who'll write about their stuff...
  • Everyone reads that -> OKCupid publicity
  • When people write about you, they inevitably mention what you do.
  • By doing research yourself, you're providing something genuinely new to the Internet. You're making the news.
A/B T testing (Split testing)
  • Contently conducts heat map testing (i.e. Inspectlet).
  • Split tests headlines - ultimately finding a permanent one.
Contently Split Testing Screenshot
Example of split testing headlines
  • You can "feel" like something's a good post or good headline, but without data it's negligible.
  • Businesses like Huffington Post were built on split-testing.
  • As a result, The Onion writes 25 headlines for each story to figure out which one's the best.
  • Upworthy is the fastest growing media company in the world and does the same thing, with about a dozen options.
  • Testing email subject lines is easy with Mail Chimp. Allows you to send out to just 10% of audience, for example, then gauge results.
  • Headlines, email subject (via open rate or click rate), images - split test everything you can.
  • Often A/B test results will surprise you. A gut feeling isn't nearly as powerful as data being tracked progressively.
  • You always want to be using your content resources in the most efficient way possible.
Contently Twitter Ad Split Testing Screenshot Closing When you add everything together - getting more out of your Twitter ads because of split testing, achieving a 2% better open rate - you're building a better retained audience. It's how Contently grew its readership from 20K dedicated readers to 100s of thousands. (Contently Strategist)
Contently Uses SumoMe
Also they apparently use SumoMe.

MetaSQL (with Gilt)

Taught by and credit to - Igor Elbert MetaSQL is "SQL that generates SQL" - comes in handy for writing generic functions, working on virtually any table. Setting up MetaSQL
  • Was using Aqua Data Studio, loaded with U.S. Census information, for demo.
  • MetaSQL can be applied to any SQL server.
  • Instead of writing SQL to get min, max, and average of all columns you can write SQL to write that SQL. (Meta)
  • Here's a MetaSQL snippet and the 10 lines of SQL it outputs:
Igor Elbert MetaSQL Screen 1
  • Writing that by itself, statement by statement, would have been long and tedious.
Iterations to improve
  • In MetaSQL, with every iteration you can make it better and better.
  • Once done you can use it on any table, any number of attributes, anything.
  • Becomes universal procedure other people can reuse without knowing how it's done.
  • If you replace a specific table name with a universal operator, MetaSQL will go ahead and do the work on all tables in the database.
  • You can make your MetaSQL "smarter" much like you would make SQL smarter - "if column is ____, don't treat data as numeric", etc.
Immediate insights
  • The next person using your MetaSQL would just put their table name in, and they have an immediate insight without the legwork.
Letting MetaSQL do the work
  • Expanding on this whole idea - say you try to sell 1000s of products, some didn't sell.
  • Now you want to go through all product to find out why. (Univariate analysis)
  • Manually you would have to go through maybe 100s of attributes - i.e. "what's the average price of products that sold vs. unsold?"
  • Then you might say "oh that didn't differ enough", then compare the next attribute, over and over for days or months.
  • Generate MetaSQL that writes SQL to go through every attribute, compare in matrix one group vs another, and single out where there are differences that are statistically significant.
Igor Elbert MetaSQL Screen 2 Closing
  • This all falls under "lazy" programming principles - don't repeat yourself, save time, work efficiently.
  • With MetaSQL you can write something to do your SQL writing, the time-consuming and tedious.

Transitioning to a Responsive, Adaptive Site (with Gilt)

Taught by and credit to - Greg Mazurek Journey from a legacy site to responsive site. Migrating Desktop to Mobile
  • There was a mobile version of the Gilt site ("m.gilt.com") from when mobile browsing was primarily just Blackberry.
  • That was an MVP, barebones shopping, product pages were static, no Javascript, minimum CSS.
  • Next there was a client app built on BackboneJS. A lot better but mobile was still being considered an afterthought.
  • Slowly, and then very quickly, that client app couldn't keep up with the new features on the core website.
  • The core website, obviously, started with the intention of maximizing user experience on the desktop.
  • So Gilt took a transitive period of time to shift the core website into a universal web experience across devices.
Responsive and adaptive design at Gilt
  • Responsive = changes in the width of the viewport
  • Adaptive = changes in the features available to you
  • Overall you want to maximize user experience regardless of the user's device.
  • When the user lands on your site, you need to maximize experience for that viewport. (Responsive)
  • No one just sits there, changing the width of their viewport back and forth all day.
  • Maybe an iPhone 5 has different touch gestures than an early Samsung Galaxy - must be considered. (Adaptive)
  • As a desktop experience is transitioned to responsive, the code becomes more complex. There's no way around that.
  • Take care to craft maintainable code, something an engineer walking in off the street could work on.
  • When Gilt receive a user agent, they send it into one of 3 "buckets" - minimal, intermediate, or full.
  • Full experience is everything - like desktop. Minimal might be on a low-bandwidth network or older browser - capabilities pared down.
  • For Gilt it's important to know which devices customers are most using, then emphasizing on making a beautiful experience for those.
Adaptive design and target experiences This is Scala (and it looks like he's using Sublime Text): Gilt Target Experience Handlebars
  • Gilt has Handlebars references to the minimal target experiences (from the above image).
  • Through those references you can write DOM features for when the device meets certain levels of target experience.
  • It's important that devices don't take any DOM or payload they don't need. That's why this is done the server-side.
  • On low-bandwidth networks, Gilt frequently excludes all tracking. Tracking code can be heavy and degrade from user experience.
  • Obviously that doesn't help the marketing department but it does help the members.
Javascript
  • Target experience gets appended to the window object.
  • This allows for client-side visual manipulation, while the Handlebars was dealing server-side.
  • In the Javascript you can have different functions depending on which experience is coming through.
Gilt Javascript  
Pseudocode
Pseudocode
Applying to the carousel
  • On a desktop Gilt product page you have a lot more capabilities. You can zoom and quickly click through a product image carousel.
  • On an iPhone, you can swipe through images via touch. Giving a similar experience to desktop but things had to be coded differently.
  • This is an example of target experience use over "hope one size fits all" approach.
Responsive design and LOSA
  • Media queries are great building blocks, but only great if they're used consistently.
  • LOSA = lots of small applications
  • Instead of focusing on monoliths, Gilt decided to focus on services.
  • LOSA at Gilt means most of the pages you see are largely driven by individual apps.
  • The Product Details page can be deployed independent from the Product Listing page, for instance.
  • This promotes autonomy in terms of teams and features.
  • This minimizes the chance of "side effects" when releasing code.
CSS and RespondJS
  • Gilt has tens of thousands of lines of CSS. How do you organize that?
  • Originally media queries were written underneath the code they were superseding. Fine if you have a small amount of code.
Gilt CSS JSBin
JS Bin example
  • But this becomes confusing once the code grows, things are really amped up, there are a lot of breakpoints... unwieldy.
  • Then Gilt came across RespondJS (polyfill) - where to put media queries in CSS was no longer a dilemma, especially with old IE support.
  • If someone came in to make a change on the old jumbled CSS, maybe they wouldn't think about all the references of everything going on.
  • The idea is to minimize opportunities for human error.
  • In-line media queries > separate blocks
Pictures and images
  • Images are heavy, especially for mobile, and can be problematic if not handled well.
  • Gilt uses large images which creates a dilemma - they want beauty but at a small cost. (Resource cost)
  • Their handling has images being passed down as they're needed, and at particular break points for different sizes.
Gilt Javascript Image Handling
  • They use PictureFill. You don't want to send a huge image to a small device - that's an unnecessarily big payload to scale down.
Testing and QA
  • User agent emulation in Chrome and other browsers is really useful, obviously something that couldn't have been done 10 years ago.
  • Have to be aware, though, that if you're emulating a user agent in Chrome you're still on the Chrome browser.
  • Gilt uses Genymotion and other tools to simulate different browsers / OS.
  • Want to make sure changes you make in one area won't adversely affect others.
  • Throttle test different connection speeds with something like Charles - what if someone's on the highway in a remote area?
Closing
  • Gilt transition started technical, then focused on QA and bringing design into the picture.

You can sign up for Uncubed Edge here.