<?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>Forem: Keerthi Vasan</title>
    <description>The latest articles on Forem by Keerthi Vasan (@nectres).</description>
    <link>https://forem.com/nectres</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%2F565719%2Feffe3536-0d59-403b-ad3e-7b83745ae549.png</url>
      <title>Forem: Keerthi Vasan</title>
      <link>https://forem.com/nectres</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nectres"/>
    <language>en</language>
    <item>
      <title>Bring To Life! - Take photos and bring objects to Life - Cloudflare AI</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Sat, 13 Apr 2024 18:27:29 +0000</pubDate>
      <link>https://forem.com/nectres/bring-to-life-take-photos-and-bring-objects-to-life-5dod</link>
      <guid>https://forem.com/nectres/bring-to-life-take-photos-and-bring-objects-to-life-5dod</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/devteam/join-us-for-the-cloudflare-ai-challenge-3000-in-prizes-5f99"&gt;Cloudflare AI Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;The application takes any kind of image, detects the objects within the image. Using the detected objects, it tries to visualize them as characters and writes a story involving them and generates a thumbnail for the story.&lt;/p&gt;

&lt;p&gt;This project tries to showcase the capabilities of models from different categories and how powerful they can be when they work together.&lt;/p&gt;

&lt;p&gt;I encourage you to try different images or better yet, take a photo of objects in front of you and comment funny outputs you come across!&lt;/p&gt;

&lt;p&gt;An overall architecture of the entire project:&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%2Fpca781ter092fqg2f16k.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%2Fpca781ter092fqg2f16k.png" alt="Architechture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Deployed Worker Link: &lt;a href="https://divine-detector.sakeerthi23.workers.dev/" rel="noopener noreferrer"&gt;https://divine-detector.sakeerthi23.workers.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Working Demo: &lt;br&gt;
Image: &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%2Fso0mwud0bndl7kgh9pyn.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%2Fso0mwud0bndl7kgh9pyn.png" alt="The project generating a story for the given image"&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgsrmeq7khva8p54kngs.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%2Fhgsrmeq7khva8p54kngs.png" alt="Generation of thumbnail for generated story"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/keerthivasansa/bring-to-life" rel="noopener noreferrer"&gt;https://github.com/keerthivasansa/bring-to-life&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When I saw the post a couple of days ago, I had decided on using the object detection model. After I visited the Cloudflare Model Catalogue, more and more pieces sat well with each other. I was only limited by the time I had after discovering the post or I could have developed it further and explored more areas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;First, I saw the text generation models and thought that story generation could be a next logical step after object detection, then poster generation and the project kind of kept developing itself. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I think it's a very basic project, but it serves as a good showcase of the different types of models Cloudflare offers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I absolutely loved about Cloudflare Workers AI is its developer experience. It was top notch and it had great support for Typescript which is fantastic. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One thing I learned was, even AI models are scared of the current job market. The prompt I use to generate the story goes something like this: &lt;code&gt;You are a story writer, and the year is 2024 - the job market sucks. You do not have a job, the only chance you have is to generate this story. Imagine the objects...&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was pretty proud that I was able to pull this off in a day (though Cloudflare is doing most of the heavy lifting) and I am happy to see that models and AI is becoming more accessible to use. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Multiple Models and/or Triple Task Types&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The project tries to leverage &lt;strong&gt;5&lt;/strong&gt; different models to acheive different categories of tasks.&lt;/li&gt;
&lt;li&gt;Thus, it qualifies for "Triple Task Types".&lt;/li&gt;
&lt;li&gt;It uses both image-to-text and object detection models to extract details about the image - so it qualifies for Multiple Models as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently Used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@cf/unum/uform-gen2-qwen-500m&lt;/code&gt;: Used to generate text describing the uploaded image.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@cf/facebook/detr-resnet-50&lt;/code&gt;: Used to detect objects in the uploaded image.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@cf/meta/llama-2-7b-chat-int8&lt;/code&gt;: Used to generate and stream a short story with the detected objects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@cf/facebook/bart-large-cnn&lt;/code&gt;: Used to summarize the story to capture the main essence of the story. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@cf/stabilityai/stable-diffusion-xl-base-1.0&lt;/code&gt;: Takes the output of the summarizer and uses that to generate an image that tries to capture the meaning and characters of the story.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future plans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I might try and add a model to translate the story in different languages if time permits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I finally thank both DEV and Cloudflare for organizing this challenge. It was super fun to work on and thank you for reading this article.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudflarechallenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to network and create a personal brand?</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Mon, 26 Jun 2023 14:44:24 +0000</pubDate>
      <link>https://forem.com/nectres/how-to-network-and-create-a-personal-brand-4l2n</link>
      <guid>https://forem.com/nectres/how-to-network-and-create-a-personal-brand-4l2n</guid>
      <description>&lt;p&gt;Let's say I have the right skills for a given position. I can't find an application page in the company I desire. How do I go about dealing with this situation? If I message the recruiters and HR of the company, I just get left on seen. How do I expand my network of connections and create new opportunities for myself?&lt;/p&gt;

