<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6570091700813814076</id><updated>2026-05-25T17:04:55.082-07:00</updated><category term="bestpractice"/><category term="example"/><category term="java"/><category term="speaking"/><category term="architecture"/><category term="career"/><category term="AI"/><category term="books"/><category term="hibernate"/><category term="integrationtest"/><category term="programming"/><category term="tapestry"/><category term="technical debt"/><category term="eclipse"/><category term="interviews"/><category term="maven"/><category term="nosql"/><category term="presentations"/><category term="sonarqube"/><title type='text'>The Object Oriented Life</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.manupk.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-83872458917379721</id><published>2026-03-14T23:49:00.000-07:00</published><updated>2026-03-15T00:00:03.935-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><title type='text'>Coding Is Solved. Context Engineering Is Your New Job</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 id=&quot;coding-is-solved-context-engineering-is-your-new-job&quot; style=&quot;border-bottom: 1px solid rgb(216, 222, 228); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;span style=&quot;font-size: 16px; font-weight: normal;&quot;&gt;In this blog, I want to talk about something I have been experiencing first-hand over the last several months and hearing echoed in almost every conversation I have with developers, both inside and outside the company. AI can write code. That part is done. The question now is, what do we do about everything else?&lt;/span&gt;&lt;/h1&gt;&lt;h3 style=&quot;border-bottom: 1px solid rgb(216, 222, 228); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; padding-bottom: 0.3em; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Coding is solved&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;I use AI coding assistants every day. GitHub Copilot at work and Claude Code and other tools for personal projects - they all produce working code that I would have spent real time writing myself. And when I talk to other developers, the story is the same. The code that comes out is not perfect, but it is good enough that the bottleneck has clearly shifted. We are no longer waiting on the model to get better at writing functions. It is already there.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;But here is what I have also noticed. Writing code was never the hard part of delivery. It is maybe 25% of the work. The rest is understanding what to build, making architecture decisions, writing tests that actually cover the right things, deploying safely, keeping documentation alive. And in all of those areas, AI is mostly disconnected. Your architecture docs sit in Confluence getting stale while the model hallucinates a database schema that contradicts your actual system. This wouldn&#39;t be a surprise for those building software for long time, but somehow it is :).&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;So the question that I keep coming back to is not &quot;can AI code?&quot; but rather &quot;why does the same model give me brilliant output on one project and garbage on another?&quot; And the answer, every single time, comes down to one thing.&lt;/p&gt;&lt;h3 style=&quot;border-bottom: 1px solid rgb(216, 222, 228); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: left;&quot;&gt;Context Engineering is the real challenge&lt;/h3&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;I started noticing a pattern. When I give the model my architecture doc, my domain rules, my coding conventions — the output is almost ready to commit. When I give it nothing, it writes generic tutorial code that does not fit the project at all. Same model. Same settings. Completely different result. The only variable is the context I provide.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;This is what people are now calling Context Engineering. &lt;u&gt;It is the practice of structuring and curating the information you feed to an AI&lt;/u&gt; so that it produces output that actually fits your team&#39;s codebase, your domain, and your way of working.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;And here is the hard truth that I have learned from trying to shortcut this. No vendor does it for you. Your architecture is unique. Your domain knowledge is proprietary. Your coding standards are local decisions that your team made for specific reasons. Your workflow is not the same as any other team&#39;s workflow. I have tried using other people&#39;s instruction files and prompt setups. They do not help. Their context is not my context.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;This is also why the developer community is so split on AI right now. On one end you have the vibe coders who ship impressive demos that fall apart in production. On the other end you have skeptics who see AI-generated bugs and decide the whole thing is not worth the risk. I think both are wrong. The vibe coders lack discipline. The skeptics lack structure. The developers in the middle, the ones who apply AI with curated context and human review at every stage, those are the ones actually shipping faster without creating new problems.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;The other thing I have realised is that &lt;u&gt;Context Engineering is not a solo activity. It is a team-level investment.&lt;/u&gt; You need your architecture documented where the model can read it. You need your requirements kept current after every release. You need your domain knowledge written down, not locked in someone&#39;s head. You need your workflow defined so that everyone on the team uses AI the same way. When all four of those things are maintained, AI output aligns with your codebase. When any one of them goes stale, the output drifts back to generic territory. The model did not get worse. Your context did.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;There is also a practical sweet spot worth knowing about. From what I have calculated - a codebase in the range of 20k to 40k lines of code, with context docs totalling around 1k to 2k lines, fits comfortably within the context windows available today, which range from 1M to 4M tokens depending on the model. That means for a well-scoped project with good documentation, you can feed the model nearly everything it needs to understand your system in a single session. That is a significant advantage and one more reason to invest in keeping your context docs concise and current. Well, you can argue that this is not straightforward translation to LoC to tokens, you can use the Context Window UI in the new version of VS code to get a sense of how it working for your project.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;And the best part is that it compounds. Every feature you ship with structured context makes the next feature faster. The architecture doc gets richer. The domain rules get sharper. The prompts get tighter. It is compound interest for engineering velocity. But the inverse is also true. If you wait for a turnkey solution, you will still be waiting while other teams are two cycles ahead.&lt;/p&gt;&lt;h3 style=&quot;border-bottom: 1px solid rgb(216, 222, 228); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: left;&quot;&gt;Context Engineering across different system architectures&lt;/h3&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;One thing I have noticed is that Context Engineering does not look the same for every type of system. The architecture you are working with fundamentally changes what context you need to provide and how easy it is to manage.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;If you are working on a modular monolith with full stack code in a single repository, you are in the best position. The model can see your routes, your business logic, your templates, your database layer, all in one place. Context Engineering here is relatively straightforward. The main thing to be deliberate about is documenting the interfaces between your modules clearly. If you have stored procedures, for instance, write down how they connect to the application layer, what calls them, what data they expect, and what they return. The model will not infer those connections from code alone, especially when the logic crosses the boundary between your application and your database. But once those interfaces are documented, the model can reason about your entire system coherently because everything lives together.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Micro-services are a different story. When your system is spread across multiple repositories, each service only sees its own code. The model has no visibility into the services your code depends on or the services that depend on yours. This is where Context Engineering becomes critical and also harder. You need to provide clear documentation about inter-service connections: what APIs your service calls, what contracts it expects, what events it publishes or consumes, and how authentication flows between services. Without that, the model treats each service as if it exists in isolation and produces code that breaks at integration boundaries. I have also noticed that teams with very thin micro services, services that do almost nothing on their own, struggle more with AI-assisted development. The model has so little code to work with in each repo that it lacks the context to make meaningful contributions. There is a practical minimum size below which AI assistance loses its leverage.&lt;/p&gt;&lt;h2 id=&quot;three-ways-to-start-learning-and-applying-context-engineering&quot; style=&quot;border-bottom: 1px solid rgb(216, 222, 228); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;file:///c%3A/DATA/WORK/TECH/Code/RnD/home-sld-gen/blog-context-engineering.md#three-ways-to-start-learning-and-applying-context-engineering&quot; name=&quot;three-ways-to-start-learning-and-applying-context-engineering&quot; style=&quot;color: #0969da; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration-line: none;&quot; tabindex=&quot;-1&quot;&gt;&lt;span class=&quot;octicon octicon-link&quot; style=&quot;color: #1f2328; display: inline-block; fill: currentcolor; overflow: visible; vertical-align: middle; visibility: hidden;&quot;&gt;&lt;/span&gt;&lt;/a&gt;Three ways to start learning and applying Context Engineering&lt;/h2&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;So here are three things I would recommend, based on what has worked for me and the teams I have spoken with.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;First, write down what the model cannot find on its own. Every team has knowledge that lives in Slack threads, in senior engineers&#39; heads, in tribal lore that &quot;you just have to know.&quot; That is exactly the knowledge that makes AI output go from generic to useful. Start with an architecture doc, a domain doc, and a standards doc. Keep them in a docs folder in the repo. Keep them short. A page or two each is fine. And update them when they drift because stale context is worse than no context. It teaches the model the wrong patterns.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Second, build a repeatable workflow with human review gates. The failure mode of AI adoption is not that the model is bad. It is that nobody on the team agreed on how to use it. One developer prompts from scratch every time. Another copy-pastes from ChatGPT. A third refuses to use it at all. No consistency, no compounding. What has worked for me is a staged approach: generate a structured user story from context docs, review it, then run code and test generation in parallel from that approved story, review both, then generate automation tests, review those, and finally ship and update the context docs so the next feature benefits from everything you just learned. That last step, updating the docs after shipping, is the one everyone skips. It is also the one that makes the whole flywheel turn.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Third, treat your prompt templates like shared code. Stop writing prompts from scratch every time. Create reusable templates for the tasks you do repeatedly — story writing, code implementation, test generation, code review. Store them in the repo, version them, improve them when the output quality dips. When a new team member joins, they should not have to reinvent your prompts. They use the same templates, get the same quality, from day one. That is how you scale AI-assisted delivery beyond a few power users.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-MYtCNC-ryTmvrQjNADlpHQZE0UCDlbEey4NSTFW1Y7L-S9wPJF-3q7Q61TYhHXivk7auiKWpUhjQP61yK-oxXgqjRr-CXZch0gQUrKsVpCvIjnguhY0G1m-5Bc2V6jbbjw0OhaS2C-DVLSLD1QoOfCBEecviIO5kMtDbYmCbx7z4xG38d0Ah--h4c0Y&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;457&quot; data-original-width=&quot;843&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-MYtCNC-ryTmvrQjNADlpHQZE0UCDlbEey4NSTFW1Y7L-S9wPJF-3q7Q61TYhHXivk7auiKWpUhjQP61yK-oxXgqjRr-CXZch0gQUrKsVpCvIjnguhY0G1m-5Bc2V6jbbjw0OhaS2C-DVLSLD1QoOfCBEecviIO5kMtDbYmCbx7z4xG38d0Ah--h4c0Y=w640-h346&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;border-bottom: 1px solid rgb(216, 222, 228); color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: left;&quot;&gt;In conclusion&lt;/h3&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;Coding is solved. The teams still debating whether AI can write code are solving last year&#39;s problem. The real challenge, and the real opportunity, is Context Engineering: curating the architecture, domain, standards, and workflow knowledge that turns a generic model into something that actually fits your team.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;No one sells this off the shelf. No plugin auto-generates it. It is built by the team, for the team, one feature cycle at a time. And it compounds.&lt;/p&gt;&lt;p style=&quot;color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; margin-bottom: 16px; margin-top: 0px;&quot;&gt;I would strongly recommend starting this week. Write the docs, define the workflow, template the prompts. The teams that structure their AI use deliberately now will be unreachable in a year. The ones that wait will still be vibe coding demos.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/83872458917379721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2026/03/coding-is-solved-context-engineering-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/83872458917379721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/83872458917379721'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2026/03/coding-is-solved-context-engineering-is.html' title='Coding Is Solved. Context Engineering Is Your New Job'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEi-MYtCNC-ryTmvrQjNADlpHQZE0UCDlbEey4NSTFW1Y7L-S9wPJF-3q7Q61TYhHXivk7auiKWpUhjQP61yK-oxXgqjRr-CXZch0gQUrKsVpCvIjnguhY0G1m-5Bc2V6jbbjw0OhaS2C-DVLSLD1QoOfCBEecviIO5kMtDbYmCbx7z4xG38d0Ah--h4c0Y=s72-w640-h346-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6490944023067228828</id><published>2026-01-14T02:07:00.000-08:00</published><updated>2026-01-14T02:07:26.846-08:00</updated><title type='text'>Lessons Learned : Setting up an MCP registry for Github Copilot to enable enterprise governance</title><content type='html'>&lt;span style=&quot;font-family: verdana;&quot;&gt;While GitHub Copilot significantly boosts developer productivity, its ability to integrate with external tools through the Model Context Protocol (MCP) necessitates a robust governance framework to prevent unvetted data access. As per the &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry&quot;&gt;official documentation&lt;/a&gt;, an internal MCP registry that acts as a centralized gateway, replacing fragmented local configurations with a single source of truth for approved servers. This allows us to curate a catalog of vetted tools, ensuring the security standards across the organization.&lt;br /&gt;&lt;br /&gt;We selected the Playwright MCP server as our flagship test case because it addressed a critical gap in our toolchain and was the most requested integration among our engineering teams. From a developer experience standpoint, this setup allows engineers to author, execute, and troubleshoot end-to-end tests directly within the GitHub Copilot chat, effectively transforming the IDE into a live automation environment. By allowing the AI to interact with a real browser instance through the governed registry, we have significantly minimized context-switching and accelerated the overall testing lifecycle.&lt;br /&gt;&lt;br /&gt;So, we built the registry using &lt;a href=&quot;https://registry.modelcontextprotocol.io/docs&quot;&gt;community version&lt;/a&gt; . Its essentially 3 APIs as Endpoint and specification requirements.&lt;br /&gt;&lt;br /&gt;A valid registry must support URL routing and follow the v0.1 MCP registry specification, including the following endpoints:&lt;br /&gt;&lt;br /&gt;GET /v0.1/servers: Returns a list of all included MCP servers&lt;br /&gt;GET /v0.1/servers/{serverName}/versions/latest: Returns the latest version of a specific server&lt;br /&gt;GET /v0.1/servers/{serverName}/versions/{version}: Returns the details for a specific version of a server&lt;br /&gt;&lt;br /&gt;After successfully deploying our internal registry and modifying the GitHub enterprise policies settings, we encountered a baffling roadblock: VS Code was picking up the registry configurations perfectly, yet it was hard-blocking every server in the toolchain. It was a classic &#39;dark hole&#39; scenario that forced us to look deeper into the handshake between the IDE&#39;s security layer and our governance APIs.&lt;br /&gt;&lt;br /&gt;As we were debugging the issue, I got curios about the error message in the IDE. I remembered that VS code itself is opensource and why don&#39;t I try to understand the inner workings of the validation. There we go, and we have some new information. So, While the Github documentation speaks about the matching of the name of the server name, the actual validation covers name, description and version. Also the schema of the response should be of appropriate version. AI was of much help to get this information easily out.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjc5ZDIb_D0F0IyCsNANSoDjc3Ox0F1jsgUrM6Mnfcn8L3tS1x2ZYmNwC_pgyu7gs6xoWQNbefGFypt35EZkKEzj-ZF1MfsGPeH9EcDShgSRqNAoEUPofM4bWX3rbF3GTJ6XbEZSIcxKhQQ75ziUdYJBk8eG0NwNLZHyFFVTeYIzW78i6jacNsMLe1R1-M&quot;&gt;&lt;img height=&quot;341&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjc5ZDIb_D0F0IyCsNANSoDjc3Ox0F1jsgUrM6Mnfcn8L3tS1x2ZYmNwC_pgyu7gs6xoWQNbefGFypt35EZkKEzj-ZF1MfsGPeH9EcDShgSRqNAoEUPofM4bWX3rbF3GTJ6XbEZSIcxKhQQ75ziUdYJBk8eG0NwNLZHyFFVTeYIzW78i6jacNsMLe1R1-M=w640-h341&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also, I had to create a input schema to add the server in appropriate way. After much try including with Microsoft Copilot and Google Gemini, I got the working version as below,&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;  &quot;$schema&quot;: &quot;https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json&quot;,

  &quot;name&quot;: &quot;com.microsoft/playwright-mcp&quot;,
  &quot;version&quot;: &quot;0.0.54&quot;,

  &quot;title&quot;: &quot;Playwright MCP&quot;,
  &quot;description&quot;: &quot;Browser automation using Playwright with structured accessibility snapshots.&quot;,

  &quot;websiteUrl&quot;: &quot;https://github.com/microsoft/playwright-mcp&quot;,
  &quot;repository&quot;: {
    &quot;url&quot;: &quot;https://github.com/microsoft/playwright-mcp&quot;,
    &quot;source&quot;: &quot;github&quot;
  },

  &quot;icons&quot;: [
    {
      &quot;src&quot;: &quot;https://raw.githubusercontent.com/microsoft/playwright-mcp/main/assets/icon.png&quot;,
      &quot;type&quot;: &quot;image/png&quot;,
      &quot;size&quot;: 128
    }
  ],

  &quot;packages&quot;: [
    {
      &quot;registryType&quot;: &quot;npm&quot;,
      &quot;identifier&quot;: &quot;@playwright/mcp&quot;,
      &quot;version&quot;: &quot;0.0.54&quot;,

      &quot;transport&quot;: { &quot;type&quot;: &quot;stdio&quot; },

      &quot;packageArguments&quot;: [],
      &quot;environmentVariables&quot;: []
    }
  ]
}

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


