Monday, December 10, 2018

Harvard COMPSCI 224 - Advanced Algorithms

For a long time I've been eyeing Jelani Nelson's Advanced Algorithms class. It's taken me a while to convince myself I was prepared to understand the material, and it's taken me even longer to convince myself I had the time to get back into self studying computer science courses. Per my usual MO, I'm supplementing the lectures from Nelson's class with some lectures from MIT on the subject, though those have more of a bootleg feel to them.  Hoping it will be quality content nonetheless.

The goals of the course are to look at different ways to analyze algorithms, and use different "models" to think about algorithms.

Harvard COMPSCI 224:
MIT Advanced Algorithms (6.854): 

Monday, September 24, 2018

Learning Python

Several months ago I embarked on a project at work that made me question my decisions in life.  Well, ok, that's a bit melodramatic.  But it definitely made me question my choice of programming languages.  I thought I had on my hands a simple, straight forward problem.  Loop a couple arrays, can a handful of command line utilities.  Oh I know, I'll use shell script (bash)!  It was not long before I was asking what I'd gotten myself into.

I was too far in to turn back, and I ended up with a 1000+ line monstrosity over a handful of files.  I hated bash... seeing my kludgy attempts at modularity made me want to claw my eyes out. The first few lines of every function were devoted to parsing the parameters. It was an unholy mess, and I knew I needed something better.  I knew I needed Python (ironically, I ended up rewriting it in Java, funny how things work out)...

I put together this post to describe my experience with several learning resources I took advantage of.

Tuesday, May 1, 2018

The Command Line as a Gaming Platform: ANSI Graphics and Midi Music

Introduction


Last September (2017) I got the bright idea that it would be fun to make a game for the command line. I wanted it to be graphical, but only using basic text characters (charmap is my good friend).  I messed around with it a bit in .NET and posted some experimental code to GitHub, and got as far as generating box drawings based on text files:


Tuesday, March 27, 2018

MIT 6.042 - Mathematics for Computer Science (Incomplete)

Back, oh, probably in September 2017 or so, a couple of MOOC buddies and I decided we wanted to tackle 6.042 together.  For my part, I felt that having a better understanding of the underlying principles of proofs would be a huge boon when tackling advanced CS courses that lean on them heavily.  Thinking back to 6.006 in particular, when going through CLRS (which is very proof heavy), I think I would have benefited from better fundamentals in this area.  So, as is my habit, I'm keeping a log of my experience here;  part notes, part stream of consciousness reflection.

We're mostly following the 2015 version of the course, however I really enjoy the 2010 lectures by Tom Leighton, so I'm double dipping a bit there.  The most natural way to divide up the coursework is by "week", corresponding to each of the 12 psets.  We decided on Overleaf for document creation and collaboration, as we agreed it would be best to suck it up and learn a bit of LaTeX if we wanted to get the full "genuine" experience with the pset "submissions".

Index for 2015 course: link
Discrete Math playlists that were helpful:




Thursday, January 25, 2018

Microsoft 70-487: Secure a Web API

Exam Objectives

Implement HTTPBasic authentication over SSL; implement Windows Auth; prevent cross-site request forgery (XSRF); design, implement, and extend authorization and authentication filters to control access to the application; implement Cross Origin Request Sharing (CORS); implement SSO by using OAuth 2.0; configure multiple authentication modes on a single endpoint


Quick Overview of Training Materials


My code samples are here: GitHub


Tuesday, January 23, 2018

Sunday, January 21, 2018

Microsoft 70-487: Implement a Web API

Exam Objectives

Accept data in JSON format (in JavaScript, in an AJAX callback); use content negotiation to deliver different data formats to clients; define actions and parameters to handle data binding; use HttpMessageHandler to process client requests and server responses; implement dependency injection, along with the dependency resolver, to create more flexible applications; implement action filters and exception filters to manage controller execution; implement asynchronous and synchronous actions; implement streaming actions; implement SignalR; test Web API web services


Quick Overview of Training Materials

Exam Ref 70-487 - Chapter 4.2
[Book] Designing Evolvable Web API's with ASP.NET - Chapter 13 (Model binding)
[MSDN] Web API Documentation:
   - JSON and XML Serialization in ASP.NET Web API
   - Content Negotiation in ASP.NET Web API
   - Parameter Binding in ASP.NET Web API
   - HTTP Message Handlers in ASP.NET Web API
   - Dependency Injection in ASP.NET Web API 2
   - Exception Handling in ASP.NET Web API
   - Testing and Debugging ASP.NET Web API
[MSDN] ASP.NET Web API 2: Http Message Lifecycle poster
[Blog] Web API 2 using ActionFilterAttribute ...
[Blog] ASP.NET MVC and Web API - Comparison of Async / Sync Actions
[CodeProject] Web API Thoughts 1 of 3 - Data Streaming
[CSharpCorner] Asynchronous Video Live Streaming with ASP.NET Web APIs 2.0
[Blog] Testing routes in ASP.NET Web API

Tuesday, January 16, 2018

"Effective Java" book outline

Effective Java was written by Joshua Bloch in 2001, and the second edition released in 2009 shortly after the release of Java 6.  I received a copy of the second edition from my manager as recommended reading.  While it was sometimes a little dated, it still made for easy reading, and it felt like most of the recommendations would still be pretty relevant.  As it happens, there is now a third edition that covers Java 7, 8, and 9 which may be worth checking out...

Overall I was impressed with the advice given in the book.  In order to make better practical use of it, I wanted to create a basic "outline" view that I could easily find and scan, making reference back to the book if needed.  That is really all this post is.  I thought about adding "notes"... either to each item or to each section, but they just cluttered it up.  I want this to be more a quick cheat sheet of the guidelines, not a full blown Readers Digest edition of the book...