Chris Wells

Languages
  • C#, C++
  • JavaScript, TypeScript
  • Kotlin
  • SQL, DDL
Frameworks
  • Corda
  • .NET
  • Node.js
  • React.js
  • WinAPI, WinDDK
Education
B.A. Maths (Cambridge)
Bilingual
Bilingual English and French
Contact

Employment History

LAB577 (Remote) 2019 (3 months)
Kotlin and Corda
Contract developer — their project named "Braid" is middleware that connects applications to CorDapps running on Corda nodes. I developed its support for OpenAPI annotations, which document CordApp flow classes; a sample CordApp for testing; and user login.
(self-employed) 2019 (6 weeks)
TypeScript and React, React Router
To learn React I used it to write a clone of Stack Overflow's main web pages and components -- with the URLs which define its interface with its server, and mocking the backend so that the UI can be exercised.
Orbifold.io (Remote) 2018-2019 (3 months)
TypeScript and Node.js
Contract developer — the product was a capital markets Blockchain. I developed all its support for Smart Contracts, ensuring their evaluation at runtime will be deterministic. I also refactored the system; improved performance; and made it easier to test.
Strawberry Media (Remote) 2013–2017
C# and JavaScript; ASP, SQL, ADO, Google Maps API
Sole developer, reporting to the CEO — the product was a web application for first responders: which presents hazmat and vehicle rescue data, and lets users collaboratively annotate maps and floorplans.
Research in Motion, Blackberry (Toronto) 2011–2012
C++, JavaScript, WebKit, HTML5, Selenium/WebDriver
With the team porting WebKit to BlackBerry — I helped code the media player which supported <video> and <audio> tags; and I wrote a Selenium/WebDriver bot, using JavaScript in the browser, to support WebDriver.
ModelText (self-employed) 2008–2010
C#, WinForms, SQL, ORM, HTML and CSS
I developed a requirements management application for Windows desktop — one component displays and edits HTML, it is published at http://modeltext.com.
NewStep Networks (Toronto) 2006–2008
C++, Windows Mobile, MFC, TAPI, VoIP, SIP
Developing call-switching telephony software — I helped intercept the standard Phone application on Windows Mobile by writing a device driver, a redirector for TAPI; and I refactored their Linux telephony server.
UVA Capital Corp. (Toronto) 2004–2006
C#, UML, WinForms
Developing a heart monitor — I read about cardiology, architected the system with other developers, developed a real-time signal display, and encoded diagnostic rules for a prototype "diagnostic server".
VoiceGenie Technologies (Toronto) 2003
C++, Linux (gcc, gdb, and valgrind), CTI
I integrated their VoiceXML IVR with a 3rd-party CTI (i.e. with Cisco's ICM). For that project I pre-planned the implementation and, at their request, the schedule.
LANSource Technologies, 3Com (Toronto) 1991–2003
C++, Windows, SQL, device drivers, C, x86 assembly
I was a first developer at this startup in 1991, later chief of a team of 20 in 1999 when 3Com bought it. I trained new developers, and oversaw the software's evolution, from DOS TSRs to a telco-grade fax server.

Domains

Blockchain

I liked working with Orbifold's blockchain project (it was "system programming"). After I finished the new feature I was hired for, with time to spare, I was allowed to refactor the existing code and learned most of it. Their implementing it on Node.js was an interesting choice.

Next I was hired by LAB577. Before I started there I had a month to study Corda and Kotlin, and the build tools. Then I worked on their Braid product, which acts as a REST or RPC server, a relay for applications to connect to CorDapps. Developing Braid I learned to use several other tools and libraries — i.e. Kotlin and Maven, and elements of Vert.x, Swagger, Corda, and OW2's ASM.

Full stack web

For ModelText I wrote an HTML renderer and editor: including a CSS parser, a DOM, and a render tree.

Work at BlackBerry introduced me to WebKit: browser internals and test suites, and using JavaScript modules.

I was sole developer of Strawberry Media's application: JavaScript to implement UI elements including Google Maps, and to handle the server's pushing updated data; and ASP and SQL server as the back end. I wrote an ORM, defined the database schema including indexes, and made a mashup of data from third-party sources. I had learned to use SQL previously, at LANSource.

In 2019 I learned React with TypeScript and Node.js.

System and Network Programming

I have years of experience doing system and network programming, using C++ and C (and even assembly):

  • Device drivers
  • Network switches and protocol converters
  • Servers
  • Mobile devices
  • Image encoding/decoding

That means thinking about memory, multi-threading, I/O, concurrency, reliability, and system architecture.

I also learned object-oriented design and "patterns".

Early experience

My formal education was mostly Applied Mathematics.

My first job was as "software engineer" with Bell Northern Research in Ottawa — software for a packet switched data network, used by Bell and banks. They had a lot of equipment, a well-organised development process, good training. That was good experience to have had — before my next work which was mostly with startups, where training and "process" might be minimal.

I next worked several years as a contract technical writer for IBM, after BNR and before starting with LANSource — there I was writing manuals for IBM's software products, for network administrators and programmers etc.

Teams

I have started new ("greenfield") projects, and worked with large ("mature") systems. In any case I'm used to frequent integration and incremental delivery.

I like to stay (permanently) with a project, a team or a code-base, if that's possible; and of course I try to write code well enough that any programmer can maintain it.

I can be a sole developer, working with the head of a startup or product owner for the specifications. Equally, I look forward to working with other developers again!

Sample projects

Most of my work is work-for-hire closed-source but my most recent work, with LAB577, was open source:

I used React and TypeScript to write a demo application, implementing Stack Overflow's user interface design:

I published components of my ModelText project:

I was active on Stack Overflow when it started; and on other Stack Exchange sites including Code Review: