<?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: Tharinda Dilshan Piyadasa</title>
    <description>The latest articles on DEV Community by Tharinda Dilshan Piyadasa (@tharindadilshan).</description>
    <link>https://dev.to/tharindadilshan</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%2F524284%2Fb7d322fc-4964-45a6-8056-8dcaea02fd7b.jpeg</url>
      <title>DEV Community: Tharinda Dilshan Piyadasa</title>
      <link>https://dev.to/tharindadilshan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tharindadilshan"/>
    <language>en</language>
    <item>
      <title>Running a Python script every X minutes on Windows 10</title>
      <dc:creator>Tharinda Dilshan Piyadasa</dc:creator>
      <pubDate>Tue, 05 Jan 2021 08:05:14 +0000</pubDate>
      <link>https://dev.to/tharindadilshan/running-a-python-script-every-x-minutes-in-windows-10-3nm9</link>
      <guid>https://dev.to/tharindadilshan/running-a-python-script-every-x-minutes-in-windows-10-3nm9</guid>
      <description>&lt;p&gt;Recently I had a requirement of implementing a web scraping tool to identify changes in a website. It was the virtual learning environment website of my university where I wanted to create a desktop notification whenever our examination results were uploaded to the website. I started by writing a Python script that checks the website and creates a notification on Windows if updates are detected. I used the &lt;a href="https://pypi.org/project/beautifulsoup4/" rel="noopener noreferrer"&gt;Python Beautiful Soup&lt;/a&gt; library to parse the HTML content of the web page and the &lt;a href="https://github.com/jithurjacob/Windows-10-Toast-Notifications" rel="noopener noreferrer"&gt;Windows 10 Toast Notifications&lt;/a&gt; library to generate Windows 10 toast notifications. These tools made the implementation pretty simple.&lt;/p&gt;

&lt;p&gt;The next phase was to run the script every 10 minutes and my initial thought was to use &lt;code&gt;time.sleep()&lt;/code&gt; while the script was running in an infinite loop. That's when I started to realize that even though this approach solves the problem, using &lt;code&gt;time.sleep()&lt;/code&gt; does not mean that the code is executed every 10 minutes. What it does is put a 10 minute gap between executions. For a simple expendable application(like what I'm implementing) this is not an issue but for mission-critical applications or streaming applications using &lt;code&gt;time.sleep()&lt;/code&gt; for scheduling might have adverse effects. So I decided to use Windows Task Scheduler to run my Python script every 10 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to schedule a Python script using the Windows Task Scheduler
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 - Create a batch file to run the Python script
&lt;/h3&gt;

&lt;p&gt;Open Notepad, add the following syntax and save it with the &lt;code&gt;.bat&lt;/code&gt; extension.&lt;/p&gt;

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

start "" "path_to_python.exe" "path_to_python_script"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Example:&lt;/p&gt;

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

start "" "C:\Python38\python.exe" "C:\Users\Tharinda\Desktop\web_scraper\main.py"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Using &lt;code&gt;start&lt;/code&gt; makes sure the cmd is closed after the execution. The first "" is the title that should be used with &lt;code&gt;start&lt;/code&gt; and in this case, the title is left blank.&lt;/p&gt;

&lt;p&gt;After double-clicking on the .bat file the python script should run if the file is configured properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 - Create a task in Windows Task Scheduler
&lt;/h3&gt;

