<?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 Jitendra Singhal on Medium]]></title>
        <description><![CDATA[Stories by Jitendra Singhal on Medium]]></description>
        <link>https://medium.com/@jiten.cs2010?source=rss-6bae8971e143------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Stories by Jitendra Singhal on Medium</title>
            <link>https://medium.com/@jiten.cs2010?source=rss-6bae8971e143------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 08 Apr 2026 13:19:51 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jiten.cs2010/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[ How I used IBM BOB Smartly Without Ever Running Out of BOB Coins]]></title>
            <link>https://medium.com/@jiten.cs2010/how-i-used-ibm-bob-smartly-without-ever-running-out-of-bob-coins-048b8b4bd219?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/048b8b4bd219</guid>
            <category><![CDATA[developer-partner]]></category>
            <category><![CDATA[ibm-bob]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[developer-assistant]]></category>
            <category><![CDATA[ideais]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Sun, 29 Mar 2026 16:11:37 GMT</pubDate>
            <atom:updated>2026-03-29T16:11:37.835Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/806/1*9bi0f3SYOaMnZEocrIEovQ.png" /></figure><p>After using IBM BOB IDE almost daily for the past 6 months, I noticed something surprising:</p><p>My team usually exhausted thier bobcoins, but I’ve never exhausted my Bob coins.</p><p>This isn’t because I use it less. In fact, I use it for coding, debugging, planning, and architecture and almost everything.</p><p>The real reason ? I learned how to use it efficiently.</p><p>This article breaks down the practical strategies that helped me maximize value without burning through tokens.</p><h3>⚠️ The Hidden Cost of “Context”</h3><p>One of BOB’s most powerful capabilities is its ability to understand your codebase by scanning context.</p><p>But here’s the catch:</p><p><em>The more files it reads → the more tokens it consumes → the more coins you spend.</em></p><p>Most developers unknowingly allow:</p><ul><li>Full repository scans</li><li>Test files</li><li>Build artifacts</li><li>Dependency folders</li></ul><p>This leads to:</p><ul><li>Slower responses</li><li>Noisy outputs</li><li>Rapid coin consumption</li></ul><h3>🔑 Real hidden techniques = “.bobignore”</h3><p>BOB provides a simple yet <strong>powerful mechanism </strong>to control this:</p><h3>👉 .bobignore</h3><p>📘 Official guide: <a href="https://bob.ibm.com/docs/ide/configuration/bobignore">https://bob.ibm.com/docs/ide/configuration/bobignore</a></p><p>Just like .gitignore, this file tells BOB: <em>“Ignore these files while building context.”</em></p><h3>💡 What I exclude in most projects:</h3><pre>node_modules/<br>coverage/<br>dist/<br>build/<br>public/<br>*.test.*<br>*.spec.*<br>*.env.*</pre><h3>✅ Immediate impact:</h3><ul><li>Reduced context size</li><li>Faster processing</li><li>More relevant responses</li><li>Significant coin savings</li></ul><h3>⚡ Real-World Impact</h3><p>Before using .bobignore:</p><ul><li>BOB scanned everything</li><li>Included unnecessary files</li><li>Consumed more tokens</li></ul><p>After implementing it:</p><ul><li>Only core business logic is analyzed</li><li>Responses became sharper</li><li>Coin usage dropped dramatically</li></ul><h3>🧠 Smart Ways to Save BOB Coins</h3><p>Here are additional strategies that made a big difference:</p><h4>1. 🎯 Use the Right “Mode” for the Task</h4><p>Heavy modes like planning or deep analysis consume more tokens.</p><p>👉 Use them only when necessary.</p><h4>2. ✂️ Ask Focused Questions</h4><p>❌ “Explain my entire codebase”</p><p>✅ “Explain the flow of this service method”</p><p>Smaller scope = better answers + lower cost</p><h4>3. 🧩 Break Problems into Steps</h4><p>Instead of one large prompt:</p><ul><li>Ask step-by-step</li><li>Build understanding incrementally</li></ul><p>This improves both: Accuracy, Efficiency</p><h4>4. 🔁 Leverage Conversation Context</h4><p>BOB already remembers previous interactions.</p><p>👉 Avoid repeating:</p><ul><li>Code snippets</li><li>Context explanations</li></ul><p>This reduces redundant token usage.</p><h4>5. 🔍 Be Intentional with File Access</h4><p>Every file BOB reads contributes to token consumption.</p><p>👉 Only allow access to what’s truly needed.</p><h3>🚀 Advanced Tip: Create Custom Modes</h3><p>If you frequently perform similar tasks, create reusable prompt templates:</p><ul><li>Debugging Mode</li><li>Refactoring Mode</li><li>Documentation Mode</li><li>Github/Jira Mode</li><li>Code Review Mode</li></ul><p>This avoids:</p><ul><li>Rewriting long prompts</li><li>Wasting tokens on repeated instructions</li></ul><h3>🧭 Final Thoughts</h3><p>Most developers think: <em>“I need more coins.”</em></p><p>But the reality is: <em>You need better context control and prompt discipline.</em></p><p>When used smartly, even the default credits are more than enough for daily development.</p><h3>🔗 Useful Links</h3><ul><li>📘 .bobignore Guide: <a href="https://bob.ibm.com/docs/ide/configuration/bobignore">https://bob.ibm.com/docs/ide/configuration/bobignore</a></li><li>⬇️ Download BOB IDE: <a href="https://bob.ibm.com/download?bob=ide">https://bob.ibm.com/download?bob=ide</a></li></ul><h3>💬 What About You?</h3><p>Have you tried optimizing AI tool usage like this? Or are you still letting it scan everything?</p><p>Let’s discuss 👇</p><p>#IBMBOB #AIForDevelopers #DeveloperProductivity #GenAI #SoftwareEngineering #DevTools #AIIDE #EngineeringLeadership</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=048b8b4bd219" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unit testing — what, why and how]]></title>
            <link>https://medium.com/@jiten.cs2010/unit-testing-what-why-and-how-3af1e0e4c95d?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/3af1e0e4c95d</guid>
            <category><![CDATA[tdd]]></category>
            <category><![CDATA[software-testing-strategy]]></category>
            <category><![CDATA[unit-testing]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Mon, 22 Dec 2025 12:23:06 GMT</pubDate>
            <atom:updated>2025-12-22T12:23:06.345Z</atom:updated>
            <content:encoded><![CDATA[<h3>Unit testing — what, why and how</h3><p>Testing is essential if you want to keep a codebase maintainable, improve release planning, and maintain a sane workflow.</p><p>If you don’t have a testing strategy in place before implementing features or building capabilities, your team will face immense stress during every release cycle. More importantly, the end-user experience can be a disaster.</p><p>As a development lead, I always advocate for a <strong>TDD (Test-Driven Development)</strong> approach. Having seen projects both with and without testing strategies, the difference is clear: without one, teams struggle to deliver features quickly and confidently.</p><p>In reality, quality is hard to maintain unless leadership understands the long-term impact of technical debt. We plan development work years, months, and sprints in advance, yet many people still overlook the testing strategy.</p><p>Trust me: without a testing and release strategy, your project isn’t a professional product — it’s just a POC or a never-ending hackathon.</p><h4>Different kind of testing</h4><p>There are different types of testing you can implement, and the right mix varies from case to case. The three most common are Unit, Integration, and Functional testing.</p><ol><li><strong>Unit Testing</strong></li></ol><p>Unit testing is about testing your code in its smallest parts. It is <strong>deterministic</strong>, meaning that for a specific input, it should always return the same result.</p><ul><li><strong>Scope:</strong> It focuses on logic. However, not everything can (or should) be unit tested — for example, private methods are typically internal implementation details, and certain framework lifecycle events can be difficult to isolate.</li><li><strong>External Dependencies:</strong> If your method relies on third-party dependencies like RESTful APIs or databases, you must use <strong>mocks or stubs</strong>. This ensures you are testing your logic, not the reliability of the internet or an external server.</li></ul><p><strong>2. Integration Testing</strong></p><p>While unit tests look at the parts, Integration testing verifies that different modules, services, or units function correctly as a group. It specifically focuses on <strong>interactions and data flow</strong>.</p><ul><li><strong>The “Bridge”:</strong> Integration testing sits between unit and functional testing, ensuring the “bridges” between individual parts of your system are reliable and that data is passed correctly between them.</li></ul><p><strong>3. Functional Testing</strong></p><p>Functional testing is a broad category that describes <strong>what</strong> the software does rather than how it’s built. It verifies that each function operates according to pre-defined requirements or specifications.</p><ul><li><strong>User-Centric:</strong> This can range from checking a single button’s behavior to validating a complete user journey. It asks the question: <em>“Does this feature actually do what the business requirements asked for?”</em></li></ul><h4>Pyramid of testing</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/788/1*1dbnVRYu7yhjSsLQfHwqvw.png" /><figcaption>unit tests are cheaper and faster, then integration tests and then E2E tests which are slow and expensive</figcaption></figure><h4>AAA patterns</h4><p>To write consistent and readable unit tests, the developer community widely uses the <strong>AAA (Arrange, Act, Assert)</strong> pattern. This framework provides a clear structure for every test you write.</p><ul><li><strong>Arrange:</strong> This is the setup phase. Here, you define the prerequisites, initialise your objects, and prepare the input data required for the test.</li><li><strong>Act:</strong> This is the execution phase. You call the specific function or method that you want to test.</li><li><strong>Assert:</strong> This is the verification phase. You check the outcome against your expectations.</li></ul><p><strong>Assertions are the most critical part of the process; they define the quality and reliability of your tests.</strong> A test without a strong assertion is just code running without a purpose.</p><h4>What makes a test “good”?</h4><ul><li>Name or title of tests should be <strong>self describing</strong>.</li><li><strong>Fast and quick:</strong> They should run quickly.</li><li><strong>Independent :</strong> tests shouldn’t depend on each other.</li><li><strong>Repeatable:</strong> Running it everytime should return the same result.</li><li>write more and <strong>significant asserts</strong></li></ul><h4>Tools</h4><p>The developer community has built an incredible ecosystem of tools to support testing. Whether you need an assertion library, a mocking framework, or a test runner with beautiful reporting, there is a solution available for every major language and framework.</p><p>For <strong>JavaScript </strong>like Jest, Mocha, chai, Jasmine, React-testing-libary etc.</p><p>For <strong>Java </strong>JUnit, TestNG, Mockito etc.</p><h4>Conclusion</h4><p>When we plan for development, we must plan for testing. Choosing “fast development” while skipping a testing strategy is a short-term approach that creates an illusion of progress. In reality, it builds a fragile foundation that will eventually slow you down or break under pressure.</p><p>To build a robust product and take your engineering to the next level, a testing strategy is not a “nice-to-have” — it is a must. It is the difference between a project that survives the first release and a product that thrives for years.</p><p><strong>Stop participating in a “long-term hackathon.” Start building with confidence.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3af1e0e4c95d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Basic Understanding of ANTLR]]></title>
            <link>https://medium.com/@jiten.cs2010/basic-understanding-of-antlr-f9d441a1a522?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/f9d441a1a522</guid>
            <category><![CDATA[programming-grammar]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[language-parsing]]></category>
            <category><![CDATA[antlr4]]></category>
            <category><![CDATA[basics-of-programming]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Mon, 03 Nov 2025 18:21:27 GMT</pubDate>
            <atom:updated>2025-11-03T18:21:27.571Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/241/1*R4EauWPgdtVwp6Lr3mCqvA.png" /><figcaption>ANTLR</figcaption></figure><p>ANTLR stands for “ANother Tool for Language Recognition”</p><p>There are multiple language recognition tools available they are also parser generator.</p><p>So either we can write our parser with lexer with visitors and listeners functions for transformation and then create a AST (abstract syntax tree)</p><p>OR</p><p>We can use ANTLR like PARSER generation tools by just providing on grammar files, rest things will be taken care by tools.</p><p>To describe it again — In ANTLR, we just need to write a grammar files(.g4), rest parser generation programs (like components, different kind of files, classes, functions) will be generated by ANTLR.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/616/1*AAg2fP1AUHUPcuT0Xw61hA.png" /><figcaption>Required for ANTLR based PARSER</figcaption></figure><p>ANTLR is a JAVA tool, we just need to include ANTLR JAR in our code. Once we have grammar files (.g4) then run a simple commands java commands to generate parser code.</p><p>Let’s talk about terminologies —</p><p><strong>Parser generators</strong> — Here ANTLR is parser generator which creates parser program for us by just providing grammar files.</p><p><strong>Grammar files (.g4)</strong> — there two files ANTLR expects us to provide as input, one is for lexers or tokeniser for lexical analysis, and second one is for Parser to analyse syntactical rules, specifying how tokens combine to form valid sentences or expressions. Both files are called grammar files and their extension is “.g4”</p><p><strong>Lexer rules</strong> in an ANTLR grammar must start with an <strong><em>uppercase letter</em></strong> (e.g., INT : ‘0’..’9&#39;+ ;). And Lexer rules try to match the longest possible sequence of characters from the input. If multiple rules match the same length, the rule defined first in the grammar takes precedence.</p><p><strong>Parser rules</strong> must start with a <strong><em>lowercase letter</em></strong> (e.g., declaration : INT ID EQUALS NUMBER SEMI ;). And Parser rules are composed of other parser rules and/or lexer tokens.</p><p><strong>Parsing tree</strong> — this is also called <strong>abstract syntax tree (ast). </strong>this created when parser analyse the source code using <strong>Visitors</strong> and <strong>Listeners</strong>.</p><p><strong>Visitors</strong> — is controlled traversal in AST to process the parse tree.</p><p><strong>Listeners</strong> — similar to visitors but kind of interceptors based on event driven. Suitable for logging, transformation.</p><p>Now Let’s talk about <strong>flow</strong> — how ANTLR generates parser, and how parser generates AST. We can understand using following diagrams.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/438/1*pj3G2CHiqB9yjfw1Ot1fOA.png" /><figcaption>Detailed flow of parser generation and source code interpretation</figcaption></figure><ol><li>ANTLR build PARSER — which is available for lexical analysis and syntactical analysis of input source code</li><li>After this parser build an abstract syntax tree</li><li>while traversal on AST, visitors and listeners are used to process and transform</li><li>which helps to interpret source input.</li></ol><p>This blog is just an introduction to start with ANTLR or any parser generation tool. For detailed understanding of ANTLR, you can checkout following references.</p><p><strong>References —</strong></p><p><a href="https://www.antlr.org/">ANTLR</a></p><iframe src="https://drive.google.com/viewerng/viewer?url=https%3A//dl.icdst.org/pdfs/files3/a91ace57a8c4c8cdd9f1663e1051bf93.pdf&amp;embedded=true" width="600" height="780" frameborder="0" scrolling="no"><a href="https://medium.com/media/ab056fadfc600f648f8aa0cfae53fec7/href">https://medium.com/media/ab056fadfc600f648f8aa0cfae53fec7/href</a></iframe><ul><li><a href="https://github.com/antlr/antlr4">GitHub - antlr/antlr4: ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.</a></li><li><a href="https://pragprog.com/titles/tpantlr2/the-definitive-antlr-4-reference/">The Definitive ANTLR 4 Reference</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FOguy5UBvJ68%3Fstart%3D147%26feature%3Doembed%26start%3D147&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOguy5UBvJ68&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FOguy5UBvJ68%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/a9dc4ba7b1a5d0506aa128ac91edc3de/href">https://medium.com/media/a9dc4ba7b1a5d0506aa128ac91edc3de/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FyY-3whsTjKs%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DyY-3whsTjKs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FyY-3whsTjKs%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/5a5271a81863f6b85da8f9c6243fb59b/href">https://medium.com/media/5a5271a81863f6b85da8f9c6243fb59b/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f9d441a1a522" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Book highlights “Unbarbaad”]]></title>
            <link>https://medium.com/@jiten.cs2010/book-highlights-unbarbaad-7b4c881ae978?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/7b4c881ae978</guid>
            <category><![CDATA[careers]]></category>
            <category><![CDATA[student-life]]></category>
            <category><![CDATA[life-lessons]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Sun, 03 Aug 2025 18:06:55 GMT</pubDate>
            <atom:updated>2025-08-03T18:06:55.232Z</atom:updated>
            <content:encoded><![CDATA[<p>‘Unbardbaad’ — means that not get destroyed. In Book is around early college or competitive exams, but I believe anybody at any point of life can read this book, to rethink on mistakes.</p><p>Here are some highlights, I prepared for myself, but I believe these can be helpful for others. Lets start —</p><p>On writing Notes —” My <strong>ego </strong>was bigger than ranbir kapoor’s dating list.” Sometimes we don’t listen or respect people because of our ego. That is completely true. That point, we start geting destroyed ourselves. Whatever we achieve in our life, that could be just a small success. we can’t not greater than destiny.</p><p>Why Notes are important — Because they helps us in revision. Effective revision without good class notes is not possible. May be this advice is for college students, but as a life student, this practice of keeping your notes upto date, will be helpful to everyone.</p><p>Biggest reason for people to get fail in life, competition, office… is Overconfidence.</p><p>Human craves appreciation all the time. Everyone craves for appreciations.</p><p>Never ever cross the line, in overconfidence — on small success celebrations.</p><p>Life never fails to bless you with little sparks (inspirations, motivations).</p><p>When you work hard, you put yourself at the pinnacle and the rest of the world seems naive. &lt;— mistake we do mostly.</p><p>Your thoughts and opinions feels superior and you fail to acknowledge a simple thing, you fail to take in suggestions, and feedbacks. Think like whatever you are thinking, could be wrong.</p><p>Sometimes it becomes some kind of show off for us — showing people I study a lot, I work a lot, I do a lot…. Solving/reading a ton of books always saying NO to fun. And this cost us effectiveness or may be health too.</p><p><strong>Being Donkey — is very common problem in India</strong>. Doing what we like to do only. Not getting focus on our shortcomings, weaknesses. For example — solving problems which we are already good, and ignoring problems which scare us.</p><p><strong>Half knowledge is devastating.</strong></p><p>Small insignificant things creates the biggest differences (Kaizen). They can transform a average person to highly visible person. For example working on each problem(DSA, or PCM problems for IITs) until you became proficient in them.</p><p>Another Example — pushups before going for bath — can make your hand’s muscles better than 90% of world.</p><p>Another example — making notes, listening with full focus, revising notes, analysis mock papers etc, etc.</p><p>Another example — working one at time, one by one, on your weaknesses like verbal and non-verbal communications, your behaviours with others, handle problems smoothly, Be silent observer, health habits going on walk, start running, reading, listening, writing, emotional intelligence, solving sudoku, or playing chess, grow your network etc.</p><p>Perspective changes on each and every activity — trust me, all this make you package. <strong>People like package when you will be compared with others, better package’s one will be selected. </strong>For example — when a girl look into you as future husband. Another example — when an employer look your profile.</p><p>Like a masterpiece, great things take time to come in life.</p><blockquote>Dheere dheere re mana,</blockquote><blockquote>dheere sab kuch hoye.</blockquote><blockquote>Mali seeche sau ghada,</blockquote><blockquote>ritu aaye fal hoye.</blockquote><p>With persistence and patience, even the most challenging things becomes effortless and success comes easy. This is called <strong>Consistency.</strong></p><blockquote>Consistency is harder when no one is clapping for you — Luis Garcia.</blockquote><p>One single addiction can cost us thousand dollars and our physical and mental health.</p><p>Any <strong>vicious cycle</strong>, you will be crushed by competition next day. now what is vicious cycle — “A vicious cycle is a situation where one problem leads to another, creating a chain of events that makes the original issue worse.”</p><p>For example — you start watching a movie, your backlog of todo will grow like anything. you delve yourself in movie or web series or insta reels, you won’t be able to come back.</p><p><strong>Distractions</strong> — could be toxic relationship, watching porn , social media like instagram, youtube, smoking/drinking etc. These distractions will act as a <strong>source of leakage</strong>, we can call them “Open Window”. In the beginning , they weigh nothing but after some days, they will leak your energy and time, you will be left with less mind space, less energy and time. we don’t like when somebody tax on our earning, so these distractions will be like tax on everything.</p><p>So good thing on these distraction is they could be in our control. We need to work on <strong>MINDSET, TARGET, PRIORITY, and PLANNING.</strong></p><p>If you raise a question, people bless you, because everyone has question, but few of them have courage.</p><p>Dost ache toh banao hi par jiske dost ho uske ache dost bano bhi — Bassi.</p><ul><li><strong>for Some time, be caveman.</strong></li><li><strong>Work on your distractions like mobile notifications, shopping.</strong></li><li><strong>Sometime give time to yourself — rest karo, maje karo, chill karo.</strong></li></ul><blockquote>Replacing old habits, takes time and efforts.</blockquote><blockquote>Our parents have the biggest goldmine — a wealth of experience.</blockquote><blockquote>Never revise for your mock / practice tests/interview.</blockquote><p>Tests/ Exams/ Interviews —</p><ul><li>Read / Listen the instructions carefully.</li><li>attempt the question paper in 3 rounds. 1st → go for easy questions, 2nd → solve questions higher in toughness and 3rd → all remaining questions (toughest, simple but calculative, short but tricky).</li></ul><blockquote>Karma will eventually catch up with you.</blockquote><h4>One of toxic habit — Indians have is — eating heavy meals.</h4><h4>Another one problem is this kind of thought— “every activities other than study — is a waste of time.”</h4><h4>Atleast 30 min, we should give everyday to one of activities like Table tenis or any sports, creative activities like arts, singing and playing music etc.</h4><blockquote>Different focus techniques — Pomodoro, Eat the frog, The Eisenhower Matrix etc.</blockquote><blockquote>If you want to be like a person, then shoot a compliments to them.</blockquote><blockquote>Self-doubt, stress, anxiety and pressure — Sit straight, drink water, talk to your friends, or parents.</blockquote><blockquote><strong>To Start any new habit </strong>— generally it takes 21 days to 42 days. Don’t start with complex or harder way in beginning. Slowly increase the complexity and make it harder day by day. But make sure you are enjoying it.</blockquote><p>Most People gives up on 2nd day — so if you reach to 2nd day you are ahead of many people. Trick is simple — Start with simple task — once it becomes easy then go for next difficultly level.</p><p>Instead of time table, make task list. Use “<em>The Eisenhower Matrix” </em>technique.</p><p>Overall this is very basic book, but if you read this book at any point of life, it will remind you what mistakes you did or doing right now.</p><p>I always believe simple books are more impactful than lengthy tough language books.</p><p>Thanks to Author — Shobhit nirwan.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7b4c881ae978" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React JS development Optimisation]]></title>
            <link>https://medium.com/@jiten.cs2010/react-js-development-optimisation-babcb83f32b3?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/babcb83f32b3</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[react-performance]]></category>
            <category><![CDATA[reactjs]]></category>
            <category><![CDATA[performance]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Mon, 09 Jun 2025 18:05:07 GMT</pubDate>
            <atom:updated>2025-06-09T18:05:07.482Z</atom:updated>
            <content:encoded><![CDATA[<p>I have huge experience on FrontEnd development with reactJS development. Few of my observations and notes, sharing to community to refer quickly at one place.</p><ul><li>Keys in list rendering, do not generate keys on the fly, e.g. with key={Math.random()}, or use Array’s default index. Instead use something dynamic like timestamp or <a href="https://www.npmjs.com/package/uuidv4">uuid</a>.</li><li>Put things in <a href="https://react.dev/reference/react/StrictMode">strictMode</a> —as this is development only behavior. No impact on production. If component are impure, then this helps to identify the wrong things.</li><li>Pure functions / components — same input same output. ReactJs asks developers to make functions and components as pure.</li><li>But Remember everything can’t be pure, do not stress to make things pure perfectly. Only component, initialiser, and updater functions need to be pure.</li><li>Event handlers don’t need to be pure, so React will never call your event handlers twice. Effects can’t be pure.</li><li>Immutability — React there are three kinds of inputs that you can read while rendering: <a href="https://react.dev/learn/passing-props-to-a-component">props</a>, <a href="https://react.dev/learn/state-a-components-memory">state</a>, and <a href="https://react.dev/learn/passing-data-deeply-with-context">context.</a> You should always treat these inputs as read-only.</li><li>We can improve performance by <a href="https://react.dev/reference/react/memo">skipping rendering</a> components whose inputs have not changed.</li><li>start reading about usecases of — <a href="https://react.dev/reference/react/useMemo">useMemo</a> and <a href="https://react.dev/reference/react/useCallback">useCallback</a></li><li><strong>Passing JSX as children — </strong>When a component visually wraps other components, let it <a href="https://react.dev/learn/passing-props-to-a-component#passing-jsx-as-children">accept JSX as children.</a> This way, when the wrapper component updates its own state, React knows that its children don’t need to re-render.</li><li>Keep your <a href="https://react.dev/learn/keeping-components-pure">rendering logic pure.</a></li><li>Do not use flushSync() to force update on DOM unnecessarily. There could be change in design.</li><li>Avoid <a href="https://react.dev/learn/you-might-not-need-an-effect">unnecessary Effects that update state.</a> Most performance problems in React apps are caused by chains of updates originating from Effects that cause your components to render over and over.</li><li>Try to <a href="https://react.dev/learn/removing-effect-dependencies">remove unnecessary dependencies from your Effects.</a> For example, instead of memoization, it’s often simpler to move some object or a function inside an Effect or outside the component.</li><li>Prefer functional components over class components</li><li><strong>Single Responsibility Principle (S of SOLID)</strong></li><li>When multiple components need to share state, lift the state up to the nearest common ancestor.</li><li>For global state management, consider using the Context API to avoid prop drilling. For more complex state management, libraries like Redux or MobX can be beneficial.</li><li>For smaller applications, we don’t need to redux or any state management library. Sometimes <a href="https://react.dev/reference/react/useState">useState</a> or <a href="https://react.dev/reference/react/useReducer">useReducer</a> or <a href="https://react.dev/reference/react/useContext">useContext</a> is good enough to handle states of application. Don’t follow trends, think twice before using Redux in your project, every solution comes with a cost of managing its complexity.</li><li><a href="https://react.dev/learn/build-a-react-app-from-scratch#code-splitting"><strong>Code Splitting</strong></a>: Implement code splitting using dynamic imports and React’s <a href="https://react.dev/reference/react/Suspense"><strong>Suspense</strong></a> to load components only when needed, improving initial load time.</li></ul><p>I know, list is not completed, there will be many other observations which also need to take care while working on react, please add in comments if you have any other observations.</p><p>Happy Learning.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=babcb83f32b3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ReactJS App to debug at chrome or VSCode]]></title>
            <link>https://medium.com/@jiten.cs2010/reactjs-app-to-debug-at-chrome-or-vscode-206e57efd4dd?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/206e57efd4dd</guid>
            <category><![CDATA[debugging-javascript]]></category>
            <category><![CDATA[google-chrome-developers]]></category>
            <category><![CDATA[vscode-debug]]></category>
            <category><![CDATA[debugging-react]]></category>
            <category><![CDATA[debugging-tools]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Sat, 17 May 2025 16:30:26 GMT</pubDate>
            <atom:updated>2025-05-17T16:30:26.917Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/335/1*Kk_fT1R04vvnUWC0wZUFkQ.png" /></figure><p>Debugging is important and critical skill to develop any application. If developer does not know about debugging, then productivity will be low, very low. Even he won’t be able to deliver anything properly.</p><h3>Debugging in VSCode</h3><p>How to start — let’s say you have started your react application on localhost:3000 port, as shown in below screenshot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*zWU-QCaUfHH7kRCRUaLrHg.png" /><figcaption>Command to start react application — considering you are using “react-scripts”</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/553/1*Uk7G2p0vaZym1yDDg4z2bA.png" /><figcaption>After start of react application in vscode terminal</figcaption></figure><p>Now Go to “Run and Debug” and click on “create a launch.json” label</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/367/1*UcezaCn2xpvtOUQioPOg-Q.png" /></figure><p>Then new popup will be opened at top center of VSCode like this —</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/605/1*Y3wVQseEUqluDmtdiw3AsA.png" /></figure><p>Select “Web App (Chrome)” option</p><p>one file will be opened with name of “launch.json”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/690/1*ojCE2_XsDp7ykDU2X4sLaQ.png" /></figure><p>In this file you just need to update your url port — 3000 (as my react app is running on 3000, update according to your configuration of react app).</p><p>After this just click on “Start Debugging” icon, as shown in below screenshot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C9kg4ks9uvpY6UIAkHmhbA.png" /></figure><p>After this, new chrome will be opened and you just need to put a debugger break point.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NSqXQdlceItSJLaZIPXj_w.png" /></figure><p>Like this setting — you can debug your react application in VSCode itself.</p><h3>Debugging in Chrome</h3><ol><li>Open developer tool in chrome,</li><li>find your code file in source tab.</li><li>Then add break point in function or file.</li></ol><p>See below screenshot — that is pretty simple then VSCode debugging.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0-RLckIT1t0rTAkg2_ys9A.png" /></figure><p>Sometimes people. find it difficult to debugging in VSCode because of minor configuration.</p><p>Debugging in VSCode also possible for Java, Python, NodeJS etc. Even we can debug both Frontend and backend code together by attaching. May be I will create a new blog for same.</p><h3>Advance Debugging</h3><p>Advance Debugging If you want to debug more deeper way, then I would suggest Chrome extension <a href="http://react.dev/learn/react-developer-tools">React Developer Tool</a>. This extension allows to inspect React <a href="https://react.dev/learn/your-first-component">components</a>, edit <a href="https://react.dev/learn/passing-props-to-a-component">props</a> and <a href="https://react.dev/learn/state-a-components-memory">state</a>, and identify performance problems.</p><p>This is advance when developer become proficient in reactJS, but good to <a href="http://react.dev/learn/react-developer-tools">read</a>, have a exposure of advance react debugging.</p><p>Hope this would help people, Happy learning!</p><p>References —</p><ul><li><a href="https://react.dev/learn/react-developer-tools">React Developer Tools - React</a></li><li><a href="https://code.visualstudio.com/docs/debugtest/debugging">Debug code with Visual Studio Code</a></li><li><a href="https://developer.chrome.com/docs/devtools/javascript">Debug JavaScript | Chrome DevTools | Chrome for Developers</a></li><li><a href="https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en&amp;pli=1">React Developer Tools - Chrome Web Store</a></li><li><a href="https://coderpad.io/blog/development/javascript-debugging-in-chrome/">A Beginner&#39;s Guide to JavaScript Debugging in Chrome - CoderPad</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=206e57efd4dd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OLLAMA at local machine]]></title>
            <link>https://medium.com/@jiten.cs2010/ollama-at-local-machine-9c602e34687f?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/9c602e34687f</guid>
            <category><![CDATA[genai]]></category>
            <category><![CDATA[open-source-llm]]></category>
            <category><![CDATA[ollama]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Sat, 03 May 2025 17:29:11 GMT</pubDate>
            <atom:updated>2025-05-03T17:29:11.533Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*1hiH09MKCXflTixA2bi6nA.png" /></figure><p>Ollama — large language models (LLMs), it is open source LLMs.</p><p>Ollama can run LLMs on local machine, good usage in those project who does not want to compromise on privacy and want to have good control on experiments. Means — Offline usage or experiment.</p><ol><li>To begin, let’s download from <a href="https://ollama.com/">official website</a>.</li><li>unzipped the downloaded file and Install locally.</li><li>use below command to check whether OLLAMA is installed or not, it is running or not</li></ol><pre>open http://localhost:11434</pre><p>Run below <a href="https://github.com/ollama/ollama?tab=readme-ov-file#quickstart">command</a> to start using particular model</p><pre>ollama run llama3.2</pre><p>We can pull any model from <a href="https://ollama.com/library">models library</a> using below command.</p><pre>ollama pull &lt;Model_name&gt;</pre><p>or you can directly run particular model using run command, Model will be pulled implicitly.</p><pre>ollama run &lt;Model_name&gt;</pre><h3>Time to demo -</h3><p>I asked temparature of bengaluru, but it could not tell, as it is not using internet, it is using its own past learning which comes with particular model (Here it is llama3.2).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lzRb0l-OvoucfeWlE7voSw.png" /></figure><ul><li>If Model is continue to print output for long time, you can use ctrl+C to stop answering for previous question</li><li>Use /bye to exit the REPL(terminal).</li><li>CLI Reference: Run ollama helpin the terminal.</li></ul><h3>What we can do locally -</h3><ul><li>Can run various open-source LLMs</li><li>Can Create your own web interface using REST-API.</li><li>Can build AI-powered tools</li><li>offline Development</li><li>Keep sensitive data and AI processing within their local environment.</li><li>Experience AI Without Relying on the Cloud</li><li>No Usage Limits</li><li><strong>lowers the barrier to entry for interacting with and understanding large language models</strong></li></ul><h3>In the end -</h3><p>AI is going to change the world, it is revolutionary.</p><p>It is a necessity to learn it, to understand its capabilities.</p><p>Job trends are getting changed, budgets are getting cut, leaders are pressurised — in the end, it will be propagated to bottom of hierarchy.</p><p>Be ready for change yourself, because CHANGE is the only thing which is constant.</p><h4>you can checkout more information about Ollama LLM</h4><ul><li><em>Website: </em><a href="https://ollama.com/"><em>https://ollama.com/</em></a></li><li><em>Find more models: </em><a href="https://ollama.com/library"><em>https://ollama.com/library</em></a></li><li><em>GitHub: </em><a href="https://github.com/ollama/ollama"><em>https://github.com/ollama/ollama</em></a></li><li><em>Docs: </em><a href="https://github.com/ollama/ollama/tree/main/docs"><em>https://github.com/ollama/ollama/tree/main/docs</em></a></li><li><em>API: </em><a href="https://github.com/ollama/ollama/blob/main/docs/api.md"><em>https://github.com/ollama/ollama/blob/main/docs/api.md</em></a></li><li><em>Python SDK: </em><a href="https://github.com/ollama/ollama-python"><em>https://github.com/ollama/ollama-python</em></a></li><li><em>JS SDK: </em><a href="https://github.com/ollama/ollama-js"><em>https://github.com/ollama/ollama-js</em></a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9c602e34687f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rest, Relax and growth — everything is possible together.]]></title>
            <link>https://medium.com/@jiten.cs2010/rest-relax-and-growth-everything-is-possible-together-77b24283a8a5?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/77b24283a8a5</guid>
            <category><![CDATA[work-life-balance]]></category>
            <category><![CDATA[health]]></category>
            <category><![CDATA[chrome-extension]]></category>
            <category><![CDATA[productivity-apps]]></category>
            <category><![CDATA[time-management]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Sat, 10 Aug 2024 17:16:41 GMT</pubDate>
            <atom:updated>2024-08-10T19:03:16.641Z</atom:updated>
            <content:encoded><![CDATA[<h3>Relax, Rest and growth — Possible Together!!</h3><p>“Time management is crucial for work-life balance, everyone must understand this and use it wisely” — Anonymous.</p><p>We all want to be more productive, right? But it’s hard to focus for long periods. I used to find myself working for hours without realizing how much time had passed. This led to feeling stiff and tired, which isn’t good for my body or mind.</p><p>I learned that taking short breaks can actually help you work better. It’s like giving your brain a rest so it can come back refreshed. There’s a technique called the <strong>Pomodoro</strong> Technique where you work for 25 minutes straight, then take a 5-minute break. You can repeat this a few times.</p><p>To help me stick to this, I looked for a tool to block distractions like websites and notifications. I found a Chrome extension called <a href="https://chromewebstore.google.com/detail/ifdepgnnjpnbkcgempionjablajancjc"><strong>FocusGuard </strong>— Block Websites and Focus Mode</a> that’s really helpful. It lets me set timers for work sessions and blocks websites that might tempt me to waste time.</p><figure><img alt="extension main view" src="https://cdn-images-1.medium.com/max/694/1*v9DUZAIgG3K2kuwEqEoOnA.png" /><figcaption>FocusGaurd extension main view</figcaption></figure><p>I’ve noticed a big difference in my focus and energy since using this method. It’s like hitting the reset button on my brain every 25 minutes.</p><p>Have you tried anything similar to improve your productivity? I’d love to hear about it!</p><p>Thanks for reading.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=77b24283a8a5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Prevent Re-rendering of component unless its output does not change]]></title>
            <link>https://medium.com/@jiten.cs2010/prevent-re-rendering-of-component-unless-its-output-does-not-change-bbae3a26089a?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/bbae3a26089a</guid>
            <category><![CDATA[reactjs]]></category>
            <category><![CDATA[react-optimization]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[react-hook]]></category>
            <category><![CDATA[react-performance]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Fri, 09 Feb 2024 17:24:25 GMT</pubDate>
            <atom:updated>2024-02-09T17:24:25.882Z</atom:updated>
            <content:encoded><![CDATA[<p>Recently I see an issue of re-rendering of child component though it’s output does not get changed, the only reason is of re-rendering of component is just because of its prop is changing, which is a clear case of optimisation in app. Let me show with small example.</p><pre>const InitialCounter = ({ counter }) =&gt; {<br>  console.log(&quot;initialCounter Component - &quot;, counter);<br>  return (<br>    &lt;h4&gt;<br>      initialCounter : {counter &gt;= 0 &amp;&amp; counter &lt;= 5 &amp;&amp; &quot;Red&quot;}<br>      {counter &gt; 5 &amp;&amp; counter &lt;= 10 &amp;&amp; &quot;Green&quot;}<br>      {counter &gt; 10 &amp;&amp; &lt;&gt;Blue&lt;/&gt;}<br>    &lt;/h4&gt;<br>  );<br>};<br>export default function App() {<br>  const [counter, setCounter] = useState(0);<br>  return (<br>    &lt;div&gt;<br>      &lt;h1&gt;value of Counter {counter}&lt;/h1&gt;<br>      &lt;InitialCounter counter={counter} /&gt;<br>      &lt;button onClick={() =&gt; setCounter(counter + 1)}&gt;Increment by 1&lt;/button&gt;<br>      &lt;button onClick={() =&gt; setCounter(counter - 1)}&gt;Decrement by 1&lt;/button&gt;<br>    &lt;/div&gt;<br>  );<br>}</pre><p>In this example, initialCounter component has a prop “counter” which is getting changed from parent component on click of buttons, which re-renders child component though child component output does not change on every click of button.</p><p>Here is output of above code snippet.</p><figure><img alt="child component value “Red” will not change on increment of counter value from 0 to 5." src="https://cdn-images-1.medium.com/max/640/1*uQaoU8nu6hmefDZVTEciAA.png" /><figcaption>child component value “Red” will not change on increment of counter value from 0 to 5.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WyQqxUff9l6feg3NxAjJzA.png" /><figcaption>On click of increment by 1 button — shows that initialCounter component is getting re-rendered.</figcaption></figure><p>Here we can optimise this component by preventing re-rendering by using <a href="https://react.dev/reference/react/memo">memo</a> function and <a href="https://react.dev/reference/react/useMemo">useMemo</a> hook provided by react. Here is the solution-</p><pre>const OptimizedCounter = memo(({ colorValue }) =&gt; {<br>  console.log(&quot;optimizedCounter Component &quot;, colorValue);<br>  return &lt;h4&gt;OptimizedCounter : {colorValue}&lt;/h4&gt;;<br>});<br><br>export default function App() {<br>  const [counter, setCounter] = useState(0);<br><br>  const colorValue = useMemo(() =&gt; {<br>    if (counter &gt;= 0 &amp;&amp; counter &lt;= 5) return &quot;Red&quot;;<br>    else if (counter &gt; 5 &amp;&amp; counter &lt;= 10) return &quot;Green&quot;;<br>    return &quot;Blue&quot;;<br>  }, [counter]);<br><br>  return (<br>    &lt;div&gt;<br>      &lt;h1&gt;value of Counter {counter}&lt;/h1&gt;<br>      &lt;OptimizedCounter colorValue={colorValue} /&gt;<br>      &lt;button onClick={() =&gt; setCounter(counter + 1)}&gt;Increment by 1&lt;/button&gt;<br>      &lt;button onClick={() =&gt; setCounter(counter - 1)}&gt;Decrement by 1&lt;/button&gt;<br>    &lt;/div&gt;<br>  );<br>}</pre><p>In above solution, <a href="https://react.dev/reference/react/memo">memo</a> function prevents re-rendering when its props does not change, it memoized the component. And <a href="https://react.dev/reference/react/useMemo">useMemo</a> hook helps to run its function on change of counter value in parent component and memoized the return value which does not change every time based on dependency array items.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0FroHEyOybUclM-wlKjddA.png" /><figcaption>re-rendering happened only two times on change of colorValue, not on every change of counter value.</figcaption></figure><p>Here is the output of browser console.</p><p>So Both <a href="https://react.dev/reference/react/useMemo">useMemo</a> to memoized the colorValue and <a href="https://react.dev/reference/react/memo">memo</a> function to memoized child component, here to solve this problem.</p><p>This is kind of unique problem with simple example. But when component is quite large, then it is quite hard to identify such optimisation opportunity . That’s why it is recommended to make your component as small as possible like unit functionality or smallest UI.</p><p>There could be more solution for this problem, suggestions are welcome.</p><p>Happy Learning.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bbae3a26089a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Accessibility Testing]]></title>
            <link>https://medium.com/@jiten.cs2010/accessibility-testing-c2b50927cb21?source=rss-6bae8971e143------2</link>
            <guid isPermaLink="false">https://medium.com/p/c2b50927cb21</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[accessibility-testing]]></category>
            <category><![CDATA[inclusive-design]]></category>
            <category><![CDATA[usability]]></category>
            <category><![CDATA[testing-tools]]></category>
            <dc:creator><![CDATA[Jitendra Singhal]]></dc:creator>
            <pubDate>Wed, 17 Jan 2024 16:53:37 GMT</pubDate>
            <atom:updated>2024-01-17T16:53:37.128Z</atom:updated>
            <content:encoded><![CDATA[<p>Accessibility is something which usually not focused when we start talking about product and solution. If we are a developer or a product owner or any role carrying in software development, we must have a checklist which must include accessibility as important aspect of development.</p><blockquote><a href="https://www.w3.org/WAI/fundamentals/accessibility-usability-inclusion/"><strong><em>Accessibility</em></strong><em>, </em><strong><em>usability</em></strong><em>, and </em><strong><em>inclusion</em></strong> are closely related aspects in creating a web that works for everyone. Their goals, approaches, and guidelines overlap significantly. It is most effective to address them together when designing and developing websites and applications.</a></blockquote><p>Accessibility verification of any web application, requires following three different methods —</p><ol><li>Test with automated tools</li><li>Test with manual inspections</li><li>Test with a screen readers</li></ol><p><strong>Test with Automated Tools</strong> is a method to automate accessibility testing. There are multiple third party libraries available which support to automate web accessibility. These libraries provide <strong>browser extensions</strong> and integration testing modules(e.g. Jest, karma, Node, Cypress). This is the most efficient way to find accessibility issues in your application.</p><p>Some third party libraries are —<a href="https://www.npmjs.com/package/cypress-accessibility-checker"> Accessibility checker</a>, <a href="https://www.npmjs.com/package/cypress-axe">cypress-axe</a> etc. Initially we have used <a href="https://www.npmjs.com/package/cypress-accessibility-checker">Accessibility checker</a> but later we found <a href="https://www.npmjs.com/package/cypress-axe">cypress-axe</a> which was almost same but there was better community support for cypress-axe.</p><p><strong>Test with manual inspection</strong> is divided into multiple different steps. A visual checks then by pointer and keyboard checks. Then validate the resizing of content. Manual testing is completed by confirming the accessibility of interactions. These are the steps which can’t be automated as of now. In future we might have automated tools of some checks.</p><p><strong>Test with screen reader</strong> to confirm that the experience parallels the results from manual testing and is equivalent to the intended design.</p><p>A screen reader is assistive technology software used by people who are blind or visually impaired. It provides text and semantic information about interactive elements to enable the user to understand and interact with the operating system, applications, and Web content. The screen reader communicates the information to the user using text-to-speech. some of popular screen readers —</p><p><strong>Free:</strong></p><ul><li>NVDA</li><li>Windows Narrator</li><li>VoiceOver (macOS/iOS)</li><li>Orca (Linux)</li></ul><p><strong>Paid-for:</strong></p><ul><li>JAWS</li><li>Dolphin</li><li>Window-Eyes</li><li>System Access</li></ul><p>we used JAWS on windows based OS and Voiceover on Mac based OS.</p><p>Overall Accessibility is quite important as part of software development and it should get started while designing of application. A lot of tools, trainings and documentations are available in community, which can help to develop skills and mindset of accessibility, usability and inclusion.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c2b50927cb21" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>