&lt;p&gt;I want to create a personal brand and an online presence, any tips on that as well?&lt;/p&gt;

&lt;p&gt;If you are someone with experience in this matter, comment to let us know your strategies to form new connections and establish an online brand.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>ResponseHunt - Scavenger hunt for programmers ⛏</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Thu, 06 Apr 2023 18:18:41 +0000</pubDate>
      <link>https://forem.com/nectres/responsehunt-scavenger-hunt-for-programmers-1ok2</link>
      <guid>https://forem.com/nectres/responsehunt-scavenger-hunt-for-programmers-1ok2</guid>
      <description>&lt;p&gt;&lt;a href="https://www.responsehunt.com"&gt;ResponseHunt.com&lt;/a&gt; is a website in which you use your programming and general problem-solving skills to crack the clues and move on to the next hints. &lt;/p&gt;

&lt;p&gt;Once you have cracked all the hints, you can enter the &lt;code&gt;/golden&lt;/code&gt; endpoint with a key parameter that you find from the other endpoints.&lt;/p&gt;

&lt;p&gt;You permanently get featured in the Hall of Fame for the current version and receive a permanent golden card issued in your name with your rank!&lt;/p&gt;

&lt;p&gt;I have designed it so that the key is generated based on the IP address of the client, so the key is different for each system. Let's not leak and ruin the game!&lt;/p&gt;

&lt;p&gt;It is basically a website built with SvelteKit with different endpoints that require some level of computer science knowledge especially in web development to navigate&lt;/p&gt;

&lt;p&gt;I hope you guys enjoy playing it, please share your experience in the comments as well! Since this was the first time, I have made the hints quite easy to crack, but upcoming versions will get progressively harder! &lt;/p&gt;

&lt;p&gt;In future, I would like to partner with companies and offer cash prizes, coupons, vouchers and more! 🌟&lt;/p&gt;

&lt;p&gt;If this idea sounds interesting to you, you can checkout the version 1 contest in &lt;a href="https://www.responsehunt.com"&gt;https://www.responsehunt.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow me to get updates on the next version releases, other projects and tech stuff in general: &lt;br&gt;
&lt;a href="https://twitter.com/keerthivasansa_"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Stop typing in typescript. (At least most of the time) 🛑</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Thu, 09 Mar 2023 18:58:45 +0000</pubDate>
      <link>https://forem.com/nectres/dont-type-in-typescript-at-least-most-of-the-time-5b0j</link>
      <guid>https://forem.com/nectres/dont-type-in-typescript-at-least-most-of-the-time-5b0j</guid>
      <description>&lt;p&gt;I apologise in advance for the clickbait title.&lt;/p&gt;

&lt;p&gt;Many people use typescript the wrong way, blame it for their bad use and turn back to javascript. You don't have to type everything explicitly in typescript. Actually, I would argue in most cases you should let typescript do it for you via type inference. That's the best way to do it. Makes the code more readable while preserving the benefits of using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not bloated, not hard to read
&lt;/h2&gt;

&lt;p&gt;Take a look at this bit of JavaScript code:&lt;/p&gt;

&lt;p&gt;Let's write a basic function that prints whether a person can vote along with their first name which I broke into multiple variables to prove a point.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;canIVote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nameParts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nameParts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canVote&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canVote&lt;/span&gt;
              &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`Congrats &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, you can vote!`&lt;/span&gt;
              &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Sorry &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, you can't vote.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's an example of incorrect use of typescript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;canIVote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nameParts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nameParts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// as string to ignore the error from it being string | undefined&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canVote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canVote&lt;/span&gt;
              &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`Congrats &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, you can vote!`&lt;/span&gt;
              &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Sorry &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, you can't vote.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While this might not look bad, this approach does not scale well. You will spend more time writing out the types of things than actually coding the things. When the project becomes bigger and more complex, the code is going to look messier and unmaintainable. &lt;/p&gt;