&lt;p&gt;Open the &lt;code&gt;start&lt;/code&gt; menu and search for &lt;code&gt;Task Scheduler&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;code&gt;Actions&lt;/code&gt; tab select &lt;code&gt;Create Task&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fi%2F16x4ugyx9usor52ojg3k.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%2Fi%2F16x4ugyx9usor52ojg3k.png" alt="1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give a name for the task&lt;/li&gt;
&lt;/ul&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%2Fi%2Fynujv3f65f5zoye51u71.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%2Fi%2Fynujv3f65f5zoye51u71.png" alt="2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Switch to the &lt;code&gt;Triggers&lt;/code&gt; tab and press &lt;code&gt;New&lt;/code&gt; to create a new trigger. &lt;/li&gt;
&lt;/ul&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%2Fi%2Fz4xh3e0nsxttcgthhu7h.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%2Fi%2Fz4xh3e0nsxttcgthhu7h.png" alt="3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure the trigger to suit your needs. In my case, the trigger is scheduled to run daily repeating the task every 10 minutes.&lt;/li&gt;
&lt;/ul&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%2Fi%2Fv7vp14mc5sj25uc9doce.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%2Fi%2Fv7vp14mc5sj25uc9doce.png" alt="4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Switch to the &lt;code&gt;Actions&lt;/code&gt; tab and press &lt;code&gt;New&lt;/code&gt; to create a new Action.&lt;/li&gt;
&lt;/ul&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%2Fi%2Ft80kzpgcguduj2vmyh29.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%2Fi%2Ft80kzpgcguduj2vmyh29.png" alt="5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;code&gt;Program/Script&lt;/code&gt; add the batch file that was created in step 1&lt;/li&gt;
&lt;/ul&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%2Fi%2Faqyge7wzmgnn0pxudx4p.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%2Fi%2Faqyge7wzmgnn0pxudx4p.png" alt="6"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add Conditions and change the Settings depending on your requirement and press &lt;code&gt;OK&lt;/code&gt; to save the task. You can refer the &lt;a href="https://docs.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page" rel="noopener noreferrer"&gt;Task Scheduler documentation&lt;/a&gt; to learn more about the Windows Task Scheduler.&lt;/p&gt;

&lt;p&gt;That is pretty much it. Your task should run as intended. &lt;/p&gt;

&lt;p&gt;I hope this helps. Cheers!&lt;/p&gt;

</description>
      <category>python</category>
      <category>windows</category>
      <category>programming</category>
    </item>
    <item>
      <title>Domain Specific Computing Architectures</title>
      <dc:creator>Tharinda Dilshan Piyadasa</dc:creator>
      <pubDate>Tue, 15 Dec 2020 05:53:52 +0000</pubDate>
      <link>https://dev.to/tharindadilshan/domain-specific-computing-architectures-35ba</link>
      <guid>https://dev.to/tharindadilshan/domain-specific-computing-architectures-35ba</guid>
      <description>&lt;p&gt;As stated in &lt;a href="https://en.wikipedia.org/wiki/Moore%27s_law"&gt;Moore’s Law&lt;/a&gt;, the number of transistors that can fit onto an integrated circuit doubles roughly every 18 months. This drove the exponential growth of computing power over the decades. However, it has become much harder to keep the pace of Moore’s law as the scale of chip components shrink. The ending of Moore’s law has caused major limitations in energy efficient general purpose architectures making implementation technology and parallelism to reach their maximum potential for performance improvements. Domain Specific Architecture with domain specific hardware acceleration was introduced to address this issue and improve the performance that cannot be achieved by improving general purpose computing.&lt;/p&gt;

&lt;p&gt;Domain Specific Architectures achieve higher efficiency compared to general purpose computing by tailoring the architecture to characteristics of the domain being addressed. Therefore, Domain Specific Architectures require more domain specific knowledge. Graphics Processing Units(GPUs), Neural Network processors used for deep learning, and processors for Software Defined Networks(SDNs) are a few of the applications of Domain Specific Computing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dominance of Domain Specific Architecture
&lt;/h2&gt;

&lt;p&gt;To increase efficiency and achieve higher performance, Domain Specific Computing utilizes parallelism through Single Instruction Multiple Data(SIMD) technique. As it needs to fetch only one instruction stream and the ability to operate in lockstep makes SIMD more efficient than Multiple Instruction Multiple Data(MIMD) used by General Purpose Processors. Domain Specific Architecture also makes use of Very Long Instruction Word(VLIW) that works well with explicit parallel programs by performing the necessary analysis and scheduling at compile time.&lt;/p&gt;

&lt;p&gt;Another key feature of Domain Specific Architecture is the effective use of memory bandwidth. General purpose processors use multilevel caches to increase bandwidth and hide the latency but caches have a low temporal or spatial locality when the datasets are huge and when caches work well the locality is very high thus making the cache idle most of the time. Domain Specific Architectures use a hierarchy of memories with movement controlled explicitly by the software. Therefore when the application is specific to a certain domain, as in the case of Domain Specific Computing, user controlled memories can consume less energy than caches.  &lt;/p&gt;

&lt;p&gt;Domain Specific Architecture can also achieve higher performance by eliminating unnecessary accuracy when it is adequate. When using general purpose CPUs for applications in machine learning and graphics it uses more accuracy than needed by using 32 and 64-bit integer and floating point data. Most of these applications can improve both data and computational throughput by using just 8-bit or 16-bit integers. Domain Specific Architecture can also benefit from using Domain Specific Languages that can introduce more parallelism with improved structure and memory access.&lt;/p&gt;

&lt;p&gt;In conclusion, it can be stated that Domain Specific Architectures can achieve better performance as they are shaped to fit the needs of a specific application but it must impact significant portions of computational problems in order to acquire a remarkable runtime impact. It is also evident that computing power is the most dominating concern driving the deployment of Domain Specific Architecture based solutions.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>computerarchitecture</category>
      <category>domainspecificcomputing</category>
    </item>
    <item>
      <title>Instagram bot implemented in python 3.7 using selenium web driver</title>
      <dc:creator>Tharinda Dilshan Piyadasa</dc:creator>
      <pubDate>Tue, 08 Dec 2020 16:31:12 +0000</pubDate>
      <link>https://dev.to/tharindadilshan/instagram-bot-implemented-in-python-3-7-using-selenium-web-driver-14al</link>
      <guid>https://dev.to/tharindadilshan/instagram-bot-implemented-in-python-3-7-using-selenium-web-driver-14al</guid>
      <description>&lt;p&gt;I implemented a simple Instagram bot that,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find users who don't follow you back.&lt;/li&gt;
&lt;li&gt;Bulk liker to get attention and more followers.&lt;/li&gt;
&lt;li&gt;Find users that follow you, but you don't follow back(fans)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check my &lt;a href="https://github.com/TharindaDilshan/Instagram-Bot"&gt;GitHub repo&lt;/a&gt; to see the implementation details. The setup guide is available in the README file.&lt;/p&gt;

&lt;p&gt;What are your thoughts on this? Any other functionalities that I should implement?&lt;/p&gt;

</description>
      <category>python</category>
      <category>bot</category>
      <category>github</category>
    </item>
    <item>
      <title>The role of Distributed Computing in Blockchain Technology</title>
      <dc:creator>Tharinda Dilshan Piyadasa</dc:creator>
      <pubDate>Fri, 04 Dec 2020 12:09:38 +0000</pubDate>
      <link>https://dev.to/tharindadilshan/the-role-of-distributed-computing-in-blockchain-technology-1p5p</link>
      <guid>https://dev.to/tharindadilshan/the-role-of-distributed-computing-in-blockchain-technology-1p5p</guid>
      <description>&lt;p&gt;Blockchain is a decentralized peer-to-peer network that allows data to be stored on thousands of servers following a collective trust model among these unknown peers. Blockchain is mainly used for cryptocurrencies and the initial release of the concept was with the introduction of Bitcoin. Presently the Blockchain technology is used in various other domains such as Global Trade and Commerce, Real Estate, Capital markets, and Asset Management. In Blockchain all the transactions are recorded in a distributed immutable ledger which ensures that all the transactions that are done among nodes are available at each node and the transactions cannot be deleted or edited.&lt;/p&gt;

&lt;p&gt;The management of the distributed immutable ledger, the backbone of Blockchain is one of the main use cases of Distributed Computing in Blockchain. Distributed Computing ensures that every node in the network has a copy of the blockchain and that it is updated in real-time when a transaction takes place. Use of Distributed Computing along with the peer-to-peer architecture, blockchain also eliminates the use of a central authority to manage the network thus making the blockchain secure, transparent, and immutable.&lt;/p&gt;

