I am an experienced full stack web developer and have proven myself across a variety of challenges involving designs, implementations, and minimum viable products.
I understand what business needs are and can translate these into prototypes, frameworks and, well, code ;)
I am particularly strong in building applications that need to run on real-world mobile networks where LTE speeds are not always available, which is nearly everywhere!
code qualityI am as much curious, open, and learn quickly as I am collaborative. I combine all this with an abstract thinking skill worthy of my academic background, which is PhD in maths. This means my code is neat, and therefore scales easily and is easy to maintain. More importantly however, my code is easily comprehensible for others who join the team. This is super important in agile development with teams that (may) rotate quickly.
web performanceI have a thorough understanding of web. I have experience pursuing memory leaks, track performance issues in hot code and can code high-performing css animations that run at 60FPS on mobile.
usability, ui & accessibilityWeb should be as inclusive as its interactive. Both usability and accessibility is key. Often, good design calls for accessible UI that is easy to navigate with keyboard only input for people with disabilities. I have experience with HTML5 and ARIA (Accessible Reach Internet Applications). I keeping the original semantic of native elements, this is really important in building usable components by variety of people with different habits from ‘all parts of the web’.
maintaince, testability and deadlinesWhen designing code, I think forward and craft my code in a way that others can pick it up easily. This also means other components can be added on at little effort.
Testing code early is paramount. On tight deadlines there’s often not enough time to write thorough tests. If that’s the case, I go back and write the necessary test, resolve compromises done to meet deadlines. In the long run, wise code reviews always pay back.
functional programmingI am an advocate for functional programming. It often brings clarity, projects become easier to comprehend and allow for a reasonable way of managing side effects.
Some of the most recent projects I worked for:
At the moment I am working at Gravicus and I am responsible for front-end development. We decided to build ui with PureScript and React. I setup various projects using Redox, my PureScript implementation of redux architecture (using free monads paired cofree comonads).
I've been also responsible for implementing pixel perfect designs closely working with our designer. Writing complex ui elements using pseudo-elements and well designed modern css. I've decided to try postcss. It introduces proper scoping of css which avoids problems in the long run. It fits well into functional programming paradigm with its composition of css classes (it tames side effects of globally scoped css and introduces composition of css classes which is obeys the laws of a semigroup).
I setup unittest which runs both in node with purescript-test-unit and in
the browser using karma runner. Before taking up this
role I wrote a library to run
purescript-test-unit using karma runner in
a browser environment and bindings for the airbnb's enzyme react testing library.
This allows us to properly test react components and
write test in PureScript.
Redox architecture which splits the redux interpreter
from the DSL allows to plug an interpreter designed for
tests which can mock data, pretend request. This will
allow us to have a very good testing architecture for
our work. This is based on my work published on github:
and my purely functional routing library
This is an open-source project which provides a
tree shaking algorithm for
It outputs a set of CommonJS modules which can be
bundled with webpack, rollup or any other tool.
zephyr allows to build lazy loaded
applications that are also properly minified before
shipping. This opens new possibilities in the
Redux architecture for
PureScriptapplications, that focuses on correctness and compostability and testability. It is using a pairing between free monad (DSL) and a cofree comonad (interpreter). Interestingly you can compose DSL's (taking a sum) and compose the corresponding interpreters.
React bindings for Redox.
React router modelled using a
Cofree Arraycomonad. This is not surprising if you realise that DOM can be modelled by
Cofree Arraytree structure. The comonad gives nice api for declaring routes and the library provides combinators for querying mounted components.
PureScript React bindings that provide safe way of dealing with advanced react features like refs, mutations of the react element (storing callback references, DOM references). It has no runtime overhead. The safety is provided by tracking the changes of a
ReactThisin an indexed monad.
A free monad DSL which provides a interface for writing React vDOM tree. It is interpreted during execution time so it has a runtime cost. It is similar to BlazeHTML library. Together with redox this provides an alternative for pux.
This is a small bridge that lets run purescript-test-unit tests in a browser using karma runner.
purescript-vim and psc-ide-vim
I am maintaining the first one, and I rewrote the second one. These are vim plugins that makes Haskell devs cry ;).
I have delivered progressive web apps written with ReactJS and Knockout and relied on custom Rubble logic language for the backend as well as Python and NodeJS.
Along the way, which was super exciting for me, I have also picked up a new programming paradigm: logic programming utilising programming language Rubble, which was developed fully in-house. It is a fully declarative rule engine and process engine, with forward and backward chaining and syntax inspired by Prolog. I proofread the documentation and helped to debug critical issues; I rebuilt web interface for it using websockets for instant communication using ReactJS.
I worked as a backend and frontend engineer. This was my first real React application, pre flux, or react-redux era...
In my work as back-end dev, I focused on development and maintenance of various parts of the system including reviewing complex logic at the backend. In addition to that I was also busy with the front-end.
This was an exciting time for me to work on a small Angular application backed by a github data on open source community and using the pygit2 (libgit2) library. For this project I worked as a full stack web developer and delivered a proof of concept in almost no time :)
TellTermsSocial platform for sharing enriched hyperlink text connected to LinkedIn .
I worked both as a backend and front-end developer. I implemented pixel perfect designs handed by the design team. There was a big issue with legacy code at the beginning. After initial struggle with a single page app written by the previous team (using just jQuery) I advocated for using angular and I rewrote the application using modern approach. This was a difficult decision for managers but after all they understood the benefits they got - much more reliable code base, well tested - hence more happy workflow for every body in the team and the users.
ChronchChronology app for lawyers.
This project, developed with a team of legal professionals, asked for a tool to collaborate on a knowledge base in legal cases.
It was exciting to closely collaborate with people of different background whose needs had to be addressed. Action from the ground up.
EdurinoEmail-based micro-learning application
The service targeted busy professionals who wanted to learn new skills. Where I helped was with my expertise in fat back-end and thin front-end applications.
With today's technologies, like service workers - these kind of apps can be heavily optimised as well (here is a link to an interesting issue that was present on github.com, where fresh pages loaded faster than client side routing, and a solution using by streaming the content into browser’s HTML parser).
Some papers and preprints that I authored or coauthored:
A Logic-Based Representation
for Coalitional Games with Externalities
AAMAS2010 The Ninth International Conference on Autonomous Agents and Multiagent Systemsgame theory
Computational Aspects of Extending the Shapley Value to Coalitional Games with Externalities
ECAI2010 19th European Conference on Artificial Intelligencegame theory
On a question by Markus Seidel
Operator Theory, Operator Algebras and Applicationsoperator theory
Total space of abelian gerbes
International Journal of Modern Physics A
Galois Theory for H-extensions
PhD dissertationgalois theory hopf galois extensions