Skip to main content


Why Business Rules Engine?

"A good DSL minimizes the 'communication gap' between a domain concept and the code that implements it" - Robert C. Martin
A Use Case It looks like adopting a new technology is always driven by a business need.

The organizations, such as banks, have their own business processes (such as data gathering and document management). These processes are different from others but usually the differences are not big. How do we build a product which can be reused the similar features but still be adaptable with the specific requirements of each bank? Then, the answer is we should have a library/framework. There is an idea that we can implement this library/framework by using a business rules engine. Which has the following benefits:
Be able to modify implementation of business domain at runtime (such as XML, CSV)Source code is more readable for both developers and domain experts. Therefore, source code can be consider it as a document Sine Business Rules Engines support for Dom…
Recent posts

Template Method Pattern: Don't Call Us, We'll Call You!

So far, the Template Method has been my most used design pattern. That is the reason why this post is quite long. J
Definition from Wiki The Template Method defines the program skeleton of an algorithm in an method, deferring some steps to subclasses. It lets one redefine certain steps of an algorithm without changing the algorithm's structure.

A Real World Use Case Imagine that you have many different kinds of document. You want to generate a pdf file from a corresponding word template. Each type has its own small modifications but the main process for document generating is the same.

We apply Template Method for this case. We define a final method including some steps (such as preparing for content, generating file) at a superclass. There are three possibilities for these steps at subclasses:
Must be overridden: abstract methods.Not mandatory to be overridden: default protected methods.Can not be overridden: default private methods. Dissecting the Pattern Simply, we can see the f…

DevOps for Dummies

Everyone talks about it, but not everyone knows what it is.
Why DevOps? In general, whenever an organization adopts any new technology, methodology, or approach, that adoption has to be driven by a business need.

Any kind of system that need rapid delivery of innovation requires DevOps (development and operations). Why?
DevOps requires mechanisms to get fast feedback from all the stakeholders in the software application that's being delivered.DevOps approaches to reduce waste and rework and to shift resources to higher-value activities.DevOps aims to deliver value (of organization or project) faster and more efficiently. DevOps Capabilities The capabilities that make up DevOps are a broad set that span the software delivery life cycle. The following picture is a reference architecture which provides a template of a proven solution by using a set of preferred methods and capabilities.

My Remarks Okay, that sounds cool. What does it simply mean, again? The following is a simple case…

Google I/O 2017 Notes

WOW! How meaningful this below video explains about the name of  "I/O".
Sundar Pichai talked a lot of Machine Learning Machine Learning is a very hot trend these days. Google uses it for their products.
Google Assistant: Easily booking an online meal by talking with Google Assistant like a staff of partners, for example.Google Home: Hands-free calling.Google Photos: sharing suggestion, shared library, photo books and google lens.Youtube: 360 degree video, live stream. Kotlin became an official programming language for Android

I'm on the way to Kotlin! ^^


Why functional programming?

What issues do we concern when implementing and maintaining systems? One of the most concern is debugging during maintenance: "this code crashed because it observed some unexpected value."

Then, it turns out that the ideas of no side effects and immutability, which functional programming promotes, can help.
Shared mutable data is the root cause Shared mutable data are read and updated by more than one of the methods. Share mutable data structures make it harder to track changes in different parts of your program.

An immutable object is an object that can't change its state after it's instantiated so it can't be affected by the actions of a function. It would be a dream to maintain because we wouldn't have any bad surprises about some object somewhere that unexpectedly modifies a data structure.
A new thinking: Declarative programming There are two ways thinking about implementing a system by writing a program.

- Imperative programming: has instructions that …

Agile Design

How can you design the software which is built in tiny increments?

How can you ensure that the software has a good structure which is flexible, maintainable and reusable?


Not really! In an agile team, the big picture evolves along with the software.

How? With each iteration, the team improves the design of the system so that it is as good as it can be for the system as it is now. They focus on the current structure of the system, making it as good as it can be.
How do we know if the design of software is good? Avoiding these following symptoms of poor design (design smells) should be a way.

1. Rigidity - The design is hard to change.
2. Fragility - The design is easy to break.
3. Immobility - The design is hard to reuse.
4. Viscosity - It is hard to do the right thing.
5. Needless Complexity - Overdesign
6. Needless Repetition - Mouse abuse
7. Opacity - Disorganized expression

These symptoms are similar in nature to code smells, but they ar…

Installing NGINX on macOS

I have heard of a lot of NGINX recently. One of them was it can help for security issues; for sure, it much be more. It so happens that our team has got a ton of user stories from a security audit. It's time to delve into it.
What is NGINX? In order to get a basic idea and have some fun, I've just picked some available posts from my favorite Vietnamese blogger communities as below: NGINX (pronounce: Engine-X) is a web server (comparing to IIS, Apache). It can be used as a reverse proxy (this is what I need for security issues with configuration), load balancer and more.
How to get started? I found the below path for learning NGINX by googling "learn nginx": In this post, I only went first step. This is installing NGINX on macOS and taking a first look at the configuration.
Installing …