Friday, April 28, 2017

Microsoft 70-487: Query and manipulate data by using Data Provider for Entity Framework

Exam Objectives

Query and manipulate data by using Connection, DataReader, and Command from the System.Data.EntityClient namespace; perform synchronous and asynchronous operations; manage transactions (API); programmatically configure a Data Provider


Quick Overview of Training Materials

Tuesday, April 25, 2017

MIT 6.005 - Software Construction (edX)

The resources for MIT's "Software Construction" class are distributed between several disparate sources.  There is an entry for 6.005 on the MIT Open Courseware page, where it is called "Elements of Software Construction", and there are two classes on edX: 6.005.1x "Software Construction in Java" and 6.005.2x "Advanced Software Construction in Java".

I'm hoping that working through this class will sharpen my understanding of general software engineering concepts.  The emphasis of the class is writing bug free code that is easy to understand and easy to change, which is certainly something you can never be too good at, am I right?

Monday, April 24, 2017

Microsoft 70-487: Create an Entity Framework data model

Exam Objectives

Structure the data model using table per type, table per class, table per hierarchy; choose and implement an approach to manage a data model (code first vs. model first vs. database first); implement POCO objects; describe a data model by using conceptual schema definitions, storage schema definition, mapping language (CSDL, SSDL, MSL), and Custom Code First Conventions

Thursday, April 20, 2017

Instantiating an object in Java without calling a constructor

The Scenario


This isn't a cliche...


