Programming Experience

== My programming experience

=== Site: [[http://msupress.matrix.msu.edu|msupress.msu.edu]]

**Notes:**
* Someday this will go live at [[msupress.msu.edu]] as a replacement for their current site
* Developed inside a Wordpress environment customized to pull the data from MATRIX' open-source [[kora.matrix.msu.edu|Kora]] digital repository
* I DID NOT DESIGN THE SITE, we have an awesome designer Dan Jaquint who does the design off all of MATRIX sites

**Involvement**:
* Managed the project from start to finish
* Key decision maker on initial bid and costs for site
* Directly involved in all meetings with client and all decision making along the way in regards to programming and design (although I didn't design it, I work closely with our designer)
* Wrote about 50% of the back-end code to drive the site
* The rest was written by 3 student programmers under my supervision over the course of 2012-2013

**Features**:
* Fully integrated wordpress site using our open source project [[http://kora.sourceforge.net/|Kora]] to drive and allow the client to manage the data from the back-end
* Books feed for the site updated daily from an xml feed in the publishing-standard [[http://en.wikipedia.org/wiki/ONIX_for_Books|ONIX]] metadata standard
* Journals have unique back-end model completely managed in Kora
* Search spans both Journals and Books and is jquery/ajax driven to work optimally while keeping load times down
* PHP code followed strict object-oriented design and came out very clean allowing the custom wordpress templates to be very simple
* Code was commented properly using Doxygen to provide solid documentation to the client
* Wordpress was optimized carefully to maximize caching for speed and reliability
* Used Jenkins with a php-customized project template for QA and CI for strict quality-of-code reporting along the way

=== Software: [[kora.matrix.msu.edu|Kora]]
**Notes:**
* Open-source digital repository and publishing software
* Available via [[http://kora.sourceforge.net/|Sourceforge]]
* I did not write majority of the base code, but the 2.x tree was a complete rewrite from the ground up

**Involvement**:
* Have managed this project since shortly after the release of Kora 2.0
* Involved in many design decisions of Kora 2.0
* I have overseen bug-fixes and minor improvements all the way up to it's current version, all commits under the name 'Sucko' or since approx Jan 2012 were mine or under my supervision
* Oversaw the complete redesign of an ORM API framework that was recently added, vastly improving the structure of code when writing the API
* Directly involved with the key design goals of version 3.x which is currently under development under our new software development manager at MATRIX
* So, yes I did this all while covering turn-over at MATRIX in addition to my standard role of systems management and smaller website design. Due to these circumstances most of the 2.x life-cycle still falls under my management.

**Features**:
* Very simple, intuitive, yet extremely flexible digital archival and publishing platform
* Allows simple creation of meta-data structures to define whatever type of media you wish to ingest into the library
* Performs many common, simple database setups in a web-gui interface simplifying the challenges of setting up a complete database environment (or metadata structure setup)
* 2.0 had a nicely re-designed API that was vastly powerful but not ideally contained, name-spaced or contained
** My 2.x ORM API (written by a student I oversaw) uses a proper namespace for functions and creates dynamic function and object names using PHP meta-types and meta-classes directly from the Kora layout itself
** Both these APIs are still available and heavily in use across MATRIX websites to help us silo our data collection inside this repository while then displaying very customized and top-notch websites connecting to that library
* Simple installer making it as easy to set up as any CMS in an LAMP/WIMP environment
* Pluggable 'control' types allowing easy addition of new input types that we continue to develop at MATRIX (or can be contributed)
* Many more features, check it out on SourceForge!!

=== Site: [[http://josephdeming.net|josephdeming.net]]

**Notes:**
* This is my home website, you are here now ;)
* I did design this site (not my strong-suit).
* Developed inside a Drupal environment

**Involvement**:
* Completely my own, every aspect

**Features**:
* Framework driving the site is Drupal CMS
* Did use some drupal plug-ins and modules for some functionality
* Since design is not my strong-suit the theme is a freely available one, slightly modified and I try to change it periodically
* Combined drupal module functionality with custom php code to do tons of custom things, like:
** My [[http://www.josephdeming.net/?q=node/85|Video]] page can search and showcase all of my saved media at home, with the right password you can even stream and play it
** My [[http://www.josephdeming.net/?q=node/3|Music]] page can also search and showcase all of the music I have digitized and collected over the years. With the right password you can also play it, build playlists and browse by artist then album
** The [[http://www.josephdeming.net/?q=player|Player]] page currently uses mediaplayerjs to embed and play my media/playlists. I did not write the player object, but I have written many wrappers over my lifetime to perform this exact feature for my collected media over the last 10 years. It's a never ending project I try periodically to get 'just right' as well as keep up with new browser support and current technology
** The [[http://www.josephdeming.net/?q=node/36|Pictures]] section of my website showcases all the pictures I wish to publicly expose in a fast, custom-written format that allows the end-user to view them by custom-selected quality.
*** Choosing the low-quality will load them faster and generate smaller thumbnails
*** Choosing the highest-resolution will take a long time to load but make the full original quality image available to download
*** The default setting of 'High' is the happy-medium for most standard hi-speed connections.
*** Images are created once on server the first time the page is loaded at that particular resolution, then 'cached' for more effective viewing by others in the future
*** The images are actually displayed by leveraging a standard drupal module that leverages the colorbox javascript library
** This is always a work-in-progress!!
* I am extremely comfortable programming custom plug-ins for various CMS architectures and find it fun to write little extensions for whatever environment I am working in to cleanly integrate and accomplish the goal (i.e. don't just hack it in and make it work, use proper framework calls and models).

=== Site: [[http://aodl.org|aodl.org]]
* This main site is actually a simple re-direction page and fairly old code, but I have had my hands in supporting many of the sites linked there including:
** [[http://aodl.org/islamictolerance/]]
** [[http://aodl.org/oralnarratives/]]
** [[http://aodl.org/islamicpluralism/]]

**Notes:**
* I did not write the base of these sites originally

**Involvement**:
* I did oversee and help write a massive code-restructuring which took the original model which involved a copy/paste of the entire subdirectory tree for every front-end (subfolder url) and unique configuration for each folder into a model that shares code wherever logical allowing you to optionally override any custom page in any front-end with your complete custom code. By default, any front-end will align itself with any other and behave the same. But you can see from the examples above how flexible the display can be by simply editing the style-sheets and customizing your own menu for each sub-site.
* Managed bug-fixes and additions of many of the new front-ends
* Managed the structure of the metadata in Kora (yes, this is another set of sites driven by Kora)
* I wrote the media player used here on many of the front-ends to display video and audio, it is all based off a single shared library I have written and we use throughout the MATRIX sites to display video/audio in a managed fashion

**Features**: