<?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: Santhosh Reddy</title>
    <description>The latest articles on DEV Community by Santhosh Reddy (@santhoshrt).</description>
    <link>https://dev.to/santhoshrt</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%2F179892%2F66fb205c-afe8-40ed-8082-4013990cf3a3.jpeg</url>
      <title>DEV Community: Santhosh Reddy</title>
      <link>https://dev.to/santhoshrt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/santhoshrt"/>
    <language>en</language>
    <item>
      <title>Performance benchmarks - redis mget vs pipeline</title>
      <dc:creator>Santhosh Reddy</dc:creator>
      <pubDate>Mon, 03 Oct 2022 14:45:56 +0000</pubDate>
      <link>https://dev.to/santhoshrt/performance-benchmarks-redis-mget-vs-pipeline-2gk1</link>
      <guid>https://dev.to/santhoshrt/performance-benchmarks-redis-mget-vs-pipeline-2gk1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This post was originally published at &lt;a href="https://www.distributedstack.dev/redis-mget-vs-pipeline/"&gt;distributedstack&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Redis provides a benchmarking tool called redis-benchmark for testing the performance of common redis commands. The benchmarks in this blog are run on below configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model - MacBook Air 2019
Processor - 1.6 GHz Dual-Core Intel Core i5
Memory - 8 GB 2133 MHz LPDDR3
Client - redis-benchmark
Server - localhost:6379
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both client and server are running on the same machine&lt;br&gt;
redis-benchmark runs the tests over 100000 commands by default. You can tweak the numbers as required.&lt;/p&gt;

&lt;p&gt;If you haven’t already, do checkout &lt;a href="https://www.distributedstack.dev/redis-hmget-pipeline-vs-mget/"&gt;this&lt;/a&gt; article for more details on redis-benchmark tool.&lt;/p&gt;

&lt;p&gt;Below benchmark runs 1000 commands in each pipeline over all the available tests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$redis-benchmark -q -P 1000

PING_INLINE: 200803.22 requests per second
PING_BULK: 401606.44 requests per second
SET: 236406.61 requests per second
GET: 277008.31 requests per second
INCR: 229885.06 requests per second
LPUSH: 184501.84 requests per second
RPUSH: 220750.55 requests per second
LPOP: 183150.19 requests per second
RPOP: 223713.64 requests per second
SADD: 224719.11 requests per second
HSET: 172117.05 requests per second
SPOP: 335570.47 requests per second
LPUSH (needed to benchmark LRANGE): 186219.73 requests per second
LRANGE_100 (first 100 elements): 18278.19 requests per second
LRANGE_300 (first 300 elements): 6242.20 requests per second
LRANGE_500 (first 450 elements): 4006.73 requests per second
LRANGE_600 (first 600 elements): 2906.55 requests per second
MSET (10 keys): 29299.74 requests per second
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, we could do ~277k reqs/sec with redis get command in pipeline.&lt;/p&gt;

&lt;p&gt;Let’s set some keys to benchmark redis mget&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;set hash1_key1 "The golden rule of a useful benchmark is not to compare apples to oranges"
set hash2_key2 "The golden rule of a useful benchmark is not to compare apples to oranges"
set hash3_key3 "The golden rule of a useful benchmark is not to compare apples to oranges"
$redis-benchmark mget hash1_key1 hash2_key2 hash3_key3 ... (1000 keys)

  100000 requests completed in 113.54 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

0.00% &amp;lt;= 1 milliseconds
0.06% &amp;lt;= 2 milliseconds
15.38% &amp;lt;= 44 milliseconds
20.01% &amp;lt;= 45 milliseconds
25.82% &amp;lt;= 46 milliseconds
32.60% &amp;lt;= 47 milliseconds
40.24% &amp;lt;= 48 milliseconds
48.40% &amp;lt;= 49 milliseconds
56.21% &amp;lt;= 50 milliseconds
63.03% &amp;lt;= 51 milliseconds
68.34% &amp;lt;= 52 milliseconds
72.26% &amp;lt;= 53 milliseconds
75.10% &amp;lt;= 54 milliseconds
90.14% &amp;lt;= 78 milliseconds
95.77% &amp;lt;= 83 milliseconds
99.99% &amp;lt;= 234 milliseconds
100.00% &amp;lt;= 235 milliseconds
100.00% &amp;lt;= 236 milliseconds
100.00% &amp;lt;= 237 milliseconds
100.00% &amp;lt;= 241 milliseconds
880.72 requests per second
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, we were able to fetch 880*1000 = 880k keys/sec via mget compared to 277k keys/sec with get in pipeline.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Working with unpublished node dependencies </title>
      <dc:creator>Santhosh Reddy</dc:creator>
      <pubDate>Mon, 27 Jul 2020 16:19:45 +0000</pubDate>
      <link>https://dev.to/santhoshrt/working-with-unpublished-node-dependencies-5654</link>
      <guid>https://dev.to/santhoshrt/working-with-unpublished-node-dependencies-5654</guid>
      <description>&lt;p&gt;If you are a Node.js developer, you might've ended up in a situation where you want to use an unfinished feature from another node dependency.&lt;/p&gt;

&lt;p&gt;Let's elaborate this a bit. For example, your entire project is broken logically into 4 npm modules. One module, which is the main one depends on the other 3 modules. With this setup, let's get changes from sub-modules to integrate with the main module.&lt;/p&gt;

&lt;p&gt;The simplest way is to publish the sub-modules to &lt;code&gt;npm&lt;/code&gt;. Use the new versions in your main node module's &lt;code&gt;package.json&lt;/code&gt; file and re-install. Well, the downside with this approach is if you have made a mistake in your sub-modules, you have to re-publish and use them accordingly. But, things don't stop there. You will have to repeat this until your main node module is stable. Headache. Right? I know.&lt;br&gt;
So, How do we get around this problem?&lt;/p&gt;
&lt;h2&gt;
  
  
  Using npm link
&lt;/h2&gt;

&lt;p&gt;With this approach, you can work with any node dependencies if they are checked out at some location in your local machine. All you have to do is run below command in the root folder of the package, which is a dependency for your main node module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm link
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alright! What does this do? If you have worked on node.js projects, you know there is a &lt;code&gt;node_modules&lt;/code&gt; folder that has your installed dependencies. Similarly, there is a global folder for the dependencies. The above command creates a symbolic link for the package in which this command is run in the global folder. You have to run this command again in the package where you want to use the dependency code with the name in &lt;code&gt;package.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm link &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, any changes you make to your dependency node module will be used directly without having to re-install. The above 2 steps can be made short with just below command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm link &amp;lt;relative-path-to-the-dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting the source from GitHub
&lt;/h2&gt;

&lt;p&gt;Now, let's discuss another use case where you are not the one working on your dependency, but a colleague of yours. And he doesn’t want to publish the code until he makes sure the feature is complete to some extent. But you need this person's code to test any early-stage integration issues. I am assuming you both use the git version control system for managing your code. You can get the changes your colleague has pushed to git with the link to the repository code as below in your &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 javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;package-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;git@github.com:&amp;lt;repository-name&amp;gt;.git#&amp;lt;branch-name&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you've placed the above path in &lt;code&gt;package.json&lt;/code&gt; file, you need to run a clean &lt;code&gt;npm install&lt;/code&gt; to get the latest code from git.&lt;/p&gt;

&lt;p&gt;Comment down if you using any other approach?&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Is Node.js really single-threaded?</title>
      <dc:creator>Santhosh Reddy</dc:creator>
      <pubDate>Sun, 26 Jul 2020 07:22:49 +0000</pubDate>
      <link>https://dev.to/santhoshrt/is-node-js-really-single-threaded-16jj</link>
      <guid>https://dev.to/santhoshrt/is-node-js-really-single-threaded-16jj</guid>
      <description>&lt;p&gt;Many developers wonder at some point in their Node.js programming journey that, is Node.js really single-threaded? If it is, how is it able to do asynchronous execution? Some people understand it in terms of even loop, but there is more to it. I hope you understand what event loop is since you are reading this. But, if you don’t, check out this &lt;a href="https://www.youtube.com/watch?v=8aGhZQkoFbQ"&gt;awesome talk&lt;/a&gt; by Philip Roberts. &lt;/p&gt;

&lt;p&gt;In Chrome, Javascript runs in a single thread. You are sharing the same thread for rendering as well as your code execution. Chrome actually employs &lt;a href="https://blog.chromium.org/2008/09/multi-process-architecture.html"&gt;multi-process architecture&lt;/a&gt;, which means that each tab, plugin in your browser is getting a new process. And any crash or block is not effecting others. When JS code is executed in the browser, it is essentially blocking the browser painting or render since there is no thread to do the same. But before it picks something from the callback queue after the current call stack is empty, browser paint actually takes precedence. That’s about the browser. But, how do things go in a backend JS runtime, Node.js?&lt;/p&gt;

&lt;p&gt;The answer to the above question, Node.js is single-threaded similar to Javascript. So, your JS code is running in a single thread(main thread) in consensus with the event loop and callback queue. But, Node.js is not purely Javascript code. Some of it is C++ code, some things when done asynchronously like network calls, file system tasks, DNS lookup, etc. are actually not handled by the main thread. Node.js does this optimization of using C++ code(which has access to multiple threads) internally for these tasks, which helps in reducing the execution time when used correctly. Node.js actually does offload the asynchronous tasks to C++ code, where it has the provision to use multiple threads to speed up execution, but if you force it to be sync(using only the synchronous version of the API), you are binding it not to do this optimization. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>node</category>
    </item>
    <item>
      <title>Backend developer roadmap, skills, resources</title>
      <dc:creator>Santhosh Reddy</dc:creator>
      <pubDate>Sat, 25 Jul 2020 08:49:53 +0000</pubDate>
      <link>https://dev.to/santhoshrt/backend-developer-roadmap-skills-resources-2bpd</link>
      <guid>https://dev.to/santhoshrt/backend-developer-roadmap-skills-resources-2bpd</guid>
      <description>&lt;p&gt;Backend developers mostly deal with data, business logic, and the efficient retrieval of data from variety of sources. The list doesn't end here. There are a number of things that a good backend developer is expected to be adept at. This &lt;a href="https://roadmap.sh/backend"&gt;roadmap&lt;/a&gt; tried to cover some of them. This post will try to list down the resources instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internet and basic frontend knowledge
&lt;/h2&gt;

&lt;p&gt;Mozilla Developer Network(MDN) docs is a great start, if you are trying to start taking the web development path. I've given some important links below but you can explore the entirety, there is a ton of information that is up to the point and well explained.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works"&gt;How the web works&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP"&gt;HTTP protocol&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Tutorials"&gt;Speaking the browser language(HTML-CSS-Javascript)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://javascript.info/"&gt;Javascript, everything&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although the below resources are not for backend developers, some of you might be interested in some frontend frameworks that guys in your company are using.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3schools.com/bootstrap/"&gt;Bootstrap&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactjs.org/"&gt;React documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  OS and basic machine usage skills
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/cracking-the-data-science-interview/how-operating-systems-work-10-concepts-you-should-know-as-a-developer-8d63bb38331f"&gt;How OS works in general&lt;/a&gt;&lt;br&gt;
&lt;a href="https://applied-programming.github.io/Operating-Systems-Notes/3-Threads-and-Concurrency/"&gt;Threads and concurrency&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/linux-commands/"&gt;List of linux commands&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/inter-process-communication-ipc/"&gt;Inter-process communication&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming languages and frameworks
&lt;/h2&gt;

&lt;p&gt;Although it is not necessary that you learn every language in the world, it is good to have skills in at least one compiled, scripting language and choose one for a paradigm. Languages are essential tools for programmers and they deserve a section in backend developer roadmap and resources list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://launchschool.com/books/ruby/read/introduction"&gt;Ruby&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.oracle.com/en/java/"&gt;Java&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.python.org/3/"&gt;Python&lt;/a&gt;&lt;br&gt;
&lt;a href="https://javascript.info/"&gt;Javascript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://guides.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&lt;br&gt;
&lt;a href="https://nodejs.org/en/docs/"&gt;Node.js&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactjs.org/"&gt;React - optional&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Version control
&lt;/h2&gt;

&lt;p&gt;You won't write clean code on your first iteration most of the time. Also, if you happen to be in a situation where you lost your code due to variety of reasons, then version control systems got you covered. &lt;br&gt;
&lt;a href="https://github.com/"&gt;Git&lt;/a&gt; and &lt;a href="https://www.mercurial-scm.org/"&gt;Mercurial&lt;/a&gt; are among the most popular version control systems out there. You should definitely learn Git. Below are some resources where you can start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/"&gt;Git basics&lt;/a&gt;&lt;br&gt;
&lt;a href="https://git-scm.com/docs/gittutorial"&gt;Git documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Databases(relational) and ORM
&lt;/h2&gt;

&lt;p&gt;As we discussed already, backend developers mostly deal with data. Hence, it is essential that you learn several ways to work with the same. Relational databases were the goto for every use case. But, that has changed over the years, and several purpose built databases took its place. Initially you should be able to interact with the relational databases using SQL, or an ORM. But, as you get more comfortable, you should explore the database internals like how indexes work, how joins will effect performance, transactions, isolation levels, and designing for availability and consistency etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3schools.com/sql/"&gt;SQL tutorial&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-orm-object-relational-mapping"&gt;n+1 select&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.oreilly.com/library/view/high-performance-mysql/9781449332471/ch01.html"&gt;MySQL architecture and History&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=U42mC_iKSBg&amp;amp;t=4s"&gt;Aurora Deep Dive&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=hwnNbLXN4vA"&gt;Rick Houlihan's talk on matching the workload to DB&lt;/a&gt;&lt;br&gt;
&lt;a href="https://guides.rubyonrails.org/active_record_basics.html"&gt;Rails ActiveRecord - ORM&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/3.0/ref/models/querysets/"&gt;Django Queryset - ORM&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Databases(NoSQL)
&lt;/h2&gt;

