<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Louis Grenard</title>
    <description>The latest articles on DEV Community by Louis Grenard (@louistiti).</description>
    <link>https://dev.to/louistiti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F62125%2F9f418653-e6b9-4230-b4fa-b3c57ff44a34.png</url>
      <title>DEV Community: Louis Grenard</title>
      <link>https://dev.to/louistiti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/louistiti"/>
    <language>en</language>
    <item>
      <title>Sharing Our Journey Developing the Leon CLI</title>
      <dc:creator>Louis Grenard</dc:creator>
      <pubDate>Sat, 05 Feb 2022 14:10:25 +0000</pubDate>
      <link>https://dev.to/louistiti/sharing-our-journey-developing-the-leon-cli-52i0</link>
      <guid>https://dev.to/louistiti/sharing-our-journey-developing-the-leon-cli-52i0</guid>
      <description>&lt;p&gt;👋 Hey all, the first release of the &lt;a href="https://github.com/leon-ai/leon-cli"&gt;Leon CLI&lt;/a&gt; has landed a few days ago. I'd like to let &lt;a href="https://github.com/Divlo"&gt;Divlo&lt;/a&gt; and &lt;a href="https://github.com/ArthurDelamare"&gt;Arthur&lt;/a&gt; share their experience building it, the problems they faced, how they solved them and whatever they would like to share with you!&lt;/p&gt;

&lt;p&gt;If you are not familiar with Leon yet, Leon is an open-source personal assistant. He is based on Node.js for the core, and uses Python for his modules (skills). Therefore, several requirements need to be installed to start to fully enjoy the experience.&lt;/p&gt;

&lt;p&gt;Installing these requirements can be a hassle, origins of several issues you reported were due to their setup. Knowing that we all come from different backgrounds, it may be troublesome to get through this. So we have thought of a CLI to get your own Leon running in 3 commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  How the Project is Organized
&lt;/h3&gt;

&lt;p&gt;The two companions (us, &lt;a href="https://github.com/Divlo"&gt;Divlo&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/ArthurDelamare"&gt;Arthur&lt;/a&gt;) started working together with common goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make the installation easy&lt;/li&gt;
&lt;li&gt;Cross-platform&lt;/li&gt;
&lt;li&gt;And the most important of all, do it well&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You guess it, many discussions were needed to have a proper plan (come and join us on the &lt;a href="https://discord.gg/MNQqqKg"&gt;discord server&lt;/a&gt;, it's kinda cool there).&lt;/p&gt;

&lt;p&gt;Split the tasks, a system to maintain good quality, creating automation, manage our time... So many choices and only one pair of brains.&lt;/p&gt;

&lt;p&gt;Once upon a time a brainstorm, a really sweaty one!&lt;/p&gt;

&lt;p&gt;How many features should we release? The minimum, we would not want to confuse our friendly Leon users with unnecessary steps.&lt;/p&gt;

&lt;p&gt;Even with a few features, we had our whole package of difficulties. Fortunately, we had a well-structured task management system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://trello.com/b/7bdwhnLr/leon-your-open-source-personal-assistant-roadmap"&gt;Trello&lt;/a&gt; for the roadmap.&lt;/li&gt;
&lt;li&gt;Discord to communicate, do pair-programming and communicate with the community.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/leon-ai/leon-cli"&gt;GitHub&lt;/a&gt; to host our dear open-source CLI and discuss about implementation inside Pull Requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;p&gt;You asked for the tech stack? This one is tricky...&lt;/p&gt;

&lt;p&gt;From the beginning, the very first idea that emerged was to develop the CLI with JavaScript using Node.js to allow as many people as possible to contribute. For maintaining purpose and also personal preferences, our heart led us to TypeScript. You could argue with that choice but try it, you'll be convinced in no time 😉&lt;/p&gt;

&lt;p&gt;The next decision was the main library to build the CLI. A classic would be &lt;a href="https://github.com/tj/commander.js"&gt;Commander&lt;/a&gt; but it had a big drawback for us: the structure. Our goal was to start small and progressively tend to a full-featured tool, the companion for our Leon journey. Commander would allow a nice start but leads us to a kind of messy project as most of the command parameters are inside a single file.&lt;/p&gt;

&lt;p&gt;Let us introduce another alternative: &lt;a href="https://github.com/arcanis/clipanion"&gt;Clipanion&lt;/a&gt;, a type-safe CLI library with no runtime dependencies, made with TypeScript.&lt;/p&gt;

&lt;p&gt;A special thanks to &lt;a href="https://github.com/sindresorhus"&gt;Sindresorhus&lt;/a&gt;. Many of our struggles have been solved by his numerous packages, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;execa&lt;/code&gt; to execute commands.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chalk&lt;/code&gt; for the tasty flavour in your command line interface (it adds color).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;conf&lt;/code&gt; to let the CLI persists some data (configuration files and logs).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Challenges
&lt;/h3&gt;

&lt;p&gt;We offer two ways to install Leon:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A classic installation (directly installed on your machine).&lt;/li&gt;
&lt;li&gt;With Docker (an independent container).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two options and two brains, a perfect match! Naturally, we divided the work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Divlo started on the Docker install.&lt;/li&gt;
&lt;li&gt;And Arthur the classic one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's dive into some experience feedback:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Divlo&lt;/strong&gt;: The command &lt;code&gt;leon create birth&lt;/code&gt; was the hardest command to get it working as it's completely cross-platform, so we needed to create Virtual Machines to test on multiple OSes. The Docker installation was a little bit easier, as Docker does the "heavy lifting" for us.&lt;br&gt;
We both learned a lot building this first version of the CLI, but it's only the beginning and we want to make it more and more useful to be the companion for your Leon journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arthur&lt;/strong&gt;: Leon's CLI is a proof that nothing beats a challenge to learn and exceed your skills. I probably lost some hair managing the cross-platform side... So, I hope the community will appreciate my dedication.&lt;br&gt;
Jokes aside, it's one of the most interesting project I worked on. Enjoy using it!&lt;/p&gt;

&lt;h4&gt;
  
  
  Scalability
&lt;/h4&gt;

&lt;p&gt;How to easily add features without breaking existing ones? With a stable and trusted architecture.&lt;/p&gt;

&lt;p&gt;We started to talk about it before: Clipanion. But it's not the answer to everything... We also needed to reuse features between commands. The object-oriented architecture and the services to isolate our functions per domains were a part of the answer.&lt;/p&gt;

&lt;p&gt;To adapt to everyone and every architecture, each command has its set of options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8rSbZSsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/static/035c6c168629fb6c3adad0539b40e84a/b7936/leon-cli-help.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8rSbZSsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/static/035c6c168629fb6c3adad0539b40e84a/b7936/leon-cli-help.png" alt="Leon-CLI help command" width="880" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step for scalability is the testing system! For this v1, supporting Windows, Linux and macOS was the biggest challenge in terms of testing and scalability, by far.&lt;/p&gt;

&lt;h4&gt;
  
  
  Testing
&lt;/h4&gt;

&lt;p&gt;We used a common strategy, a combination of unit testing and end-to-end testing. Knowing that the specificity of our project is to have the OS as the kernel, the end-to-end tests are the most important, they are the guardian of our stability.&lt;/p&gt;

&lt;p&gt;Scenarios are the same on each OS and are executed on independent machines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Retrieve the CLI&lt;/li&gt;
&lt;li&gt;Make Leon alive by getting all its dependencies using &lt;code&gt;leon create birth&lt;/code&gt; command&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sQkDBKBz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/static/070a170e25f02f3e23901928128a41ee/c0255/leon-create-birth.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sQkDBKBz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/static/070a170e25f02f3e23901928128a41ee/c0255/leon-create-birth.png" alt="Leon create birth" width="880" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start Leon with &lt;code&gt;leon start&lt;/code&gt; and verify that the interface is available&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VczplMuK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/static/f0b88d5b9fa585f995ae2a1f3db393f0/7798c/leon-start.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VczplMuK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/static/f0b88d5b9fa585f995ae2a1f3db393f0/7798c/leon-start.png" alt="Leon start" width="880" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To ensure that the code remains at the top quality and that new features never breaks older ones, we implemented Continuous Integration. It means that every time we (or you) push new lines of code to the CLI, all the tests are executed through GitHub Actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to Expect in the Future
&lt;/h3&gt;

&lt;p&gt;A lot of stuff is coming, our ideas never end. Not only our ideas, yours too. 🙂&lt;br&gt;
Feel free to post any idea you have &lt;a href="https://github.com/leon-ai/leon-cli/issues"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A non-exhaustive list of incoming features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;leon info&lt;/code&gt; to get information of our Leon instances&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;leon update&lt;/code&gt; to obviously update Leon and see him evolve (get the latest features)&lt;/li&gt;
&lt;li&gt;A better developer experience for the creation of modules / packages&lt;/li&gt;
&lt;li&gt;Easily modify the configuration of Leon (text-to-speech, speech-to-text...)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>I Ran Away From Open Source</title>
      <dc:creator>Louis Grenard</dc:creator>
      <pubDate>Tue, 21 Dec 2021 13:33:24 +0000</pubDate>
      <link>https://dev.to/louistiti/i-ran-away-from-open-source-c2a</link>
      <guid>https://dev.to/louistiti/i-ran-away-from-open-source-c2a</guid>
      <description>&lt;p&gt;👋 Hey all, I mentioned in the previous blog posts that I'd share the reasons of my missing over the last few years, the vision I have for &lt;a href="https://github.com/leon-ai/leon" rel="noopener noreferrer"&gt;Leon&lt;/a&gt;, your open-source personal assistant, and more about what is going through my mind. So now is the time, let's get started!&lt;/p&gt;

&lt;h3&gt;
  
  
  I Lost Focus
&lt;/h3&gt;

&lt;p&gt;In June 2019 I released the second beta version of Leon. On that moment, I was in a dynamic mindset that I wanted to build anything I had in mind. It was not exclusive to Leon. I went to bed, keep thinking about solutions to solve problems I was facing in life.&lt;/p&gt;

&lt;p&gt;I discovered the IoT world via my work on that time. It was fascinating. I love the whole concept of it. Building scalable architecture and most of all: pressing virtual or physical buttons to trigger actions that create physical impact on the other side of the globe.&lt;/p&gt;

&lt;p&gt;Back in time, I created our own IoT pipeline using Microsoft Azure. I built the PKI to deliver and verify devices certificates. It was possible to control devices (send messages, invoke methods, etc.) from a web browser to the device. And it was also possible for devices to request the cloud and handle millions of connections thanks to the IoT hub and device provisioning service. All the data were handled via a stream analytics processor and landed into a data lake like CosmosDB and can also replicate important data to a PostgreSQL one if necessary. The main protocol between our cloud and devices was AMQP, but MQTT was also supported.&lt;/p&gt;

&lt;p&gt;At that time, I wanted to build anything that was going through my mind, everyday. Well, we can say &lt;strong&gt;I lost focus&lt;/strong&gt;. In such interesting and noisy world where there are infinite of possibilities, staying focus is maybe one of the hardest thing to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Missing
&lt;/h3&gt;

&lt;p&gt;On top of that, I was questionning my career. I wanted to explore new horizons.&lt;/p&gt;

&lt;p&gt;Also, having a girlfriend with an entrepreneurship mindset does not help. I wanted to show her real results. We all know how challenging it is to express what we are doing or share what we are able to do with someone who isn't in the tech industry.&lt;/p&gt;

&lt;p&gt;So I got trapped into the &lt;strong&gt;ego building&lt;/strong&gt; circle...&lt;/p&gt;

&lt;p&gt;Here is a list of the major things I did during my missing and the benefits I got for each of them:&lt;/p&gt;

&lt;h4&gt;
  
  
  2aud.io
&lt;/h4&gt;

&lt;p&gt;I built a SaaS that converts URLs (web scraping), documents and text files into audio.&lt;/p&gt;

&lt;p&gt;It was supporting 159 types of voice and 30 languages. I launched the private alpha version, collected feedback, got 230+ emails on the waiting list. Then I stopped for whatever reason.&lt;/p&gt;

&lt;p&gt;What's cool here is I may inject the core of 2aud.io into a Leon module. So Leon could read any resource for us like a podcast.&lt;/p&gt;





&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;: strengthen my A to Z building skill.&lt;/p&gt;

&lt;h4&gt;
  
  
  YouTube Videos + Community
&lt;/h4&gt;

&lt;p&gt;I published web development videos on my &lt;a href="https://www.youtube.com/c/LouistitiFr" rel="noopener noreferrer"&gt;French YouTube channel&lt;/a&gt;, started a Node.js course by going in depth but with a language that everyone can understand, etc.&lt;/p&gt;

&lt;p&gt;Around that I put together a community with a Discord server. Today there are still 670+ applications lining up...&lt;/p&gt;

&lt;p&gt;In that community people started to build projects together to learn more about web development. I'd say 33% of the people where changing their career path to software engineering. It was composed of people with good experience and newcomers in the tech industry. This variety of profiles created interesting discussions.&lt;/p&gt;

&lt;p&gt;People were sharing their projects progress during monthly calls we were organizing. We were warmly welcoming new fellows with proper calls too.&lt;/p&gt;

&lt;p&gt;And we were working on our own projects during some immersive call sessions. The idea was to work during an hour in a row by muting microphones. Then we enabled back the mic to share our last hour progress and help each other if necessary for a few minutes. Then we kept going.&lt;/p&gt;

&lt;p&gt;Stay tuned because &lt;strong&gt;I'd love to recreate the same model of community but around Leon!&lt;/strong&gt; If you are interested in that then feel free to &lt;a href="https://www.getrevue.co/profile/leon" rel="noopener noreferrer"&gt;subscribe to the newsletter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learned how to build a private and active community from the green grass.&lt;/li&gt;
&lt;li&gt;Learned video making and video animation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Computer Vision
&lt;/h4&gt;

&lt;p&gt;In December 2020, I challenged myself to learn a bit about computer vision within two days. To get started with this field that was new to me I trained a deep learning model that was recognizing rubik's cubes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2Fef9a8ce6d80394f1cc3369e947c070ac%2F0ede0%2Fcv-rubiks-cube-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2Fef9a8ce6d80394f1cc3369e947c070ac%2F0ede0%2Fcv-rubiks-cube-1.jpg" alt="Rubik's cube recognition 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2F00ae88c3558b671f91591ab3885d43ec%2F0ede0%2Fcv-rubiks-cube-2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2F00ae88c3558b671f91591ab3885d43ec%2F0ede0%2Fcv-rubiks-cube-2.jpg" alt="Rubik's cube recognition 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I created a PoC that was recognizing shapes on a whiteboard in the purpose of generating a UIDL to automatically create web components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2Fc058a6215f050fa946e248fbc2459eb0%2F40601%2Faliframe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2Fc058a6215f050fa946e248fbc2459eb0%2F40601%2Faliframe.png" alt="Aliframe"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, waaay more data were needed and my time was very limited so the model wasn't super accurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved my learning skill.&lt;/li&gt;
&lt;li&gt;Today Leon has ears and mouth, why not add eyes later on? :)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every benefit listed above will definitely help in my Leon journey.&lt;/p&gt;

&lt;p&gt;In 2020 I also ran a French web agency with a friend on the side of my job and mainly worked on a streaming platform with a customer who is managing French celebrities. Then I started to create a mobile application with React Native to help a relative. Here too, my React Native experience will help Leon growth, I let you think of the possibilities... Hence, by coming back on Leon, I migrated nodes (docs from VuePress to Docusaurus; the website from Nuxt.js to Next.js and this blog from Hexo to Gatsby) to the React ecosystem.&lt;/p&gt;

&lt;p&gt;I tried and learned many new things along the way. However, I knew my ultimate goal was to get back on track with Leon and make sure that I'm not missing anything I would like to explore more.&lt;/p&gt;

&lt;p&gt;You know what my biggest fear is? It is to be on my death bed, look back and regret to not even try and accomplish my goals. Sooner I realized it is not by focusing on so many things like this that I'm gonna escape that fear.&lt;/p&gt;

&lt;p&gt;Today I'm glad to say that I joined the Alibaba Group on the Lazada business several months ago. Don't worry, this does not mean I will have less time to work on Leon. Back in time, I was able to release the first beta version of Leon by having my full-time job. Organization is key.&lt;/p&gt;

&lt;h3&gt;
  
  
  I Found Back my Whys
&lt;/h3&gt;

&lt;p&gt;I needed to &lt;strong&gt;refocus on the why&lt;/strong&gt; of Leon before to refocus on the technical part. Why am I creating Leon? Why did I even get started at the first place?&lt;/p&gt;

&lt;p&gt;Here is how I see it: there is a &lt;strong&gt;practical why&lt;/strong&gt;, and a &lt;strong&gt;deep why&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Practical Why
&lt;/h4&gt;

&lt;p&gt;This why is specific to the project itself. What problems is Leon solving?&lt;/p&gt;

&lt;p&gt;The answer of this why is the value/result of what the outside world will see and use. You can take a look at the &lt;a href="https://docs.getleon.ai/#motivations" rel="noopener noreferrer"&gt;motivations here&lt;/a&gt;. And you can continue to read to the next section to know more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Deep Why
&lt;/h4&gt;

&lt;p&gt;This one is a bit more personal. It is my source of energy to solve the practical why. It is the fuel of my practical why.&lt;/p&gt;

&lt;p&gt;To answer, I'd say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I like solving problems, but most importantly the "how" I solve them is what makes me move forward. This is not specific to programming. It also requires talking with people, doing some so-called "marketing", designing, overall thinking, and more.&lt;/li&gt;
&lt;li&gt;Sharing your creations with the world is so exciting because you can let your blueprint behind you. The tech industry is very pleasant for that: you face an issue, you think of a way to solve it, then you can "quickly" build something to fix it and share it.&lt;/li&gt;
&lt;li&gt;Having my own vision and driving towards the direction that I have chosen allows me to discover and learn new fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vision for Leon
&lt;/h3&gt;

&lt;p&gt;Earlier this year I questionned myself to get back on track:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2F097a7553b9a4ef7cff30eedbda5bfdb3%2F0ede0%2Fleon-questions.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2F097a7553b9a4ef7cff30eedbda5bfdb3%2F0ede0%2Fleon-questions.jpg" alt="Leon questions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2F8fec152ef177fc04ab95fb7ca4bc31f1%2F0ede0%2Fleon-keys.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.getleon.ai%2Fstatic%2F8fec152ef177fc04ab95fb7ca4bc31f1%2F0ede0%2Fleon-keys.jpg" alt="Leon keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I dream of for Leon is that we can interact with him via different clients (mobile, desktop, customized hardware, etc.). Today with the growth of voice and NLP technologies, it becomes way more accessible to create powerful personal/virtual assistant.&lt;/p&gt;

&lt;p&gt;With my IoT experience, I will also bring this field to Leon so we can do home automation and more.&lt;/p&gt;

&lt;p&gt;I'd like to bring a social aspect too. At the moment I prefer not to disclose this part.&lt;/p&gt;

&lt;p&gt;We can even imagine of using AR and/or VR, but that is a long term thing.&lt;/p&gt;

&lt;p&gt;The whole idea is that Leon becomes your virtual brain so he can handle all your virtual troubles and makes you feel that the technology disappears somehow.&lt;/p&gt;

&lt;h4&gt;
  
  
  Focus
&lt;/h4&gt;

&lt;p&gt;To do so, here are the big lines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;strong&gt;core of Leon needs to be more powerful&lt;/strong&gt;. So I will be focusing on this part from now on. Like a way to easily support multi languages, create widgets, add support of JavaScript modules, etc. Check the &lt;a href="http://roadmap.getleon.ai/" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt; to see more.&lt;/li&gt;
&lt;li&gt;Leon needs to &lt;strong&gt;cover most of the basic use cases of existing closed source assistants&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Growing the community&lt;/strong&gt;. I paused the project for too long. And without an active community, Leon cannot grow fast. I want to put together a special community of creative people like I mentioned earlier in this post.&lt;/li&gt;
&lt;li&gt;I have some ideas in mind that will &lt;strong&gt;make Leon smarter&lt;/strong&gt;. But I will keep those in the private roadmap at the moment and disclose them when the time comes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Along with the vision, a rebranding was necessary to have a atmosphere that aligns with the vision of Leon. You can take a look at a &lt;a href="https://getleon-ai.vercel.app/" rel="noopener noreferrer"&gt;preview of the new landing page here&lt;/a&gt;. In a next blog post I'll talk more about this rebranding. Explaining the reasons behind the "outter space" atmosphere and more...&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrap Up
&lt;/h3&gt;

&lt;p&gt;With all that said, the direction of Leon is quite clear. &lt;strong&gt;I've been missing working on Leon so much!&lt;/strong&gt; Today we can start again and move forward in a healthy way. Also, I'd like to use this moment to thanks all the &lt;a href="https://github.com/leon-ai/leon#-sponsors" rel="noopener noreferrer"&gt;sponsors&lt;/a&gt; and &lt;a href="https://vercel.com/?utm_source=leon-ai&amp;amp;utm_campaign=oss" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; for recently sponsoring Leon 🖤 &lt;/p&gt;

&lt;p&gt;It feels good to be back!&lt;/p&gt;

&lt;p&gt;I recently opened my GitHub Sponsor so you can now &lt;a href="http://sponsor.getleon.ai/" rel="noopener noreferrer"&gt;sponsor me on GitHub&lt;/a&gt; and get some perks.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>news</category>
    </item>
    <item>
      <title>Leon Open-Source Personal Assistant: Getting Rid of Dust / 1.0.0-beta.4</title>
      <dc:creator>Louis Grenard</dc:creator>
      <pubDate>Sat, 01 May 2021 16:05:41 +0000</pubDate>
      <link>https://dev.to/louistiti/getting-rid-of-dust-1-0-0-beta-4-3f16</link>
      <guid>https://dev.to/louistiti/getting-rid-of-dust-1-0-0-beta-4-3f16</guid>
      <description>&lt;p&gt;👋 Hey all, the time has come... Like &lt;strong&gt;finally&lt;/strong&gt;! I know it has been a long time. The project has been paused for about 2 years. We'll talk about the reasons of this endless pause in another blog post.&lt;/p&gt;

&lt;p&gt;Today, we'll focus on the new release of &lt;a href="https://github.com/leon-ai/leon" rel="noopener noreferrer"&gt;Leon&lt;/a&gt; and understand what's new, where the project is leading to and the thinking process behind some decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Focus
&lt;/h2&gt;

&lt;p&gt;The focus of this release is quite obvious. 2 years pause on a project requires a deep work on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rethinking about the project vision.&lt;/li&gt;
&lt;li&gt;Redefining who would be interested in the project.&lt;/li&gt;
&lt;li&gt;Analyzing technical debt and taking action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At least that's how I put it together.&lt;/p&gt;

&lt;p&gt;It's important to mention that the work here was not only technical. I needed to refocus on the &lt;strong&gt;WHY&lt;/strong&gt; of Leon.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why did I build Leon at the first place?&lt;/li&gt;
&lt;li&gt;What problems is it solving?&lt;/li&gt;
&lt;li&gt;Is it still valuable today?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's focus on the technical part as the other part will be covered in another blog post.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dependency Updates
&lt;/h3&gt;

&lt;p&gt;That is what happens when you don't update your project dependencies for about 2 years... Let images speak for themselves.&lt;/p&gt;

&lt;h4&gt;
  
  
  After a &lt;code&gt;npm install&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyecx0pppe3yfthm2j6oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyecx0pppe3yfthm2j6oy.png" alt="npm vulnerabilities"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  After a &lt;code&gt;npm run build&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumgflda6061gb6jgstej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumgflda6061gb6jgstej.png" alt="Node.js warnings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  How The Commit History Looked Like...
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ik0i0ixsbhqqio5r2xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ik0i0ixsbhqqio5r2xx.png" alt="Dependency commits"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I believe you got a rough idea of what needed to be done. Clearly I &lt;strong&gt;updated all dependencies that Leon relies on&lt;/strong&gt;. Of course I could make use of tools such as &lt;a href="https://dependabot.com/" rel="noopener noreferrer"&gt;Dependabot&lt;/a&gt; but I preferred to update everything manually. It allowed me to have a better control of what I was doing and see if each dependency still has its seat in the project. Most of all, and this is only my own opinion, I prefer to keep dependency updates as a one-shot task instead of having noises in pull requests.&lt;/p&gt;

&lt;p&gt;I read the changelog of each dependency to understand what has changed, has been improved and check if there was any breaking change.&lt;/p&gt;

&lt;p&gt;You can find a list of all the updates &lt;a href="https://trello.com/c/TK2v9uxP/300-%E2%AC%86%EF%B8%8F-100-beta4-upgrade-dependencies-to-their-latest-version-clean-up" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Dropping Husky
&lt;/h4&gt;

&lt;p&gt;Leon was using &lt;a href="https://typicode.github.io/husky/#/" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; that was triggering a script I wrote to parse a commit message on the &lt;a href="https://git-scm.com/docs/githooks#_commit_msg" rel="noopener noreferrer"&gt;commit-msg&lt;/a&gt; Git hook.&lt;/p&gt;

&lt;p&gt;It was working pretty well after the update, but GUI clients like &lt;a href="https://www.gitkraken.com/" rel="noopener noreferrer"&gt;GitKraken&lt;/a&gt; was not working properly anymore due to their recent changes (it was working well before). So I decided to &lt;strong&gt;drop Husky&lt;/strong&gt; or any Git hook trigger script because I don't want this be a bottleneck for contributors. So I keep it simple without commit restriction.&lt;/p&gt;

&lt;p&gt;I believe that the &lt;a href="https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md#commits" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; file is enough to understand how to commit to the project. However, it's quite important to respect the commit convention as it eases the changelog generation for each new release.&lt;/p&gt;

&lt;h4&gt;
  
  
  Dropping Babel?
&lt;/h4&gt;

&lt;p&gt;While &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt; is an awesome JavaScript compiler, I was considering to drop it. Leon does not need to be ahead of current specifications, I felt it was a good choice to drop dependencies related to Babel as it'd lighten the dependency tree (which means faster install, less maintenance work and less potential security issue).&lt;/p&gt;

&lt;p&gt;Moreover, since Node.js 14 we can &lt;a href="https://nodejs.org/dist/latest-v14.x/docs/api/esm.html#esm_modules_ecmascript_modules" rel="noopener noreferrer"&gt;make use of experimental ECMAScript modules&lt;/a&gt; which are the official standard format to package JavaScript code for reuse. Node.js was only supporting &lt;a href="https://nodejs.org/docs/latest/api/modules.html#modules_modules_commonjs_modules" rel="noopener noreferrer"&gt;CommonJS (CJS) modules&lt;/a&gt; before that.&lt;/p&gt;

&lt;p&gt;But here is the thing, I want to continue to use the &lt;a href="https://www.npmjs.com/package/module-alias" rel="noopener noreferrer"&gt;&lt;code&gt;module-alias&lt;/code&gt; npm package&lt;/a&gt; as I find it brings better readability of the imports. I found that it requires to build a custom module loader to resolve it. I concluded that it was too much steps to achieve for a small output, then I chose to postpone the Babel dropping task. If you are interested into that specific case, there is an &lt;a href="https://github.com/ilearnio/module-alias/issues/59" rel="noopener noreferrer"&gt;ongoing GitHub issue&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I might &lt;strong&gt;come back to this task once the ecosystem will be more ready&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Raspberry Support?
&lt;/h4&gt;

&lt;p&gt;Thanks to the last changes, apparently Leon might work on &lt;strong&gt;at least Raspberry 3B+&lt;/strong&gt; as per &lt;a href="https://github.com/leon-ai/leon/issues/37#issuecomment-803709534" rel="noopener noreferrer"&gt;this comment&lt;/a&gt;. A deeper look will be provided on this side.&lt;/p&gt;

&lt;p&gt;Feel free to contribute.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix Hotword Detection
&lt;/h3&gt;

&lt;p&gt;Leon uses &lt;a href="https://github.com/Kitt-AI/snowboy" rel="noopener noreferrer"&gt;Snowboy&lt;/a&gt; for its hotword detection. Unfortunately the project has been discontinued and is suffering from the lack of maintainability. &lt;/p&gt;

&lt;p&gt;Indeed, Snowboy uses &lt;a href="https://github.com/mapbox/node-pre-gyp" rel="noopener noreferrer"&gt;node-pre-gyp&lt;/a&gt; which helps to publish and install Node.js C++ addons from binaries. So when a new Node.js version is shipped, &lt;code&gt;node-pre-gyp&lt;/code&gt; must update its listing of the supported targets by specifying the:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New Node.js version.&lt;/li&gt;
&lt;li&gt;Node.js C++ &lt;a href="https://nodejs.org/en/docs/guides/abi-stability/" rel="noopener noreferrer"&gt;ABI&lt;/a&gt; number.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://v8.dev/" rel="noopener noreferrer"&gt;V8 JavaScript engine&lt;/a&gt; version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usually it is done through &lt;a href="https://github.com/mapbox/node-pre-gyp/blob/master/lib/util/abi_crosswalk.json" rel="noopener noreferrer"&gt;this file&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Despite the lack of maintainability, I decided to &lt;strong&gt;create a &lt;a href="https://github.com/leon-ai/snowboy" rel="noopener noreferrer"&gt;fork of Snowboy&lt;/a&gt;&lt;/strong&gt; and maintain it independently. On this fork, &lt;strong&gt;Snowboy works with Node.js &amp;gt;= 14&lt;/strong&gt; as specified in &lt;a href="https://github.com/Kitt-AI/snowboy/pull/537#issuecomment-797881134" rel="noopener noreferrer"&gt;this issue comment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please keep in mind that is a &lt;strong&gt;temporary solution&lt;/strong&gt; as this part of Leon should be improved in the future. If you have any suggestion for a hotword detection alternative or wish to build one, don't hesitate to &lt;strong&gt;shoot me an email at &lt;a href="mailto:louis.grenard@gmail.com"&gt;louis.grenard@gmail.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I found some alternatives such as &lt;a href="https://github.com/Picovoice/porcupine" rel="noopener noreferrer"&gt;Porcupine&lt;/a&gt; from &lt;a href="https://picovoice.ai/" rel="noopener noreferrer"&gt;Picovoice&lt;/a&gt; that works pretty well. But at the moment I'm writing this, their tooling does not allow to have short hotword like &lt;code&gt;Leon&lt;/code&gt;. Which is in fact a best practice, but it means we'd need to comply such limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  There is More...
&lt;/h2&gt;

&lt;p&gt;The points above were the main ones to focus on for this release. But there are actually more things coming with it!&lt;/p&gt;

&lt;h3&gt;
  
  
  The Web App is Now Powered by Vite
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhags00knbjav5bqj1h1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhags00knbjav5bqj1h1.jpeg" alt="Leon loves Vite"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm happy to say that Leon's &lt;strong&gt;web app is now powered by &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt;&lt;/strong&gt;. The web app will get major changes in the future, so a review was necessary before to kick off the work.&lt;/p&gt;

&lt;p&gt;The web app was using some Node.js features and &lt;a href="http://browserify.org/" rel="noopener noreferrer"&gt;Browserify&lt;/a&gt;. This is an unnecessary layer in our case. I wanted every feature be natively supported by the browsers as upcoming clients will also be natively supported by their respected platform.&lt;/p&gt;

&lt;p&gt;Now that we are on an explicit browser compatible codebase, this is where Vite enters the game. In sum: better DX and performance.&lt;/p&gt;

&lt;p&gt;Learn about the benefits &lt;a href="https://vitejs.dev/guide/why.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  From CircleCI to GitHub Actions
&lt;/h3&gt;

&lt;p&gt;Until a while I was always using &lt;a href="https://circleci.com/" rel="noopener noreferrer"&gt;CircleCI&lt;/a&gt; for my projects as I think it is doing a great job for CI and CD.&lt;/p&gt;

&lt;p&gt;However, since GitHub has launched &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; I liked the idea of having the codebase close to the CI, so we don't need to get out of the GitHub ecosystem.&lt;/p&gt;

&lt;p&gt;Sometimes on CircleCI, Leon was having troubles since the Node.js 14+ upgrade from the Leon's CI Docker image. The same Docker image was finishing all the jobs perfectly on different machines but not on CircleCI ones. It was timing out or finishing with an error for the end-to-end modules tests. The error was related to the Node.js &lt;a href="https://nodejs.org/api/child_process.html" rel="noopener noreferrer"&gt;child process&lt;/a&gt; that did not work. So my bet is it was sometimes running out of memory.&lt;/p&gt;

&lt;p&gt;Since I migrated to GitHub Actions, none of these happened. As Leon was using the Docker type on CircleCI, it looks like there is bit more hardware power on GitHub Actions. I did not try with the raw CircleCI Linux types as I wanted to use the &lt;a href="https://hub.docker.com/r/leonai/ci/" rel="noopener noreferrer"&gt;Leon's Docker image dedicated for its CI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CircleCI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4dsveae8occtyi5urqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4dsveae8occtyi5urqh.png" alt="CircleCI types"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg05lzdbuyfuh305qttps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg05lzdbuyfuh305qttps.png" alt="GitHub Actions types"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today Leon's CI is composed of 3 GitHub Actions &lt;a href="https://github.com/leon-ai/leon/tree/develop/.github/workflows" rel="noopener noreferrer"&gt;workflows&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;build&lt;/strong&gt;: to ensure Leon can be built successfully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lint&lt;/strong&gt;: to ensure the source code is written as per the standards of the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tests&lt;/strong&gt;: to ensure the quality of the features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are interested in migrating from CircleCI to GitHub Actions, GitHub has put together &lt;a href="https://docs.github.com/en/actions/learn-github-actions/migrating-from-circleci-to-github-actions" rel="noopener noreferrer"&gt;an article&lt;/a&gt; that is pretty straightforward.&lt;/p&gt;

&lt;h3&gt;
  
  
  From Express.js to Fastify
&lt;/h3&gt;

&lt;p&gt;Leon needs an HTTP server to allow clients to grab some metadata such as the version, language, etc. and for more in the future... This is also where the WebSocket handshake happens to establish a bi-directional connection with clients.&lt;/p&gt;

&lt;p&gt;Most of the time we hear about &lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;Express.js&lt;/a&gt; because it is a well established web framework in the Node.js ecosystem, since the early days. But &lt;a href="https://www.fastify.io/" rel="noopener noreferrer"&gt;Fastify&lt;/a&gt; also joined the &lt;a href="https://openjsf.org/projects/" rel="noopener noreferrer"&gt;OpenJS Foundation&lt;/a&gt; which means it is also serious.&lt;/p&gt;

&lt;p&gt;I agree with most of what is explained in &lt;a href="https://dev.to/romainlanz/why-you-should-drop-expressjs-in-2021-711"&gt;this article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks to the great job from &lt;a href="https://github.com/Divlo" rel="noopener noreferrer"&gt;Divlo&lt;/a&gt;, the migration is shipped with this new release. &lt;/p&gt;

&lt;h3&gt;
  
  
  Try Leon with a Single-Click
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwptvaowxxsl979uhvel.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwptvaowxxsl979uhvel.jpeg" alt="Leon loves Gitpod"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try Leon with a single-click thanks to &lt;a href="https://www.gitpod.io/" rel="noopener noreferrer"&gt;Gitpod&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It will automatically setup an environment with all the requirements and run an instance for you. It allows potential contributors to get started pretty fast and add value to the project.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://gitpod.io/#https://github.com/leon-ai/leon" rel="noopener noreferrer"&gt;try it here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Again, kudos to &lt;a href="https://github.com/Divlo" rel="noopener noreferrer"&gt;Divlo&lt;/a&gt; for suggesting and making this happens 👏&lt;/p&gt;

&lt;h3&gt;
  
  
  Force Minimum Node.js Version
&lt;/h3&gt;

&lt;p&gt;To ensure that the minimum Node.js and npm versions are respected, the following has been added to the &lt;code&gt;package.json&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"engines"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;=14.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"npm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;=5.0.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  New NLP
&lt;/h3&gt;

&lt;p&gt;Since the previous release, &lt;a href="https://github.com/axa-group/nlp.js" rel="noopener noreferrer"&gt;NLP.js&lt;/a&gt; pushed a lot of work and has released a major version, moving from a monolithic library to multiple independent packages. So I spent some time to make Leon's NLP compatible to the latest changes.&lt;/p&gt;

&lt;p&gt;These changes mostly include the NER and NLU of Leon and still makes use of neural network.&lt;/p&gt;

&lt;h3&gt;
  
  
  Always More...
&lt;/h3&gt;

&lt;p&gt;Please feel free to take a look at the &lt;a href="https://roadmap.getleon.ai/" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt; to have a full understanding of what has been done for this release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Changes
&lt;/h2&gt;

&lt;p&gt;This release includes a few if it's nearly none breaking changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Have I Been Pwned module&lt;/strong&gt;: it now requires &lt;a href="https://github.com/leon-ai/leon/tree/develop/packages/checker#have-i-been-pwned" rel="noopener noreferrer"&gt;a key&lt;/a&gt; to be able to request their API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IBM Watson&lt;/strong&gt;: IBM will shutdown their legacy API (end of life on 26 May 2021). Leon complies to the last changes of the IBM Watson Node.js SDK. If you are using Watson TTS or Watson STT, you can make the changes as specified in &lt;a href="https://docs.getleon.ai/configuration.html#watson" rel="noopener noreferrer"&gt;the docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Polly&lt;/strong&gt;: Amazon did a complete modular rewrite of their Node.js SDK. Leon complies to these changes. If you are using Amazon Polly, make sure to pull the last configuration file structure for Amazon Polly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Long Term
&lt;/h3&gt;

&lt;p&gt;In the long term, an important guideline needs to be followed so Leon can shine better:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Drastic improvements&lt;/strong&gt; need to be done on the &lt;strong&gt;foundations/core&lt;/strong&gt; and the &lt;strong&gt;tooling&lt;/strong&gt; sides. That includes context in modules, JavaScript bridge so we can write JavaScript modules, widgets for better looking module outputs, dynamic multi-languages support on edge, new clients and so on...&lt;/li&gt;
&lt;li&gt;Then we hope we can &lt;strong&gt;grow the community&lt;/strong&gt; bigger thanks to what Leon will be able to do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale&lt;/strong&gt; Leon with new &lt;strong&gt;useful modules&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The idea is to &lt;strong&gt;get closer and closer to closed source assistants&lt;/strong&gt; thanks to the growing community and better foundations. But by &lt;strong&gt;ALWAYS&lt;/strong&gt; keeping the core open and a flexibility that challenges our imagination.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Shorter Term
&lt;/h3&gt;

&lt;p&gt;In a shorter term, here is what we can expect to see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;blog post&lt;/strong&gt; explaining my &lt;strong&gt;Coming Back&lt;/strong&gt; on the project, the &lt;strong&gt;WHY&lt;/strong&gt; and things I mentioned earlier. It's important for me to &lt;strong&gt;share you my thoughts and this journey&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;full rebranding&lt;/strong&gt; with a new visual identity of the project that &lt;strong&gt;reflects&lt;/strong&gt; more the &lt;strong&gt;values and vision of Leon&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The CLI&lt;/strong&gt; so it improves the onboarding experience by removing the hassle of the requirements, centralizing commands and more... Kudos to &lt;a href="https://github.com/ArthurDelamare" rel="noopener noreferrer"&gt;Arthur&lt;/a&gt; and &lt;a href="https://github.com/Divlo" rel="noopener noreferrer"&gt;Divlo&lt;/a&gt; who are working on it! 👏&lt;/li&gt;
&lt;li&gt;Take a look at the &lt;strong&gt;&lt;a href="https://roadmap.getleon.ai/" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt;&lt;/strong&gt; to see more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cheers 🍹,&lt;br&gt;
Louis (&lt;em&gt;&lt;a href="https://twitter.com/louistiti_fr" rel="noopener noreferrer"&gt;@louistiti_fr&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>python</category>
      <category>node</category>
    </item>
    <item>
      <title>HTTP Response Status Codes In Real Life 😅</title>
      <dc:creator>Louis Grenard</dc:creator>
      <pubDate>Mon, 24 Feb 2020 01:40:46 +0000</pubDate>
      <link>https://dev.to/louistiti/http-response-status-codes-in-real-life-5f8c</link>
      <guid>https://dev.to/louistiti/http-response-status-codes-in-real-life-5f8c</guid>
      <description>&lt;p&gt;Hello world!&lt;/p&gt;

&lt;p&gt;A few days ago I was wondering how HTTP response status codes would look like in real life.&lt;/p&gt;

&lt;p&gt;I picked up my camera and tried to implement them around me.&lt;/p&gt;

&lt;p&gt;Well, it was an interesting experience!&lt;/p&gt;

&lt;p&gt;Here is the YouTube video with &lt;strong&gt;&lt;em&gt;these guys implemented&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=LUJx675Qiw4"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NhRMKyVW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZQ1MW80.png" alt="HTTP Response Status Codes In Real Life"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>developer</category>
      <category>http</category>
    </item>
    <item>
      <title>The Story Behind Leon</title>
      <dc:creator>Louis Grenard</dc:creator>
      <pubDate>Sun, 17 Feb 2019 13:06:13 +0000</pubDate>
      <link>https://dev.to/louistiti/the-story-behind-leon-25o9</link>
      <guid>https://dev.to/louistiti/the-story-behind-leon-25o9</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was firstly published on the &lt;a href="https://blog.getleon.ai/the-story-behind-leon/"&gt;original blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Big disclosure&lt;/strong&gt;: I never watched the movie &lt;em&gt;Léon: The Professional&lt;/em&gt; (at least not yet).&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Am I
&lt;/h2&gt;

&lt;p&gt;👋 Hey all, my name is &lt;a href="https://twitter.com/louistiti_fr"&gt;Louis Grenard&lt;/a&gt;, I was born in the 90's in the French mountains. I'm currently living in Shenzhen, China and working at a great company called &lt;a href="https://www.noa-labs.com"&gt;NOA Labs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I love building things since my early years, turning my GAN356 Air SM and I truly believe in &lt;a href="https://github.com/louistiti"&gt;open-source&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is Leon
&lt;/h2&gt;

&lt;p&gt;Let me explain you in few words.&lt;/p&gt;

&lt;p&gt;Leon is an open-source personal assistant who can live on your server. He does stuff when you ask for it.&lt;/p&gt;

&lt;p&gt;You can talk to him and he can talk to you. You can also text him and he can also text you. If you want to, Leon can communicate with you by being offline to protect your privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why The Hell "Leon"
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Leon&lt;/em&gt; is pretty simple to remember as a name and it is easier to pronounce whatever the language (&lt;em&gt;Leon&lt;/em&gt; in English, &lt;em&gt;Léon&lt;/em&gt; in French, &lt;em&gt;Lái áng&lt;/em&gt; in Chinese, &lt;em&gt;León&lt;/em&gt; in Spanish, etc.). Moreover, &lt;em&gt;Leon&lt;/em&gt; is created from &lt;em&gt;Leo&lt;/em&gt; which means &lt;em&gt;lion&lt;/em&gt; and that is my astrological sign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timeline
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;End of 2016&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Let's get back to the end of 2016. Mark Zuckerberg, the Facebook CEO published &lt;a href="https://www.facebook.com/notes/mark-zuckerberg/building-jarvis/10154361492931634/"&gt;a note&lt;/a&gt; and &lt;a href="https://www.facebook.com/zuck/videos/10103351034741311/"&gt;a video&lt;/a&gt; about his 2016 personal challenge. I was very exciting about the idea of interacting with a tech system by voice. Of course virtual assistants such as Siri already exist on that time, but the fact of reading about and seeing the Zuck's assistant gave me the desire to know more about it.&lt;/p&gt;

&lt;p&gt;Few days later I was on a train on my way back to my dear hometown in France. I quickly grabbed my laptop, and started coding a proof of concept in an HTML file. My very first motivation was to understand how the speech-to-text and text-to-speech were working in web development, so I naturally implemented the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API"&gt;Web Speech API&lt;/a&gt; and few hours later I got my PoC done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Early 2017&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; A few months later I was on my way to attend a family event in Munich, Germany and I was thinking about doing more than a simple web speech PoC. Something that could help in my daily life. I remember the first feature idea was a &lt;em&gt;financial tracker&lt;/em&gt;, I was thinking it could be so cool to say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Leon, how much money did I spend in restaurants in 2016
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And have something that reply me by voice and text with few details. So I caught my phone and started to write some feature ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mid-2017&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; At the end of June 2017 I moved to China and began my full-time job here. Watch was clocking and it's only in October that I decided to make a plan to properly work on Leon besides my work. I committed on a private repository the 4th of November 2017.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5cKt4z_f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/images/20190217/first_commit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5cKt4z_f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/images/20190217/first_commit.png" alt="First Leon commit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Few weeks later I was thinking if Leon helps me, then it might also help others. So I decided to create a modulable architecture and with a module that download videos from YouTube to save them on the device. I wanted that module because on that moment I was living 1 hour from my work and I needed to take subways, so I could watch/listen tech videos and podcasts during that time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Early 2018&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; It is the 7th of January 2018 I created the &lt;a href="https://roadmap.getleon.ai"&gt;Leon's roadmap&lt;/a&gt; by setting up some cards such as &lt;a href="https://trello.com/c/wt8W83AV/85-%F0%9F%93%9D-open-source"&gt;this one&lt;/a&gt; and started to document myself about open-source ecosystems &lt;em&gt;(I highly recommend you &lt;a href="https://opensource.guide/"&gt;Open Source Guides&lt;/a&gt;)&lt;/em&gt;. On that time, here is how Leon looked like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h5HxfP_---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://blog.getleon.ai/images/20190217/beginning.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h5HxfP_---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://blog.getleon.ai/images/20190217/beginning.gif" alt="Leon's beginning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;March 2018&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Then personal problems came out, and I did not work on Leon for two months. It's only in March 2018 that I wanted to test if Leon is interesting not only for me, but also for others. So I made some researches about Reddit, how it exactly works, the rules, etc. And I end up by creating a teasing video and publish it to several subreddits, such as &lt;a href="https://www.reddit.com/r/Python/comments/85axig/im_building_l%C3%A9on_an_opensource_personal_assistant/"&gt;/r/Python&lt;/a&gt;, &lt;a href="https://www.reddit.com/r/javascript/comments/85aso8/teasing_im_building_l%C3%A9on_an_opensource_personal/"&gt;/r/javascript&lt;/a&gt;, etc. I received tons of feedback, and got an issue because I published the video on Google Drive, and the video reached the maximum views allowed in a short period, so I needed to quickly publish the &lt;a href="https://www.youtube.com/watch?v=1B7JMBPZ0qI"&gt;video on YouTube&lt;/a&gt;. On that moment, Leon was still using the Web Speech API, so I refactored by implementing things that you know with the first release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mid-2018 - now&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; We are now in August 2018, where I decided to take a break due to other personal problems. Then it is from November 2018 I caught up with Leon until the release 🎉.&lt;/p&gt;

&lt;p&gt;If I compile the total of working time I spent on the Leon's &lt;code&gt;1.0.0-beta.0&lt;/code&gt; release. The result is &lt;strong&gt;11 months&lt;/strong&gt;, that includes: week-ends, early morning during weekdays (between 6am to 8am) before starting my lovely full-time work, and also at the end of the day after gym. And of course this result also includes days out of the computer. This number represents the whole timeline and not the specific time I was purely working on Leon. The number of commits on the private repository is 438.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks
&lt;/h2&gt;

&lt;p&gt;Please wait! It's not the end yet, I just want to thanks now because I think it's more accurate to write it right after the above section.&lt;/p&gt;

&lt;p&gt;I use these few lines to warmly thanks my:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Family for having supported my long speeches about Leon and seeing me canceled some family events.&lt;/li&gt;
&lt;li&gt;Lovely girlfriend for giving me such energy and motivation.&lt;/li&gt;
&lt;li&gt;Friends who suggesting ideas and believing in Leon since his early days.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💙&lt;/p&gt;

&lt;h2&gt;
  
  
  After One Week
&lt;/h2&gt;

&lt;p&gt;I released Leon under the &lt;code&gt;1.0.0-beta.0&lt;/code&gt; version the 10th of February 2019. Today we are now one week later than the release. Let me share what's happened over this week but before that, please... Let me tell you that you are incredibly &lt;strong&gt;A.W.E.S.O.M.E!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Leon has been well welcomed and all of that prove Leon has potential and there is a lot to do, &lt;strong&gt;together&lt;/strong&gt;. My friends, it's an amazing adventure which is starting over here!&lt;/p&gt;

&lt;p&gt;Here are some numbers from the initial release:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;24 hours later&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Leon gets his first 100 GitHub stars and appears in the GitHub JavaScript trending page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;48 hours later&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Leon reaches 200 GitHub stars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 days later&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Leon has more than 400 GitHub stars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5 days later&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Someone published Leon on the well known Hacker News and it has been well received. That brings Leon on the front page, to the 3rd position for few hours, then the 10th position for a complete day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 days later&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; The Leon's repository is ranked at the 1st position of the main GitHub trending page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7 days later (today)&lt;/strong&gt; &lt;em&gt;—&lt;/em&gt; Leon has more than 1.7k stars.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yMScgvU7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/images/20190217/leon_gh_trending.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yMScgvU7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/images/20190217/leon_gh_trending.png" alt="Leon on GitHub trending"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6nT4m9WJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/images/20190217/leon_hn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6nT4m9WJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.getleon.ai/images/20190217/leon_hn.png" alt="Leon on Hacker News"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The numbers above are promising, that's great and thanks to all of you for supporting the project. However, there is a lot &lt;a href="https://roadmap.getleon.ai"&gt;upcoming&lt;/a&gt;, this first release is the foundations of Leon.&lt;/p&gt;

&lt;p&gt;I already set the &lt;a href="https://github.com/leon-ai/leon/milestone/1"&gt;next milestone&lt;/a&gt; which is the &lt;code&gt;1.0.0-beta.1&lt;/code&gt; version. Now, Leon needs to grow up, he is only one week old. I count on you for &lt;a href="https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md"&gt;contributing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's educate and build Leon together&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cheers 🍻,&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Louis&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spread The Word &amp;amp; Stay Tuned
&lt;/h2&gt;

&lt;p&gt;👉 Share this &lt;a href="https://twitter.com/intent/tweet?source=webclient&amp;amp;original_referer=https://blog.getleon.ai/the-story-behind-leon&amp;amp;text=The%20Story%20Behind%20Leon&amp;amp;url=https://blog.getleon.ai/the-story-behind-leon&amp;amp;via=louistiti_fr"&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;👉 Follow me &lt;a href="https://twitter.com/louistiti_fr"&gt;@louistiti_fr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;👉 Subscribe to the &lt;a href="https://getleon.ai"&gt;newsletter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>python</category>
      <category>node</category>
    </item>
  </channel>
</rss>
