Who is Bogdan?

You can call me Badu.
November 10, 2017
Bogdan Dinu Curriculum Vitae Resume

About 21 minutes of reading.


Skills | Experience | Education | History


Note for Recruiters

For those of you that are trying to relocate me, please understand this is not the case. At least not for now. Please read this and F.A.Q. prior to contacting me. Thanks in advance!


Hello,

my name is Bogdan and I am a Go language enthusiast. In case you want to skip to Go language skills, click here.

I’ve started to program computers in 1991.

I was an entrepreneur. I’ve been a mentor.

Proven leader and project manager, providing technical oversight for small teams of software developers.

I’ve driven architecture decisions and lead projects from concept through the release process.

I learn quickly, care about detail, and love computers, physics and mathematics.

Contact information

You can write me on badu[at]badu.ro, contact me on Skype as badu[dot]bogdan or use the links at the bottom of the page.

Skills

Experience

Golang Developer

(November 2017 - now)

Technical Lead at Activemall

(April 2015 - October 2017)

Senior Software Consultant at Altfactor

(October 2013 - March 2015)

Senior Software Developer at Workzone (Norway)

(February 2010 - May 2013)

Adobe User Group Manager for Romanian Flex User Group

(2009 - 2012)

Freelancer for various clients (U.S. and Europe)

(2007 - 2010)

Entrepreneur Synergy Design

(2003 - 2007)

Programmer at Secure Software

(2002)

Education

I have a master degree in naval engineering, and graduated from the University of Low Danube Galati in 2002.

During studies, I have developed engineering software to help with calculus in various disciplines like mechanics and materials resistance.

For my final-year project I designed a software being able to calculate the heat transfer in the galley, using the finite element method.

Master degree’s project was also a software based on finite element method, which calculates vibration and noises on main crankshaft of the ships.


History

After more than 25 years of experience, I can say “what a journey”. I won’t bore you with stories about how I’ve started to program or the fact that I know assembly language for 8086 CPUs.

The reason for this section here is not to brag about my accomplishments - I feel that there is no faster way to get introduced, other than briefly present my journey.

I have grouped some of my experiences by category, presenting you briefly with what I’ve learned in my life (not only as a developer) along the way.

Videos

A large project I’ve been working on was code named Fluvi.

It was the era of Adobe Flash, Flex and all the neat work that Adobe did to push the browser experience farther.

What could you do with Fluvi : you could deliver recorded videos or live streams to Internet consumers. The live streaming was done with Wowza Media Server, which was written in Java and you could develop plugins for it. As a side note, because of Wowza, I’ve started my Java era.

Fluvi had an automated workflow for uploading videos to a server cluster from which those videos were tagged using metadata, encoded to various formats (e.g. “.mp4” to “.flv”). We’ve called that transcoding. That’s how I gained experience in video encoding, decoding, streaming and all the real time related problems.

All video content could be used either as an embed video in an article (using integration with content management systems) or as a stand alone solution using a video portal.

Fluvi was also an archive system for videos and other resources as well, so we had to build an Elasticsearch based search engine.

Both player and portal were customizable in terms of look-and-feel and there tools for skinning them. This customization could be done for each client-company.

The live broadcasting tool (code named Livecaster), allowed users to control a live event and combine video with synchronized slides, near or on top of the player. Livecaster was suitable for transmission of press conferences, lectures, council meetings.

For live events the participants that were attending the event via Internet, could post live questions that were sent in real time to the moderators (and, of course, the answers were live).

Last but not least, I’ve built an Android application, packed with Adobe AIR and written entirely in ActionScript that allowed live webcasts from an Android device. The application connected to Fluvi backend and started to stream from the mobile phone video camera. In order to save mobile phone battery and optimize application’s speed, I’ve used OpenGL capabilities.

As you can tell, this was probably the most experience bringer project of them all : Java, live streaming, heavy search engines, not to mention the Actionscript and Apache Flex SDK for which I was brought on the project. According to my colleagues back then, I had important contributions to the architecture of the whole system from frontend to backend : they used to laugh about my sayings mimicking me with a German accent - “to be very precise”!

