Return to the Main Portfolio

Purpose

Welcome to my “Stuff NSCC Demands So I Can Graduate” Portfolio Page! This is where I’ve put all the stuff that they require that I may never integrate into the ‘real’ portfolio. However, I may did eventually integrate the extended learning narratives for the three selected work samples (they were useful). I have to say the skills list was interesting to produce, but in most of the things I haven’t so much scratched the surface as softly run my finger over the storefront window. It’s a wonderful list of lies and half-truths.

Resume

Freshly updated!

Goals List

Short Term

Long Term

Get work experience in application development

Become an entrepreneur

Find a web application platform to specialize in

Master a web application platform

Finish the math drills on Khan Academy

Create an engine and framework to enable people to easily create console-style role-playing games (eg: jRPGs)

Learn additional programming languages

Learn additional human languages

Learn additional programming paradigms (eg: functional programming)

Train to become an instructor (“if you can’t do…”)

Skills List

Skill

How Obtained

HTML, CSS

Self-taught; WEBD 1000

Microsoft Office Access

DBAS 1001

Basic Networking

NETW 1100

Visual Studio

PROG 1100, PROG 2200, WEBD 3000, INFT 3000

VB.NET

PROG 1100, peer tutoring

SQL

DBAS 1100

Oracle

DBAS 1100

Basic Hardware

HDWR 1000

Unix-like operating systems

OSYS 1000

Java-like languages

PROG 1400, APPD 2000, peer tutoring

Object-oriented programming

PROG 1400

UML

SAAD 1001

Android development

APPD 2000

PHP

INET 2005

MVC architecture

INET 2005

ZEND

INET 2005

MySQL

INET 2005

SQL Server

INET 2005, WEBD 3000, INFT 3000, PROG 2500

CMS principles

INET 2005

Gantt Charts

INFT 2100

C++

PROG 2100, PROG 2400

Java EE

WEBD 3102

JavaServer Faces

WEBD 3102

C#

PROG 2500, PROG 2200

Fundamental data structures

PROG 2400

Fundamental searching and sorting algorithms

PROG 2400

Responsive Web Design

WEBD 2000

Flash Builder

WEBD 2000

Silverlight

WEBD 2000

ASP.NET

WEBD 3000

LINQ

WEBD 3000, INFT 3000

Python

Self-taught for PROG 2200

Ruby on Rails

Self-taught for ICOM 4555

Customer service

Dale Carnegie books; ICOM 3550

Project management

ICOM 4555

 

The following narratives have now been integrated into their respective course pages (INET 2005 for the PHP applications, PROG 2100 for the C++ fraction calculator). The copies here will no longer receive “maintenance”.

Work Samples and Narratives

Employee Lookup with ZEND and MySQL


(Download: 24.7 MB (ZIP))

In this exercise, we took a database of employees and created a simple CRUD web application in the ZEND PHP framework. It was interesting because we’d previously built a similar PHP application for the same database, but without a framework.

I’ll always remember this assignment because it precipitated my first question on StackOverflow. The ZEND framework removes a lot of the drudgery associated with building forms and replaces it with the frustration of trying and failing to customize the form components to your needs.

There is a lot of boilerplate and housekeeping with ZEND – although I was able to deliver an assignment I was happy with, I don’t have any desire to use ZEND (or PHP!) again. Still, learning to use anything new eats time before it saves time.

“EZ-CMS” Content Management System


(Download: 391 kB (ZIP))

For this project, we were required to use PHP to build a working Content Management System from scratch. It was an ambitious project, and planning and time management was critical.

There was a lot of labor involved, because making a back-end pageset to perform CRUD on an entity was almost an assignment in itself, and there were several entity types to manage, including pages, users, articles, and templates.

I built the site in manual MVC, which helped me shore up my MVC conceptions, but the controller was difficult to manage because all of the different types of requests had to pass through it. I don’t think I will try manually implementing MVC again because managing paths and scopes was a nightmare.

The following semester, I got myself learning Django, and the experience of working with MVC in PHP helped me to recognize the model, view, and controller equivalents in Django. I built a poll application following the tutorials (which, though complex, were a breath of fresh air compared to the introductory guestbook tutorial for ZEND), and I didn’t have to write a single line of SQL. You could also extend a basic Django project to become a CMS if you set up the right models and views (or install django CMS).

“EZFrac” Rational Number Calculator


(Download: 1.3 MB (ZIP))

The intent of this assignment was to show how to overload operators (in C++ code) – the calculator was an optional component for bonus points, and the operators used in the user input are just characters in string – not the programmatic operators we’re talking about overloading (i.e. (re)defining the behavior of).

We worked with objects of a self-made class Rational that had numerators and denominators. We wrote code that allowed us to perform programmatic and mathematical operations on them and get sensible results – e.g. the overloaded “+” operator would add two Rationals together according to the rules for adding fractions.

The calculator was fiendishly difficult because there were all kinds of permutations of the 4 basic operations that had to be parsed correctly, made complicated by the fact that the symbol (/) indicated both division and two parts of a rational. Worse, the symbol (-) is for subtraction as well as indicating a negative integer, necessitating 16 different cases to handle: I had regular expressions with nicknames like “nominus-dualminus” ((n or n/n) - -n/-n) and “trailingminusonly-leadingminusonly” (n/-n - -n/n). Certain expressions like 3/2/3 (is that 3/2 divided by 3 (1/2), or 3 divided by 2/3 (9/2)?) would always be ambiguous and required prompting the user. I learned how to use regular expressions to identify the different kinds of fraction/operation combinations and build up the appropriate Rationals on which to perform the appropriate calculations.

In the end I gained a greater proficiency with regular expressions and using them in C++, and they’re a critical (and, if this program is any indication, oft-neglected) part of a problem-solving toolkit.