Cloud Gaming Streaming Services

Cloud Gaming?

In the past week, both Google and Microsoft have announced there cloud gaming projects. Google announced Project Stream, a game streaming service to play games via Chrome. Microsoft announced Project xCloud,  a cloud platform that will allow gamers to play from anywhere they choose. Which will let gamers use their mobile phones to play. 

Project Stream

Project Stream became available to test on October 5th 2018, with the first game on trial being Assassin’s Creed Odyssey. In order to sign up you must be residing in the US and have a 25 Mbps connection, along with either Windows, Chrome OS, macOS, or Linux for the operating system. 

Common issues Reported from public testing:

– Not getting 60fps
– Minor lag/latency
– Difficult to use touch interface controls, using a controller gives a higher quality experience.
– Unable to adjust graphical settings


project stream has surpassed a lot of expectations. The real question will be how it holds up to a fps multiplayer game.

Project xCloud

Microsoft is already testing and is expecting to begin public trials in 2019. Currently, the test experience is running at 10 Mbps and using a 4G network. As the introduction of 5G networks continues across the US, they expect will help provide a better quality experience. Project xCloud is expected to work across most phones and tablets. 

Exploring HR Employee Attrition and Performance with R

Based on IBM’s fictional data set created by their data scientists.

Employee Attrition is when an employee leaves a company due to normal means, (loss of customers, retirement, and resignation), and there is not someone to fill the vacancy. Can a company identify employee’s that are likely to leave a company?
A company with a high employee attrition rate is a good sign of underlying problems and can affect a company in a very negative way. One such way is the cost related to finding and training a replacement, as well as the possible strain it can put on other workers that in the meantime have to cover.

This dataset was produced by IBM and has just under 1500 observations of 31 different variables including attrition. 4 of the variables (EmployeeNumber, Over18, EmployeeCount, StandardHours) have the same value for all observations. Due to this, we can drop these since they won’t be helpful for our model. Next, the column “ï..Age” was renamed to “Age” to make calling this variable simpler. Finally, for build and testing models, the dataset was split into a training and test set at 70/30.

Initial Analysis:
Looking at the overall employee attrition rate for the entire dataset we can see it’s ~19%. Typically, a goal for a company is to keep this rate to ~10% and this dataset shows almost double that rate.

Here we show the influence of all factors on the employee attrition rate which shows the influence levels are similar. However, we can take the top factors and explore those in depth.

Top Factor Analysis Findings:

Factor Variable Importance
Total Working Years 0.6564557
Years At Company 0.6525268
Overtime 0.6505954
Years In Current Role 0.6480052
Monthly Income 0.6456590
Job Level 0.6414233

Total Working Years:

Looking at the total amount of years an employee has been in the workforce (at any job) there are two significant points to be found. First, in the initial 3 years of working, the data shows the attrition rate of 50%. This is expected as people tend to start at an entry-level job and get their first job experience before moving on. The rate drops off in the following amount of years until reaching 37 – 40 years in the job force. Here we have just under ~75% attrition rate which can be best explained as employees retiring since 37 years from 18 is 55 years old, the age people usually retire at.

Years at the company: 
The findings related to the number of years at the company and employee attrition followed the same trend as total working years did but with the rate lower for each. The reasoning behind this is most likely the same as total working years, with early on moving around. Then, staying put and finally retiring.

Employees that work overtime have over double the attrition rate (~25%), then those who don’t (~10). A possible reason behind this could be that some employees can get “burned out” working overtime. Possibly want to spend time outside of work and end up looking for a new job.

Monthly Income:
As expected employees with a higher monthly income were less likely to leave a company. Specifically, in the human resource and research and development departments. The sales department was interesting in that monthly income wasn’t as big a factor in attrition.

Model Building:

Gradient Boosting Model (GBM):
Using a GBM model with default parameters, the best training model came at 88%, at 150 trees. Using this model, we can create a prediction using the test data. The accuracy of this prediction was 87% which being very close to the training accuracy shows this is correct.

Interaction.depth n.Trees Accuracy Kappa
1 150 .878 .397

Classification Trees:
The classification tree built with default parameters showed a slightly lower overall accuracy. The training accuracy came to 82% and the prediction was 83%.

dt_model<- train(Attrition ~ ., data = attrition_train, method = "rpart")
cp Accuracy Kappa
0.039 .82 .24

When building a classification tree with only the top 5 factors, the accuracy fell in between the other two models at, 84% training and prediction.

dt_model1<- train(Attrition ~ TotalWorkingYears + YearsAtCompany + OverTime + YearsInCurrentRole + MonthlyIncome + JobLevel, data = attrition_train, method = "rpart")

cp Accuracy Kappa
0.0301 .84 .19


As we can see from this data analysis, the biggest factor to employee attrition is the length of time in the workforce either at the same company or not. However, I would recommend looking deeper into employees that work overtime and getting their reasons for leaving. Possibly, have meetings with overtime workers and find out if they need help. For example, if they are working at their capacity and still having to work overtime then might be time and possibly even cheaper to hire extra help.
I would also recommend for the company to continue to collect this same type of data at an annual basis and run the models to find those employees that are more likely to leave. Once you have the list of employees, set up reviews and see if their’s a way to help them out or even you may catch, worker issues early on. Lastly, a further review into the sales department is warranted with the high attrition rate.

