Curriculum Vitae of Ryan Francis Kelly
I am a software developer and consultant living in Melbourne, Australia. The best way to contact me is by email:
ryan@rfk.id.au
Professionally, I have worked as a programmer and system administrator for over a decade. I am particularly experienced with the Python programming language, which I have used to develop both web-based and desktop applications. I also enjoy logic programming using languages such as Prolog and Mozart.
Academically, I have completed a PhD in Computer Science with the Intelligent Agents Laboratory at the University of Melbourne. My undergraduate studies were a double bachelor's degree in Engineering and Computer Science, which I was awarded with first class honours.
Personally, I enjoy public speaking, theatre and performance arts of any persuasion. I am a keen hiker and camper, even though it means being disconnected from the Internet for days at a time.
More details are available in the sections below:
- Employment History
- Education
- Skills Checklist
- Programming Languages
- Publications
- Awards and Scholarships
- Positions of Responsibility
- Personal Interests
Employment History
Software Engineer, Mozilla September 2011 to Present
I currently work as a Software Engineer for Mozilla, as part of the Services team. We're building a suite of tools to support the development of highly-scalable server-side applications, a.k.a "Project Sagrada".
Director/Lead Developer, Cloud Matrix July 2009 to Present
I am currently co-director and lead developer at Cloud Matrix, a small Melbourne-based startup in the cloud storage space. We build SaltDrive, an encrypted cloud-enabled USB stick. The SaltDrive technology stack is all built using Python, including the server-side file storage, client-side interface, and website.
Freelance Developer and Consultant November 2008 to September 2011
I have done occasional work as a freelance developer and software consultant. My past projects have involved developing Python-based desktop and online applications, and code maintenance and translation services for Prolog.
Programmer, The Victorian Partnership for Advanced Computing March 2004 to November 2008
After completing my Summer Internship with the Victorian Partnership for Advanced Computing, I undertook ongoing programming work on a casual basis. My roles have ranged from developer to software architect, handling the design and development of software for engineering applications.
Most recently, I was the lead architect and developer for a web-based project management portal used to coordinate research and development activities among several large organisations.
Casual Tutor, The University of Melbourne July 2005 to June 2006
While studying for my PhD, I undertook two semesters of casual teaching work in the Department of Computer Science and Software Engineering at the University of Melbourne. I tutored the subject "Algorithms and Data Structures" and was a lab demonstrator for the subject "Logic and Computation". Duties included preparing and running both tutorial sessions and practical programming sessions, along with assessment of assignments and marking of exams.
As a result of significant positive feedback from both students and faculty, in 2006 I was awarded an "Excellence in Tutoring" award from the department.
Computational Engineer, The Victorian Partnership for Advanced Computing December 2003 to February 2004
In late 2003 I was selected to undertake a Summer Internship with the Victorian Partnership for Advanced Computing. This was a paid position which involved developing a piece of engineering software for use in the organisation's computational engineering projects. The project involved heavy use of the Python programming language, which as since become my favourite language for general development work.
IT Manager, Whitley College January 2003 to December 2004
This position was a formalisation of many aspects of the volunteer role I had played at Whitley College in previous years. As IT Manager I was responsible for coordinating technical support for the College's residents and academic staff, evaluating and implementing new technologies for the campus network, and liaising with student volunteers and with the College's Board of Directors.
I also filled the role of Project Manager and Lead Developer during an overhaul of the College's public website.
Vacation Work, Agilent Technologies January 2001 to February 2001
As part of my undergraduate scholarship with the University of Melbourne's Faculty of Engineering, I obtained vacation employment with Agilent Technologies in Melbourne. The division to which I was assigned was responsible for updating a major portion of the company website, and my tasks included web-page development and maintenance, content solicitation from other employees, and testing and debugging of the site.
System Administrator, Whitley College July 2000 to December 2003
This is a voluntary role that students at Whitley College may take on in order to help maintain and develop the College's information technology facilities. The IT infrastructure of the entire College is run by such volunteers – including both the technical aspects of administering servers, email, web-services and so-on, and the personal aspects such as technical support and liaising with College administration.
Education
I have a PhD in Computer Science from the University of Melbourne, Department of Computer Science and Software Engineering. My thesis, entitled "Asynchronous Multi-Agent Reasoning in the Situation Calculus", was submitted in October 2008. The main outcomes of my research are available here: Ryan's research.
Prior to this, I obtained a Bachelor of Engineering (Mechatronics) and a Bachelor of Computer Science from the University of Melbourne, graduating with first-class honours. The subjects undertaken and a summary of my results are available here: summary of results.
Skills Checklist
Languages
- Python
- JavaScript
- C
- PHP
- Prolog
- Mozart
Databases
- SQL
- Django ORM
- SQLAlchemy
- SQLite
- MySQL
Web (Server)
- WSGI
- Django
- Eventlet
- Apache
- Mongrel2
Web (Client)
- HTML
- HTTP
- JavaScript
- XML and JSON
- AJAX
- jQuery
OSs
- Linux (Ubuntu)
- Windows (XP/Vista/7)
- Mac OSX
Testing
- Unit Testing
- Doctest
- In-Browser Testing
VCS
- Git
- Fossil
- Subversion
Programming Languages
I enjoy programming languages of any shape or form, and have a passing familiarity with many including Java, C++, Haskell, Perl and Lisp. I have listed below only those in which I consider myself fluent.
Python
Skill Level: Expert
Python is currently my language of choice for general-purpose development, as shown by its prevalence among my current open-source software projects. Like many Pythonistas, I appreciate the language's simplicity and its elegant conceptual model. I've come to depend on Python's comprehensive standard library and the great variety of software available on the Python Package Index to get things done quickly and easily.
However, there are a few things I miss from other languages – anonymous function definitions, logic variables, and futures being the main offenders. I have a secret plan to copy Mozart's first-class computation spaces into Python, if I ever find enough contiguous free time to do so.
My most popular open-source Python projects include:
- Esky: an auto-update framework for frozen Python apps
- Promise: a Python bytecode optimiser
- PyEnchant: a suite of bindings for the Enchant spell-checker library
JavaScript
Skill Level: Advanced
JavaScript was the first programming language I ever learned and I have been using it sporadically for over ten years. Aside from the obvious list of warts and browser incompatibilities, I find JavaScript to be very powerful and highly productive language, and I'm looking forward to its increasing adoption as a general-purpose tool.
My most popular open-source JavaScript projects include:
- jquery.xmlns: a jQuery plugin providing CSS-3 namespace selector syntax
C
Skill Level: Advanced
While I rarely choose to develop in C unless execution speed is of the utmost importance, my involvement with open-source projects ensures I have sufficiently regular exposure to the language to maintain a comfortable familiarity. I also taught an algorithms and data structures class using C as the implementation language, so I have significant experience at reading a wide variety of C code – from the very good to the very hard to decipher.
My most popular open-source C projects include:
- tnetstring: a data serialisation language, similar in spirit to JSON but easier to parse and render.
Prolog
Skill Level: Advanced
I have used Prolog throughout my academic career, as it is the language of choice for research in symbolic artificial intelligence. I also taught Prolog to undergraduate students for two semesters, an experience I thoroughly enjoyed. My sentiments on Prolog echo those of ESR on Lisp: learning Prolog will make you a better programmer, even if you don't use it for your day-to-day programming. And let's face it, most people probably shouldn't use Prolog for their day-to-day programming – but for problems that fit within Prolog's domain of expertise, it's hard to beat.
I have no open-source projects in Prolog, but the work from my PhD thesis is a good example of my skillset:
- MIndiGolog0: an offline planning system for the MIndiGolog language
- PKnows: a reasoning platform for complex epistemic modalities such as common knowledge
PHP
Skill Level: Competent
I have used PHP for professional web development for over 5 years. Like many developers who also work in other dynamic languages, I have an uneasy but stable truce with PHP – while I bemoan its gratuitous lack of elegance and its hollow mockery of a meta-programming system, I have a deep respect for its ability to get things done fast on the web, and am more than happy to adopt it when it's the right tool for the job.
I have no open-source projects in PHP; it's not my first choice when programing for fun.
Mozart
Skill Level: Competent
Mozart is a multi-paradigm programming language with some incredibly powerful features. In my thesis I used its strong support for distributed logic programming to implement a planning system that automatically distributes its workload across a team of agents. More than any other language, Mozart has introduced me to features that I now wish I could use everywhere - examples include dataflow synchronisation, futures, lightweight micro-threads, and first-class computation spaces.
I have no open-source projects in Mozart, but the work from my PhD thesis is a good example of my skillset:
- MIndiGolog1: an online distributed planning system for the MIndiGolog language
- MIndiGolog2: an offline, distributed, asynchronous planning system for the MIndiGolog language
Publications
- Ryan F. Kelly and Adrian R. Pearce. Property Persistence in the Situation Calculus. Artificial Intelligence 174, pp. 865-888, 2010.
- Ryan F. Kelly and Adrian R. Pearce. Complex Epistemic Modalities in the Situation Calculus, in Proceedings of the 11th International Conference on Principles of Knowledge Representation and Reasoning, 2008.
- Ryan F. Kelly and Adrian R. Pearce. Knowledge and Observations in the Situation Calculus, in Proceedings of the 2007 International Conference on Autonomous Agents and Multi-Agent Systems, 2007.
- Ryan F. Kelly and Adrian R. Pearce. Property Persistence in the Situation Calculus, in Proceedings of the 20th International Joint Conference on Artificial Intelligence, 2007.
- Ryan F. Kelly and Adrian R. Pearce. Towards High-Level Programming for Distributed Problem Solving, in Proceedings of the 2006 IEEE/WIC/ACM International Conference on Intelligent Agent Technology, 2006.
Awards and Scholarships
- Excellence in Tutoring Award, University of Melbourne (2006)
- Australian Postgraduate Award, University of Melbourne (2004)
- Faculty of Engineering Dean's Honour List, University of Melbourne (2004,2002,2001,2000)
- W.S. Robinson Prize for Professional Practise, University of Melbourne (2004)
- David Silver Prize, Faculty of Engineering, University of Melbourne (2000)
- Partnership Scholarship, Faculty of Engineering, University of Melbourne (2000)
- TJ Ryan Memorial Medal and Scholarship, Queensland Government (2000)
Positions of Responsibility
- Registration Manager, PyCon Australia Conference (2010 & 2011)
- President, the Computer Science and Software Engineering Postgraduate Group, University of Melbourne (2006)
- President, the University of Melbourne Inter-Collegiate Council (2003)
- Residential Adviser, Whitley College (2003)
- President, the Whitley College Student's Club (2002)
- Secretary, the Whitley College Student's Club (2001)
- President, the Whitley and Ridley Theatre Society (2001)
Personal Interests
Outside of computer science, my interests include the following:
Public Speaking: I have completed 2 years of training in Effective Communication, and area encompassing public speaking and general communications skills. I achieved a pass with distinction (91%) in Grade Four of the Trinity College London Effective Communication Examination, an internationally-recognised award. I enjoy debating and during my residence was a long-standing member of the Whitley College debating team.
Theatre: I have had major roles in a number of amateur theatrical/musical productions include Into the Woods, Cosi, The Baker's Wide and Bugsy Malone. I also enjoy impromptu theatre and I am a keen participant in theatrical challenges such as Theatre Sports.
Hiking and Camping: I have a growing interest in hiking, camping, and related outdoor activities, and have been exploring local Victorian attractions such as the Grampians, Croajingolong National Park, and most recently a five-day hike through Wilson's Promontory. Free-time-pending, I hope to expand my horizons in the near future by hiking Tasmania's Overland Trail.