<?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: vaidhyanathan</title>
    <description>The latest articles on DEV Community by vaidhyanathan (@vaidhyanathan93).</description>
    <link>https://dev.to/vaidhyanathan93</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%2F161928%2Fa378de95-eb6b-4825-98de-1616cc6bb5f6.jpg</url>
      <title>DEV Community: vaidhyanathan</title>
      <link>https://dev.to/vaidhyanathan93</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vaidhyanathan93"/>
    <language>en</language>
    <item>
      <title>[help needed] Rails application upgrade from 3.2 to 5.2</title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Wed, 23 Oct 2019 19:07:35 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/help-needed-rails-application-upgrade-from-3-2-to-5-2-45ni</link>
      <guid>https://dev.to/vaidhyanathan93/help-needed-rails-application-upgrade-from-3-2-to-5-2-45ni</guid>
      <description>&lt;p&gt;We were planning to upgrade my rails application which is a monolith application and having around a million LOC. What would be the best way to upgrade? &lt;/p&gt;

&lt;p&gt;The following are the options &lt;br&gt;
1) 3.2 -&amp;gt; 5.2 (Separate branch running for a long time, Total mess up)&lt;br&gt;
2) 3.2-&amp;gt;4.2 -&amp;gt;5.2 ((Separate branch running for a short time)&lt;br&gt;
3) 3.2-&amp;gt;4.0-&amp;gt;4.1-&amp;gt;4.2-&amp;gt;5.0-&amp;gt;5.1-&amp;gt;5.2(Running in master periodically, But we may need to write code in particular version which may become obsolete in the next coming version)&lt;/p&gt;

&lt;p&gt;I am planning to follow approach 3, but I am not sure which part is added in version (4.0 to 5.1) and removed in(4.2 to 5.2).&lt;/p&gt;

&lt;p&gt;Did anyone did rails upgrade for their application, what was the approach.&lt;/p&gt;

&lt;p&gt;PS: I saw many posts around this, but nothing solid. &lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>Deepest Truth in Huawei problem(Monopoly) and how vulnerable we all are!!!</title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Thu, 30 May 2019 16:19:02 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/deepest-truth-in-huawei-problem-monopoly-and-how-vulnerable-we-all-are-50aj</link>
      <guid>https://dev.to/vaidhyanathan93/deepest-truth-in-huawei-problem-monopoly-and-how-vulnerable-we-all-are-50aj</guid>
      <description>&lt;p&gt;DISCLAIMER: This topic is created only for technology discussion and possible solutions, not about any political related discussion.&lt;/p&gt;

&lt;p&gt;I and my colleague started discussing Google's ban on Huawei phones. Which may be a death blow to Huawei. Jokily we mentioned that what will happen of Google ban's service in our country or Oracle immediately imposes the ban on usage of MYSQL and JAVA. Basically, the monopoly in most of the internet segment is the key problem. &lt;/p&gt;

&lt;p&gt;UI frameworks such as Angular, React, Polymer etc were controlled by Google, facebook/ twitter. Almost all the popular frameworks and technologies are being controlled by them. Which make us vulnerable and need to bend for all those regulation imposed by them. &lt;/p&gt;

&lt;p&gt;Practically it takes years for Frameworks like Vue to take off. While shitty frameworks like Angular1.0 which takes off much easier and almost everybody started using it because of Google. &lt;/p&gt;

&lt;p&gt;I personally feel that the internet and important technologies should be free and open and always available to all. And open source projects should be truly open and should continue to deliver good things at all cost. &lt;/p&gt;

&lt;p&gt;We need an alternate way to solve those problems. Internet and key technologies should not be restricted by ethnicity, Location, political factors etc. &lt;/p&gt;

&lt;p&gt;The alternate should be truly distributed, easily available to all the people. &lt;/p&gt;

&lt;p&gt;Please suggest your thoughts here. Do we need an alternate solution? If so what will it be?  &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>internet</category>
      <category>monopoly</category>
      <category>help</category>
    </item>
    <item>
      <title>Help needed on Deep learning design</title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Thu, 09 May 2019 18:41:34 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/help-needed-on-deep-learning-design-c5a</link>
      <guid>https://dev.to/vaidhyanathan93/help-needed-on-deep-learning-design-c5a</guid>
      <description>&lt;p&gt;I am learning pytorch. The use case is I wanted to give a personalised recommendation to users based on region. The problem is I needed to create multiple Graphs which are more or less the same(But not exactly equivalent) based on each region.&lt;/p&gt;

&lt;p&gt;The solution some people suggested is to create separate graphs for each region and use them. But I am not convinced with this approach, because region may quickly grow.&lt;/p&gt;

&lt;p&gt;Can somebody help? &lt;/p&gt;

</description>
      <category>help</category>
      <category>machinelearning</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Share your thoughts on Google IO</title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Wed, 08 May 2019 15:32:32 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/share-your-thoughts-on-google-io-gp4</link>
      <guid>https://dev.to/vaidhyanathan93/share-your-thoughts-on-google-io-gp4</guid>
      <description>&lt;p&gt;I used to watch Google IO. I used to like them, But this time it was too boring. I feel everything announced in the IO is just an update.&lt;/p&gt;

&lt;p&gt;I hate 3a and 3a XL. The spec is low and we can easily buy that kind of phones from any Chinese manufacturers. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share your thoughts here&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title> How to debug in production like a pro? </title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Tue, 07 May 2019 12:35:50 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/how-to-check-and-fix-production-issue-in-10-minutes-3flm</link>
      <guid>https://dev.to/vaidhyanathan93/how-to-check-and-fix-production-issue-in-10-minutes-3flm</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6CO2bRjw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hh2ys7h5qfm23gvqkjf5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6CO2bRjw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hh2ys7h5qfm23gvqkjf5.jpg" alt="Debug in production "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are working on the customer-facing products, then you might have experienced the production issues. For others, Production issues are the high-level bugs that are in production and affecting the customers to a great extent. &lt;/p&gt;

&lt;p&gt;Then and their production issue happens because of the ignored test case, No test cases or environmental issues etc. &lt;/p&gt;

&lt;p&gt;I follow the below things when there is a production issue. The issue may be notified to you by either your team fellow/support people/ Twitter/other sources. &lt;/p&gt;

&lt;h1&gt;
  
  
  Step 1: Classify the Issue(0-10 seconds)
&lt;/h1&gt;

&lt;p&gt;Check and classify the issue of what type it is. The issue usually belongs to one of the below categories.&lt;/p&gt;

&lt;p&gt;1) DOS  - People might complain that there is connection time out issue&lt;br&gt;
2) Slow response - Almost all/ certain type of requests are slow, which might lead to the first case&lt;br&gt;
3) improper behaviour - The product is not working properly&lt;br&gt;
4) Login issues - Session based issues. &lt;br&gt;
5) High error rate - These are the silent issue that only developers know about. &lt;/p&gt;

&lt;h1&gt;
  
  
  Step 2: Check your monitoring tool(1 - 5 mins)
&lt;/h1&gt;

&lt;p&gt;Almost all organisation will be having some tool for monitoring the servers. If you are a new startup/product who didn't use any tool, It is the right time to check it out. &lt;/p&gt;

&lt;p&gt;Check the stats in the order below&lt;/p&gt;

&lt;h2&gt;
  
  
  Average Transaction time
&lt;/h2&gt;

&lt;p&gt;DOS and slow request. Check if all request is a slow one or a particular type. &lt;br&gt;
    If all requests are slow, then it is a problem with either current app server/ Dependency services like MySQL, Redis, Kafka etc.  So check the below for respective machine &lt;/p&gt;

&lt;h2&gt;
  
  
  Machine status
&lt;/h2&gt;

&lt;p&gt;Including checks for  CPU(&amp;gt; 80%), Free memory(&amp;lt;10%), Active threads/ process(&amp;gt;90% of allocated), request wait time before processing(&amp;lt; 2s), GC Time(If you use GC based language &amp;gt; 10s),Free Disk size(&amp;lt; 5% ), heap memory(&amp;lt; few MBs).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If any of the above occurs, Take the necessary steps below. &lt;/li&gt;
&lt;li&gt;High CPU - wait for some time/ check threads/process which takes a long time. It will always be code issue  or increase machine size&lt;/li&gt;
&lt;li&gt;Free memory - Always code issue. Check the last deployment or increase machine size&lt;/li&gt;
&lt;li&gt;Active threads - Too many active threads is because of too many requests got affected because of downstream / code issue. Check accordingly
5.GC Time - Your code is the problem. Check logs to see where GC occurs. Get a thread dump and check it out.
6.Free Disk size - Your code wrote something in the machine and it is not cleaned up. Check your app server for folder wise disk usage. &lt;/li&gt;
&lt;li&gt;Head memory - Your code used many objects and didn't clear it out. &lt;/li&gt;
&lt;li&gt;Dependency services - Check the above for all the  services that your app depend upon like MYSQL, Redis, etc&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most of the above cases can be fixed by reverting your code. &lt;/p&gt;

&lt;h2&gt;
  
  
  Logs(5 - 10 mins)
&lt;/h2&gt;

&lt;p&gt;If the above turns out empty handed, monitor your logs for recent errors. It will give you an overview or idea of what is happening. If you are using some log tool use dashboard for error module wise or region wise. &lt;/p&gt;

&lt;p&gt;All the above check should reveal all the necessary things needed to fix. If not check with experts in your team immediately. &lt;/p&gt;

&lt;h1&gt;
  
  
  Step 3 - Check affected areas(1 - 10 mins)
&lt;/h1&gt;

&lt;p&gt;Check what are the areas that were affected by the issue. If it is customer facing then immediately inform affected customers or severely affected customer. There are chances that downstream services might be affected. Check the below list and tick the areas where it was affected&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DB/Cache/Downstream services data corruption &lt;/li&gt;
&lt;li&gt;Data not sent to downstream&lt;/li&gt;
&lt;li&gt;Replication Lag&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Step 4: Fix the issue &amp;amp; deployment (3 - 30 mins)
&lt;/h1&gt;

&lt;p&gt;If it is severe fix the issue by making the quick patch and update it all server. It should be solid and might require approval. &lt;br&gt;
  If it not server try to run all the test coverage and fix the main issue. &lt;br&gt;
  For downstream related problems write a script to correct the data. If data is completely corrupted use backup for recovery but customer concern is required. &lt;/p&gt;

&lt;h1&gt;
  
  
  Step 5: RCA and test case
&lt;/h1&gt;

&lt;p&gt;Put down a neat RCA and inform the team. write down test cases for all those scenarios. &lt;/p&gt;

&lt;p&gt;This is what I follow which enables me to fix the issue in production between 10 -  20 mins.&lt;/p&gt;

&lt;p&gt;** If you follow some good practice. Let me know. **&lt;/p&gt;

</description>
      <category>devops</category>
      <category>discuss</category>
      <category>help</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My ultimate VSCode configuration</title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Sun, 05 May 2019 14:19:22 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/ulitmate-vscode-configuration-4i2o</link>
      <guid>https://dev.to/vaidhyanathan93/ulitmate-vscode-configuration-4i2o</guid>
      <description>&lt;p&gt;I used to love vim a lot but now a days I switched to VSCode because of the delicate balance between the UX and plugins. &lt;/p&gt;