Experimental (Cutting Edge)

During my Adobe era, I’ve met two enthusiasts that were trying to build a multi touch table. This was long before you could buy such a device from the market.

I’ve joined their cause probono (yeap, no money - just fun) and built an Actionscript 3 SDK for creating multi touch applications, based on FLOSC / TUIO. Among the demo applications were Draw (like Paint but with ten fingers), a Puzzle, a Media Viewer, Fluids (for nice visuals), Piano, Ping Pong game, Hockey game. These were created for helping them showcasing the multi touch tables to potential customers. Worth mentioning that demo applications had to solve quite a number of problems, mostly optimizations for speed.

In the end, I advised them to switch to Java, since they needed more and more speed and Actionscript was not multi threading capable. They still exist. They still sell tables.

Another experimental project dear to me was eduSofa. In 2013 I’ve joined a local company that was looking for a developer that could solve a tight deadline on a very interesting project.

The project was a second screen application prototype - tells you nothing, I know. Imagine you are watching TV and you have a tablet in your lap. While watching a TV show, the tabled would synchronise with the TV and provide contextual information about what you were watching. That contextual information was actually a micro website having a metadata that should match the metadata of the TV show data. To be more explicit, if you were watching a TV program with a show about whales, then the tablet would have presented you with what could you find out more about whales.

We’ve decided that server side should be developed with Spring Boot because was a really fast way to implement a REST API. To that, I had to add a MQTT communication layer between multiple customers, so we had features like having the tablet owners share their thoughts while watching the same TV show. This naturally lead to the idea that those micro websites could also represent a game, that the customers that share a local hub (to be read “people who live in the same house”) could play.

The front end application consisted of two components: an Android application and a smart TV application, which was developed by a colleague. Special about the Android application was the implementation of a custom UPNP discovery library (that allows smart TVs to connect with it), the MQTT consumer library and last but not least, the custom protocol we had to define for exchanging commands with smart TV application.

I’ve manage to build a fully working prototype (frontend and backend) in just three months.

We have continued the development of eduSofa, until it’s death due to unnatural causes. In that process we’ve been using Hadoop and Akka for making TV shows recommendations based on the social side of the application, had to build an custom Electronic program guide display Android component, which was challenging in terms of speed of update and scrolling in both directions in the same time (for neat looking).

Maps

Imagine booking keeping of the agricultural work on a farm or a group of farms (we’ve been consuming Google Maps APIs for that - of course).

The main challenge was the slowness of drawing the parcels (in browser) due to the large number of points that needed to be displayed (coordinates were collected with total station - a GPS device that makes highly accurate GPS measurements).

The solution was to use an algorithm to eliminate points that were not needed for displaying a good enough approximate. Having a node with two neighbours, we’ve measured how much distance is between that node and the line that it’s neighbours define and if it was beyond a certain tolerance, the node was removed from the polygon that needed to be drawn.

We also had to detect if the polygons do not overlap and solved that using a Gilbert-Johnson-Keerthi collision detection algorithm.

I enjoy working with maps and coordinates, so if your project has challenges related with maps, I’ll be more than happy to dive into them.

Education

My very first official developer job was at a company that was building educational content. Later, I had to build an standalone educational platform for online testing, which I code named Examo. I’ve chosen Spring Boot framework for backend and AngularJS for frontend, since I was the only developer on the project.

The challenges were small compared with those described above, but nevertheless there were challenges. It was my first project using AngularJS, so I had re-enter the “wonderful” world of Javascript via a framework with a love-hate relationship with it. So, yes, I have the modern front end developer skills too (Grunt, Babel, Node, etc).

The modelling - I love building data centric application - was interesting because we had to support a number of species of exams, each with certain conditions like shuffling, allow retaking and resuming the exams, measuring points and statistics.

Later the client decided to use MongoDB instead of MySQL, so structured database to non structured database it was.