Dark Roasted Conspiracy

As the daylight hours grow shorter and darkness becomes the prevailing theme, the temperatures drop and the winds blow cold. It feels like the night never ends. The leaves are falling and swirling down the road. Without the sun’s energy and warmth, a good fire and a hot cup of dark roast coffee help take away the ever-present Autumn chill. Coffee is an ever-persistent habit for me. I like good coffee, and it keeps me going like high octane fuel.

No cream, no sugar, not for me.
I like coffee, just black coffee.

The darker the roast, the better I like it. It’s a basic thing. You can make it more complicated than it has to be, or you can learn to appreciate it’s simplicity. I don’t care what other people put in their coffee, everyone is different. I only worry about my own. Just don’t mess with mine. Sometimes all I need to keep me going is a hot cup of coffee. I have a thermos, it is a luxury I appreciate. I buy coffee I like and rarely buy coffee on the road, although I will order a cup if I stop somewhere for a bite to eat. I usually don’t stop anywhere long enough to eat. If I’m working I usually just go, do the job, and head home. I’ll eat when the work is done.
If I’m working at home, I have my coffee close at hand.

I use the same approach in what tools I use to get a job done, and this includes my choice of operating systems, and applications I use. Unlike choosing your preferred coffee blend, choosing a simple, useful, but stable operating system is not quite so easy.

My perfect setup

 A hot cup of coffee, and a laptop running one operating system with only the applications loaded  needed to get some quality work done.

How hard could that be?

Well, lately it hasn’t been as straightforward as I would like. Right off the bat, Windows 7 or 10 – both favored by large organizations, but remind me of instant coffee with too much nondairy cream and way too much artificial sweetener.
Next, up we have my rarely used MacBook Pro – great for creative inspiration, but not something I want to beat the hell out of on the road. So yes, again I lean on my Linux workhorse laptop as my go-to machine. When I’m working on a project I try to reduce any distractions. I’ll have the radio or a podcast on low in the background. I try to avoid the mainstream news/noise, it’s all goofy. I’ll stick to Linux focused news, usually not too wacky or controversial……Suddenly that illusion is dismissed.

What the heck is going on with all the “Code of Conduct” for developers?

  • Is this going to impact the future of Kernel development?
  • Is Linux’s future now sketchier than ever?
  • With Linus on “Holiday” could we see Microsoft becoming more of an “influence” in the fate of Linux?

Probably not, but there’s a change in the air. I’m not sure what it is, but it has the hint of stale coffee that means we should probably brew a fresh pot.
Now let’s turn off the background noise and get back to some less controversial productive topic.

Where was I? Oh yes, good coffee and the best work laptop setup.
I still have my Chromebook that seems to be working fine…..and fast. It’s great for much of my “non-work” work, but not so great for “work” type work. That probably doesn’t make sense to anyone other than me, but unfortunately, not everyone uses a Chromebook yet, although there’s always hope.
I wouldn’t want to limit anyone’s choices. Let each choose what works best for them. I see a lot of people still struggling with Microsoft’s Windows to do basic things a Chromebook would do with less complexity, and a would usually cost less than the new laptops they are getting frustrated with.
That’s a whole other thing.

Suddenly I just had a thought: should I give up on
Linux? Wait a minute, I thought I would forget about that as soon as I turned the radio/podcast off in the background.
Why is this bugging me now? 

Linux isn’t supposed to be political or controversial

….at least I never think of it that way. It’s just a tool to use for a multitude of tasks. For the moment I really should care less about the “CoC” controversy and more about getting some work done. The last big fuss was about Ubuntu turning into another Microsoft. How soon we forget.

Actually, I have recently started using Debian based Distros again in a feeble attempt to get away from the Ubuntu and Arch-based systems. This was more of a precautionary objective to see if I could still be productive without an Ubuntu or Arch based Distro on an underpowered laptop.
I was using Q4os on an old netbook. Had a great start, but the Trinity desktop soon was replaced by KDE. I do like the KDE approach to desktop design.

I have had a great experience with KDE Neon in the past and may return to it if I can not find a suitable replacement, however, the Q4os KDE desktop was working very nicely for me until it froze while I was trying to change the taskbar settings. Most likely attributed to my older hardware.
That was enough for me to decide to go back to the most reliable Distro I have always been able to depend on (not perfect, but it usually gets the job done)…..Mint. (Boring but stable)

Oh, what a surprise

So I guess I can’t really get away from Ubuntu completely. Apparently, the combination of Debian and Ubuntu heritage works best for my current hardware.

At least I haven’t had to regress/default back to running Windows 10. I still have choices available for what Operating system I use.

Time for another cup of coffee.

If the future of Linux development is in question? Will developers abandon ship? Who knows? (At least it hasn’t yet directly affected my pursuit of the perfect work laptop setup.)