I was working on a Java project that talks to a web service with a custom "Client" class that was written internally.  In my project, the client is pulled in from a hosted maven repo as a dependency, so I didn't have access to the source (at least not from this project).  I'm trying to be better about writing characterization tests for existing code before I go in and change anything (if nothing else it's a good way to feel out the code). But I had a problem...

The Client has a single constructor, which takes an endpoint, a username, and a password. Calling this constructor tries to connect to the endpoint (and crashes if it fails).  Because this was the only defined constructor, subclassing wasn't going to help me.  It doesn't implement an interface, so that avenue was also closed down.

So there was no obvious way for me to create a test double to pass in to the code I was actually interested in testing.  How in the hell was I going to get around this???

Wednesday, April 19, 2017

Proxy Windows Authentication with a WCF Relay Service

Motivation

The problem I'm going to address here is pretty specific, and the solution I came up with isn't terribly intuitive, but it works.  I ran into a situation where we were trying to integrate web services with a vendor product.  This is a .NET app running on IIS, and we wanted to authenticate using Active Directory by passing in a username and password to a "UserLogin" soap action (this action returns a security token that is used to make other calls).  While initially we thought this worked, it turned out that it wasn't behaving the way we thought it should.  Any request was getting a security token, even if the username and password were garbage.

Yeah... not what we were going for...

Sunday, April 16, 2017

MIT 6.046 - Design and Analysis of Algorithms

6.046 is described by Eric Demaine as the final undergraduate algorithms class, with more advanced and more specialized algorithms classes being at the graduate level.  I've had my eye on the advanced data structures and advanced algorithms classes for a while, and this class is a fundamental prerequisite for those.  Now, being that it's my MO to totally overdo it, naturally I had to find overlapping classes from some of my other favorite providers and watch everything.  Had I limited this to one overlapping class it probably wouldn't have been that bad... but I found three other classes: Berkeley CS170, Georgia Tech CS6505, and Stanford CS261.  All four classes are what I would call "intermediate" level algorithms courses, with significant overlap in concepts covered:


I probably would have been done a month ago if I hadn't gone so crazy with watching everyone's lectures...

Wednesday, March 22, 2017

How to convert a CVS repo to git


Doing this conversion basically requires a Linux environment. My first attempt was in Windows using the various Unix tooling and I just could never get everything to work the way it needed to. It was less work to just spin up a VirtualBox vm with Ubuntu Server and do everything in bash. This document is going to assume you have access to a suitable Linux environment (this will have a Debian-esque flavor being Ubuntu, but any major distro should work).

I’m also assuming you have zero prior CVS knowledge (like me), so I’ll explain a few of the basics around CVS.

Tuesday, March 21, 2017

Exploiting the YOP Poll WordPress plugin


Somewhere in the vast expanses of the wild internet, there is a site I sometimes frequent that likes to put surveys in their blog posts.  Quite by accident, I discovered that if I reload the page in an incognito window, I could vote in these surveys multiple times.  Being hopelessly curious about what's going on behind the curtain, I ventured down the rabbit hole that led me to spammy scripts and purple underwear (No, seriously...).

Saturday, March 18, 2017

Legacy Berkeley course material pulled over accessibility


One of the earliest sources of free education materials I stumbled upon was webcast.berkeley (right up there with MIT OCW).  Seeing these institutions of higher learning release their lectures and course content free, to the masses, made me envision a time when the entire education system could be transformed.  Today, with Coursera, Udacity, and edX, we are well on the way to that revolution.  But despite these (arguably more sophisticated) offering, I always found myself returning to that well.  No more...

Friday, March 17, 2017

Making assertions with jUnit against log4j console output


I will open by saying that making assertions against your log output is probably a bad idea.  Probably violates every rule of good testing.  That said, I found myself writing characterization tests against some legacy code and I wanted to make sure I didn't break the logging.  So I decided to write some flakey, brittle unit tests.  It was several hours of pain, and I figured it would be a good idea to document my pain so you can avoid some of it (hopefully by not following in my footsteps at all... sigh)

Friday, February 3, 2017

Advanced CSS Concepts (edX)

Last summer I enrolled in a class on edX called "Advanced CSS Concepts".  It was delayed until November because of technical issues on their end, and I put it off until a week ago because Google.

"Oh, advanced ey?  That should be interesting" I thought.  Boy was I in for a disappointment.

Wednesday, January 11, 2017

My Google Interview Journey

The Hook


It's mid November and I'm minding my own business, when out of the blue I get a message on LinkedIn.  It's a technical recruiter from Google, we'll call her "K" (you know, like in The English Patient), and she says she was impressed by my HackerRank badge for Algorithms.  She wants to have a chat and learn a little bit about my background, she says.  Of course this blew my mind, in a sort of "glitter and confetti shooting out my ears" sort of way.  I've had recruiters hit my up on LinkedIn before, but this was Google!  I allowed myself to glow in it for a little while, but I tried to keep myself in check too.  At this stage, it was just one phone call with a recruiter.

Friday, November 25, 2016

MIT 6.008.1x - Computational Probability and Inference (edX)

After slogging through the AI class, I thought it would be a good idea to level up my probability skills a little bit.  So I poked around on edX and stumbled on to the Computational Probability and Inference class by MIT.  One thing led to another and I, apparently, accidentally signed up.  Whoops.  But it's all good, I'm going to roll with this one and see where it takes me.

Monday, November 14, 2016

Teaching Agile and Scrum with Legos!

I had the opportunity to act as a "guest instructor" at Array, the brand new code school that just started up this October in Cheyenne.  What an amazing experience! I've been following the development of the school since early on in its inception, but to actually get to interact with the students and with Eric (the dynamic headmaster) in an actual classroom setting was a real treat.


Friday, November 4, 2016

Berkeley CS169 - Software Engineering (Homeworks)

Once again into the breach


In the Summer of 2015 I burned though the UC Berkeley "Software Engineering" lectures, and had every intention of doing all the reading and related course work so I could "claim" it on my pseudo-transcript.  Well, here it is over a year later and I'm finally getting around to finishing it properly.  I like to think I've refined my personal process for documenting my MOOC journey (lol christ I sound like a B-school brochure)... so since I already took notes on all the coursework (see my previous post), I'll just cover the homework assignments here.

Friday, October 21, 2016

Intro to Natural Language Processing (Coursera)

While I had held out hope that Stanford or even Columbia would offer their NLP courses on Coursera again (I didn't find anything related to the subject on edX), it was not to be.  So I signed up for the University of Michigan's introductory offering.  The Stanford lectures (Jurafsky and Manning) and the Columbia lectures (Collins) are available on YouTube, and these assignments from Cairo University are based on this material as well, so there are plenty of additional resources available in the space.  For now I'm going to mostly concentrate on the Michigan material, just to save a bit of my sanity lol. An online version of the draft 3rd ed of Jurafsky and Martins book, Speech and Language Processing, is also available.

Friday, October 7, 2016

Symbol Catalog

I got tired of hunting all over the place looking for the text representation of various symbols (mostly set and logic symbols), so I figured I would put them all in one easy to find place.  The Greek alphabet I got from Wikipedia, the rest I found at rapidtables.com.  I didn't bother with anything that was already on the keyboard (like < and >), and I didn't do anything that requires an image (that's what LibreOffice Math is for...)

Thursday, October 6, 2016

Agile Development - Bertrand Meyer (edX)

Agile - The Good, The Hype, and the Ugly


This six week edX course covers the concepts, principles, practices, myths and misconceptions of Agile project development.  Lectures are done by Bertrand Meyer, and while not required, the recommended text is Meyer's book Agile - The Good, The Hype, and the Ugly.  According to Meyer, the intent of the class is to look at the Agile approach to software development in an objective way, identifying shortcomings and myths of Agile, as well as its strengths and merits.  The graded portion of the class consists of multiple choice quizzes, so all in all it's a very lightweight course.

Friday, September 30, 2016

Myths of Genius, Fear of... everything


I recently found myself struggling with a great deal of anxiety centered around my career as a software developer.  So much so, in fact, that I began to research what it was I was feeling.  I discovered a great deal about the nature of my fears and doubts, and I hope that sharing my circumstances and introspection here might prove just as valuable to readers as my usual technology related posts.