&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Most important thing is, we should install our MCP Server to be from the IDE using the &quot;packages&quot; tag so that all the validation parameters are correct. With this all the issues were resolved and we could use Playwright MCP Server in VS Code. Also it blocked others servers demonstrating the validity of registry settings. I have also added a &lt;a href=&quot;https://github.com/github/docs/pull/42331&quot; target=&quot;_blank&quot;&gt;pull request&lt;/a&gt; to improve the documentation on Github docs.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6490944023067228828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2026/01/lessons-learned-setting-up-mcp-registry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6490944023067228828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6490944023067228828'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2026/01/lessons-learned-setting-up-mcp-registry.html' title='Lessons Learned : Setting up an MCP registry for Github Copilot to enable enterprise governance'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjc5ZDIb_D0F0IyCsNANSoDjc3Ox0F1jsgUrM6Mnfcn8L3tS1x2ZYmNwC_pgyu7gs6xoWQNbefGFypt35EZkKEzj-ZF1MfsGPeH9EcDShgSRqNAoEUPofM4bWX3rbF3GTJ6XbEZSIcxKhQQ75ziUdYJBk8eG0NwNLZHyFFVTeYIzW78i6jacNsMLe1R1-M=s72-w640-h341-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6137388054388485167</id><published>2025-08-09T22:18:00.000-07:00</published><updated>2025-08-09T22:18:14.535-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><title type='text'>When AI learns from what you wrote - An example in the context of AI Web Scraping debate</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;citation-13 citation-end-13&quot;&gt;The use of content created by others to train AI models has been a significant debate, on topics such as intellectual property rights, fair compensation, and the very nature of creativity.&lt;source-footnote _nghost-ng-c3965680301=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;sup _ngcontent-ng-c3965680301=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot;&gt;&lt;/sup&gt;&lt;/source-footnote&gt;&lt;/span&gt; &lt;span class=&quot;citation-12 citation-end-12&quot;&gt;Proponents of AI training argue that it is a &quot;transformative&quot; fair use, akin to how a human learns by consuming and being inspired by a vast array of existing works.&lt;source-footnote _nghost-ng-c3965680301=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;sup _ngcontent-ng-c3965680301=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;2&quot;&gt;&lt;/sup&gt;&lt;/source-footnote&gt;&lt;/span&gt; &lt;span class=&quot;citation-11 citation-end-11&quot;&gt;They contend that AI systems are not simply copying and pasting content, but rather analyzing patterns and relationships within massive datasets to generate new, original outputs.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;citation-9 citation-end-9&quot;&gt;On the other hand, critics, particularly content creators, artists, and writers, argue that training AI on their work without permission or compensation constitutes a form of theft.&lt;source-footnote _nghost-ng-c3965680301=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;sup _ngcontent-ng-c3965680301=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot;&gt;&lt;/sup&gt;&lt;/source-footnote&gt;&lt;/span&gt; &lt;span class=&quot;citation-8 citation-end-8&quot;&gt;They believe that AI companies are profiting from their labor, and that AI-generated content can directly compete with and devalue the original human-made creations, threatening their livelihoods.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;citation-8 citation-end-8&quot; style=&quot;font-family: verdana;&quot;&gt;Recently, there is a online battle when &lt;a href=&quot;https://blog.cloudflare.com/perplexity-is-using-stealth-undeclared-crawlers-to-evade-website-no-crawl-directives/&quot; target=&quot;_blank&quot;&gt;Cloudflare accused Perplexity of systematically ignoring website blocks and masking its identity to scrape data from sites&lt;/a&gt;, as reported in &lt;a href=&quot;https://www.marktechpost.com/2025/08/08/cloudflare-vs-perplexity-the-battle-over-ai-web-scraping-heats-up/&quot; target=&quot;_blank&quot;&gt;this article&lt;/a&gt;. So, I decided to do a little experiment on some content I created, to see how AI reads and uses it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;citation-8 citation-end-8&quot;&gt;I have picked my top answer to a stackoverflow questions, and asked the same question to Perplexity.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;display: inline-block;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgI0CxYUFqRDxEs-K0M_LK3B_62a39J3AQH2T4hu4q_U3afBSyKF8UFTvJM54oNZ0iRs3G9wjUhNx2mMptsPu0NabRIlK_RiEkIDsyXHTEEO-jPe5ks08BO4rwJe_Haj1o5Xbsy_zY8jJxlFNRVddCZ8ze5Nz0pPIh0GXPYuv9CaIIoEo0GfNoMp4lP92M&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
      &lt;img alt=&quot;&quot; data-original-height=&quot;664&quot; data-original-width=&quot;910&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgI0CxYUFqRDxEs-K0M_LK3B_62a39J3AQH2T4hu4q_U3afBSyKF8UFTvJM54oNZ0iRs3G9wjUhNx2mMptsPu0NabRIlK_RiEkIDsyXHTEEO-jPe5ks08BO4rwJe_Haj1o5Xbsy_zY8jJxlFNRVddCZ8ze5Nz0pPIh0GXPYuv9CaIIoEo0GfNoMp4lP92M&quot; width=&quot;320&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div style=&quot;display: inline-block;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhwGRYf-i56Y82k9kYLeQXzK0XC1Kx8VGuc14MXx1esOqdCepSFdn3WtIQ5ToppCPoaGgOgTgI81mzx8NiqHoAAtPjC2gE4vL_Jd9iVfzMsGLOSOjkjsjopSDCu4V9JrUpB13dpWXwuSUCRKwaoi1OpHirBOXYqRqc-s3uqu-n1Qwt6IJxTExWdcdsaon0&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
      &lt;img alt=&quot;&quot; data-original-height=&quot;663&quot; data-original-width=&quot;930&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhwGRYf-i56Y82k9kYLeQXzK0XC1Kx8VGuc14MXx1esOqdCepSFdn3WtIQ5ToppCPoaGgOgTgI81mzx8NiqHoAAtPjC2gE4vL_Jd9iVfzMsGLOSOjkjsjopSDCu4V9JrUpB13dpWXwuSUCRKwaoi1OpHirBOXYqRqc-s3uqu-n1Qwt6IJxTExWdcdsaon0&quot; width=&quot;320&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;As expected, it gives the answer and provides a reference to my answer in SO. If it were google, user would have visited the site to know but here answer is available right there, with even better explanations.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;The question is whether the assistance AI provides, even for a simple task like writing this blog post, justifies the lack of credit given to the original creators whose content trained the AI.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6137388054388485167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2025/08/when-ai-learns-from-what-you-wrote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6137388054388485167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6137388054388485167'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2025/08/when-ai-learns-from-what-you-wrote.html' title='When AI learns from what you wrote - An example in the context of AI Web Scraping debate'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgI0CxYUFqRDxEs-K0M_LK3B_62a39J3AQH2T4hu4q_U3afBSyKF8UFTvJM54oNZ0iRs3G9wjUhNx2mMptsPu0NabRIlK_RiEkIDsyXHTEEO-jPe5ks08BO4rwJe_Haj1o5Xbsy_zY8jJxlFNRVddCZ8ze5Nz0pPIh0GXPYuv9CaIIoEo0GfNoMp4lP92M=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6390774982707704173</id><published>2025-04-27T04:11:00.000-07:00</published><updated>2025-08-09T22:18:47.187-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><title type='text'>An experiment with Vibe coding on replit - where it works and where it fails</title><content type='html'>&lt;p&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-family: verdana;&quot;&gt;AI Coding Agents&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;AI coding agents are advanced tools designed to assist developers in writing, debugging, and optimizing code. These agents leverage artificial intelligence and machine learning models to understand natural language commands, generate code snippets, and even handle full-stack development tasks.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Vibe Coding&lt;/b&gt;&lt;br /&gt;Vibe coding is a programming technique where developers leverage AI tools to generate code based on natural language prompts, focusing on the desired outcome rather than the technical implementation. Instead of writing code, you describe what you want your app to do, and AI tools handle the technical aspects, including coding. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Replit&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Replit is an online Integrated Development Environment (IDE) that allows users to write, run, and deploy code directly from their browser. It supports over 50 programming languages, including Python, JavaScript, and C++&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Replit is designed for accessibility and ease of use, making it ideal for beginners and experienced developers alike.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Key features of Replit include:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Real-time collaboration: Multiple users can work on the same project simultaneously.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Built-in hosting and deployment: Users can deploy their applications directly from the platform.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;AI-powered assistance: The Ghostwriter feature provides code suggestions, autocompletion, and explanations&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;No setup required: Everything runs in the cloud, eliminating the need for local installations&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Replit is particularly popular for rapid prototyping, educational purposes, and collaborative coding projects.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Attempt to build an application on Replit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: verdana;&quot;&gt;My objectives were, to c&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;reate a fairly complex application, front-end, API Integrations, and Backend with DB.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;So, this was the initial prompt,&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A web-based Engineering Management Dashboard that aggregates team activities from GitHub and JIRA, providing consolidated insights for engineering managers to track their team&#39;s progress.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Core Features:&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Team management with ability to create teams and add/remove developers&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Integration with GitHub API to track code contributions (commits, pull requests, reviews)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Integration with JIRA API to monitor work item status and updates&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Chronological activity feed for each developer combining both GitHub and JIRA updates with date filtering&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Team dashboard showing consolidated metrics and individual developer summary screens&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Visual References:&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Inspired by GitHub&#39;s activity feed and JIRA&#39;s project dashboards, combining clean data presentation with actionable insights.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;My Observations:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Excellent ability to create an initial prototype. It knows so much about the domain, to u&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;nderstood the context and did lot of customization by itself.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;For ex. Created widgets, used native Github and JIRA terminologies, . I liked the communication back to the user. You will be blown away by the output of the first version!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;An application build plan was discussed and asked for approval. Code fairly well organized and easy to understand.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjZtxmBOyshtDOG2LGQ0lRE7NeZgGAgR6NXwWVLOYrcx6BbuBW_u-Nf7VK1b1oxMvvttVv8zuCBfuYQ7-iSTaEW0HM72K_9_z7rNeecskLSm1w8SUv2k7_mVpc5K-tV7HSupNADLBXa_WFG_jWeE0UYHsZxH4b2U9wJPHvcx6tf8cBSm5FHw7CWaybphPU&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;486&quot; data-original-width=&quot;900&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjZtxmBOyshtDOG2LGQ0lRE7NeZgGAgR6NXwWVLOYrcx6BbuBW_u-Nf7VK1b1oxMvvttVv8zuCBfuYQ7-iSTaEW0HM72K_9_z7rNeecskLSm1w8SUv2k7_mVpc5K-tV7HSupNADLBXa_WFG_jWeE0UYHsZxH4b2U9wJPHvcx6tf8cBSm5FHw7CWaybphPU&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;The choice of frameworks, components and node modules looks very new and modern.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Replit created the DB schema as below, It&#39;s very decent for the purpose.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjaAJyqq5rYSCT7TRPHPo6NImnfO-6ai5K-Ot10yCwEDV2qsmRZ1D17HH1Q3NTzJuZ0lujSBewTl_FRg0bp8R_ULBF88FEcQ5A8NE3dx0W3Ia_W9iiTDq5P-ATNGX8fzIO-mqIb2ipSo_g5EQCnCH7ymIHj21aumBuanIrpIqVrGum1i6w_6qJmK0grfVU&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;840&quot; data-original-width=&quot;1078&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjaAJyqq5rYSCT7TRPHPo6NImnfO-6ai5K-Ot10yCwEDV2qsmRZ1D17HH1Q3NTzJuZ0lujSBewTl_FRg0bp8R_ULBF88FEcQ5A8NE3dx0W3Ia_W9iiTDq5P-ATNGX8fzIO-mqIb2ipSo_g5EQCnCH7ymIHj21aumBuanIrpIqVrGum1i6w_6qJmK0grfVU&quot; width=&quot;308&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&amp;nbsp;I was very impressed by the creation of persistence layer, together with insertion of the seed data.&amp;nbsp;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;It would have taken around 20 hours for a developer to build this app, replit did it in 20 mins!.&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Adding the first feature&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;I asked for this feature,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;i&gt;A&lt;/i&gt;&lt;/span&gt;&lt;i&gt;bility to add team members in the team view with below attributes - Name, Email, GitId, Jira Id&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Agent performed below task, and displayed below message. Again impressed by the communication.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;i&gt;I&#39;m analyzing our current progress on implementing the &quot;Add Team Member&quot; feature.&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;i&gt;✓ Created add-team-member-dialog component&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;i&gt;✓ Created add-team-member-form component&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;i&gt;✓ Created a dedicated add-developer page&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;i&gt;✓ Updated the team page with an &quot;Add Developer&quot; button&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;i&gt;✓ Added route for the add-developer page&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;But I could see that all the files were updated, but the feature was not working. I looked at the code and realized that it was not getting triggered. So, I manually triggered by custom url, the page appeared.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Next, I wanted to update the GitHub and JIRA API keys to test if they are working. I found it very difficult to navigate the flow and test the changes. As I was trying multiple attempt to debug the issues, I realized that I need to move to the &quot;Developer&quot; leading mode. Agent sounded confused for many questions.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;At this stage, I could not continue on the replit agent, I took out the code to my local to continue with developer lead way (AI as assistant).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Conclusions&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;The ease with which non-developers can customize applications generated by AI coding tools varies depending on the complexity of the desired modifications and the specific platform being used. Non-developers should approach AI coding for prototyping with realistic expectations, recognizing that while these tools are powerful, they are not a substitute for software development expertise, especially when dealing with complex applications or aiming for production-ready code.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Agentic AI tools (Vibe Coding) are useful for non-developers to to create quick prototypes. It works best with UI heavy applications built with HTML, CSS, Java Script and Node. How ever further customization of the Agent build application will not be smooth sailing. There are rapid development in capability, but AI Agents are not reached a stage were one can create a production grade full-stack application without the involvement of expert developers.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span style=&quot;color: #1b1c1d; font-size: 12pt; white-space-collapse: preserve;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6390774982707704173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2025/04/an-experiment-with-vibe-coding-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6390774982707704173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6390774982707704173'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2025/04/an-experiment-with-vibe-coding-on.html' title='An experiment with Vibe coding on replit - where it works and where it fails'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjZtxmBOyshtDOG2LGQ0lRE7NeZgGAgR6NXwWVLOYrcx6BbuBW_u-Nf7VK1b1oxMvvttVv8zuCBfuYQ7-iSTaEW0HM72K_9_z7rNeecskLSm1w8SUv2k7_mVpc5K-tV7HSupNADLBXa_WFG_jWeE0UYHsZxH4b2U9wJPHvcx6tf8cBSm5FHw7CWaybphPU=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-1724995637339062342</id><published>2020-03-21T08:31:00.000-07:00</published><updated>2020-03-21T08:36:25.763-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="books"/><title type='text'>Building Evolutionary Architectures - Book review</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7O4JvE7HPuRYL2Fxpk0UF5QZpeOUlQEyHi5ruJZnqzt2EYH0Ml18LBT38C4b7d_yt8j5t8_X49gzmwD6iCs8LFhFSLf9i4C0cvpMw24wIFnmPJRXTQmoej1DLi84CMiKUy2z3bCw_pL8/s1600/evol-arch-book.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;257&quot; data-original-width=&quot;196&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7O4JvE7HPuRYL2Fxpk0UF5QZpeOUlQEyHi5ruJZnqzt2EYH0Ml18LBT38C4b7d_yt8j5t8_X49gzmwD6iCs8LFhFSLf9i4C0cvpMw24wIFnmPJRXTQmoej1DLi84CMiKUy2z3bCw_pL8/s1600/evol-arch-book.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwc_XN2AcLpGCN0VnkB9ZXtm0eeES1hDlogJwAkkpqE8cA-3UhytyPKqmyWOI5f7c6umdBSWLqadt-7snXT8A26VaDi7fy6b6NkbH1avlM5CDd2-NGdHn0xK-y519U3aF9apUJRxSeFFQ/s1600/evol-arch-book.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=6570091700813814076&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;In this blog, I want to speak about the book Building Evolutionary Architectures by Neal Ford, Rebecca Parsons, and Patrick Kua.&amp;nbsp;I have attended Neal&#39;s conference talk on this topic and