If you prefer to use a Mac, that’s great, if you like to use Windows, that’s great too. If you use Linux, perfect! I work with them all, and there are various things about each system I like, and some I’m not too pleased with. If you drink coffee …..cheers! I don’t drink coffee to make a political statement, nor does my choice of an Operating system have any significance on my political views. Why should it? I’m even aware that not everyone drinks coffee. I hear some people even drink water straight out of the tap. Now that’s a little extreme for sure.

Introduction to Data Analysis with R

Using Basic Data Analysis functions on the mtcars dataset

Let’s Start

# Copying mtcars data frame to our new data frame myCars
myCars <- mtcars

Which car has the highest horsepower (hp) ? 

#find and display the car with the highest horsepower index <- which.max(myCars$hp)
# Display the car name along with the rest of the row myCars[index,]
##                mpg cyl disp hp drat  wt  qsec vs am  gear carb ## Maserati Bora  15   8  301 335 3.54 3.57 14.6  0  1    5    8

Maserati Bora has the highest horsepower at 335

Exploring miles per gallon (mpg) of the cars

# find and display the car with the highest mpg
##                 mpg cyl disp hp drat    wt qsec vs am gear carb ## Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.9  1  1    4    1
# Creating a sorted dataframe, based on mpg
highMPGcars <- myCars[ order(-myCars$mpg),]
mpg cyl  disp  hp drat    wt  qsec vs am gear carb ## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1 ## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2 ## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1 ## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2

Which car has the “best” combination of mpg and hp?

# Best car combination of mpg and hp, where mpg and hp must be given equal # weight
bestCombo<- myCars$hp / myCars$mpg
##                mpg cyl disp  hp drat   wt qsec vs am gear carb ## Maserati Bora  15   8  301 335 3.54 3.57 14.6  0  1    5    8

The Maserati Bora hp to mpg is ~ 22hp per gallon 

Manipulating Data Frames in R

Learn To Manipulate Data Frames Using The “mtcars” Dataset

Task 1: Create a new column to find Displacement per Cylinder 

Create a new variable (DisplacementPerCylinder), to calculate the total displacement per cylinder in cubic inches for each vehicle from the mtcars dataset.

# "str" allows you to display the internal structure of an R object
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
# As a backup we can copy the original data frame into a new one to work with
# That way if there is any issues we can go back

my_mtcars <- mtcars
# Calculate Displacement Per Cylinder by dividing the values (disp) and (cyl)

my_mtcars$DisplacementPerCylinder <- my_mtcars$disp / my_mtcars$cyl

# Report a summary of the variable
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   17.77   26.92   34.48   35.03   43.19   59.00

Task 2: Create your own data frame

Gather data from family & friends on the number of pets they have, the birth order they are in their family and the number of siblings. 

# Family/Friends ID
friendID  <- c(1, 2, 3, 4, 5)

# Number of pets they have
Pets <- c(4, 4, 2, 3, 1)

# The birth order they are in their family
Order <- c(1, 2, 2, 1, 1)

# Number of Siblings 
Siblings <- c(2, 2, 1, 2, 0)

# Binding the vectors into a data frame called myFriends
myFriends <- data.frame(friendID, + Pets, + Order, + Siblings)

# Command to report the structure of the data frame myFriends

## 'data.frame':    5 obs. of  4 variables:
##  $ friendID  : num  1 2 3 4 5
##  $ X.Pets    : num  4 4 2 3 1
##  $ X.Order   : num  1 2 2 1 1
##  $ X.Siblings: num  2 2 1 2 0
# Rename the columns to get rid of the "x." in front of the names
colnames(myFriends) <- c("FriendID", "Pets", "Order", "Siblings")
## 'data.frame':    5 obs. of  4 variables:
##  $ FriendID: num  1 2 3 4 5
##  $ Pets    : num  4 4 2 3 1
##  $ Order   : num  1 2 2 1 1
##  $ Siblings: num  2 2 1 2 0
# Listing the values of the vector friendID from the data frame myFriends
## [1] 1 2 3 4 5
# Listing the values of the vector Pets from the data frame myFriends
## [1] 4 4 2 3 1
# Listing the values of the vector Order from the data frame myFriends
## [1] 1 2 2 1 1
# Listing the values of the vector Siblings from the dataframe myFriends
# [1] 2 2 1 2 0
# Report a summary of the dataframe
##     FriendID      Pets         Order        Siblings  
##  Min.   :1   Min.   :1.0   Min.   :1.0   Min.   :0.0  
##  1st Qu.:2   1st Qu.:2.0   1st Qu.:1.0   1st Qu.:1.0  
##  Median :3   Median :3.0   Median :1.0   Median :2.0  
##  Mean   :3   Mean   :2.8   Mean   :1.4   Mean   :1.4  
##  3rd Qu.:4   3rd Qu.:4.0   3rd Qu.:2.0   3rd Qu.:2.0  
##  Max.   :5   Max.   :4.0   Max.   :2.0   Max.   :2.0
%d bloggers like this: