Skip to content

Instantly share code, notes, and snippets.

@ekoka
Last active October 19, 2023 12:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ekoka/9c58cdbed6ed8567947fb39e18d0be04 to your computer and use it in GitHub Desktop.
Save ekoka/9c58cdbed6ed8567947fb39e18d0be04 to your computer and use it in GitHub Desktop.
resume.json
{
"basics": {
"name": "Michael Ekoka",
"label": "Software Developer",
"email": "michael@sundry.ca",
"summary": "I'm a problem solver who aims to build things that help improve people's quality of life, using technology as a tool. I like to imagine that the time that they save could be transferred to doing something else they enjoy.",
"location": {
"city": "Montreal",
"countryCode": "CA",
"region": "Canada"
},
"profiles": [{
"network": "SO",
"url": "https://stackoverflow.com/users/56974/michael-ekoka"
},{
"network": "GH",
"url": "https://github.com/ekoka"
},{
"network": "LI",
"url": "https://www.linkedin.com/in/michaelekoka/"
}]
},
"work": [{
"name": "Alternative Capital Group (ACG)",
"position": "Software developer (contractual)",
"url": "https://www.alternativecapitalgroup.ca",
"startDate": "2022-11-01",
"endDate": "2023-07-07",
"summary": "ACG is an investment firm. I took over as sole developer and maintainer of their 5 year old customized platform, which consists in (1) an investment portfolio management system for ACG's clients and (2) a control panel that includes the more sensitive administrative tasks to be performed by ACG's staff. Upon assuming my role, I found the system to be utterly undocumented and plagued with heavy technical debt. It also needed a number of updates and the development of new features.",
"highlights": [
"To acquaint myself with the business rules, I went the old-fashioned way, reading the source of the different code bases, database schema, and queries.",
"I identified antipatterns and salient points that would need addressing to bring the project closer to common recommended practices.",
"To spread the cost of this overhaul for ACG, I suggested a multi-year plan that involved gradual refactoring, development, and software updates. I set some specific objectives: (1) to make the code base easier to reason about, thus facilitating its maintenance and ongoing development; (2) to make it easier to hire and onboard future developers, thus making myself unneeded; (3) to fix various inefficiencies along the DB/UI pipeline, which manifested as systemic sluggishness for end users.",
"In the process of building the new features requested by ACG, I addressed some of the aforementioned issues and started executing on the refactoring plan.",
"Two of the most impactful tasks involved (1) encapsulating lengthy scripts (sometimes well over a thousand lines of code), practically devoid of abstractions, into clearly named and organized modules and functions; (2) rewriting and optimizing SQL queries to reduce the back-and-forth between the UI, the API, the Database, and the disk.",
"The project's main tech stack includes: Python/PostgreSQL (via Flask & SQLAlchemy), Node.js (Express). The live assets are running on AWS (EC2 and RDS)."
]
},{
"name": "OPAL-RT Technologies",
"position": "Software developer",
"url": "https://www.opal-rt.com",
"startDate": "2020-03-09",
"endDate": "2021-03-14",
"summary": "OPAL-RT creates real-time simulation solutions to help the development of electronic and power systems across various industries. I was hired as part of the \"Unified Database\" (UDB) project, the persistence layer of OPAL-RT's Schematic Editor (SE) software. The UDB was built using as its central piece PostgreSQL. It served as the database engine, the HTTP server, and the Python runtime (yes, Python running *inside* Postgres as a procedural language!) The project had started 3 years prior my debut and the team, until then only made up of electrical engineers with little software development experience, had accrued some considerable technical debt.",
"highlights":[
"Having Python code run inside Postgres raised many challenges, one of which was the difficulty to unit test. I reorganized the UDB's Python code base and built a utility that allowed to seamlessly test it, as though it had been defined to run outside Postgres.",
"I introduced and integrated Pytest to the project, in replacement of the previous in-house, idiosyncratic, and thoroughly undocumented tool that we were using for tests.",
"I designed and built a specialized search engine for Schematic Editor using Postgres' buit-in search capabilities specifically adapted and customized for SE's business rules and usage patterns.",
"I initiated the extraction of Python out of the database, toward a more classical architecture, with business logic in its own separate runtime space, and interfacing with the database.",
"At the request of Schematic Editor's front-end team, I built a small JSON API to interface with the database.",
"I created a Windows installer to bundle the UDB and ease its installation for other development teams. Upon unpacking it installed in an isolated space: a Postgres instance, the SE data, a Python interpreter, and an HTTP server, all running and serving.",
"As part of OPAL-RT's upcoming \"Unified Controller\" project, destined to replace a number of legacy assets, I reviewed the strategic trade-offs of adopting different languages specifically for OPAL-RT and recommended and instigated the adoption of Golang.",
"I built the scaffold for the upcoming HTTP API for the new Unified Controller using Go and Postgres.",
"The 3 techs that dominated my working experience at OPAL-RT were Postgresql, Python and Go, running atop Windows."
]
},{
"name": "Producelist",
"position": "Solo founder and developer",
"startDate": "2017-12",
"summary": "Producelist is rising from the ashes of a past defunct project that aimed to simplify product inquiry and ordering for small and medium wholesalers (and buyers). The project initially ended in July 2019. It's currently being repurposed to help small farmers quickly sell their (perishable) goods and has been accordingly renamed. The overhaul is a work in progress and the code will likely be open sourced. A demo of the old running app and the source code are available upon request.",
"highlights":[
"The assets include a JSON formatted API interacting with 3 SPAs: an account management system, a product management system, and an inquiry catalog interface.",
"The backend was originally built with Python/PostgreSQL (Flask & SQLAlchemy), along with some usual acolytes (Pytest, Celery, etc).",
"The SPAs were built using Vue.js (version 2).",
"As part of the current overhaul and inspired by a stronger focus on simplicity, I'm very much considering porting the backend to Django and replacing Vue.js with HTMX."
]
},{
"name": "Brazen",
"position": "Co-founder and technical lead",
"url": "https://brazen.ca",
"startDate": "2010-01",
"endDate": "2016-04",
"summary": "Brazen was a development studio in Montreal, dedicated to the design and realization of technology driven solutions for its clients. As part of my duties I oversaw and was directly involved in various phases of the development cycle of projects. I also spearheaded Brazen's continuous evalutation and adoption of promising tech trends, tools, and practices.",
"highlights":[
"In 2010, I built Brazen's first development scaffold based on Zend Framework (PHP) and MySQL. It would go on to support numerous projects for our clients over the following three years, such as information management systems, web applications, and websites.",
"In mid 2011, I suggested that we start orienting to Python and PostgreSQL for the future, motivated by my observation that a programming language is not just a code writing tool. It's also a community that ultimately nurtures and influences your long term practice and growth as a developer.",
"In 2012, I built Brazen's second development scaffold based on Flask, SQLAlchemy and PostgreSQL. After observing that front-end JavaScript libraries where becoming increasingly powerful, I also suggested that we embrace an approach to build web applications, where the backend serves a JSON based API (rather than HTML) to a JavaScript-centric front-end.",
"In 2014, we started experimenting with the microservice architecture to speed up development and to manage a certain level of applicative complexity. In our case, the approach was generally successful, but we also experienced some of its drawbacks.",
"Some of the many clients that benefitted from our experience at Brazen are the Canadian Centre for Architecture (custom featured management systems and web site), Ivanhoe Cambridge (custom management system to administer its many shopping malls' websites)",
"During my tenure at Brazen, we built dozens of ultimately successful projects for our clients.",
"I like to think that our orientation to challenge ourselves and experiment also helped the people that transitted through our little hub, whether as freelancers, interns (always paid :)), or employees, to grow."
]
},{
"name": "Freelance web developer",
"startDate": "2008-01",
"endDate": "2009-12",
"summary": "The two years prior to starting Brazen, I honed my teeth as a web developer. I got familiar with a number of development practices by working in and studying the code of a variety of PHP frameworks. Namely, CodeIgniter, CakePHP, and Zend Framework. Along with PHP, I also got to practice my rudimentary SQL skills with MySQL. During this period I built a number of custom CMS and websites for various clients. Most of my work from that time can be glanced via the Wayback Machine, for instance the version of Showbizcafe.com from approximately August 2008 to sometime in 2013."
},{
"name": "Plank Design",
"position": "Junior web developer",
"url": "https://plankdesign.com",
"startDate": "2007-01",
"endDate": "2007-12",
"summary": "The year spent at Plank was the debut of my professional career as a web developer. During that time I worked on a number of projects that introduced me to seminal concepts, such as web frameworks and software design patterns."
}
],
"languages": [{
"language": "English"
},{
"language": "French"
}],
"projects": [{
"name": "Vino",
"url": "https://github.com/ekoka/vino",
"startDate": "2014",
"description": "Vino is a Python data validation library that I started a while back. Although operational and used in a few personal projects, I've never had the time to iron out all the kinks and publish it. It aims to be quick to learn and master, while offering behind its deceptively simple interface some flexible and powerful validation semantics. Due to the prevalence of other capable Python libraries in that problem space (e.g. Pydantic, Marshmallow), I'm considering porting the code to some other language that I'm interested in and that might need it more."
}]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment