My name is Gabriel RABHI. I’m living in France, in the city of Lyon. I am what we usually describe as an atypical developer. Creator of a video game at 18, Al Unser Jr Arcade Racing (Mindscape Bordeaux, Pearson group at the time), passionate about software research & development, I am a self-taught programmer (Pascal, C, C ++, C #) and something like a “software architect”. Creative, I was also 2D and 3D graphic designer (bitmap, vector and modeling, rendering, animation under Maya and ex-Alias), multimedia (sound, video, motion graphics) and incidentally, composer (conservatory, home studio).
The variety of my professional experiences has given me some understanding of what a business is – small ones first. I collaborated with several entrepreneurs. I can apprehend complex projects, requiring a strategic vision, technological innovations and long-term work. I have practiced SCRUM and I am attentive to the practices of the industry (DDD, TDD, XP). I’m not what is called a craftmenship developper, but I can adapt to many practices.
Coming out of my comfort zone, taking up challenges and deploying bold approaches is a real driving force for me – and honestly, it’s not without risk. I experienced failures that made me grow, and know my weak points and my strong points, and be open to criticism and know how to question myself.
I’m always trying to improve our development tools, sometimes changing the fundamentals of our industry. For the past few years, one of my main research topics has been a high-performance distributed (server-to-server) object repository for .Net, in the “Big Memory” spirit. In the past, I have developed several engines: distributed database, graphical interface, 3D engine. Since 2014, I maintain a social network engine: full Web Stack, HTML5-JS-CSS, Web server, hand maid NoSQL and Graph DBMS, textual indexing like Lucen, etc.
- .NET developer, C # language. WinForm, WPF, Web. Experience with C, C ++ and Pascal. Managed and unmanaged languages.
- Software Architecture: development of Frameworks, low level programming, optimizations. Notions of TDD, XP and DDD (Domain Driven Development).
- Graphic Designer (up to 2009): Adobe suite (Photoshop, InDesign, AfterEffect, Illustrator), Maya (3D, animation), AutoStudio (industrial design), MentalRay (rendering).
- Composer : MAO with Digital Performer, sound design.
Know how, knowledge, topics
- Design of HMIs, graphics systems (GUI engines).
- Distributed P2P or client-server systems: pull / push mode, serialization, network and memory optimization, caching strategy.
- General knowledge in computer science: development process and object oriented programming, structure of operating systems, hardware, processors, compilation.
- Vertical scallability of .Net applications, code readability (persistence abstraction, Framework design).
- Management of terabytes of objects in RAM without Garbage Collector freeze.
- Interlocking concurrent “lock-free” processing and communication.
- Web site generation by script, front-end protocol, basics of “lucene-like” indexer.
- Philosophy of UI engines, RAD, Frameworks, etc.
- Basic concepts and architecture of database engines : had developed parts of database engines.
- AGILE project management in SCRUM, continuous process improvement.
- Corporate governance and human resources concepts – has contributed to several entrepreneurial adventures.
- I have a good background in Monetary and Banking systems. I have produced a documentary (animation) that have more than 3 million views on Youtube.
- I have good knowledge of emotional therapies, especially EMDR. I practiced it, I looked after friends. It is a rich approach and much more rational than one imagines.
- I have been a musician from a very young age. I studied the violin, I play the piano and I am a composer. Music is a second language for me. I have sometimes performed as a composer for my customers. I master the basics of Home Studio.
- I’m learning about political systems.
I’ve done a large number of projects for my customers and as personal researches. The majority are projects for customers. There is a lot of software that I developed for which I don’t have screenshots. Here are a few.
1995 : Al Unser Jr Arcade Racing, a small arcade video game. Presented by Bill Gates as the first Windows 95 arcade simulation game. Sold in Japan and USA, near one million copy distributed.
1996 – EZ-World was a runtime and development environment for Max OS 9. The GUI engine was proprietary. Buttons, menus, window, etc. were written from scratch. One of the important features was that the user interface of the softwares that worked in this environment was editable at runtime: windows and widgets could be created at runtime, and linked to commands published by the software components. There is a high level of isolation beetween the “business” or “processing” code and the UI. The first apps running on this screen-shots are painting, compositing and multimedia one.
1997 – This is an OpenGL GUI engine (Graphical User Interface), running on top of a 3D rendering view. The goal was to develop an independent full featured GUI engine for game developers. Never goes fare beyond the POC. Looks like the WPF technology developped by MS few years later.
1998 – I developed a driving simulation for Michelin, the French tire manufacturer. This simulation was a communication job for the centenary anniversary of the company. During two years, they have made a itinerant theme park including 15 small simulation stands for children. To build this game, I developed my own 3D engine (on 3DFX) and my own polygonal 3D modeler – yes, a full featured simple modeler ! It contained a route generator in the form of Nurbs along which various parameters varied, allowing the creation of circuits very quickly. All the game where done in 6 months (3D engine, car simulation code, modeler, design of roads, textures, etc). This performance had made me viewed as a “extraterrestrial developer” by Infogramme CTO and Doky Denky CEO.
2008 – This image is a personal work of design and rendering (google image : “Audi R7 rabhi“). I realized the modeling with Auto Studio (Autodesk), with Nurbs level 5 to obtain smooth curved surfaces without breaks. This model do not use a smoothed polygonal modeling technic (wich is a lot simpler), but the NURBS web curvs based used by car makers for the final shapes of real cars. This is a huge difference. In this model, you can reshape a basic curv and all the model will rebuild the surfaces taking car of the build history of the entire model. The rendering is done with Mental Ray under Maya using Global Illumination algorithm.
1996 – 2008 : I have delivered numerous CG pictures, animations and multimedia systems (or contributed to as designer) for various companies, both small and big ones.
In 2009-2010, I developed a contact management tool for a company I worked in (MCE-5 Development), with Aurélien Boudoux, a developer with whom I collaborated for 4 years. This software made it possible to link emails, paper mail and documents to a database of contact. It was connected to an Exchange server to retrieve emails and to the PABX to track telephony calls. It was running Office for direct mail. It also presents a view of project spaces in the form of mind maps. It is a GED (Electronic Document Management System). It contains a simple Gantt board. At the core of the system is a hierarchy of objects that is viewable as a Hiearchy (like a file system), a Gantt planning (to add delay information to entities) or a Mind Map (to organize the same entity in a logical way).
With associates, we try to make it a real business. We were not aligned, and we failed to go forward in the company foundation. The product needs maintenance and we where unable to resolve major problems. The project where abandoned – one more time the bad “internal tool idea” that cannot become a real product.
Between 2010 and 2013, I was project manager on a proprietary data management technology. The goal was to make a distribution of data between several places by internet, in real time. The system was a RAD oriented development system too. The system was a complete database management system, with replication and management of the integrated schema update. The database was composed of objects and worked in RAM with a replicated in-house storage technology. In-Memory processing permit fast execution of linq queries. If an object was modified on a client connected to one replicated server, the clients viewing the same object sees the changes appearing in real-time on their screens : all this was transparent from the developer point of view. In reality, it was a full real-time distributed and synced objects system. All was written from scratch with Aurelien Boudoux. It was a really big challenge, with fine grained engineering works. It was partly funded by French State (CIR – Crédit d’Impot Recherche).
All the architecture was component oriented with a full featured pipeline messaging system. A pipeline can have a network transmitter to transport messages from one machine to another. We can move components from one machine to another. Various components where developed : caching, log, debug, data store, logical. All exceptions where managed in a client-server paradigm. A catched exception on a node where sended to the caller, on another machine.
The project was globally abandoned to use more standard SQL database system. The core business of this company was not to develop advanced distributed systems, but one specialized LOB system. The code remains entirely on me, and it was too risky and cost too much to continue. Yet another bad idea “make it more powerful internal tool” not adapted to the reality of the company.
Definitively, I’ve learned to do not try to rebuild my own proprietary tools – except if it is the core business of the company.
In 2014, I’ve developped a small tool to do analysis and processes of a live SAGE Database in production. This tool is used for marketing and support tasks : find hot products, classify customers, billing, price targets, manage delivery, make stock analysis, etc.
In 2014, I’ve started to learn Web technologies. Do4Change’s engine, ShotWeb, is something like a leaning project : really badly mad in many aspects. In the web page source code you can read this :
I put online Do4Change in 2016 after a year and a half of development. Do4Change is “a social network for collective intelligence and concrete action”. It is intended for citizens wishing to organize changes in society. It’s a bit like the Facebook of associations and activism, offering specific tools to mobilize participants and organize citizen movements. It permits to share content (texts, videos, images, sounds, pdf, etc), have consultation tools (multiple choice, polls), real-time messaging, an advanced block based editor of web pages, groups and sub- groups of users, etc. It allows to evolve all structures and contents in a collective way. It is a multi-tenant system : you can create your own social nework, replace the colors, the logo, the pictures, and activate features one by one.
So, to learn exactly how a Web stack works, I’ve programmed near all major components of a Web system :
- The front-end framework, with components, dialog management, route management, local storage, authentication, etc. Latter, I’ve used Bootstrap but in fact, it was not necessary.
- The WebServer is a completely hand maid in C# : I open a fast raw binary server TCP socket (IOCP), listen to connections, parsing the HTTP frame, send back the right frame and data…
- The database engine is hand made too, except that it is based on a binary Key/Value store, ESENT. On top of that, I have developed an In-Memory object store, relation store (joints), and an Bitmap based Lucen like textual indexer.
This SPA had some special conception bases:
- All HTML content is served through a WebSocket. When you click on a link, changes in the page are computed and send by the server in “push” mode through a permanent WebSocket connection – like it is done with server-side Blazor by Microsoft. It permit to manage message re-emission when connection is lost and ACK not received. It’s a really robust messaging system.
- Most of the HTML content is Tokenised : all redundant HTML tags content is send in the form of key-codes and the client rebuild the full HTML content before inserting it in the web page. This mechanism permit a good compression level (buffer size are similar to those of a JSON API based client server SPA) and is faster to build for the server. This architecture permit a high reactivity (no re connection), a good security level (no client-site code) and a server-side rendering useful for SEO.
- Because the database is In Memory, the data access latency is small. Majority of operations are computed in between 150 microseconds and few milliseconds.
- The engine is based on a fixed Thread pool that build responses to the clients concurently.
This basics offer a really scallable (in theory) and fast (in practice) system. The ShotWeb engine offer a really large panel of feature : authentication, file management (with download barbers),
In 2017, I added a scripting language to Do4Change’s social network engine, ShotWeb. This language makes it possible to change the entire presentation of the online system, the script editor being online. Online, we can edit all of what makes up the pages of the social network.
This hand maid language permit to describe a hierarchy of web components that generate HTML content when they are rendered. This specific language can be converted in C#. This components can access to data resources to render specific data accessible in the current user area, taking care of his credentials. With this update, a new Social Network is a blank page, and we assemble components to build the UI of the site, Online, with this embedded IDE.
The social network engine that I developed allows the realization of custom portals. Here, one of the three portals that I developed. This is the site of an association affiliated to the CCI of Paris : search zone, personal profile, articles, chat, complete Web page editor, all this feature are activable and customizable to reach the needs of each organisation.
There is a lot of successful projects that are not presented here. Perhaps, in the near future, I’ll plug my backup disks to get more screenshots to present more projects done.
What’s next ?
The ShotWeb project, despite the fact he is actually in production and maintained, was not made to continue : the code is BAD, not well tested, cow-boy written, still, it work and make me doing a big step in the deep understanding of what a full stack web system can be. On the Internet, the Do4Change platform was a fail because the UX is bad, for too complex : I’ve discovered that the UX (User Experience) is the number one criteria of success of a WebSite – or any consumer product !
Now, I would like to push all the best technical concepts developed this 10 last years to a new level, the production quality and robustness level, to make real business from it.
In early 2019, I work on few projects:
- An innovative software technology for managing replicated object repositories in RAM for the .Net platform. It is an add-in (MemCached like) or substitutes for classic DBMS (full featured) such as MySQL, Ms SQL Server, MongoDB or Oracle. It is an embedded object DBMS (without a network connection) adapted to Backend applications. It’s a synthesis of all the research I’ve done in the field of data management. It permit to manage terabyte scale plain object collections without .Net Garbage Collector problems. The first version is not so fare in terms of performance from the MS FASTER Key-Value store – wich is, at this time, probably the fastest Key-Value store on the earth. My system do something similar, with real objects and a rich feature set, adapted to real-world developers needs (not only store and retrieve bytes arrays at light speed). An intermediate version, based on LMDB Key / Value store, may be alive soon.
- A new high level Web UI rendering technology, the fastest and the easiest possible. It permit to “render” an object, with a philosophy inspirited of MVVM pattern but with ease in mind. The goal is to make the easiest and fastest library for developers that are Web agnostics.
- The first digital tool of organizational transformation – I have searched for investor, writing 60 page presentation doc but it was a fare too complex product for business angels. It allows to gradually change the organization of companies to make them more efficient, flexible and agile, and increase the commitment of their employees. It is an innovative solution intended to be used daily by millions of people, mainly in companies. That’s what I’ve tried to make investor thinking – and I fail.
Not too much ?
Oh ! Yes, I will never be able to do ALL this projects… And I must have money to do that !
But lets have a look at the first version of the GitHub introduction of my next big thing :
SlimLib is a class library focused on big memory applications development under DotNet. Big memory applications uses main memory (RAM) to process data sets. Data modifications are done in memory and are stored on disk while reads are mostly done in main memory. Hot data remain in RAM. Well designed, Big Memory applications can be few level of magnitude faster than ones using standard, in memory or embedded DBMS. They are different from in memory DBMS because they avoid separation between processing code and processed data by transparently maintains the object paradigm.
Stay tuned !