Curriculum Vitae

This page serves as a space-unbounded reference for details potentially relevant to someone considering recruiting me for a job. This is intended to be a somewhat-complete listing of everything that someone could be interested in, going beyond what I would normally submit as my CV to any normal job application. There will be, of course, things that I don’t post here (e.g. the job as a kitchen hand I had back when I was in high school) because I don’t think they could possibly be relevant to anybody anymore, and some things I just forget to mention. Plus, I don’t want to doxx myself completely.

The below sections are ordered alphabetically, since different parts will be more or less relevant to different people. Subsections may be ordered alphabetically, or with another system where appropriate. For example, my formal education and work experience are listed in reverse chronological order.

Education

Certifications

None as yet, but I very much hope to earn some in my job. Preferably, sooner rather than later, so that I can start applying anything I learn straight away.

Formal Education

Doctor of Philosophy1

University of Auckland

2017-2021

In Computer Science

Bachelor of Science (Honours)2

University of Auckland

2016

In Computer Science

Awarded first class honours.

Bachelor of Commerce (Honours)

University of Auckland

2011

In Commercial Law

Bachelor of Commerce/Bachelor of Science (conjoint)

University of Auckland 2005-2010 Majors in Accounting, Commercial Law and Computer Science. Also includes a specialisation in Logic & Computation, which was effectively the same as a fourth major.

Online Education/MOOCs

TBC

Experience

Work Experience

Security Developer

Cosive New Zealand

Oct 2021-June 2023

Tutor (part-time)

University of Auckland

Late 2017-Mid 2021

Various Roles (contract work)

Auckland Council

2012-2015

Volunteer Experience

National Treasurer

New Zealand Live Action Roleplaying Society Incorporated

Oct 2013-Oct 2017

Auckland Regional Treasurer

New Zealand Live Action Roleplaying Society Incorporated, Auckland Branch

Oct 2013-Oct 2014

Memberships

Various organisations (and any distinct sub-organisations) of which I am a current member

  • Association of Computing Machinery (ACM)
    • ACM SIGBED
    • ACM SIGHPC
    • ACM SIGPLAN
  • Institute of Electrical & Electronic Engineers (IEEE)
    • IEEE Computer Society
    • IEEE Signal Processing Society

Presentations

Various presentations/talks I have given over time, and which I can talk (reasonably) freely about. Where possible, this also includes links to the slides themselves in PDF or PPTX format.

Publications

A listing of some of my more interesting papers.

  • Logarithmic SAT Solution with Membrane Computing

    Radu Nicolescu et al.

    Axioms 11(2). 2022.

    DOI: 10.3390/axioms11020066

    Abstract
    P systems have been known to provide efficient polynomial (often linear) deterministic solutions to hard problems. In particular, cP systems have been shown to provide very crisp and efficient solutions to such problems, which are typically linear with small coefficients. Building on a recent result by Henderson et al., which solves SAT in square-root-sublinear time, this paper proposes an orders-of-magnitude-faster solution, running in logarithmic time, and using a small fixed-sized alphabet and ruleset (25 rules). To the best of our knowledge, this is the fastest deterministic solution across all extant P system variants. Like all other cP solutions, it is a complete solution that is not a member of a uniform family (and thus does not require any preprocessing). Consequently, according to another reduction result by Henderson et al., cP systems can also solve k-colouring and several other NP-complete problems in logarithmic time.

    bibtex

  • Neighbourhood message passing computation on a lattice with cP systems

    James Cooper and Radu Nicolescu

    Journal of Membrane Computing 4. 2022.

    DOI: 10.1007/s41965-022-00097-3

    Abstract
    We propose neighbourhood message passing (NMP), an abstract framework for loopy belief propagation (BP), as used in stereo matching (SM). We focus here on generic inter-processing-element messaging over a two-dimensional square grid, but our results apply to lattices of any shape through minimal modification. Specifically, this paper investigates three cP Systems (a type of P systems) models for loopy BP: One based on the classical globally synchronous BP, and two novel variants, (totally) asynchronous and locally synchronous. To model the classic globally synchronous NMP, we extend cP systems messaging rules with antiport features, similar to those used in other P systems. Next, we propose a novel version of NMP by extending it to the asynchronous case. We then derive a locally synchronous NMP variant, which arises naturally as a middle ground between our asynchronous and the classical globally synchronous variants. To clarify the operation of the asynchronous NMP system, we supply a short worked example. Following this, we analyse the proposed asynchronous system and prove that it uses precisely the same number of messages as the globally synchronous variant. We further put forward some runtime and correctness conjectures. Furthermore, we experimentally investigate the asynchronous system’s run-time characteristics. Messages spread from a given location on the lattice similarly in both the asynchronous and synchronous versions, even in the face of slow channels. We also conduct computer experiments and find that, in practice, the locally synchronous system is usually faster than the traditional globally synchronous approach (about 5–13%), and the asynchronous system is typically quicker still (often by approximately another 10%). We thus believe that it is a promising novel approach for faithful implementations of NMP and should be preferred.

    bibtex

  • A framework for multiscale intertidal sandflat mapping: A case study in the Whangateau estuary

    Mihailo Azhar et al.

    ISPRS Journal of Photogrammetry and Remote Sensing 169. 2020.

    DOI: 10.1016/j.isprsjprs.2020.09.013

    Abstract
    We introduce a multiscale approach to population estimation of maldanid polychaetes on intertidal sandflats. Animals that live in marine sediments play important roles in ecosystem processes and are frequently the target of environmental monitoring but are notoriously time consuming to sample. Our goal was to enable the mapping of patterns of abundance of estuary lifeforms over long tracks at spatial scales and temporal frequencies not amenable by traditional quantitative methods. At each of four study sites of 9 m2, we used several forms of imagery at increasing resolution, obtained with a low-cost camera system and UAVs, to estimate the presence of the maldanid polychaete macroclymenella stewartensis. This involved defining the micro-scale topographic features on the sediment surface linked to the worms feeding activity. At each site, counts of polychate faecal mounds were estimated by quadrat counts. High resolution imagery was used to construct 3D depth maps using Structure from Motion, which were then segmented to obtain a local count of M.stewartensis faecal mounds. Texture features were then extracted from the high resolution imagery and used to create a linear model using the local counts. Low resolution imagery was then scaled, texture features extracted and passed into the linear model to provide count estimates with an error of 4% at best and 35% at worst for best orientation. The results demonstrated the potential of our multiscale texture based approach to model data at scale on sediment topographic features linked to the activity of functionally important species. These methods in turn help to advance ecological research and estimate ecosystem services potential as well as provide an additional tool for large scale rapid ecological assessment and estuarine management.

    bibtex

  • Alternative representations of P systems solutions to the graph colouring problem

    James Cooper and Radu Nicolescu

    Journal of Membrane Computing 1(2). 2019.

    DOI: 10.1007/s41965-019-00013-2

    Abstract
    This paper first presents a simulation of the simple kernel P systems solution to the graph 3-colouring problem presented in a previous paper by Gheorghe et al., implemented in a programming style named Concurrent ML, which is based on the concept of synchronous communication between logical processing elements. This paper then presents and informally analy- ses an alternative compact single-cell solution to the same problem using P systems with compound objects (cP systems), which has the benefit of naturally adapting to the use of any number of colours greater than zero—only the specified colour symbols need to be changed. Successful and failing examples of the latter solution are also presented.

    bibtex

  • The Hamiltonian Cycle and Travelling Salesman Problems in cP Systems

    James Cooper and Radu Nicolescu

    Fundamenta Informaticae 164(2-3). 2019.

    DOI: 10.3233/FI-2019-1760

    Abstract
    The Hamiltonian Cycle Problem (HCP) and Travelling Salesman Problem (TSP) are long-standing and well-known NP-hard problems. The HCP is concerned with finding paths through a given graph such that those paths visit each node exactly once after the start, and end where they began (i.e., Hamiltonian cycles). The TSP builds on the HCP and is concerned with computing the lowest cost Hamiltonian cycle on a weighted (di)graph. Many solutions to these problems exist, including some from the perspective of P systems. For the TSP however, almost all these papers have combined membrane computing with other approaches for approximate solution algorithms, which is surprising given the plethora of P systems solutions to the HCP. A recent paper presented a brute-force style P systems solution to the TSP with a time complexity of O(n2), exploiting the ability of P systems to reduce time complexity in exchange for space complexity, but the resultant system had a fairly high number of rules, around 50. Inspired by this paper, and seeking a more concise representation of an exact brute-force TSP algorithm, we have devised a P systems algorithm based on cP systems (P systems with Complex Objects) which requires five rules and takes n + 3 steps. We first provide some background on cP systems and demonstrate a fast new cP systems method to find the minimum of a multiset, then describe our solution to the HCP, and build on that for our TSP algorithm. This paper describes said algorithms, and provides an example application of our TSP algorithm to a given graph and a digraph variant.

    bibtex

  • Concurrent ML as an Alternative Parallel Programming Style for Image Processing

    James Cooper

    2018 International Conference on Image and Vision Computing New Zealand (IVCNZ). 2018.

    DOI: 10.1109/IVCNZ.2018.8634712

    Abstract
    Many approaches to simplifying/enabling the use of parallelism in programming tasks exist. A substantial number of those concentrate solely either on data-parallelism or fork-join-based task-parallelism. Concurrent ML is an alternative approach based around the concept of lightweight individual sub-processes synchronously exchanging messages. This work explores the usefulness of the CML approach in image processing, by applying it to the basic median filter operation and contrasting it with other simple implementations. The results strongly suggest that it is a comparatively poor fit to such an operation, with the one slight advantage of apparently having better peak memory requirements. It is not clear, however, how efficient are either the algorithm implementation or the library it is based on.

    bibtex

  • A Raspberry Pi 2-based stereo camera depth meter

    James Cooper et al.

    Fifteenth IAPR International Conference on Machine Vision Applications. 2017.

    DOI: 10.23919/MVA.2017.7986854

    Abstract
    The Raspberry Pi single-board computer is a low cost, light weight system with small power requirements. It is an attractive embedded computer vision solution for many applications, including that of UAVs. Here, we focus on the Raspberry Pi 2 and demonstrate that, with the addition of a multiplexer and two camera modules, it is able to execute a full stereo matching pipeline, making it a suitable depth metering device for UAV usage. Our experimental results demonstrate that the proposed configuration is capable of performing reasonably accurate depth estimation for a system moving at a rate of 1 ms -1 when in good lighting conditions.

    bibtex

  • Direct Enforcement of Security in Personal Property in New Zealand: Unhelpful Differences Between Acts

    James Cooper

    New Zealand Business Law Quarterly 19(1). 2013.

    Abstract
    Direct enforcement of security in personal property by creditors is primarily governed in New Zealand by three statutes, depending on the details of the security: the Personal Property Securities Act 1999, the Property Law Act 2007 and the Credit (Repossession) Act 1997. These statutes do not always fit together neatly, arguably without benefit, and this article will critique some of the differences between the statutes, and suggest some possible improvements that could be made. Some familiarity with the three Acts is assumed.

