Category Archives: architecture

GPTs are here

Like many tech enthusiasts, I was impressed by the annoucements openAI made this week and I found myself constantly refreshing https://platform.openai.com/playground in anticipation. Finally, the moment arrived !

One of the biggest needs for generative AI is to be able to inject your own content or “embed” it to make the answers more revelants. It was already possible using the openAI APIs, a vectorDB, a bit of langchain and some coding. In fact, many sites were already offering this kind of feature. People are saying openAI just killed all the “wrapper” startup around them because it’s now possible to do just that directly on the openAI platform.

It took me about 5min to conduct this experiment:
For the last 3 years I have been keeping a logbook of everything I found interesting and learned about. I have uploaded that content to chatGPT and then asked him to tell me what I have learned in the past 3 years.

If you have a GPTplus account you can play with it here:
https://chat.openai.com/g/g-PAKk8wkX0-aurelien-s-digital-twin


Here is the result of my conversation with my digital twin

What have you learned in 2021 ?

In 2021, my knowledge base was significantly expanded with insights primarily focused on product management, leadership, and technical strategies. Here are some key learnings from that year:

  1. Agile Product Ownership: Emphasizing the role of a Product Owner in prioritizing tasks and the importance of saying ‘no’ to maintain focus on the most critical items.
  2. Key Product KPIs: Understanding the top product key performance indicators, such as Product Stickiness, Usage, Feature Adoption and Retention, Net Promoter Score (NPS), and others. These KPIs are essential for evaluating the success and impact of a product.
  3. The Boring Architecture for Data Science: Highlighting the necessity of having developers in data science projects to ensure that the work doesn’t just stay in theory but is actually implemented in production.
  4. Git and GitHub Best Practices: Insights into new functionalities in Git, like the “–follow-tags” option for pushing relevant tags with branches, and the use of Git aliases for efficiency. Also, the introduction of GitHub actions for automating workflows.
  5. Node.js Development: Techniques for making HTTP calls in Node.js, using Axios, and handling maintenance modes in Express applications.
  6. Command Line Efficiency: Improving command-line usage with history search capabilities, bashrc configurations, and .inputrc settings for a more efficient and productive terminal experience.
  7. Cloud and CI/CD Technologies: Learning about Google Cloud Run and its functionalities, as well as continuous integration and deployment strategies.
  8. Legal and Licensing: Gaining knowledge about the ISC License, its implications, and its application in software development.
  9. Wardley Mapping: Understanding the basics of Wardley Mapping, a technique for strategic planning and situational awareness in business.
  10. E-commerce and SMB Market Automation: Exploring strategies and technologies for automating small and medium-sized businesses in the e-commerce sector.

These learnings reflect a diverse range of topics, covering both technical and managerial aspects, crucial for a well-rounded understanding of the IT and software development landscape.

And in 2022 ?

In 2022, my knowledge further expanded, covering diverse topics in product management, engineering leadership, and strategic IT practices. Here’s a summary of what I learned:

  1. Outcome-Focused Approach in Organizations: Strategies for persuading companies to adopt an outcome-focused approach instead of a feature-factory mindset. This involves being consistent in communicating goals and employing timeboxes as a healthy forcing function.
  2. Product Prioritization Techniques: Insights from various sources about effective product prioritization, including the importance of identifying customer value and optimizing workflows.
  3. Project Management and Agile Practices: Emphasis on products over projects, the significance of team collaboration, and the prioritization of value over effort, aligning with the principles of the FlowCon Manifesto and other agile frameworks.
  4. KPIs for Customer Service: Understanding key performance indicators for customer service, such as resolution rates, customer satisfaction scores, and Net Promoter Scores.
  5. DSDM Agile Project Framework: A deep dive into the DSDM methodology, focusing on its eight fundamental principles, the MoSCoW prioritization technique, and benefits like user ownership and meeting true business requirements.
  6. Strategic Thinking and Decision Making: Exploring strategies blending practical experiences with academic theories. This includes understanding strategies of terrain versus strategies of trajectory and the concept that a viable strategy’s opposite must also be viable.
  7. Outcome-Based Roadmaps: Learning about the advantages of outcome-based roadmaps in product development, including improved visibility, team autonomy, and the incorporation of user feedback.
  8. Organizational Transformation: The emotional aspects of organizational transformation, including addressing the unsustainable status quo, developing a purposeful vision, and aligning KPIs with resources and people.
  9. OKR Methodology: Detailed insights into Objectives and Key Results (OKRs), focusing on creating ambitious, measurable, and impactful goals.
  10. Tech Audit and Due Diligence: Understanding the comprehensive process of technical auditing and due diligence, including aspects like technical architecture, team quality, cybersecurity practices, and data practices.
  11. Leadership in Technology and Product Development: Emphasizing the importance of understanding the customer’s perspective, creating a continuous workflow, and fostering a culture of continuous improvement.

These learnings from 2022 represent a rich tapestry of knowledge, blending technical acumen with strategic insight and leadership skills, essential for navigating the complex and evolving landscape of IT and software development.

And now 2023 ?

In 2023, my learning journey continued, focusing on advanced aspects of IT platforms, cloud computing, data platforms, and generative AI, among others. Here are the key insights:

  1. CTO Role and Responsibilities: Emphasis on building a culture of trust and safety in the technical organization, making strategic decisions collaboratively, and ensuring the development of high-quality products.
  2. Generative AI and Programming: Insight into the potential impact of AI tools like GPT-3 on programming, highlighting the necessity for clients to clearly articulate their requirements for successful implementation.
  3. Component-Based Development: Understanding that a significant portion of required components in software development may already exist elsewhere, emphasizing the reusability of code.
  4. Product vs. Engineering Dynamics: Delving into the interplay between product management and engineering, and how these disciplines interact and influence each other.
  5. Organizational Investment and Product Thinking: Exploring the concept of funding in organizations, particularly how investment in people and product thinking plays a crucial role.
  6. Theory X and Theory Y in Management: The contrast between Theory X (an authoritative management style with a pessimistic view of employee motivation) and Theory Y (a more empowering, trust-based approach).
  7. People, Process, Technology Framework: The significance of balancing these three elements for successful organizational transformation.
  8. ChatGPT in IT Platforms: Exploring the application of ChatGPT in various aspects of IT platforms and its implications.
  9. Agile and Lean Principles in Tech: Insights into the application of agile and lean methodologies in the tech sector, particularly in software development and project management.
  10. OKR Guide: Understanding the structure and implementation of Objectives and Key Results (OKRs), focusing on creating aligned, ambitious, and measurable goals.
  11. Engineering Onboarding and Middle Management: Strategies for effective onboarding of new engineering directors and the importance of focusing on high-impact areas rather than getting stuck in ‘the middle’ of organizational hierarchies.
  12. Digital Product Design and Iteration: Emphasizing the speed of iteration in digital product design and the importance of launching imperfect products to quickly learn and adapt.

These insights from 2023 reflect a deepening of my understanding in IT leadership, strategic planning, and the practical application of AI and agile methodologies in modern technology environments.

It is quite a good summary of my main interests in the past 3 years.

There is one thing that LLM can’t do: it’s reading our mind. Therefore, knowledge management – capturing thoughts, ideas, problems, solutions, etc. – is going to be key in a world transformed by LLMs.

The other thing he cannot do is read the futur, I asked him 😉

And in 2024 ?

I do not have any information or documents related to learnings from the year 2024 in my current knowledge base. My knowledge is current up to January 2023, and I haven’t received updates or documents pertaining to 2024. If you have specific questions or need insights on trends and predictions up to early 2023, I’d be happy to assist with that information.

Google Cloud Platform technical qualification training : Cloud SQL

Not much to say about Cloud SQL, it is simply a fully managed mysql database version 5.5 and 5.6.

Fast connection to App & Compute Engine but accessible from anywhere. (you have to enable the access)

Google can manage replication for you. mysql instance are brought up on demand and can go away after 4 hours of inactivity.

Up to 500 GB per database

 

 

 

 

 

10 ans

Il y a 10 ans, le 3 avril 2004 j’ouvrais ce blog. Google n’était encore qu’un moteur de recherche performant… Amazon qu’un libraire, Face… FaceQuoi ?? Les téléphones n’étaient pas smart et Nokia dominait le marché.

Il y a 10 ans Google lançait Gmail, un 1ere Avril, 1 Go de stockage gratuit, une application web aussi réactive qu’un client lourd, la bonne blague… Eh oui Ajax n’était encore qu’une marque de détergent. Subversion était un outil acceptable pour gérer les sources, Flex une solution d’avenir, Struts était en version 1 tout comme Spring, javascript était tout juste bon à ouvrir des pop-ups. Chrome n’existait pas, IE6 s’était imposé face à Netscape.

Il y a 10 ans la France votait la Loi pour la confiance dans l’économie numérique et aujourd’hui il faut écrire un rapport pour mettre en valeur les développeurs alors qu’il y a longtemps que le reste du monde a compris que le logiciel dévore le monde

Depuis 10 ans ce ne sont pas les sujets qui manquent, je vais profiter de cet anniversaire pour ranimer ce blog, rendez-vous dans 10 ans.

What the computer is for

“When I give a talk, I do stuff that I’m interacting with on-the-fly. Because that is what the computer is for. People who don’t do that either don’t understand that or don’t respect it.”

Alan Kay

Gérer vos installations comme un Chef !

BIP BIP, message urgent: le serveur 12 est tombé. Nous sommes lundi il est 6H du matin, les utilisateurs vont débarquer en masse dès 8H, et avec un serveur d’appli out on ne va jamais tenir la charge… Heureusement, la procédure d’installation du serveur est à jour… enfin devrait l’être, ça va pas prendre plus de .. oulà 3H pour refaire l’installation.

Vous aussi vos procédures d’installation sont constituées de:

  • scripts shell par forcément à jour
  • une documentation pas synchro avec les scripts shell et encore moins à jour
  • quelques incantations magiques transmises de génération en génération selon la tradition orale
Après consultation, le médecin est formel, ce sont les symptomes d’une crise de “configuration management”. A traiter d’urgent avec du Chef ou du Puppet.

Chef ou Puppet

Vaste débat, j’ai commencé par puppet, je ne vous raconte pas la galère juste pour réussir à lui faire installer le jdk d’oracle… J’ai eu un peu moins de mal pour faire la même chose avec Chef, j’ai donc choisi ce dernier. L’important n’est pas lequel mais bien d’utiliser un outil de ce genre pour gérer la config des machines.
Deux concepts sont à retenir:
  • Infrastructure As Code => la configuration des serveurs doit se gérer comme le code source d’une application.
  • Documentation executable => Pas de désynchronization entre la doc, le code et ce qui est réellement installé.

Chef pour gérer son poste de dev

Bon évidemment c’est un peu le marteau-pilon pour caser une noix mais c’est un bon moyen de se former. Pour démarrer j’ai voulu suivre la doc officielle, Fast Start Guide avec un compte chef hosted ERREUR. Ce n’est pas que cette doc soit mauvaise mais elle vient avec toute la complexité d’une configuration chef de type client/server. Pour démarrer mieux vaut partir sur chef-solo, avant de passer aux choses sérieuses avec chef-server. Voici un très bon tuto: Chef Solo tutorial: Managing a single server with Chef. La suite de cet article s’en inspire fortement.

Prérequis:

  • debian ou ubuntu, j’ai eu des galères en essayant avec une distrib plus exotique.
  • git, on fait de l’Infrastructure As Code donc gestion de code source…
git clone git://github.com/toutantic/chefrepo.git
git checkout step1

Voici le contenu de ce repo:

??? README.md # ce fichier
??? install.sh # script pour installer chef
??? deploy.sh # script pour déployer vers une machine distante
??? run.sh # script pour démarrer chef-solo
??? config
?   ??? attributes.json # Liste des attributs à utiliser (liste des recettes et paramétres)
?   ??? solo.rb # Configuration de chef-solo 
??? cookbooks
?   ??? toutantic
?       ??? recipes
?       ? ??? default.rb # recette par défault

Le script run.sh lance chef avec la commnde chef-solo -c config/solo.rb -j config/attributes.json

  • config/solo.rb permet de configurer chef-solo en particulier de lui dire où trouver les cookbook
  • config/attributes.json contient les attributs à utiliser en particulier la liste des recettes à appliquer.
3 manières d’utiliser chef:
  • Créer une recette simple avec les ressources disponibles
  • Réutiliser une recette existante
  • Créer un nouveau cookbook

Exemple de recette simple

cookbooks/toutantic/recipes/default.rb contient la description de ce que l’on veut faire sur le poste. J’y ais mis quelques exemple des “resources” que l’on peut décrire en standard avec chef.

Exemple de réutilisation d’une recette

C’est l’un des grands intérêts de chef, c’est un grand livre de cuisine, on trouve en particulier les recettes de:
Je veux donc installer java, vous allez me dire apt-get install openjdk-7-jdk… C’est pas faux. Maintenant si ce n’est pas l’openjdk qu’il vous faut mais celui d’Oracle, c’est déjà moins simple.

Installation d’un jdk avec chef:

git checkout step2_java
  • J’ai légérement modifié le fichier run.sh pour pouvoir passer le nom d’un fichier json en paramétre.
  • J’ai recopié le cookbook java proposé par opscode, il propose deux manières d’installer java:
    • En utilisant directement ce cookbook java, on le paramétre dans le fichier d’attribut json
    • En utilisant le LWRP java_ark qui est définit dans ce cookbook, c’est une nouvelle ressource qu’on peut utiliser et configurer depuis une autre recette
  • J’ai rajouté trois fichiers json et une recette

 Création de son propre cookbook

Il est temps de passer aux choses sérieuses! Tout d’abord un petit lien How to write a good Chef cookbook. Maintenant que java est installé on peut passer à Tomcat, là pour le coup je n’ai jamais été satisfait de apt-get install tomcat7…

git checkout step3_tomcat

Voici mon cookbook pour installer tomcat à ma sauce :

??? tomcat
?   ??? attributes # Tout ce qui est paramétrable
?   ?   ??? default.rb
?   ??? files # Contient les fichiers à copier tel quel
?   ?   ??? default
?   ?     ??? manager.xml
?   ?     ??? tomcat-users.xml
?   ??? recipes
?   ?   ??? default.rb
?   ??? templates # Contient les fichiers paramétrables
?        ??? default
?         ??? tomcat_conf.erb
?         ??? tomcat_debian.erb
Au final, la ressource qui s’est avéré indispensable pour installer tomcat comme je le souhaitais a été celle nommée …”bash” !

Conclusion

Mon sentiment à propos de chef est mitigé. Je suis plus convaincu par les bonnes pratiques que Chef recommande que par l’implémentation elle-même. Chaque avantage que j’ai trouvé dans Chef cache des inconvénients.

Communauté de partage des bonnes recettes, sans doute le point le plus intéressant, mais les recettes proposées par opscode se veulent très générique (multi plateforme) et sont donc trop complexes.

Documentation exécutable, pour celà le DSL Chef pour écrire les recettes est déclaratif, c’est plus lisible, mais aussi beaucoup moins concis  que l’équivalent en bash. Et bien sûr contraignant, on fini par écrire du Ruby ou lancer une commande shell pour sortir du carcan.

Chef Server, c’est sans doute avec cette brique que Chef prend tout son sens. Mais la mise en oeuvre est complexe. A tel point que chez fasterize ils ont trouvé plus simple d’intégrer capistrano avec chef-solo à la place…

La grosse déception étant que l’on reste très loin de pouvoir se passer de connaitre le shell…