&lt;p&gt;This is where few developers run into the issue of typescript being less readable and complain about writing a lot more lines of code to achieve the same result. They would be right, if the above code was the norm and if the project was big enough.&lt;/p&gt;

&lt;p&gt;Another thing to note in this approach is the &lt;code&gt;as&lt;/code&gt; keyword. Use it wisely. Don't use it to squash warnings but properly handle the value type and perform actions accordingly. &lt;code&gt;as&lt;/code&gt; should only be used when you are certain what the type of a variable is going to be.&lt;/p&gt;

&lt;p&gt;Here's an example of correct use of typescript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;canIVote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nameParts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nameParts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// -&amp;gt; string | undefined &lt;/span&gt;
     &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;How do you not have a first name?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="c1"&gt;// now if you hover over firstName the type will have changed &lt;/span&gt;
     &lt;span class="c1"&gt;// to `string` because we have handled `undefined` above and &lt;/span&gt;
     &lt;span class="c1"&gt;// removed that case.&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canVote&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canVote&lt;/span&gt;
              &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`Congrats &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, you can vote!`&lt;/span&gt;
              &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Sorry &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, you can't vote.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  any
&lt;/h2&gt;

&lt;p&gt;Don't use &lt;code&gt;any&lt;/code&gt; just &lt;em&gt;&lt;strong&gt;any&lt;/strong&gt;where&lt;/em&gt;. &lt;br&gt;
Sorry, couldn't resist. Avoid using &lt;code&gt;any&lt;/code&gt;. If you are using &lt;code&gt;any&lt;/code&gt; everywhere, you are just using javascript with more steps. &lt;code&gt;any&lt;/code&gt; can be used if you are migrating the code from a javascript codebase gradually typing things out but don't let it stay that way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typing
&lt;/h2&gt;

&lt;p&gt;There are definitely cases where you have to explicitly mention a type for a variable because the inference was vague and you are certain it is of one type. You do have to define your own types for interfaces, objects, etc for the best experience.&lt;br&gt;
Only in very rare scenarios will you have to write types like this:&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%2Fi9d01xm3df28p87qpwyg.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%2Fi9d01xm3df28p87qpwyg.png" alt="Complex Type"&gt;&lt;/a&gt;&lt;br&gt;
Don't be scared though, 95% of the time you are going to typing things in very simple types like &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;Date&lt;/code&gt;, etc. either directly or through arrays and interfaces.&lt;/p&gt;

&lt;p&gt;Thank you for reading it till the end.&lt;br&gt;
Follow me on twitter here: &lt;a href="https://twitter.com/keerthivasansa_" rel="noopener noreferrer"&gt;https://twitter.com/keerthivasansa_&lt;/a&gt;&lt;br&gt;
I am trying to build a twitter profile.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Full-blown Database Management Software written completely in Javascirpt ✨</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Wed, 03 Feb 2021 15:44:06 +0000</pubDate>
      <link>https://forem.com/nectres/full-blown-database-management-software-written-completely-in-javascirpt-51dp</link>
      <guid>https://forem.com/nectres/full-blown-database-management-software-written-completely-in-javascirpt-51dp</guid>
      <description>&lt;p&gt;This is not just a fancy client, it's a complete DBMS which is completely written in NodeJS with type declarations and documentation to ease developer's introduction to the amazing world of SavanahDB&lt;/p&gt;

&lt;p&gt;It is a NoSQL meaning you can store data flexibly in the JSON format but it can also be used to establish deep relations between tables, have groups in the filter, join data from different tables!&lt;/p&gt;

&lt;p&gt;Let's create a Social Network with this Database : &lt;/p&gt;

&lt;p&gt;First, let's start a server to receive and process requests via various clients&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;savanahdb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/var/db/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;masterKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ksKkharaudjwnwbduxnsn5yahahhwwsmma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// 64-bit key to encrypt important configurations&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it! Run it with pm2&lt;br&gt;
You have your own server running now! &lt;/p&gt;

