Avatar

Caner Derici

Canonical Ltd.

PhD Candidate, Computer Science

Sandy, UT, USA

cderici

caner@canerlab.live


Welcome to the extended version of my resume. This page contains sections for the details/explanations of what you see in my resume, as well as a couple of additional projects and past experiences I didn't include in my resume pdf. Click on titles to see the details. You're more than welcome to send me an email if you'd like to get more information.

View Resume PDF
Nerdy TL;DR

I'm a practice oriented computer scientist, and like to get involved in the details. I like working in high pace dynamic settings and make stuff happen, preferably with a good team.

Early in my career I worked with Racket and Python for many years, mostly written functional code. I also have experience in object oriented designs and imperative languages as well. I am particularly good in test-driven approaches and stubborn in debugging. Nowadays I'm coding mostly in Go and Python in the Juju core team at Canonical, working on core Juju, as well as other things like the client libraries of Juju API, such as python-libjuju, and the terraform juju provider.

I prefer collaboration and team work to competition, (good) tea to (good) coffee, kindness to power. I equally and unconditionally like all the bi-pedals and poly-pods alike.

My academic work involved a lot of hands-on projects, all started with adding tail-calls to a Racket-to-JS compiler as a part of my undergraduate thesis project. In my masters I studied Machine Learning and Natural Language Processing; my work was about developing a question answering system for high-school students. Currently, my PhD work is about fast run-times for dynamic languages. In particular, I'm trying to show that rapid prototyping an efficient run-time for a self-hosting dynamically typed language (e.g. Racket) is achievable using an automatically generated tracing JIT compiler on RPython framework. You can see the details for all of them down below.

[click on a title to see details]

Education

PhD Computer Science - Indiana University, IN, USA
2015 - 2021

Specializing on Programming Languages (PL) under the supervision of Sam Tobin-Hochstadt, minoring in Logic at the Department of Philosophy.

I'm working on fast run-times of dynamically typed languages, particularly Racket. When I started, I was initially trying to figure out the effects of using Racket byte-code compiler as a front-end for Pycket, i.e. investigating the individual effects of various optimizations happening in the Racket compiler to the Pycket run-time, such as heavy inlining and/or lambda lifting.

While we were working on that, Racket decided to make the language more portable, and started adopting Chez Scheme as its run-time. So I decided to join the fray and took a different direction.

At that time, we had a rudimentary Racket implementation we were working on, namely Pycket, which is a meta-tracing JIT compiler automatically generated by the RPython framework, designed to demonstrate that efficient sound gradual typing is possible. In the new direction of research, I first helped to make the Racket more portable (see Publications), and helped it to adopt the Chez Scheme fully. And then mimicking Racket's self-hosting on Racket-on-Chez, I turned the Pycket into a full implementation of Racket, thereby having a meta-tracing JIT as a run-time for Racket.

PyPy project has shown that fast prototyping of efficient run-times for dynamic languages is possible through meta-interpretation (tracing not the user program, but the interpreter that runs it). The aim of my research is to take the meta level one step further, and show that with this setup, fast prototyping efficient run-times for self-hosting dynamic languages is also achievable.

Currently, Pycket is able to run just as fast as before on the benchmarks in previous studies. However, self-hosting comes with a big problem for tracing JITs; giant dispatch-loops. This is essentially the same problem that Mozilla has faced quite a while ago with TraceMonkey, which is basically that you lose more when slow than you gain when fast. My work suggests some workarounds for this problem and tries to show that an efficient run-time with a meta-tracing JIT is still achievable for fast prototyping self-hosting dynamic languages.

PhD Computer Science - Boğaziçi University, Istanbul, TR
2014 - 2015

This was the continuation of my masters on natural language processing and machine learning. After researching for another year on the system I built, I decided to pursue a PhD on programming languages instead.

MSc Computer Engineering - Boğaziçi University, Istanbul, TR
2011 - 2014

I was part of the Text Analytics and Bio-Informatics Lab. Studied the theory of computation, automated theorem proving, then focused on machine learning and natural language processing. Worked on closed domain question answering systems for Turkish high-school students. (government funded project)


Thesis title
Question Analysis and Information Retrieval For a Turkish Question Answering System:HazırCevap ( pdf )