I’ve mentioned education here because I enjoy building projects that involve education. It probably has something to do with my perpetual learning experience, where the saying “If you can’t explain it, you don’t understand it well enough” it’s the most meaningful.

From time to time, I have to explain quite difficult concepts and techniques to persons close to me, and that have nothing - or little - to do with that field of work. I enjoy doing so, mostly because I have to test myself and clear any doubts that I understand it correctly myself.

Finance

I had the opportunity to build an application that would collect data from sellers and synchronized them with a SAP ERP server. For that reason, I had to come up with solutions to solve redundant data exchange problems and timezone related issues, while the application I was building was not in control of the process. SAP was the one that controlled the synchronization time.

In another interesting application, codenamed PhotoX, I had to solve the challenge of providing a way to customize the choices a customer would have and build a price based on its choices. Let’s say you want to “build” your own printed photo album product and you have at your disposal, various types of paper, covers and other choices that you can make.

One might think that’s no big deal in building such a system, but I was stubborn enough to build it agnostic, which means you only have to respect the same referential system and you could sell customized furniture. For building it agnostic - or, maybe I should say, generic - I had to do a constant check on not mixing the business rules (discounts, referrals, etc) with the core.

Code Generators and Frameworks

Yes, I’m lazy, like all developers are. For lazy part of me, I had to build myself tools, all sort of tools, that would write those boring pieces of code instead of me.

For that reason, Dynamic Form Generator Library was an SDK that used Apache Flex SDK to auto-magically build forms from XML document descriptors. It supported check boxes, combo boxes, date-time, expandable text inputs and areas, non editable text, numeric stepper, rating and file uploader. Forms could be organized as sections. It was accompanied by an application, called DynaFormer, which was intended to help user generate the XML document that represented a form, by dragging and dropping the form components into place and completing all the necessary details for that form, like validation of the fields and other data. My final intention was to create a product from this, that would generate Flex forms that can be altered without recompiling the entire application. However, it was not all in vane, this functionality was used in Fluvi.

I’ve also built a both ActionScript and Flex SDK version of a dependency injection framework that worked with signals and commands, called Roless. By the time it was stable enough, I was able to modify Adobe Flex compiler (written in Java) and deal with of custom programming language grammars, abstract syntax trees and the whole necessary arsenal.

I have created and donated to the Apache Software Foundation some components that were missing in Apache Flex SDK 4.0 : Alert, ColorPicker, Dividers (horizontal and vertical), Menu and MenuBar, ProgressBar.

Maybe you don’t consider this relevant for my current Go related work, but rest assured I am using code generation in Go, as well and posses my own custom built tools for that. Last year I have returned to those programming languages grammars (PEG, ANTLR) this time in Go, because Go’s YACC was not enough for what I was intended.

Databases

In almost every project I’ve worked on since 2002, I’ve been using databases. Due to the nature of developer roles that I had over time, I have became what one might call an optimisation freak. The sets of problems that I encountered over time and the fact that I favour model centric development, won’t allow me to be happy having two tables named “prices” and “discounts” in the same database, or the lack of minimum one index per table.

I’m always searching for ways of representing data for human readability while helping the database engine to run as fast as possible. Even if harder to read, I would always trade a closure table to a classical (naive) tree approach - for the simple reason that you don’t have to stress the database engine in order to read such a structure (one query is enough).

As a side note, in a project not so long ago, we’ve built a Go user defined function that was doing push notifications after a SQL query.

Servers and Linux Administration

I have a friend (former colleague at my last working place) which is considered to be an expert in server administration. He does that with passion and responsibility. Probably one of the reason we’ve became friends is related to the conversations regarding security, protocols and best practices for Linux servers, because a long long time ago I had to maintain my own server.

Coaching / Tutoring

There was a time when I was going to high-schools and kept presentations about Flex. While doing so, the most interesting question that I’ve received from someone was rewarded with an invitation to join a small group of pupils that I was about to help become developers. Before that, I’ve helped a couple of friends take this road.

Why did I do it ? I wanted two things : one was to leave something behind me and the second to consolidate my knowledge by being able to explain it to others.

