Curriculum Vitae of Ryan Francis Kelly

I am a software developer and occasional consultant. I live in a seaside village near Melbourne, Australia and currently work remotely for Mozilla. The best way to contact me is by email:

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 have substantial experience with JavaScript and 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

Software Engineer, Mozilla September 2011 to Present

I currently work as a Senior Software Engineer for Mozilla, building backend servers in python and node.js with the Cloud Services team. Most recently I have been part of the team behind the new account system and improved sync service that launched with Firefox 29.

Director/Lead Developer, Cloud Matrix July 2009 to December 2011

I co-founded and was lead developer at Cloud Matrix, a small Melbourne-based startup in the cloud storage space. We built SaltDrive, an encrypted cloud-enabled USB stick. The SaltDrive technology stack was predominantly python including PySide for the desktop client, Django and jQuery for the website, and some custom python code to interface with Amazon Web Services for file storage.

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 has since become my favourite language for general development work.

IT Manager, Whitley College January 2003 to December 2003

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

I dislike playing "buzzword bingo", but sometimes it is necessary. Here's a short list of technologies with which I have particular experience:

Languages

  • Python
  • JavaScript
  • C
  • Prolog
  • Mozart

Data Storage

  • SQL
  • Django ORM
  • SQLAlchemy
  • SQLite
  • MySQL
  • Memcache
  • CouchBase

Web (Server)

  • WSGI
  • Django
  • Pyramid
  • Node.js
  • Nginx

Web (Client)

  • HTML
  • HTTP
  • JavaScript
  • XML and JSON
  • jQuery

OSs

  • Linux (Ubuntu)
  • Windows (XP/Vista/7)
  • Mac OSX

Testing

  • Unit Testing
  • In-Browser Testing
  • Loadtesting

VCS

  • Git
  • Mercurial
  • Subversion

Programming Languages

I enjoy programming languages of any shape or form, and have had at least a passing familiarity with many including Java, C++, Haskell, PHP 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.

Some of my more popular open-source Python projects include:

  • Esky: an auto-update framework for frozen Python apps
  • PyPy.js: a javascript backend and JIT target for the PyPy python interpreter
  • playitagainsam: a presentation tool for recording and replaying live terminal sessions

JavaScript

Skill Level: Advanced

JavaScript was the first programming language I ever learned and I have been using it sporadically for over ten years. The rise of node.js in recent years has seen me deploying it on both client and server (and occasionally typing "===" into my python code when I jump between projects). Aside from the obvious list of warts, I find JavaScript to be very powerful and highly productive language.

Some of my more popular open-source JavaScript projects include:

  • playitagainsam-js: a web-based player for recorded terminal sessions
  • awsboxen: a node.js deployment tool built on Amazon Cloud Formation
  • 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.

Some of my more popular open-source JavaScript projects include:

  • tnetstring: a data serialisation language, similar in spirit to JSON but easier to parse and render.

Prolog

Skill Level: Competent

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

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

Presentations

I love to talk, present and discuss just about anything software-related, from new technologies and tools to the philosophy of API design. My recent conference presentations can be viewed below:

Publications

I co-authored the following publications as a result of my doctoral studies:

  • Ryan F. Kelly and Adrian R. Pearce. Asynchronous Knowledge with Hidden Actions in the Situation Calculus. Artificial Intelligence 221, pp. 1-35, 2015.
  • 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.

Positions of Responsibility

I am always on the lookout for ways to get involved in my community. Some roles that I've taken on in the past include:

  • Program Committee Member, PyCon Australia Conference (2012 – 2014)
  • 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)

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)

Personal Interests

Outside of computer science, my interests include the following:

Public Speaking: I have completed 2 years of training in Effective Communication, an 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. Family- and free-time-pending, I hope to expand my horizons in the near future by hiking Tasmania's Overland Trail.