Skills

Application Security Tools

  • OSV Scanner
  • Trufflehog v3 (open source)

Cloud Providers

  • Amazon Web Services (AWS)

Continuous Integration/Continuous Deployment Systems & Orchestration Systems

  • Ansible
  • GitHub Actions
  • Makefiles

Code Editors/Integrated Development Environments

  • Emacs
  • Geany
  • IntelliJ IDEA
  • LINQPad
  • Rider
  • Visual Studio
  • Visual Studio Code
  • Xcode

Databases

  • PostgreSQL
  • SQL Server Express

Development Tools

  • Dependabot
  • git
  • GitHub
  • SonarCloud

Frameworks

  • ASP.NET Core
  • BenchmarkDotNet
  • Django
  • DocFx
  • Entity Framework Core
  • OpenCV
  • Radzen Blazor
  • Tkinter
  • xUnit.net

Methodologies

  • Agile
    • Kanban
    • Standup meetings
  • gitflow
  • Test-driven development

Programming Languages

Programming Languages - Used

These are all programming languages with which I have done something non-trivial. It doesn’t include absolutely every language I have ever interacted with, since that would also include all the ones where I never really got past the Hello World stage, and research languages that have never been used for non-research purposes. I have not yet classified them further according to my experience level with them. Plus, I haven’t used some of them for quite a while. They are presented in alphabetical order, but the list is probably incomplete since I might well forget about some languages I haven’t used in some time. Also, just because something doesn’t appear here, it doesn’t mean that I have no interest in it, I just haven’t ever had occasion to do something noteworthy with it.

  • Assembly
    • Alpha
    • LC-3
  • Bash
  • C
  • C++
  • C#
  • Erlang
  • F#
  • Go (golang)
  • Java
  • Javascript
  • Powershell
  • Python
  • Racket
  • Rust
  • Scala 2
  • Standard ML (Mlton)
  • Swift
  • Visual Basic .NET