Golang

Why Go language ?

As we all know, cross-compiling used to be quite difficult, that’s why my journey towards Go was via Java. I’m still follow news about Spring Boot framework, but for the last years I’ve been doing Go every single day.

Spring Boot was providing mostly everything to me and the Java ecosystem was so large that you could not say there isn’t a library for this or that.

Starting to learn Go made me think again about how programs are designed and the fact that writing something generic might reduce speed. And after all, I’ve chosen Go mainly for speed, for being as close as possible to the metal.

Third reason was minimal protection to reverse engineering. Reverse engineering Java might be illegal, but it’s quite easy.

Projects in Production


My first Go project was an application for publish-free ads (based on categories, any person would be able to publish a selling/buying message with pictures attached). As methodical approach I’ve realised that I would learn Go if I will stay away from other libraries than standard ones. I know, one might think that I was reinventing the wheel, but at that time most of the well known libraries were young anyway, so, no damage taken.

After learning my way with the standard packages, for the project in question I’ve needed and implemented the following :

The frontend was as light weight as possible, since I was the only developer on this project : just jQuery with materialize theme.

Looking back at that code, all of it revolve around the solid design principles and the right tool for the right job. After years have passed, looking at it, I would not change much - maybe add another layer here, or minor improvements there. This shows the power and simplicity of Go : code that does not deprecate a couple of months after going to production.


After first project was delivered, we’ve started a new project, this time inside a larger team. This project was for a client in the VoIP business, which wanted an application for managing his operations.

Aside from GORM - which I consider to be a regretful decision - we haven’t needed (again) any other third party packages.

By the time I’ve left the company (one year development time), the following worth mentioning features were implemented :


Side Projects

I’ve decided to rewrite Gorm and invested a couple of hours a day in doing so. After three months, I’ve stopped because I realised it’s going nowhere - excuse me, I won’t share the details here.

This year I’ve digged deep into radix trees, http, json.

Final Note

You’ve probably noticed that I haven’t mentioned Docker anywhere. Nor did I say GraphQL. Or ScillaDB. It’s not because I’m ignorant.

My daily routine starts by looking at other people code, reading articles and getting myself familiar with the latest.


Recruiters Frequently Asked Questions

Recruiter : How much experience do you have with Go ?

Me : I’ve started to learn it in April 2016. Three months later, I was delivering my first project. I’ve been working Go ever since and plan to do so in the future.

Recruiter : What do you consider to be the most challenging about Go?

Me : The fact that I had to change paradigm - again - from being a strongly object oriented programmer to a how fast something can be developed without violating solid design principles. With the right amount of patience and a plan, one can migrate from Java to Go in about 3 months - for me that was a good enough learning curve. Finally, Go is not that challenging itself, but the philosophical problems that it raises are.

Recruiter : What was most challenging thing in your Go projects ?

Me : My first project was built without using other packages than standard ones. This implies a lot of test driven development, a huge amount of time, but in the end it payed off.

Recruiter : How much exposure to the cloud technologies do you have ?

Me : I haven’t been exposed to any clouds other than rain. Explain if you actually intended to say “Internet” when you say “cloud”, because I’ve been on this market for too long to know that fancy words are just fancy words. In general, I know that you - the recruiter - have no idea what it’s behind those words, but let’s be on the same page. I’ve worked with the Internet technologies for long enough to consider that I know a lot about it.

Recruiter : How much money do you want ?

Me : Let’s apply common sense : if you contacted me, make me an offer. If I contact you, you are surely not a recruiter. Ok ?

Recruiter : Are you willing to go on site if required ?

Me : Yes, but no longer than 3 weeks at a time (every 3 months or so), with all the details covered (airplane tickets, accommodation, expense allowances) by the company.

Recruiter : Why are you being so hostile in this F.A.Q. ?

Me : Well, all my professional life is about trying to be the best at what I do. Can you say that about yourself ? If your answer is yes, maybe we should go technical about our conversation. Read this to find out why I am so disappointed with recruiters these days.

comments powered by Disqus