Chris Gahan (chris@ill-logic.com)
(email me for contact info)
Contents
Introduction
Hi! I'm Chris, and this is my curriculum vitae (aka. junk-I've-done). I've tried to make it interesting to read by putting live working demos of my software near the top, and more abstract things near the bottom.
I excel at and enjoy coming up with novel and creative ideas; I love brainstorming with clever people. The scope of my interests are quite broad: they range from music, to philosophy, to computers, to humour, to math, to nonlinear dynamics, to biology, to neuroscience, to psychology, to politics, to information theory, to physics, and beyond! My breadth of knowledge also includes sufficient depth to allow me to bring the fundamental insights in one area to bear in solving problems from a different area. I find that it's better to understand fundamental principles than details, since you can always derive the details from the principles.
I enjoy teaching and learning, and finding elegant solutions to problems. I like figuring out how things work by experimenting with them and testing theories, and I also enjoy refining a complex mess of ideas (or a system) until they're (or it's) a beautiful structure. I also like to have fun while doing it, so you'll often find my sense of humour woven into what I'm doing. (I'll try to stifle the jokes so that this thing looks reasonably professional.)
My most marketable skills lie in software development. I started programming at age 7, which means that I've been hacking in different languages and playing with computers for about 25 years. As a result, I've got quite a depth and breadth of experience, and a big pile of source code.
I've had a peripheral involvement in open source software development since about 1998. I'm quite passionate about elegant tools and languages (such as Ruby, Python, Icon, and Haskell). The projects I most enjoy working on tend to cluster around interactive simulation and graphics, although machine learning is starting to eclipse that area.
A great deal of what I know is self-taught (in so much as I either learned it on my own through exploration and experimentation, or I read it in a book). So, I'm not an ivory-tower academic type; I'm theoretical and practical. My personal learning-style is much different from that of mainstream formal education; I care about what I'm learning, but I also care about why I'm learning it, what value it has, and how it fits into the context of human experience. Formal schools tend to leave out that whole "purpose" thing.
I'm also an excellent writer and communicator; I'm especially good at absorbing a topic, and then factoring it down to its most salient parts so that it can be explained clearly and simply.
Projects
(which you can look at and/or try)
A web-application which automatically detects faces in group photos and lets the user create a fancy legend (written in Python and Pyrex).
A fun little reflex-based puzzle game (written in Python).
A lightning simulator (written in Python with OpenGL).
A Windows GUI application which performs automatic backups (written in Delphi, with hacked rsync/ssh clients).
An OpenGL snow simlulator which lets you take a 3D model and have it slowly become covered in snow, with simulated avalanching (written in C++).
3dspin - 3D Spin-O-Matic
A software 3D renderer that takes 3DStudio meshes and spins them around (written in Turbo Pascal for DOS around 1997, but it still runs fine
).
Redmine_Ultraviolet - Syntax highlighter
An advanced syntax highlighter for the Redmine source-control and project management system.
A web-based multi-user streaming jukebox. Users upload albums, and can then create/manage playlists which can be streamed in any MP3 player that supports .M3U files. (Written in PHP.)
NanoBoard (the forum app that's only 45-lines long!)
In 2001, I was having a discussion with a friend of mine, and he was complaining about how verbose ASP was. He claimed that it took a million lines to write anything. I then told him that I bet that I could write what he was writing (a message board) in 50 lines of PHP. He didn't believe me. Well, I showed him!
My collection of opensource Ruby/Unix/web apps.
My miscellaneous source code repository.
Education Overview
- Queen's University (Graduated in May 2005)
Bachelor of Computing (Honours) -- Computing and Information Science
- Upper Canada College (Graduated in June 1998)
International Baccalaureate & OAC Diplomas
(Awarded the Thompson Prize in Computer Science in 1996/97 and 1997/98)
Employment History
2009-2011
Software Developer (at InteraXon)
- Worked on a number of projects over the last few years, including a large installation for the Vancouver 2010 olympics which enabled visitors to control the lights on the CN-tower, Niagara falls, and the Parliament buildings remotely, using their brainwaves. I worked on the brainwave processing code, created a cluster manager in Ruby, setup control conduits between Vancouver and Toronto, helped debug many issues, and manned the installation.
Software Developer (at Toronto Rehab hospital's iDAPT Research lab)
Worked on the HandyAudit tool for auditing hospitals' hand-washing. I made a web application in Rails for collecting, analyzing, and inspecting the data, as well as a GUI tool for syncing handheld devices with the website.
2008
Software Developer (at UofT's Spence Lab)
- Helped develop tools for real-time analysis of website visitors.
2006 to early 2007
Software Developer (at IdeƩ, Inc.)
- Created a number of tools, and researched a variety of topics related to the business of visual search. (Mostly web application development in Rails, but some web crawling, cluster storage and management, and computer vision.)
2006
Tools and Automation Developer (at nCircle Canada)
- Worked at nCircle as a developer of tools for their Vulnerabilities and Exposures Research Team (VERT).
2005 to 2006
Contract Programmer (at TeleScript, Inc.)
Created the Tele-Script Customer Prescription Management System -- an information management and workflow web-application written in Ruby on Rails. It was created to tie together their complex inter-country mail-order pharmacy business which requires every order to pass through at least 5 people of various skills and certifications before it can be shipped to the customer. It includes a patient record management system, a prescription management system, a fax page sorter, a drug database, plus credit card and insurance company billing systems.
2002 to 2005
Off-Site Server Adminsitration and IT Support (at TerraCycle, Inc.)
- Setup and administered FreeBSD server/daemons, maintained approx. 20 websites, 200 email accounts, and handled user support.
2001
Contract Programmer (at Tropika, Inc.)
Created DorisData (Automated backup application for Windows)
Lead Programmer (at Winfall Charity Fundraising)
- Programmed a web-based content management system which enabled charities to create simple websites based on templates (skins). They could create trees of content which would be automatically linked together, as well as image galleries. (Written in PHP)
2000
Search Engine and GUI Developer (at Myubi Search Technologies)
- Worked on a team to develop a professional search engine for researchers (with a slower but more thorough search, and more control over the query). I concieved of a GUI for visualizing the search queries and tuning the engine parameters.
1998-1999
Network Administration and IT Support (at Tele-Find Technologies)
- Supported a small company's IT needs on a contract basis.
1998
Web Design and IT Support (at Terry Fox Foundation)
- Volunteered for a couple of weeks at the Terry Fox foundation's main office to help them out with their various computer needs.
1997-1998
Editor: The Blazer (UCC humour publication)
- My school had a humour paper called "The Blazer", which I wrote for from grade 11 to grade 13. In my final year, they decided to hand the helm over to me by making me the editor. I had no idea how unfunny being the editor was. I learned that people don't like writing funny things on a schedule, and have to be beaten continuously until they produce anything (which explains why so many sitcoms have decided to outsource their script-writing to 3rd-world comedy sweatshops). Also, I got to be learned about that peeople having tarruble spelling and gramur many oftens.
1992-1995
Sysop of a Bulletin Board System
I setup and maintained a Renegade-brand BBS when I was younger (I ran it from age 13 to age 16). It had about 500 users, and I set it up so that its message boards were networked to a bunch of other BBSes via Fido-style networks. It also lead me to start a funny little group called Twisted Fishies to release various BBS utilities and funny software that I made. (The releases are still available in the Twisted Fishies Release Sharkive)
Skills
Programming Language Skills:
- Ruby (favorite), Python (now second favorite), C, C++, Java, PHP, HTML/CSS/Javascript, Pascal/Delphi, Basic (Visual or otherwise), x86 and 68000 assembler, Haskell, some LISP, Prolog, bash, awk, Perl (if I have to), and SQL (if that can be considered a language)
Ruby on Rails skill level:
- Rockstar
3D graphics & physics skill level:
- Moderate-to-High
Numbchuck skill level:
- Moderate-to-High
Usability skills:
- Prototyping
- Design
- Evaluation
- Cognitive ergonomics
Computer Security skill level:
- Moderate-to-High
Git skill level:
- Sub-Linus
Software Engineering skills:
- Software requirements and formal specifications
- Intuitive user interface design
- Algorithm design and runtime analysis
- Code profiling and optimization
- Test-driven development
- Agile and/or eXtreme development methodologies
- Decentralized team organization using tools such as SVN (or CVS), wikis, bug-trackers, or trac (which does all of the former)
Hardware skills:
- Simple circuits
- VHDL circuit design
- Motorolla 68000-based PIC programming
- Simple robots
General IT skills:
A huge agglomeration of knowledge and experience with different Windows and Linux software (what's available, what's great, what software packages are possible to create and hence probably exist already if you look hard enough, etc..)
- Methodical problem isolation and solution
- Electronics repair
- Network design and setup
- Administrating servers and their respective services
- Degunking Windows when it gets clogged up (without the need to format)
- Jury-rigging quick band-aid software solutions
- Rescuing lost data
Juggling skill level:
- Sub-Busker
Other Interests
You can get a good idea of other-stuff-I-like from my stumbleupon.com page. Here's a short-list:
Math (information theory, cellular automata, fractals, non-linear dynamics)
Music
Sci-Fi (Adams, Asimov, Card, Clarke, Dick, Heinlein, Stephenson, Vinge, etc.)
Physics (electromagnetism, cosmology, relativity, quantum physics, loop quantum gravity, fluid dymamics)
Writing
Biology (microbiology, genetics, evolutionary history and algorithms)
Humour
Drumming
Economics (behavioural, monetary systems theory)
Philosophy
Psychology
Cognitive Science (machine learning [deep learning, neural nets, bayesian statistics], neuroscience, psychology)
Future and Emerging Technologies (unified theories, quantum computing, genomics, MEMS and nanotechnology, human augmentation, high-capacity storage)
What I took at University
Here's a list of all the courses which I took during my 4.0 years at Queen's and the 0.5 years I visited UofT:
- Linear Algebra
Differential & Integral Calculus
- Introduction to Statistics
Discrete Mathematics and Logic 1 & 2
- Critical Thinking
- Introduction to Business
- Computer Architecture
- Information Structures
- Software Architecture
- Software Specifications
- Software Quality Assurance
- Programming Paradigms
- Digital Systems
- Computer Graphics
- Database Management Systems
- Operating Systems
Algorithms 1 & 2
- Formal Methods in Software Engineering
- Human-Computer Interaction
- Image Processing and Computer Vision
- Social, Ethical and Legal Issues in Comuting
- Electronic Music Composition
- The Short Story
- Chaos, Fractals, and Dynamics
- Neural Networks
- Syntax Systems for Natural Language Processing
- Advanced Undergraduate Project