heard from many other speakers about the fitness functions. That’s the reason I
wanted to read and understand the concepts mentioned in the book.&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;As the title implies, the book talks about building evolutionary architecture. The question that the book trying to solve is, how do we make sure, our software architecture stays intact with the changing requirements? How do we build the system which can adapt to future needs or how do we know the decision that we are taking is not impacting the architecture of the system?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;The book speaks about fitness functions, to solve this concern. An architectural fitness function provides an objective integrity assessment of some architectural characteristics. So, in a system there may be many characteristics that we want to measure, so you would write separate fitness functions for each of them. In the book, a fitness function is not defined in a concrete way but rather in an abstract form of graphs, tests or any other methods by which we know that our system is doing good with the change. This means you would still need to use your intellect not only to write the fitness function but also to make sense of them.&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=6570091700813814076&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;For me, the best thing about the book is, it provides software architects with a rich vocabulary to communicate their intentions behind their choices to a variety of audiences, including business stakeholders, teams, and engineering leadership. The book also gives you a survey of various architectural approaches. It also talks about some of the practical ideas on how do we implement evolutionary architectures I particularly like the focus on the organizational factors and how does it apply to the software architectures.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;In conclusion, I would recommend this book to any software architect. Use it as your communication guide, use it to improve your vocabulary, use it to get a sense of what is happening across the industry, so that you could choose what best for your situation.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/1724995637339062342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2020/03/building-evolutionary-architectures.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/1724995637339062342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/1724995637339062342'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2020/03/building-evolutionary-architectures.html' title='Building Evolutionary Architectures - Book review'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7O4JvE7HPuRYL2Fxpk0UF5QZpeOUlQEyHi5ruJZnqzt2EYH0Ml18LBT38C4b7d_yt8j5t8_X49gzmwD6iCs8LFhFSLf9i4C0cvpMw24wIFnmPJRXTQmoej1DLi84CMiKUy2z3bCw_pL8/s72-c/evol-arch-book.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-7018728691115773270</id><published>2019-12-22T03:30:00.000-08:00</published><updated>2019-12-22T03:30:35.969-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="career"/><title type='text'>4 ways to contribute to the community for a software developer</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;If you are a software professional and looking for something new to start here are the 4 things to try for!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;1. Attend a community event or user group gettogether or local meetup&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img alt=&quot;Image result for user group meeting&quot; src=&quot;data:image/jpeg;base64,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&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;2. Answer questions at the stackoverflow or contribute to support forums&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img alt=&quot;Image result for stackoverflow&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;3. Share your experience via blog or twitter or other forums with the community.&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img alt=&quot;Image result for blogger + twitter&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;4. Contribute to opensource&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img alt=&quot;Image result for open source&quot; src=&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcScP3Tuyo5Rgvj039RWc35-TTMoqzWihTWm4iTNjbGnzXd6IJF3&amp;amp;s&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/7018728691115773270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2019/12/4-ways-to-contribute-to-community-for.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/7018728691115773270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/7018728691115773270'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2019/12/4-ways-to-contribute-to-community-for.html' title='4 ways to contribute to the community for a software developer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-7540892956282899695</id><published>2019-03-15T08:23:00.004-07:00</published><updated>2019-04-17T23:58:44.514-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bestpractice"/><category scheme="http://www.blogger.com/atom/ns#" term="speaking"/><title type='text'>When to stay with modular monoliths over microservices</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;We have seen the developments in the microservices architecture&amp;nbsp;maturing, where by more and more people are trying to evaluate the benefits before jumping on to the unknown trajectory.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;In the talk titled&amp;nbsp;&lt;b&gt;When to stay with modular monoliths over microservices &lt;/b&gt;at &lt;a href=&quot;https://developer.oracle.com/code/bengaluru-march-2019&quot; target=&quot;_blank&quot;&gt;Oracle Code, Bangalore&lt;/a&gt;, I tried to discuss these points. You can view the slides below.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/BhVb3uanj9Lwh7&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pkmanu/when-to-stay-with-modular-monoliths-over-microservices&quot; target=&quot;_blank&quot; title=&quot;When to stay with modular monoliths over microservices&quot;&gt;When to stay with modular monoliths over microservices&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pkmanu&quot; target=&quot;_blank&quot;&gt;Manu Pk&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;According to me,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Over simplified version of decision tree come down to two criteria&#39;s,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Business Context &amp;amp; Relative Scaling. I tried to explore the same in my presentation. As &lt;a href=&quot;https://martinfowler.com/bliki/MonolithFirst.html&quot; target=&quot;_blank&quot;&gt;Martin Fowler&lt;/a&gt; puts it,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;i&gt;you shouldn&#39;t start a new project with microservices, even if you&#39;re sure your application will be big enough to make it worthwhile.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD5GxO11btwvcrQd24Brvjucr_Zu9qTU0OQUJXYJh7MRT4JjoXy675b0tp0oj3bKrMfWDYVhVdcZvDHB3cxHIViK4J4w2Wu5n-BDSafo_1CCYApyehPN4Lun-9x_S2u9-bUs-tWXDh88I/s1600/choice-dec-tree.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;732&quot; data-original-width=&quot;1301&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD5GxO11btwvcrQd24Brvjucr_Zu9qTU0OQUJXYJh7MRT4JjoXy675b0tp0oj3bKrMfWDYVhVdcZvDHB3cxHIViK4J4w2Wu5n-BDSafo_1CCYApyehPN4Lun-9x_S2u9-bUs-tWXDh88I/s640/choice-dec-tree.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Here is a link to the &lt;a href=&quot;https://youtu.be/Z58Yrfv99Zk?t=11120&quot; target=&quot;_blank&quot;&gt;YouTube Recording&lt;/a&gt; of the session. Let me know what you think about these topics.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/7540892956282899695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2019/03/when-to-stay-with-modular-monoliths.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/7540892956282899695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/7540892956282899695'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2019/03/when-to-stay-with-modular-monoliths.html' title='When to stay with modular monoliths over microservices'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD5GxO11btwvcrQd24Brvjucr_Zu9qTU0OQUJXYJh7MRT4JjoXy675b0tp0oj3bKrMfWDYVhVdcZvDHB3cxHIViK4J4w2Wu5n-BDSafo_1CCYApyehPN4Lun-9x_S2u9-bUs-tWXDh88I/s72-c/choice-dec-tree.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-2008179039222912216</id><published>2018-11-03T09:45:00.000-07:00</published><updated>2019-04-17T23:59:53.396-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="speaking"/><title type='text'>Practical communication strategies for software architects</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Here is a video recording of my session titled &lt;b&gt;Practical communication strategies for software architects &lt;/b&gt;on Bangalore software architect meetup.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;The session covers communication ideas for various stages and to different stakeholders in a project scenario.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/dyaLs3WJjApwPA&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pkmanu/practical-communication-strategies-for-software-architects&quot; target=&quot;_blank&quot; title=&quot;Practical communication strategies for software architects&quot;&gt;Practical communication strategies for software architects&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pkmanu&quot; target=&quot;_blank&quot;&gt;Manu Pk&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Have a look at the video recording of the session&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/xO61JnNRmAs&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;

&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/2008179039222912216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2018/11/practical-communication-strategies-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/2008179039222912216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/2008179039222912216'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2018/11/practical-communication-strategies-for.html' title='Practical communication strategies for software architects'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/xO61JnNRmAs/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-8777923696075393526</id><published>2016-08-01T03:32:00.000-07:00</published><updated>2016-08-01T03:32:50.420-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bestpractice"/><category scheme="http://www.blogger.com/atom/ns#" term="integrationtest"/><title type='text'>An approach to help developers write meaningful tests</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;-webkit-line-break: after-white-space; -webkit-nbsp-mode: space; word-wrap: break-word;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Over the last few years we have been adding unit&amp;nbsp;tests to our existing product to improve its internal quality. During this period we always had the challenge of choosing unit-vs-Integration tests. I would like to mention some of the approaches we have applied to improve the quality of existing system.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;At its core, unit testing is about testing a single component at a time by isolating its&amp;nbsp;dependencies. The classical Unit tests have these properties &quot;Fast,&amp;nbsp;Independent,&amp;nbsp;Repeatable,&amp;nbsp;Self-Validating,Timely&quot;. Typically in java a method is&amp;nbsp;considered as a unit. So traditional &amp;nbsp;(and most common) approach is to test the single method of a class&amp;nbsp;separated&amp;nbsp;from all its&amp;nbsp;dependencies.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-line-break: after-white-space; -webkit-nbsp-mode: space; word-wrap: break-word;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Interestingly&amp;nbsp;there is no hard-core definition of &quot;what makes a unit&quot;. Many times a combination of methods which spread across multiple classes can form a single behavior. So in this context the behavior should be considered as a unit. I have seen people breaking these units and writing multiple tests for the sake of testing a single method. If the intermediate results are not significant this will only increase the complexity of the system. The best way to test a system is to test with its&amp;nbsp;dependencies&amp;nbsp;where ever we can&amp;nbsp;accommodate&amp;nbsp;them. Hence we should try to use the actual implementation and not mocks. Uncle bob puts this point very well, &quot;Mock across architecturally significant boundaries, but not within those boundaries.&quot; in his &lt;a href=&quot;http://blog.8thlight.com/uncle-bob/2014/05/10/WhenToMock.html&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;If the software is build with TDD approach it might not be a challenge to isolate&amp;nbsp;dependencies&amp;nbsp;or adding a test for your next feature. But not all software&#39;s built like these.&amp;nbsp;Unfortunately&amp;nbsp;we have systems where there are only few or none of the test are written. When working with these&amp;nbsp;systems we can&amp;nbsp;&amp;nbsp;make use of the above principle and use tests at different levels.&amp;nbsp;Terry Yin provides an excellent graphics (which is show below) in his presentation titled &lt;a href=&quot;http://www.slideshare.net/TerryYin/misconceptions-of-unit-testing&quot; target=&quot;_blank&quot;&gt;Misconceptions of unit testing&lt;/a&gt;. This shows how different tests can add values and what are its drawbacks.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKPQdISwPdkCZ7PdXkJpdJ1ZE40PnXKkRiosmSscifdTXcM-v9yQLgJMYC_pV26IcdJ0Xnx3TgnixCnbiTqHMxpTvt3OHaixqWO_s90RdN2it0IFYexOifp9uVZp462nIrsQ9sDtdobo/s1600/slide-30-728.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKPQdISwPdkCZ7PdXkJpdJ1ZE40PnXKkRiosmSscifdTXcM-v9yQLgJMYC_pV26IcdJ0Xnx3TgnixCnbiTqHMxpTvt3OHaixqWO_s90RdN2it0IFYexOifp9uVZp462nIrsQ9sDtdobo/s400/slide-30-728.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: left;&quot;&gt;Many of our projects uses Java and Spring framework. We have used springs&amp;nbsp;&lt;b&gt;@RunWith&lt;/b&gt; and&amp;nbsp;&lt;b&gt;SpringJUnit4ClassRunner&lt;/b&gt; to create AppLevel Tests which gives you the objects with all its&amp;nbsp;dependencies initiated. You could&amp;nbsp;selectively mock certain&amp;nbsp;dependencies if you would like to isolate them. This sets a nice platform to write unit tests with multiple&amp;nbsp;collaborating objects. we call them App level tests. These are still fast running test with no external&amp;nbsp;dependencies. A different term was chosen to&amp;nbsp;differentiate&amp;nbsp;itself from the classical unit test. We also had Integration test which would connect with external systems. So, the overall picture of developer tests can be summarized as below, &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;style type=&quot;text/css&quot;&gt;
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
.tg .tg-yw4l{vertical-align:top}
&lt;/style&gt;

&lt;br /&gt;
&lt;table class=&quot;tg&quot;&gt;
  &lt;tbody&gt;