&lt;p&gt;NoSQL databases came into picture to solve several problems of relational databases like schema rigidity, extensibility, scalability etc. There are several databases in this space. I will list down some of them and resources to learn about them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=EE8ZTQxa0AM"&gt;MongoDB from it's CTO&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=HaEPXoXVf2k"&gt;Advanced design patterns for DynamoDB(or any NoSQL in general)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.alexdebrie.com/posts/dynamodb-single-table/"&gt;Single table design - DynamoDB&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.alexdebrie.com/posts/dynamodb-no-bad-queries/"&gt;Why Dynamo scales where relational databases don't&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.memsql.com/blog/why-nosql-databases-wrong-tool-for-modern-application/"&gt;Different take on NoSQL vs SQL&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Databases(Graph)
&lt;/h2&gt;

&lt;p&gt;There is another class of purpose built databases which puts relations in the data, forefront. These databases exploit the related nature of the data and help answer complex queries easily. These databases are the goto when you want to answer queries like friends of friends, what do my friends like, efficiently. Below are some resources where you can learn about these.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://neo4j.com/blog/graph-databases-for-beginners-wait-what-do-you-mean-by-graph"&gt;Graph databases for beginners series&lt;/a&gt;&lt;br&gt;
&lt;a href="https://aws.amazon.com/neptune/"&gt;Amazon Neptune&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=pMjwgKqMzi8"&gt;Introduction to cypher&lt;/a&gt;&lt;br&gt;
&lt;a href="https://neo4j.com/docs/cypher-refcard/current/"&gt;Cypher reference card&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Big data(optional)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=MotN5f6_xl8"&gt;Everything you need to know about Big Data&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=nMyuCdqzpZc"&gt;Analytics at Netflix&lt;/a&gt;&lt;br&gt;
&lt;a href="https://netflixtechblog.com/metacat-making-big-data-discoverable-and-meaningful-at-netflix-56fb36a53520"&gt;Netflix Metacat&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  APIs and authentication
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://restcookbook.com/"&gt;REST cookbook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Representational_state_transfer"&gt;REST wiki&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm"&gt;Roy fielding's&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/26830431/web-service-differences-between-rest-and-rpc"&gt;RPC vs REST&lt;/a&gt;&lt;br&gt;
&lt;a href="https://apihandyman.io/do-you-really-know-why-you-prefer-rest-over-rpc/"&gt;REST over RPC&lt;/a&gt;&lt;br&gt;
&lt;a href="https://grpc.io/docs/talks/"&gt;gRPC talks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More and more companies are finding value in GraphQL recently. You can learn about the same below.&lt;br&gt;
&lt;a href="https://www.apollographql.com/blog/graphql-vs-rest-5d425123e34b/"&gt;GraphQL&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.apollographql.com/blog/graphql-vs-rest-5d425123e34b/"&gt;GraphQL vs REST&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Web security fundamentals
&lt;/h2&gt;

&lt;p&gt;Web application security should not be an after thought. Many developers focus much on the application logic, since the code is generally audited by a security researcher for an initial release. But, developers should write code keeping security in perspective always. The first link below is more relevant to the Rails ecosystem, but it will cover some general security best practices. Be sure to check it out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://guides.rubyonrails.org/security.html"&gt;Securing Rails applications&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cloudflare.com/learning/ssl/how-does-ssl-work/"&gt;SSL and TLS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://security.stackexchange.com/questions/20803/how-does-ssl-tls-work"&gt;Discussion on SSL and TLS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html"&gt;Virtual private clouds explained&lt;/a&gt;&lt;br&gt;
&lt;a href="https://owasp.org/www-community/attacks/csrf"&gt;Cross site request forgery&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/3.0/ref/csrf/"&gt;Django, CSRF&lt;/a&gt;&lt;br&gt;
&lt;a href="https://owasp.org/www-community/attacks/"&gt;OWASP attacks list&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS"&gt;Cross Origin Resource Sharing(CORS)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP"&gt;Content security policy&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication"&gt;HTTP Basic Auth&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies"&gt;Cookies and security&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Denial-of-service_attack"&gt;DOS attack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are working with &lt;code&gt;node.js&lt;/code&gt;, you can take advantage of &lt;code&gt;npm audit&lt;/code&gt; to find out and fix known vulnerabilities in npm modules. &lt;/p&gt;

&lt;p&gt;If you like the blog, follow me at &lt;a href="https://twitter.com/distributedmonk"&gt;@distributedmonk&lt;/a&gt; for more backend tech content and do checkout the &lt;a href="https://www.distributedstack.dev/backend-developer-skills-roadmap-and-resources/"&gt;blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
