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.

Thursday, September 1, 2016

Microsoft 70-487: Query and manipulate data by using ADO.NET

Exam Objectives

Query and manipulate data by using Connection, DataReader, Command, DataAdapter, DataSet; perform synchronous and asynchronous operations; manage transactions (API)


Quick Overview of Training Materials

Pluralsight:
ADO.NET Fundamentals, ADO.NET by Example

Code Samples:
My ADO.NET Examples on GitHub

Note that the QuestPond video (connection pooling) is basically the exact same video as the section from the ADO.NET Fundamentals Pluralsight course, and the Understanding Disconnected Model video is by the author of the ADO.NET by Example Pluralsight course and covers part of the same material.  I'm thinking you can find all of the material from both of these courses on YouTube if you look...

Thursday, August 11, 2016

Berkeley CS188 - Artificial Intelligence (edX)

Having passed the 70-486 exam, I decided I wanted to try something different before I tackled the last cert test, so I poked around MIT OpenCourseware, Coursera, and edX looking for something interesting.  I decided that it was about time to try the AI class.  MIT and edX both had similar offerings, and I went with edX since it offered the autograded exercises (and I already owned the recommended book).

Artificial Intelligence on edX (Lectures) (AI Homepage)
Artificial Intelligence: A Modern Approach

Supplemental:
Artificial Intelligence on MIT Open Courseware (Course website)
Artificial Intelligence from NPTEL
Machine Learning from University of British Columbia

Saturday, July 16, 2016

Java Multithreading in Google AppEngine

I'm currently working on a security app using Google AppScript.  One bit of functionality the product owner wanted implemented was checking ip addresses against a blacklist.  The original idea was for a self generated blacklist, but before I started implementing that, I wanted to see if there were any blacklists out in the wild that I could leverage.  While there are many blacklists out there (a few of the big ones are on this wikipedia page "Comparison of DNS blacklists"), almost without exception they use a specially formatted DNS query to get results.  This is a huge dealbreaker for a JavaScript app, as there is no way to do a DNS query in AppScript (yeah, node.js does it, but alas, not using node, so...).  So I made the decision to stand up my own Java REST endpoint in AppEngine.

Friday, July 15, 2016

Algorithms Case Study: Dynamic Programming in JavaScript

Several days ago, a civil engineer friend of mine asked me if he could pick my brains.  He'd run into a bit of a problem analyzing a bridge design, and wanted to see if I had any thoughts on how to attack the problem.  So we sat down over Jimmy Johns and he explained his problem to me, and my first impression was that is sounded like a textbook dynamic programming problem.  I told him I would have a look at it, which I finally did today.

Wednesday, July 13, 2016

Setting up a Raspberry Pi 3 (and an Amazon FireTV Stick) as a general purpose media hub

Some months ago, the pc we were using upstairs as a media center took its final, epic dump.  I tried to update Ubuntu from 14.04 to 16.04, and a hard crash midway through made it unbootable.  After struggling for ages with flakey behavior, I decided I'd had enough, so I finally did something I'd been looking for an excuse to do for a while:  I bought a Raspberry Pi.  I got the kit with the case and the cable and the little heat sinks.  I just wanted it to be easy.  And for the most part, it was.