In the last article, we witnessed how a simple task of building a static website can throw some unique challenges. Every application has its own quirks which need special attention and hence an architect must not hesitate to reiterate the solution. An architect must spend rigorous time on investigating the functional aspects of an application. What may sound a brilliant solution for one problem, may not be fit under all circumstances. There was no better era than what we are witnessing now in the architecture space. People are discussing Microservices architecture, Event sourcing, Serverless architecture, Blockchain etc., each trying to solve problems enforced by expectations placed by today’s Problem domain. Choosing an incorrect pattern or architecture style will lead to many problems including rigid systems, unmanageable infrastructures, traceability issues, debugging challenges, upgrade chaos. The list is unending and most of us have already experienced pain at some point in time. With this article, we will raise the expectation bar than the previous problem and look at poor architecture built for Managing Patient Record, Reminder system.
There are too many articles, videos sharing experiences about the unending ocean of technologies, each with an opinion about how they built the best in the class software which eventually helped businesses to grow and achieve maximum customer satisfaction. In a quest to understand, what it really takes to build a quality software, I realized my initial experiments were nothing but series of failures. With each experience, I could gain insight about how things can be strengthened and how ignorance can lead to disaster. With the series of “Failed Architecture”, I will touch-base on various requirements and attempt to solve the problems. With each solution, we will also explore its trade-offs and how we can mitigate it with a better approach.
To better understand, let’s start with problem definition
Bob is a commercial artist and he loves to showcase his work to the entire world. He decides to build a simple website which will provide an introduction about him and his art. All the content will be uploaded at the time of building the site and there will be minimal updates afterward. Bob being popular around the world, expects huge traffic flowing to his site. Bob thinks Jim (our architect) is best suited for the job. Bob also says that he really not interested in administering this site, so keep it as simple as possible – no admin stuff.
In continuation of Part – I, today I am presenting additional sources that helped me to strengthen my understanding of AWS cloud. Don’t assume that just completing one single course and practicing few question sets will help you to achieve the certification.
In-depth Coverage and Question Sets
After completing Ryan’s course, I felt the need of exploring additional courses. This led me to two courses offered by Chandra Lingam. The essence of these courses is that it covers a lot of granular things along with rich question sets. The course is divided into 2 parts. First part consists of 300+ videos totaling more than 17+ hours, with close to 45+ question sets each question set having an average of 10 questions, so in total 450+ questions. The course consists of an explanation of various AWS services along with lab demonstration.
Amazon Web Services Certified Solutions Architect Associate
Last few months, I was focused on preparing myself to achieve AWS certification – Solution Architect Associate. Having almost no clue from where to begin, I was bit anxious, if I should really take up this challenge. In my past life, I explored few Cloud solutions like AWS, Azure, Digital Ocean, Red Hat Open Shift, IBM BlueMix, Vultr,.. Period! (Don’t wonder, why Google cloud is not in the list, sorry, but it never got me excited. Wait, there is still hope). But beyond spinning up few VMs and toggling some features, my experience in Cloud remained limited. This is what triggered me to spread my wing and I decided to go for the certification. Here is my attempt, to share how I started this journey, the experiences that I had, sources that helped to learn and prepare for certification. An advice – read no further, if you are looking for shortcuts like Exam dumps, actual test questions. You will be disappointed. Before we proceed, – I completed AWS Solution Architect Associate certification on 15th June 2017 and my score was 92%.
Most of the applications require notifications to be sent to stakeholders (users/administrators/owners) about application events. The notifications may be in the form of SMS, showing popup messages or email. Out of the various notification options described earlier, Email is the most traditional option. In case of Java, the built-in package of javax.mail provides standard APIs to send email including features of Sending attachments, bcc etc.
While there are Open Source / Freeware / Commercial email servers are available, it is always inconvenient to setup a SMTP server for development. On top of that, security policies at Organization level, prevent developers from accessing Enterprise Email server for development testing. This forces, either commenting code responsible for sending email or turning off the feature in development mode. Few, prefer to wrap an exception due to Email server unavailability and ignore it completely. Here is the list of side-effects, one can notice due to ignoring such a crucial functionality.
PDF is a convenient way of printing the output and sharing the data with application users. Its ability to scale as per display without distorting the contents, is considered to be the strongest feature over other output formats. As per application requirements, it also becomes necessary to generate PDF at runtime. There are many options, available to do so. Either use reporting tools like Jasper and then using reporting API generate the output in PDF OR if you wish to have finer controls over PDF generation use programming API like iText. iText uses AGPL for Open Source, and it can be pretty fatal, if you really don’t understand its legal terms. Contact someone who understands Open Source licenses. Most of the time, developers forget to pay attention to the licensing model. Developers usually don’t understand what Open source really means, most of them feel its free like air they breath and ignorantly fall into the trap of License violation. Usage of any Open Source software without paying attention to License, can result into lawsuit against development company or hefty payments to the governing company of Open source software. Unfortunately the Illiteracy rate is way too high. Why, I am bragging about all of this, simply the reason is – if you are using iText, be ready to either Open Source your software or pay for use (Once again pay attention to details, don’t just buy any license). OK! so is there really any other option, than just paying bucks. Yes, there is and as usual, Apache is here for your rescue – Apache PDFBox.
Are you hosting a Web site, which will manage customer data? Is there any sensitive information getting captured on your Web site? If Yes, you must definitely protect your Web site and the trust of your customers by enabling secured, encrypted communication. As a first step towards enabling HTTPS is to install valid certificate from Certification Authority (CA). It has been a tedious process to configure secure channel and a recurring fee also makes people think about the cost of overall process. But thats not a problem anymore, if you wish to enable basic security, LetsEncrypt is here. I came across, LetsEncrypt few days back and found its the most easiest and hassle free approach to enable encryption for a website. And with few steps, I had a website with HTTPS mode ON. Throughout the process of configuring and hosting a sample website, I made use of Vultr, Dot.tk and LetsEncrypt offcourse. You can follow this entire process, without spending a penny. Lets start.
Are you developing web application? OR building mobile app? what you commonly require is a backend providing the ability to save user data and provide meaningful insight. In addition to storage and retrieval of the data, a secured access control mechanism is required to ensure data integrity. There are multiple approaches to handle the requirement and the implementation varies based on the chosen programming language. Usually, the concepts used to solve this problem fall into following broad categories
- Proprietary Implementation (Servlets, MVC Controller, Remote Object etc.)
- SOAP services
- API development using REST
The intention of this article is to suggest some of the concepts that must be considered while designing REST API. Most of the time, my interactions with Developers and even some of the architects, led me to a realization that most people have limited or no knowledge of REST API design. Some refer merely exposing a data using either XML/JSON is REST, while some think just using HTTP methods is sufficient to build REST based API. But that’s not the entire truth.
Having worked on Java and Spring for almost a decade, my programs are naturally inclined towards using dependency injection. Recently, I started using NodeJS for developing one of our initiative and I felt modularizing my code instead of building one monolithic program. Soon, I realized that in order to keep my modules loosely coupled with each other, I need to use dependency injection and I started searching for framework. While I tumbled across many frameworks, which claims to provide Dependency Injection, none of them really fit to the expectation that I had. Also I came across many posts emphasizing that NodeJS programs do not require separate Dependency Injection frameworks and one can easily tweak require method to achieve desired results. I personally, didn’t like the suggestions and hence I thought of developing one of my own – Zander.
Up until now, REST service documentation was really painful job (believe me, I have burnt my hands with JAX-RS, JAX-WS). So called XML generated by REST hosted servers was partially helpful to understand the operations and skeleton of data structure. Beyond that, the separate documentation in order to understand the sample values and detailed information about operation was still required. Well that’s not all, even if one wants to try out the API, there was need of having separate client. Well, for all this time we continued to create beautiful documentation manually, which definitely was plagued with problems like syncing, version maintenance etc. Luckily, the problem seems to be fading away with the framework, I came across in recent times – Swagger.