<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on egig.github.io</title><link>https://egig.github.io/blog/</link><description>Recent content in Blog on egig.github.io</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 22 Jan 2021 10:00:00 +0000</lastBuildDate><atom:link href="https://egig.github.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Code Quality in Reality</title><link>https://egig.github.io/code-quality-in-reality/</link><pubDate>Fri, 22 Jan 2021 10:00:00 +0000</pubDate><guid>https://egig.github.io/code-quality-in-reality/</guid><description>&lt;p&gt;I&amp;rsquo;ve been a software developer, doing coding for about 9 years now, a few years ago I&amp;rsquo;ve always&#10;dream about having excellent, perfect the code quality that readable, maintainable, no stupid bugs, etc&amp;hellip;&#10;yet here I am, at this point, experiencing the same thing over years, over time,&#10;then I think I get to the conclusion I want to share with you.&lt;/p&gt;&#10;&lt;p&gt;I complain about bad coding everytimes, I swearing and like &amp;ldquo;Who the fuck is wrote this code ?&amp;rdquo;.&#10;I&amp;rsquo;ve been always felt the former developer is the one to blame for the bad code.&#10;Oh god, I was so guilty.&lt;/p&gt;</description></item><item><title>Google Cloud Cost For a Website</title><link>https://egig.github.io/google-cloud-cost-for-a-website/</link><pubDate>Sun, 31 May 2020 10:00:00 +0000</pubDate><guid>https://egig.github.io/google-cloud-cost-for-a-website/</guid><description>&lt;p&gt;This is about my personal experience in google cloud cost, I make the title simple, but it&amp;rsquo;s not about overall &amp;ldquo;Google Cloud Cost&amp;rdquo;&#10;whatsoever. So people make mistakes. Including me, yeah. But I am grateful I learned a lot. I involved in a project that uses google cloud. The compute engine, the load balancer, the storage, and CDN, etc. I was the one who manages the budget, then I made a mistake, I didn&amp;rsquo;t know what I was doing.&#10;We should count the most basic yet pricey thing on the web development: Bandwidth.&lt;/p&gt;</description></item><item><title>Identical Compute Engine Google Cloud</title><link>https://egig.github.io/identical-compute-engine-google-cloud/</link><pubDate>Sat, 02 May 2020 10:00:00 +0000</pubDate><guid>https://egig.github.io/identical-compute-engine-google-cloud/</guid><description>&lt;p&gt;I was learning google cloud lately. I learn to setup compute instance with custom disk size, setup instance group, ssl certificate and successfully, i guess, running the load balancer.&lt;/p&gt;&#10;&lt;p&gt;Actually this is first time I do little deep practice into the cloud tech. I have experience with AWS S3 and the cloudflare before, this time I got few surprises.&lt;/p&gt;&#10;&lt;p&gt;With the google cloud, maybe AWS are same, vm, disk, IP address all are decoupled, reusable also customized event after runtime. You can upgrade the VM instance RAM by just fill out the edit form and little downtime.&lt;/p&gt;</description></item><item><title>Versioning gRPC Services Example in Go</title><link>https://egig.github.io/versioning-grpc-services-example-in-go/</link><pubDate>Fri, 07 Feb 2020 10:00:00 +0000</pubDate><guid>https://egig.github.io/versioning-grpc-services-example-in-go/</guid><description>&lt;p&gt;Sure we need the versioning for our microservices, its also apply for grpc services.&#10;I current working on service that used by another several service.&#10;My service periodically evolved and updated so I think its good practice to give it&#10;version, keep the code base tracked for update and deprecation.&lt;/p&gt;&#10;&lt;p&gt;In REST API we usually use path or &lt;code&gt;Accept&lt;/code&gt; header to identify versioning.&#10;For gRPC, I didn&amp;rsquo;t know I can apply versioning until I get in this page:&#10;&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/grpc/versioning?view=aspnetcore-3.1%5D"&gt;Versioning gRPC services&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Some Consideration on Designing Database</title><link>https://egig.github.io/some-consideration-on-designing-database/</link><pubDate>Mon, 27 Jan 2020 10:00:00 +0000</pubDate><guid>https://egig.github.io/some-consideration-on-designing-database/</guid><description>&lt;p&gt;My first post this 2020. One of those things I want to write is that what I learn from sharing session from work&#10;combined with a few experiences about database MySQL.&lt;/p&gt;&#10;&lt;p&gt;There are some that we need to consider when working with database MySQL so&#10;our database can work seamlessly effective.&lt;/p&gt;&#10;&lt;h3 id="collation"&gt;Collation&lt;/h3&gt;&#10;&lt;p&gt;When creating new database, often ignore about anything else except the short syntax&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1&lt;/span&gt;&lt;span&gt;CREATE DATABASE &amp;lt;db-name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Collation is basic thing we should care about. Character set is now evolved, so we need to&#10;ready to handle even very strange emoji and smiley in our character set. Without concern&#10;about the collation, we likely will get this error&lt;/p&gt;</description></item><item><title>At the End, We Do it Ourself</title><link>https://egig.github.io/at-the-end-you-should-do-it-your-self/</link><pubDate>Thu, 21 Nov 2019 10:00:00 +0000</pubDate><guid>https://egig.github.io/at-the-end-you-should-do-it-your-self/</guid><description>&lt;p&gt;I just learn about microservices. Then I got this kind of problem. Distributed data management problem. Its actually simple, I think, but this is kind of new problem I faced because I never focus on backend before. Then here it is I will just write it down.&lt;/p&gt;&#10;&lt;p&gt;I just join a new company, new team. Then I get this legacy application, a web service. This app pretty much like inventory app, where you can purchase and deduct stock. And its just that.&lt;/p&gt;</description></item><item><title>Subdomain Based NodeJS App with NGINX</title><link>https://egig.github.io/subdomain-based-nodejs-app-with-nginx/</link><pubDate>Sat, 17 Aug 2019 10:00:00 +0000</pubDate><guid>https://egig.github.io/subdomain-based-nodejs-app-with-nginx/</guid><description>&lt;p&gt;This is part of my pet projects. I need to create web app which the state is depends on the subdomain. Similar with wordpress or blogspot blog. e.g mysite.wordpress.com or mysite.blogspot.com. This is how I do it.&lt;/p&gt;&#10;&lt;p&gt;So in NGINX, we can create vhost a.k.a server block and map the server name by wildcard. So to point any subdomain of certain domain to our server, we can do something like this.&lt;/p&gt;</description></item><item><title>Stream Amplitude Export API to AWS S3</title><link>https://egig.github.io/stream-amplitude-export-api-to-aws-s3/</link><pubDate>Mon, 22 Jul 2019 10:00:00 +0000</pubDate><guid>https://egig.github.io/stream-amplitude-export-api-to-aws-s3/</guid><description>&lt;p&gt;A lot of drama at work, this time I need to backup the Amplitude logs events to S3. The dumb idea, I think I can just export the all amplitude events to my local machine, and upload it to S3. And not, so dumb idea, I think, we can do it all at once: &lt;a href="https://nodejs.org/api/stream.html"&gt;Streaming&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;And thanks God, there is also the npm package already: &lt;code&gt;s3-stream-upload&lt;/code&gt;. So this is all I have to do to send amplitude exports between &lt;code&gt;startDate&lt;/code&gt; and &lt;code&gt;andDate&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Move Solr Core to Another Server</title><link>https://egig.github.io/move-solr-core-to-another-server/</link><pubDate>Mon, 24 Jun 2019 10:00:00 +0000</pubDate><guid>https://egig.github.io/move-solr-core-to-another-server/</guid><description>&lt;p&gt;I was need to move solr installation from one server to another. I can not do any reindexing from the beginning because its fairly large collection, about 15 million and I don&amp;rsquo;t know how much time will it takes to do it from beginning. So I need to move the index data as well.&lt;/p&gt;&#10;&lt;p&gt;I do google it and then end up to this &lt;a href="https://stackoverflow.com/questions/32242873/how-to-move-data-to-solr-production-instance-without-re-indexing"&gt;question&lt;/a&gt; on stackoverflow. The answer is not exactly what I need, but it gave me the idea. &lt;em&gt;You can try making backup on one system, and a restore on the other system&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>A Way to Do Group By</title><link>https://egig.github.io/a-way-to-do-group-by/</link><pubDate>Mon, 10 Jun 2019 13:00:00 +0000</pubDate><guid>https://egig.github.io/a-way-to-do-group-by/</guid><description>&lt;p&gt;How do you do &lt;code&gt;Group By&lt;/code&gt; in SQL ? (or MySql) ? This post is note about my experience writing query in sql, There is worth-to-note something about &amp;lsquo;Group By&amp;rsquo;, there is may be better way to do it.&lt;/p&gt;&#10;&lt;p&gt;So lets say, we have following schema, table &lt;code&gt;users&lt;/code&gt; and table &lt;code&gt;orders&lt;/code&gt;, they have relation one to many. One user can has zero or many orders.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;CREATE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;TABLE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;orders&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&lt;/span&gt;&lt;span&gt;(&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;id&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;INT&lt;/span&gt;(&lt;span style="color:#40a070"&gt;11&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;PRIMARY&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;KEY&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;AUTO_INCREMENT,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;title&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;VARCHAR&lt;/span&gt;(&lt;span style="color:#40a070"&gt;500&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;order_date&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;DATE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;user_id&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;INT&lt;/span&gt;(&lt;span style="color:#40a070"&gt;11&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&lt;/span&gt;&lt;span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;CREATE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;TABLE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;users&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&lt;/span&gt;&lt;span&gt;(&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;id&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;INT&lt;/span&gt;(&lt;span style="color:#40a070"&gt;10&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;unsigned&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;PRIMARY&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;KEY&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;AUTO_INCREMENT,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;name&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;VARCHAR&lt;/span&gt;(&lt;span style="color:#40a070"&gt;255&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;email&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;VARCHAR&lt;/span&gt;(&lt;span style="color:#40a070"&gt;255&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NOT&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;NULL&lt;/span&gt;,&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14&lt;/span&gt;&lt;span&gt;);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15&lt;/span&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16&lt;/span&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;CREATE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;UNIQUE&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;INDEX&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;users_email_unique&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;ON&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;users&lt;span style="color:#bbb"&gt; &lt;/span&gt;(email);&lt;span style="color:#bbb"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and suppose we need to get all users for certain order, for &lt;code&gt;SELECT *&lt;/code&gt; fan, the query pretty much will looks like this&lt;/p&gt;</description></item><item><title>Jekyll Again</title><link>https://egig.github.io/jekyll-again/</link><pubDate>Thu, 23 May 2019 23:00:00 +0000</pubDate><guid>https://egig.github.io/jekyll-again/</guid><description>&lt;p&gt;I actually already aware about static site generator far years ago, and already used once, Jekyll. And then, I need to learn another then I try some other static site generator. One can consider this as wasting time, but, I don&amp;rsquo;t know. This might give me some experience by changing blog engine all the time.&lt;/p&gt;&#10;&lt;p&gt;Once I falling in love with Python, then I change this site to Pelican, static site generator powered by Python.&lt;/p&gt;</description></item><item><title>Go for Nodejs Developer: Middlewares</title><link>https://egig.github.io/go-for-nodejs-developer-middlewares/</link><pubDate>Fri, 03 May 2019 13:00:00 +0000</pubDate><guid>https://egig.github.io/go-for-nodejs-developer-middlewares/</guid><description>&lt;p&gt;I code in nodejs daily, end then comes everybody learn Go, maybe because most of decacorn start up company in my neighborhood uses Go, then here I am, learn Go as well. Not to mention that in fact we should always learn new(any)thing to survive, and &lt;a href="https://medium.com/@kevalpatel2106/why-should-you-learn-go-f607681fad65"&gt;Why should you learn Go ?&lt;/a&gt; mentions its something that fit future hardware architecture, nothing to lose to learn Go by the way.&lt;/p&gt;</description></item><item><title>MongoDB Sort By Nested Array of Object Item</title><link>https://egig.github.io/mongodb-sort-by-nested-array-of-object-item/</link><pubDate>Fri, 29 Mar 2019 21:00:00 +0000</pubDate><guid>https://egig.github.io/mongodb-sort-by-nested-array-of-object-item/</guid><description>&lt;p&gt;Let&amp;rsquo;s say, I have this kind of list of Mongodb documents, named &lt;code&gt;hardwares&lt;/code&gt;;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1&lt;/span&gt;&lt;span&gt;[&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2&lt;/span&gt;&lt;span&gt;&#9;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;_id:&lt;/span&gt; &lt;span style=""&gt;ObjectId(...),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;Unit x&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;parts:&lt;/span&gt; &lt;span style=""&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6&lt;/span&gt;&lt;span&gt;&#9;&#9;&#9;&lt;span style=""&gt;{&lt;/span&gt; &lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;CPU&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;model:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;x&amp;#34;&lt;/span&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7&lt;/span&gt;&lt;span&gt;&#9;&#9;&#9;{ &lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;Memory&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;size:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;4&amp;#34;&lt;/span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8&lt;/span&gt;&lt;span&gt;&#9;&#9;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9&lt;/span&gt;&lt;span&gt;&#9;&lt;span style=""&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10&lt;/span&gt;&lt;span&gt;&#9;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;_id:&lt;/span&gt; &lt;span style=""&gt;ObjectId(...),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;Unit y&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;parts:&lt;/span&gt; &lt;span style=""&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14&lt;/span&gt;&lt;span&gt;&#9;&#9;&#9;&lt;span style=""&gt;{&lt;/span&gt; &lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;CPU&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;model:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;y&amp;#34;&lt;/span&gt; }&lt;span style=""&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15&lt;/span&gt;&lt;span&gt;&#9;&#9;&#9;{ &lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;Memory&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;size:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;8&amp;#34;&lt;/span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17&lt;/span&gt;&lt;span&gt;&#9;&lt;span style=""&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18&lt;/span&gt;&lt;span&gt;&#9;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;_id:&lt;/span&gt; &lt;span style=""&gt;ObjectId(...),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;Unit z&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;parts:&lt;/span&gt; &lt;span style=""&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;22&lt;/span&gt;&lt;span&gt;&#9;&#9;&#9;&lt;span style=""&gt;{&lt;/span&gt; &lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;CPU&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;model:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;z&amp;#34;&lt;/span&gt; }&lt;span style=""&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;23&lt;/span&gt;&lt;span&gt;&#9;&#9;&#9;{ &lt;span style=""&gt;name:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;Memory&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;size:&lt;/span&gt; &lt;span style="color:#062873;font-weight:bold"&gt;&amp;#34;2&amp;#34;&lt;/span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;24&lt;/span&gt;&lt;span&gt;&#9;&#9;&lt;span style=""&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;25&lt;/span&gt;&lt;span&gt;&#9;&lt;span style=""&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;26&lt;/span&gt;&lt;span&gt;&lt;span style=""&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Recently I&amp;rsquo;ve struggle to find a way to sort those document list by nested array of object item, in this case, certain item in &lt;code&gt;parts&lt;/code&gt; array.&lt;/p&gt;</description></item><item><title>Refactor Loopback 2.0 Directory Structure to Custom Expressjs</title><link>https://egig.github.io/refactor-loopback-directory-structure-to-custom-expressjs/</link><pubDate>Sun, 24 Mar 2019 10:10:00 +0000</pubDate><guid>https://egig.github.io/refactor-loopback-directory-structure-to-custom-expressjs/</guid><description>&lt;p&gt;The challange is to keep eveerythings fine, not break single thing while we do change things to be like what we need. I know there is some best practice already &lt;a href="https://github.com/i0natan/nodebestpractices"&gt;out there&lt;/a&gt;. This is only documentary notes. Who knows I need this again in the future.&lt;/p&gt;&#10;&lt;p&gt;We was using loopback 2.0 to initiate some projects, my previous developer choose it. I don&amp;rsquo;t know why. But then I feel loopback does not suit our current state, So, I think I want to change to just use expressjs. Fortunately loopback 2.0 is based on Expressjs so its possible to refactor the structure.&lt;/p&gt;</description></item><item><title>Guard Clause in Async</title><link>https://egig.github.io/guard-clause-in-async/</link><pubDate>Mon, 20 Aug 2018 02:47:19 +0000</pubDate><guid>https://egig.github.io/guard-clause-in-async/</guid><description>&lt;p&gt;I really like Guard Clause, it makes me easier to read coding flow. Ya, you might want to google it &amp;ldquo;Guard Clause&amp;rdquo;, is a pattern to write code. You&amp;rsquo;ll end up on this link: &lt;a href="https://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html"&gt;Replace Nested Conditional with Guard Clauses - Refactoring&lt;/a&gt;. If you don&amp;rsquo;t use it or even don&amp;rsquo;t know it yet, I suggest you to learn and use it and share to your team. You all will love it.&lt;/p&gt;</description></item><item><title>Easier to ask for forgiveness than permission</title><link>https://egig.github.io/easier-to-ask-for-forgiveness-than-permission/</link><pubDate>Fri, 11 May 2018 14:16:42 +0000</pubDate><guid>https://egig.github.io/easier-to-ask-for-forgiveness-than-permission/</guid><description>&lt;p&gt;Baru tau kalo ada yang namanya prinsip EAFP dalam pemrograman. EAFP Principle as you might can google it, it is a principle or pattern to write code in python. Pretty sure we can use it in other programming language as well.&lt;/p&gt;</description></item><item><title>Solr, Episode 1</title><link>https://egig.github.io/solr-episode-1/</link><pubDate>Sun, 24 Dec 2017 18:50:00 +0000</pubDate><guid>https://egig.github.io/solr-episode-1/</guid><description>&lt;p&gt;I learnt a lot of interesting things. This has been a few months, since I started to read about search engine, particularly Solr. I need it because of the requirement at work, but I am really happy to do that. That was fun. So these are what I&amp;rsquo;ve got so far.&lt;/p&gt;&#10;&lt;p&gt;Solr is all about feeding it with data and how you get the data back. When we feed Solr with data, thats called indexing. When we need to get the data back, thats called Query. So two activity that always we do when working with solr is Indexing and Query-ing. If you ever using Database Sql, its like you just do INSERT INTO and SELECT something FROM. Thats simplest explanation.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://egig.github.io/"&gt;&lt;img src="https://egig.github.io/images/solr-simple.png" alt="" style="width: 100%;"/&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Here is some of term I have to familiar with when working with Solr:&lt;/p&gt;</description></item><item><title>How Do I Write Javascript Config File</title><link>https://egig.github.io/how-do-i-write-javascript-config-file/</link><pubDate>Fri, 24 Nov 2017 07:06:46 +0000</pubDate><guid>https://egig.github.io/how-do-i-write-javascript-config-file/</guid><description>&lt;p&gt;Hampir setiap kali kita membangun aplikasi, kita membutuhkan file konfigurasi. File konfigurasi untuk menyimpan data yang &lt;em&gt;configurable&lt;/em&gt; disesuaikan dengan &lt;em&gt;environment&lt;/em&gt; aplikasi. Contoh data koneksi database, data &lt;em&gt;credential&lt;/em&gt; API dan sebagainya. Berbeda orang atau tim, maka berbeda pula format file konfigurasi nya.&lt;/p&gt;</description></item><item><title>Kebutuhan akan Search Engine</title><link>https://egig.github.io/kebutuhan-akan-search-engine/</link><pubDate>Fri, 10 Nov 2017 10:51:42 +0000</pubDate><guid>https://egig.github.io/kebutuhan-akan-search-engine/</guid><description>&lt;p&gt;Pada Sistem Relational Database (RDBMS), pengguna dapat melakukan pencarian data dengan menggunakan SQL. Tetapi terdapat keterbatasan. Pencarian hanya terbatas pada text yang terdapat pada kolom tabel saja juga ada keterbatasan lainnya juga.&lt;/p&gt;</description></item><item><title>Handle Error di Promise.catch()</title><link>https://egig.github.io/handle-error-di-promise-catch/</link><pubDate>Sun, 03 Sep 2017 17:43:37 +0000</pubDate><guid>https://egig.github.io/handle-error-di-promise-catch/</guid><description>&lt;p&gt;Baru sempat baca lebih lanjut tentang error handling di Promise Javascript. Agak ketinggalan sih, karena ini masalah sudah ada dari 2 tahun-an lalu, tapi gak apa, baru fokus ke Javascript setahun terakhir, dan anyway agak susah juga cari artikel yang bahas ini pake Bahasa Indonesia jadi saya tulis aja disini.&lt;/p&gt;</description></item><item><title>Please Stop Echoing Things</title><link>https://egig.github.io/please-stop-echoing-things/</link><pubDate>Sat, 02 Sep 2017 11:53:17 +0000</pubDate><guid>https://egig.github.io/please-stop-echoing-things/</guid><description>&lt;p&gt;For my little brother who likes to embedding PHP to html but not sure how to do it nicely.&lt;/p&gt;&#10;&lt;p&gt;You probably have ever seen or even written code like below:&lt;/p&gt;</description></item><item><title>Belajar React: Props &amp; State</title><link>https://egig.github.io/belajar-react-props-state/</link><pubDate>Mon, 24 Apr 2017 18:43:12 +0000</pubDate><guid>https://egig.github.io/belajar-react-props-state/</guid><description>&lt;p&gt;Di React, kita menggunakan istilah &amp;ldquo;Component&amp;rdquo; untuk menggambarkan Komponen-komponen aplikasi atau interface yang ingin kita buat.&lt;/p&gt;&#10;&lt;p&gt;Ada dua cara untuk membuat React Component.&lt;/p&gt;</description></item><item><title>Belajar React: JSX di Browser</title><link>https://egig.github.io/belajar-react-jsx-di-browser/</link><pubDate>Thu, 06 Apr 2017 18:37:36 +0000</pubDate><guid>https://egig.github.io/belajar-react-jsx-di-browser/</guid><description>&lt;p&gt;JSX tidak bisa dijalankan di browser begitu saja, karena browser, bahkan yang terbaru sekalipun, hanya mendukung javascript murni saja. Agar bisa menggunakan sintak JSX di browser, kita harus menggunakan librari lain yang bernana Babel.&lt;/p&gt;&#10;&lt;p&gt;Apa itu Babel ?&lt;/p&gt;</description></item><item><title>Belajar React: JSX</title><link>https://egig.github.io/belajar-react-jsx/</link><pubDate>Wed, 05 Apr 2017 18:33:01 +0000</pubDate><guid>https://egig.github.io/belajar-react-jsx/</guid><description>&lt;p&gt;Pada pembahasan sebelumnya kita membuat React component dengan cara sebagai berikut.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;var Hello = function (props) {&#10; return React.createElement('div', null, 'Hello World');&#10;};&#10;&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Belajar React: Hello World</title><link>https://egig.github.io/belajar-react-hello-world/</link><pubDate>Mon, 03 Apr 2017 18:25:55 +0000</pubDate><guid>https://egig.github.io/belajar-react-hello-world/</guid><description>&lt;p&gt;Seperti biasa, sesuai tradisi belajar pemrograman, kita akan belajar menampilkan pesan &amp;ldquo;Hello World &amp;quot; di browser menggunakan React.&lt;/p&gt;&#10;&lt;p&gt;React bagaimanapun juga adalah javascript, dan kita akan membuat program React dengan cara membuat halaman web seperti biasanya, terdiri dari html, (belum ada) css, dan javascript.&lt;/p&gt;</description></item><item><title>Belajar Symfony Console Component</title><link>https://egig.github.io/belajar-symfony-console-component/</link><pubDate>Tue, 24 May 2016 01:01:36 +0000</pubDate><guid>https://egig.github.io/belajar-symfony-console-component/</guid><description>&lt;p&gt;Untuk memudahkan, kita harus sudah paham dulu penggunaan Composer dan konsep autoload-nya composer.&#10;Symfony Console Component adalah component atau library dari symfony yang bisa kita gunakan untuk memudahkan pembuatan program CLI (Command Line Interface) menggunakan PHP. Untuk lebih lengkapnya silahkan merujuk pada dokumentasinya.&lt;/p&gt;</description></item><item><title>Symfony, Log to Database</title><link>https://egig.github.io/symfony-log-to-database/</link><pubDate>Fri, 08 Jan 2016 15:06:07 +0000</pubDate><guid>https://egig.github.io/symfony-log-to-database/</guid><description>&lt;p&gt;Symfony sudah dilengkapi dengan component terkait dengan log: Monolog. Namun, symfony secara default menyimpan log hanya pada filesystem dan tidak menyediakan fitur penyimpanan log pada database. Karena memang tidak semua orang ingin menyimpan log aplikasi pada database.&lt;/p&gt;</description></item><item><title>Hello Phabricator</title><link>https://egig.github.io/hello-phabricator/</link><pubDate>Thu, 18 Jun 2015 01:27:59 +0000</pubDate><guid>https://egig.github.io/hello-phabricator/</guid><description>&lt;p&gt;So, due to the codes that always being sucks and hard to manage, I proposed my current company to do code reviews. As the tool, we choose Phabricator. At first I guess I&amp;rsquo;ll choose Gitlab, or even Atlasian, but Phabricator seems worth to be tried.&lt;/p&gt;</description></item><item><title>Codeigniter 3 for Complex Application</title><link>https://egig.github.io/codeigniter-3-for-complex-application/</link><pubDate>Sun, 24 May 2015 00:20:25 +0000</pubDate><guid>https://egig.github.io/codeigniter-3-for-complex-application/</guid><description>&lt;p&gt;This is why I think that Codeigniter is not suitable for a complex application.&lt;/p&gt;&#10;&lt;p&gt;If you plan your app can be customized in the future without pain, if data involved is not predictable, if it is intended to be developed across various team member for a long term period, thats require a little bit complexity. I mean, complex feature means complex requirements, and as far as i know, codeigniter is designed to be just&amp;hellip; codeigniter.&lt;/p&gt;</description></item><item><title>Implement Laravel Facade to Silex</title><link>https://egig.github.io/implement-laravel-facade-to-silex/</link><pubDate>Mon, 21 Oct 2013 10:00:33 +0000</pubDate><guid>https://egig.github.io/implement-laravel-facade-to-silex/</guid><description>&lt;p&gt;Last post, while I understanding how does laravel work behind, I said that I guess I can implement laravel facade to silex since they have similiar inner structure. And I just did it. This is how.&lt;/p&gt;</description></item><item><title>Understanding Laravel 4</title><link>https://egig.github.io/understanding-laravel-4/</link><pubDate>Tue, 15 Oct 2013 10:00:24 +0000</pubDate><guid>https://egig.github.io/understanding-laravel-4/</guid><description>&lt;p&gt;&lt;a href="https://www.reddit.com/r/PHP/comments/1eld2t/why_would_anyone_choose_laravel_over_symfony_or"&gt;Why Laravel&lt;/a&gt; ? There is Taylor Otwel, Author of Laravel, commented at that post. Personally, one of the reason that I used to pick a framework is &amp;ldquo;taste&amp;rdquo;, and I admit it, laravel has nice taste, Laravel has nice sintax. However, &amp;ldquo;Tak Kenal Maka Tak Sayang&amp;rdquo;, that means if you don&amp;rsquo;t really know, then you don&amp;rsquo;t really love. Started about two weeks ago, I dig into Laravel. And Now, what I&amp;rsquo;ve got ?&lt;/p&gt;</description></item></channel></rss>