&lt;tr&gt;
    &lt;th class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Tests&lt;/span&gt;&lt;/th&gt;
    &lt;th class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Naming convention&lt;/span&gt;&lt;/th&gt;
    &lt;th class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Runs at&lt;/span&gt;&lt;/th&gt;
    &lt;th class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;When to use&lt;/span&gt;&lt;/th&gt;
    &lt;th class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Exec Time&lt;/span&gt;&lt;/th&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Unit Test&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Ends with &lt;b&gt;Test&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Every build&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Rule based implementations where the logic can be tested in isolation&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Few Milliseconds&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;App Level Tests&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Ends with &lt;b&gt;TestApp&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Every build / Nightly builds (Teams choice)&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Tests the service layers in connection with others. Frees you from creation of mock objects. Application context is loaded in the tests.&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Few Seconds&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Integration Test&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Ends with &lt;b&gt;TestIntg&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Runs on demand when a special profile is used in build.&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;All the above + Use when you need to connect to external points like DB, web services etc..&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Depends on the integration points.&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Manually Running Tests&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Ends with&lt;b&gt;TestIntgManual&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Manually running tests, Used debugging a specific problem locally&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;All the above - Can&#39;t be automated.&lt;/span&gt;&lt;/td&gt;
    &lt;td class=&quot;tg-yw4l&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Depends on the integration points.&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;This approach gives the developers choose the right level of abstractions to test and helps in optimizing their time. Nowadays my default choice is App Level tests and I go to unit tests if I have a complicated logic to implement.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Further reading:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;a href=&quot;http://martinfowler.com/bliki/UnitTest.html&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;http://martinfowler.com/bliki/UnitTest.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://blog.manupk.com/2011/11/when-to-replace-unit-tests-with.html&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;http://blog.manupk.com/2011/11/when-to-replace-unit-tests-with.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://blog.8thlight.com/uncle-bob/2013/03/05/TheStartUpTrap.html&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;http://blog.8thlight.com/uncle-bob/2013/03/05/TheStartUpTrap.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://codeofrob.com/entries/uncle-bobs-viewpoint-considered-harmful.html&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;http://codeofrob.com/entries/uncle-bobs-viewpoint-considered-harmful.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://blog.8thlight.com/uncle-bob/2014/05/10/WhenToMock.html&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;http://blog.8thlight.com/uncle-bob/2014/05/10/WhenToMock.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://bryanpendleton.blogspot.in/2015/04/on-testing-strategies-and-end-to-end.html&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;http://bryanpendleton.blogspot.in/2015/04/on-testing-strategies-and-end-to-end.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;a href=&quot;https://www.symphonious.net/2015/04/30/making-end-to-end-tests-work/&quot;&gt;https://www.symphonious.net/2015/04/30/making-end-to-end-tests-work/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.thoughtworks.com/insights/blog/mockists-are-dead-long-live-classicists&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;https://www.thoughtworks.com/insights/blog/mockists-are-dead-long-live-classicists&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/8777923696075393526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2016/08/an-approach-to-help-developers-write.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/8777923696075393526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/8777923696075393526'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2016/08/an-approach-to-help-developers-write.html' title='An approach to help developers write meaningful tests'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKPQdISwPdkCZ7PdXkJpdJ1ZE40PnXKkRiosmSscifdTXcM-v9yQLgJMYC_pV26IcdJ0Xnx3TgnixCnbiTqHMxpTvt3OHaixqWO_s90RdN2it0IFYexOifp9uVZp462nIrsQ9sDtdobo/s72-c/slide-30-728.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6256326162970567659</id><published>2016-04-18T01:55:00.002-07:00</published><updated>2019-04-18T00:00:34.743-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="speaking"/><title type='text'>Do you need microservices architecture?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD0YeoaQFeFQyyPk4BsGB27H-EKipZ0RTzrGTS-k5pYCSebRwau2kGIuW6xiG2qH9Wivjcp9ti6N9e5IAQxXhV9P5dYyREBOpjlWwUfcYO4xKATcRCURVhSrjrQRrREkxan8amgUMcF10/s1600/monolith-vs-microservice.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD0YeoaQFeFQyyPk4BsGB27H-EKipZ0RTzrGTS-k5pYCSebRwau2kGIuW6xiG2qH9Wivjcp9ti6N9e5IAQxXhV9P5dYyREBOpjlWwUfcYO4xKATcRCURVhSrjrQRrREkxan8amgUMcF10/s640/monolith-vs-microservice.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Over the last few years there has been lot of attention on microservices. After the initial &quot;hype&quot; we saw that what problems it solves and what it can not. I have tried to cover what are microservices and where it can be useful and where it is not. I want to share the guidelines which can be used to choose between a monolith and microservices.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;I feel that one must answer the below questions before they choose a microservices architecture and it will be beneficial to you if the answer to these questions are &quot;&lt;i&gt;YES&lt;/i&gt;&quot;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;i&gt;1. Does your services represents different business cases/domains..?&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;i&gt;2. Does the services needs to be deployed and managed independently..?&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;i&gt;3. Does different parts of the application has different scaling/Technology needs..?&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;A modular monolith can be transformed to a set of microservices in case the need arises. So, we should start with monolith when we are not sure about the future.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/dcrBReBF1jvOmu&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pkmanu/do-you-need-microservices-architecture&quot; target=&quot;_blank&quot; title=&quot;Do you need microservices architecture?&quot;&gt;Do you need microservices architecture?&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pkmanu&quot; target=&quot;_blank&quot;&gt;Manu Pk&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;I have spoken couple of times about the microdervices.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;In April 2016, I spoke at the&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.meetup.com/SoftwareArchitectsBangalore/events/229223106/&quot; style=&quot;font-family: verdana, sans-serif;&quot; target=&quot;_blank&quot;&gt;Bangalore Software Architects Meetup&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp;on the topic &quot;&lt;/span&gt;&lt;b style=&quot;font-family: verdana, sans-serif;&quot;&gt;Do you need microservices architecture?&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&quot;. Later in 2017 April there was a brief introductory talk titled, &lt;b&gt;Introduction to Microservices &lt;/b&gt;at the &lt;a href=&quot;https://www.meetup.com/Docker-Bangalore/events/238432509/&quot; target=&quot;_blank&quot;&gt;Microservices and Serverless event&lt;/a&gt;.&lt;b&gt;&amp;nbsp;&lt;/b&gt;I hope this post helps to complement the slides.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;485&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/GQ2a3uzPvSRfvy&quot; style=&quot;border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;595&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pkmanu/introduction-to-microservices-75558331&quot; target=&quot;_blank&quot; title=&quot;Introduction to Microservices&quot;&gt;Introduction to Microservices&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/pkmanu&quot; target=&quot;_blank&quot;&gt;Manu Pk&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6256326162970567659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2016/04/do-you-need-microservices-architecture.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6256326162970567659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6256326162970567659'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2016/04/do-you-need-microservices-architecture.html' title='Do you need microservices architecture?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD0YeoaQFeFQyyPk4BsGB27H-EKipZ0RTzrGTS-k5pYCSebRwau2kGIuW6xiG2qH9Wivjcp9ti6N9e5IAQxXhV9P5dYyREBOpjlWwUfcYO4xKATcRCURVhSrjrQRrREkxan8amgUMcF10/s72-c/monolith-vs-microservice.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-3095543320949668248</id><published>2016-01-24T22:23:00.000-08:00</published><updated>2016-01-24T22:23:57.519-08:00</updated><title type='text'>Application Security for Java Developers</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;Security is a top priority item on&amp;nbsp;everyone&#39;s&amp;nbsp;checklist nowadays. In this post, I will introduce&amp;nbsp;you to useful reference material that can help you get started with securing applications. I want to focus more on web applications built with Java related technologies.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;1. Authentication and&amp;nbsp;Authorization&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;When it comes to security the most fundamental concepts are Authentication and&amp;nbsp;Authorization. Unless you have a strong reason you should be following a&amp;nbsp;widely&amp;nbsp;accepted framework for this purpose. We have &lt;a href=&quot;http://www.oraclejavamagazine-digital.com/javamagazine_open/20130102?pg=63#pg63&quot; target=&quot;_blank&quot;&gt;Java EE Authentication &lt;/a&gt;and&amp;nbsp;S&lt;a href=&quot;http://projects.spring.io/spring-security/&quot; target=&quot;_blank&quot;&gt;pring Security&lt;/a&gt; to help us out in this context. I have worked with spring security in the past and it can be customized to suite your specific needs.&amp;nbsp;&lt;/span&gt;&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;2. Security in the Web Layer&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;In our application stack the web layer is most vulnarable to attacks. We have may established standard practices and detection&amp;nbsp;mechanisms to minimize these risks. &lt;a href=&quot;https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project#tab=OWASP_Top_10_for_2013&quot; target=&quot;_blank&quot;&gt;OWASP Top 10&lt;/a&gt; list is a must have check point for security checks.&amp;nbsp;&lt;i&gt;The Open Web Application Security Project (OWASP) mission is to make software security visible, so that individuals and organizations worldwide can make informed decisions about true software security risks.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3. API Security&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;With the rise of mobile applications and stronger browsers expressing functionalities using the API is more popular day by day. We need to follow the same security practices for the web layer. All the API requests should be authenticated and we should use the principle of least&amp;nbsp;privilege. I found the presentation from Greg Patton in the&amp;nbsp;AppSec EU15 titled&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/watch?v=oPrrFNEasgE&quot; target=&quot;_blank&quot;&gt;The API Assessment Primer&lt;/a&gt; is a great start for API security validations.&amp;nbsp;Two major points focused in his talk are,&lt;br /&gt;&lt;i&gt;Do not expose any operations that are not needed&lt;br /&gt;Do not expose any data that is not required&lt;/i&gt;&lt;br /&gt;Which is in line with the basic security principle of giving least&amp;nbsp;privilege by default.&lt;br /&gt;&lt;br /&gt;To authenticate the services, we can create simple token-based API authentication mechanism based OAuth2 standards. If the services expose any sensitive data, it is better to use https so that man-in-the-middle attacks can be avoided.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;4. Validating the User Input&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Be aware that any JavaScript input validation performed on the client can be bypassed by an attacker that disables JavaScript or uses a Web Proxy. Ensure that any input validation performed on the client is also performed on the server. Go through the &lt;a href=&quot;https://www.owasp.org/index.php/Input_Validation_Cheat_Sheet&quot; target=&quot;_blank&quot;&gt;OWASP&lt;/a&gt; and &lt;a href=&quot;http://projects.webappsec.org/w/page/13246933/Improper%20Input%20Handling&quot; target=&quot;_blank&quot;&gt;WASC&lt;/a&gt; checklist to identify the potential validations you need to do in your application.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Other Useful Reference Materials&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;1.&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.sans.org/reading-room/whitepapers/securecode/security-checklist-web-application-design-1389&quot; style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot; target=&quot;_blank&quot;&gt;A Security Checklist for Web Application Design&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;2. &lt;a href=&quot;https://docs.oracle.com/javaee/7/tutorial/security-webtier002.htm&quot; target=&quot;_blank&quot;&gt;Java EE Security&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/3095543320949668248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2016/01/application-security-for-java-developers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/3095543320949668248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/3095543320949668248'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2016/01/application-security-for-java-developers.html' title='Application Security for Java Developers'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6056637772247720879</id><published>2014-07-18T01:27:00.000-07:00</published><updated>2019-04-18T00:03:14.758-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="career"/><title type='text'>Identifying the skills gap for a Software Developer</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;; orphans: 2; widows: 2;&quot;&gt;This April I had to create a Individual Development Plan (IDP) for me as part of the regular official procedures. One of step was to identify the gaps in you compared to the ideal position you want to reach. Thinking more in this line I have created the below table which contains ways to identify the specific areas of development for a developer.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;; orphans: 2; widows: 2;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;; orphans: 2; widows: 2;&quot;&gt;Guide to reading the table:-&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;; orphans: 2; widows: 2;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;; orphans: 2; widows: 2;&quot;&gt;Ask yourself the questions in the column (D). If your answer is &quot;Yes&quot; to any of the questions then you needs to consider the action plans listed in column (E).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; style=&quot;color: black; font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2; width: 100%px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;A.&lt;br /&gt;