&lt;p&gt;Another key feature in the Distributed Network of Blockchain is maintaining the present state of the ledger. Once a set of transactions is validated and a block is created by a miner that block is added to the Blockchain. Even though there are many miners working on block creation the final block that is being added to the blockchain will be created by a single winning miner and all the other nodes in the blockchain should agree and synchronize with the present state of the Blockchain. This is known as the &lt;a href="https://en.wikipedia.org/wiki/Consensus_(computer_science)"&gt;consensus protocol&lt;/a&gt; followed by the Blockchain and it helps the network to achieve reliability and maintain trust within the peers in the Blockchain. Distributed Computing plays a major role in maintaining this consensus protocol as every node has to communicate with its neighbor node in order to arrive at a common decision.&lt;/p&gt;

&lt;p&gt;Blockchain is nothing but another Distributed System that heavily uses the concepts and elements of Distributed Systems and every computation that takes place in the blockchain can be stated as Distributed System Computing.&lt;/p&gt;

&lt;h4&gt;
  
  
  Complications that can occur when using Distributed Computing for Blockchain
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The network can be vulnerable to deterring cyberattacks such as Distributed Denial of Service(DDoS) which can exhaust the resources of a computing system by sending multiple fake requests. The majority of small Blockchain networks that contain a small number of nodes are subjected to these attacks and susceptible to
fraud with hackers gaining access to the majority of nodes. Large Blockchains such as Bitcoin and Ethereum manage a ‘Proof of Work’ protocol within the distributed system to overcome these issues. This is a well-defined process that improves the trust in the blockchain.&lt;/li&gt;
&lt;li&gt;Another complication in using Distributed Computing for Blockchain is that backups should be done on each node in the network. This process requires higher computational power and a well-connected system of nodes.&lt;/li&gt;
&lt;li&gt;Security should be applied to each node individually as there is no central authority to manage the system as a whole and the peer-to-peer architecture of the distributed system allows any node to be accessed anytime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading. Hope you like it.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>distributedsystems</category>
      <category>blockchain</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Centralized vs Distributed Systems in a nutshell </title>
      <dc:creator>Tharinda Dilshan Piyadasa</dc:creator>
      <pubDate>Thu, 03 Dec 2020 13:56:49 +0000</pubDate>
      <link>https://dev.to/tharindadilshan/centralized-vs-distributed-systems-in-a-nutshell-48c7</link>
      <guid>https://dev.to/tharindadilshan/centralized-vs-distributed-systems-in-a-nutshell-48c7</guid>
      <description>&lt;h3&gt;
  
  
  Centralized Systems
&lt;/h3&gt;

&lt;p&gt;Centralized systems follow a &lt;a href="https://cio-wiki.org/wiki/Client_Server_Architecture"&gt;client-server architecture&lt;/a&gt; that is built around a single server with large computational capabilities. Less powerful nodes connected to the central server can submit their process requests to the server machine rather than performing them directly. Internet Service Providers, Application development servers, File Systems, and Organizational Networks are some use cases of centralized networks. As the computational power of the server machine is shared among the client machines in centralized systems, the performance of the system depends on the resource allocation and scheduling algorithms.&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages of Centralized Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Easy to set up and can be developed quickly because of the client-server architecture&lt;/li&gt;
&lt;li&gt;The whole system can be managed and monitored through the central server. Hence, a Single Point of Control.&lt;/li&gt;
&lt;li&gt;All the resources of the system(Memory, CPU power, etc.) can be accessed by the client machines by sending requests to the server.&lt;/li&gt;
&lt;li&gt;As there is only one machine to update, the system can be updated more efficiently.&lt;/li&gt;
&lt;li&gt;It is easy to physically secure and maintain the server.&lt;/li&gt;
&lt;li&gt;Less cost to set up for a small system&lt;/li&gt;
&lt;li&gt;Client nodes can be easily removed and added without affecting the overall system &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages of Centralized Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Longer access time for clients far from the server and improper scheduling algorithms might result in &lt;a href="https://en.wikipedia.org/wiki/Starvation_(computer_science)"&gt;starvation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Problems with the central server may result in a complete system breakdown. Hence, a single point of failure.&lt;/li&gt;
&lt;li&gt;Less possibility to maintain backups. If the central server fails and there is no backup, all the data will be erased.&lt;/li&gt;
&lt;li&gt;Availability of the entire system depends on the central server, Therefore updates to the system have to be done on the fly. This results in difficult server maintenance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Distributed Systems
&lt;/h3&gt;

