Who is Bogdan?

You can call me Badu.
Last modified on February 23, 2023
Bogdan Dinu Curriculum Vitae Resume

About 22 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. before 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 started to program computers in 1991.

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

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

I’ve driven architecture decisions and led 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

Senior Development Lead at Endava

(October 2022 - Present day)

Dev Technical Coordinator at Cognizant-Softvision

(December 2018 - September 2022)

Freelance Go Language Developer

(November 2017 - November 2018)

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’s degree in naval engineering and graduated from the University of Low Danube Galati in 2002.

During my 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 software able to calculate the heat transfer in the galley, using the finite element method.

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


History

After more than 27 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 the assembly language for 8086 CPUs.

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

I have grouped some of my experiences by categories, presenting you briefly with what I have 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 further.

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, and 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 embedded video in an article (using integration with content management systems) or as a standalone 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 their 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, and 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 the 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 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 tablet would synchronize 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. The 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 managed to build a 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 a custom Electronic program guide display Android component, which was challenging in terms of speed of updates 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 the 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 neighbors, we’ve measured how much distance is between that node and the line that its neighbors define and if it was beyond a certain tolerance, the node was removed from the polygon that needed to be drawn.

We 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 to 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 a standalone educational platform for online testing, which I codenamed 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 modeling - 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 the 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 possess 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 become what one might call an optimization freak. The sets of problems that I encountered over time and the fact that I favor 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 a 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) who is considered to be an expert in server administration. He does that with passion and responsibility. Probably one of the reasons we’ve became friends is related to the conversations regarding security, protocols and best practices for Linux servers, because a I had to maintain my own servers.

Also, back in my starting days I had a job of administration of an Internet cafe which implied taking care of server and working stations.

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 following news about Spring Boot framework, but for the last years I’ve been doing Go every single day.

Spring Boot was mostly providing 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.

Last but not least, we can talk for hours about green languages and what are the efforts companies make in order to reduce the green house gasses emission. There is evidence that Go is one of the most friendly to nature.

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 :


As freelancer (Nov.2017 - Nov.2018), I had to refactor the existing code base to support multiple database dialects for three servers (license producer, license status and utility server). While doing so, I’ve rearranged code base as per Go community best practices and created a dependency injection middleware that would conform with best practices while simplifying workflow of controllers of those servers. The project can be found here.

Still freelancing, I’ve been working for a Fintech startup, bug fixing for an exchange service for both customers and internal use. I have contributed on building a set of tools, some of them from scratch. The technologies involved were gRPC, protocol buffer, pub-sub, Docker, Kubernetes.


Regarding my period in Cognizant there is much-much to say, but probably this about page would get very large.


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 being 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 paid off.

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

Me : Yes. During last 5 (five) years I’ve worked with Google Cloud and Amanzon, from optimizing solutions to architecting entire solutions.

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