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.
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.
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.
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.
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)
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.
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.
Taught Introduction to Computer Science (HtDP Style Functional Programming) with Racket.
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.
Worked on developing the back-end of the virtual point-of-sale applications between merchants and banks. Used Java, Spring, Tomcat, Mercurial, Jira.
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).
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.
Taught 6 semesters; Data Structures & Algorithms (in Java), Principles of Programming Languages (in Racket), Database Systems (with Data Mining).
Taught Lambda Calculus to Math graduate students, and “Programming=Algebra” to high-school students with Chris Stephenson.
Reviewed two papers on statistical information retrieval for SIU2014, and a paper on question answering systems for COLING 2014.
Lead the preparation and compilation of the Book of Abstracts and the Proceedings.
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 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.
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.
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.).
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)
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.
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.
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)
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.
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.
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.
Technical
Personal