&lt;p&gt;Distributed Systems follow a &lt;a href="https://en.wikipedia.org/wiki/Peer-to-peer"&gt;peer-to-peer architecture&lt;/a&gt;, it is a collection of independent computers interconnected via a network. Each node in a distributed system possesses enough computational power to collaborate on a task. In a distributed system users have equal access to data and user privileges can be enabled as required. Failure of independent components does not affect the overall system which results in higher availability and improved reliability. Distributed systems have evolved to address the limitations and problems faced by traditional centralized systems such as security, data storage, and privacy concerns. Internet, blockchain, SOA-based systems are some examples where large scale distributed systems are used in practice.&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages of Distributed Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;There is no central point of failure in distributed systems. The system can survive even if a node fails/is removed from the system. Hence, High fault tolerance.&lt;/li&gt;
&lt;li&gt;Distributed Systems are both horizontally and vertically scalable. Therefore it is much easier to add new servers as the load increases in the system and take machines offline when the workload is low.&lt;/li&gt;
&lt;li&gt;Allow many users access to a common database with minimum starvation.&lt;/li&gt;
&lt;li&gt;The workload can be shared over multiple machines as each node possesses enough processing power. This reduces the overloading of a single machine.&lt;/li&gt;
&lt;li&gt;The high geographical spread of distributed systems reduces the latency when getting a response to a request.&lt;/li&gt;
&lt;li&gt;It is easy to add and remove nodes from a distributed system without affecting the performance of the overall system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages of Distributed Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;As there is no common clock for the whole system it is more difficult to design and debug algorithms for the system.&lt;/li&gt;
&lt;li&gt;It is more difficult to order/schedule transactions in the system as different nodes have different latencies and performances.&lt;/li&gt;
&lt;li&gt;As all the nodes connected to a distributed system are independent, it is difficult for all the servers to agree upon the same information(consensus).&lt;/li&gt;
&lt;li&gt;Messages/Information can be lost in the network system because of the absence of a central server.&lt;/li&gt;
&lt;li&gt;Due to the distribution across multiple servers troubleshooting and diagnostics are more difficult.&lt;/li&gt;
&lt;li&gt;Limited software support for distributed systems.&lt;/li&gt;
&lt;li&gt;More effort must be put to make the network more secure and users have to control replicated data across multiple locations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Centralized Systems vs Distributed Systems
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Centralized Systems&lt;/th&gt;
&lt;th&gt;Distributed Systems&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Low fault tolerance as the central server acts as a single point of failure.&lt;/td&gt;
&lt;td&gt;High fault tolerance due to the absence of a single point of failure. Servers can be added/removed without affecting the overall performance.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low maintenance costs as the system is run through a single main server. And it is easier to monitor and manage the whole system using a single main server.&lt;/td&gt;
&lt;td&gt;High maintenance costs because each node in the system comprises varying processing power and distributed across geographical regions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Systems are only vertically scalable. Processing power can only be added to the central server and up to a certain limit only.&lt;/td&gt;
&lt;td&gt;Both horizontally and vertically scalable. Servers can be added and removed with varying loads.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Less reliable as if the central server crashes the system will be unavailable for all the clients.&lt;/td&gt;
&lt;td&gt;More reliable as if one server crashes the system as a whole can still survive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Less throughput as the single server model will become a bottleneck when keeping up with increasing client requests.&lt;/td&gt;
&lt;td&gt;Higher throughput as the processing power is distributed throughout the system.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The overall system is less complex as the system can be managed through the central server.&lt;/td&gt;
&lt;td&gt;The system is more complex as we need to address replica management and maintaining consistency.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Thank you for reading. I hope you will find this information useful.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>centralizedsystems</category>
      <category>distributedsystems</category>
      <category>firstpost</category>
    </item>
  </channel>
</rss>
