<?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: yas</title>
    <description>The latest articles on Forem by yas (@justhere).</description>
    <link>https://forem.com/justhere</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%2F27488%2F1fa50cc1-8f7c-4bc7-83db-4751eb8f9269.jpg</url>
      <title>Forem: yas</title>
      <link>https://forem.com/justhere</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/justhere"/>
    <language>en</language>
    <item>
      <title>Predictable Pan Card Generation Algorithm.</title>
      <dc:creator>yas</dc:creator>
      <pubDate>Thu, 21 Jan 2021 08:00:29 +0000</pubDate>
      <link>https://forem.com/justhere/predictable-pan-card-generation-algorithm-4anb</link>
      <guid>https://forem.com/justhere/predictable-pan-card-generation-algorithm-4anb</guid>
      <description>&lt;p&gt;In any fintech company in India, an important data point is the user's pan number which is used as primary identification. &lt;/p&gt;

&lt;p&gt;A common strategy used in creating test users in such an application is generating a random pan number but one drawback with this approach is any newly generated pan should be checked against the database if it already exists to avoid a collision.&lt;/p&gt;

&lt;p&gt;The better way is to serially generate the pan numbers to avoid a collision.&lt;/p&gt;

&lt;p&gt;I believe it's an interesting problem of generating Pan Card numbers serially so I wrote an algorithm to do the same which would predictably generate a pan card number for a given number x.&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/SrikanthYashaswi/pan-number-generator"&gt;pan-number-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This could be used be imported in test cases to generate unique pan numbers and while masking pan data for production dumps.&lt;/p&gt;

&lt;p&gt;The series would go as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  'AAAAA0000A',
  'AAAAA0000B',
  'AAAAA0000C',
  'AAAAA0000D',
  'AAAAA0000E',
  'AAAAA0000F',
  'AAAAA0000G',
  'AAAAA0000H',
  'AAAAA0000I',
  'AAAAA0000J',
  'AAAAA0000K',
  'AAAAA0000L',
  'AAAAA0000M',
  'AAAAA0000N',
  'AAAAA0000O',
  'AAAAA0000P',
  'AAAAA0000Q',
  'AAAAA0000R',
  'AAAAA0000S',
  'AAAAA0000T',
  'AAAAA0000U',
  'AAAAA0000V',
  'AAAAA0000W',
  'AAAAA0000X',
  'AAAAA0000Y',
  'AAAAA0000Z',
  'AAAAA0001A',
  'AAAAA0001B',
  'AAAAA0001C',
  'AAAAA0001D',
  'AAAAA0001E'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>algorithms</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Visualisation tool for sorting algorithms.</title>
      <dc:creator>yas</dc:creator>
      <pubDate>Tue, 28 Apr 2020 07:57:29 +0000</pubDate>
      <link>https://forem.com/justhere/how-sorting-algorithms-roll-1ebm</link>
      <guid>https://forem.com/justhere/how-sorting-algorithms-roll-1ebm</guid>
      <description>&lt;p&gt;Edit: Added explanation on how it works.&lt;/p&gt;

&lt;p&gt;This is a tool which visualises how algorithm works.&lt;/p&gt;

&lt;p&gt;It is so good if we can SEE how it works in real time. Even more amazing to go back and forward, to see how the sort series was in the past.&lt;/p&gt;

&lt;p&gt;I started working on this project so i can help young people to learn and understand how something works.&lt;/p&gt;

&lt;p&gt;lets begin with sorting algorithms..&lt;/p&gt;

&lt;p&gt;I created a framework where we can plug a sorting algorithm and see how it does sorting.&lt;/p&gt;




&lt;h4&gt;
  
  
  How It Works....
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;So first the framework generates some random numbers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Once the algorithm is selected, &lt;br&gt;
all the random numbers are passed to that selected algorithm.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The selected algorithm then does sorting and stores each change in sorting order and the index which got changed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then it is returned to the react component which iterates through each change and updated the state after a few milliseconds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thats how it looks like animating.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--svhudc2j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uuosd0us9twpilgtxihu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--svhudc2j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uuosd0us9twpilgtxihu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you can select one of the algorithm and click play to start rolling...&lt;/p&gt;

&lt;p&gt;i selected merge sort.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xMbhwmek--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qyk1nf7uv3xpfkpss0ht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xMbhwmek--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qyk1nf7uv3xpfkpss0ht.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you can click pause and use arrows to go back and forth to exactly see how it gets sorted.&lt;/p&gt;

&lt;p&gt;Link For website:&lt;br&gt;
&lt;a href="https://visual-algos.netlify.app/algos/sorting"&gt;https://visual-algos.netlify.app/algos/sorting&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a long list of sorting algorithms that needs to be implemented. It would be great help if someone can contribute to it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🕒 currently working&lt;/li&gt;
&lt;li&gt;✅ finished implementing&lt;/li&gt;
&lt;/ul&gt;




&lt;ul&gt;
&lt;li&gt;Selection Sort ✅&lt;/li&gt;
&lt;li&gt;Insertion Sort ✅&lt;/li&gt;
&lt;li&gt;Merge Sort ✅&lt;/li&gt;
&lt;li&gt;Heap Sort 🕒&lt;/li&gt;
&lt;li&gt;Bubble Sort&lt;/li&gt;
&lt;li&gt;Binary Insertion Sort&lt;/li&gt;
&lt;li&gt;Quick Sort (LR ptrs)&lt;/li&gt;
&lt;li&gt;Quick Sort (LL ptrs)&lt;/li&gt;
&lt;li&gt;Quick Sort (ternary, LR ptrs)&lt;/li&gt;
&lt;li&gt;Quick Sort (ternary, LL ptrs)&lt;/li&gt;
&lt;li&gt;Quick Sort (dual pivot)&lt;/li&gt;
&lt;li&gt;Cocktail Shaker Sort&lt;/li&gt;
&lt;li&gt;Gnome Sort&lt;/li&gt;
&lt;li&gt;Comb Sort&lt;/li&gt;
&lt;li&gt;Shell Sort&lt;/li&gt;
&lt;li&gt;Smooth Sort&lt;/li&gt;
&lt;li&gt;Odd-Even Sort&lt;/li&gt;
&lt;li&gt;Bitonic Sort&lt;/li&gt;
&lt;li&gt;Cycle Sort&lt;/li&gt;
&lt;li&gt;Radix Sort (LSD)&lt;/li&gt;
&lt;li&gt;Radix Sort (MSD)&lt;/li&gt;
&lt;li&gt;std::sort (gcc)&lt;/li&gt;
&lt;li&gt;Tim Sort&lt;/li&gt;
&lt;li&gt;Block Merge Sort (WikiSort)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Link for github repo: &lt;br&gt;
&lt;a href="https://github.com/SrikanthYashaswi/visual-algos"&gt;https://github.com/SrikanthYashaswi/visual-algos&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>react</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Embedded visit counter doesn't work here. Any Idea why?</title>
      <dc:creator>yas</dc:creator>
      <pubDate>Sat, 16 Nov 2019 21:50:26 +0000</pubDate>
      <link>https://forem.com/justhere/show-your-article-s-views-to-others-4og3</link>
      <guid>https://forem.com/justhere/show-your-article-s-views-to-others-4og3</guid>
      <description>&lt;p&gt;Testing if this works...&lt;/p&gt;

&lt;p&gt;Got a visit counter from  &lt;a href="https://www.freecounterstat.com/"&gt;https://www.freecounterstat.com/&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://counter9.wheredoyoucomefrom.ovh/private/freecounterstat.php?c=p8pa7snn91j8x7gashjuua3smee7r8m6"&gt;https://counter9.wheredoyoucomefrom.ovh/private/freecounterstat.php?c=p8pa7snn91j8x7gashjuua3smee7r8m6&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I embedded it as an image. But dev.to is caching images through a proxy, so the image URL is not being hit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUncv9Md--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://counter9.wheredoyoucomefrom.ovh/private/freecounterstat.php%3Fc%3Dp8pa7snn91j8x7gashjuua3smee7r8m6" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUncv9Md--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://counter9.wheredoyoucomefrom.ovh/private/freecounterstat.php%3Fc%3Dp8pa7snn91j8x7gashjuua3smee7r8m6" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;it's always 1&lt;/p&gt;

&lt;p&gt;Any idea whats happening?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Building a messaging server from scratch. (Java)</title>
      <dc:creator>yas</dc:creator>
      <pubDate>Fri, 15 Nov 2019 19:21:18 +0000</pubDate>
      <link>https://forem.com/justhere/building-a-messaging-server-from-scratch-java-30of</link>
      <guid>https://forem.com/justhere/building-a-messaging-server-from-scratch-java-30of</guid>
      <description>&lt;p&gt;This requires you have good understanding of &lt;br&gt;
Java,&lt;br&gt;
ServerSocket,&lt;br&gt;
ClientSocket.&lt;/p&gt;

&lt;p&gt;I was motivated to build it, when i couldn't understand how modern app servers scales to millions of connections with single instance. So i started working on it. I couldn't get much help from internet when i started building, so writing this documentation...&lt;/p&gt;

&lt;p&gt;Jumping straight at code.&lt;/p&gt;

&lt;p&gt;This is the main class where the ConcurrentServer will start running.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConcurrentServer&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;IOException&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;InterruptedException&lt;/span&gt;
     &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
              &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
              &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ConcurrentServer&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;Wait a sec....&lt;br&gt;
Remember this &lt;code&gt;List&amp;lt;User&amp;gt; clients&lt;/code&gt; here. It plays an important role.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Shared&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;clients&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;Shared&lt;/span&gt;&lt;span class="o"&gt;(){&lt;/span&gt;

    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;When a new user is connected to the server, the connection object is pushed to the client list in &lt;code&gt;Shared&lt;/code&gt; class (see below).&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;User&lt;/code&gt; class below extends from &lt;code&gt;ClientSocket&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;ConcurrentServer&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.....&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;IOException&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;InterruptedException&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;   
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ServerSocket&lt;/span&gt; &lt;span class="n"&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="nc"&gt;ServerSocket&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;)){&lt;/span&gt;

            &lt;span class="nc"&gt;Thread&lt;/span&gt; &lt;span class="n"&gt;channelReaderThread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channelReader&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;channelReaderThread&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

            &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;ALWAYS_RUNNING&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
                &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&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="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;accept&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
                &lt;span class="nc"&gt;Shared&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clients&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;   
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;Next we read the user messages which might pop up at any time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;maxSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Shared&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clients&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;maxSize&lt;/span&gt; &lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Shared&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clients&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;queryClient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;queryClient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;InputStream&lt;/span&gt; &lt;span class="n"&gt;inputStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInputStream&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="n"&gt;inputStream&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;available&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;ConnectedBy&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getConnectionType&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;handle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Remember this guy &lt;code&gt;Shared.clients&lt;/code&gt;, this is an array where pushed the connected users in main thread.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;process&lt;/code&gt; method above is triggered run every 100ms. Java provides a method called inputStream.available(), if user sends any message,  &lt;code&gt;inputStream.available()&lt;/code&gt; will &amp;gt; 0. Thats the time, we can read the message from the inputStream.&lt;/p&gt;




&lt;p&gt;Once you are able to read message and as you already have all the clientConnections in &lt;code&gt;Shared.clients&lt;/code&gt; you can iterate it and send the incoming message to all clients in it. &lt;/p&gt;

&lt;p&gt;Hence you have a functioning messaging application.&lt;/p&gt;




&lt;p&gt;It is tested with a few thousand parallel connections, it delivers messages most of the time.&lt;br&gt;
But Caution.&lt;br&gt;
There are occasions when messages are dropped, i could not figure out yet, why these messages are dropping. So any help would be highly appreciated.&lt;/p&gt;

&lt;p&gt;Any one who understands or didn't understand it, do comment, i would be highly interested to reach out.&lt;/p&gt;

&lt;p&gt;Source Code. &lt;a href="https://github.com/SrikanthYashaswi/messenger"&gt;https://github.com/SrikanthYashaswi/messenger&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>java</category>
      <category>discuss</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>deploy on production server .........    git pull-&gt;  maven build -&gt; run jar </title>
      <dc:creator>yas</dc:creator>
      <pubDate>Fri, 25 Oct 2019 20:26:40 +0000</pubDate>
      <link>https://forem.com/justhere/deploy-on-production-server-git-pull-maven-build-run-jar-e7i</link>
      <guid>https://forem.com/justhere/deploy-on-production-server-git-pull-maven-build-run-jar-e7i</guid>
      <description>&lt;p&gt;We started to decouple our codebase to multiple microservices.&lt;/p&gt;

&lt;p&gt;we created a few java springboot microservices.&lt;/p&gt;

&lt;p&gt;Our deploy strategy&lt;/p&gt;

&lt;p&gt;Once we commit our files to git.&lt;br&gt;
our deploy script will git pull the changes to the production server &lt;br&gt;
do -&amp;gt; mvn build -&amp;gt; move JAR to a path -&amp;gt; start it up.&lt;/p&gt;

&lt;p&gt;And its incredibly fast.&lt;/p&gt;

&lt;p&gt;What do you think about this approach?&lt;/p&gt;

</description>
      <category>devops</category>
      <category>java</category>
      <category>todayisearched</category>
      <category>discuss</category>
    </item>
    <item>
      <title>#2019 Awesome Indian Music Composers</title>
      <dc:creator>yas</dc:creator>
      <pubDate>Fri, 18 Oct 2019 06:52:32 +0000</pubDate>
      <link>https://forem.com/justhere/2019-awesome-indian-music-composers-bhp</link>
      <guid>https://forem.com/justhere/2019-awesome-indian-music-composers-bhp</guid>
      <description>&lt;h2&gt;
  
  
  Listen to songs by them and stay focussed...
&lt;/h2&gt;

&lt;p&gt;Nucleya&lt;br&gt;
Ritviz&lt;br&gt;
The Local Train&lt;br&gt;
Parvaaz&lt;br&gt;
aswekeepsearching&lt;br&gt;
Ankur Tewari&lt;br&gt;
Prateek Kuhad&lt;br&gt;
Seedhe Maut&lt;br&gt;
Prabh Deep&lt;/p&gt;

&lt;p&gt;do share cool playlists...&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>playlist</category>
    </item>
  </channel>
</rss>
