Avatar

Caner Derici

Software Engineer

PhD Candidate, Computer Science

Sandy, UT, USA

cderici

caner@dericilab.live


Welcome to the extended version of my resume! Here, you'll find detailed explanations of the information presented in my resume, along with a few additional projects and experiences that didn't make it into the PDF version. Click on the titles to explore further. Feel free to send me an email if you'd like to know more.

View Resume PDF

TL;DR

I have expertise in distributed systems, compilers and programming languages.

My tech stack includes: Go, Python, Racket, C/C++, SQL/NoSQL, LXD, Docker, k8s, and more.

I worked at Canonical for over three years on the Enterprise Cloud Engineering (in the Juju team). Here, I gained extensive experience in complex distributed systems. I owned deliverables, maintained release cadence, participated in roadmap planning, coordinated cross-team work, mentored junior engineers, and took part in hiring.

I gained experience on distributed orchestration for managing complex cloud workloads for Kubernetes and traditional Linux apps across various cloud providers (e.g., AWS, GCE). My primary focus in Juju was on the eventually consistent, worker-based distributed back-end. I architected full-stack distributed components, tackled orchestration, fault tolerance, back-pressure handling, and more challenges. Helped API design, and improved the facade-based API server. Helped transition the observer-based data layer from NoSQL MongoDB to relational DQLite (distributed SQLite). Maintained client libraries (e.g., python-libjuju). (see my GitHub)

I'm also currently a post-proposal PhD candidate (all-but-dissertation) at Indiana University, specializing in Programming Languages. I also hold a BSc and MSc in Computer Science, with a specialization in Natural Language Processing and Machine Learning.

A lot of hands-on projects in the academic work, all started with adding tail-calls to a Racket-to-JavaScript compiler as the BSc thesis project. For masters, I developed a question answering system for high-school students. My PhD work focuses on optimizing VM run-times for dynamic languages. Specifically, I'm demonstrating that rapid prototyping an efficient run-time for a self-hosting dynamically typed language (e.g. Racket) on a meta-tracing JIT compiler is achievable.

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 - 2024

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 - 2024

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 - 2024

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 USA since 2015. My wife is a native English speaker.

Programming Languages

My PhD is on programming languages, so I feel confident in coding in any language. My main language between 2020 and 2024 has been Go, and Python. I have plenty of experience in functional languages as well (including implementing new ones). Below are some of the languages I have used. s indicate my current (2024) level of confidence in writing programs in the corresponding language.


Go
My day to day at Canonical involved working on both Juju and the terraform juju provider, all written in Go. Experienced in fault-tolerance practices, interface design, channels and goroutines, back-pressure, and many more.
Python
My role at Canonical involved 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).
Racket / Scheme / Lisp
Programming and teaching in Racket since 2005, used it for both everyday programming and projects. (see the sections above)
C/C++
Implemented a file-system for Minix on a BeagleBoard. Also wrote a garbage collector for rax compiler (see Projects). Made some games with OpenGL and studied graphics programming.
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.
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)