Who is Bogdan?
You can call me Badu.
Last modified on February 23, 2023
Bogdan Dinu Curriculum Vitae ResumeAbout 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
- Architect and lead projects from the concept until released
- Broad and deep technical knowledge of several technological stacks
- Take the most responsible approach regarding work and decisions made
- Provide technical leadership for software engineers and oversee the development
- Communicate effectively and relate well to people
- Represent an abstract problem in the form of some finite real object of the system, so everyone understands it
- Write tools and automated test software
- Always look at the costs of the solutions and how to optimize them
Experience
Senior Development Lead at Endava
(October 2022 - Present day)
- Mentorship for my colleagues who are interested in Go language
Dev Technical Coordinator at Cognizant-Softvision
(December 2018 - September 2022)
- Technical leadership for the same organization
- Mentorship for my colleagues who were interested in Go language
- Driven architecture and development for our partner Appetize
- Build micro-services using GoKit as a standard
- Payments systems for the largest client of Appetize (Disney)
- Solution architect in an energy startup built with microservices (Google Cloud)
- Payments systems for the clients of the energy startup
- Cost optimization for cloud solution (Amazon Web Services) - reduced 5 (five) times the invoice amount
- Solution architect for an internal office booking solution (Amazon Web Services)
Freelance Go Language Developer
(November 2017 - November 2018)
- Freelancing for various customers
- Implementation of a dependency injection middleware that would conform with best practices while simplifying the workflow of controllers of those servers.
- Created an automated trading bot which is listening to the exchange service and initiates trades and hedges against the market.
- Contributed to the building of a bidirectional synchronization automation tool between internal data and sales force for business operations.
- Reduce coupling on reflect package, so it can be used on low-memory devices.
- Fixed the standard json package omits empty bug. Reduced the number of allocations and added a few enhancements.
- Several Codility Golden awards and challenges were solved in Go (links are available on my LinkedIn profile page).
- Solved over 400 problems on HackerRank for fun - see my profile here
- Dug deep into radix trees
Technical Lead at Activemall
(April 2015 - October 2017)
- Provided technical leadership and consultancy which resulted in two European-funded projects
- Overseen a small team of developers using SCRUM / Agile technique
- Built a platform for photographers which performed calculus based on customer’s choices
- Built a publish-free ads website using an innovative taxonomy system
- Driven architecture and development for a voice over ip selling solution
- Developed a platform for farmers using google maps for keeping work history on soil
- Left the company because I want to work remotely
Senior Software Consultant at Altfactor
(October 2013 - March 2015)
- Built a second screen application prototype, running on smart TV, tablet and, server
- Built an educational platform for quizzes
- Left the company because it split-up
Senior Software Developer at Workzone (Norway)
(February 2010 - May 2013)
- Designed and implemented an advanced and scalable platform for the delivery and management of video content
- Wrote automated workflow for uploading video resources to a centralized server cluster
- Live broadcasting tool with controls a live event and combine video with synchronized slides
- Delivered an experimental Android application (ahead of its time) for live broadcasts
- Left the company because the contract was over
Adobe User Group Manager for Romanian Flex User Group
(2009 - 2012)
- Started mentoring a group of young pupils
- Started to broaden my communication skills
- Blogging regarding Adobe Flex
- Host events like launch parties and popularize Flex
- Wrote an Actionscript dependency injection framework called Roless
- I’ve started enjoying Java because the Flex compiler was written with it
- Left the position because Flash was discontinued and I’ve fallen in love with Spring Boot
Freelancer for various clients (U.S. and Europe)
(2007 - 2010)
- Built a bookmarks manager with social networking capabilities - learned a lot about taxonomies and group theory
- Built an application for a client that synchronized sales data with a SAP server
- Multitouch SDK based on FLOSC for SensyTouch - a startup that took off
- Code generators for SQLite, Zend, Actionscript Message Format, and many others
- Stopped freelancing because Workzone hired me
Entrepreneur Synergy Design
(2003 - 2007)
- Planned, designed, and implemented web and desktop applications
- Managed a small team of developers and marketers
- The biggest project was called Eurobiz - a 60000 Romanian companies database organized by their domain of activity
- Closed the company due to the economical climate
Programmer at Secure Software
(2002)
- Contributed to choosing the right tool for the right job, after management tried Delphi and C# (the solution was Adobe Flash)
- Left the company so I can start my own
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 :
- a HTTP router that would be able to support both secured and unsecured routes, serving both HTML rendered pages and Json
- at the time there was no such thing as the
context.Context
, so I needed to define an interface with similar capabilities - for this router, as HTTP middleware I needed CORS, gzip, security, rate limiter and file upload
- a small template engine with auto-reload capabilities for development and in memory caching for production
- a set of packages for paginating, captcha (because customers should be allowed to upload files without being logged in), cron like service (which would cleanup uploaded and abandoned files), sign in with Google and Facebook, email communication service
- a package for database storage (both postgres and mysql adapter)
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 :
- an audit system (event-based) that could keep track of operators that performed changes on sensitive data
- a reflect based generic comparator : comparing two model structs would have produced two usable pieces of information, one for gorm to perform updates (without running queries like crazy - as it usually does) and one for the audit system
- a reflect based middleware that would unmarshal json in accordance with the parameters accepted by the registered controller function. If the unmarshaled struct implements a validation interface signature, validation was called before calling the controller function
- a plugin system for interoperability with various REST / SOAP APIs : the system could be configured which kind of partner services to consume for provisioning, shipping hardware items, taxes calculation, etc.
- an automation system that got started by users defined triggers. E.g. if an order has status changed from “new” to " send", automation system would perform the following actions (send emails, prepare PDFs, etc). Both conditions and actions were definable by the administrators.
- a standardized way of serializing json responses, search and filter for entities
- an access control list that could allow creation of every possible combination of roles to access APIs
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.