Sl No&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;B. Section&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;C&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;D. These things happens with You&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;E. Your Action Plans&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;1&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;Understanding what to do&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;What to do? (40%)&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
1. You have missed some of the requirements.&lt;/div&gt;
&lt;div&gt;
2. You hear others say &quot;This feature was not supposed to work like this&quot;&lt;/div&gt;
&lt;div&gt;
3. Your completed work gets re-opened during QA or User Testing.&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;-Improve your domain knowledge.&lt;br /&gt;
-Ask more questions to your PO so that you can impove your understanding of the requirements.&lt;br /&gt;
-Push for improved requirements&amp;nbsp;documentation.&lt;br /&gt;
-Spend more time in testing your features.&lt;br /&gt;
-Listen to sprint demos to get the overview of all the new features&amp;nbsp;added.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;2&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
Knowledge of Frameworks,&lt;/div&gt;
&lt;div&gt;
Design patterns, practices and principles&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;How to do it - Your skills to do it&lt;br /&gt;
&lt;br /&gt;
(20 - 30 %)&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
1. You don&#39;t know where to start with when you have to implement a new feature&lt;/div&gt;
&lt;div&gt;
2. You don&#39;t know if a similar functionality already exists in the application or not&lt;/div&gt;
&lt;div&gt;
3. You don&#39;t completely understand the frameworks in the application and how they are used&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;-Pair program with an&amp;nbsp;experienced developer to learn how he approaches a problem.&lt;br /&gt;
-Learn more about the frameworks used in your app.&lt;br /&gt;
-Try creating sample applications using them.&lt;br /&gt;
-Identify the patterns and&amp;nbsp;principles&amp;nbsp;used in your app and try to use them.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;3&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;Problem solving, Analytical, Debugging skills&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
How to do it - Your Ability to do it&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
(10 - 20 %)&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
1. You face difficulties when it comes to writing algorithms&lt;/div&gt;
&lt;div&gt;
2. You are weak in debugging and finding issues in the code&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;-See if you can apply some known patterns to solve the problem.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;4&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;Communicating with your code&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;How well you did it?&lt;br /&gt;
How easily somebody can understand how ?&lt;br /&gt;
&lt;br /&gt;
(15%)&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
1. Your code is not up to the&amp;nbsp;standards or&amp;nbsp;frequently ignores code quality.&lt;/div&gt;
&lt;div&gt;
2. You don&#39;t have enough code coverage&lt;/div&gt;
&lt;div&gt;
3. You can&#39;t write a quality documentation&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;-Use tools like sonar to asses the quality of your code.&lt;br /&gt;
-Spend more time in refactoring and improving the code quality.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;5&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;Communicating about your work&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
How well can you communicate about your work&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
(5%)&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;div&gt;
1. Your don&#39;t follow the process in the team.&lt;/div&gt;
&lt;div&gt;
2. Your check-in comments are not useful.&lt;/div&gt;
&lt;div&gt;
3. Your team don&#39;t know what you are working on.&lt;/div&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;-Understand and&amp;nbsp;adhere&amp;nbsp;to the team policies. If you feel that there is somethings wrong, communicate and get it clarified.&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot; /&gt;
&lt;div style=&quot;orphans: 2; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;This is the first draft of the version I have created. Try to apply this to you or your team and let me know your feedback. I hope I can expand each area by writing more in the future.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6056637772247720879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2014/07/identifying-skills-gap-for-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6056637772247720879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6056637772247720879'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2014/07/identifying-skills-gap-for-software.html' title='Identifying the skills gap for a Software Developer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-2042935995161345401</id><published>2014-05-04T00:43:00.001-07:00</published><updated>2014-05-04T00:59:16.613-07:00</updated><title type='text'>EXIN Cloud Computing Foundation Exam Review</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRVORC2595hzHdnEZ3yyAa9K9iGXAsi9BKZTyRrG7lCSqYAFXrZxbUehkOHkNB943yrI1KTCxHObQvYBkCal2SITrRSAn1737OnqZCw31CS4UOxXRrxzWsNZTSoSzDK8InMRwtI0hT7U/s1600/EXIN-page-001.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRVORC2595hzHdnEZ3yyAa9K9iGXAsi9BKZTyRrG7lCSqYAFXrZxbUehkOHkNB943yrI1KTCxHObQvYBkCal2SITrRSAn1737OnqZCw31CS4UOxXRrxzWsNZTSoSzDK8InMRwtI0hT7U/s1600/EXIN-page-001.jpg&quot; height=&quot;200&quot; width=&quot;141&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Recently I have attended a workshop on &lt;strong&gt;EXIN Cloud Computing Foundation course&lt;/strong&gt; and cleared the &lt;a href=&quot;https://www.exin.com/US/en/exams/&amp;amp;exam=exin-cloud-computing-foundation&quot;&gt;certification exam&lt;/a&gt;. This post is bit about topics covered in the exam and my experience learning those topics.&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;strong&gt;The principles of Cloud Computing&lt;/strong&gt;. &lt;em&gt;This chapter deals with definitions, types of clouds (Public, Private and Hybrid) and cloud services (IAAS, PAAS, SAAS).&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Most contents in the section are from the The &lt;a href=&quot;http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf&quot;&gt;NIST Definition of Cloud Computing paper&lt;/a&gt;. Other topics include &lt;em&gt;The Evolution Toward Cloud Computing, Cloud Computing Architectures and &lt;a href=&quot;http://www.javacodegeeks.com/2013/04/advantages-and-disadvantages-of-cloud-computing-cloud-computing-pros-and-cons.html&quot;&gt;Benefits and Limitations of Cloud Computing&lt;/a&gt;&lt;/em&gt;. The part about &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtualization&quot;&gt;Virtualization&lt;/a&gt; and its role in the raise of Could computing was quite interesting for me.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;strong&gt;Using the Cloud&lt;/strong&gt;. &lt;em&gt;This part is about accessing the cloud and mobility in the cloud.&lt;/em&gt; &lt;br /&gt;
This module covers the topics &lt;em&gt;Overview of Accessing the Cloud, How Cloud Computing Can Support Business Processes and Service Providers Using the Cloud&lt;/em&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;strong&gt;Security and Compliance&lt;/strong&gt;. &lt;em&gt;Is about the risks of cloud computing and the measures you can take&lt;/em&gt; &lt;br /&gt;
This module covers the paper &lt;a href=&quot;https://cloudsecurityalliance.org/topthreats/csathreats.v1.0.pdf&quot;&gt;Top Threats to Cloud Computing&lt;/a&gt; prepared by the Cloud Security Alliance under the Security Risks and Mitigating Measures title. Managing Identity and Privacy section deals with &lt;a href=&quot;http://en.wikipedia.org/wiki/AAA_protocol#Authentication&quot;&gt;Triple-A authentication&lt;/a&gt; and various aspects of &lt;a href=&quot;http://en.wikipedia.org/wiki/Identity_management&quot;&gt;identity management&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;strong&gt;Implementing and managing Cloud Computing&lt;/strong&gt;. &lt;em&gt;You learn about local cloud networks and how to support the use of cloud computing&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;This module includes the topics Building a Local Cloud Environment and Managing Cloud Services. There is a lot of focus on managing cloud services and related governance frameworks.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;strong&gt;Evaluation of Cloud Computing&lt;/strong&gt;. &lt;em&gt;Examples of the subjects here are cost aspects, (dis)advantages and SLA’s.&lt;/em&gt; &lt;br /&gt;
This module speaks about the business case for cloud computing. For example cost implications to an organization evaluating the cloud services in terms of capex and opex. Forming the Service level requirements and &lt;a href=&quot;http://en.wikipedia.org/wiki/Service-level_agreement&quot;&gt;agreements&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;em&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;The text in italics are taken from the &lt;a href=&quot;https://www.exin.com/US/en/exams/&amp;amp;exam=exin-cloud-computing-foundation&quot;&gt;official exam page&lt;/a&gt;.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;Written with &lt;a href=&quot;https://stackedit.io/&quot;&gt;StackEdit&lt;/a&gt;.&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/2042935995161345401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2014/05/exin-cloud-computing-foundation-exam.html#comment-form' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/2042935995161345401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/2042935995161345401'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2014/05/exin-cloud-computing-foundation-exam.html' title='EXIN Cloud Computing Foundation Exam Review'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRVORC2595hzHdnEZ3yyAa9K9iGXAsi9BKZTyRrG7lCSqYAFXrZxbUehkOHkNB943yrI1KTCxHObQvYBkCal2SITrRSAn1737OnqZCw31CS4UOxXRrxzWsNZTSoSzDK8InMRwtI0hT7U/s72-c/EXIN-page-001.jpg" height="72" width="72"/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-455230463497236392</id><published>2014-03-24T06:49:00.002-07:00</published><updated>2014-03-24T20:33:50.215-07:00</updated><title type='text'>Integration Testing for Spring Applications with JNDI Connection Pools</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;We all know we need to use connection pools where ever we connect to a database. All of the modern drivers using JDBC type 4 supports it. In this post we will have look at an overview of&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;connection pooling in&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;spring applications and how to deal with same context in a non JEE enviorements (like tests).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;Most examples of connecting to database in spring is done using &lt;/span&gt;&lt;a href=&quot;http://docs.spring.io/spring/docs/3.2.8.RELEASE/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html&quot; style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;DriverManagerDataSource&lt;/a&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;. If you don&#39;t read the documentation properly then you are going to miss a very important point.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;NOTE:&amp;nbsp;&lt;b&gt;This class is not an actual connection pool; it does not actually pool Connections.&lt;/b&gt;&amp;nbsp;It just serves as simple replacement for a full-blown connection pool, implementing the same standard interface, but creating new Connections on every call.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i&gt;Useful for test or standalone environments outside of a J2EE container, either as a DataSource bean in a corresponding ApplicationContext or in conjunction with a simple JNDI environment. Pool-assuming Connection.close() calls will simply close the Connection, so any DataSource-aware persistence code should work.&lt;/i&gt;&lt;i style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Yes, by default the spring applications does not use pooled connections. There are two ways to implement the connection pooling. Depending on who is managing the pool. If you are running in a JEE&amp;nbsp;environment, then it is prefered use the container for it. In a non-JEE setup there are libraries which will help the application to manage the connection pools. Lets discuss them in bit detail below.&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;1. Server (Container) managed connection pool (Using JNDI)&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72Gr2QTvfCkF28EVtg3p8EVcg2-utiFYIEX48j7LnJs1T0zZKi4WHGpSc5H1C5y6nECxYc04L0d1KI3pWAp7bLsXx0ctOcQFCtvxsooiJmreEkaS1JlWLQ9AU3_Rui4SIOjrc9jDqXxc/s1600/con-pool.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72Gr2QTvfCkF28EVtg3p8EVcg2-utiFYIEX48j7LnJs1T0zZKi4WHGpSc5H1C5y6nECxYc04L0d1KI3pWAp7bLsXx0ctOcQFCtvxsooiJmreEkaS1JlWLQ9AU3_Rui4SIOjrc9jDqXxc/s1600/con-pool.jpg&quot; height=&quot;190&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;When the application connects to the database server, establishing the physical actual connection takes much more than the execution of the scripts. Connection pooling is a technique that was pioneered by database vendors to allow multiple clients to share a cached set of connection objects that provide access to a database resource.&amp;nbsp;The &lt;/span&gt;&lt;a href=&quot;http://www.javaworld.com/article/2076221/jndi/dive-into-connection-pooling-with-j2ee.html&quot; style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot; target=&quot;_blank&quot;&gt;JavaWorld article&lt;/a&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;&amp;nbsp;gives a good overview about this.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i style=&quot;text-align: -webkit-auto;&quot;&gt;In a J2EE container, it is recommended to use a JNDI DataSource provided by the container. Such a DataSource can be exposed as a DataSource bean in a Spring ApplicationContext via&amp;nbsp;&lt;a href=&quot;http://docs.spring.io/spring/docs/3.2.8.RELEASE/javadoc-api/org/springframework/jndi/JndiObjectFactoryBean.html&quot;&gt;JndiObjectFactoryBean&lt;/a&gt;, for seamless switching to and from a local DataSource bean like this class.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;The below articles helped me in setting up the data source in JBoss AS.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;1. &lt;/span&gt;&lt;a href=&quot;http://debajava.wordpress.com/2011/11/13/datasource-configuration-in-jboss-7-for-connection-pooling/&quot; style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot; target=&quot;_blank&quot;&gt;DebaJava Post&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;2. &lt;/span&gt;&lt;a href=&quot;http://docs.jboss.org/jbossas/docs/Installation_And_Getting_Started_Guide/5/html/Using_other_Databases.html&quot; style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot; target=&quot;_blank&quot;&gt;JBoss Installation Guide&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3. &lt;/span&gt;&lt;a href=&quot;https://community.jboss.org/wiki/ConfigDataSources&quot; style=&quot;font-family: Verdana, sans-serif;&quot; target=&quot;_blank&quot;&gt;JBoss Wiki&lt;/a&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;Next step is to use these connections created by the server from the application. As mentioned in the documentation you can use the&amp;nbsp;&lt;/span&gt;&lt;i style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;&lt;a href=&quot;http://docs.spring.io/spring/docs/3.2.8.RELEASE/javadoc-api/org/springframework/jndi/JndiObjectFactoryBean.html&quot;&gt;JndiObjectFactoryBean&lt;/a&gt;&amp;nbsp;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;for this. It is as simple as below&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script src=&quot;https://gist.github.com/manupk/9617344.js&quot;&gt;&lt;/script&gt;

