Tech Blog

Jay's Technical blog


Machine Learning-Types

04 April 2016
Jay Kimble

o this is a quick one off. I’m actually working through the MS Virtual Academy Machine Learning course (and will probably go after the certificate). One of the things I am still have problems remembering is the various (common) types of Machine Learning. These things actually build an algorithm to resolve a particular type of problem.

So this is a quick one off. I’m actually working through the MS Virtual Academy Machine Learning course (and will probably go after the certificate). One of the things I am still have problems remembering is the various (common) types of Machine Learning. These things actually build an algorithm to resolve a particular type of problem. It’s pretty cool because you provide it with a set of data and it does something with that data. So without further adieu, here is my notes on these types:

Classification: This ultimately answers a yes/no question or true/false assertion. So if you want to predict the answer to a yes/no question. For instance, you might want to know if the Cleveland Browns win the super bowl this year; Classification will predict this (if you need ML to learn this, then you haven’t been paying attention.. the answer in Spring of 2016 is a definite NO).

Regression: This is similar to the last one except you want to predict some outcome. For instance, how many points will the Cleveland Browns score this year (you are probably seeing a pattern here)? BTW, this number will probably be a low number.. possibly less than 100..

Clustering: This groups data together. Using different types of clustering will net different types of results. Let’s say you plugged in NFL football teams and put in there record each year over say the last 15 years as well as the number of points scored, super bowls won, etc. You could then have it group these teams into groups. You can tell it how many groupings you want, etc. (of course the Browns would be grouping of losing teams). You could also plug in team colors, and the team logo as opposed to win loss stats, and the machine learning might group teams by color and maybe even by whether the mascot is an animal or something else. (Clustering can interpret images)

Recommender Systems: Historically this is the one we know the most about. With e-commerce systems we’ve wanted to predict what other products a user might want to buy. This is exactly what this type of machine learning does. (another question might be, “after following the Browns for 35 year, which NFL team should I switch to that feels the most like my team (but with a winning record?” Ok, maybe I’m not ready for that question).

  ML

Machine Learning-Journey

04 April 2016
Jay Kimble

I’ve really been interested in systems where the computer could determine what the user was doing and drill them into a better workflow (or alert the programmers that we need to build a better workflow). Or, even things where what the user is doing will ultimately fail (maybe they are generating a contract that will fail..

So, last year, I spent some time doing everything using JS. I have recently begun a new journey around Data Science and specifically Machine Learning.

Now I’ve primarily been a front end dev, and in my mind that means that I tend to do a lot of work in JavaScript and HTML, as well as C# and XAML. This has been where I have been most skilled in the past. Or at least what you have seen in my recent writings.

I’m also a very good Database guy. I brag that I’m not actually a DBA but in a pinch I can stand in the place of one. What I mean by that is that I can write SQL (queries, procs, functions, etc.) I have a decent head for troubleshooting here as well as a decent head for performance analysis (I’ve rarely seen another dev pull up the query perf analysis in SQL Management Studio). A long time ago I worked on Oracle (and I still have some of those Performance skills). I’ve done PostrgreSQL and SQLite, etc. I’ve also done some lightweight playing around with MySQL, and have played around with NOSQL database (mostly MongoDB.. I can say MongoDB is really interesting to me). Anyway, the point is that I’m also a data guy.

When it comes to bringing the two together, I start to lag. I hate writing service tiers. I just don’t find them interesting. I have friends who love this space because they are predictable (I think that’s what takes the fun out of them).

Anyway, I owe my interest in Machine Learning to Shawn Cady who was my boss at another job. A couple of us ran a UX user group (which was infamous), and one night Shawn started talking about an article he had read about the potential on UX using Machine Learning (although at the time it didn’t have this name; we thought more about recommendation systems).

I’ve really been interested in systems where the computer could determine what the user was doing and drill them into a better workflow (or alert the programmers that we need to build a better workflow). Or, even things where what the user is doing will ultimately fail (maybe they are generating a contract that will fail to make money or will fail to be approved, etc). These types of systems are really useful because they save the user time as well as help us programmers build better systems.

I will try to do a better job of documenting this journey (I really do want to blog more).

  ML

SpaceDesk Quick Review

09 October 2015
Jay Kimble

Back when I first started working a job that let me work from home, I used a piece of software that let me use extra machines as external monitors. At that point I had 4 machines laying around, so I had 4 monitors. The beauty was that I could also easily switch off the screen extending and just control the other machine via the same mouse/keyboard. Technology changes (changes in the way Windows works) made this software no longer work.

As time has gone by I have looked for a solution. Currently I use Input Director (and have used Mouse without Borders as well). Both work really well for me. BUT, I truly miss the ability to extend my monitor to another machine.

A friend recently pointed me to SpaceDesk. I decided to give a go.

My Setup

Here’s my “host” setup. I have an older I7 8-core that I refer to as my “big” desktop (“big” is sort of a joke as it’s not nearly as “big” as it was 4 years ago); it does have a fairly new video card, but that’s really the only recent thing. I also have newer I7 4-core personal laptop that use (I also have numerous “work” laptops that I won’t test something like this on). Both of these machines run Windows 10 (insider preview).

I also have a couple other items I used for clients. I have a 5.2” Lumia 640 Windows Phone (running whatever it came with when I bought it in July of 2015), and an iPad 2 running iOS 9.0.2 .

My Results (so far)

Initially I had an issue with my “big” desktop because of a driver issue (I have an USB monitor whose drivers conflicted with the software). After uninstalling the driver I was good to go. Everything seems pretty stable on this device (although it exposed an annoyance with Input Director which might mean I am moving to an exclusive Mouse Without Borders setup). My only complaints are that my iPad keeps shutting off.

For my laptop I connected the Big Desktop to it as an external screen, and I also tested with my Windows Phone. Again, everything worked well.

iPad??!! Windows Phone??!!

So the really interesting thing with this application is that they have an HTML5 version of the client. You can use a variety of devices without any kind of driver. Obviously I’s used both Windows Phone and the iPad. I did also try my Kindle Paperwhite (with no luck). I imagine this would also work with a computer and an android device.

Very cool product! I hope I can afford it when it releases.


A .NET Developer in an Ever Increasing JavaScript World

23 April 2015
Jay Kimble

So maybe you are like me, I’ve been a developer for 20+ years now, and I have gone from a Desktop developer to a Web Developer to a Silverlight/WPF Developer, and now back to a Web Developer. Ok, maybe you aren’t like me. Maybe you consider yourself an enterprise developer, and you do your best to avoid writing too much client script in your apps. You build enough to JavaScript to avoid a poor experience for your users, but you really haven’t embraced it. All this talk of using JavaScript in mobile apps (aka things like PhoneGap or WinJS) or JavaScript on the server, etc. sounds absolutely stupid to you.

We could be brothers, my friend. Now mind you, I have actually been paid to train folks on enhancing web sites with JavaScript (so my skills aren’t bad).. I have always “loved to hate” JavaScript. I keep waiting for it to grow up and become like my favorite language: C#; I’ve been waiting 15 years for it to arrive. I keep hearing about it arriving, but it has yet to fully happen. There are always caveats.

Ok, we’re on the same page if you are still with me. If you are a JavaScript lover, this series might not be for you.

That said, I watch what is going on in the software industry (both on the windows side and the non-windows side of things). I’ve started to play with some stuff that I have never played with before.. and I am finding it hard to admit,.. but my reaction is “This isn’t all that bad. In fact I could learn this and use this.. if it weren’t for the fact that I would be leaving C# and .NET far behind.” 

The Experiment
I think this stuff is not all that terrible. While I’m not thrilled with some of the players, that’s politics and not technology. The one thing I ask is that you don’t apply your enterprise mentality to this (at least for now). Let’s pretend like this is a CTP that has been released and we are evaluating it like it’s something we might use in a year or so (when it is finally released).

We’re going to look at the MEAN stack (more or less). I want to really press down on what is appealing about this and figure out how we can both learn it and learn from it.

So we’ll be learning to build apps with no C# or VB. We’ll also be leaving behind SQL Server and regular old relational databases. We will be using Visual Studio (thanks to some recent enhancements to it, VS is a great tool even for this arena).

We’ll be gaining a couple advantages. First of all we’ll only need to know 1 language, and that language is programming JavaScript. To make that a little more palatable for those of us who use C# (or VB) we’ll use TypeScript instead of pure JavaScript. This will let us leverage types (in a way) as well as have a very clear manner for building Namespaces (actually their called Modules in JS and have the added ability over a namespace in that they can have functions inside them), Interfaces, Classes, Enums, etc. Needless to say writing JavaScript this way (if you haven’t yet) will feel a little more familiar to you.. this means we’ll have the ability to have all the familiar OO mechanisms we are used to.

Additionally we’ll be able to deploy our code on machines with Node installed; I know that’s not much different from .NET which has mainly been seen on Windows machines and in Xamarin/Mono capable machines. With .NET Core we will be seeing more opportunities, but NodeJS is already there.

NodeJS also runs a little differently than what you are used to it. It uses a single thread, but manages it’s activity very efficiently. It’s also compiled (so it’s not slow interpreted JavaScript either),

With Mongo, we’ll be gaining a Database server that was designed for the cloud. While NoSQL may seem a little weird, I promise once you understand it, you’ll really like it.

The “E” in MEAN is for Express which is the web server plugin for NodeJS; it offers routing and honestly nothing all that special in comparison to ASP.NET MVC.

The “A” in MEAN is for AngularJS; I’m sure you’ve heard of that (and probably have worked with it some).

We’ll also be talking about another “A” that I like a little better than AngularJS: Aurelia. Although it’s barely an alpha, it’s showing great promise!

Anyway, looking forward to our first post.