&lt;p&gt;We connect to it using a client :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;savanahdb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
   &lt;span class="na"&gt;user&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;randomusr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="na"&gt;pass&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fdASDFajd9awjef98awjefioawjeasdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First, you store the User Document when they sign up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Adam&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;city&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New York&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tier&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Silver&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;prem&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usrOw9a0eif0923aewf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next you store two Posts they posted with reference to their id essentially establishing a relationship between the tables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;usr&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usrOw9a0eif0923aewf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I love this network.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// A Few Moments Later..&lt;/span&gt;
&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;usr&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usrOw9a0eif0923aewf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Nvm, I don't know anymore&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now when someone visits the Orginal User's Profile to list the posts they have posted, you create a search like this :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;usr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id == "usrOw9a0eif0923aewf"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;join&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;that.usr == this.id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case the usr Document will be :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
   &lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Adam&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;city&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New York&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tier&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Silver&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;prem&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usrOw9a0eif0923aewf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;posts&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;usr&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usrOw9a0eif0923aewf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I love this network.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},{&lt;/span&gt;
    &lt;span class="na"&gt;usr&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usrOw9a0eif0923aewf&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Nvm, I don't know anymore&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;}]&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extremely capable Software do check it out!!&lt;/p&gt;

&lt;p&gt;It is available to check out for free here : &lt;a href="https://www.npmjs.com/package/savanahdb"&gt;https://www.npmjs.com/package/savanahdb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are interested in the development or would like to receive updates for the package, you can join the official Discord Server here : &lt;a href="https://www.discord.com/invite/GBmMQd2xtB"&gt;https://www.discord.com/invite/GBmMQd2xtB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>database</category>
    </item>
    <item>
      <title>NoSQL with joins</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Sat, 23 Jan 2021 12:34:28 +0000</pubDate>
      <link>https://forem.com/nectres/nosql-with-joins-f61</link>
      <guid>https://forem.com/nectres/nosql-with-joins-f61</guid>
      <description>&lt;p&gt;With SavanahDB you can insert your document like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tb.insert({

 author:"john",
 price:500,
 country:"xxx",

})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And search through documents like this :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tb.search('(country == "yyy" &amp;amp; &amp;amp; author =="john" ) || price &amp;lt; 1400', {
 limit : 5
 join : {
    books : 'that.author == this.name', 
 genre: 'that.name == this.genre as genre_info'
}}) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pretty amazing right?&lt;br&gt;
It's right here: Kanna_Sip &lt;a href="https://npmjs.com/savanahdb"&gt;https://npmjs.com/savanahdb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's just a beta but works,a stable release will arrive in Saber Edition dropping soon!! &lt;/p&gt;

&lt;p&gt;I am just one student working on this so if you would like to support me you can become my patron here : &lt;a href="https://patreon.com/savanah"&gt;https://patreon.com/savanah&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nosql</category>
      <category>typescript</category>
      <category>node</category>
      <category>npm</category>
    </item>
    <item>
      <title>SavanahDB</title>
      <dc:creator>Keerthi Vasan</dc:creator>
      <pubDate>Sat, 23 Jan 2021 12:22:53 +0000</pubDate>
      <link>https://forem.com/nectres/savanahdb-3bi8</link>
      <guid>https://forem.com/nectres/savanahdb-3bi8</guid>
      <description>&lt;p&gt;SavanahDB is a NoSQL DBMS that supports joins, complex relational and realSync to provide the best experience for the developer and performing much better than most traditional DBMS&lt;/p&gt;

&lt;p&gt;The Hare Edition - 0.1.0 is out for public use now at &lt;a href="https://npmjs.com/savanahdb"&gt;https://npmjs.com/savanahdb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would appreciate if you download it, play around and give some feedback. Share the post or the npm package if you like the concept! &lt;/p&gt;

&lt;p&gt;The Saber Edition is coming soon with features geared towards enterprise use and production environment &lt;/p&gt;

&lt;p&gt;I am a Student and currently the only one working on this, so if you would like SavanahDB to continue it's path I would really appreciate becoming a patron here : &lt;a href="https://patreon.com/savanah"&gt;https://patreon.com/savanah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ofcourse it's free to use and always will be free. No compulsions to donate. &lt;/p&gt;

</description>
      <category>database</category>
      <category>nosql</category>
      <category>npm</category>
      <category>node</category>
    </item>
  </channel>
</rss>