&lt;br /&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;If you want to write any tests using springs &quot;SpringJUnit4ClassRunner&quot; it can&#39;t load the context becuase the JNDI resource will not be available.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i&gt;For tests, you can then either set up a mock JNDI environment through Spring&#39;s SimpleNamingContextBuilder, or switch the bean definition to a local DataSource (which is simpler and thus recommended).&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;As I was looking for a good solutions to this problem (I did not want a separate context for tests) this &lt;a href=&quot;http://stackoverflow.com/a/12058370/507864&quot; target=&quot;_blank&quot;&gt;SO answer&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;helped me. It sort of uses the&amp;nbsp;various tips given in the Javadoc to good effect. The issue with the above solution is the repetition of code to create the JNDI connections.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;I have solved it using a customized runner &lt;b&gt;SpringWithJNDIRunner&lt;/b&gt;. This class adds the JNDI capabilities to the SpringJUnit4ClassRunner. It reads the data source from &quot;test-datasource.xml&quot; file in the class path and binds it to the JNDI resource with name &quot;java:/my-ds&quot;. After the execution of this code the JNDI resource is available for the spring container to consume.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;script src=&quot;https://gist.github.com/manupk/9617059.js&quot;&gt;&lt;/script&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/manupk/9754742.js&quot;&gt;&lt;/script&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;To use this runner you just need to use the annotation&amp;nbsp;&lt;b&gt;@RunWith(SpringWithJNDIRunner.class)&lt;/b&gt;&amp;nbsp;in your test. This class extends&amp;nbsp;SpringJUnit4ClassRunner beacuse a there can only be one class in the @RunWith annotation. The JNDI is created only once is a test cycle. This class&amp;nbsp;provides a clean solution to the problem.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;2. Application managed connection pool&lt;/span&gt;&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i&gt;If you need a &quot;real&quot; connection pool outside of a J2EE container, consider Apache&#39;s Jakarta Commons DBCP or C3P0. Commons DBCP&#39;s BasicDataSource and C3P0&#39;s ComboPooledDataSource are full connection pool beans, supporting the same basic properties as this class plus specific settings (such as minimal/maximal pool size etc).&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Below user guides can help you configure this.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;1.&amp;nbsp;&lt;a href=&quot;http://docs.spring.io/spring/docs/3.0.0.RC2/reference/html/ch12s03.html&quot; target=&quot;_blank&quot;&gt;Spring Docs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;2. &lt;a href=&quot;http://www.mchange.com/projects/c3p0/#quickstart&quot; target=&quot;_blank&quot;&gt;C3P0 Userguide&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3.&amp;nbsp;&lt;a href=&quot;http://commons.apache.org/proper/commons-dbcp/&quot; target=&quot;_blank&quot;&gt;DBCP Userguide&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: justify;&quot;&gt;The below articles speaks about the general guidelines and best practices in configuring the connection pools.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;1. &lt;/span&gt;&lt;a href=&quot;http://stackoverflow.com/questions/5117191/spring-jdbc-connection-pool-best-practices&quot; style=&quot;font-family: Verdana, sans-serif;&quot; target=&quot;_blank&quot;&gt;SO question on Spring JDBC Connection pools&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;2. &lt;/span&gt;&lt;a href=&quot;http://stackoverflow.com/questions/17047358/connection-max-pool-size-in-sql-server-2008&quot; style=&quot;font-family: Verdana, sans-serif;&quot; target=&quot;_blank&quot;&gt;Connection pool max size in MS SQL Server 2008&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3. &lt;/span&gt;&lt;a href=&quot;http://stackoverflow.com/questions/8753442/thinking-behind-decision-of-connection-pool-size&quot; style=&quot;font-family: Verdana, sans-serif;&quot; target=&quot;_blank&quot;&gt;How to decide the max number of connections&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;4. &lt;/span&gt;&lt;a href=&quot;http://blogs.msdn.com/b/sql_pfe_blog/archive/2013/10/08/connection-pooling-for-the-sql-server-dba.aspx&quot; style=&quot;font-family: Verdana, sans-serif;&quot; target=&quot;_blank&quot;&gt;Monitoring the number of active connections in SQL Server 2008&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;Note:- All the &lt;span style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;text in italics are copied from the spring documentation of the&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://docs.spring.io/spring/docs/3.2.8.RELEASE/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html&quot; style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;DriverManagerDataSource&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/455230463497236392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2014/03/integration-testing-for-spring.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/455230463497236392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/455230463497236392'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2014/03/integration-testing-for-spring.html' title='Integration Testing for Spring Applications with JNDI Connection Pools'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72Gr2QTvfCkF28EVtg3p8EVcg2-utiFYIEX48j7LnJs1T0zZKi4WHGpSc5H1C5y6nECxYc04L0d1KI3pWAp7bLsXx0ctOcQFCtvxsooiJmreEkaS1JlWLQ9AU3_Rui4SIOjrc9jDqXxc/s72-c/con-pool.jpg" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-8064519722751995682</id><published>2014-03-01T08:13:00.003-08:00</published><updated>2019-04-18T00:01:17.394-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sonarqube"/><category scheme="http://www.blogger.com/atom/ns#" term="speaking"/><category scheme="http://www.blogger.com/atom/ns#" term="technical debt"/><title type='text'>TalkNotes - The story of SonarQube told to a DevOps Engineer</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;This week I spoke at &lt;a href=&quot;http://www.meetup.com/devops-bangalore/events/164854602/&quot; target=&quot;_blank&quot;&gt;Bangalore DevOps meetup&lt;/a&gt; on the topic &quot;&lt;a href=&quot;http://lanyrd.com/2014/devops-bangalore-meetup/scxktr/&quot; target=&quot;_blank&quot;&gt;The story of SonarQube told to a DevOps Engineer&lt;/a&gt;&quot;. I have started writing TalkNotes inspired from&amp;nbsp;&lt;a href=&quot;http://martinfowler.com/bliki/TalkNotes.html&quot; target=&quot;_blank&quot;&gt;Martin Fowler&lt;/a&gt;.Unlike his detailed article my posts aims to help the audience better understand my slides.&amp;nbsp;&lt;a href=&quot;http://www.sonarqube.org/&quot; target=&quot;_blank&quot;&gt;SonarQube &lt;/a&gt;is a open source code quality management platform. It was a 30 mins talk focused at the need, setup, CI Infrastructure and administration of the SonarQube to the DevOps community.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;421&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/31796867&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;512&quot;&gt; &lt;/iframe&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pkmanu/the-story-of-sonar-qube-told-to-a-devops-engineer&quot; target=&quot;_blank&quot; title=&quot;The story of SonarQube told to a DevOps Engineer&quot;&gt;The story of SonarQube told to a DevOps Engineer&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/pkmanu&quot; target=&quot;_blank&quot;&gt;Manu Pk&lt;/a&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;I have started the talk with one of my favorite subject &lt;a href=&quot;http://martinfowler.com/bliki/TechnicalDebt.html&quot; target=&quot;_blank&quot;&gt;Technical Debt&lt;/a&gt;. We have also looked at some of the parameters which determines the quality are coding standards breach, duplication, lack of unit tests, bad distribution of complexity, Spaghetti Design etc... I have spoke about this in more detail at previous &lt;a href=&quot;http://blog.manupk.com/2013/09/how-can-agile-help-you-in-clearing.html&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt;. There are various existing tools that helps reduce the technical debt by improve the code quality. What was missing was a easier way of tracking these code rule violations. For examples I need to know how much debt was introduced or was cleaned up? As a developer how do you quantify improvement the which a particular code refactoring has brought to the team etc..&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;This is where Sonar come to your help. Sonar&#39;s rich &lt;a href=&quot;http://www.sonarqube.org/features/&quot; target=&quot;_blank&quot;&gt;feature&lt;/a&gt;&amp;nbsp;set allows you to do these and more. Currently it can run the quality analysis on more than 20 languages including Java, C#, C/C++, PL/SQL, Javascript, PHP, Web, XML etc.... It stores the analysis results and the data is displayed through various dashboards. Further slides discusses the sonar &lt;a href=&quot;http://docs.codehaus.org/display/SONAR/Installing&quot; target=&quot;_blank&quot;&gt;platform overview&lt;/a&gt; and installation.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;The below diagram shows the CI environment including SonarQube. The Hudson plugin for SonarQube can be configured by following the &lt;a href=&quot;http://docs.codehaus.org/display/SONAR/Configuring+SonarQube+Hudson+Plugin&quot; target=&quot;_blank&quot;&gt;wiki&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinicHA4huVFqqJhyk4XSFzgui-rk7K1oaIGrGhQz-58nbnJkJUF9HB1FAUvIXOeFhb6gc92J2KUOvqWkqgn6deqHl-MNZQYTYUetRNxMJP9WZy6DRWYxUk_WrTg_12EwTBA3TXPRLKRko/s1600/ci-devs-hudson-sonar.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinicHA4huVFqqJhyk4XSFzgui-rk7K1oaIGrGhQz-58nbnJkJUF9HB1FAUvIXOeFhb6gc92J2KUOvqWkqgn6deqHl-MNZQYTYUetRNxMJP9WZy6DRWYxUk_WrTg_12EwTBA3TXPRLKRko/s1600/ci-devs-hudson-sonar.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: xx-small;&quot;&gt;&lt;i&gt;Image Idea&amp;nbsp;&lt;a href=&quot;http://eugenedvorkin.com/6-effective-jenkins-plugins-for-your-project/&quot; target=&quot;_blank&quot;&gt;from&lt;/a&gt;&amp;nbsp;this blog.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;The best part of sonar is its documentation. This was the most comprehensive documentation I have read about any open source product. You just need their wiki page to get 99% of answers. Now that I have it configured hope to write more about it in the coming moths.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/8064519722751995682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2014/03/talknotes-story-of-sonarqube-told-to.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/8064519722751995682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/8064519722751995682'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2014/03/talknotes-story-of-sonarqube-told-to.html' title='TalkNotes - The story of SonarQube told to a DevOps Engineer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinicHA4huVFqqJhyk4XSFzgui-rk7K1oaIGrGhQz-58nbnJkJUF9HB1FAUvIXOeFhb6gc92J2KUOvqWkqgn6deqHl-MNZQYTYUetRNxMJP9WZy6DRWYxUk_WrTg_12EwTBA3TXPRLKRko/s72-c/ci-devs-hudson-sonar.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-2062008998669345252</id><published>2014-02-23T00:47:00.000-08:00</published><updated>2014-02-23T00:47:21.116-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="example"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><title type='text'>4 simple steps to migrate legacy projects from Ant to Maven</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;For some time we were thinking about migrating our build to maven from ant. It happened last month and was actually simpler than what we have anticipated. From my&amp;nbsp;experience, here is a&amp;nbsp;brief about the steps we have followed. Our &lt;a href=&quot;https://designportal.apc.com/&quot; target=&quot;_blank&quot;&gt;application&lt;/a&gt; is a&amp;nbsp;&amp;nbsp;is a enterprise web application build with multiple frameworks and technologies and is deployed as a single WAR.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;b&gt;
1. Create maven project directory structure.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;As told in the &lt;a href=&quot;https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html&quot; target=&quot;_blank&quot;&gt;Maven user guide&lt;/a&gt; create the below directory structure. We have done it under a new folder for the project.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj78mJViu6kWd2S5OTOkm1Gdyn0BlJbs0fXLy5z9Uq_SOTYg-Bq-x6pte39YtEZJTYwUjo3lAyLHuo0YPc4p4ZqejaxdPJcXM34S54smETi5AWqBvqbST-TLTSfsuPjuhVhpmHrarLm3xQ/s1600/Maven+-+Introduction+to+the+Standard+Directory+Layout.clipular.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj78mJViu6kWd2S5OTOkm1Gdyn0BlJbs0fXLy5z9Uq_SOTYg-Bq-x6pte39YtEZJTYwUjo3lAyLHuo0YPc4p4ZqejaxdPJcXM34S54smETi5AWqBvqbST-TLTSfsuPjuhVhpmHrarLm3xQ/s1600/Maven+-+Introduction+to+the+Standard+Directory+Layout.clipular.png&quot; height=&quot;178&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;&lt;b&gt;2. Move the files/folders keeping the SCM logs.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Even though the folder structure is new the source files will be old ones! We want to keep the SCM logs while moving them to new locations. Remember to commit the folders created in step 1 before you start moving your files.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;If you use SVN, see &lt;/span&gt;&lt;a href=&quot;http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html#tsvn-dug-rename-move&quot; style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot; target=&quot;_blank&quot;&gt;this user guide&lt;/a&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt; or &lt;/span&gt;&lt;a href=&quot;http://stackoverflow.com/a/46100/507864&quot; style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot; target=&quot;_blank&quot;&gt;SO question&lt;/a&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;&amp;nbsp;on how to do this.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;Move the java source, unit/integration test and configuration&amp;nbsp;resources&amp;nbsp;to appropriate folders.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;b&gt;3. Create the POM and add dependencies&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;Most critical part in the migration is adding the dependencies in the POM. Start by adding the dependencies for the frameworks used in your application. Make sure you are adding the right version of the jars. You can f&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;ind the version of the jar by reading the MANIFEST.MF file inside the META-INF folder of the jar. This will help if the versions are missing from the file name.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;Any third party jars can be added to the maven repository as told &lt;a href=&quot;http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. I&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;f you are using very old versions of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;jar files some of them may not be available in maven repository.Here you can either try upgrading to newer versions or prepare local install as told before. Once you have added all the dependencies try building the application. Watch out for any major issues.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;b&gt;4. Make sure you haven&#39;t changed much in the WAR&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Maven is a build tool. This means your WAR should not change. So, in the last step we compare both versions and make sure they are the same. Make sure you are on top of all the differences. Also, compare the jar files generated by maven and your existing files, Sync them by&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- Adding &lt;a href=&quot;http://viralpatel.net/blogs/maven-ignore-transitive-dependency/&quot; target=&quot;_blank&quot;&gt;&amp;lt;exclusions&amp;gt;&lt;/a&gt; to remove the unwanted jars&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- Add the dependencies for the missing jars&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;This can be a tiring tasks depending on the number of jars you have in your lib. But make sure that you have each one covered and know that why they exists in your app.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;May &amp;nbsp;be this is a late post, most applications might have already been migrated by now. Anyways, better late than never! According to many experts &lt;a href=&quot;http://zeroturnaround.com/rebellabs/java-build-tools-part-2-a-decision-makers-comparison-of-maven-gradle-and-ant-ivy/&quot; target=&quot;_blank&quot;&gt;Gradle is also a good choice&lt;/a&gt;&amp;nbsp;as a build tool for your new project.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/2062008998669345252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2014/02/4-simple-steps-to-migrate-legacy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/2062008998669345252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/2062008998669345252'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2014/02/4-simple-steps-to-migrate-legacy.html' title='4 simple steps to migrate legacy projects from Ant to Maven'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj78mJViu6kWd2S5OTOkm1Gdyn0BlJbs0fXLy5z9Uq_SOTYg-Bq-x6pte39YtEZJTYwUjo3lAyLHuo0YPc4p4ZqejaxdPJcXM34S54smETi5AWqBvqbST-TLTSfsuPjuhVhpmHrarLm3xQ/s72-c/Maven+-+Introduction+to+the+Standard+Directory+Layout.clipular.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-3296722017009277603</id><published>2014-01-02T05:17:00.000-08:00</published><updated>2019-04-18T00:03:48.550-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Why is tomcat a Webserver and not an Application Server</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
Many application developers do not focus much on the infrastructure on which their code runs. When it comes to web applications there are common confusions like what is the difference between webserver and applications server or when to go for a EAR vs WAR file deployment etc...&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
There are many good answers that&amp;nbsp;differentiate&amp;nbsp;between web servers and applications servers like &lt;a href=&quot;http://stackoverflow.com/a/936257/507864&quot; target=&quot;_blank&quot;&gt;this one&lt;/a&gt;. Most of the times the terms Web Server and Application server are used interchangeably.&amp;nbsp;This &lt;a href=&quot;http://howtodoinjava.com/2013/10/03/a-birds-eye-view-on-how-web-servers-work&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt;&amp;nbsp;explains the working of a typical web server.&amp;nbsp;Typically we get confused with the example of Tomcat Server (an example for a web server) having the capability to run the enterprise applications. So, tomcat is a web server or an application server? Let me tell you how I convinced my self regarding this.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Some time back I was struck with the question&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/q/9881611/507864&quot; target=&quot;_blank&quot;&gt;What&#39;s the difference between JPA and Hibernate&lt;/a&gt;&amp;nbsp;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;on stack overflow. I did answer it, but one of the comment lead me to a more detailed understanding of the JavaEE spec and certified servers. If you can understand this then&amp;nbsp;differentiating&amp;nbsp;between the web server and application server is easy.&amp;nbsp;During my investigations I got &lt;a href=&quot;http://stackoverflow.com/a/15997442/507864&quot; target=&quot;_blank&quot;&gt;this article&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;, which discusses the advantages of both.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
A more detailed look in to the meaning JavaEE specification will throw some light in to our discussions. As we know specifications are set of rules. Simply put they contain the interface. Any JavaEE servers which needs to comply to spec needs to have the implementation of these interfaces. You can find the certified JavaEE servers list &lt;a href=&quot;http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. If you are deploying your enterprise applications (means you have JPA, EJB or some technology which is part of Java EE) to the a server which comply to JavaEE then the lib need not contain the API implementation jars. But these are&amp;nbsp;needed&amp;nbsp;if you are using a web server like tomcat for deployment.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
For example, if you use JPA in your applications and deploying it to the &amp;nbsp;Jboss AS 7, then you need any additional jars in the lib. But the same application you want to deploy to the tomcat server then you need to have additional jars to lib that implements the JPA spec may be &lt;a href=&quot;http://www.eclipse.org/eclipselink/&quot; target=&quot;_blank&quot;&gt;eclipselink &lt;/a&gt;or Hibernate. This is what makes JBoss AS 7 an application server and tomcat a web server. Another key difference is that we can not deploy an EAR file to tomcat, it &lt;a href=&quot;http://stackoverflow.com/a/1594818/507864&quot; target=&quot;_blank&quot;&gt;could only handle WAR files&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/3296722017009277603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2014/01/why-is-tomcat-webserver-and-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/3296722017009277603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/3296722017009277603'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2014/01/why-is-tomcat-webserver-and-not.html' title='Why is tomcat a Webserver and not an Application Server'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-955283442745302613</id><published>2013-12-18T04:05:00.000-08:00</published><updated>2013-12-18T04:05:59.837-08:00</updated><title type='text'>Does the View in database reduce the query performance?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;b&gt;Not really!! Here is why...&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
Few days back, I was speaking about one of our newly created Filter API with server side pagination to my friend. In the implementation we were querying the view to get the data. Since the pagination was at the server side, at a time the query will return only 10 records. His question was since views internally going to use the tables for querying, will it end up being less&amp;nbsp;performative? Will it create the result set of all data and then pick the top 10 items?&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
My initial reaction was to agree with question and confess we have an issue. But I was sure that this can not be the case. If this is so then we could have had severe issues. I am not much of a DB guru myself so went and did some research with others to figure out the story behind the scenes. By the way we use MS SQL Server 2008 and I am not sure if this descriptions applies to other database or not.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
The question to ask was. We know that the views are used to simplify other queries or standardize access to data. but do we compromise on speed while doing so?&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
I got a related answer from&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/a/1867979/507864&quot; target=&quot;_blank&quot;&gt;SO&lt;/a&gt;. &lt;i&gt;When an SQL statement references a nonindexed view, the parser and query optimizer analyze the source of both the SQL statement and the view and then resolve them into a single execution plan. There is not one plan for the SQL statement and a separate plan for the view.&lt;/i&gt; So it is fine to use the views for my above use case.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
Further, I got to know about Indexed views from this &lt;a href=&quot;http://stackoverflow.com/q/439056/507864&quot; target=&quot;_blank&quot;&gt;discussions&lt;/a&gt;, which can further improve&amp;nbsp;the performance. Microsoft has a nice documentation on&amp;nbsp;&lt;a href=&quot;http://technet.microsoft.com/library/Cc917715&quot; target=&quot;_blank&quot;&gt;Improving Performance with SQL Server 2005 Indexed Views&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/955283442745302613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/12/does-view-in-database-reduce-query.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/955283442745302613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/955283442745302613'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/12/does-view-in-database-reduce-query.html' title='Does the View in database reduce the query performance?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-5122487458265805742</id><published>2013-10-22T08:42:00.000-07:00</published><updated>2013-10-22T09:20:37.029-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="interviews"/><title type='text'>A MindMap for Java Developer Interviews</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Over the years I have been a&amp;nbsp;panelist&amp;nbsp;in many of the interviews for Java Developers. I have previously written a post titled &lt;a href=&quot;http://www.jyops.blogspot.in/2012/10/top-7-tips-for-succeeding-in-technical.html&quot; target=&quot;_blank&quot;&gt;Top 7 tips for succeeding in a technical interview for software engineers&lt;/a&gt; which covers few of the general guidelines. In this post I will share a mind map containing general topics covered in a Java developer interview. I have prepared this as a general reference for myself to remember the pointers and to keep a common standard across the multiple interviews.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;360px&quot; id=&quot;xmindshare_embedviewer&quot; scrolling=&quot;no&quot; src=&quot;http://www.xmind.net/embed/5VfC?size=small&quot; width=&quot;600px&quot;&gt;&lt;/iframe&gt;

