<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Devendra Dora on Medium]]></title>
        <description><![CDATA[Stories by Devendra Dora on Medium]]></description>
        <link>https://medium.com/@devendradora?source=rss-49d00fbf4d3f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*1e1Lm9Ikg8MtMMIJcbJm1Q.jpeg</url>
            <title>Stories by Devendra Dora on Medium</title>
            <link>https://medium.com/@devendradora?source=rss-49d00fbf4d3f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 20 May 2026 09:04:53 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@devendradora/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Scaling your web app — a bird’s eye view]]></title>
            <link>https://medium.com/@devendradora/scaling-your-web-app-a-birds-eye-view-42836b1255e7?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/42836b1255e7</guid>
            <category><![CDATA[database]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[cache]]></category>
            <category><![CDATA[varnish]]></category>
            <category><![CDATA[redis]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Wed, 01 Jul 2020 15:36:22 GMT</pubDate>
            <atom:updated>2020-07-01T17:29:51.769Z</atom:updated>
            <content:encoded><![CDATA[<h3>Scaling your web app — a bird’s eye view</h3><p>Let us try to understand all concepts of scaling web apps with an example.</p><p>An organization has a simple resume web app thats allows user to update his profile (name, email, phone ,education ,skills, profile picture , achievements etc) and view resume of the other people.</p><p>It was hosted on a single linux machine and using rdms database (mysql), and everything was good in terms of code, but all of a sudden, site traffic increased and the site was very slow and sometimes it caused downtimes.</p><p>Let us discuss the necessary actions to be taken as an architect to handle more trafffic. Please proceed for next step only if the previous step is not able to solve the problem of higher latency of website / downtimes as each step introduces more cost.</p><h3><strong>Add Database Cache (memcache / redis)</strong></h3><p>Read from database is expensive operation as it takes more time to read from database compared to cache in memory. You can use memcache if you want to go for simple key value cache, otherwise go for the redis.</p><h3><strong>Add Http Cache (varnish)</strong></h3><p>Latency of apis are significantly increased, but frontend content is dynamically generated everytime, so add http cache for html page caching with a specific expiry interval and also also enable web browser cache.</p><p>e.g Resume gets various values ( education history, skills, experience etc) from many tables (may keys of cache in case of cache hit) and each network call (suppose 3 calls) for each of the different value. But we can cache the page generated with the values so that we can get resume in 1 network call instead of 3 network calls and also we should ensure that cached pages are expired at proper intervals to display almost latest resume.</p><h3><strong>Load balancing</strong></h3><p>It is easier said than done, but involves a lot of pre analysis of app before doing load balancing. Load balancing involves routing traffic to various instances, adding/removes of instances based on certain parameters. The most common load balancing methods include <strong><em>round robin, api path, weighted traffic , geo location , least connections , least response time, IP hash</em></strong> etc.</p><h4><strong>Pre Analysis of web app and solving the problems so that web app is ready for load balancing</strong></h4><p><strong><em>a. Find and move out all the write operations in the web app instance to a object storage or nfs mounted on the seperate app instance.</em></strong></p><p><em>In resume web app , we find profile pictures and theme templates are stored on the instance itself. If you have limited time and want to achieve without changing app code, then you can move all the profile pictures, theme templates to other instance with nfs server, and mount nfs on web app instance, otherwise modify the code to storage images/templates on object storage (s3 or google bucket).</em></p><p>Also, logs are stored on the instance itself, so you can use<strong> ELK ( Elastic Search , LogStash and Kibana ) or aws cloud watch or google stackdriver logging</strong> for pushing, searching and analyzing logs.</p><p>But why should we avoid write operations to instance ?</p><p>As load balancer involves selecting one of the instance for a particular request , the write operation data on one instance might not be available for read as other request may access other instance.</p><p>e.g. uploading profile picture request goes to instance 1 and gets stored on it, but view profile request goes to instance 2 leading to the error of profile picture being not found, so we should store profile pictures on a common storage(nfs or object storage) that can be accessed by instance 1,2,….N.</p><p>Also, during downscaling which happens when site traffic reduces , then written data is lost forever. Also, add nfs mounting on startup of a instance.</p><p><strong><em>b. Move databases / database cache to a sepeate common instance for all autoscaled app services or use them as a service such as aws rds / google cloud sql etc. with read replicas , sharding and db internal partitions.</em></strong></p><p>Ideally we want same database for autoscaled services, and also don’t want to get lost of the database hosted on app instance during downscaling. Enable read replicas to reduce load on master database. We will discuss more about sharding , partitioning in other article in much more detail.</p><p><strong><em>c. Ensure that memcache/redis to a new instance which is not under auto scaling of web app instance</em></strong></p><p>same reason as above</p><p><strong><em>d. Find and move out all the crons/schedulers in the web app instance to a new instance which is not under auto scaling of web app instance</em></strong></p><p>You need to do this to avoid duplicate execution of same crons on different autoscaled instances.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=42836b1255e7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Playing with interceptors — an interesting story with the web app]]></title>
            <link>https://medium.com/@devendradora/playing-with-interceptors-an-interesting-story-with-the-web-app-384591b79416?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/384591b79416</guid>
            <category><![CDATA[java]]></category>
            <category><![CDATA[interceptors]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[rate-limiting]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Wed, 01 Jul 2020 07:18:32 GMT</pubDate>
            <atom:updated>2020-07-01T07:26:21.950Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Playing with interceptors — an interesting story with the web app</strong></h3><p><strong><em>Interceptors </em></strong>in the web application are the components that intercepts calls during request/response cycle. Usually these are executed after every request/response. Most common examples include ip filtering, authorization of user roles, logging important data of request/response, api rate limiting, adding extra request/response headers, preventing DDoS attacks, redirecting requests to other services in api gateway etc.</p><p>During software development stage, we developers usually face lot of errors/exceptions and do google search for the same and mostly endup in stackoverflow or other sites and check the answer with more votes. What if we can catch the error/exception in response interceptor, call the stackoverflow or other website api to get the most relevant top voted results and display to the developers ?</p><p>It is fun right !!!</p><p>Obviously Yes. Developers can save lot of time, and no manaul copy-paste job.</p><p>Luckily, stackoverflow provides an rest api for searching various errors/exceptions/info on many topics.</p><p>Below example searches for Unsupported major.minor version of java and sorts the results by votes in descending order of pagesize 2.</p><p><a href="https://api.stackexchange.com/docs/search#pagesize=2&amp;order=desc&amp;sort=votes&amp;tagged=java&amp;intitle=Unsupported%20major.minor%20version&amp;filter=default&amp;site=stackoverflow&amp;run=true"><strong>https://api.stackexchange.com/docs/search#pagesize=2&amp;order=desc&amp;sort=votes&amp;tagged=java&amp;intitle=Unsupported%20major.minor%20version&amp;filter=default&amp;site=stackoverflow&amp;run=true</strong></a></p><pre>{<br>  &quot;items&quot;: [<br>    {<br>      &quot;tags&quot;: [<br>        &quot;java&quot;,<br>        &quot;jvm&quot;,<br>        &quot;incompatibility&quot;,<br>        &quot;unsupported-class-version&quot;<br>      ],<br>      &quot;owner&quot;: {<br>        &quot;reputation&quot;: 19938,<br>        &quot;user_id&quot;: <a href="https://stackoverflow.com/u/898042">898042</a>,<br>        &quot;user_type&quot;: &quot;registered&quot;,<br>        &quot;accept_rate&quot;: 57,<br>        &quot;profile_image&quot;: <a href="https://i.stack.imgur.com/3QYVI.jpg?s=128&amp;g=1">&quot;https://i.stack.imgur.com/3QYVI.jpg?s=128&amp;g=1&quot;</a>,<br>        &quot;display_name&quot;: &quot;ERJAN&quot;,<br>        &quot;link&quot;: <a href="https://stackoverflow.com/users/898042/erjan">&quot;https://stackoverflow.com/users/898042/erjan&quot;</a><br>      },<br>      &quot;is_answered&quot;: true,<br>      &quot;view_count&quot;: 1879973,<br>      &quot;protected_date&quot;: 1411403422,<br>      &quot;accepted_answer_id&quot;: <a href="https://stackoverflow.com/a/11432195">11432195</a>,<br>      &quot;answer_count&quot;: 51,<br>      &quot;score&quot;: 1576,<br>      &quot;last_activity_date&quot;: 1588697101,<br>      &quot;creation_date&quot;: 1335785304,<br>      &quot;last_edit_date&quot;: 1553323320,<br>      &quot;question_id&quot;: <a href="https://stackoverflow.com/q/10382929">10382929</a>,<br>      &quot;content_license&quot;: &quot;CC BY-SA 4.0&quot;,<br>      &quot;link&quot;: <a href="https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi">&quot;https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi&quot;</a>,<br>      &quot;title&quot;: &quot;How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version&quot;<br>    },<br>    {<br>      &quot;tags&quot;: [<br>        &quot;java&quot;,<br>        &quot;applet&quot;,<br>        &quot;version&quot;,<br>        &quot;unsupported-class-version&quot;<br>      ],<br>      &quot;owner&quot;: {<br>        &quot;reputation&quot;: 6333,<br>        &quot;user_id&quot;: <a href="https://stackoverflow.com/u/3397452">3397452</a>,<br>        &quot;user_type&quot;: &quot;registered&quot;,<br>        &quot;accept_rate&quot;: 50,<br>        &quot;profile_image&quot;: <a href="https://www.gravatar.com/avatar/00cc40c22dfcd44184a0639cc0435271?s=128&amp;d=identicon&amp;r=PG&amp;f=1">&quot;https://www.gravatar.com/avatar/00cc40c22dfcd44184a0639cc0435271?s=128&amp;d=identicon&amp;r=PG&amp;f=1&quot;</a>,<br>        &quot;display_name&quot;: &quot;user3397452&quot;,<br>        &quot;link&quot;: <a href="https://stackoverflow.com/users/3397452/user3397452">&quot;https://stackoverflow.com/users/3397452/user3397452&quot;</a><br>      },<br>      &quot;is_answered&quot;: true,<br>      &quot;view_count&quot;: 1593229,<br>      &quot;protected_date&quot;: 1434929462,<br>      &quot;closed_date&quot;: 1468997244,<br>      &quot;answer_count&quot;: 26,<br>      &quot;score&quot;: 620,<br>      &quot;last_activity_date&quot;: 1544975419,<br>      &quot;creation_date&quot;: 1395171648,<br>      &quot;last_edit_date&quot;: 1484412305,<br>      &quot;question_id&quot;: <a href="https://stackoverflow.com/q/22489398">22489398</a>,<br>      &quot;link&quot;: <a href="https://stackoverflow.com/questions/22489398/unsupported-major-minor-version-52-0">&quot;https://stackoverflow.com/questions/22489398/unsupported-major-minor-version-52-0&quot;</a>,<br>      &quot;closed_reason&quot;: &quot;Duplicate&quot;,<br>      &quot;title&quot;: &quot;Unsupported major.minor version 52.0&quot;<br>    }<br>  ],<br>  &quot;has_more&quot;: true,<br>  &quot;quota_max&quot;: 10000,<br>  &quot;quota_remaining&quot;: 9980<br>}</pre><p>You can add code related to http request to any site (stackoverflow or anysite which exposes an api) in response interceptor , iterate through results and display it. As most of the api services have a rate limit, you can store error and their results in db and cache for more optimiazation and only enabled for development environment.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=384591b79416" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Smarter way of giving emailId to others]]></title>
            <link>https://medium.com/@devendradora/smarter-way-of-giving-emailid-to-others-e44355e3730e?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e44355e3730e</guid>
            <category><![CDATA[gmail]]></category>
            <category><![CDATA[spam]]></category>
            <category><![CDATA[email-marketing]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Thu, 04 Oct 2018 17:04:18 GMT</pubDate>
            <atom:updated>2018-10-04T17:05:35.093Z</atom:updated>
            <content:encoded><![CDATA[<p>There is a lesser known feature of many of the messaging services which offer multiple instances of same email id that you own.<br>In fact if your email is <a href="mailto:dora@gmail.com">dora@gmail.com</a> ,then <a href="mailto:d.ora@gmail.com">d.ora@gmail.com</a>, <a href="mailto:dor.a@gmail.com">dor.a@gmail.com</a> ,<a href="mailto:dora+developer@gmail.com">dora+developer@gmail.com</a> also serve as your email addresses.</p><p>Apart from all the email with + is more valuable in filtering your emails. The text before + is your actual email id and you can write anything after + ,say <a href="mailto:dora+twitter@gmail.com">dora+nitw@gmail.com</a> or <a href="mailto:dora+twitter@gmail.com">dora+twitter@gmail.com</a> .</p><p>Why this feature offered ?<br>Consider, you sign up for a subscription where you know they will ask you to verify and your are sure that you will receive a lot of spam thereafter. At this kind of situations you can give ur email + anything@gmail.com and use your messaging service settings to filter out the mails received by the different addresses accordingly.<br>But you cannot use the instances of the emails described above to sign in to your account .</p><h3>Other Posts</h3><p><strong>Web Security</strong></p><p><a href="https://medium.com/@devendradora/security-vulnerability-more-than-1-query-param-with-the-same-name-key-1c6c37f6483d">https://medium.com/@devendradora/security-vulnerability-more-than-1-query-param-with-the-same-name-key-1c6c37f6483d</a></p><p><a href="https://medium.com/@devendradora/a-simple-security-vulnerability-480ae3d6a6d0">https://medium.com/@devendradora/a-simple-security-vulnerability-480ae3d6a6d0</a></p><p><strong>Software engineering</strong></p><p><a href="https://medium.com/@devendradora/quick-guide-for-a-software-engineer-a52253ee5395">https://medium.com/@devendradora/quick-guide-for-a-software-engineer-a52253ee5395</a></p><p><strong>Careers, Startups, Freelancing</strong></p><p><a href="https://medium.com/@devendradora/career-startups-corporate-freelancing-733dd6bd2920">https://medium.com/@devendradora/career-startups-corporate-freelancing-733dd6bd2920</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e44355e3730e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Security Vulnerability : More than 1 Query Param with the same name/key]]></title>
            <link>https://medium.com/@devendradora/security-vulnerability-more-than-1-query-param-with-the-same-name-key-1c6c37f6483d?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/1c6c37f6483d</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Wed, 03 Oct 2018 18:04:00 GMT</pubDate>
            <atom:updated>2018-10-04T19:21:54.739Z</atom:updated>
            <content:encoded><![CDATA[<h3>Security Vulnerability(Email Password Reset) : More than 1 Query Param with the same name/key</h3><p>Have you ever tried passing same query param in http request ?</p><p>e.g 127.0.0.1/webapp?emailId=dev@gmail.com&amp;emailId=dora@gmail.com</p><p>Any guess forw hich param would be considered .</p><p>Does it depend upon on type of webserver or web application code logic ?</p><p>Let us try putting same query param on popular search engines like google and bing and see the result.</p><p>https://www.google.co.in/search?q=devendradora&amp;q=india</p><p><strong>It searched for devendradora india</strong></p><p>https://www.bing.com/search?q=devendradora&amp;q=india</p><p><strong>It searched for india</strong></p><p>Surprised !!!</p><p>There is no such particular standard which defines which parameter to consider if there is a same occurence of the same param. So different webservers treat them differently. Some take the last occurence , others take first occurence and few others take concatenation of both values.</p><p>Infact, it depends on type of application server (Apache , IIS , Jetty etc) used.</p><p>At first glance, you may think that there is no problem based on which parameter is considered by your web app business logic.</p><p>But let me give a simple example of password reset using email.</p><p>e.g</p><p>Suppose url for password reset is</p><p>127.0.0.1/webapp/passwordReset?<strong>emailId</strong>=dev@gmail.com&amp;userId=1</p><p>But attacker modified the url as below with email occuring twice</p><p>127.0.0.1/webapp/passwordReset?<strong>emailId</strong>=dev@gmail.com&amp;<strong>emailId</strong>=dora@gmail.com&amp;userId=1</p><p>Suppose you have 2 different microservices</p><p><strong>a. Microservice1 (Server Type X : Takes last occurence of same named param)</strong></p><p>Generates a unique password reset link and stores in database. So in the above example it takes dora@gmail.com as emailId param and generates a unique link for userId 1</p><p><strong>b. Microservice2 (Server Type Y : Takes first occurence of same named param)</strong></p><p>Send email containing password link to query param emailId given in request by taking the value stored by Microservice1 in database.</p><p>So in the above example it takes dev@gmail.com as emailId param and sends password reset link of dora@gmail.com (userId =1 in query param ] to dev@gmail.com</p><p>By the above example, it is clear that you can reset the password of any user by changing request query param.</p><p>This is simple example of what can go wrong if business logic is not implemented properly.</p><p>Similary , there can be many vulnerabilities.</p><p>Other posts on security :</p><p><a href="https://medium.com/@devendradora/a-simple-security-vulnerability-480ae3d6a6d0">https://medium.com/@devendradora/a-simple-security-vulnerability-480ae3d6a6d0</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1c6c37f6483d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Simple Security Vulnerability (Wallet Implementation)]]></title>
            <link>https://medium.com/@devendradora/a-simple-security-vulnerability-480ae3d6a6d0?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/480ae3d6a6d0</guid>
            <category><![CDATA[web]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Tue, 02 Oct 2018 10:00:08 GMT</pubDate>
            <atom:updated>2018-10-03T18:53:13.016Z</atom:updated>
            <content:encoded><![CDATA[<p>Assume you are implementing a private wallet service when money is paid to a particular service , the amount gets deducted in the wallet.</p><p>Let us take few variables like redeemAmount (comes from client app) , walletBalance.</p><p>Logic for deducting amount :</p><p>walletBalance = walletBalance-redeemAmount</p><p>At first glance the logic seems to be correct , but what if client app send -ve redeemAmount ( i.e., walletBalance=walletBalance-(-redeemAmount) )</p><p>Instead of deducting balance , it adds balance . So even substraction operation matters a lot.</p><p>So you need to check if redeemAmount is +ve before actual operation for deducting wallet balance takes place.</p><p>Hope you will take care of even simple operations in coding from next time.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=480ae3d6a6d0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Recover the files from harddisk or usb drives]]></title>
            <link>https://medium.com/@devendradora/recover-the-files-from-harddisk-or-usb-drives-d29b125b0a1f?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d29b125b0a1f</guid>
            <category><![CDATA[windows-10]]></category>
            <category><![CDATA[virus]]></category>
            <category><![CDATA[recovery]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Tue, 02 Oct 2018 09:55:32 GMT</pubDate>
            <atom:updated>2018-10-02T09:55:32.911Z</atom:updated>
            <content:encoded><![CDATA[<p>In present days it has been observed that many of the removable drives (usb drives, memory cards) when removed from some of the systems ,the files in it gets disappeared but the properties of the drive shows some size is occupied by the files . You can recover the disappeared files by opening computer , then opening the removable disk drive and typing *.* in the search box .The files will be displayed and select all the files ,cut and paste the files in the removable disk drive location.</p><p><strong>But, why it happens ?</strong><br>The files which appeared to be disappeared were moved to a folder named space like character (which can be obtained by typing Alt+255 or Alt + 0160) which is different from space generated by pressing space bar (This space cannot be used to name a folder as folder name doesn’t contain spaces) and the graphical view of folder usually yellow is changed to white which in turn makes the folder invisible. Finally, You need to type *.* in the search as * is a wildcard character which stands for multiple characters in windows platform.</p><p>For recovering lost files , you can TestDisk software utility (<a href="https://www.cgsecurity.org/wiki/TestDisk">https://www.cgsecurity.org/wiki/TestDisk</a>) or some of the recovering utilities of Hiren’s Boot cd (<a href="https://www.hiren.info/pages/bootcd">https://www.hiren.info/pages/bootcd</a>)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d29b125b0a1f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Setting up XAMPP]]></title>
            <link>https://medium.com/@devendradora/setting-up-xampp-8672babc5aeb?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/8672babc5aeb</guid>
            <category><![CDATA[apache]]></category>
            <category><![CDATA[xampp]]></category>
            <category><![CDATA[php]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Tue, 02 Oct 2018 09:48:40 GMT</pubDate>
            <atom:updated>2018-10-02T09:48:40.130Z</atom:updated>
            <content:encoded><![CDATA[<p>XAMPP is the most popular PHP development environment .Infact it is a Apache distribution containing MySQL, PHP, and Perl .</p><p>This post describes of basic installation of XAMPP in windows and Linux.<br>If there are any problems in installation<br>Visit <a href="https://medium.com/@devendradora/handling-problems-in-installation-of-xampp-4eda3634a25e">https://medium.com/@devendradora/handling-problems-in-installation-of-xampp-4eda3634a25e</a></p><p><strong>Setting up of environment</strong></p><p>1) Download the software from <a href="https://www.apachefriends.org/index.html">https://www.apachefriends.org/index.html</a><br> ** You can find the software for most of the <strong>os like linux based (ubuntu,fedora) ,Windows , OSX </strong>etc. (For 32 bit systems choose <strong>x86</strong> file and <strong>x64</strong> file for 64 bit systems)</p><p><strong>For windows OS</strong><br>2) Once your download is complete, install the program, click on Run.</p><p>3) Accept the default settings and click on NEXT ….and then on Finish.</p><p>4) Now open Xampp control panel .</p><p>5) Start the Apache and MySQL . You can also start the other components, if you want to use them.</p><p>6) Open any webbrowser(Mozilla , Chrome ,opera) and type localhost or 127.0.0.1 in the address bar .</p><p>7) A page appears that offers you to choose language . Click on the language of your preference.</p><p>8) Welcome page of xampp is displayed.</p><p><strong>For Linux based OS</strong></p><p>2) Once your download is complete, navigate to the location of your downloaded file saythe file name is <strong>xampp-linux-x64–5.6.3–0-installer .</strong><br>If your system is dual boot with windows make sure that you move the downloaded file to the location which is only used by linux as there may be some permission issues if it is in shared location of windows and linux.</p><p><strong>Open terminal (CTRL + ALT + T for ubuntu) </strong>and change your directory to specified location . For e.g <strong>cd Downloads</strong></p><p>3) Make the file executable <br><strong> sudo chmod </strong>+<strong>x xampp-linux-x64–5.6.3–0-installer </strong><br>**sudo means root access ,+x means executable</p><p>4)<strong> sudo ./ xampp-linux-x64–5.6.3–0-installer</strong></p><p>5) Accept the default settings and click on NEXT ….and then on Finish.</p><p>6)To start Xampp (basically called lampp in linux)</p><p><strong>sudo /opt/lampp/lampp start</strong></p><p>7) Open any webbrowser(Mozilla , Chrome ,opera) and type localhost or 127.0.0.1 in the address bar .</p><p>8) A page appears that offers you to choose language . Click on the language of your preference.</p><p>9) Welcome page of xampp is displayed.</p><p><strong><em>Problems in installation of XAMPP ?</em></strong><br>Visit <a href="https://medium.com/@devendradora/handling-problems-in-installation-of-xampp-4eda3634a25e">https://medium.com/@devendradora/handling-problems-in-installation-of-xampp-4eda3634a25e</a></p><p><strong>If everthing goes fine until now then you have installed XAMPP successfully.</strong></p><p><strong>For Windows OS </strong><br>a)<strong> </strong>Navigate to installation directory of Xampp and open<strong> htdocs.</strong><br><strong> eg. c:/&gt;xampp/htdocs </strong><br><strong> ** htdocs </strong>: It is the location where you can place your various web projects.</p><p>b) Create a folder named say <strong>webdev</strong></p><p>c) Create a sample html or php file say<strong> login.php </strong>or <strong>login.html</strong></p><p>d) Open web browser and type <br><strong>localhost/webdev/login.php </strong>or <strong>127.0.0.1/webdev/login.php</strong> in the address bar <br>e)Your web page gets displayed.</p><p><strong>For Linux OS</strong></p><p>a)<strong> </strong>Navigate to installation directory of Xampp and open<strong> htdocs.</strong><br><strong> eg. open terminal CTRL+ ALT + T</strong> and then type following commands</p><p><strong>cd /opt/lampp/htdocs</strong></p><p><strong>** htdocs </strong>: It is the location where you can place your various web projects.</p><p>b) Create a folder named say <strong>webdev</strong><br><strong> mkdir webdev</strong><br><strong> cd webdev</strong></p><p>c) Create a sample html or php file say<strong> login.php </strong>or <strong>login.html</strong></p><p>d) Open web browser and type <br><strong>localhost/webdev/login.php </strong>or <strong>127.0.0.1/webdev/login.php</strong> in the address bar . If access denied then in the terminal , type <br><strong> chmod +755 webdev</strong></p><p>e) Your web page gets displayed.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8672babc5aeb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Handling problems in installation of XAMPP]]></title>
            <link>https://medium.com/@devendradora/handling-problems-in-installation-of-xampp-4eda3634a25e?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/4eda3634a25e</guid>
            <category><![CDATA[apache]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[xampp]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Tue, 02 Oct 2018 09:43:58 GMT</pubDate>
            <atom:updated>2018-10-02T09:43:58.130Z</atom:updated>
            <content:encoded><![CDATA[<h3>Some common Errors:</h3><p><strong>Apache shutdown unexpectedly.</strong><br>This may be<strong> </strong>due to a blocked port, missing dependencies.<br>Most of the times these errors are due to the <strong>same port (Default :80</strong>) is used by some other services say <strong>Internet Information Services (IIS) ,Skype</strong> etc.</p><p><strong>Possible solutions :</strong></p><p>So either these <strong>services can be turned off</strong> or <strong>port of the apache should be changed </strong>to solve the above the problems.</p><p><strong><em>Method1 :</em></strong><br>Steps :<br>-&gt; Open your xampp control panel then click its “config”<br>-&gt; Choose the “Apache (httpd.conf)” and find this code below and change it into this one:<br># change this to Listen on specific IP addresses as shown below<br># to prevent Apache from glomming onto all bound IP addresses.<br># Listen 0.0.0.0:80<br># Listen [::]:80<br>Listen 80<br>-&gt; Save it (ctrl + s)<br>-&gt; Click again on config<br>-&gt; Choose “Apache (httpd-ssl.conf)” find this code below and change it again:<br># Note: Configurations that use IPv6 but not IPv4-mapped addresses need two<br># Listen directives: “Listen [::]:443” and “Listen 0.0.0.0:443”<br># Listen 0.0.0.0:443<br># Listen [::]:443<br>Listen 443<br>-&gt; Save it (ctrl + s)</p><p><strong><em>Method 2 </em></strong>: Change the port 80 to some other port say 81<br>steps : <br>-&gt; Open your xampp control panel then click its “config”<br>-&gt; Choose the “Apache (httpd.conf)”<br>-&gt; Change line <br>Listen 80 to Listen 81 <br>-&gt; Change line<br>ServerName localhost:80 to ServerName localhost:81 <br>-&gt; Start the apache</p><p><strong><em>Method 3 </em>: </strong>Turning off the IIS server<br>Steps :<br>-&gt; Go to the “control panel” -&gt; “Programs &amp; Features” -&gt; “Turn Windows On or Off”.<br>-&gt; Uncheck your “Internet Information Services” then click ok.</p><p><strong>Method 4 :</strong> Install on any Virtual Machine ( vmware,virtualbox etc)</p><p>Hope this works !!!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4eda3634a25e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Quick Guide for a Software Engineer]]></title>
            <link>https://medium.com/@devendradora/quick-guide-for-a-software-engineer-a52253ee5395?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/a52253ee5395</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Fri, 28 Sep 2018 17:17:03 GMT</pubDate>
            <atom:updated>2018-09-28T17:17:03.618Z</atom:updated>
            <content:encoded><![CDATA[<ul><li>Have Strong fundamentals in basics and you should have horizontal overview on most of the topics and vertical depth on any specific topic(s).</li><li><strong>Programming Language :</strong> Master atleast 1 programming language (Vertical depth) and know about the pros, cons, features of your mastered programming language with respect to other languages available (Horizontal Overview). Some of the programming languages are c/c++, Python,PHP, Java, Scala, Ruby.</li><li><strong>Datastructures and Alogrithms :</strong> It plays vital role in computer science. Go through Stack, Queue, Linked List, Trees, Hash Tables, Sets, Maps, Graphs, Dynamic Programming, Backtracking and practice enough programs. Some of the useful resources : Data structures and Algorithms made easy Narasimha karumanchi , <a href="https://www.hackerearth.com/codemonk/">Code Monk — Be a better programmer</a> , <a href="http://www.geeksforgeeks.org/data-structures/">Data Structures Archives — GeeksforGeeks</a> , <a href="https://www.interviewbit.com/">Coding Interview preparation made easy</a> , Data structures and algorithms by Thomas H Cormen</li><li><strong>Databases : </strong>SQL Queries<strong>, </strong>more exposure to Database Design, Normalization and Indexing Techniques, Triggers, RDBMS (MYSQL/Oracle), NoSQL (MongoDB , Graph databases like Neo4j, Graphx).</li><li><strong>Operating Systems : </strong>Know all the basic concepts and become familiar with atleast 1 linux flavour (Parot OS, KALI Linux, Ubuntu, Fedora).</li><li><strong>Computer Networks : </strong>Socket programming, Layers of computer networks.</li><li><strong>Web Application Development :</strong> Frontend (HTML, CSS, Javascript/Jquery, Angular JS , React JS), Backend (PHP/Python/Java/Ruby) , Understanding of JSON, XML , WebServices like REST, SOAP. Recommeded Frameworks : Bootstrap , Python (Django, Flask ), PHP(Codeigniter, Zend, Laravel), Ruby (Ruby on Rails), Java (Spring, Jersy) <a href="http://www.w3schools.com/">W3Schools Online Web Tutorials </a>, <a href="http://www.tutorialspoint.com/tutorialslibrary.htm">Free Online Tutorials and Courses</a> , <a href="https://thenewboston.com/videos.php">Video Tutorials — thenewboston</a> , <a href="https://www.apachefriends.org/index.html">XAMPP Installers and Downloads for Apache Friends</a></li><li><strong>Mobile App Development </strong>:<strong> </strong>Android, Windows, IOS <a href="http://www.tutorialspoint.com/tutorialslibrary.htm">Free Online Tutorials and Courses</a> , <a href="http://www.vogella.com/tutorials/">Tutorials</a></li><li><strong>Game Development :</strong> Pygame, Unity Game Engine( <a href="https://www.awesomeincu.com/tutorials/unity-pong/">Make A Pong Game With Unity 2D</a> , <a href="https://noobtuts.com/unity/2d-pong-game">Unity 2D Pong Game</a> , <a href="http://www.thegamecontriver.com/2014/06/subway-surfers-temple-run-like-game-setting-up-the-world.html">THE ROAD RUNNER TUTORIAL 1: SETTING UP THE WORLD</a> )</li><li><strong>Version Control System : </strong>It helps developers to work together, share code hassle free and maintaining history of individual works, reverting code to previous/later versions with ease. e.g. GIT, SVN, CVS . Some of the popular sites include github, gitlab, bitbucket . <a href="http://rogerdudler.github.io/git-guide/">git — the simple guide</a> , <a href="https://git-scm.com/documentation">Git — Documentation</a>, <a href="https://www.mercurial-scm.org/">Mercurial SCM</a></li><li><strong>Testing : </strong>Junit, Selenium, JBeahave</li><li><strong>Open Source :</strong> Contribute to open source. <a href="https://devendradora.quora.com/Why-Open-Source">Why Open Source ?</a></li><li><strong>Shell Scripting</strong></li><li><strong>Recommended Tools :</strong></li><li>Text Editor (Sublime Text, Visual Code, Notepad++)</li><li>Remote system Connection clients : Putty, WinScp, FileZilla , Remote Desktop</li><li>IDE ( Eclipse, Visual Studio , Android Studio, NetBeans )</li><li>PHP Web development (XAMPP, Wamp)</li><li>Continious Integration (Docker, Jenkins)</li></ul><p><strong>Some of the best practices to be followed are as follows :</strong></p><ul><li>Keep reading existing software source code. I know reading and understanding existing source code is boring, but it gives you a chance to know the best practices followed by most of the software developers. Poorly written source code teaches you to write good source code, provided you take it positively and learn a lesson from it. If you want to be a novelist, can you write best novels without reading any of the novels ? I would say NO. Similarly , if you want to write best source code ,then how will it be possible for you to write without reading tons of source codes and know the best practices (Indentation, Comments etc).</li><li>Document your code.</li><li>Test your code properly.</li><li>Keep on learning new things and leave the Ego behind. New technologies are coming everyday and no one have complete command on all things. So feel free to ask/help your colleagues, friends and even juniors.</li><li>It depends on you whether you want to sustain (not adopting to learn new things) or want hikes in career growth.</li><li>Keep yourself updated with latest tools and technologies.</li><li>Participate in Hackathons, Coding competitions, even if you don’t know anything. Winning and losing are part of the game, but the learning and experience gained will be forever.</li><li>Start doing as many projects as possible.</li></ul><p>Websites : Stackoverflow, w3schools, tutorialpoint, coursera, edx, udacity, thenewboston, HackerEarth, HackerRank, Spoj, Codechef, interviewbit.</p><p>Blogs :</p><p><a href="http://devendradora.blogspot.in/">Explore the new world of computers,mobiles, technology &amp; science</a></p><p><a href="http://programmingdevdora.blogspot.in/">THE NEW WORLD OF PROGRAMMING</a></p><p><a href="http://hackingprotectdora.blogspot.in/">Hacking Protect</a></p><p><a href="http://epicsdora.blogspot.com/">Engineering Projects in Community Service</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a52253ee5395" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Career — Startups, Corporate, Freelancing]]></title>
            <link>https://medium.com/@devendradora/career-startups-corporate-freelancing-733dd6bd2920?source=rss-49d00fbf4d3f------2</link>
            <guid isPermaLink="false">https://medium.com/p/733dd6bd2920</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[corporate]]></category>
            <category><![CDATA[freelancing]]></category>
            <dc:creator><![CDATA[Devendra Dora]]></dc:creator>
            <pubDate>Thu, 22 Mar 2018 19:40:08 GMT</pubDate>
            <atom:updated>2018-03-22T19:40:08.696Z</atom:updated>
            <content:encoded><![CDATA[<p>Decide upon what makes you happy now, and what will make you happy in the future.</p><p><strong><em>want to become rich ?</em></strong></p><p>No doubt that you will earn a lot of money, but will you be able to sleep properly, enjoy with your family. Remember you go empty handed when you leave the world.</p><p><strong><em>want to earn money that can lead you a work-life balance and some savings for future ?</em></strong></p><p>Let us explore into startups</p><p><strong>Joining new Startups</strong></p><p><strong><em>Pros</em></strong></p><ul><li>Huge learning curve.</li><li>Chances in involving in almost all phases ( Dev , Testing , Devops , Sales , Management).</li><li>Options of more stock.</li></ul><p><strong><em>Cons</em></strong></p><ul><li>Chances of Firing and chances of getting other jobs becomes difficult if you have no prior experience in some well known companies.</li><li>Company may shutdown.</li><li>Only nominal % of startups succeed.</li><li>Less package during initial phase.</li><li>Less work life balance.</li><li>No proper well established coding or other standards at initial stages</li></ul><p><strong>Want to start your own startup ?</strong></p><p>Becoming “ Boss/CEO “ seems to be attractive as glory, power, money comes along with.</p><p>But there are several disadvantages to consider</p><ul><li>Hard to sleep properly.</li><li>No work life balance.</li><li>You might have a lot of talent, but always stick to excel sheets at later stage.</li><li>No well established coding and other standards.</li></ul><p>But above disadvantages can be nothing if you have proper planning .</p><p>Other option would be “Do a startup, make it grow and sell it when you feel like enjoying life “ . The money will be suffice to lead a better life , but you can choose freelancing or join as a adviser to some company or can join corporate company.</p><p><strong>Start a startup in early school/college days</strong></p><p><strong><em>Pros</em></strong></p><ul><li>No need of paying developers (friends) as most of them want to learn or do many projects at this stage.</li><li>No need of investment in office infrastructure</li></ul><p><strong><em>Cons</em></strong></p><ul><li>More chances of failure, but lessons learnt from them will be a great asset.</li><li>School/college Grades may decrease.</li><li>Scalability problems.</li><li>Less investment of money due to no income, but you can approach venture capitalists.</li><li>Miss a lot of enjoyments in college life</li></ul><p><strong>Starting a startup post college</strong></p><p><strong><em>Pros</em></strong></p><ul><li>You are the boss.</li><li>Huge profit if it succeeds</li></ul><p><strong><em>Cons</em></strong></p><ul><li>May fail if u have no proper plans, goals, investment, sales and marketing.</li><li>No work life balance at initial phase.</li><li>May Not able to hire highly talented people due to financial problems.</li><li>If you are working full-time, you may go out of money due to no income , investment in office infrastructure and travelling costs at initial stage.</li></ul><p>Now Let us have a look at other options.</p><p><strong>Freelancing</strong></p><p><strong><em>Pros</em></strong></p><ul><li>Flexible working hours.</li><li>Work whenever you want.</li><li>You are the boss.</li><li>Work on the projects you like.</li><li>Huge learning Curve.</li></ul><p><strong><em>Cons</em></strong></p><ul><li>Income and work load are inconsistent.</li><li>No employee benefits.</li><li>You may not find projects all the time.</li></ul><p><strong>Joining corporate companies</strong></p><p><strong><em>Pros</em></strong></p><ul><li>Good work life balance in most of the companies.</li><li>More job security compared to startups</li></ul><p><strong><em>Cons</em></strong></p><ul><li>More levels of hierarchy in the job roles and usually it takes more time to promoted to next higher level</li><li>Less hikes</li></ul><p><strong>Joining Govt. sector jobs</strong></p><p><strong><em>Pros</em></strong></p><ul><li>Healthier work life balance.</li><li>Much More job security.</li></ul><p><strong><em>Cons</em></strong></p><ul><li>Less Learning curve.</li><li>Promotion comes with experience, but not perfomance.</li><li>Average pay</li></ul><p>Considering all the above scenarios, I recommend you to go for corporate companies for first few years to learn best coding standards, industry practices and have some well known company on your resume. Then you can choose startups or freelancing.</p><p>*** In corporate companies, it usually takes 2–4 years for going to next level unlike the startups which usually depends your performance and the time you joined startup.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=733dd6bd2920" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>