Supervisors
Tunga Güngör, Assoc. Arzucan Özgür, Günizi Kartal

Abstract
This study describes and evaluates the techniques we developed for the question analysis and information retrieval (IR) module of a closed-domain Turkish factoid Question Answering (QA)system that is intended for high-school students to support their education. We propose novel methods for two major problems in question analysis, namely focus extraction and question classification, based on integrating a rule-based and a Hidden Markov Model (HMM) based sequence classification approach, both of which make use of the dependency relations among the words in the question. We also built an IR module that searches for the relevant documents and passages through the combined use of search engines Indri and Apache Lucene.
BSc Computer Science - Istanbul Bilgi University, Istanbul, TR
2005 - 2010

Got both theoretical and practical experience. Programmed in both imperative, functional, logic languages. Concentrated on the theory of computation, and programming languages, design and implementation.


Thesis title
Proper Tail Calls From First-Class Continuations in JavaScript ( pdf | tex )

Supervisors
Chris Stephenson, Shriram Krishnamurthi, Alpaslan Parlakçı, Matthew Edwards

Abstract
This study demonstrates that a proper tail-calling behavior on JavaScript is possible while refraining from any modification on interpreter. It is based on the paper titled Continuations from Generalized Stack Inspection, by Pettyjohn et al., in which a novel program transformation is presented for JavaScript programs to obtain first-class continuations from exception handling mechanism. My thesis takes it one step further, showing that by using this continuation model on JavaScript, achieving a tail-call optimized computation is possible, without ever touching the interpreter.

[click on a title to see details]

Experience

Software Engineer II, Canonical Ltd.
2021 - Present

Working in the Juju core team, which is 15 people globally remote. I'm helping to develop and maintain client packages and libraries of Juju. In particular I work on the juju's own cli, and python-libjuju, a Python library that allows programmatically interacting with Juju, and also the terraform juju provider, which allows using Juju with Terraform. I do a bunch of hiring, code review, as well as documentation work.

Course Instructor, Indiana University, IN, USA
Spring 2021

Taught Introduction to Computer Science (HtDP Style Functional Programming) with Racket.

TA & RA, Indiana University, IN, USA
2015 - 2020

Taught Advanced Compilers, Introduction to Programming (in Racket), and the domain specific language design and implementation with Sam Tobin-Hochstadt for 1 semester. I was a research assistant for Sam for 5 semesters and 4 summers.

Product Development Specialist, Asseco South-Eastern Europe, Istanbul, TR
2012 - 2013

Worked on developing the back-end of the virtual point-of-sale applications between merchants and banks. Used Java, Spring, Tomcat, Mercurial, Jira.

Hackathonist’14, Istanbul, TR
2013

Developed a Google Glass application (running on a mock glass API) that talks with the CitySDK, and enables the use of open city data provided by Istanbul Municipality for various smart city tasks (such as finding a suitable bus-route).

Computer Science RPG, Istanbul, TR
2013

I created an extra-curricular game for students to "level up" their computer science skills. Each level required learning some concepts and solving some problems in a constrained way. I lead a team of undergraduate students as they try to level up.

TA, Istanbul Bilgi University, TR
2010 - 2013

Taught 6 semesters; Data Structures & Algorithms (in Java), Principles of Programming Languages (in Racket), Database Systems (with Data Mining).

Instructor, Nesin Math Village, Şirince/Selçuk, TR
2011

Taught Lambda Calculus to Math graduate students, and “Programming=Algebra” to high-school students with Chris Stephenson.

Conference Reviewer, TR
2014

Reviewed two papers on statistical information retrieval for SIU2014, and a paper on question answering systems for COLING 2014.

VII. International Conf. on Webometrics, Infometrics and Scientometrics (WIS), Istanbul, TR
2011

Lead the preparation and compilation of the Book of Abstracts and the Proceedings.


[click on a title to see details]

Projects

Juju
2021 - Present

Juju is an orchestration and modeling tool for deployment of complex cloud workloads. It manages the life-cycle of the charmed operators for Kubernetes and traditional Linux apps, with declarative relations between operators for automated microservice integration. It also facilitates day 2 operations, such as scaling, upgrading and monitoring. I work in the core dev team (of 15). I'm involved in maintaining the main clients (e.g., cli, python-libjuju) and the facade API, charmhub integration, worked on data schema for moving from MongoDB to dqlite, and general bug fix and maintenance. Mainly in Go and Python.