Programming Languages - Touched

These are programming languages which I have touched on (i.e., at least done Hello World and similar) in the past, but which I don’t consider myself to have done anything truly non-trivial with. I could probably pick them up faster than someone who has never used them, but I wouldn’t claim that I could possibly expect to start contributing to a codebase in one of these languages without first improving my skills further. I would gladly do so, given the chance. Again, they are presented in alphabetical order.

  • CIL/MSIL
  • Clojure
  • Fortran
  • Guile Scheme
  • Haskell
  • Julia
  • OCaml
  • PHP
  • Prolog
  • Ruby
  • SQL3

Programming Languages - Interested

A bunch of programming languages in which I am interested, but have never actually done anything with. I would like to find an excuse to try them out, but there has always been some greater priority.

  • Ada
  • Agda
  • APL
  • Assembly
    • x86
    • ARM
  • BQN
  • Carbon
  • Chapel
  • CUDA
    • C/C++
    • Fortran
  • Curry
  • D (dlang)
  • Elm
  • F*
  • Forth
  • Futhark
  • Idris
  • J
  • Kotlin
  • Nim
  • OpenACC
    • C/C++
  • OpenCL
    • C/C++
  • Pony
  • Raku
  • Red
  • Scala 3
  • Single Assignment C
  • Smalltalk
    • Pharo
    • Squeak
  • Typescript
  • Unison
  • Val
  • Whiley
  • Wyvern
  • Zig

Software Development/Project Management Systems

  • Atlassian Confluence
  • Atlassian Jira

Virtualisation

  • Docker
  • Podman
  • Vagrant
  • VirtualBox

  1. Since I seem to keep encountering confusion about this, “Doctor of Philosophy” is the official title of the degree, in the same way that Bachelor of Arts is the official title for an undergraduate degree in English. It does not (necessarily) mean that someone has studied or researched philosophy specifically—for example, mine was wholly dedicated to Computer Science. I believe the “philosophy” part is a historical artifact, from back when a lot of different studies tended to be referred to as some sort of philosophy. I’m not totally sure on why PhDs have become the norm for all doctorates, but they seem to have. ↩︎

  2. At the University of Auckland, the Honours degree (for most undergraduate degrees) is considered the first level of postgraduate qualification, and is loosely equivalent to the first year of a two-year Masters program. For most faculties, it is not equivalent to North American undergraduate honours systems (though I think in the case of Law and Engineering, it roughly is—go figure). ↩︎

  3. While I certainly consider myself to understand the fundamental concepts of SQL, e.g. joins, I have mostly been able to get away with using ORMs and the like. Thus, I haven’t done all that much writing of SQL directly by hand. This is not to say that I think I have no idea how to work with a database. ↩︎