&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.xmind.net/&quot; style=&quot;font-family: Verdana, sans-serif; line-height: 22px;&quot; target=&quot;_blank&quot;&gt;XMind&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif; line-height: 22px;&quot;&gt;&amp;nbsp;gives a nice listing of the map. You can find the map&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.xmind.net/m/5VfC/&quot; style=&quot;font-family: Verdana, sans-serif; line-height: 22px;&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif; line-height: 22px;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Here is Image which you can download and use.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;img border=&quot;0&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxaS9Krn909mMd5QcnYcb7DCOmMx9imt2onIBiiq4IavE72rWoR10O77W-2sH1JcsjwdARv9Ld-01pa-2IWNNpaed-F6JMetyBXLVTe5TaNRWTfY6c_mIrI7hf288zL9gJE9bSkhYs9bs/s640/Java-Topics.jpg&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #0000ee; font-family: Verdana, sans-serif;&quot;&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Finally here is a old fashioned tabbed content list which is easier to copy paste.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Java-Topics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif; line-height: 22px;&quot;&gt;OOPs&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Encapsulation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Abstraction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Inheritance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Interface - Abstract Class&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;Casting&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;IS-A vs HAS-A Relationships&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Aggregation vs Composition&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Plymorphism&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Method overloading vs Method Overloading&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Compile time vs Runtime&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Threads&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Creating threads&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Multitasking&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Synchronization&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Thread Transitions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Marker Interface&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Serialization&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Clonnable&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Shallow copy vs Deep Copy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Collections&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Map, List and Set&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Equals - Hashcode&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Legacy - Synchronized Classes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;JVM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Stack vs Heap Memory&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Garbage Collection&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;JRE, JVM, JDK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Class loaders&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Exception&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Checked Vs Unchecked Exceptions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Exception handling best practices&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;try, catch, finally, throw, throws&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;APIs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Files&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;String - StringBuffer - String Builder&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Java IO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;XML&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;SAX Based &amp;amp; DOM Based&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;JAXB - Java API for XML Binding&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;Access specifier&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Access modifier&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;public&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;deafult&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;private&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;final&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;static&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;synchronized&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;abstract&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;transient&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;volatile&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&amp;nbsp;Inner/Nested Classes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;JavaEE Basics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Packaging the Applications&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;WAR&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;EAR&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Basics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;MVC&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Servlets&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;Listeners&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;Lifecycle&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;JSPs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;APIs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;JPA&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;JAX-WS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;SOAP, WSDL Webservices basics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;Contract first vs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;JAX-RS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;RESTful &amp;nbsp;and its advantages&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;JSF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 22px;&quot;&gt;This is a work in progress and I hope to refine it further. Let me know if you have any comments.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/5122487458265805742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/10/a-mindmap-for-java-developer-interviews.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/5122487458265805742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/5122487458265805742'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/10/a-mindmap-for-java-developer-interviews.html' title='A MindMap for Java Developer Interviews'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxaS9Krn909mMd5QcnYcb7DCOmMx9imt2onIBiiq4IavE72rWoR10O77W-2sH1JcsjwdARv9Ld-01pa-2IWNNpaed-F6JMetyBXLVTe5TaNRWTfY6c_mIrI7hf288zL9gJE9bSkhYs9bs/s72-c/Java-Topics.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-711366096514890725</id><published>2013-10-09T07:54:00.001-07:00</published><updated>2013-10-09T07:54:32.588-07:00</updated><title type='text'>On the way to a blogger - My Journey with this blog so far</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;storify&quot;&gt;
&lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;no&quot; height=&quot;750&quot; src=&quot;//storify.com/manupk12/on-the-way-to-a-blogger/embed&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;&lt;script language=&quot;javascript&quot; src=&quot;//storify.com/manupk12/on-the-way-to-a-blogger.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;noscript&gt;[&lt;a href=&quot;//storify.com/manupk12/on-the-way-to-a-blogger&quot; target=&quot;_blank&quot;&gt;View the story &quot;On the way to a blogger&quot; on Storify&lt;/a&gt;]&lt;/noscript&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/711366096514890725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/10/on-way-to-blogger-my-journey-with-this.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/711366096514890725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/711366096514890725'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/10/on-way-to-blogger-my-journey-with-this.html' title='On the way to a blogger - My Journey with this blog so far'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6848084191352741072</id><published>2013-09-21T22:25:00.001-07:00</published><updated>2019-04-17T23:53:58.049-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="speaking"/><category scheme="http://www.blogger.com/atom/ns#" term="technical debt"/><title type='text'>TalkNotes - How can Agile help you in clearing the technical debt?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;This post is a write up to my &lt;a href=&quot;http://lanyrd.com/scpxdc&quot; target=&quot;_blank&quot;&gt;talk&lt;/a&gt; titled &quot;&lt;b&gt;How can Agile help you in clearing the technical debt?&lt;/b&gt;&quot; presented at the &lt;a href=&quot;http://www.meetup.com/ScrumBangalore/events/130965292/&quot; target=&quot;_blank&quot;&gt;Scrum Bangalore Meetup 2013&lt;/a&gt;. It was a short talk for 30 Minutes, So thought of a write up to&amp;nbsp;elaborate the ideas on the slides.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;486&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/26234545&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;597&quot;&gt; &lt;/iframe&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/pkmanu/how-can-agile-help-you-in-clearing-the-technical-debt-26234545&quot; target=&quot;_blank&quot; title=&quot;How can agile help you in clearing the technical debt&quot;&gt;How can agile help you in clearing the technical debt&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/pkmanu&quot; target=&quot;_blank&quot;&gt;Manu Pk&lt;/a&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;text-indent: -0.3in;&quot;&gt;Defining Technical Debt&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;As per &lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Technical_debt&quot; style=&quot;font-family: Verdana, sans-serif; text-align: justify;&quot; target=&quot;_blank&quot;&gt;Wikipedia&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;, &quot;&lt;/span&gt;&lt;i style=&quot;font-family: Verdana, sans-serif; text-align: justify;&quot;&gt;Technical debt metaphor referring to the eventual consequences of poor or evolving software architecture and software development within a code base&lt;/i&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;&quot;.&amp;nbsp;Technical debt is most understood when it is compared with Cost of Change of software. More Debt means the cost of introducing a change in your system is more.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;The term Technical Debt was coined by Ward Cunningham in the year 1992. He used the term to explain to his manager about a particular refactoring which he wanted to do. Since he was working in the&amp;nbsp;financial industry it was easy to communicate in terms of debt. Ward explains more about the&amp;nbsp;metaphor&amp;nbsp;&lt;a href=&quot;http://c2.com/cgi/wiki?WardExplainsDebtMetaphor&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&amp;nbsp;The term is immensely popular in communication of the importance of code refactoring to the business and stake holders.&amp;nbsp;Like financial debt technical debt is some times unavoidable but we should take steps to minimize it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzBLdDh1ajDd8haUHz0i5QJILe5YaWcQD_pfj61iZttmGCvies3XTidk02lEck2WNqmlM-rcdstLXzPBKhjwhhbiaHEnPYgL3GkPICZJX79k9GcZXZKq5vVCP8MBI91ZcbpMI8YgAkvyc/s1600/tech-debt-illst.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzBLdDh1ajDd8haUHz0i5QJILe5YaWcQD_pfj61iZttmGCvies3XTidk02lEck2WNqmlM-rcdstLXzPBKhjwhhbiaHEnPYgL3GkPICZJX79k9GcZXZKq5vVCP8MBI91ZcbpMI8YgAkvyc/s640/tech-debt-illst.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
As you can see in the above image when you have technical debt in your system you could either pay the interest or pay back the principle. When we do regular stories we do bit of &quot;extra&quot; work than what ideally needed due to the technical debt. This is an example of the interest payment. It is important that we take some time and effort to pay back the principle by refactoring and cleaning up of the code.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Technical Debt in Agile Context&lt;/span&gt;&lt;/h4&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;The below principle from the&amp;nbsp;list of&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://agilemanifesto.org/principles.html&quot; style=&quot;font-family: Verdana, sans-serif; text-align: justify;&quot;&gt;agile principles&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;&amp;nbsp;was the best one I could find which refers to clearing&amp;nbsp;technical debt&amp;nbsp;&quot;&lt;/span&gt;&lt;i style=&quot;font-family: Verdana, sans-serif; text-align: justify;&quot;&gt;Continuous attention to technical excellence and good design enhances agility&lt;/i&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;&quot;. In agile projects working software has a lot of emphasis but this in no way implies that the intrinsic value of software can be compromised. As we push for more and more features it is important that we take time to look back at the health of the application. So, make make sure that your agile projects do not become Fragile as it grows.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;There are lots of ways to deal with technical debt. I want to talk about 3 simple steps that we have tried in our projects.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;1. Tools - Your must have defense&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;color: #222222;&quot;&gt;One of the major improvement with the agile development practices is the widespread usage of&amp;nbsp;continuous integration (CI). Your CI&amp;nbsp;environment should be configured to measure the health of the application. It should include the report from static code analysis and test coverage applications. &lt;a href=&quot;http://www.sonarqube.org/&quot; target=&quot;_blank&quot;&gt;SonarQube&lt;/a&gt;&amp;nbsp;is a god platform where you can create a dashboard and see results from the tools mentioned above. It also has a plugin to view the technical debt.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;Apart from the tools you should be using g&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;ood programming practices and guidelines.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #222222;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;Negotiating with Product Owner&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif; text-align: justify;&quot;&gt;The second techniques that we have tried to minimize technical debt is to negotiate with the product owner and take him on board in the technical improvements that we wanted to do. &amp;nbsp;You have to&amp;nbsp;Use the opportunity of Change requests to clean up the functionality. We had a module in our application with lots of bugs. There was a major change request which was planned on that module. After much&amp;nbsp;discussions&amp;nbsp;we identified that it would be much easier to rebuild the module than fixing the issues. Once we rebuild the change request was 75% easier to implement compared to the old code.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;This means that we have to evaluate the possibility of refactoring with every opportunity and go for it when the time is right. It is the professional responsibility of a developer to communicate dept of technical debt in the application and we should take all steps possible to minimize it.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;We can also have technical Stories in Release planning. Contrary to a user story, a senior developer should describe the success criteria of the story. This is another case where you need to get your product owner on board.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;b&gt;3. Trying out new Stuff&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;In our projects most things can be done multiple ways and we have to choose one of them. There are also situations where we are not sure about the complexity of the task performed and story point estimation is difficult.&amp;nbsp;We can use spike to deal with such situations. A spike is an experiment that allows developers to learn just enough about something unknown in a user story, e.g. a new technology, to be able to estimate that user story. A spike must be time-boxed. This defines the maximum time that will be spent learning and fixes the estimate for the spike.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;A daemon thread is a low priority thread that is running on the operating systems. We have used the same&amp;nbsp;strategy to do a major change in our application. It was upgrading our frameworks (Spring, Hibernate and Tapestry) to their latest versions. Since it is a time consuming activity, we do not want to stop everything else and work on it. So, we choose to keep doing it as a low priority tasks and it took us 10 sprints to complete. Since the team&amp;nbsp;continuously&amp;nbsp;delivered features during this period it was very easy to get the buy in from product owner.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;Useful Links:-&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;text-indent: -0.3in;&quot;&gt;1.&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://youtu.be/8kotnF6hfd8&quot; style=&quot;text-indent: -0.3in;&quot;&gt;Martin Fowler&#39;s Talk&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;verdana&amp;quot; , sans-serif;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
2.&amp;nbsp;&lt;a href=&quot;http://martinfowler.com/bliki/TechnicalDebt.html&quot;&gt;Martin Fowler on Technical Debt&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
3.&amp;nbsp;&lt;a href=&quot;http://www.scrumalliance.org/community/articles/2013/august/agile-architecture-emerges-or-does-it&quot;&gt;Agile Architecture Emerges or Does It&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
4.&amp;nbsp;&lt;a href=&quot;http://www.energizedwork.com/weblog/2011/11/using-spikes&quot;&gt;Using Spikes&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
5.&amp;nbsp;&lt;a href=&quot;http://youtu.be/lEKvzEyNtbk&quot;&gt;Steve McConnell’s Talk&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
6.&amp;nbsp;&lt;a href=&quot;http://www.ontechnicaldebt.com/&quot;&gt;http://www.ontechnicaldebt.com&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
7.&amp;nbsp;&lt;a href=&quot;http://c2.com/cgi/wiki?WardExplainsDebtMetaphor&quot;&gt;Ward Explains Debt Metaphor&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Note:- There are many ways to define and minimize technical debt. I have discussed few ways that we have successfully tried. You can go through the above links to find more information and choose the best methods that suits you.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6848084191352741072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/09/how-can-agile-help-you-in-clearing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6848084191352741072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6848084191352741072'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/09/how-can-agile-help-you-in-clearing.html' title='TalkNotes - How can Agile help you in clearing the technical debt?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzBLdDh1ajDd8haUHz0i5QJILe5YaWcQD_pfj61iZttmGCvies3XTidk02lEck2WNqmlM-rcdstLXzPBKhjwhhbiaHEnPYgL3GkPICZJX79k9GcZXZKq5vVCP8MBI91ZcbpMI8YgAkvyc/s72-c/tech-debt-illst.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-8551874090570855032</id><published>2013-05-23T07:00:00.000-07:00</published><updated>2013-05-23T07:00:37.222-07:00</updated><title type='text'>GOF Design Patterns Notes on Trello!</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Recently I was&amp;nbsp;reviewing Gang of Four Design Patterns and created a &lt;a href=&quot;https://trello.com/&quot; target=&quot;_blank&quot;&gt;Trello&lt;/a&gt;&amp;nbsp;board for the same. Well, &lt;a href=&quot;https://trello.com/board/design-patterns/51837e5004d981c70c00264a&quot; target=&quot;_blank&quot;&gt;Here&lt;/a&gt;&amp;nbsp;is how it look like!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Hope it could be useful for others as well.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://trello.com/board/design-patterns/51837e5004d981c70c00264a&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;313&quot; id=&quot;last_uploaded_clip&quot; src=&quot;http://www.clipular.com/c?6604053=HrZtW1VwQmsM6n2VbHAkWI3NcDE&amp;amp;f=.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/8551874090570855032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/05/gof-design-patterns-notes-on-trello.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/8551874090570855032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/8551874090570855032'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/05/gof-design-patterns-notes-on-trello.html' title='GOF Design Patterns Notes on Trello!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-6652398365179025705</id><published>2013-04-29T07:24:00.001-07:00</published><updated>2019-04-18T00:02:56.398-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="books"/><title type='text'>NoSQL Distilled : Book Review</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
I have finished reading the book titled &quot;&lt;b&gt;NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence&lt;/b&gt;&quot; written by &amp;nbsp;&lt;b&gt;&lt;i&gt;Martin Fowler and Pramod J. Sadalage&lt;/i&gt;&lt;/b&gt; &amp;nbsp;recently and thought of a writing short review. First of all it short book and you can run through the pages fast. As the title says, the book is really an introduction of No SQL databases.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.goodreads.com/book/show/13610343-nosql-distilled&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://d.gr-assets.com/books/1355118348l/13610343.jpg&quot; height=&quot;320&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;i&gt;It was..&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;i&gt;The number one reason for the use of NoSQL databases is not performance and should be our use case&lt;/i&gt;. This means if our data model does not fit well in to the relational model, rather than twisting the data we can choose alternate data stores. This is&amp;nbsp;absolutely&amp;nbsp;critical if you want NoSQL to be used in most of the mid sized enterprise applications. &amp;nbsp;Also companies will start to believe that they should consider NoSQL it even if they are not Google or&amp;nbsp;Amazon.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
Normally the technology&amp;nbsp;books written by its creators of it will only focus on the advantages of using it. It can be quite an issue if you do not do proper research before choosing your application architecture. Since both Martin and Pramod do not belong to this category, they does a fair evaluation of various choices available to us. The section which says where to use it and where not to use is particularly impressive on that front.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
Even though the book is selling you a new idea of NoSQL databases, it does not plays down the significance and importance of existing RDBMS. The book also brings light to some of the fundamental&amp;nbsp;trade offs in the world of data stores&amp;nbsp;like &amp;nbsp;consistency, availability and performance.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;i&gt;and is also..&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
When I was reading the book I thought that&amp;nbsp;Polygot persistence is about using multiple data stores in same application depending on the use cases. But authors also seems to suggest that applications should wrap around the data stores with services ( like web services or REST). If we need to do this ideally we could only have one data store accessed by one service. Which would conflict the first statement. I am not sure about the&amp;nbsp;reverence&amp;nbsp;this question but I would love to have read more about using the different data store in the same application and its pros and cons.&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;i&gt;I mean to say,&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: justify; widows: 2;&quot;&gt;
This is a very great book if you are &amp;nbsp;looking get in to wild jungle of NoSQL databases. The authors does a great job in giving the brief introduction and making sure the basics are covered.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/6652398365179025705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/04/nosql-distilled-book-review.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6652398365179025705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/6652398365179025705'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/04/nosql-distilled-book-review.html' title='NoSQL Distilled : Book Review'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-7786113622769928049</id><published>2013-04-21T00:43:00.000-07:00</published><updated>2013-04-21T00:43:25.560-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bestpractice"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Package your classes by Feature and not by Layers</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Most of the enterprise Java applications share some similarities in their design. Mostly the packaging of these applications are driven by the framework used by them like Spring, EJBs or Hibernate etc. Alternatively you can group you packages by features. Like any other item regarding modeling this is not free from any issues. Lets discuss some trade-off and how get around them. In this post we will discuss the pros and cons of both approaches against common usage scenarios.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Package By Layer (PBL)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;This is a the first thing that developers do when the create an enterprise application in to split it to number of layers like DAO, SERVICE, VIEW etc.. This gives nice separation of code when we use different frameworks at different layers. For example if I were to use Hibernate, Spring and JSF, then I will have all my Hibernate dependent code in the DAO layer and JSF related code in the VIEW Layer. This is sort of good in case I need to migrate to a new framework only at the view layer or DAO Layer.
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9M7CvGAd8nsormv9EmAiNgBEjKJrr1vZif4vlIKmPbe-D3ZKPVP7BHBd2YvqEkxHHvQ6T5TMULpJlG1pMO1DkwV3UgsIOSzOmkS_dG6B7ipEMl6MsA4yTtii47aBHsAPuVJNhwisqZY/s1600/Layer+by+package.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9M7CvGAd8nsormv9EmAiNgBEjKJrr1vZif4vlIKmPbe-D3ZKPVP7BHBd2YvqEkxHHvQ6T5TMULpJlG1pMO1DkwV3UgsIOSzOmkS_dG6B7ipEMl6MsA4yTtii47aBHsAPuVJNhwisqZY/s1600/Layer+by+package.jpg&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Package By Feature (PBF)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Package-by-feature uses packages to reflect the feature set. It places all items related to a single feature (and only that feature) into a single directory/package. This results in packages with high cohesion and high modularity, and with minimal coupling between packages. Items that work closely together are placed next to each other. They aren&#39;t spread out all over the application.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;This also increases coherence as a large percentage of a the dependencies of a class are located close to that class.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcz9Zd45_eU9c_g2HaiMAuVPa408YYmv9aPLnteZ3QiwSm3SLU32fSH8V54kS22RYCFdqXQnerEMQ6fMgWewuuXU7U6nR28mohYBVMoOQ5ikZ-7oPSKCn8GCtmkfrMx0Jh3pPxTc2u7xU/s1600/Layer+by+package.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcz9Zd45_eU9c_g2HaiMAuVPa408YYmv9aPLnteZ3QiwSm3SLU32fSH8V54kS22RYCFdqXQnerEMQ6fMgWewuuXU7U6nR28mohYBVMoOQ5ikZ-7oPSKCn8GCtmkfrMx0Jh3pPxTc2u7xU/s1600/Layer+by+package.jpg&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Comparing the approaches&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
Let me compare both the approaches in below dimensions.
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
1. Adding a new Feature.
&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
In case of PBL code has to be added to VIEW, SERVICE and DAO Layers and it can be tedious. PBF solves this problem by grouping all the code related to same feature in to a single directory.
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
2. Changing a framework used.
&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
As discussed already PBL makes it easier to change a framework as all the related code are kept at same place. Here we know exactly the scope of the change and its impact. In case of PBF we need to dig into all the feature set to see the framework related classes.
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;
If you choose to migrate the framework module by module, then it could be argued that PBF is better than PBL.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3. Code Navigation.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;As developers needs to work on the features most of the time using PBF is easier for code navigation. When you know exactly know what has to be done its not much advantage.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;4. Keeping the Common Code.
&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Every application will have some components which will be reused across the features ie, the features are not always exclusive. In such case if we package all the features&amp;nbsp;separately the interactions between them can be quite messy. As a general principle we need to reduce such interactions and increase the cohesion inside the package. We can get around the situation be adding such entities to a common package. This approach is used in many projects including Hibernate.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; text-align: -webkit-auto;&quot;&gt;Most application will have 4 types of classes. ie,&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;1. Domain Objects&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;2. Business Services&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3. Data Retrieval Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;4. Data Representation Logic&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;If we use PBF it&amp;nbsp;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;gives us a good structural representation but does not give any functional representation. We need our architecture to resemble the problem domain. So its better to use Package By Feature style. We could internally classify the classes by using naming&amp;nbsp;conventions like &lt;i&gt;MyFeatureDAO&lt;/i&gt; or &lt;i&gt;MyFeatureService&lt;/i&gt;&amp;nbsp;. This way we could communicate the intend of the classes.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;I have found some discussions on this topic and hope that might also help you choose.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;1. &lt;a href=&quot;http://www.javapractices.com/topic/TopicAction.do?Id=205&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;Java Practices Article&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://java.sys-con.com/node/2604365&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;Lessons to Learn from the Hibernate Core Implementation&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;3.&amp;nbsp;&lt;a href=&quot;http://java.dzone.com/articles/how-changing-java-package&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;How Changing Java Package Names Transformed my System Architecture&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;4.&amp;nbsp;&lt;a href=&quot;http://kkapelon.github.com/presentations/feature.pdf&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;Presentation By &amp;nbsp;Kostis Kapelonis&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;5.&amp;nbsp;&lt;a href=&quot;http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;The Principles of OOD By Uncle Bob&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;6.&amp;nbsp;&lt;a href=&quot;http://stepaheadsoftware.blogspot.in/2012/06/java-package-name-structure-and.html&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;Article says its Better to Use Package By Layer&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;7. &lt;a href=&quot;http://stackoverflow.com/q/11733267/507864&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;Question on SO Is package by feature approach good?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/7786113622769928049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/04/package-your-classes-by-feature-and-not.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/7786113622769928049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/7786113622769928049'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/04/package-your-classes-by-feature-and-not.html' title='Package your classes by Feature and not by Layers'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9M7CvGAd8nsormv9EmAiNgBEjKJrr1vZif4vlIKmPbe-D3ZKPVP7BHBd2YvqEkxHHvQ6T5TMULpJlG1pMO1DkwV3UgsIOSzOmkS_dG6B7ipEMl6MsA4yTtii47aBHsAPuVJNhwisqZY/s72-c/Layer+by+package.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6570091700813814076.post-3581060701583031067</id><published>2013-03-20T00:28:00.000-07:00</published><updated>2013-03-20T00:38:25.828-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nosql"/><title type='text'>A 3 Step Guide to Getting Started with NoSQL</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif;&quot;&gt;I have been looking in to NoSQL databases for few months and would like to share my&amp;nbsp;experience&amp;nbsp;with it. This is a post might help you if you indent to start learning about the NoSQL Databases. I would try to link the resources which I found useful here.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; font-size: small; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;Step 1: What is NoSQL?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable. The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more. So the misleading term &quot;nosql&quot; (the community now translates it mostly with &quot;not only sql&quot;).&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;As seen on &lt;a href=&quot;http://nosql-database.org/&quot; target=&quot;_blank&quot;&gt;NoSQL-Database.org&lt;/a&gt;.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Tahoma; orphans: 2; text-align: -webkit-auto; widows: 2;&quot;&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;a href=&quot;http://martinfowler.com/&quot; target=&quot;_blank&quot;&gt;Martin Flower&#39;s&lt;/a&gt; &lt;a href=&quot;http://martinfowler.com/nosql.html&quot; target=&quot;_blank&quot;&gt;NoSQL page&lt;/a&gt; is a good starting point. His below talk on Goto Conference explains the need and structure of NoSQL data stores. Martin and Pramod has written a book titled &amp;nbsp;&quot;&lt;a href=&quot;http://www.goodreads.com/book/show/13610343-nosql-distilled&quot; target=&quot;_blank&quot;&gt;NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence&lt;/a&gt;&quot; &amp;nbsp;and is a good read. It&amp;nbsp;summarizes his talks and other blog post into a book.&amp;nbsp;&amp;nbsp;Martin has been an&amp;nbsp;influential&amp;nbsp;speaker on this topic and has written number of articles on this. I have read and seen many introductions but his work helped me to get things in to my head.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/qI_g07C_Q5I&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;If you likes to view the slides, then the below presentation by&amp;nbsp;Tobias Lindaaker on slideshare might inspire you. He gives similar ideas.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;486&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/3735857?rel=0&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;597&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/thobe/nosql-for-dummies&quot; target=&quot;_blank&quot; title=&quot;NOSQL for Dummies&quot;&gt;NOSQL for Dummies&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/thobe&quot; target=&quot;_blank&quot;&gt;Tobias Lindaaker&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;MongoDB has an online course &lt;a href=&quot;https://education.10gen.com/courses/10gen/M101J/2013_Spring/info&quot; target=&quot;_blank&quot;&gt;MongoDB for Java Developers&lt;/a&gt;&amp;nbsp; which is really useful if you are interested in trying out things.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, sans-serif; font-size: large;&quot;&gt;Step 2: How and for what are NoSQL used in Real world?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Once you have some idea, try to find the usage patterns. The above presentations will give lot of information on how these systems are used. You could go through the below links,&amp;nbsp;which explains how specific&amp;nbsp;business problems are solved using NoSQL. This is important because we could easily relate the case studies and get more insights into the capabilities of these systems.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;1. &lt;a href=&quot;http://www.10gen.com/customers&quot; target=&quot;_blank&quot;&gt;MongoDB Customers page&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;2. &lt;a href=&quot;http://wiki.apache.org/hadoop/PoweredBy&quot; target=&quot;_blank&quot;&gt;Powerd By Haddop&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;3. &lt;a href=&quot;http://www.neotechnology.com/customers/&quot; target=&quot;_blank&quot;&gt;Neo4J Customers Page&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; font-size: large;&quot;&gt;Step 3 : Find Usage Patterns that you could work on!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;Once you have reached this point, you should try and implement the concepts. Look back at the application that you are working on and see if there is a need for an alternative data store. Do you store Product&amp;nbsp;recommendations? Do you have issues with&amp;nbsp;heterogeneous data? Can your application compromise ACID model for scalability? Do you store XML files or Images on you relational DB?&amp;nbsp;&amp;nbsp;These are some of the questions that you could ask. This way you could determine if there is a serious need of a investigation for a alternative&amp;nbsp;persistence mechanisms. This&amp;nbsp;&amp;nbsp;is in no way means removing the RDBMS completely but moving to a &lt;a href=&quot;http://martinfowler.com/bliki/PolyglotPersistence.html&quot; target=&quot;_blank&quot;&gt;polygot &lt;/a&gt;structure of data stores.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Trebuchet MS, sans-serif;&quot;&gt;If there is no opportunity to try out these concepts in your work, you could create your own test projects and implement them. This way you would encounter problems and will learn from them.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.manupk.com/feeds/3581060701583031067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.manupk.com/2013/03/a-3-step-guide-to-getting-started-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/3581060701583031067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6570091700813814076/posts/default/3581060701583031067'/><link rel='alternate' type='text/html' href='http://blog.manupk.com/2013/03/a-3-step-guide-to-getting-started-with.html' title='A 3 Step Guide to Getting Started with NoSQL'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/qI_g07C_Q5I/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>