Terraform Juju Provider
2022 - Present

Terraform Juju Provider is a terraform provider that enables integration with Juju while managing terraform environments. Started developing as part of my work on the Juju API. Implemented new features, worked on moving from using sdk2 to the new terraform provider framework, maintained release cadence of new versions. All in Go.

Pycket
2016 - 2021

A meta-tracing JIT initially designed to reduce the overhead of sound gradual typing, nowadays a run-time for self-hosting full Racket. I am the main developer and maintainer. I re-implemented the front-end to make the Racket bootstrap itself on Pycket, i.e., achieved a full Racket implementation on RPython framework. Developed performance debugging tools, implemented various optimizations and large number of run-time primitives. Maintained and improved the data structure implementations (hash tables, vectors, structs etc.). For details, see my PhD description.

[https://github.com/pycket/pycket]

Rax
2016

A full-stack nanopass compiler from a small subset of Racket all the way down to x86_64 assembly. Started for fun, collaborated with a friend to turn it into a school project, then it turned into an open source project. Built and tested all the passes (e.g. closure conversion, register allocation, code-gen, etc.).

[https://github.com/cderici/rax]

Correctness Proof of a Closure Conversion Pass
2018

I collaborated with Jeremy Siek and Matthew Heimerdinger to help prove the correctness of a closure conversion pass of a compiler for a functional language represented as denotational semantics in Isabelle.

[https://github.com/madheime/denotsem-compiler] (might be a private repo)

HazırCevap
2013 - 2015

A closed domain question answering system for high school students. Funded by TUBITAK (The Scientific and Technological Research Council of Turkey). I lead the research and development, 3 faculty members (both from CS and also School of Education) and 4 grad students were involved. This was my MSc thesis work, so I worked on pretty much everything about it (see Publications). I developed a hybrid model for question analyzing (Hidden Markov Model along with a rule-based model), developed a reliability score for web-pages/documents, used the Indri search engine for processing and retrieval for answer generation, implemented both the front and back-end in Python.

Sessizliğe Oku (Read to Silence)
2014

Did you know that it's very hard for Deaf people to read? Well I didn't. Apparently reading for Deaf people is a sort of learning a new foreign language. This is a joint work with the Department of Western Languages & Literature to build a web-based application to teach people with hearing disability how to read. Two faculties from Linguistics, one from CS, and two RAs were involved. Project aims to develop a stable framework on which the Turkish grammar lectures and exercises for Deaf people can easily be provided. I collaborated with the linguists to implement the application (available on both PC and mobile) that’s designed specifically for Deaf people. Used JavaScript, HTML and PhoneGap.

Direnaj: Social Network Data Processing Framework
2013 - 2014

Data Collection, Processing and Visualization Framework for real-time social network data, lead by Suzan Üsküdarlı. 4 faculty members and 7 grad students were involved. I developed parts of the processing library with JavaEE, implementing certain tools used for various kinds of analyses, such as centrality analysis, stop-word collection, etc.

[http://direnaj-staging.cmpe.boun.edu.tr/] (might be private because of the Twitter privacy terms)

FARS: Functional Automated Reasoning System
2012

This is a resolution-refutation style automated theorem prover. I developed it for fun at first, then I turned it into a project for school. Written all in Racket by myself.

[https://github.com/cderici/FARS]

Tail call elimination on Racket->JS compiler
2009 - 2010

This was my undergraduate thesis (see BSc description). It was a project from Brown University under supervision of Shriram Krishnamurthi, a compiler from Racket Advanced Student Language to JS and HTML. I participated in the development of both compiler and run-time libraries. My major contribution was to add the tail-calls. Nowadays it is used on WeScheme by the Bootstrap curriculum.

[https://github.com/cderici/moby-scheme]


Publications

  • Rebuilding Racket on Chez Scheme (Experience Report) [ PDF ]
    Supplementary material
    Matthew Flatt, Caner Derici, R. Kent Dybvig, Andy Keep, Gustavo E. Massaccesi, Sarah Spall, Sam Tobin-Hochstadt, Jon Zeppieri. ICFP 2019
  • A closed-domain question answering framework using reliable resources to assist students. [ PDF ]
    Caner Derici, Yiğit Aydın, Çiğdem Yenialaca, Nihal Yağmur Aydin, Günizi Kartal, Arzucan Özgür, and Tunga Güngör. Natural Language Engineering 24(5): 725-762 (2018)
  • Question analysis for a closed domain question answering system: Hazırcevap. [ PDF ]
    Caner Derici, Kerem Çelik, Ekrem Kutbay, Yiğit Aydın, Arzucan Özgür, Günizi Kartal, and Tunga Güngör. CICLING15, Springer Lecture Notes of Computer Science, November 2014.
  • Rule-based focus extraction in turkish question answering systems. [ PDF ]
    Caner Derici, Kerem Çelik, Ekrem Kutbay, Yiğit Aydın, Arzucan Özgür, Günizi Kartal, and Tunga Güngör. SIU14 (Signal Processing and Communication Applications Conference), Trabzon, TR, April 2014.
  • Worldwithweb: A compiler from world applications to JavaScript. [ PDF ]
    Emre Başar, Caner Derici, and Çağdaş Şenol. Scheme and Functional Programming 2009, Boston, August 2009.

Natural Languages

Turkish
Native
English
Lived in US since 2015. All the education was in English. Wrote 2 dissertations (BSc and MSc) and numerous publications in English.

Programming Languages

My PhD is on programming languages, so I feel confident in coding in any language. So far I have been using mostly the functional languages (including to implement new ones), however, I feel confident in a variety of programming paradigms. Below are some of the languages I have used. s indicate my current (2021) level of confidence in writing programs in the corresponding language.


Python
My SWE position at Canonical involves mainly developing and maintaining python-libjuju. Also my whole PhD work (Pycket) is in RPython (restricted Python). Also my MSc work (information retrieval and natural language processing) was completely in Python (see HazırCevap project).
Go
My day to day at Canonical involves working on both Juju and the terraform juju provider, all written in Go.
Racket / Scheme / Lisp
Programming and teaching in Racket since 2005, used it for both everyday programming and projects. (see the sections above)
Java
Worked for a year for a software company that used Java to develop software (e.g. virtual point-of-sale) for financial institutions (e.g. banks). Correct & clean code as well as security were main focuses. Also developed toy mobile applications on Android for fun.
C/C++
Made some little games with OpenGL and studied some graphics programming. Also developed a mobile application on Samsung’s (now very dead) Bada 1.0 platform.
JavaScript
Implemented tail-calls and wrote some run-time support primitives for the Racket-to-JavaScript compiler being used in https://www.wescheme.org/ for the Bootstrap curriculum.
Misc.
At some point I’ve written code in; SQL for DB, Matlab and R for statistical analysis, CSS for the web, Yaml, Json, XML for configs etc.

Skills

Clear Code & Testing
Keeping track of latest/trending techs
Time & Resource Management
Team-work & Communication
Attention span & Keeping focus
Self-motivation
Coding fast
Testing against dumb mistakes

Technical

Linux
Using Linux on my PC every day since 2005, all my setup is in Linux .
Latex
Using since 2005 for all documents, e.g. my dissertations and papers etc.
Emacs
Not a power user yet, but I’ve been using it everyday for about six years.
Goland / VSCode
Not a power user yet, but I use Goland for day to day work, sometimes VSCode as well. .

Personal

Electric Guitar & Music
Used to be a semi-professional musician, played in many rock bands since I was 12, managed music studios for 2 years. Decided not to pursue professionally. Now I make songs only for my wife :) You can watch some of my guitar covers on YouTube.
Fantasy Role Playing
10 years of playing (and dungeon mastering) since my late teens to mid twenties (mostly D&D 3.5e and AD&D)
Tango
Took lessons for 6 months with my sister. I was terrible, but I liked it.
Starcraft II
Diamond 1 Zerg on NA. Here is my battle net profile.

Scholarships

  • Research Scholarship for MSc (3 years), fully funded by TUBITAK
  • Scholarship for a research project on teaching natural languages to hearing impaired. 2014. Funded by KOÇ Foundation.
  • Full Scholarship for BSc, 2005-2010, Student Selection and Placement Center (OSYM)