I'm looking forward to learning about new technologies, and finding
ways to engineer new and novel applications.
Business
I've been refining my skills with over five years of application development
experience, with much of the time being focused on enterprise software systems.
Always being interested in new technologies and audiences, I've become familiar with developing
for desktop, mobile, and web-based platforms.
Having created software for both small business and enterprise institutions,
I've worn the hats of a frontline developer, project lead, systems analyst, and junior business systems analyst.
I've been able to explore both independent, freelance positions, and opportunities where I was member of a large team.
Business applications have been varied, leading to a working knowledge of common
asset management, workflow, and finance systems, and experience in performing third-party
systems integrations.
Academic
Research has recently completed, culminating in the thesis Image Evolution Using 2D Power Spectra (below) which uses signal processing features and
explores models of computational aesthetics to evolve new and novel images from an existing piece.
Research topics which have been explored include:
Evolutionary Computation
Signal Processing & Information Theory
Machine Learning
Computer Vision
Computer Graphics
Since the beginning of 2015, I had been furthering my education with part-time graduate studies through
Brock University's Masters programme in Computer Science under the supervision of Professor Brian Ross.
I've recently completed my studies, successfully defended my thesis, and was conferred my MSc. Computer Science.
Portfolio
Publications
Image Evolution Using 2D Power Spectra
MSc. Thesis
Projects and Academic Endeavours
THREE.js Visualizations
Web Canvas Demos
Learning Aesthetic Preferences
Machine Learning
Neural Networks & Clustering
Machine Learning
Tetramino Placement Puzzle Solver
Algorithms
FEC Code Channel Tester
Coding Theory
Interactive Evolutionary Art System
Evolutionary Computation
Android Mental Health Monitoring
Mobile Development, Analytics
Lindenmayer Systems Tool
Graphics, 3D Modelling
Photography Management Systems
Native Development, Workflow
Experience
Over 5 years of experience with independent and enterprise development
After a number years of part-time study in evolutionary computation and art systems, the findings of an extensive exploration into compositional guidance through spatial-frequency measures has been presented in the MSc. thesis Image Evolution Using 2D Power Spectra.
Evolutionary art systems have shown success in producing novel variations of existing images, particularly with respect to non-photo-realistic filters, colour properties, and aesthetic models. With the assistance of Dr. Brian Ross, methods for evolutionary guidance of spatial properties were explored, expanding upon measures showing promise in database retrieval and classification applications based on frequency / power spectral analysis. Metrics were assessed for their ability to capture spatial / compositional attributes from existing target images and guide evolutionary candidates towards new images with similar properties.
A evolutionary art system was produced with tuned measures allowing for reasonable replication of spatial attributes in a number of target images classes.
Abstract:
Procedurally generated textures have seen use in many applications, are a high-interest topic when exploring evolutionary algorithms, and hold a central interest for digital art. However, there is an existing difficulty in finding suitable heuristics for measuring perceived qualities of an image. Particular difficulty remains for quantifying aspects of style and shape. In an attempt to bridge the divide between computer vision and cognitive perception, one set of proposed measures from previous studies relate to image spatial frequencies. Based on existing research which uses power spectral density of spatial frequencies as an effective metric for image classification and retrieval, we believe this measure and others based on Fourier decomposition may be effective for guiding evolutionary texture synthesis. We briefly compare some alternative means of using frequency analysis to guide evolution of shape and composition, and refine fitness measures based on Fourier analysis and spatial frequency. Our exploration has been conducted with the goals of improving intuition of these measures, evaluating the utility of these measures for image composition, and observing possible adaptations of their use in digital evolutionary art. Multiple evolutionary guidance schemes with consideration of the spatial frequencies' power spectra and phase have been evaluated across numerous targets with mixed results. We will display our exploration of power spectral density measures and their effectiveness as used for evolutionary algorithm fitness targets, particularly for basic compositional guidance in evolutionary art. We also observe and analyze a previously identified phenomenon of spatial properties which could lead to further consideration of visual comfort and aesthetics.
An analytics pipeline which produced various aggregate measures using Fourier analysis was developed in Matlab and exported to native C code. We used JNI to offer these tools to our Java based evolutionary art system, and explored possible image evolutions guided by these measures.
Overcoming numerous issues throughout our exploration, such as producing the correct abstractions in our analytics, limiting our capture to only the most pertinent data points, and adjusting restrictions in our evolutionary system, we were eventually able to find suitable tunings for our system to produce notable results for evolutionary art.
While certain targeted images found varying levels of success, some classes of images were quite trivial to replicate, and even the particularly difficult targets found interesting and novel reproductions.
We were successful in using 2D power spectra as an effective means of guiding evolutionary image synthesis.
Through comparison of the produced and targeted images through 2D Fourier analysis, we were able to extract key spatial characteristics and use this data to guide the evolution of images towards those which share similar compositional traits.
A collection of graphic demos using HTML canvas and WebGL.
Small graphics demonstrations were created to familiarize with TypeScript, as well as
canvas capabilities and WebGL through the THREE.js libraries.
Inspired by the various "starfield" graph connectivity demos, a lineart variant was developed.
Cubic Bézier curves were employed to pull edges closer to each endpoints other immediate neighbours.
An expansion on Conway's
Game of Life,
Frank Buss has proposed a ruleset for a
hexagonal variant.
Variants have been implemented with varying options for grid size, border wrap, and ruleset.
The Cubehelix colour palette is also generated and explored.
Moiré patterns
are formed from the overlay of multiple similar patterns with transparent gaps.
This simple demonstration overlays a pair of the previously formed hexagonal grids to
help explore the emergent patterns through rotational symmetry.
A replication experiment to guide evolutionary textures with machine learning
Based on the
interactive evolutionary art system project previously developed,
machine learning techniques were employed in an attempt to automate user ratings
of generated images based on aesthetic criteria.
A number of image attributes are calculated and extracted before being used to provide
a rating, or an additional sample for decision tree and neural network learning algorithms.
The system originally proposed by
Li et al.
was replicated and continuously refined to improve classification performance.
Obtaining the reported performance scores proved to be a difficult endeavor, and work
is ongoing to further improve the learning system capabilities.
Experimentations with Artificial Neural Networks and K-Means Clustering
To gain a better understanding of machine learning techniques, implementations were
made for a pair of common machine learning algorithms. A supervised feed-forward,
artificial neural network was generated, making use of backpropagation learning and
other gradient descent variants. Also implemented is the unsupervised k-means clustering
algorithms. Experimentation was then done to determine the effectiveness of certain
system configurations across varied data sets.
Employing backtracking algorithms to solve a modified packing problem
Tetraminos - groups of four joined squares - have been a popular tool for puzzle generation.
Such puzzles were frequently offered by the game
The Talos Principle.
While many of the puzzles and dialogues presented in the game proved to be insightful,
the reoccurring challenges with tetramino arrangements eventually became monotonous.
Recalling previously learned techniques for box-packing and other permutational problems,
the challenge of producing this puzzle solver proved more interesting than the challenge
presented by the game.
The final solver uses backtracking to attempt board arrangements, and works reasonably well
for the size of problems presented by the game.
Dynamic testing and analysis of robust, error-correcting encodings
Forward error-correcting codes (FEC) can be used to encode information in a manner
which is robust to small amounts of channel noise, allowing a noisy signal to be corrected
using other information sent in the transmission. Many well-studied codes have mathematical
proofs regarding their efficiencies, but changes to the expected inputs, the amount of channel
noise, and the encoding parameters can have substantial effects.
A tool to analyze the encoding size and transmission success rate was developed to
test codes in a more dynamic environment. All code, channel, and input functionality
is expandable through use of a plugin system.
Evolving procedural textures with user-guided fitness
Engineers and artists alike have both made use of evolutionary algorithms for inspiration
and optimization. These evolutionary systems use techniques inspired by Darwinian evolution
to repeatedly produce items with attributes or behaviours approaching a desired specification.
An artistic system using evolutionary algorithms and user-feedback was developed on the
ECJ system to facilitate further study
in computational aesthetics and texture synthesis.
This interactive evolutionary art system takes user ratings of the presented images,
and generates additional candidates which more closely reflect the higher rated selections.
Repetition of this aesthetic selection produces images which should become increasingly
appealing to the user.
Within the domain of evolutionary algorithms, many specific algorithms have been studied
and used to great effect for the generation of artistic textures. A survey of common and
promising modern techniques has been explored and compiled. The specific synthesis methods
in the system I have implemented use genetic programming - a method of evolving parametric
functions to produce pixel data at each image position. A near limitless amount of options
are available to be used with the system, and further exploration will be done to compose
both parametric functions and convolutional operators.
Capturing and storing user events to facilitate mental health analysis
A system was created to collect and monitor key events on an android-based
mobile device. The main user-facing app would permit manual event entry by the user,
The app would also maintain and display status of a launched background service.
This service would monitor a number of the event collections and synchronize them with an
external data store through the now defunct Parse services.
Events were pulled through various Android-provided observer classes, but also required
tracking a number of hidden events. Data such as MMS message recipient and message content
required substantial reference from the Android source to develop and maintain, and non-standard
implementations required vendor-level adjustments.
The service would also manage automated push requests to direct the user to standard
psychological surveys. These surveys were presented via a mobile-focused web application to
allow for increasingly rapid modification, and flexibility of survey design.
Care was taken to ensure the data collected did not exceed the scope for which client's data
store had compliance.
Client:
1Datapoint Diagnostics
Date:
February 2015
Technologies:
Java, Android SDK, PHP
Lindenmayer Systems Tools
A graphical tool for exploring and exporting Lindenmayer string replacement systems
A Lindemayer System (or, LSystem) is a string replacement engine originally designed to
model plant growth behaviours. The fractal nature of the system and the ability to use
randomized replacement options can give very organic, natural looking products.
An initial investigation into LSystems was taken for an academic course project,
where an implementation which employs 3D rendering options was developed.
LSystems are an interesting option for 3D synthesis, and I have since been continuously
expanding the capabilities of my program.
The generated LSystem models are exportable to more adaptable formats, such as the Wavefront .obj specification.
In addition to generating geometry primitives, the LSystem tool can track and export
CSound score events for music composition.
Image archival, workflow, and camera integrations for appointment photography
An online booking system was developed to permit scheduling photography shoots based on event availability.
Care was taken to maintain portability and abstract branding for distribution to other franchise licensees.
Booked clients would be redirected to payment services, and issued a printable receipt with barcoded
identifiers for improved service speeds. Clients would also be able to view previews of the archived
photographs after the event to request physical prints. A configurable sales package system was developed
to assist with marketing promotions and discounts.
To facilitate the automation of image archival, a key development for the photography management
system was a customized image capture and transfer tool. The tool would listen for a camera's image
capture events, download the image from the camera, and synchronize the local image download folder
with an external server. The use of event tags and pre-printed barcodes allowed the user to easily
associate images to individuals and events, greatly improving photographer and manager workflow.
The tool was heavily customized from the digiCamControl
project, and required custom compatibility tweaks for the Nikon D400 (including live preview, and
remote shutter control).