&lt;p&gt;The following is my settings.json file. You can probably use the same too. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please do add your configuration too&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disabled Minimap&lt;/strong&gt; - since we are writing modular code there is no need for this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"editor.minimap.enabled": false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Autosave Enabled&lt;/strong&gt; - AutoSave enabled so that there is no need for cmd+s always&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    "files.autoSave": "afterDelay",
    "files.autoSaveDelay": 5000,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Exclusion&lt;/strong&gt; - These are the large files and folders which will make VSCode cry . Please do add the same to your configuration also.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    "files.watcherExclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/tmp/**": true,
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/bower_components": true,
        "**/dist/**": true,
        "**/log/**": true,
        "**/logs/**": true,
        "**/.fdk/**": true
    },
    "files.exclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/tmp/**": true,
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/bower_components": true,
        "**/dist/**": true,
        "**/log/**": true,
        "**/.fdk/**": true
    },
    "search.exclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/tmp/**": true,
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/bower_components": true,
        "**/dist/**": true,
        "**/log/**": true
    },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tab Size&lt;/strong&gt; - We can still be friends with 2 spaces for tab.Change this based on your source code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"editor.tabSize": 2,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Final Json for VSCode&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
    "ruby.intellisense": "rubyLocate",
    "gitlens.advanced.messages": {
        "suppressShowKeyBindingsNotice": true
    },
    "workbench.statusBar.feedback.visible": false,
    "search.location": "sidebar",
    "window.zoomLevel": 0,
    "workbench.iconTheme": "vscode-icons",
    "files.watcherExclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/tmp/**": true,
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/bower_components": true,
        "**/dist/**": true,
        "**/log/**": true,
        "**/logs/**": true,
        "**/.fdk/**": true
    },
    "files.exclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/tmp/**": true,
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/bower_components": true,
        "**/dist/**": true,
        "**/log/**": true,
        "**/.fdk/**": true
    },
    "search.exclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/tmp/**": true,
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/bower_components": true,
        "**/dist/**": true,
        "**/log/**": true
    },
    "editor.fontSize": 16,
    "editor.tabSize": 2,
    "emmet.includeLanguages": {
        "html": "html",
        "javascript": "javascriptreact"
    },
    "files.autoSave": "afterDelay",
    "files.autoSaveDelay": 5000,
    "terminal.external.osxExec": "iTerm.app",
    "terminal.integrated.shell.osx": "zsh",
    "editor.wordWrap": "on",
    "editor.formatOnSave": true,
    "editor.formatOnPaste": true,
    "editor.minimap.enabled": false,
    "editor.fontLigatures": true,
    "workbench.editor.highlightModifiedTabs": true,
    "explorer.sortOrder": "modified",
    "files.trimFinalNewlines": true
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>vscode</category>
    </item>
    <item>
      <title>How not to architect your project? </title>
      <dc:creator>vaidhyanathan</dc:creator>
      <pubDate>Thu, 02 May 2019 17:06:09 +0000</pubDate>
      <link>https://dev.to/vaidhyanathan93/how-not-to-architect-your-project-1ap2</link>
      <guid>https://dev.to/vaidhyanathan93/how-not-to-architect-your-project-1ap2</guid>
      <description>&lt;p&gt;I have been working with some of the most successful products in the Saas Industry. Here are some of the things I used to say a big NOOO ! Probably you must also do the same.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Wrong framework
&lt;/h1&gt;

&lt;p&gt;Know your product and usecase and choose the correct framework. Choosing GoLang for web app development and ruby for high performance code is wrong . Have a good knowledge on all the frameworks and languages, choose wisely. There is no going back on this.&lt;br&gt;
I see people choose Java for webapps because thier employess only knows Java, but inreality Java is no good for webapps.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using V1.0
&lt;/h1&gt;

&lt;p&gt;In the year 2013–2014, When asked people not to use angular they used to mock at me. After a couple of years Google ended it support. Simple Thumb rule is dont use any new frameworks/tools/standards till thier version 2.0/ atleast stable for 3 years. First few stable versions also will be having architect failures most of the times. So use some standard approach. &lt;/p&gt;

&lt;h1&gt;
  
  
  Hyper Scalabilty 
&lt;/h1&gt;

&lt;p&gt; Yes your read it right. People tend to perfect thier product to scale millions of request per second, but in reality it wont happen soon! Customer aquestation is a gradual process and it takes time to reach potential users. Even a killer product will take couple of years to pick up first few thousand active customers.So all the scalability efforts put during the initial products are worthless. It's like you made the yummest recipe but no one is there is take it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Nanoservice(Heavy microservices)
&lt;/h1&gt;

&lt;p&gt;Writing eveything as Microservice is the one of the things that usually kills the product soon. Microservices is only recommended if your product has a mamoth code base, which basically needs to be splitted to microservice ,and your are having resources to maintain. Starting the product with everything as microservice service which is a overkill. My recommendation is to start as modular monolithic and move to microservice if necessary. &lt;/p&gt;

&lt;h1&gt;
  
  
  Refactoring
&lt;/h1&gt;

&lt;p&gt;Refactoring the whole code base is wrong. If there was some wrong decision taken in initial days, do refactor as much early as possible. Refactoring too much is a bug prone , vague and non productive job. Customers dont care what is behind they only see if things works. These kinds of problems can be solved by having a good Architect. &lt;/p&gt;

&lt;h1&gt;
  
  
  New Inhouse solutions
&lt;/h1&gt;

&lt;p&gt;We cannot solve all the problems , even we have resources and talent. If there are some ready made solution, Please use it. It is not because of saving money. It is because existing solution usually takes all the learning from the community or customer. I saw many projects used thier inhouse search service instead of elasticsearch or Solr, With in couple of years they failed and return back to the open source solution. &lt;/p&gt;

&lt;p&gt;The above are the major things I used to say a big no while designing new product. &lt;/p&gt;

&lt;p&gt;Please add your suggestions also below. &lt;/p&gt;

</description>
      <category>architect</category>
      <category>discuss</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
