From cecb95b683919a1123eb398ca0ab9b4e7e58f154 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 5 Dec 2015 17:31:07 +0800
Subject: [PATCH 001/172] Update _config.yml

---
 _config.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/_config.yml b/_config.yml
index cebf4965e4141..728ec28e71413 100644
--- a/_config.yml
+++ b/_config.yml
@@ -3,10 +3,10 @@
 #
 
 # Name of your site (displayed in the header)
-name: Your Name
+name: DevKini
 
 # Short bio or description (displayed in the header)
-description: Web Developer from Somewhere
+description: Group of software developers in Malaysia
 
 # URL of your avatar or profile pic (you could use your GitHub profile pic)
 avatar: https://raw.githubusercontent.com/barryclark/jekyll-now/master/images/jekyll-logo.png
@@ -21,7 +21,7 @@ footer-links:
   email:
   facebook:
   flickr:
-  github: barryclark/jekyll-now
+  github: devkini
   instagram:
   linkedin:
   pinterest:

From e175c97c7d7ee78e21033bfb0d8f0853691d7a7c Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 5 Dec 2015 17:34:08 +0800
Subject: [PATCH 002/172] Update about.md

---
 about.md | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/about.md b/about.md
index bc21f5731bf4b..8deca5e4854cf 100644
--- a/about.md
+++ b/about.md
@@ -4,12 +4,6 @@ title: About
 permalink: /about/
 ---
 
-Some information about you!
+We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
 
-### More Information
-
-A place to include any other types of information that you'd like to include about yourself.
-
-### Contact me
-
-[email@domain.com](mailto:email@domain.com)
\ No newline at end of file
+Feel free to join our [Telegram group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw).

From 38fa95be96b556aad7056dd44ef276515a89bd26 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 19:48:05 +0800
Subject: [PATCH 003/172] Change logo

---
 _config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_config.yml b/_config.yml
index 728ec28e71413..7a1aa4f3405ca 100644
--- a/_config.yml
+++ b/_config.yml
@@ -9,7 +9,7 @@ name: DevKini
 description: Group of software developers in Malaysia
 
 # URL of your avatar or profile pic (you could use your GitHub profile pic)
-avatar: https://raw.githubusercontent.com/barryclark/jekyll-now/master/images/jekyll-logo.png
+avatar: http://i.imgur.com/wxhzSUi.jpg
 
 #
 # Flags below are optional

From ba73ca45e791003427ed1b5a9b56813b08c5455e Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 19:50:23 +0800
Subject: [PATCH 004/172] Update _config.yml

---
 _config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_config.yml b/_config.yml
index 7a1aa4f3405ca..3574e2bb3aa06 100644
--- a/_config.yml
+++ b/_config.yml
@@ -3,7 +3,7 @@
 #
 
 # Name of your site (displayed in the header)
-name: DevKini
+name: #devkini
 
 # Short bio or description (displayed in the header)
 description: Group of software developers in Malaysia

From e9959bbbca0c341948f7bf4df6bca681b4ecc129 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 19:53:14 +0800
Subject: [PATCH 005/172] Update _config.yml

---
 _config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_config.yml b/_config.yml
index 3574e2bb3aa06..097e1c941c6e6 100644
--- a/_config.yml
+++ b/_config.yml
@@ -3,7 +3,7 @@
 #
 
 # Name of your site (displayed in the header)
-name: #devkini
+name: "#devkini"
 
 # Short bio or description (displayed in the header)
 description: Group of software developers in Malaysia

From 9141bb23e7874246d3fed02d318ba4077dad7db0 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 20:04:40 +0800
Subject: [PATCH 006/172] Create 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 _posts/2015-12-06-getting-started-with-laravel.md

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
new file mode 100644
index 0000000000000..524d8d5eb8140
--- /dev/null
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -0,0 +1,9 @@
+---
+layout: post
+title: Getting Started With Laravel
+author: kamal
+---
+
+I'm using the [`laravel-base`][1] as starting point.
+
+[1]:https://github.com/zulfajuniadi/laravel-base

From e9673ea462b29c4d09e4f4f34a8f9e9e55529cf4 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 20:09:10 +0800
Subject: [PATCH 007/172] Update post.html

---
 _layouts/post.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_layouts/post.html b/_layouts/post.html
index d27c48066a71e..bcccc3bd24dce 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -11,6 +11,7 @@ <h1>{{ page.title }}</h1>
 
   <div class="date">
     Written on {{ page.date | date: "%B %e, %Y" }}
+    {% if page.author %} by {{ page.author }} {% endif %}
   </div>
 
   {% include disqus.html %}

From 3b457e6af5ee35198b6eb74468e3fb66ae4a5686 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 20:39:41 +0800
Subject: [PATCH 008/172] Update 2015-12-06-getting-started-with-laravel.md

---
 ...2015-12-06-getting-started-with-laravel.md | 44 ++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 524d8d5eb8140..94265befbe9b9 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -4,6 +4,48 @@ title: Getting Started With Laravel
 author: kamal
 ---
 
-I'm using the [`laravel-base`][1] as starting point.
+I'm using the [`laravel-base`][1] as starting point. For starter, the [`laravel-base`][1]'s `Readme.md` already covering it well.
+
+Since I want to store some data in the db, the first thing to do is to create the table's schema. You accomplish this using the `artisan` command.
+```
+php artisan make:migration create_customers_table --create=customers
+```
+This will create the schema migration file in `database/migrations/2015_12_06_095232_create_customers_table.php`. The file look like:-
+
+```php
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateCustomersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('customers', function (Blueprint $table) {
+            $table->increments('id');
+            $table->timestamps();
+            $table->string('name', 255);
+            $table->text('address');
+            $table->string('phone_no', 255);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::drop('customers');
+    }
+}
+```
 
 [1]:https://github.com/zulfajuniadi/laravel-base

From a084f396707925388b62073b068aa6151338969d Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 20:41:50 +0800
Subject: [PATCH 009/172] Update 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 94265befbe9b9..57f0130c422f7 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -6,10 +6,12 @@ author: kamal
 
 I'm using the [`laravel-base`][1] as starting point. For starter, the [`laravel-base`][1]'s `Readme.md` already covering it well.
 
-Since I want to store some data in the db, the first thing to do is to create the table's schema. You accomplish this using the `artisan` command.
+Since I want to store some data in the db, the first thing to do is to create the table's schema. You accomplish this using the `artisan` command:-
+
 ```
 php artisan make:migration create_customers_table --create=customers
 ```
+
 This will create the schema migration file in `database/migrations/2015_12_06_095232_create_customers_table.php`. The file look like:-
 
 ```php

From 7b542f42731dcbb6c7eec9a8af07f556642e9309 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 20:46:00 +0800
Subject: [PATCH 010/172] Update 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 57f0130c422f7..57470cc67c15a 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -50,4 +50,10 @@ class CreateCustomersTable extends Migration
 }
 ```
 
+The column `id` and `timestamps` were added by default but you have to add other column manually. Once you have filled up the file with all the column you want, you can run the `migrate` command to let laravel create the corresponding database table:-
+
+```
+php artisan migrate
+```
+
 [1]:https://github.com/zulfajuniadi/laravel-base

From c859d9183f839edb1236e6ea5672e17e29690f1b Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 22:55:49 +0800
Subject: [PATCH 011/172] Update 2015-12-06-getting-started-with-laravel.md

---
 .../2015-12-06-getting-started-with-laravel.md  | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 57470cc67c15a..3287da7d686b1 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -6,6 +6,7 @@ author: kamal
 
 I'm using the [`laravel-base`][1] as starting point. For starter, the [`laravel-base`][1]'s `Readme.md` already covering it well.
 
+## Database Tables
 Since I want to store some data in the db, the first thing to do is to create the table's schema. You accomplish this using the `artisan` command:-
 
 ```
@@ -56,4 +57,20 @@ The column `id` and `timestamps` were added by default but you have to add other
 php artisan migrate
 ```
 
+## Model
+
+To interact with the database, Laravel use an ORM named Eloquent. To create the model, we can ru the command:-
+
+```
+php artisan make:model Customer
+```
+
+This will create a file named `Customer.php` in the `app/` folder. I wish the `artisan` command show the exact path where the files being generated instead of just showing:-
+
+```
+Model created successfully.
+```
+
+## Controller
+
 [1]:https://github.com/zulfajuniadi/laravel-base

From 1315c1f13e9dd289e6bb172c67b47c98d78fc859 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 23:19:37 +0800
Subject: [PATCH 012/172] Update 2015-12-06-getting-started-with-laravel.md

---
 ...2015-12-06-getting-started-with-laravel.md | 49 +++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 3287da7d686b1..a58f2f19585f4 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -73,4 +73,53 @@ Model created successfully.
 
 ## Controller
 
+Controller will be the meat of the application as this is where user request being processed. To create the controller, we run the command:-
+
+```
+php artisan make:controller CustomerController
+```
+
+This will create a file `app/Http/Controllers/CustomerController.php`. The file will contain a class with some pre-defined methods:-
+
+```php
+<?php
+class CustomerController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(){}
+    public function create(){}
+    public function store(){}
+    public function store(Request $request) {}
+    public function edit($id) {}
+    ...
+```
+
+## Routing
+
+Having a controller alone is not enough as Laravel still don't know about the controller and it relation with the incoming request. So we need to define a route that will match the url user request with the controller. Open `/app/Http/routes.php` and add the routing config:-
+
+```php
+<?php
+Route::resource('customer', 'CustomerController');
+```
+
+This is where I got stucked initially, as the existing routes defined in `laravel-base` look like this:-
+
+```php
+<?php
+
+Route::get('/', function () {
+    return view('welcome');
+});
+
+Route::controller('auth', 'Auth\AuthController');
+Route::controller('password', 'Auth\PasswordController');
+```
+
+Notice that they're using `Route::controller` instead. Turn out there are 2 types of controller in Laravel - RESTFull resource controller and Implicit controller. The one generated with the `artisan` command basically a resource controller so that's why you should attach it to the route with `Route::resource()` and not `Route::controller()`.
+
 [1]:https://github.com/zulfajuniadi/laravel-base

From 2f26b61efbdedb3918d5871442967fcf971a1399 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 23:35:08 +0800
Subject: [PATCH 013/172] Update 2015-12-06-getting-started-with-laravel.md

---
 ...2015-12-06-getting-started-with-laravel.md | 67 +++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index a58f2f19585f4..3ccb84c11666e 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -122,4 +122,71 @@ Route::controller('password', 'Auth\PasswordController');
 
 Notice that they're using `Route::controller` instead. Turn out there are 2 types of controller in Laravel - RESTFull resource controller and Implicit controller. The one generated with the `artisan` command basically a resource controller so that's why you should attach it to the route with `Route::resource()` and not `Route::controller()`.
 
+## Views
+
+The controller should return an output (or HTTP speak, a response) to user. At the very basic, we can just return a plain string:-
+
+```php
+<?php
+class CustomerController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        return 'Hello world !';
+    }
+```
+
+But as the comment in above method mention, the method supposed to return a `Response` object. If we return a plain string, Laravel will wrap it into a `Response` object but we can also explicitly return a `Response` object:-
+
+```php
+<?php
+class CustomerController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        return new Response('Hello world !', 200);
+    }
+```
+
+The second argument to `Response()` which is a HTTP status code to return is optional but that's the advantage of returning a `Response` object, as it allow us to return custom status code instead of the default `200 OK`. However most of the time what we would return from controller is a `Views` instead:-
+
+```php
+<?php
+class CustomerController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        return view('customers/list');
+    }
+```
+
+Views basically a template that contain the actual response we want to return to user. As in above code, Laravel will look for file called `resources/views/customers/list.blade.php`. Blade is the default templating language used by Laravel. The file `list.blade.php` is just like the regular HTML file but with some special syntax:-
+
+```html
+@extends('app')
+
+@section('content')
+    <div class="container">
+        <div class="content">
+            <div class="title">Customers</div>
+        </div>
+    </div>
+@stop
+```
+
 [1]:https://github.com/zulfajuniadi/laravel-base

From 592847c3d319fdddbd54af82ef94e203b83f8379 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 23:46:19 +0800
Subject: [PATCH 014/172] Update 2015-12-06-getting-started-with-laravel.md

---
 ...2015-12-06-getting-started-with-laravel.md | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 3ccb84c11666e..17ae54461c30e 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -189,4 +189,30 @@ Views basically a template that contain the actual response we want to return to
 @stop
 ```
 
+## Helpers
+
+Coming from Django, one thing that I'd immediately looked into is the ability to generate url from the defined routing. In Django it's called reverse url routing. In Laravel, this exists in the form of helpers function called `route()`. You can pass the routing name to the function and it will return the corresponding url. For example:-
+
+```
+route('customer.index') // will return /customer/
+```
+
+For resource controller, the name is automatically generated and you can refer the [documentation][2] on the available name. In the Views template, you can call the function like this:-
+
+```html
+@extends('app')
+
+@section('content')
+    <div class="container">
+        <div class="content">
+            <div class="title">Customers</div>
+            <form action="{{ route('customer.store') }}" method="post">
+                <input type="text" name="name" />
+            </form>
+        </div>
+    </div>
+@stop
+```
+
 [1]:https://github.com/zulfajuniadi/laravel-base
+[2]:http://laravel.com/docs/5.1/controllers#restful-resource-controllers

From eb1560ca78dec33a8b8991c05ea15140dd77ba45 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 23:51:02 +0800
Subject: [PATCH 015/172] Update 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 17ae54461c30e..24782e13c5277 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -199,6 +199,7 @@ route('customer.index') // will return /customer/
 
 For resource controller, the name is automatically generated and you can refer the [documentation][2] on the available name. In the Views template, you can call the function like this:-
 
+{% raw %}
 ```html
 @extends('app')
 
@@ -212,6 +213,7 @@ For resource controller, the name is automatically generated and you can refer t
         </div>
     </div>
 @stop
+{% endraw %}
 ```
 
 [1]:https://github.com/zulfajuniadi/laravel-base

From f068f923560eee7af920981568d20bf0cdc4337e Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Dec 2015 23:53:51 +0800
Subject: [PATCH 016/172] Update 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 24782e13c5277..24f5adf688c3d 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -216,5 +216,7 @@ For resource controller, the name is automatically generated and you can refer t
 {% endraw %}
 ```
 
+That's all for now. Hopefully I can show more in-depth example as I progress forward in learning Laravel.
+
 [1]:https://github.com/zulfajuniadi/laravel-base
 [2]:http://laravel.com/docs/5.1/controllers#restful-resource-controllers

From 5b3cd3f550cdb0eeb2bc563110e334445e58f31d Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:12:15 +0800
Subject: [PATCH 017/172] Update _svg-icons.scss

---
 _sass/_svg-icons.scss | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_sass/_svg-icons.scss b/_sass/_svg-icons.scss
index c517b73c7efbe..d6a928bd9ab6a 100644
--- a/_sass/_svg-icons.scss
+++ b/_sass/_svg-icons.scss
@@ -16,5 +16,5 @@
   &.twitter       { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLDMwIEMwLDEzLjQzMTQ1NjcgMTMuNDUwODY2MywwIDMwLjA0MzM1MjYsMCBDNDYuNjM1ODM4OSwwIDYwLjA4NjcwNTIsMTMuNDMxNDU2NyA2MC4wODY3MDUyLDMwIEM2MC4wODY3MDUyLDQ2LjU2ODU0MzMgNDYuNjM1ODM4OSw2MCAzMC4wNDMzNTI2LDYwIEMxMy40NTA4NjYzLDYwIDAsNDYuNTY4NTQzMyAwLDMwIFogTTAsMzAiIGZpbGw9IiM0MDk5RkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMjkuMjk5NzY3NSwyMy44ODc5Nzc2IEwyOS4zNjI3MjA2LDI0LjkyNjA0NTMgTDI4LjMxMzUwMTYsMjQuNzk4OTM1IEMyNC40OTQzNDQ1LDI0LjMxMTY3ODcgMjEuMTU3ODI4MSwyMi42NTkyNDQ0IDE4LjMyNDkzNjgsMTkuODg0MDAyMyBMMTYuOTM5OTY3NywxOC41MDY5NzM3IEwxNi41ODMyMzMzLDE5LjUyMzg1NjMgQzE1LjgyNzc5NTYsMjEuNzkwNjU3MiAxNi4zMTA0MzYzLDI0LjE4NDU2ODQgMTcuODg0MjY0OCwyNS43OTQ2MzI1IEMxOC43MjM2NCwyNi42ODQ0MDQ4IDE4LjUzNDc4MDYsMjYuODExNTE1MiAxNy4wODY4NTg0LDI2LjI4MTg4ODggQzE2LjU4MzIzMzMsMjYuMTEyNDA4MyAxNi4xNDI1NjEzLDI1Ljk4NTI5OCAxNi4xMDA1OTI1LDI2LjA0ODg1MzIgQzE1Ljk1MzcwMTksMjYuMTk3MTQ4NiAxNi40NTczMjcsMjguMTI0OTg4NSAxNi44NTYwMzAyLDI4Ljg4NzY1MDUgQzE3LjQwMTYyNDEsMjkuOTQ2OTAzMyAxOC41MTM3OTYyLDMwLjk4NDk3MDkgMTkuNzMwODkwMiwzMS41OTkzMzc1IEwyMC43NTkxMjQ4LDMyLjA4NjU5MzggTDE5LjU0MjAzMDgsMzIuMTA3Nzc4OCBDMTguMzY2OTA1NSwzMi4xMDc3Nzg4IDE4LjMyNDkzNjgsMzIuMTI4OTYzOSAxOC40NTA4NDMxLDMyLjU3Mzg1IEMxOC44NzA1MzA3LDMzLjk1MDg3ODYgMjAuNTI4Mjk2NywzNS40MTI2NDc0IDIyLjM3NDkyMjEsMzYuMDQ4MTk5IEwyMy42NzU5NTM2LDM2LjQ5MzA4NTIgTDIyLjU0Mjc5NzEsMzcuMTcxMDA2OSBDMjAuODY0MDQ2NywzOC4xNDU1MTk0IDE4Ljg5MTUxNSwzOC42OTYzMzA5IDE2LjkxODk4MzMsMzguNzM4NzAxIEMxNS45NzQ2ODYyLDM4Ljc1OTg4NiAxNS4xOTgyNjQyLDM4Ljg0NDYyNjIgMTUuMTk4MjY0MiwzOC45MDgxODE0IEMxNS4xOTgyNjQyLDM5LjEyMDAzMTkgMTcuNzU4MzU4NSw0MC4zMDYzOTUgMTkuMjQ4MjQ5NSw0MC43NzI0NjYyIEMyMy43MTc5MjI0LDQyLjE0OTQ5NDggMjkuMDI2OTcwNSw0MS41NTYzMTMyIDMzLjAxNDAwMjcsMzkuMjA0NzcyMiBDMzUuODQ2ODk0LDM3LjUzMTE1MjggMzguNjc5Nzg1MywzNC4yMDUwOTkzIDQwLjAwMTgwMTIsMzAuOTg0OTcwOSBDNDAuNzE1MjcwMSwyOS4yNjg5ODE1IDQxLjQyODczOSwyNi4xMzM1OTM0IDQxLjQyODczOSwyNC42Mjk0NTQ1IEM0MS40Mjg3MzksMjMuNjU0OTQyIDQxLjQ5MTY5MjIsMjMuNTI3ODMxNyA0Mi42NjY4MTc0LDIyLjM2MjY1MzcgQzQzLjM1OTMwMiwyMS42ODQ3MzE5IDQ0LjAwOTgxNzgsMjAuOTQzMjU1IDQ0LjEzNTcyNCwyMC43MzE0MDQ0IEM0NC4zNDU1Njc4LDIwLjMyODg4ODQgNDQuMzI0NTgzNSwyMC4zMjg4ODg0IDQzLjI1NDM4MDEsMjAuNjg5MDM0MyBDNDEuNDcwNzA3OCwyMS4zMjQ1ODYgNDEuMjE4ODk1MiwyMS4yMzk4NDU4IDQyLjEwMDIzOTIsMjAuMjg2NTE4MyBDNDIuNzUwNzU1LDE5LjYwODU5NjUgNDMuNTI3MTc3LDE4LjM3OTg2MzQgNDMuNTI3MTc3LDE4LjAxOTcxNzQgQzQzLjUyNzE3NywxNy45NTYxNjIzIDQzLjIxMjQxMTMsMTguMDYyMDg3NiA0Mi44NTU2NzY5LDE4LjI1Mjc1MyBDNDIuNDc3OTU4LDE4LjQ2NDYwMzYgNDEuNjM4NTgyOCwxOC43ODIzNzk0IDQxLjAwOTA1MTQsMTguOTczMDQ0OSBMMzkuODc1ODk0OSwxOS4zMzMxOTA4IEwzOC44NDc2NjAzLDE4LjYzNDA4NCBDMzguMjgxMDgyLDE4LjI1Mjc1MyAzNy40ODM2NzU2LDE3LjgyOTA1MiAzNy4wNjM5ODgsMTcuNzAxOTQxNiBDMzUuOTkzNzg0NiwxNy40MDUzNTA5IDM0LjM1NzAwMywxNy40NDc3MjEgMzMuMzkxNzIxNSwxNy43ODY2ODE4IEMzMC43Njg2NzQsMTguNzQwMDA5MyAyOS4xMTA5MDgsMjEuMTk3NDc1NyAyOS4yOTk3Njc1LDIzLjg4Nzk3NzYgWiBNMjkuMjk5NzY3NSwyMy44ODc5Nzc2IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik02MC4wODY3MDUyLDMwIEM2MC4wODY3MDUyLDQ2LjU2ODU0MzMgNDYuNjM1ODM4OSw2MCAzMC4wNDMzNTI2LDYwIEMyMy44ODk1OTI1LDYwIDE4LjE2Nzk1OTgsNTguMTUyNTEzNCAxMy40MDQ0ODk1LDU0Ljk4Mjc3NTQgTDQ3LjgyOTA0NzgsNS44MTk0MTEwMyBDNTUuMjYyODEwOCwxMS4yODA2NTAzIDYwLjA4NjcwNTIsMjAuMDc3Nzk3MyA2MC4wODY3MDUyLDMwIFogTTYwLjA4NjcwNTIsMzAiIGlkPSJyZWZsZWMiIGZpbGwtb3BhY2l0eT0iMC4wOCIgZmlsbD0iIzAwMDAwMCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KPC9zdmc+); }
   &.youtube 	    { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDYwIDYwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIj4KICAgIDx0aXRsZT5Zb3VUdWJlPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5DcmVhdGVkIHdpdGggU2tldGNoIChodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gpPC9kZXNjcmlwdGlvbj4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJZb3VUdWJlIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IllvdXR1YmUiIHNrZXRjaDp0eXBlPSJNU0xheWVyR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTAuNDQ5MTYxMzc2LDMwIEMwLjQ0OTE2MTM3NiwxMy40MzE0NTY3IDEzLjY3OTUyMTcsMCAzMCwwIEM0Ni4zMjA0NzgzLDAgNTkuNTUwODM4NiwxMy40MzE0NTY3IDU5LjU1MDgzODYsMzAgQzU5LjU1MDgzODYsNDYuNTY4NTQzMyA0Ni4zMjA0NzgzLDYwIDMwLDYwIEMxMy42Nzk1MjE3LDYwIDAuNDQ5MTYxMzc2LDQ2LjU2ODU0MzMgMC40NDkxNjEzNzYsMzAgWiBNMC40NDkxNjEzNzYsMzAiIGlkPSJZb3VUdWJlIiBmaWxsPSIjQ0QzMzJEIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDMuMzA1NTgwMiwzMC40MjgzMTI1IEM0NC43MjMxODAyLDMxLjg2MjM1MTYgNDQuNzM4NTE1OCwzOC45NDE4NTM1IDQ0LjczODUxNTgsMzguOTgyNzU1OSBDNDQuNzM4NTE1OCwzOC45ODI3NTU5IDQ0LjcyNzAzMTYsNDYuMDk5MTEzMyA0My4zMDU1ODAyLDQ3LjUzODEzODcgQzQxLjg5Mzg2MjQsNDguOTY5MTQyNiAyOS45OTQzMjc5LDQ5IDI5Ljk5NDMyNzksNDkgQzI5Ljk5NDMyNzksNDkgMTguMDk2NDc0LDQ4Ljk2OTE0MjYgMTYuNjgxMDQ0OSw0Ny41MzgyMTA5IEMxNS4yNjU0NzU3LDQ2LjEwNDA5OTYgMTUuMjYxNTU0MiwzOS4wMzY0NDkyIDE1LjI2MTU1NDIsMzguOTgyNzU1OSBDMTUuMjYxNTU0MiwzOC45NDE5OTggMTUuMjY1NDA1NywzMS44NjIzNTE2IDE2LjY4MTA0NDksMzAuNDI4MzEyNSBDMTguMDk2NjE0MSwyOC45OTY0NDE0IDI5Ljk5NDMyNzksMjguOTc3MzYzMyAyOS45OTQzMjc5LDI4Ljk3ODQ0NzMgQzI5Ljk5NDMyNzksMjguOTc3MzYzMyA0MS44OTM4NjI0LDI4Ljk5NjQ0MTQgNDMuMzA1NTgwMiwzMC40MjgzMTI1IFogTTIyLjAzNjY3OTIsNDQuODgzODk0NSBMMjAuMDk4MzY4Myw0NC44ODM4OTQ1IEwyMC4wOTgzNjgzLDM0LjU5OTA1MDggTDE4LjA5NDUxMzMsMzQuNTk5MDUwOCBMMTguMDk0NTEzMywzMi44NTE1MjM0IEwyNC4wNDA0NjQyLDMyLjg1MTUyMzQgTDI0LjA0MDUzNDIsMzQuNTk5MDUwOCBMMjIuMDM2Njc5MiwzNC41OTkwNTA4IEwyMi4wMzY2NzkyLDQ0Ljg4Mzg5NDUgWiBNMjcuOTg4MzcyMiw0My45MDc3MzA1IEMyNy42NjgyODQ4LDQ0LjI2OTkyNTggMjcuMzQwMzU0NSw0NC41NDM1OTU3IDI2Ljk5NTE5NzksNDQuNzMwNzYzNyBDMjYuNjUxODYyLDQ0LjkyMTkwNjMgMjYuMzIwMDgwMyw0NS4wMTMzMjIzIDI1Ljk5NjA3MTQsNDUuMDEzMzIyMyBDMjUuNTk2Nzg1LDQ1LjAxMzMyMjMgMjUuMzAxNjk2OCw0NC44ODM5NjY4IDI1LjA5NzM2MTgsNDQuNjE3Mzc4OSBDMjQuODk4Njk5LDQ0LjM1MTUxMzcgMjQuNzk2NDYxNSw0My45NTg2MDU1IDI0Ljc5NjQ2MTUsNDMuNDI4MTAzNSBMMjQuNzk2NDYxNSwzNi4wMDYxMzQ4IEwyNi41MTQ5NjE4LDM2LjAwNjEzNDggTDI2LjUxNDk2MTgsNDIuODE1MDc0MiBDMjYuNTE0OTYxOCw0My4wMjYwMTc2IDI2LjU1MTU4NTIsNDMuMTc3MjY5NSAyNi42MjExMjA3LDQzLjI3MDc4MTIgQzI2LjY5NjMyODMsNDMuMzY2MzE2NCAyNi44MTM5NzE0LDQzLjQxMjEzMjggMjYuOTc0MDUwMSw0My40MTIxMzI4IEMyNy4wOTk0NjYxLDQzLjQxMjEzMjggMjcuMjYxNDM1Niw0My4zNDk0MDYzIDI3LjQ1NDI4NjMsNDMuMjI1MDM3MSBDMjcuNjQ5MDk3Nyw0My4wOTk1ODQgMjcuODI0NTgyMSw0Mi45NDIzMzQgMjcuOTg4NDQyMiw0Mi43NTAzMjQyIEwyNy45ODg0NDIyLDM2LjAwNjI3OTMgTDI5LjcwNjg3MjUsMzYuMDA2Mjc5MyBMMjkuNzA2ODAyNSw0NC44ODM5NjY4IEwyNy45ODgzNzIyLDQ0Ljg4Mzk2NjggTDI3Ljk4ODM3MjIsNDMuOTA3NzMwNSBaIE0zNC4zNzAzNzMsNDQuOTk2MjY3NiBDMzQuMDMyODQ5Miw0NC45OTYyNjc2IDMzLjczMzgzOTUsNDQuOTMzNzU3OCAzMy40NzE1MjMzLDQ0LjgwNDMzMDEgQzMzLjIwOTM0NzEsNDQuNjc1MDQ2OSAzMi45NjA0MDU4LDQ0LjQ3NTk1NTEgMzIuNzM2ODEzOCw0NC4yMDMzNjkxIEwzMi43MzY4MTM4LDQ0Ljg4Mzk2NjggTDMwLjk5OTE5NjUsNDQuODgzOTY2OCBMMzAuOTk5MTk2NSwzMi44NTE1MjM0IEwzMi43MzY4MTM4LDMyLjg1MTUyMzQgTDMyLjczNjgxMzgsMzYuNzI1NjExMyBDMzIuOTcwMTM5NCwzNi40NTY4NTU1IDMzLjIxNTA4OTIsMzYuMjQ4ODc1IDMzLjQ3MzU1NCwzNi4xMDk2OTE0IEMzMy43MzU3MzAyLDM1Ljk2ODQxMjEgMzQuMDAwMTQ3MiwzNS44OTg2NzU4IDM0LjI2NjEwNDcsMzUuODk4Njc1OCBDMzQuODExOTU0OSwzNS44OTg2NzU4IDM1LjIyNjY0NywzNi4wODc3OTQ5IDM1LjUxMjA3MTcsMzYuNDY0MDA5OCBDMzUuODAxMzQ3OCwzNi44NDMxMTUyIDM1Ljk0NDEzMDIsMzcuMzk3MzkyNiAzNS45NDQxMzAyLDM4LjEyMzg3ODkgTDM1Ljk0NDEzMDIsNDMuMDQ5ODY1MiBDMzUuOTQzOTkwMSw0My42Nzc3MDkgMzUuODA4ODQwNiw0NC4xNTk0MzE2IDM1LjUzOTAzMTYsNDQuNDk0ODg4NyBDMzUuMjcwOTczMyw0NC44MzExNDA2IDM0Ljg3OTUyOTcsNDQuOTk2MjY3NiAzNC4zNzAzNzMsNDQuOTk2MjY3NiBaIE0zOC42MTcwMTA1LDQyLjMzMDM4ODcgQzM4LjYxNzAxMDUsNDIuNzk4MTY0MSAzOC42NzMxMDExLDQzLjEyMTU1MjcgMzguNzg0NzkyMSw0My4zMDM2NjIxIEMzOC45MDA0NzQ1LDQzLjQ4Mzc0OCAzOS4wOTMzMjUyLDQzLjU3MjQ5MDIgMzkuMzY3MjY1Nyw0My41NzI0OTAyIEMzOS42NTI1NTA0LDQzLjU3MjQ5MDIgMzkuODUxMjgzMiw0My40OTU3NDQxIDM5Ljk2NTA3NSw0My4zNDI1NDEgQzQwLjA3Njk3Niw0My4xODkyNjU2IDQwLjEzNjcwNzksNDIuODUyOTQxNCA0MC4xMzY3MDc5LDQyLjMzMDM4ODcgTDQwLjEzNjcwNzksNDEuOTI1NDEyMSBMNDEuOTA1Mjc2Niw0MS45MjU0MTIxIEw0MS45MDUyNzY2LDQyLjM4MTI2MzcgQzQxLjkwNTI3NjYsNDMuMjkxODgyOCA0MS42OTEwNjgsNDMuOTc3NDY2OCA0MS4yNTcyNTg5LDQ0LjQ0MDE4MzYgQzQwLjgyOTE5MTksNDQuODk3OTg2MyA0MC4xODQ4ODU2LDQ1LjEyNTc2NzYgMzkuMzI4NjgxNiw0NS4xMjU3Njc2IEMzOC41NTkwOTkzLDQ1LjEyNTc2NzYgMzcuOTUxNTU2NSw0NC44ODM4OTQ1IDM3LjUwOTkwNDUsNDQuMzk0Mjk0OSBDMzcuMDY4MTEyNCw0My45MDc4MDI3IDM2Ljg0NDM4MDQsNDMuMjM2ODg4NyAzNi44NDQzODA0LDQyLjM4MTE5MTQgTDM2Ljg0NDM4MDQsMzguMzk0NTg1OSBDMzYuODQ0MzgwNCwzNy42MjczNDE4IDM3LjA4OTMzMDIsMzYuOTk2MzkwNiAzNy41NzUzNzg1LDM2LjUxMjcxNjggQzM4LjA2MTI4NjcsMzYuMDI4MTAzNSAzOC42ODYxOTU5LDM1Ljc4NjMwMjcgMzkuNDU3NzM4OSwzNS43ODYzMDI3IEM0MC4yNDQ1NDc1LDM1Ljc4NjMwMjcgNDAuODUwMTk5NiwzNi4wMTExMjExIDQxLjI3MjUyNDUsMzYuNDU5OTYyOSBDNDEuNjk0ODQ5NCwzNi45MDc3MjA3IDQxLjkwNTIwNjYsMzcuNTUyNjE5MSA0MS45MDUyMDY2LDM4LjM5NDU4NTkgTDQxLjkwNTIwNjYsNDAuNjU3NTExNyBMMzguNjE3MDEwNSw0MC42NTc1ODQgTDM4LjYxNzAxMDUsNDIuMzMwMzg4NyBaIE0zMy45OTIzMDQzLDM3LjUzODY3MTkgQzM0LjExMzY1ODgsMzcuNjkzODI2MiAzNC4xNzM1MzA4LDM3LjkyMTY3OTcgMzQuMTczNTMwOCwzOC4yMjEyOTMgTDM0LjE3MzUzMDgsNDIuODA1MDI5MyBDMzQuMTczNTMwOCw0My4wOTA1NTA4IDM0LjEyMTQzMTcsNDMuMjkxNTkzOCAzNC4wMjMyNTU2LDQzLjQxNjAzNTIgQzMzLjkyNDkzOTYsNDMuNTQzNDM5NSAzMy43NzA1MzMsNDMuNjA2MTY2IDMzLjU2MDMxNTgsNDMuNjA2MTY2IEMzMy40MTM4MjIxLDQzLjYwNjE2NiAzMy4yNzY5MjE5LDQzLjU3MjIwMTIgMzMuMTQ1NjIzNyw0My41MDk2MTkxIEMzMy4wMTI2NDUsNDMuNDQ3ODMyIDMyLjg3NTYwNDcsNDMuMzM5MzYxMyAzMi43MzY4MTM4LDQzLjE5NjEzMDkgTDMyLjczNjgxMzgsMzcuNjY1MTM2NyBDMzIuODU0Mzg2OSwzNy41NDI3MTg4IDMyLjk3MjAzMDEsMzcuNDUyMTY5OSAzMy4wOTE1NjM5LDM3LjM5NDM1NzQgQzMzLjIxMTIzNzgsMzcuMzM0NjY2IDMzLjMzMjY2MjQsMzcuMzA3NzgzMiAzMy40NTYwNDc2LDM3LjMwNzc4MzIgQzMzLjY4NzQxMjUsMzcuMzA3NzgzMiAzMy44NjY4ODgzLDM3LjM4NTM5NjUgMzMuOTkyMzA0MywzNy41Mzg2NzE5IFogTTM4Ljc5NDUyNTYsMzcuNTg0NDg4MyBDMzguNjc0OTkxOCwzNy43Mzk1NzAzIDM4LjYxNzE1MDYsMzguMDA4MzI2MiAzOC42MTcxNTA2LDM4LjM3OTYyNyBMMzguNjE3MTUwNiwzOS4yNzYyMjY2IEw0MC4xMzY5MTgsMzkuMjc2MjI2NiBMNDAuMTM2OTE4LDM4LjM3OTYyNyBDNDAuMTM2OTE4LDM4LjAwODM5ODQgNDAuMDc1MjI1NCwzNy43Mzk3ODcxIDM5Ljk1NTU1MTUsMzcuNTg0NDg4MyBDMzkuODM5ODY5MSwzNy40MTgyMDUxIDM5LjY0NTEyNzYsMzcuMzM5NjUyMyAzOS4zODQ3MDIxLDM3LjMzOTY1MjMgQzM5LjExMDkwMTcsMzcuMzM5NjUyMyAzOC45MTQxOTk1LDM3LjQxODIwNTEgMzguNzk0NTI1NiwzNy41ODQ0ODgzIFogTTM4Ljc5NDUyNTYsMzcuNTg0NDg4MyIgaWQ9IlBhdGgiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4xOTc4MzgsMTIgTDIxLjc5MTcyOTQsMjAuMDAzMDU2NiBMMjEuNzkxNzI5NCwyNS4yNTQ1MjczIEwyMy45NzEyMDg4LDI1LjI1NDUyNzMgTDIzLjk3MTIwODgsMTkuNzU1MjU3OCBMMjYuNTA3MjU4OSwxMiBMMjQuMjkxMjI2MSwxMiBMMjIuOTQ1MTkyNCwxNy4yOTgyMjY2IEwyMi44MDgyMjIyLDE3LjI5ODIyNjYgTDIxLjM5MjU4MywxMiBMMTkuMTk3ODM4LDEyIFogTTI5LjU0Njc5MzgsMTUuMjI5NDA2MyBDMzAuMzQ3MTE3MywxNS4yMjk0MDYzIDMxLjAwNDg2ODYsMTUuNDY2MTQ4NCAzMS41MTc4NzY3LDE1LjkzOTkyMTkgQzMyLjAyNjk2MzQsMTYuNDEyNjExMyAzMi4yODM1Mzc2LDE3LjAyMjYwNTUgMzIuMjgzNTM3NiwxNy43NjgwMjU0IEwzMi4yODM1Mzc2LDIyLjgxOTM5MjYgQzMyLjI4MzUzNzYsMjMuNjU1Mjg5MSAzMi4wMzI4NDU2LDI0LjMxMDE2MDIgMzEuNTMzMzUyNCwyNC43ODY4OTY1IEMzMS4wMjc5NzcsMjUuMjYyNTQ4OCAzMC4zMzk0ODQ1LDI1LjUwMTQ1OSAyOS40NTgxNDEzLDI1LjUwMTQ1OSBDMjguNjEzNDIxNCwyNS41MDE0NTkgMjcuOTM0NTkyNSwyNS4yNTQ1OTk2IDI3LjQyNTM2NTcsMjQuNzY1MTQ0NSBDMjYuOTIwMDYwMywyNC4yNzM0NDkyIDI2LjY2MzYyNjMsMjMuNjExNzEyOSAyNi42NjM2MjYzLDIyLjc4MDgwMjcgTDI2LjY2MzQ4NjIsMTcuNzEzMjQ4IEMyNi42NjM0ODYyLDE2Ljk1Mzk1MzEgMjYuOTIzODQxNywxNi4zNTA4OTY1IDI3LjQ0NjUxMzQsMTUuOTAzMDY2NCBDMjcuOTY3Mjk0NCwxNS40NTQyMjQ2IDI4LjY2OTIzMTksMTUuMjI5NDA2MyAyOS41NDY3OTM4LDE1LjIyOTQwNjMgWiBNMjkuNDU0MTQ5OCwyMy44MDc0ODA1IEMyOS43MTY1MzYsMjMuODA3NDgwNSAyOS45MjI4MzE3LDIzLjczMTk2MjkgMzAuMDc5MDU5LDIzLjU4MzYwMTYgQzMwLjIzMzQ2NTYsMjMuNDMyMjc3MyAzMC4zMTA2MzM5LDIzLjIyNjM5MjYgMzAuMzEwNjMzOSwyMi45NjU1ODU5IEwzMC4zMTA2MzM5LDE3LjYzODUyNTQgQzMwLjMxMDYzMzksMTcuNDI0NjkxNCAzMC4yMzE0MzQ5LDE3LjI1MjQ4MjQgMzAuMDczMzE2OSwxNy4xMjAwOTE4IEMyOS45MTUxOTg5LDE2Ljk4ODc4NTIgMjkuNzA4ODMzMiwxNi45MjQwMzUyIDI5LjQ1NDE0OTgsMTYuOTI0MDM1MiBDMjkuMjE2OTcyOCwxNi45MjQwMzUyIDI5LjAyNjA4MjgsMTYuOTg4Nzg1MiAyOC44Nzc1NTgzLDE3LjEyMDA5MTggQzI4LjczMDk5NDYsMTcuMjUyNDgyNCAyOC42NTU3ODcsMTcuNDI0NTQ2OSAyOC42NTU3ODcsMTcuNjM4NTI1NCBMMjguNjU1Nzg3LDIyLjk2NTY1ODIgQzI4LjY1NTcxNjksMjMuMjMzMzMwMSAyOC43MjcwNzMxLDIzLjQzOTI4NzEgMjguODYzOTczMywyMy41ODc1NzYyIEMyOS4wMDA5NDM2LDIzLjczNDg1MzUgMjkuMTk3NzE1NywyMy44MDc0ODA1IDI5LjQ1NDE0OTgsMjMuODA3NDgwNSBaIE0zNy40NDA2NDkxLDI1LjI1NDU5OTYgTDM3LjQ0MDY0OTEsMjQuMTc0ODc4OSBDMzcuMDg3NjQ5NiwyNC41NzE5MDYzIDM2LjcxNTUzMzEsMjQuODc3NTE3NiAzNi4zMjc3MzA5LDI1LjA4NDQxNDEgQzM1Ljk0MjAyOTQsMjUuMjkyMzk0NSAzNS41Njc4MTIyLDI1LjM5NjAyMzQgMzUuMjA1MTQ5MSwyNS4zOTYwMjM0IEMzNC43NTM5NzM3LDI1LjM5NjAyMzQgMzQuNDIwMjMxMiwyNS4yNDk2ODU1IDM0LjE5Mjc4NzgsMjQuOTU5MTA1NSBDMzMuOTY3MDk1LDI0LjY2NzUxMzcgMzMuODUzMzAzMywyNC4yMzE2Nzk3IDMzLjg1MzMwMzMsMjMuNjQ4NDIzOCBMMzMuODUzMzAzMywxNS40NzYxMjExIEwzNS43ODU3MzIxLDE1LjQ3NjEyMTEgTDM1Ljc4NTczMjEsMjIuOTcyNTk1NyBDMzUuNzg1NzMyMSwyMy4yMDQ0OTYxIDM1LjgzMDE5ODQsMjMuMzcxNjQ2NSAzNS45MTExNDgxLDIzLjQ3NTEzMDkgQzM1Ljk5MDIwNzEsMjMuNTc4NzU5OCAzNi4xMjMyNTU5LDIzLjYzMTM2OTEgMzYuMzA0NjIyNCwyMy42MzEzNjkxIEMzNi40NDUzNzQsMjMuNjMxMzY5MSAzNi42MjY3NDA1LDIzLjU2MTc3NzMgMzYuODQ0NTkwNSwyMy40MjU0MTIxIEMzNy4wNjA1NDk3LDIzLjI4ODEwNzQgMzcuMjYxMTczMiwyMy4xMTI3OTEgMzcuNDQwNTA5LDIyLjg5Nzk0NTMgTDM3LjQ0MDUwOSwxNS40NzYxMjExIEwzOS4zNzY5OTkzLDE1LjQ3NjEyMTEgTDM5LjM3Njk5OTMsMjUuMjU0NTk5NiBMMzcuNDQwNjQ5MSwyNS4yNTQ1OTk2IFogTTM3LjQ0MDY0OTEsMjUuMjU0NTk5NiIgaWQ9IlBhdGgiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01OS41NTA4Mzg2LDMwIEM1OS41NTA4Mzg2LDQ2LjU2ODU0MzMgNDYuMzIwNDc4Myw2MCAzMCw2MCBDMjMuOTQ3MTIxMiw2MCAxOC4zMTkyODU4LDU4LjE1MjUxMzQgMTMuNjMzOTA1MSw1NC45ODI3NzU0IEw0Ny40OTQxMjY0LDUuODE5NDExMDMgQzU0LjgwNjAyNDUsMTEuMjgwNjUwMyA1OS41NTA4Mzg2LDIwLjA3Nzc5NzMgNTkuNTUwODM4NiwzMCBaIE01OS41NTA4Mzg2LDMwIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+); }
   &.googleplus	  { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDYwIDYwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIj4KICAgIDx0aXRsZT5Hb29nbGUgKzwvdGl0bGU+CiAgICA8ZGVzY3JpcHRpb24+Q3JlYXRlZCB3aXRoIFNrZXRjaCAoaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoKTwvZGVzY3JpcHRpb24+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0iR29vZ2xlLSsiIHNrZXRjaDp0eXBlPSJNU0FydGJvYXJkR3JvdXAiPgogICAgICAgICAgICA8ZyBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjExMjI5MDM0NCwyOS41MDgxOTY3IEMwLjExMjI5MDM0NCwxMy4yMTEyNjg5IDEzLjM0MjY1MDYsMCAyOS42NjMxMjksMCBDNDUuOTgzNjA3MywwIDU5LjIxMzk2NzYsMTMuMjExMjY4OSA1OS4yMTM5Njc2LDI5LjUwODE5NjcgQzU5LjIxMzk2NzYsNDUuODA1MTI0NiA0NS45ODM2MDczLDU5LjAxNjM5MzQgMjkuNjYzMTI5LDU5LjAxNjM5MzQgQzEzLjM0MjY1MDYsNTkuMDE2MzkzNCAwLjExMjI5MDM0NCw0NS44MDUxMjQ2IDAuMTEyMjkwMzQ0LDI5LjUwODE5NjcgWiBNMC4xMTIyOTAzNDQsMjkuNTA4MTk2NyIgZmlsbD0iI0QzNDgzNiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTU4LjI5NTc2NzIsMjIuNzE1NzA0OSBMNTEuMzA3NTkxNSwyMi43MTU3MDQ5IEw1MS4zMDc1OTE1LDMwLjQ2OTIwNzkgTDQ4LjAxMzY2MjMsMzAuNDY5MjA3OSBMNDguMDEzNjYyMywyMi43MTU3MDQ5IEw0MC4zMjc4Njg5LDIyLjcxNTcwNDkgTDQwLjMyNzg2ODksMTkuNDg4NjU5IEw0OC4wMTM2NjIzLDE5LjQ4ODY1OSBMNDguMDEzNjYyMywxMS44MDMyNzg3IEw1MS4zMDc1OTE1LDExLjgwMzI3ODcgTDUxLjMwNzU5MTUsMTkuNDg4NjU5IEw1Ny4xNzUyNDk2LDE5LjQ4ODY1OSBDNTcuNjA4NjI1NiwyMC41MzUzODMzIDU3Ljk4MzUwNDMsMjEuNjEyNDcyNiA1OC4yOTU3NjcyLDIyLjcxNTcwNDkgWiBNNTguMjk1NzY3MiwyMi43MTU3MDQ5IiBpZD0iU2hhcGUiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjIzMDMzODgzLDQ4LjYwNTA4MTEgQzkuMDU2NjMyNTQsNDcuMjE3NTUzNiAxMC4zMzc4NjM5LDQ1Ljg1MzQgMTIuMjM1OTMwOCw0NC43MzIzODI4IEMxNi41MTg2MjMxLDQyLjExMjA5MjEgMjIuMjg2NjQyMSw0MS43NjYwMTU5IDI1LjQwNTgyODMsNDEuNTY4MjU4MSBDMjQuNDQwMzY1OSw0MC4zMzIyNzE5IDIzLjMyNjM3MDgsMzkuMDIyMTI2NSAyMy4zMjYzNzA4LDM2Ljg3MTUxMDUgQzIzLjMyNjM3MDgsMzUuNzA5NjgzNSAyMy42NzI5NDcxLDM1LjAxNzUzMTIgMjQuMDE5NTIzMywzNC4yMDE3ODAzIEMyMy4yNTIxMDQ1LDM0LjI3NTkzOTUgMjIuNTA5NDQxMSwzNC4zNTAwOTg2IDIxLjgxNjI4ODYsMzQuMzUwMDk4NiBDMTQuNTEzNDMxOSwzNC4zNTAwOTg2IDEwLjM3OTI3MjMsMjguOTExNzU5MyAxMC4zNzkyNzIzLDIzLjU0NzU3OTEgQzEwLjM3OTI3MjMsMjAuMzgzNDU0NCAxMS44Mzk4NDM3LDE2Ljg2ODMwOTYgMTQuNzg1NzQxOCwxNC4zMjQ2NSBDMTguNzIxODU3OCwxMS4wOTM3ODIgMjMuNDAwNjM3MiwxMC41NDI1MzIxIDI3LjExMzk1NDIsMTAuNTQyNTMyMSBMNDEuMjk4ODI1LDEwLjU0MjUzMjEgTDM2Ljg5MjM1NTUsMTMuMDE2OTc2NSBMMzIuNjM0NDE4NywxMy4wMTY5NzY1IEMzNC4yMTg3NjczLDE0LjMyNDY1IDM3LjUxMTI0MTcsMTcuMDc1OTU1MyAzNy41MTEyNDE3LDIyLjMxMTU5MjkgQzM3LjUxMTI0MTcsMjcuNDAzODU2MSAzNC42MTQ4NTQ0LDI5LjgwMTY2OTQgMzEuNzQzMjIyNiwzMi4wNzU4ODQgQzMwLjgyNzI3MTEsMzIuOTY1Nzk0MSAyOS44MTIyOTc4LDMzLjkyOTg2MzMgMjkuODEyMjk3OCwzNS40Mzc3NjY1IEMyOS44MTIyOTc4LDM2Ljk0NTY2OTcgMzAuODI3MjcxMSwzNy43ODYxNDAzIDMxLjU5NDY5LDM4LjQwNDEzMzQgTDM0LjA3MDIzNDYsNDAuMzMyMjcxOSBDMzcuMTE1MTU0NSw0Mi44NTM2ODM4IDM5Ljg2MzAwOTEsNDUuMjAyMDU3NiAzOS44NjMwMDkxLDQ5Ljk0ODI0NDcgQzM5Ljg2MzAwOTEsNTMuMDc4MTc5MiAzOC40MDAyNTI5LDU2LjIxOTY2MDMgMzUuNTUwMTgxMSw1OC42MzA1MzAyIEMzNC4wMTY3MDEyLDU4Ljg4MDE3NzUgMzIuNDQzNTc1Myw1OS4wMTE5NjcxIDMwLjg0MDQzMjQsNTkuMDE2MjgzOSBDMzMuNzM0NDYwMyw1Ny43NDg2MzExIDM1LjIzMzc0MDYsNTUuNDI5MjU1NiAzNS4yMzM3NDA2LDUyLjY0MjY5NDYgQzM1LjIzMzc0MDYsNDkuMTMyNDkzOCAzMi45ODA5OTUsNDcuMjc4NTE0NSAyNy43MzI4NDAzLDQzLjU0NTgzNjEgQzI3LjE4ODIyMDUsNDMuNDk2Mzk2NiAyNi44NDE2NDQyLDQzLjQ5NjM5NjYgMjYuMTQ4NDkxNyw0My40OTYzOTY2IEMyNS41Mjk2MDU2LDQzLjQ5NjM5NjYgMjEuODE2Mjg4Niw0My42MTk5OTUzIDE4LjkxOTkwMTQsNDQuNTg0MDY0NSBDMTcuNDA5ODE5MSw0NS4xMjc4OTg0IDEzLjAwMzM0OTcsNDYuNzg0MTIgMTMuMDAzMzQ5Nyw1MS42Nzg2MjU0IEMxMy4wMDMzNDk3LDUyLjIxMDUzODQgMTMuMDYwMDU2Myw1Mi43MjYyMzA4IDEzLjE3MDY5NTEsNTMuMjIyOTAwMSBDNS45MTIzMTMsNDcuODQ2Mjg5OCA5LjA1NjYzMjU5LDQ4LjYwNTA4MjQgOC4yMzAzMzg4Myw0OC42MDUwODExIFogTTMxLjQ0NjE1NzMsMjUuNDc1NzE3NiBDMzEuNDQ2MTU3MywyMC41MDcwNTMgMjguNTAwMjU5MiwxMi44MTE4MDI4IDIyLjc4MTc1MSwxMi44MTE4MDI4IEMyMC45OTkzNTg5LDEyLjgxMTgwMjggMTkuMDY4NDM0LDEzLjcwNjY1NjggMTcuOTU0NDM5LDE1LjA4MzU0NTUgQzE2Ljc5MDkzMywxNi41MjcxNzc0IDE2LjQ0NDM1NjcsMTguMzgxMTU2NyAxNi40NDQzNTY3LDIwLjE2MDk3NjkgQzE2LjQ0NDM1NjcsMjQuNzgzNTY1MyAxOS4xMTc5NDQ5LDMyLjQyMTk2MDEgMjUuMDU5MjUyMSwzMi40MjE5NjAxIEMyNi43NjczNzc5LDMyLjQyMTk2MDEgMjguNjI0MDM2NCwzMS41ODE0ODk1IDI5LjczODAzMTUsMzAuNDkzODIxNiBDMzEuMzIyMzgwMSwyOC45MTE3NTkzIDMxLjQ0NjE1NzMsMjYuNzExNzAzOCAzMS40NDYxNTczLDI1LjQ3NTcxNzYgWiBNMzEuNDQ2MTU3MywyNS40NzU3MTc2IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTU5LjI3OTM3MzcsMjkuNjg1ODI1MiBDNTkuMjc5MzczNyw0NS45ODI3NTMxIDQ2LjA0OTAxMzQsNTkuMTk0MDIxOSAyOS43Mjg1MzUxLDU5LjE5NDAyMTkgQzIzLjY3NTY1NjMsNTkuMTk0MDIxOSAxOC4wNDc4MjA4LDU3LjM3NjgyMiAxMy4zNjI0NDAyLDU0LjI1OTA0NjkgTDQ3LjIyMjY2MTUsNS45MDE2MzkzNCBDNTQuNTM0NTU5NSwxMS4yNzMzNTAxIDU5LjI3OTM3MzcsMTkuOTI2MjgxNiA1OS4yNzkzNzM3LDI5LjY4NTgyNTIgWiBNNTkuMjc5MzczNywyOS42ODU4MjUyIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+); }
-
+  &.telegram      { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAKyElEQVR4Aa2YSXAcVx3GOyxZEoocTEJIbGtk7ZYl2dYyUpwlxQE4cKLgABSV4hCKAyeqqEAIhbkAoSA4sTWS5ZEsWfsieTG2EyeOMUk02vdlpJnRbu37Ilmz9Mf37+l2e5wpRVle6avX0z3d7zfff3kzUnYzflJV9VUF+IrxOvnd6cesdZPPZdaNv2o9P1ZhrRvryqgbW7LWjW6LgsfjndbasYrMutFXee655HPTjxn3H+eztGd+8YEHXrqJrxmv0urchzJqRv+RUTvqzrxwG8feXcGx6yvI+s8sMi9MwHp+XJNck3NyTd4jrzPqeM/58TfSL00lKvqQZ8san4/tOB1D8OasqvFn0qtHstNrRrayri0h8/IMCAk656NLXs5+SqVTEMmxfo7Xxn2cNeBn312Wa1vUqWMXx55WZMgastbuh4QUd+1PrXS/nFo1tGi9toj02jGkVQ/5COqnVEpADdidZAD7NOevr4IfbMFaO/GLMGvuHu5IhceWdnEKaXXjSK30eAkaoAgpGka6iJBBUBFBPx02wPd4My9PI+vqvIBmh4fcAS76quuhIxWuS+lXFnCkwh04Wun2UTha6dGUWiUyQSkTdJeu6qEPHHt/XV5fTKzCgztC3psHKWWDl1Ivz+Jw+aCXUg9XuAgqciMcaGoIqA67O1BV3Dz23poGGYbFrFajIJJLnbajhEsuHfCmEI6w4ExYkQlqwpqgIa7uNvw6pO7kqSDgcQKSxyz3m1orSSzpfzmlZhRJJc5AUqlTJayAIqVMVwioCfslhF+lAllX5kFYrXDM9qY3zLhy59OJxX3zSRVuAvb7KGgSSF06KGWCHv5MoMPIpJtWKv0ToOO+LBYO++hcau3Id+5uEMYOkVjUk51cN4HEc71eguKQoSAoZYBSnwAVhYCasARNI+gxwj1PpfD4CGEzwuUpQ80WxA8xdtIEFLiC3oMJRd2bB4v7cbCoN3DwXC9BdYWAmq7uFP7DOmgGIZ+r9nD24MFSN5RiF6xSRFQyQTNqPpGnASv7JGE3MutGEhRjJBR2vZFYNYKEwm4fQZFQ1ENQKhwoFQ5UXBUdJWQmAbOoyNJBKEUDUEoG8cq1UVR2zcO1sIXr7hXsJ3R69RAVWv2E9GW9syTz34M7xemWR+POdg4mcBHO/vjCLsQXEpIyQXvCgoqrIoFMLXPi2fIBDVYp7Nf0g1o3Tjqm0DS+hpl1H9a9AfAPzrktJNPZwwIZWv0C7LcyF9NrRwa4xT6ixNjbXogr7EFcQacAqhTiz3ZR94J2CygVBD2o63BJHzJK+5FGPV7UB8Xeg0eZJq++N4or/QsYXryDNa+KLb+KlTt+zG8EIW96lhluOi2FZBSU2VNVAc04PyHALymx9vY/xJd7EJvf7ost6ABlwFIGqAkrkEeLe2GlDhT2EKobSn4Pflw7iPzmKXROrmNxy49Nn6ppZnUb7pk1DW5x048Nnitqm6XDA3i20uynIT212uOzXl1AWs3IH5Voe3tVXJkbMfZ2b0x+OyjC3gXlHARNJmQanUwhpHKmE0puBw4R8i83RvCBaxETK9t0KyAO0a0AlgjpmVlHx8giJpfvyGtNy3Tyzx+MMzedyKp0hWn+HpE3gz2RblYqUWdau2KKehFlb/NH29tA6ZCEJWgynUwt7MQT9g4oOW1Q8jrwq4uDqGyfxsDcJhcM0KlgCMUhAZima50Eax2ax+zaNla2A7zmwxrnSV770Xk39hQ7kcGCMluVCUpAfxpDzBbVqRzIa1mOsreDoCqF6DNBSFECIZXcViinWpBV3IU3b42gfniJCe+VUNGtoFMSvmUdcGh2HfUDM2gfXsACz2tuEm5py4c7zMXe6Q08Xhzsq0ek8sM3f/WI9MtK95ISebrZf+B0C0SERVReKwQ0joB7ePzLmj5c7J6Be35Tc2JDd2uBiwqAAArE1ModhnMBt3qn0Du+fDecAibvF0kF32A6SDFlsPKTqDDNn9IdLXf5FUtuk5+QMCSg0QRNIKSS08L8WoAKgGwSohAwAZbjwalVNAzO4n9903BOrmBZh5N5lTPvo4KABU2TTJNuZLHyEzUnNYXfpcoG/UpEbtOShVAEVSNzm+6CCuQzPP/Dkk788+YQrjvnMLSwxYWDLgrA2MKmlmcf9U/jY+cMi2LNcIsiHMHWdW35ggX0u3eG6GAX0kv62KqMnsp+Gtr81RQ6SMhFJcLW0GlhAUTkNPotOU0ENdSMKIIqtiYobzVAOdmE757rwPHrLtwYmEff7WXUE0rAJOeG59YFiGCmawK24Q3KH4BWPN+v6MeeAnYD6aXhm7/kpz+legRJZc4OZX+2o9JS2AuCegkJkYUyQOMImXymBYl09Js5BD5B2OxmXGqfQIt7Tgvt5NIWgXS4e8A2KXFOZhndk6t0rxPJbFeJ0vjDbKk6qDfl/G0cKu0vV/bnNPxeAPfZGnz7bQ0QEVZAg9JBI+loXF4z0u0tmqu5t4bQzvDe6puCa2Y1WNWSa4TcCIJRKrZZuXd8QcBrfbO8t13rp9L8E8zmH7qlFvf65JsVQ/+ass/W+Px+Lq7DqRTulelqEDZewn6qEb+p60GLZx7vd0+g6KNBNHlmNafIJDOhVHj9Ip4LqJBx6sNRut9KwC4YW2qYvV/VHC118lzfC8reN+sf2W9rdEbY2wnk8N8PeL+rMYT8hq0RGfktuMGWcqPnNsocbsqF0x8OwTW3ARkEC4Hb5vGvLzjZGVpx5Ky+Q1H37/0E9ieWuwW033J2+GGFg3nY8DctzNmOu2HeCTSWoMrbDpQ4RvDf3tuoaHTjT1d6tfy02Ftxa3AOxhAXZUyzTx4624En89pwiNuo7FLh9n4C+uSrH2H/qhgj0tYcR8h1PdSBnQD3UQk5DYSpx+uX+3C1cxy/vdDF0DUihTm6R6/63I+GtVAbo/v2ClOjGUncAGKpGLux74sM2M5APLfd+IKutfiijtiQ3yQslhOWoj6B8O7GxaeyHTh0uhHfK2zhwg1GnjJHm5AkefqverxS2wMP24+M4qYxfqhGHM1vw4GQLZWgIkIS1JtQOUzAjjdNNh0w8kTDtyNsjbMRvJEQnxpqiw6pnHTggLw2rhEykjqaJy3JgWRW/evXBpCW34onGKGYvNAtVQclZJsvlo2boNPRBW1PmIAyjgd/dkZkO34eYe/Qq7nxU0MtUNE54a/vpZLo5rdYUMq/6/EUN4FoOmuhDohCQNsC/DalxhQR8EzbT4XlJZ3JGA9oP5Y5CPa25ZzTCLVK4fNqHxVNNwU0itUfQUVqMvZ+DVKNymvxxpR7EGVvPWH+cA8ZoSf54FrLuX4dUnfyi4CG6an6dhogqDe61EXQ5ppwLKGDMdd/SH19n81RqzupGjn5ZUkH9RFSjSoZRGRec7WsaTLsNMz/Lkl/fEsauF44XuoLu6k/wxtxph3yJcXC7hGy9i5GyKdgZf+MD5zRWhDzJtjMHf7PmJ+q3LMvu8EXwWfo7WxqX3ajVhC7cS58TlJGC5I+yYeuyo6jV7rIpzt7P7Cqn/Pq79HukXvlGYzMiaicj58MrgN9nc83WN1muR841Rgr2yLd6BM3ZUGRhGs/k94A5LGcM6+zauUeuVeeYZrAZ38pg5/y3hBYjt98eK+t6UV+E3qNQBX8TtnFeZHy61oMnnNUyHv22upfjH7b9VBIOHf5j/P/A/tEhqArhCiRAAAAAElFTkSuQmCC);}
 }

From 5e8682fa086e96e69c034c492d62219c0780c5ac Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:14:39 +0800
Subject: [PATCH 018/172] Add telegram

---
 _includes/svg-icons.html | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/_includes/svg-icons.html b/_includes/svg-icons.html
index 7a64482cf3e20..0c39b6e13ab0d 100644
--- a/_includes/svg-icons.html
+++ b/_includes/svg-icons.html
@@ -10,4 +10,5 @@
 {% if site.footer-links.twitter %}<a href="https://www.twitter.com/{{ site.footer-links.twitter }}"><i class="svg-icon twitter"></i></a>{% endif %}
 {% if site.footer-links.stackoverflow %}<a href="http://stackoverflow.com/{{ site.footer-links.stackoverflow }}"><i class="svg-icon stackoverflow"></i></a>{% endif %}
 {% if site.footer-links.youtube %}<a href="https://youtube.com/{{ site.footer-links.youtube }}"><i class="svg-icon youtube"></i></a>{% endif %}
-{% if site.footer-links.googleplus %}<a href="https://plus.google.com/{{ site.footer-links.googleplus }}"><i class="svg-icon googleplus"></i></a>{% endif %}
\ No newline at end of file
+{% if site.footer-links.googleplus %}<a href="https://plus.google.com/{{ site.footer-links.googleplus }}"><i class="svg-icon googleplus"></i></a>{% endif %}
+{% if site.footer-links.telegram %}<a href="https://telegram.me/{{ site.footer-links.telegram }}"><i class="svg-icon telegram"></i></a>{% endif %}

From d38bad770cdbedf7be5fa0894f839a5b406b83bf Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:15:39 +0800
Subject: [PATCH 019/172] Update _config.yml

---
 _config.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_config.yml b/_config.yml
index 097e1c941c6e6..e8f972389e3ee 100644
--- a/_config.yml
+++ b/_config.yml
@@ -30,6 +30,7 @@ footer-links:
   stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers"
   youtube: # channel/<your_long_string> or user/<user-name>
   googleplus: # anything in your profile username that comes after plus.google.com/
+  telegram: devkini
 
 
 # Enter your Disqus shortname (not your username) to enable commenting on posts

From e58dacc042ca8365abf16b373c4aad145ecb193d Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:16:52 +0800
Subject: [PATCH 020/172] removed twitter

---
 _config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_config.yml b/_config.yml
index e8f972389e3ee..491292022a223 100644
--- a/_config.yml
+++ b/_config.yml
@@ -26,7 +26,7 @@ footer-links:
   linkedin:
   pinterest:
   rss: # just type anything here for a working RSS icon, make sure you set the "url" above!
-  twitter: jekyllrb
+  twitter:
   stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers"
   youtube: # channel/<your_long_string> or user/<user-name>
   googleplus: # anything in your profile username that comes after plus.google.com/

From f10ff080d0697169117f8fdb23ebd084cc26fa91 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:20:25 +0800
Subject: [PATCH 021/172] Added disqus

---
 _config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_config.yml b/_config.yml
index 491292022a223..8b42d4cf2e6fd 100644
--- a/_config.yml
+++ b/_config.yml
@@ -35,7 +35,7 @@ footer-links:
 
 # Enter your Disqus shortname (not your username) to enable commenting on posts
 # You can find your shortname on the Settings page of your Disqus account
-disqus:
+disqus: devkini
 
 # Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking
 google_analytics:

From 4b229e20b3ab0b4aa2a13e6c5d2a0fd704e4e4f5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:23:39 +0800
Subject: [PATCH 022/172] Add telegram channel link

---
 about.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/about.md b/about.md
index 8deca5e4854cf..687f710deee15 100644
--- a/about.md
+++ b/about.md
@@ -6,4 +6,4 @@ permalink: /about/
 
 We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
 
-Feel free to join our [Telegram group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw).
+Feel free to join our [Telegram group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw) or Channel [telegram.me/devkini](https://telegram.me/devkini).

From 86152e440356888037783cebd48fd7f85a7aaa8f Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 00:52:05 +0800
Subject: [PATCH 023/172] Update 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 24f5adf688c3d..6c9d73377e198 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -107,7 +107,7 @@ Having a controller alone is not enough as Laravel still don't know about the co
 Route::resource('customer', 'CustomerController');
 ```
 
-This is where I got stucked initially, as the existing routes defined in `laravel-base` look like this:-
+With above route definition, if you try to access url such as http://localhost:8000/customer, Laravel will execute the `index()` method in `CustomerController` class. This is where I got stucked initially, as the existing routes defined in `laravel-base` look like this:-
 
 ```php
 <?php

From cf9c3e2176319ec94003cd083603ff4c33a36f65 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 12:56:51 +0800
Subject: [PATCH 024/172] Create 2015-12-07-git-finding-parent-branch

---
 _posts/2015-12-07-git-finding-parent-branch | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 _posts/2015-12-07-git-finding-parent-branch

diff --git a/_posts/2015-12-07-git-finding-parent-branch b/_posts/2015-12-07-git-finding-parent-branch
new file mode 100644
index 0000000000000..00bb037735b1c
--- /dev/null
+++ b/_posts/2015-12-07-git-finding-parent-branch
@@ -0,0 +1,21 @@
+---
+layout: post
+title: GIT: Finding Parent Branch
+author: kamal
+tags: git, tips
+---
+
+When you create a branch in git, using command such as:-
+
+```
+git checkout -b branch1
+```
+
+Git will create the new branch based on our current branch, usually the master branch. But it possible at the time we created the branch, we're not on master branch. So to figure out what is the branch origin/parent, we can use this command:-
+
+```
+current_branch=`git rev-parse --abbrev-ref HEAD`
+git show-branch -a | awk -F'[]^~[]' '/\*/ && !/'"$current_branch"'/ {print $2;exit}'
+```
+
+Reference - http://stackoverflow.com/questions/3161204/find-the-parent-branch-of-a-git-branch

From fe8e86573bd9b68df81c225310b523efe770fcf8 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 12:58:45 +0800
Subject: [PATCH 025/172] Rename 2015-12-07-git-finding-parent-branch to
 2015-12-07-git-finding-parent-branch.md

---
 ...ding-parent-branch => 2015-12-07-git-finding-parent-branch.md} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename _posts/{2015-12-07-git-finding-parent-branch => 2015-12-07-git-finding-parent-branch.md} (100%)

diff --git a/_posts/2015-12-07-git-finding-parent-branch b/_posts/2015-12-07-git-finding-parent-branch.md
similarity index 100%
rename from _posts/2015-12-07-git-finding-parent-branch
rename to _posts/2015-12-07-git-finding-parent-branch.md

From 72bd0bdaedb5416cd07a71e30c238574429afd66 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 12:59:26 +0800
Subject: [PATCH 026/172] Update 2015-12-07-git-finding-parent-branch.md

---
 _posts/2015-12-07-git-finding-parent-branch.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-07-git-finding-parent-branch.md b/_posts/2015-12-07-git-finding-parent-branch.md
index 00bb037735b1c..0341f84f305cb 100644
--- a/_posts/2015-12-07-git-finding-parent-branch.md
+++ b/_posts/2015-12-07-git-finding-parent-branch.md
@@ -1,6 +1,6 @@
 ---
 layout: post
-title: GIT: Finding Parent Branch
+title: "GIT: Finding Parent Branch"
 author: kamal
 tags: git, tips
 ---

From 4899612a9355ce1db721a8d9ab448e1f484729e6 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 17:40:16 +0800
Subject: [PATCH 027/172] Create 2015-12-07-javascript-promise.md

---
 _posts/2015-12-07-javascript-promise.md | 36 +++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100644 _posts/2015-12-07-javascript-promise.md

diff --git a/_posts/2015-12-07-javascript-promise.md b/_posts/2015-12-07-javascript-promise.md
new file mode 100644
index 0000000000000..596e38ca296b8
--- /dev/null
+++ b/_posts/2015-12-07-javascript-promise.md
@@ -0,0 +1,36 @@
+---
+layout: post
+title: JavaScript Promise
+author: kamal
+tags: javascript
+---
+
+This is an answer to a question in FB group:-
+
+>Confuse with callback and promises. In $.ajax, the success callback is async by default, why do we need to use promise? Can someone good in JS explain?
+
+Promise let you program in async while maintaining the synchronize structure of your code. Take this code:-
+
+```javascript
+var res;
+db_connect(host, function(conn) {
+  res = conn.query("SELECT * FROM ...");
+});
+console.log(res); // probably still null
+```
+
+Using promise:-
+
+```javascript
+var res;
+db.connect(host).then(function(conn) {
+  res = conn.query("select * from ...");
+});
+console.log(res); // already available
+```
+
+The first code is a common mistake to someone new in async programming because while the code is async, the structure is not, you assume it to run from top to bottom. Using promise, the program definitely run from top to bottom as you read it.
+
+> But promises like a callback? that `then()` is a callback of `db.connect`, but why promises is not a callback? What's the difference ?
+
+Ok, let rephrase it. Promise is a different (or maybe better) way of using callback. So doesn't mean that when you use promise, you're not using callback anymore. You can't remove callback since it's the core of the language, that's how javascript work. But you can use it in different way.

From e3a8a92c0f90040e3deb3ba72a1530161a6d05b9 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 17:43:33 +0800
Subject: [PATCH 028/172] Update 2015-12-07-javascript-promise.md

---
 _posts/2015-12-07-javascript-promise.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-07-javascript-promise.md b/_posts/2015-12-07-javascript-promise.md
index 596e38ca296b8..153091f2f2f0d 100644
--- a/_posts/2015-12-07-javascript-promise.md
+++ b/_posts/2015-12-07-javascript-promise.md
@@ -11,6 +11,8 @@ This is an answer to a question in FB group:-
 
 Promise let you program in async while maintaining the synchronize structure of your code. Take this code:-
 
+<!--more-->
+
 ```javascript
 var res;
 db_connect(host, function(conn) {

From 8bd390ba1f1d70470d030e6af6cb63a7b0f2e1c6 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 17:46:14 +0800
Subject: [PATCH 029/172] Update _config.yml

---
 _config.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_config.yml b/_config.yml
index 8b42d4cf2e6fd..6485d1cdc623e 100644
--- a/_config.yml
+++ b/_config.yml
@@ -76,3 +76,5 @@ exclude:
     - LICENSE
     - README.md
     - CNAME
+
+excerpt_separator: "<!--more-->"

From c0baa36b123452c61a57c3cca5b403a6ea81e24c Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 17:47:17 +0800
Subject: [PATCH 030/172] Update 2015-12-06-getting-started-with-laravel.md

---
 _posts/2015-12-06-getting-started-with-laravel.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-06-getting-started-with-laravel.md b/_posts/2015-12-06-getting-started-with-laravel.md
index 6c9d73377e198..5b5294ac9e9f6 100644
--- a/_posts/2015-12-06-getting-started-with-laravel.md
+++ b/_posts/2015-12-06-getting-started-with-laravel.md
@@ -6,6 +6,8 @@ author: kamal
 
 I'm using the [`laravel-base`][1] as starting point. For starter, the [`laravel-base`][1]'s `Readme.md` already covering it well.
 
+<!--more-->
+
 ## Database Tables
 Since I want to store some data in the db, the first thing to do is to create the table's schema. You accomplish this using the `artisan` command:-
 

From 875ca1bf94b9800f722e638f8041f44d1ad45aee Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 7 Dec 2015 17:50:47 +0800
Subject: [PATCH 031/172] Update 2015-12-07-javascript-promise.md

---
 _posts/2015-12-07-javascript-promise.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/_posts/2015-12-07-javascript-promise.md b/_posts/2015-12-07-javascript-promise.md
index 153091f2f2f0d..4a653bf2a9458 100644
--- a/_posts/2015-12-07-javascript-promise.md
+++ b/_posts/2015-12-07-javascript-promise.md
@@ -36,3 +36,7 @@ The first code is a common mistake to someone new in async programming because w
 > But promises like a callback? that `then()` is a callback of `db.connect`, but why promises is not a callback? What's the difference ?
 
 Ok, let rephrase it. Promise is a different (or maybe better) way of using callback. So doesn't mean that when you use promise, you're not using callback anymore. You can't remove callback since it's the core of the language, that's how javascript work. But you can use it in different way.
+
+For more in-depth write up on promise, I'd suggest to read [this article][1] (a very long one, /me haven't finished it yet ;))
+
+[1]:http://robotlolita.me/2015/11/15/how-do-promises-work.html

From bcb69ac726fcb3800d418b31eb556064b7774d5c Mon Sep 17 00:00:00 2001
From: Fadzlan Yahya <fadzlan@gmail.com>
Date: Thu, 10 Dec 2015 18:26:43 +0800
Subject: [PATCH 032/172] Next step in promise to be in thenable

---
 _posts/2015-12-07-javascript-promise.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/_posts/2015-12-07-javascript-promise.md b/_posts/2015-12-07-javascript-promise.md
index 4a653bf2a9458..d47e3c807bb17 100644
--- a/_posts/2015-12-07-javascript-promise.md
+++ b/_posts/2015-12-07-javascript-promise.md
@@ -27,8 +27,10 @@ Using promise:-
 var res;
 db.connect(host).then(function(conn) {
   res = conn.query("select * from ...");
+  return res;
+}).then(function(res){
+  console.log(res); // already available
 });
-console.log(res); // already available
 ```
 
 The first code is a common mistake to someone new in async programming because while the code is async, the structure is not, you assume it to run from top to bottom. Using promise, the program definitely run from top to bottom as you read it.

From 2cff79de024326dc1bf30cf65770dbd44b81b2c2 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:04:19 +0800
Subject: [PATCH 033/172] Create 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 25 +++++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100644 _posts/2015-12-13-serialization-format.md

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
new file mode 100644
index 0000000000000..24fe3446c99cd
--- /dev/null
+++ b/_posts/2015-12-13-serialization-format.md
@@ -0,0 +1,25 @@
+---
+layout: post
+title: Serialization Format (When JSON Not Good Enough)
+author: angch
+tags: json
+---Note: I do NOT recommend protobuf for new projects. Premature optimization. Stick with json, then switch when you have hit CPU/bandwidth bottlenecks.
+12:34:11 PM
+(yeah, those are serialization stuff, we still use them over https anyway. mix and match) Read all about them here so you'll be able to impress other folks: :) https://en.wikipedia.org/wiki/Comparison_of_data_serializatio
+
+This is an excerpt from a discussion in [#devkini][1] Telegram group, so if you have something more to say on this topic, heads up to the [group][1] to share your thought.
+
+[1]:https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw
+
+JSON is a *de-facto* format to use when transferring structured data over the network. But what if you need more than JSON can offer, such as faster serialization/de-serialization, efficient bandwidth usage or backward compatible data schema ? Let's look at some of the alternatives:-
+
+## msgpack
+From the website - MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.
+
+## (google) protobuf
+`protobuf` is binary. `msgpack` is 1:1 with json. If you have a set predefined structure, you'd save a lot of bandwidth not passing the keys, unlike json or msgpack. TL/DR: **much** smaller. For performance, capnproto (by one of the creators of protobuf) and flatbuffers (also by google) are the successors. Key diff: no serialization, so you get zero-copy performance.
+
+Note: **everyone** (with large data in production) uses protobuf for on-the-wire data (v2 though, v3 take up is a lot less). [Diablo3's network protocol](https://github.com/fry/d3) , google's gtfs-realtime, etcd. Compares very similar to facebook's apache thrift. Twitter [shoehorned protobuf into Hadoop](http://www.slideshare.net/kevinweil/protocol-buffers-and-hadoop-at-twitter/26-Enter_Protocol_Buffers_Protocol_Buffers).
+
+Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) SBE http://real-logic.github.io/simple-binary-encoding/ 
+[dota2 (and steam)](https://github.com/SteamRE/SteamKit/tree/master/Resources/Protobufs/dota).

From 66af7c943f6d0a1b36b229e5c2f60328a76a46cb Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:07:46 +0800
Subject: [PATCH 034/172] Update 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index 24fe3446c99cd..6338ea808494d 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -3,9 +3,7 @@ layout: post
 title: Serialization Format (When JSON Not Good Enough)
 author: angch
 tags: json
----Note: I do NOT recommend protobuf for new projects. Premature optimization. Stick with json, then switch when you have hit CPU/bandwidth bottlenecks.
-12:34:11 PM
-(yeah, those are serialization stuff, we still use them over https anyway. mix and match) Read all about them here so you'll be able to impress other folks: :) https://en.wikipedia.org/wiki/Comparison_of_data_serializatio
+---
 
 This is an excerpt from a discussion in [#devkini][1] Telegram group, so if you have something more to say on this topic, heads up to the [group][1] to share your thought.
 
@@ -21,5 +19,7 @@ From the website - MessagePack is an efficient binary serialization format. It l
 
 Note: **everyone** (with large data in production) uses protobuf for on-the-wire data (v2 though, v3 take up is a lot less). [Diablo3's network protocol](https://github.com/fry/d3) , google's gtfs-realtime, etcd. Compares very similar to facebook's apache thrift. Twitter [shoehorned protobuf into Hadoop](http://www.slideshare.net/kevinweil/protocol-buffers-and-hadoop-at-twitter/26-Enter_Protocol_Buffers_Protocol_Buffers).
 
+Note: I do NOT recommend protobuf for new projects. Premature optimization. Stick with json, then switch when you have hit CPU/bandwidth bottlenecks (yeah, those are serialization stuff, we still use them over https anyway. mix and match) [Read all about them here](https://en.wikipedia.org/wiki/Comparison_of_data_serializatio) so you'll be able to impress other folks: :) 
+
 Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) SBE http://real-logic.github.io/simple-binary-encoding/ 
 [dota2 (and steam)](https://github.com/SteamRE/SteamKit/tree/master/Resources/Protobufs/dota).

From 10562ad2f754289437451ca6b68f72e3ed17d845 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:10:10 +0800
Subject: [PATCH 035/172] Update 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index 6338ea808494d..000600081b513 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -21,5 +21,5 @@ Note: **everyone** (with large data in production) uses protobuf for on-the-wire
 
 Note: I do NOT recommend protobuf for new projects. Premature optimization. Stick with json, then switch when you have hit CPU/bandwidth bottlenecks (yeah, those are serialization stuff, we still use them over https anyway. mix and match) [Read all about them here](https://en.wikipedia.org/wiki/Comparison_of_data_serializatio) so you'll be able to impress other folks: :) 
 
-Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) SBE http://real-logic.github.io/simple-binary-encoding/ 
+Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) [SBE](http://real-logic.github.io/simple-binary-encoding/)  
 [dota2 (and steam)](https://github.com/SteamRE/SteamKit/tree/master/Resources/Protobufs/dota).

From 84cabd7d3deaadbe1e2be9134c344fd153dfc9f1 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:11:00 +0800
Subject: [PATCH 036/172] Update 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index 000600081b513..9a6e3e2da6e96 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -11,6 +11,8 @@ This is an excerpt from a discussion in [#devkini][1] Telegram group, so if you
 
 JSON is a *de-facto* format to use when transferring structured data over the network. But what if you need more than JSON can offer, such as faster serialization/de-serialization, efficient bandwidth usage or backward compatible data schema ? Let's look at some of the alternatives:-
 
+<!-- More -->
+
 ## msgpack
 From the website - MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.
 

From 5a863010cd424544c94ec2e2abaea5e1a58e3246 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:12:01 +0800
Subject: [PATCH 037/172] Update 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index 9a6e3e2da6e96..2ddf7a191f3b2 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -11,7 +11,7 @@ This is an excerpt from a discussion in [#devkini][1] Telegram group, so if you
 
 JSON is a *de-facto* format to use when transferring structured data over the network. But what if you need more than JSON can offer, such as faster serialization/de-serialization, efficient bandwidth usage or backward compatible data schema ? Let's look at some of the alternatives:-
 
-<!-- More -->
+<!--more-->
 
 ## msgpack
 From the website - MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

From 8a05b8927bf0439ab33c3d41a6ff74fc4befea20 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:14:34 +0800
Subject: [PATCH 038/172] Update 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index 2ddf7a191f3b2..8b18d83800efc 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -25,3 +25,5 @@ Note: I do NOT recommend protobuf for new projects. Premature optimization. Stic
 
 Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) [SBE](http://real-logic.github.io/simple-binary-encoding/)  
 [dota2 (and steam)](https://github.com/SteamRE/SteamKit/tree/master/Resources/Protobufs/dota).
+
+Other reading - [https://aaronparecki.com/articles/2015/01/22/1/why-not-json].

From 17f4987c81c5ad3caf738db79453071ba0a17690 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:16:01 +0800
Subject: [PATCH 039/172] Update 2015-12-13-serialization-format.md

---
 _posts/2015-12-13-serialization-format.md | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index 8b18d83800efc..b9e250a9b3c5d 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -7,8 +7,6 @@ tags: json
 
 This is an excerpt from a discussion in [#devkini][1] Telegram group, so if you have something more to say on this topic, heads up to the [group][1] to share your thought.
 
-[1]:https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw
-
 JSON is a *de-facto* format to use when transferring structured data over the network. But what if you need more than JSON can offer, such as faster serialization/de-serialization, efficient bandwidth usage or backward compatible data schema ? Let's look at some of the alternatives:-
 
 <!--more-->
@@ -26,4 +24,7 @@ Note: I do NOT recommend protobuf for new projects. Premature optimization. Stic
 Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) [SBE](http://real-logic.github.io/simple-binary-encoding/)  
 [dota2 (and steam)](https://github.com/SteamRE/SteamKit/tree/master/Resources/Protobufs/dota).
 
-Other reading - [https://aaronparecki.com/articles/2015/01/22/1/why-not-json].
+Other reading - [https://aaronparecki.com/articles/2015/01/22/1/why-not-json][2].
+
+[1]:https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw
+[2]:https://aaronparecki.com/articles/2015/01/22/1/why-not-json

From 29155970681a9f5005aae0a55d63c29425f28e38 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 13 Dec 2015 03:23:08 +0800
Subject: [PATCH 040/172] Update 2015-12-07-javascript-promise.md

---
 _posts/2015-12-07-javascript-promise.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-07-javascript-promise.md b/_posts/2015-12-07-javascript-promise.md
index d47e3c807bb17..2a96c13634fcb 100644
--- a/_posts/2015-12-07-javascript-promise.md
+++ b/_posts/2015-12-07-javascript-promise.md
@@ -5,6 +5,8 @@ author: kamal
 tags: javascript
 ---
 
+Update 1: Thanks to [fadzlan](https://github.com/fadzlan) for [fixing](https://github.com/devkini/devkini.github.io/pull/1) the second example.
+
 This is an answer to a question in FB group:-
 
 >Confuse with callback and promises. In $.ajax, the success callback is async by default, why do we need to use promise? Can someone good in JS explain?

From bce8fd2f7c088b30997e266119998227497436c9 Mon Sep 17 00:00:00 2001
From: Amree Zaid <mohd.amree@gmail.com>
Date: Sun, 13 Dec 2015 08:19:20 +0800
Subject: [PATCH 041/172] Fix broken link due to typo

---
 _posts/2015-12-13-serialization-format.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-13-serialization-format.md b/_posts/2015-12-13-serialization-format.md
index b9e250a9b3c5d..8535b43f8c251 100644
--- a/_posts/2015-12-13-serialization-format.md
+++ b/_posts/2015-12-13-serialization-format.md
@@ -19,7 +19,7 @@ From the website - MessagePack is an efficient binary serialization format. It l
 
 Note: **everyone** (with large data in production) uses protobuf for on-the-wire data (v2 though, v3 take up is a lot less). [Diablo3's network protocol](https://github.com/fry/d3) , google's gtfs-realtime, etcd. Compares very similar to facebook's apache thrift. Twitter [shoehorned protobuf into Hadoop](http://www.slideshare.net/kevinweil/protocol-buffers-and-hadoop-at-twitter/26-Enter_Protocol_Buffers_Protocol_Buffers).
 
-Note: I do NOT recommend protobuf for new projects. Premature optimization. Stick with json, then switch when you have hit CPU/bandwidth bottlenecks (yeah, those are serialization stuff, we still use them over https anyway. mix and match) [Read all about them here](https://en.wikipedia.org/wiki/Comparison_of_data_serializatio) so you'll be able to impress other folks: :) 
+Note: I do NOT recommend protobuf for new projects. Premature optimization. Stick with json, then switch when you have hit CPU/bandwidth bottlenecks (yeah, those are serialization stuff, we still use them over https anyway. mix and match) [Read all about them here](https://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats) so you'll be able to impress other folks: :) 
 
 Another smartsounding useless factoid: zfs, nfs, libvirt, firebird db uses XDR... Financial services ("millions of messages per second") like(?)/standardized(?)/use(?) [SBE](http://real-logic.github.io/simple-binary-encoding/)  
 [dota2 (and steam)](https://github.com/SteamRE/SteamKit/tree/master/Resources/Protobufs/dota).

From 8f73f33f185771c054c9325d9653ac5d7aab15e4 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Wed, 16 Dec 2015 21:11:45 +0800
Subject: [PATCH 042/172] Create week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 _drafts/week-3-dec-2015-updates.md

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
new file mode 100644
index 0000000000000..204fc53d91dfb
--- /dev/null
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -0,0 +1,8 @@
+---
+layout: post
+title: Week 3 Dec 20015 Updates
+---
+
+Hello, this is the first series of updates on software development that we hope to do on weekly basis.
+
+1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)

From b222e0a1db96801236939f497050060b63a03e27 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 17 Dec 2015 03:39:28 +0800
Subject: [PATCH 043/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index 204fc53d91dfb..5d4fb72ee098f 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -6,3 +6,4 @@ title: Week 3 Dec 20015 Updates
 Hello, this is the first series of updates on software development that we hope to do on weekly basis.
 
 1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)
+2. Google [Accelerated Mobile Pages (AMP)](https://github.com/ampproject/amphtml) project. This might be an [old news](https://googleblog.blogspot.my/2015/10/introducing-accelerated-mobile-pages.html) but we've just picking it up today. It is an attempt to make static web content load faster. This is particularly of interest to content publisher such as media company and being viewed as Google response to Facebook Instant Articles.

From 3c7ffcfb7ba8587e2772aca9cbd7c46477085968 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 17 Dec 2015 03:47:32 +0800
Subject: [PATCH 044/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index 5d4fb72ee098f..a8b8c46566f88 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -7,3 +7,4 @@ Hello, this is the first series of updates on software development that we hope
 
 1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)
 2. Google [Accelerated Mobile Pages (AMP)](https://github.com/ampproject/amphtml) project. This might be an [old news](https://googleblog.blogspot.my/2015/10/introducing-accelerated-mobile-pages.html) but we've just picking it up today. It is an attempt to make static web content load faster. This is particularly of interest to content publisher such as media company and being viewed as Google response to Facebook Instant Articles.
+3. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.

From 980742862badfbfca5fddffac60257d2af975edb Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 17 Dec 2015 18:57:15 +0800
Subject: [PATCH 045/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index a8b8c46566f88..ab45362bd5617 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -8,3 +8,9 @@ Hello, this is the first series of updates on software development that we hope
 1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)
 2. Google [Accelerated Mobile Pages (AMP)](https://github.com/ampproject/amphtml) project. This might be an [old news](https://googleblog.blogspot.my/2015/10/introducing-accelerated-mobile-pages.html) but we've just picking it up today. It is an attempt to make static web content load faster. This is particularly of interest to content publisher such as media company and being viewed as Google response to Facebook Instant Articles.
 3. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.
+
+## Products/Services
+
+Here some interesting products or services we found this week:-
+
+1. List of VPS providers in Japan - https://romanrm.net/vps/japan.

From 600239a5724c0dcebf7070ed274ea52b6d2ab461 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 17 Dec 2015 19:00:12 +0800
Subject: [PATCH 046/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index ab45362bd5617..a497d5cdef6fc 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -14,3 +14,4 @@ Hello, this is the first series of updates on software development that we hope
 Here some interesting products or services we found this week:-
 
 1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
+2. An easy way to build website - http://kedaiweb.site/.

From 57244eeecfd6532630f8cb90027e0e79a305d593 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 04:42:04 +0800
Subject: [PATCH 047/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index a497d5cdef6fc..948282b7e847c 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -7,7 +7,9 @@ Hello, this is the first series of updates on software development that we hope
 
 1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)
 2. Google [Accelerated Mobile Pages (AMP)](https://github.com/ampproject/amphtml) project. This might be an [old news](https://googleblog.blogspot.my/2015/10/introducing-accelerated-mobile-pages.html) but we've just picking it up today. It is an attempt to make static web content load faster. This is particularly of interest to content publisher such as media company and being viewed as Google response to Facebook Instant Articles.
-3. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.
+3. Django Project [received a massive grant](https://www.djangoproject.com/weblog/2015/dec/11/django-awarded-moss-grant/) from Mozilla Open Source Support (MOSS) program - $150K that it will be used to fund development of, among other things HTTP2, background tasks and websocket support.
+4. [Angular 2](https://angular.io/) Beta [released](http://angularjs.blogspot.my/2015/12/angular-2-beta.html). Now maybe a good time to start looking into the framework if you're still on Angular 1.
+5. This is more than a week old but we listed here for it's significance. A [new Android emulator from Android Studio 2.0 Preview](http://android-developers.blogspot.my/2015/12/android-studio-20-preview-android.html) ! We all know how slow the Android emulator is and this one claimed to fix that.
 
 ## Products/Services
 
@@ -15,3 +17,5 @@ Here some interesting products or services we found this week:-
 
 1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
 2. An easy way to build website - http://kedaiweb.site/.
+3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
+4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.

From ad721bbc37fc59caece0fe7ba9cc51d3324c493d Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 04:52:56 +0800
Subject: [PATCH 048/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index 948282b7e847c..5547808421348 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -10,6 +10,12 @@ Hello, this is the first series of updates on software development that we hope
 3. Django Project [received a massive grant](https://www.djangoproject.com/weblog/2015/dec/11/django-awarded-moss-grant/) from Mozilla Open Source Support (MOSS) program - $150K that it will be used to fund development of, among other things HTTP2, background tasks and websocket support.
 4. [Angular 2](https://angular.io/) Beta [released](http://angularjs.blogspot.my/2015/12/angular-2-beta.html). Now maybe a good time to start looking into the framework if you're still on Angular 1.
 5. This is more than a week old but we listed here for it's significance. A [new Android emulator from Android Studio 2.0 Preview](http://android-developers.blogspot.my/2015/12/android-studio-20-preview-android.html) ! We all know how slow the Android emulator is and this one claimed to fix that.
+6. ReactOS, an OS project that try to build an open source Windows fully compatible OS from scratch finally [reach an RC (Release Candidate)](http://finance.yahoo.com/news/reactos-open-source-windows-clone-173145859.html) stage. If you're old enough to be on the Internet, you'll realized that this project was started 17 years ago !
+7. [Rust 1.5 released](http://blog.rust-lang.org/2015/12/10/Rust-1.5.html). Rust is a system programming language aimed to offer better alternative than C/C++ for writing system program.
+8. A number of updates on the AI (Artificial Intelligence) space:-
+  - [Facebook released AI hardware design](http://arstechnica.com/information-technology/2015/12/facebooks-open-sourcing-of-ai-hardware-is-the-start-of-the-deep-learning-revolution/).
+  - [Google released open source AI software](http://www.wired.com/2015/11/google-open-sources-its-artificial-intelligence-engine/).
+  - [Introducing OpenAI](https://openai.com/blog/introducing-openai/).
 
 ## Products/Services
 

From 56f2a548a909352066ed692249eb37105ce0e7f3 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:04:08 +0800
Subject: [PATCH 049/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index 5547808421348..600da578055c1 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -16,6 +16,8 @@ Hello, this is the first series of updates on software development that we hope
   - [Facebook released AI hardware design](http://arstechnica.com/information-technology/2015/12/facebooks-open-sourcing-of-ai-hardware-is-the-start-of-the-deep-learning-revolution/).
   - [Google released open source AI software](http://www.wired.com/2015/11/google-open-sources-its-artificial-intelligence-engine/).
   - [Introducing OpenAI](https://openai.com/blog/introducing-openai/).
+9. Let's Encrypt, a project to provide an easy to use free SSL certificate for everyone, [now opened to public in limited beta](http://blog.apnic.net/2015/12/16/now-everybody-can-https/)
+10. AMD announced [GPUOpen - Open Source Tools, Graphics Effects, Libraries And SDKs](http://wccftech.com/amds-answer-to-nvidias-gameworks-gpuopen-announced-open-source-tools-graphics-effects-and-libraries/) for GPU based development.
 
 ## Products/Services
 
@@ -25,3 +27,5 @@ Here some interesting products or services we found this week:-
 2. An easy way to build website - http://kedaiweb.site/.
 3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
 4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.
+
+That's all for now. Until we meet again next week. Meanwhile, why not hop to our [Telegram Group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw) for discussion ?

From f11eba2e36977fc9287d2bedaa62bac180557ac8 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:06:55 +0800
Subject: [PATCH 050/172] Create 2015-12-18-week-3-dec-updates.md

---
 _posts/2015-12-18-week-3-dec-updates.md | 31 +++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 _posts/2015-12-18-week-3-dec-updates.md

diff --git a/_posts/2015-12-18-week-3-dec-updates.md b/_posts/2015-12-18-week-3-dec-updates.md
new file mode 100644
index 0000000000000..600da578055c1
--- /dev/null
+++ b/_posts/2015-12-18-week-3-dec-updates.md
@@ -0,0 +1,31 @@
+---
+layout: post
+title: Week 3 Dec 20015 Updates
+---
+
+Hello, this is the first series of updates on software development that we hope to do on weekly basis.
+
+1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)
+2. Google [Accelerated Mobile Pages (AMP)](https://github.com/ampproject/amphtml) project. This might be an [old news](https://googleblog.blogspot.my/2015/10/introducing-accelerated-mobile-pages.html) but we've just picking it up today. It is an attempt to make static web content load faster. This is particularly of interest to content publisher such as media company and being viewed as Google response to Facebook Instant Articles.
+3. Django Project [received a massive grant](https://www.djangoproject.com/weblog/2015/dec/11/django-awarded-moss-grant/) from Mozilla Open Source Support (MOSS) program - $150K that it will be used to fund development of, among other things HTTP2, background tasks and websocket support.
+4. [Angular 2](https://angular.io/) Beta [released](http://angularjs.blogspot.my/2015/12/angular-2-beta.html). Now maybe a good time to start looking into the framework if you're still on Angular 1.
+5. This is more than a week old but we listed here for it's significance. A [new Android emulator from Android Studio 2.0 Preview](http://android-developers.blogspot.my/2015/12/android-studio-20-preview-android.html) ! We all know how slow the Android emulator is and this one claimed to fix that.
+6. ReactOS, an OS project that try to build an open source Windows fully compatible OS from scratch finally [reach an RC (Release Candidate)](http://finance.yahoo.com/news/reactos-open-source-windows-clone-173145859.html) stage. If you're old enough to be on the Internet, you'll realized that this project was started 17 years ago !
+7. [Rust 1.5 released](http://blog.rust-lang.org/2015/12/10/Rust-1.5.html). Rust is a system programming language aimed to offer better alternative than C/C++ for writing system program.
+8. A number of updates on the AI (Artificial Intelligence) space:-
+  - [Facebook released AI hardware design](http://arstechnica.com/information-technology/2015/12/facebooks-open-sourcing-of-ai-hardware-is-the-start-of-the-deep-learning-revolution/).
+  - [Google released open source AI software](http://www.wired.com/2015/11/google-open-sources-its-artificial-intelligence-engine/).
+  - [Introducing OpenAI](https://openai.com/blog/introducing-openai/).
+9. Let's Encrypt, a project to provide an easy to use free SSL certificate for everyone, [now opened to public in limited beta](http://blog.apnic.net/2015/12/16/now-everybody-can-https/)
+10. AMD announced [GPUOpen - Open Source Tools, Graphics Effects, Libraries And SDKs](http://wccftech.com/amds-answer-to-nvidias-gameworks-gpuopen-announced-open-source-tools-graphics-effects-and-libraries/) for GPU based development.
+
+## Products/Services
+
+Here some interesting products or services we found this week:-
+
+1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
+2. An easy way to build website - http://kedaiweb.site/.
+3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
+4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.
+
+That's all for now. Until we meet again next week. Meanwhile, why not hop to our [Telegram Group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw) for discussion ?

From 64f34f65f1f6e1521b5f11d78a157eaa4b50398f Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:09:20 +0800
Subject: [PATCH 051/172] Update week-3-dec-2015-updates.md

---
 _drafts/week-3-dec-2015-updates.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/_drafts/week-3-dec-2015-updates.md b/_drafts/week-3-dec-2015-updates.md
index 600da578055c1..0ebdc81c036db 100644
--- a/_drafts/week-3-dec-2015-updates.md
+++ b/_drafts/week-3-dec-2015-updates.md
@@ -1,6 +1,6 @@
 ---
 layout: post
-title: Week 3 Dec 20015 Updates
+title: Week 3 Dec 2015 Updates
 ---
 
 Hello, this is the first series of updates on software development that we hope to do on weekly basis.
@@ -23,7 +23,7 @@ Hello, this is the first series of updates on software development that we hope
 
 Here some interesting products or services we found this week:-
 
-1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
+1. List of VPS providers in Japan - [https://romanrm.net/vps/japan].
 2. An easy way to build website - http://kedaiweb.site/.
 3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
 4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.

From bf989f92a2514d57e293b714d23172d3be89cc0c Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:11:10 +0800
Subject: [PATCH 052/172] Update 2015-12-18-week-3-dec-updates.md

---
 _posts/2015-12-18-week-3-dec-updates.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-18-week-3-dec-updates.md b/_posts/2015-12-18-week-3-dec-updates.md
index 600da578055c1..5954f557f14c4 100644
--- a/_posts/2015-12-18-week-3-dec-updates.md
+++ b/_posts/2015-12-18-week-3-dec-updates.md
@@ -23,7 +23,7 @@ Hello, this is the first series of updates on software development that we hope
 
 Here some interesting products or services we found this week:-
 
-1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
+1. List of VPS providers in Japan - (https://romanrm.net/vps/japan).
 2. An easy way to build website - http://kedaiweb.site/.
 3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
 4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.

From 71b80002454840829b967b3e4a7a6ddb2e16a3c5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:27:43 +0800
Subject: [PATCH 053/172] Update _config.yml

---
 _config.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/_config.yml b/_config.yml
index 6485d1cdc623e..85275693dbcbf 100644
--- a/_config.yml
+++ b/_config.yml
@@ -57,6 +57,10 @@ baseurl: ""
 markdown: redcarpet
 highlighter: pygments
 permalink: /:title/
+markdown_ext:  markdown,mkdown,mkdn,mkd,md
+
+redcarpet:
+  extensions: ["tables", "autolink", "strikethrough", "space_after_headers", "with_toc_data", "fenced_code_blocks"]
 
 # The release of Jekyll Now that you're using
 version: v1.1.0

From 46dcf9021e416622ca9f821a00fce16679d6205d Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:29:27 +0800
Subject: [PATCH 054/172] Update and rename 2015-12-18-week-3-dec-updates.md to
 2015-12-18-week-3-dec-2015-updates.md

---
 ...3-dec-updates.md => 2015-12-18-week-3-dec-2015-updates.md} | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
 rename _posts/{2015-12-18-week-3-dec-updates.md => 2015-12-18-week-3-dec-2015-updates.md} (97%)

diff --git a/_posts/2015-12-18-week-3-dec-updates.md b/_posts/2015-12-18-week-3-dec-2015-updates.md
similarity index 97%
rename from _posts/2015-12-18-week-3-dec-updates.md
rename to _posts/2015-12-18-week-3-dec-2015-updates.md
index 5954f557f14c4..8173920a2e06b 100644
--- a/_posts/2015-12-18-week-3-dec-updates.md
+++ b/_posts/2015-12-18-week-3-dec-2015-updates.md
@@ -1,6 +1,6 @@
 ---
 layout: post
-title: Week 3 Dec 20015 Updates
+title: Week 3 Dec 2015 Updates
 ---
 
 Hello, this is the first series of updates on software development that we hope to do on weekly basis.
@@ -23,7 +23,7 @@ Hello, this is the first series of updates on software development that we hope
 
 Here some interesting products or services we found this week:-
 
-1. List of VPS providers in Japan - (https://romanrm.net/vps/japan).
+1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
 2. An easy way to build website - http://kedaiweb.site/.
 3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
 4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.

From a49ae5a3121bd942975db311881ef2b5c61e4fb1 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:31:39 +0800
Subject: [PATCH 055/172] Update 2015-12-18-week-3-dec-2015-updates.md

---
 _posts/2015-12-18-week-3-dec-2015-updates.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-18-week-3-dec-2015-updates.md b/_posts/2015-12-18-week-3-dec-2015-updates.md
index 8173920a2e06b..21a2b2dcccf23 100644
--- a/_posts/2015-12-18-week-3-dec-2015-updates.md
+++ b/_posts/2015-12-18-week-3-dec-2015-updates.md
@@ -5,7 +5,7 @@ title: Week 3 Dec 2015 Updates
 
 Hello, this is the first series of updates on software development that we hope to do on weekly basis.
 
-1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/)
+1. [Gitlab Pages](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/80) (akin to Github Pages) [is coming to gitlab.com in this 22/12 release](https://about.gitlab.com/direction/).
 2. Google [Accelerated Mobile Pages (AMP)](https://github.com/ampproject/amphtml) project. This might be an [old news](https://googleblog.blogspot.my/2015/10/introducing-accelerated-mobile-pages.html) but we've just picking it up today. It is an attempt to make static web content load faster. This is particularly of interest to content publisher such as media company and being viewed as Google response to Facebook Instant Articles.
 3. Django Project [received a massive grant](https://www.djangoproject.com/weblog/2015/dec/11/django-awarded-moss-grant/) from Mozilla Open Source Support (MOSS) program - $150K that it will be used to fund development of, among other things HTTP2, background tasks and websocket support.
 4. [Angular 2](https://angular.io/) Beta [released](http://angularjs.blogspot.my/2015/12/angular-2-beta.html). Now maybe a good time to start looking into the framework if you're still on Angular 1.

From ad301681fbe258c18528f93c098698bfb574c6c7 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 18 Dec 2015 05:40:39 +0800
Subject: [PATCH 056/172] Update 2015-12-18-week-3-dec-2015-updates.md

---
 _posts/2015-12-18-week-3-dec-2015-updates.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_posts/2015-12-18-week-3-dec-2015-updates.md b/_posts/2015-12-18-week-3-dec-2015-updates.md
index 21a2b2dcccf23..9d963d84a4a97 100644
--- a/_posts/2015-12-18-week-3-dec-2015-updates.md
+++ b/_posts/2015-12-18-week-3-dec-2015-updates.md
@@ -18,6 +18,7 @@ Hello, this is the first series of updates on software development that we hope
   - [Introducing OpenAI](https://openai.com/blog/introducing-openai/).
 9. Let's Encrypt, a project to provide an easy to use free SSL certificate for everyone, [now opened to public in limited beta](http://blog.apnic.net/2015/12/16/now-everybody-can-https/)
 10. AMD announced [GPUOpen - Open Source Tools, Graphics Effects, Libraries And SDKs](http://wccftech.com/amds-answer-to-nvidias-gameworks-gpuopen-announced-open-source-tools-graphics-effects-and-libraries/) for GPU based development.
+11. [Projek Buku GIT](http://iszuddinismail.com/projek-buku-git/) - A project to provide GIT guide book in Malay was started by prominent developer [Iszuddin Ismail](http://iszuddinismail.com/).
 
 ## Products/Services
 

From 8a918a01a36fbf81a342d8a7804ba9c20a3591c1 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 02:47:22 +0800
Subject: [PATCH 057/172] Create 2015-12-19-bagaimana-aws-bermula.md

---
 _posts/2015-12-19-bagaimana-aws-bermula.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 _posts/2015-12-19-bagaimana-aws-bermula.md

diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
new file mode 100644
index 0000000000000..71cdf804bb909
--- /dev/null
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -0,0 +1,12 @@
+---
+layout: post
+title: Bagaimana AWS Bermula
+author: kamal
+tags: aws
+---
+
+AWS (Amazon Web Services) adalah antara perkhidmatan tunjang dalam infrastruktur Internet hari ini. Banyak laman-laman web utama seperti Dropbox, Instagram, Netflix, Reddit dan sebagainya, menggunakan infrastruktur daripada AWS. AWS bermula dengan menyediakan perkhidmatan *virtual server* yang dipanggil EC2 di mana penggunaan server fizikal dapat digantikan dengan hanya software yang lebih senang untuk dibina dan diselenggarakan.
+
+Hari ini, AWS menyediakan pelbagai perkhidmatan berkaitan perkomputeran seperti simpanan data (S3, Glacier), pangkalan data (RDS, Redshift, SimpleDB), networking (VPC, Route 53) dan berpuluh perkhidmatan yang lain.
+
+Setelah sekian lama menggunakan perkhidmatan AWS ini, saya terdorong untuk menyelidik bagaimana perkhidmatan yang menyumbang pendapatan USD5 billion kepada Amazon Inc ini bermula.

From fd9b4b47d08458b79f3ab9bfde568a3dee5c85a9 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 02:59:27 +0800
Subject: [PATCH 058/172] Update 2015-12-19-bagaimana-aws-bermula.md

---
 _posts/2015-12-19-bagaimana-aws-bermula.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
index 71cdf804bb909..c4b1bc237a6d4 100644
--- a/_posts/2015-12-19-bagaimana-aws-bermula.md
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -10,3 +10,7 @@ AWS (Amazon Web Services) adalah antara perkhidmatan tunjang dalam infrastruktur
 Hari ini, AWS menyediakan pelbagai perkhidmatan berkaitan perkomputeran seperti simpanan data (S3, Glacier), pangkalan data (RDS, Redshift, SimpleDB), networking (VPC, Route 53) dan berpuluh perkhidmatan yang lain.
 
 Setelah sekian lama menggunakan perkhidmatan AWS ini, saya terdorong untuk menyelidik bagaimana perkhidmatan yang menyumbang pendapatan USD5 billion kepada Amazon Inc ini bermula.
+
+Idea asal AWS datang daripada seorang *engineer* biasa di Amazon sekitar tahun 2003. [Benjamin Black](http://blog.b3k.us/) bekerja sebagai Network Engineer dengan pengurusnya Chris Pinkham. Sebagai Network Engineer, beliau bertanggung-jawab memastikan kelancaran sistem rangkaian yang memacu laman Amazon.com.
+
+Benjamin Black dan bosnya Chris Pinkham kemudian menulis kertas cadangan bagaimana sistem rangkaian dan perkomputeran di Amazon dapat diperbaikkan dalam bentuk yang lebih *standardized* serta diautomasi sepenuhnya (*fully automated*). Di penghujung kertas cadangan tersebut, mereka menyatakan kemungkinan untuk menjual *virtual server* sebagai perkhidmatan.

From 6357d7bf7b981f9b70ec8e19524fc1bf649926ce Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:09:35 +0800
Subject: [PATCH 059/172] Update 2015-12-19-bagaimana-aws-bermula.md

---
 _posts/2015-12-19-bagaimana-aws-bermula.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
index c4b1bc237a6d4..f7d283a82a390 100644
--- a/_posts/2015-12-19-bagaimana-aws-bermula.md
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -14,3 +14,7 @@ Setelah sekian lama menggunakan perkhidmatan AWS ini, saya terdorong untuk menye
 Idea asal AWS datang daripada seorang *engineer* biasa di Amazon sekitar tahun 2003. [Benjamin Black](http://blog.b3k.us/) bekerja sebagai Network Engineer dengan pengurusnya Chris Pinkham. Sebagai Network Engineer, beliau bertanggung-jawab memastikan kelancaran sistem rangkaian yang memacu laman Amazon.com.
 
 Benjamin Black dan bosnya Chris Pinkham kemudian menulis kertas cadangan bagaimana sistem rangkaian dan perkomputeran di Amazon dapat diperbaikkan dalam bentuk yang lebih *standardized* serta diautomasi sepenuhnya (*fully automated*). Di penghujung kertas cadangan tersebut, mereka menyatakan kemungkinan untuk menjual *virtual server* sebagai perkhidmatan.
+
+Kertas cadangan tersebut kemudian dipersembahkan kepada CEO Amazon, Jeff Bezos yang ternyata terus berminat dengan idea penjualan *virtual server* dan meminta proposal yang lebih lengkap disediakan.
+
+Chris Pinkham kemudian ditugaskan untuk mengepalai projek pembinaan *virtual server* yang kemudiannya dikenali sebagai EC2. Yang lebih menariknya di sini adalah Chris Pinkham pada masa itu telah membuat keputusan untuk kembali ke tempat asal beliau di Afrika Selatan. Amazon bagaimana pun tidak ingin melepaskan beliau dan akhirnya memberi pelepasan kepada beliau untuk menjalankan projek EC2 secara remote dari Cape Town, Afrika Selatan. Dari sana, Chris Pinkham membentuk kumpulan engineer yang bekerja membina EC2 selama 2 tahun.

From f847b6b286be6afb0b116e89585f08be0d6bc6e4 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:15:02 +0800
Subject: [PATCH 060/172] Update 2015-12-19-bagaimana-aws-bermula.md

---
 _posts/2015-12-19-bagaimana-aws-bermula.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
index f7d283a82a390..6554ae7b9e7fb 100644
--- a/_posts/2015-12-19-bagaimana-aws-bermula.md
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -18,3 +18,10 @@ Benjamin Black dan bosnya Chris Pinkham kemudian menulis kertas cadangan bagaima
 Kertas cadangan tersebut kemudian dipersembahkan kepada CEO Amazon, Jeff Bezos yang ternyata terus berminat dengan idea penjualan *virtual server* dan meminta proposal yang lebih lengkap disediakan.
 
 Chris Pinkham kemudian ditugaskan untuk mengepalai projek pembinaan *virtual server* yang kemudiannya dikenali sebagai EC2. Yang lebih menariknya di sini adalah Chris Pinkham pada masa itu telah membuat keputusan untuk kembali ke tempat asal beliau di Afrika Selatan. Amazon bagaimana pun tidak ingin melepaskan beliau dan akhirnya memberi pelepasan kepada beliau untuk menjalankan projek EC2 secara remote dari Cape Town, Afrika Selatan. Dari sana, Chris Pinkham membentuk kumpulan engineer yang bekerja membina EC2 selama 2 tahun.
+
+Antara dapatan menarik daripada kisah ini adalah bagaimana Jeff Bezos memberi perhatian kepada idea serta cadangan pekerjanya dan telah dijadikan *case study* dalam buku [The Alliance](http://www.amazon.com/The-Alliance-Managing-Talent-Networked/dp/1625275773/) sebagai satu contoh gaya pengurusan yang baik.
+
+Sumber:-
+1. http://www.businessinsider.com/amazons-game-changing-cloud-was-built-by-some-guys-in-south-africa-2012-3
+2. http://www.businessinsider.my/benjamin-black-and-amazon-web-services-2014-7/
+3. http://blog.b3k.us/2009/01/25/ec2-origins.html

From dff74aab8a2df2a494374936040fcdb4ca20e565 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:17:45 +0800
Subject: [PATCH 061/172] Update 2015-12-19-bagaimana-aws-bermula.md

---
 _posts/2015-12-19-bagaimana-aws-bermula.md | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
index 6554ae7b9e7fb..86cc12a93ae27 100644
--- a/_posts/2015-12-19-bagaimana-aws-bermula.md
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -17,11 +17,14 @@ Benjamin Black dan bosnya Chris Pinkham kemudian menulis kertas cadangan bagaima
 
 Kertas cadangan tersebut kemudian dipersembahkan kepada CEO Amazon, Jeff Bezos yang ternyata terus berminat dengan idea penjualan *virtual server* dan meminta proposal yang lebih lengkap disediakan.
 
-Chris Pinkham kemudian ditugaskan untuk mengepalai projek pembinaan *virtual server* yang kemudiannya dikenali sebagai EC2. Yang lebih menariknya di sini adalah Chris Pinkham pada masa itu telah membuat keputusan untuk kembali ke tempat asal beliau di Afrika Selatan. Amazon bagaimana pun tidak ingin melepaskan beliau dan akhirnya memberi pelepasan kepada beliau untuk menjalankan projek EC2 secara remote dari Cape Town, Afrika Selatan. Dari sana, Chris Pinkham membentuk kumpulan engineer yang bekerja membina EC2 selama 2 tahun.
+Chris Pinkham kemudian ditugaskan untuk mengepalai projek pembinaan *virtual server* yang kemudiannya dikenali sebagai EC2. Yang lebih menariknya di sini adalah Chris Pinkham pada masa itu telah membuat keputusan untuk kembali ke tempat asal beliau di Afrika Selatan.
+
+Amazon bagaimana pun tidak ingin melepaskan beliau dan akhirnya memberi pelepasan kepada beliau untuk menjalankan projek EC2 secara remote dari Cape Town, Afrika Selatan. Dari sana, Chris Pinkham membentuk kumpulan engineer yang bekerja membina EC2 selama 2 tahun.
 
 Antara dapatan menarik daripada kisah ini adalah bagaimana Jeff Bezos memberi perhatian kepada idea serta cadangan pekerjanya dan telah dijadikan *case study* dalam buku [The Alliance](http://www.amazon.com/The-Alliance-Managing-Talent-Networked/dp/1625275773/) sebagai satu contoh gaya pengurusan yang baik.
 
 Sumber:-
+
 1. http://www.businessinsider.com/amazons-game-changing-cloud-was-built-by-some-guys-in-south-africa-2012-3
 2. http://www.businessinsider.my/benjamin-black-and-amazon-web-services-2014-7/
 3. http://blog.b3k.us/2009/01/25/ec2-origins.html

From 766501c7688532a9d348676beb48039dbabc5b58 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:20:24 +0800
Subject: [PATCH 062/172] Update 2015-12-19-bagaimana-aws-bermula.md

---
 _posts/2015-12-19-bagaimana-aws-bermula.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
index 86cc12a93ae27..a807ea88baced 100644
--- a/_posts/2015-12-19-bagaimana-aws-bermula.md
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -13,6 +13,8 @@ Setelah sekian lama menggunakan perkhidmatan AWS ini, saya terdorong untuk menye
 
 Idea asal AWS datang daripada seorang *engineer* biasa di Amazon sekitar tahun 2003. [Benjamin Black](http://blog.b3k.us/) bekerja sebagai Network Engineer dengan pengurusnya Chris Pinkham. Sebagai Network Engineer, beliau bertanggung-jawab memastikan kelancaran sistem rangkaian yang memacu laman Amazon.com.
 
+<!--more-->
+
 Benjamin Black dan bosnya Chris Pinkham kemudian menulis kertas cadangan bagaimana sistem rangkaian dan perkomputeran di Amazon dapat diperbaikkan dalam bentuk yang lebih *standardized* serta diautomasi sepenuhnya (*fully automated*). Di penghujung kertas cadangan tersebut, mereka menyatakan kemungkinan untuk menjual *virtual server* sebagai perkhidmatan.
 
 Kertas cadangan tersebut kemudian dipersembahkan kepada CEO Amazon, Jeff Bezos yang ternyata terus berminat dengan idea penjualan *virtual server* dan meminta proposal yang lebih lengkap disediakan.

From a1b8d7734a4629ec08fe6e53c8d257236faef794 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:50:33 +0800
Subject: [PATCH 063/172] Create custom.css

---
 custom.css | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 custom.css

diff --git a/custom.css b/custom.css
new file mode 100644
index 0000000000000..8b137891791fe
--- /dev/null
+++ b/custom.css
@@ -0,0 +1 @@
+

From fd215446fc4d088481c2916490dc77f71a36951f Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:51:38 +0800
Subject: [PATCH 064/172] Update default.html

---
 _layouts/default.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_layouts/default.html b/_layouts/default.html
index b2939c0bc4483..8698877f9ff84 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -10,6 +10,7 @@
     <![endif]-->
 
     <link rel="stylesheet" type="text/css" href="{{ site.baseurl }}/style.css" />
+    <link rel="stylesheet" type="text/css" href="{{ site.baseurl }}/custom.css" />
     <link rel="alternate" type="application/rss+xml" title="{{ site.name }} - {{ site.description }}" href="{{ site.baseurl }}/feed.xml" />
 
     <!-- Created with Jekyll Now - http://github.com/barryclark/jekyll-now -->

From c8a57649d96b72931eb4052138fc4ff68363276f Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:55:53 +0800
Subject: [PATCH 065/172] Update post.html

---
 _layouts/post.html | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/_layouts/post.html b/_layouts/post.html
index bcccc3bd24dce..dd2e1682b93b3 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -13,6 +13,10 @@ <h1>{{ page.title }}</h1>
     Written on {{ page.date | date: "%B %e, %Y" }}
     {% if page.author %} by {{ page.author }} {% endif %}
   </div>
+  
+  <div class="panel">
+    Get latest updates from us by joining our [Telegram Channel](https://telegram.me/devkini) - https://telegram.me/devkini or get into discussion in our [Telegram Group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw).
+  </div>
 
   {% include disqus.html %}
 </article>

From 4f25b365c11c0a2dbd73018833690e91a2771180 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 03:58:25 +0800
Subject: [PATCH 066/172] Update post.html

---
 _layouts/post.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_layouts/post.html b/_layouts/post.html
index dd2e1682b93b3..d88aae487d47e 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -15,7 +15,7 @@ <h1>{{ page.title }}</h1>
   </div>
   
   <div class="panel">
-    Get latest updates from us by joining our [Telegram Channel](https://telegram.me/devkini) - https://telegram.me/devkini or get into discussion in our [Telegram Group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw).
+    Get latest updates from us by joining our <a href="https://telegram.me/devkini">Telegram Channel</a> - <a href="https://telegram.me/devkini">telegram.me/devkini</a> or get into discussion in our <a href="https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw">Telegram Group</a>.
   </div>
 
   {% include disqus.html %}

From 1b1656f31877746faeaf98473a99eb128dd491a7 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 04:02:05 +0800
Subject: [PATCH 067/172] Update custom.css

---
 custom.css | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/custom.css b/custom.css
index 8b137891791fe..777f8e9080b0e 100644
--- a/custom.css
+++ b/custom.css
@@ -1 +1,9 @@
-
+.panel {
+  padding: 10px 15px;
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+  margin-top: 3px;
+}

From e35d7cec529ba79a8bc3d86f7378c870c8212c30 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 04:03:45 +0800
Subject: [PATCH 068/172] Update custom.css

---
 custom.css | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/custom.css b/custom.css
index 777f8e9080b0e..a3e8f08f9aff4 100644
--- a/custom.css
+++ b/custom.css
@@ -5,5 +5,8 @@
   border-color: #bce8f1;
   border-top-left-radius: 3px;
   border-top-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
   margin-top: 3px;
+  text-align: center;
 }

From c0af5d5d2497fbd2b3b4638801271111263e60f9 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 04:04:39 +0800
Subject: [PATCH 069/172] Update custom.css

---
 custom.css | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/custom.css b/custom.css
index a3e8f08f9aff4..69671902f2c84 100644
--- a/custom.css
+++ b/custom.css
@@ -7,6 +7,6 @@
   border-top-right-radius: 3px;
   border-bottom-left-radius: 3px;
   border-bottom-right-radius: 3px;
-  margin-top: 3px;
+  margin-top: 5px;
   text-align: center;
 }

From af85ca79486622b70cb91bb2ac4b5efd190c74ba Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 07:47:21 +0800
Subject: [PATCH 070/172] Create 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 85 ++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 _posts/2015-12-19-php-sse-example.md

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
new file mode 100644
index 0000000000000..fe8509d404e15
--- /dev/null
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -0,0 +1,85 @@
+---
+layout: post
+title: PHP: Server Sent Event (SSE) Example
+author: kamal
+tags: sse, php, javascript, ajax
+---
+
+This is a basic example on how to implement Server Sent Event (SSE) with PHP. More lengthy explanation can be read at [HTML5 Rocks article](http://www.html5rocks.com/en/tutorials/eventsource/basics/) so I'll just focus on the example.
+
+First, let's look at frontend side code, let's say we have `index.html`:-
+
+```html
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8" />
+</head>
+<body>
+  <script>
+    var source = new EventSource('sse.php');
+    source.addEventListener('delta', function(e) {
+        var data = JSON.parse(e.data);
+        console.log(data);
+        document.body.innerHTML += data.msg + '<br>';
+    }, false);
+  </script>
+</body>
+</html>
+```
+It is very simple code and didn't even try to check if `EventSource` (the meat of SSE) is supported on the browser. Next is the PHP code that will send data to the above code:-
+
+```php
+<?php
+header('Content-Type: text/event-stream');
+header('Cache-Control: no-cache');
+
+/**
+ * Constructs the SSE data format and flushes that data to the client.
+ *
+ * @param string $id Timestamp/id of this connection.
+ * @param string $msg Line of text that should be transmitted.
+ */
+function sendMsg($id , $msg) {
+    echo "id: $id" . PHP_EOL;
+    echo "event: delta" . PHP_EOL;
+    echo "data: {\n";
+    echo "data: \"msg\": \"$msg\", \n";
+    echo "data: \"id\": $id\n";
+    echo "data: }\n";
+    echo PHP_EOL;
+    ob_flush();
+    flush();
+}
+
+$startedAt = time();
+$db = new SQLite3('sse.db');
+
+$lastEventId = floatval(isset($_SERVER["HTTP_LAST_EVENT_ID"]) ? $_SERVER["HTTP_LAST_EVENT_ID"] : 0);
+  if ($lastEventId == 0) {
+    $lastEventId = floatval(isset($_GET["lastEventId"]) ? $_GET["lastEventId"] : 0);
+  }
+
+do {
+    // Cap connections at 10 seconds. The browser will reopen the connection on close
+    if ((time() - $startedAt) > 10) {
+        die();
+    }
+
+    $stmt = $db->prepare("SELECT * FROM messages WHERE id > :id");
+    $stmt->bindValue(':id', $lastEventId);
+    $result = $stmt->execute();
+
+    while ($data = $result->fetchArray()) {
+        sendMsg($data['id'], $data['message']);
+    }
+    $lastEventId = $data['id'];
+
+    sleep(5);
+
+    // If we didn't use a while loop, the browser would essentially do polling
+    // every ~3seconds. Using the while, we keep the connection open and only make
+    // one request.
+} while(true);
+?>
+```

From 42b367b02d817801809bc0dc6defa6ca6fffba87 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 07:54:35 +0800
Subject: [PATCH 071/172] Update 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
index fe8509d404e15..c316bfcc06d7b 100644
--- a/_posts/2015-12-19-php-sse-example.md
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -2,7 +2,7 @@
 layout: post
 title: PHP: Server Sent Event (SSE) Example
 author: kamal
-tags: sse, php, javascript, ajax
+tags: sse,php,javascript,ajax
 ---
 
 This is a basic example on how to implement Server Sent Event (SSE) with PHP. More lengthy explanation can be read at [HTML5 Rocks article](http://www.html5rocks.com/en/tutorials/eventsource/basics/) so I'll just focus on the example.
@@ -83,3 +83,25 @@ do {
 } while(true);
 ?>
 ```
+
+Create the sqlite database tables for testing this:-
+
+```
+> sqlite3 sse.db
+SQLite version 3.8.4.1 2014-03-11 15:27:36
+Enter ".help" for usage hints.
+sqlite> create table messages (id integer primary key autoincrement, message text);
+sqlite> insert into messages (message) values ('hello world');
+```
+
+We can test this by running php development server:-
+
+```
+php -S 127.0.0.1:8000
+```
+And open up in browser `http://localhost:8000/index.html`. We should see the first "hello world" message. If we insert a second message:-
+
+```
+sqlite> insert into messages (message) values ('hello world 2');
+```
+We can see it appear at the second line, without having to refresh the browser ! Keep adding the messages and will appear on the browser. This is the gist of SSE and can be a foundation to build something more useful like user notifications etc.

From 7c4d5fd736b717715d0e79c75b3ba6ceb524b2f7 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 07:56:57 +0800
Subject: [PATCH 072/172] Update 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
index c316bfcc06d7b..35d94cc734660 100644
--- a/_posts/2015-12-19-php-sse-example.md
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -1,6 +1,6 @@
 ---
 layout: post
-title: PHP: Server Sent Event (SSE) Example
+title: "PHP: Server Sent Event (SSE) Example"
 author: kamal
 tags: sse,php,javascript,ajax
 ---

From f84d354748290f96f89acf2c7a6b4ea030527744 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 08:03:35 +0800
Subject: [PATCH 073/172] Update 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
index 35d94cc734660..6c3d095dbb8dc 100644
--- a/_posts/2015-12-19-php-sse-example.md
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -105,3 +105,15 @@ And open up in browser `http://localhost:8000/index.html`. We should see the fir
 sqlite> insert into messages (message) values ('hello world 2');
 ```
 We can see it appear at the second line, without having to refresh the browser ! Keep adding the messages and will appear on the browser. This is the gist of SSE and can be a foundation to build something more useful like user notifications etc.
+
+So how it actually work ?
+
+1. Browser open connection to `sse.php`.
+2. On the server, it return data in the format of:-
+```
+data: hello\n
+data: world\n\n
+```
+3. Browser assume the data stream end when it encounter double newlines `\n\n`, and fire an event with the data.
+4. Our PHP code keep the connection open for x amount time, and can keep sending the data to the `EventSource` on the browser.
+5. If the server close the connection, `EventSource` will create new connection, and the cycle repeat.

From 9db6b32d3c66079ce3e324b9eb9e55b84d5b2a01 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 08:09:59 +0800
Subject: [PATCH 074/172] Update 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
index 6c3d095dbb8dc..713fa066e3506 100644
--- a/_posts/2015-12-19-php-sse-example.md
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -27,6 +27,8 @@ First, let's look at frontend side code, let's say we have `index.html`:-
 </body>
 </html>
 ```
+<!--more-->
+
 It is very simple code and didn't even try to check if `EventSource` (the meat of SSE) is supported on the browser. Next is the PHP code that will send data to the above code:-
 
 ```php
@@ -117,3 +119,12 @@ data: world\n\n
 3. Browser assume the data stream end when it encounter double newlines `\n\n`, and fire an event with the data.
 4. Our PHP code keep the connection open for x amount time, and can keep sending the data to the `EventSource` on the browser.
 5. If the server close the connection, `EventSource` will create new connection, and the cycle repeat.
+6. We can optionally specify an id for the data and the id will be sent back to the server in the header as `Last-Event-ID`:-
+
+```
+id: 1002\n
+data: hello\n
+data: world\n\n
+```
+This is what we use in the above example, to only query for new messages to be sent to browser.
+7. The data stream also can be named, allowing us to specify multiple `EventSource` channel that can be used for different purposes.

From e81f93e10b5609bc68512d89e752b4b490407fd0 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 08:10:37 +0800
Subject: [PATCH 075/172] Update 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
index 713fa066e3506..90420a6120f20 100644
--- a/_posts/2015-12-19-php-sse-example.md
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -127,4 +127,5 @@ data: hello\n
 data: world\n\n
 ```
 This is what we use in the above example, to only query for new messages to be sent to browser.
+
 7. The data stream also can be named, allowing us to specify multiple `EventSource` channel that can be used for different purposes.

From b37b976e7e706900e3f0750b4134781b17694a9a Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 08:12:54 +0800
Subject: [PATCH 076/172] Update 2015-12-19-php-sse-example.md

---
 _posts/2015-12-19-php-sse-example.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/_posts/2015-12-19-php-sse-example.md b/_posts/2015-12-19-php-sse-example.md
index 90420a6120f20..3c18ec623e5f3 100644
--- a/_posts/2015-12-19-php-sse-example.md
+++ b/_posts/2015-12-19-php-sse-example.md
@@ -110,16 +110,16 @@ We can see it appear at the second line, without having to refresh the browser !
 
 So how it actually work ?
 
-1. Browser open connection to `sse.php`.
-2. On the server, it return data in the format of:-
+- Browser open connection to `sse.php`.
+- On the server, it return data in the format of:-
 ```
 data: hello\n
 data: world\n\n
 ```
-3. Browser assume the data stream end when it encounter double newlines `\n\n`, and fire an event with the data.
-4. Our PHP code keep the connection open for x amount time, and can keep sending the data to the `EventSource` on the browser.
-5. If the server close the connection, `EventSource` will create new connection, and the cycle repeat.
-6. We can optionally specify an id for the data and the id will be sent back to the server in the header as `Last-Event-ID`:-
+- Browser assume the data stream end when it encounter double newlines `\n\n`, and fire an event with the data.
+- Our PHP code keep the connection open for x amount time, and can keep sending the data to the `EventSource` on the browser.
+- If the server close the connection, `EventSource` will create new connection, and the cycle repeat.
+- We can optionally specify an id for the data and the id will be sent back to the server in the header as `Last-Event-ID`:-
 
 ```
 id: 1002\n
@@ -128,4 +128,4 @@ data: world\n\n
 ```
 This is what we use in the above example, to only query for new messages to be sent to browser.
 
-7. The data stream also can be named, allowing us to specify multiple `EventSource` channel that can be used for different purposes.
+- The data stream also can be named, allowing us to specify multiple `EventSource` channel that can be used for different purposes.

From dd8592fac69adefdea5a49c08d57cc543867536c Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 19 Dec 2015 12:44:46 +0800
Subject: [PATCH 077/172] Update post.html

---
 _layouts/post.html | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/_layouts/post.html b/_layouts/post.html
index d88aae487d47e..6607fcb8fd4d6 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -17,6 +17,22 @@ <h1>{{ page.title }}</h1>
   <div class="panel">
     Get latest updates from us by joining our <a href="https://telegram.me/devkini">Telegram Channel</a> - <a href="https://telegram.me/devkini">telegram.me/devkini</a> or get into discussion in our <a href="https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw">Telegram Group</a>.
   </div>
+  
+  <div class="related">
+  <h2>Related Posts</h2>
+  <ul class="related-posts">
+    {% for post in site.related_posts limit:3 %}
+      <li>
+        <h3>
+          <a href="{{ site.baseurl }}{{ post.url }}">
+            {{ post.title }}
+            <small>{{ post.date | date_to_string }}</small>
+          </a>
+        </h3>
+      </li>
+    {% endfor %}
+  </ul>
+</div>
 
   {% include disqus.html %}
 </article>

From e7eb93228c94028e65ffe5bc5cc58b47f6a6d319 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 20 Dec 2015 18:18:04 +0800
Subject: [PATCH 078/172] Create googlee4e1cce32f647f8d.html

---
 googlee4e1cce32f647f8d.html | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 googlee4e1cce32f647f8d.html

diff --git a/googlee4e1cce32f647f8d.html b/googlee4e1cce32f647f8d.html
new file mode 100644
index 0000000000000..13860d539015b
--- /dev/null
+++ b/googlee4e1cce32f647f8d.html
@@ -0,0 +1 @@
+google-site-verification: googlee4e1cce32f647f8d.html

From 4840fafdac4f462b2cbda9a9f1e38833f761be2f Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Fri, 1 Jan 2016 05:37:31 +0800
Subject: [PATCH 079/172] Initial stage getting started with vuejs.

This implement a simple UI for Point of Sale system to explore vuejs
features.

Todos:-

* Rendering flat items - probably need to look in $index properties in v-for.
* Autocomplete search
---
 sandbox/js/posui/app.js     | 44 +++++++++++++++++++++++++
 sandbox/js/posui/index.html | 66 +++++++++++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+)
 create mode 100644 sandbox/js/posui/app.js
 create mode 100644 sandbox/js/posui/index.html

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
new file mode 100644
index 0000000000000..8760f10d28cb1
--- /dev/null
+++ b/sandbox/js/posui/app.js
@@ -0,0 +1,44 @@
+new Vue({
+    el: '#app',
+    data: {
+        order: {
+            items: [
+            ],
+            getTotal: function() {
+                return _.sum(this.items, 'total');
+            }
+        },
+        items: [
+            [
+                { name: 'Item-1', price: 15},
+                { name: 'Item-2', price: 5},
+                { name: 'Item-3', price: 11},
+                { name: 'Item-4', price: 10}
+            ],
+            [
+                { name: 'Item-5', price: 15},
+                { name: 'Item-6', price: 5},
+                { name: 'Item-7', price: 11},
+                { name: 'Item-8', price: 10}
+            ]
+        ]
+    },
+    methods: {
+        addOrderItem: function(event) {
+            console.log(event);
+            var item, item_name, item_price, item_qty = 1;
+
+            item_name = event.target.getAttribute('data-name');
+            item_price = event.target.getAttribute('data-price');
+            item = _.find(this.order.items, {name: item_name});
+            if (item) {
+                item_qty = item.qty++;
+            }
+            else {
+                item = {name: item_name, price: item_price, qty: item_qty, total: item_price};
+                this.order.items.push(item);
+            }
+            item.total = item.price * item.qty;
+        }
+    }
+});
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
new file mode 100644
index 0000000000000..9b947c687bd8d
--- /dev/null
+++ b/sandbox/js/posui/index.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <!-- Latest compiled and minified CSS -->
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
+
+    <!-- Optional theme -->
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
+
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
+</head>
+<body>
+<div class="row">
+</div>
+<div class="row" id="app">
+    <div class="col-md-4">
+        <div class="panel panel-primary">
+            <div class="panel-heading">
+                Order Items
+            </div>
+            <div class="panel-body">
+                <table class="table">
+                    <thead>
+                        <th>Item Name</th>
+                        <th>Qty</th>
+                        <th>Price</th>
+                    </thead>
+                    <tbody>
+                        <tr v-for="item in order.items">
+                            <td>{{ item.name }}</td>
+                            <td>{{ item.qty }}</td>
+                            <td>{{ item.total }}</td>
+                        </tr>
+                        <tr>
+                            <td></td>
+                            <td><b>Total</b></td>
+                            <td>{{ order.getTotal() }}</td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+    <div class="col-md-8">
+        <div class="panel panel-info">
+             <div class="panel-heading">
+                Select Items
+            </div>
+            <div class="panel-body">
+                <div class="row" v-for="item_rows in items">
+                    <div class="col-md-2" v-for="item in item_rows">
+                        <div v-on:click="addOrderItem" data-name="{{ item.name }}" data-price="{{ item.price }}" class="col-md-2">{{ item.name }}</div>
+                    </div>
+                </div>
+            </div>
+            <div class="panel-footer">Panel footer</div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- Latest compiled and minified JavaScript -->
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
+<script src="http://vuejs.org/js/vue.js"></script>
+<script src="app.js"></script>
+</body>
+</html>

From dded3fb0154bfd92873cb2e47a6aba095b2f3662 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Fri, 1 Jan 2016 06:29:47 +0800
Subject: [PATCH 080/172] Order item deletion.

---
 sandbox/js/posui/app.js     | 3 +++
 sandbox/js/posui/index.html | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index 8760f10d28cb1..e8dac4a6a65d8 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -39,6 +39,9 @@ new Vue({
                 this.order.items.push(item);
             }
             item.total = item.price * item.qty;
+        },
+        removeItem: function(event, item) {
+            this.order.items.$remove(item);
         }
     }
 });
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index 9b947c687bd8d..7c7618ac06d9c 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -24,17 +24,20 @@
                         <th>Item Name</th>
                         <th>Qty</th>
                         <th>Price</th>
+                        <th></th>
                     </thead>
                     <tbody>
                         <tr v-for="item in order.items">
                             <td>{{ item.name }}</td>
                             <td>{{ item.qty }}</td>
                             <td>{{ item.total }}</td>
+                            <td v-on:click="removeItem($event, item)"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></td>
                         </tr>
                         <tr>
                             <td></td>
                             <td><b>Total</b></td>
                             <td>{{ order.getTotal() }}</td>
+                            <td></td>
                         </tr>
                     </tbody>
                 </table>

From 5b06b87b7c3ae0d89f9859be658c4df6962128dc Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Fri, 1 Jan 2016 06:35:27 +0800
Subject: [PATCH 081/172] added README.md

---
 sandbox/js/posui/README.md | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 sandbox/js/posui/README.md

diff --git a/sandbox/js/posui/README.md b/sandbox/js/posui/README.md
new file mode 100644
index 0000000000000..6bdebd07fb724
--- /dev/null
+++ b/sandbox/js/posui/README.md
@@ -0,0 +1,9 @@
+
+## Getting started with vuejs
+This implement a simple UI for Point of Sale system.
+
+## Todos
+
+* Autocomplete search
+* Render flat item list
+* Connect to real backend API

From a34d712c56cb8354db18f837871e87295b2c0708 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Fri, 1 Jan 2016 10:10:49 +0800
Subject: [PATCH 082/172] added dummy search input

---
 sandbox/js/posui/index.html | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index 7c7618ac06d9c..375ddcbacf76f 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -50,6 +50,12 @@
                 Select Items
             </div>
             <div class="panel-body">
+                <div class="row">
+                    <form>
+  <div class="form-group">
+    <input type="text" class="form-control" id="search-item" placeholder="Search Items">
+  </div>
+                </div>
                 <div class="row" v-for="item_rows in items">
                     <div class="col-md-2" v-for="item in item_rows">
                         <div v-on:click="addOrderItem" data-name="{{ item.name }}" data-price="{{ item.price }}" class="col-md-2">{{ item.name }}</div>

From ef265d47104d06edab910cf6a2626844f9976934 Mon Sep 17 00:00:00 2001
From: crynobone <crynobone@gmail.com>
Date: Fri, 1 Jan 2016 14:25:46 +0800
Subject: [PATCH 083/172] Simplify code and add debugging mode.

Signed-off-by: crynobone <crynobone@gmail.com>
---
 sandbox/js/posui/app.js     | 20 ++++++++------------
 sandbox/js/posui/index.html | 19 ++++++++++---------
 2 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index e8dac4a6a65d8..108fe2aec054e 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -9,18 +9,14 @@ new Vue({
             }
         },
         items: [
-            [
-                { name: 'Item-1', price: 15},
-                { name: 'Item-2', price: 5},
-                { name: 'Item-3', price: 11},
-                { name: 'Item-4', price: 10}
-            ],
-            [
-                { name: 'Item-5', price: 15},
-                { name: 'Item-6', price: 5},
-                { name: 'Item-7', price: 11},
-                { name: 'Item-8', price: 10}
-            ]
+            { name: 'Item-1', baracode: _.uniqueId('bar'), price: 15},
+            { name: 'Item-2', baracode: _.uniqueId('bar'), price: 5},
+            { name: 'Item-3', baracode: _.uniqueId('bar'), price: 11},
+            { name: 'Item-4', baracode: _.uniqueId('bar'), price: 10},
+            { name: 'Item-5', baracode: _.uniqueId('bar'), price: 15},
+            { name: 'Item-6', baracode: _.uniqueId('bar'), price: 5},
+            { name: 'Item-7', baracode: _.uniqueId('bar'), price: 11},
+            { name: 'Item-8', baracode: _.uniqueId('bar'), price: 10}
         ]
     },
     methods: {
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index 375ddcbacf76f..2fa39d6a22e1e 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -10,8 +10,7 @@
     <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
 </head>
 <body>
-<div class="row">
-</div>
+<div class="row"></div>
 <div class="row" id="app">
     <div class="col-md-4">
         <div class="panel panel-primary">
@@ -52,24 +51,26 @@
             <div class="panel-body">
                 <div class="row">
                     <form>
-  <div class="form-group">
-    <input type="text" class="form-control" id="search-item" placeholder="Search Items">
-  </div>
+                        <div class="form-group">
+                            <input type="text" class="form-control" placeholder="Search Items">
+                        </div>
+                    </form>
                 </div>
-                <div class="row" v-for="item_rows in items">
-                    <div class="col-md-2" v-for="item in item_rows">
+                <div class="row">
+                    <div class="col-md-2" v-for="item in items">
                         <div v-on:click="addOrderItem" data-name="{{ item.name }}" data-price="{{ item.price }}" class="col-md-2">{{ item.name }}</div>
                     </div>
                 </div>
             </div>
             <div class="panel-footer">Panel footer</div>
-            </div>
         </div>
+        <!-- debugging -->
+        <pre>{{ $data | json }}</pre>
     </div>
 </div>
 <!-- Latest compiled and minified JavaScript -->
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
-<script src="http://vuejs.org/js/vue.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.13/vue.min.js"></script>
 <script src="app.js"></script>
 </body>
 </html>

From de5c7e6ffd1fc377e71f450aa0b37aaf6c45c1a4 Mon Sep 17 00:00:00 2001
From: crynobone <crynobone@gmail.com>
Date: Fri, 1 Jan 2016 14:28:45 +0800
Subject: [PATCH 084/172] Add search filter.

Signed-off-by: crynobone <crynobone@gmail.com>
---
 sandbox/js/posui/app.js     | 7 +++++--
 sandbox/js/posui/index.html | 4 ++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index 108fe2aec054e..76be2fbe24441 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -16,8 +16,11 @@ new Vue({
             { name: 'Item-5', baracode: _.uniqueId('bar'), price: 15},
             { name: 'Item-6', baracode: _.uniqueId('bar'), price: 5},
             { name: 'Item-7', baracode: _.uniqueId('bar'), price: 11},
-            { name: 'Item-8', baracode: _.uniqueId('bar'), price: 10}
-        ]
+            { name: 'Item-8', baracode: _.uniqueId('bar'), price: 10},
+            { name: 'Item-9', baracode: _.uniqueId('bar'), price: 10},
+            { name: 'Item-10', baracode: _.uniqueId('bar'), price: 10}
+        ],
+        search: ''
     },
     methods: {
         addOrderItem: function(event) {
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index 2fa39d6a22e1e..0bc3aa522477e 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -52,12 +52,12 @@
                 <div class="row">
                     <form>
                         <div class="form-group">
-                            <input type="text" class="form-control" placeholder="Search Items">
+                            <input type="text" class="form-control" placeholder="Search Items" v-model="search">
                         </div>
                     </form>
                 </div>
                 <div class="row">
-                    <div class="col-md-2" v-for="item in items">
+                    <div class="col-md-2" v-for="item in items | filterBy search">
                         <div v-on:click="addOrderItem" data-name="{{ item.name }}" data-price="{{ item.price }}" class="col-md-2">{{ item.name }}</div>
                     </div>
                 </div>

From d769abc73d331abec918a6250a90ade9ab9cdb77 Mon Sep 17 00:00:00 2001
From: crynobone <crynobone@gmail.com>
Date: Fri, 1 Jan 2016 14:46:58 +0800
Subject: [PATCH 085/172] Convert order/checkout to a vue component.

Signed-off-by: crynobone <crynobone@gmail.com>
---
 sandbox/js/posui/app.js     | 38 ++++++++++++++++------------
 sandbox/js/posui/index.html | 50 ++++++++++++++++++++-----------------
 2 files changed, 49 insertions(+), 39 deletions(-)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index 76be2fbe24441..3cdc178292226 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -1,6 +1,17 @@
+Vue.component('checkout', {
+    template: '#checkout-template',
+    props: ['orders'],
+    methods: {
+        removeOrder: function(item) {
+            this.orders.$remove(item);
+        }
+    }
+});
+
 new Vue({
     el: '#app',
     data: {
+        orders: [],
         order: {
             items: [
             ],
@@ -23,24 +34,19 @@ new Vue({
         search: ''
     },
     methods: {
-        addOrderItem: function(event) {
-            console.log(event);
-            var item, item_name, item_price, item_qty = 1;
+        addOrder: function(item) {
+            var order, quantity = 1;
 
-            item_name = event.target.getAttribute('data-name');
-            item_price = event.target.getAttribute('data-price');
-            item = _.find(this.order.items, {name: item_name});
-            if (item) {
-                item_qty = item.qty++;
-            }
-            else {
-                item = {name: item_name, price: item_price, qty: item_qty, total: item_price};
-                this.order.items.push(item);
+            order = _.find(this.orders, {name: item.name});
+
+            if (order) {
+                quantity = order.qty++;
+            } else {
+                order = {name: item.name, price: item.price, qty: quantity, total: item.price};
+                this.orders.push(order);
             }
-            item.total = item.price * item.qty;
-        },
-        removeItem: function(event, item) {
-            this.order.items.$remove(item);
+
+            order.total = order.price * order.qty;
         }
     }
 });
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index 0bc3aa522477e..bdfebcf003786 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -18,28 +18,7 @@
                 Order Items
             </div>
             <div class="panel-body">
-                <table class="table">
-                    <thead>
-                        <th>Item Name</th>
-                        <th>Qty</th>
-                        <th>Price</th>
-                        <th></th>
-                    </thead>
-                    <tbody>
-                        <tr v-for="item in order.items">
-                            <td>{{ item.name }}</td>
-                            <td>{{ item.qty }}</td>
-                            <td>{{ item.total }}</td>
-                            <td v-on:click="removeItem($event, item)"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></td>
-                        </tr>
-                        <tr>
-                            <td></td>
-                            <td><b>Total</b></td>
-                            <td>{{ order.getTotal() }}</td>
-                            <td></td>
-                        </tr>
-                    </tbody>
-                </table>
+                <checkout :orders="orders"></checkout>
             </div>
         </div>
     </div>
@@ -58,7 +37,7 @@
                 </div>
                 <div class="row">
                     <div class="col-md-2" v-for="item in items | filterBy search">
-                        <div v-on:click="addOrderItem" data-name="{{ item.name }}" data-price="{{ item.price }}" class="col-md-2">{{ item.name }}</div>
+                        <div class="col-md-2" @click="addOrder(item)">{{ item.name }}</div>
                     </div>
                 </div>
             </div>
@@ -68,6 +47,31 @@
         <pre>{{ $data | json }}</pre>
     </div>
 </div>
+
+<template id="checkout-template">
+    <table class="table">
+        <thead>
+            <th>Item Name</th>
+            <th>Qty</th>
+            <th>Price</th>
+            <th></th>
+        </thead>
+        <tbody>
+            <tr v-for="order in orders">
+                <td>{{ order.name }}</td>
+                <td>{{ order.qty }}</td>
+                <td>{{ order.total }}</td>
+                <td @click="removeOrder(order)"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></td>
+            </tr>
+            <tr>
+                <td></td>
+                <td><b>Total</b></td>
+                <td>{{ order.getTotal() }}</td>
+                <td></td>
+            </tr>
+        </tbody>
+    </table>
+</template>
 <!-- Latest compiled and minified JavaScript -->
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.13/vue.min.js"></script>

From 32624f67b177a8d71edc4eb0a383657057937b57 Mon Sep 17 00:00:00 2001
From: crynobone <crynobone@gmail.com>
Date: Fri, 1 Jan 2016 14:49:25 +0800
Subject: [PATCH 086/172] Convert to computed properties.

Signed-off-by: crynobone <crynobone@gmail.com>
---
 sandbox/js/posui/app.js     | 12 +++++-------
 sandbox/js/posui/index.html |  3 ++-
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index 3cdc178292226..4b8812efef4b1 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -1,6 +1,11 @@
 Vue.component('checkout', {
     template: '#checkout-template',
     props: ['orders'],
+    computed: {
+        totalOrder: function () {
+            return _.sum(this.orders, 'total');
+        }
+    },
     methods: {
         removeOrder: function(item) {
             this.orders.$remove(item);
@@ -12,13 +17,6 @@ new Vue({
     el: '#app',
     data: {
         orders: [],
-        order: {
-            items: [
-            ],
-            getTotal: function() {
-                return _.sum(this.items, 'total');
-            }
-        },
         items: [
             { name: 'Item-1', baracode: _.uniqueId('bar'), price: 15},
             { name: 'Item-2', baracode: _.uniqueId('bar'), price: 5},
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index bdfebcf003786..de0e3616780f6 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -66,11 +66,12 @@
             <tr>
                 <td></td>
                 <td><b>Total</b></td>
-                <td>{{ order.getTotal() }}</td>
+                <td>{{ totalOrder }}</td>
                 <td></td>
             </tr>
         </tbody>
     </table>
+    <pre>{{ $data | json }}</pre>
 </template>
 <!-- Latest compiled and minified JavaScript -->
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>

From 944d108521f1dac2b5a68d7dbbb908b2b975d16f Mon Sep 17 00:00:00 2001
From: crynobone <crynobone@gmail.com>
Date: Fri, 1 Jan 2016 14:52:17 +0800
Subject: [PATCH 087/172] Rename to barcode.

Signed-off-by: crynobone <crynobone@gmail.com>
---
 sandbox/js/posui/app.js | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index 4b8812efef4b1..0b8701ab9adb2 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -18,16 +18,16 @@ new Vue({
     data: {
         orders: [],
         items: [
-            { name: 'Item-1', baracode: _.uniqueId('bar'), price: 15},
-            { name: 'Item-2', baracode: _.uniqueId('bar'), price: 5},
-            { name: 'Item-3', baracode: _.uniqueId('bar'), price: 11},
-            { name: 'Item-4', baracode: _.uniqueId('bar'), price: 10},
-            { name: 'Item-5', baracode: _.uniqueId('bar'), price: 15},
-            { name: 'Item-6', baracode: _.uniqueId('bar'), price: 5},
-            { name: 'Item-7', baracode: _.uniqueId('bar'), price: 11},
-            { name: 'Item-8', baracode: _.uniqueId('bar'), price: 10},
-            { name: 'Item-9', baracode: _.uniqueId('bar'), price: 10},
-            { name: 'Item-10', baracode: _.uniqueId('bar'), price: 10}
+            { name: 'Item-1', barcode: _.uniqueId('bar'), price: 15},
+            { name: 'Item-2', barcode: _.uniqueId('bar'), price: 5},
+            { name: 'Item-3', barcode: _.uniqueId('bar'), price: 11},
+            { name: 'Item-4', barcode: _.uniqueId('bar'), price: 10},
+            { name: 'Item-5', barcode: _.uniqueId('bar'), price: 15},
+            { name: 'Item-6', barcode: _.uniqueId('bar'), price: 5},
+            { name: 'Item-7', barcode: _.uniqueId('bar'), price: 11},
+            { name: 'Item-8', barcode: _.uniqueId('bar'), price: 10},
+            { name: 'Item-9', barcode: _.uniqueId('bar'), price: 10},
+            { name: 'Item-10', barcode: _.uniqueId('bar'), price: 10}
         ],
         search: ''
     },

From 1474be26db6bc7d1d010125e838391e90680e43b Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Fri, 1 Jan 2016 18:33:43 +0800
Subject: [PATCH 088/172] Toggle for debug mode.

Still didn't work for the component. Try both with $parent.debug and
listing the props value in the component.
---
 sandbox/js/posui/app.js     | 5 +++--
 sandbox/js/posui/index.html | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/sandbox/js/posui/app.js b/sandbox/js/posui/app.js
index 0b8701ab9adb2..003a19c5dbb27 100644
--- a/sandbox/js/posui/app.js
+++ b/sandbox/js/posui/app.js
@@ -1,6 +1,6 @@
 Vue.component('checkout', {
     template: '#checkout-template',
-    props: ['orders'],
+    props: ['orders', 'debug'],
     computed: {
         totalOrder: function () {
             return _.sum(this.orders, 'total');
@@ -29,7 +29,8 @@ new Vue({
             { name: 'Item-9', barcode: _.uniqueId('bar'), price: 10},
             { name: 'Item-10', barcode: _.uniqueId('bar'), price: 10}
         ],
-        search: ''
+        search: '',
+        debug: false
     },
     methods: {
         addOrder: function(item) {
diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index de0e3616780f6..f46b00815915d 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -44,7 +44,8 @@
             <div class="panel-footer">Panel footer</div>
         </div>
         <!-- debugging -->
-        <pre>{{ $data | json }}</pre>
+        <input type="checkbox" v-model="debug" /> Enable Debug
+        <pre v-if="debug">{{ $data | json }}</pre>
     </div>
 </div>
 
@@ -71,7 +72,7 @@
             </tr>
         </tbody>
     </table>
-    <pre>{{ $data | json }}</pre>
+    <pre v-if="debug">{{ $data | json }}</pre>
 </template>
 <!-- Latest compiled and minified JavaScript -->
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>

From d838a8c56ac4c2cb567b1a6ac79ddd359045bc0a Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Fri, 1 Jan 2016 18:43:33 +0800
Subject: [PATCH 089/172] debug now work on the component !

---
 sandbox/js/posui/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sandbox/js/posui/index.html b/sandbox/js/posui/index.html
index f46b00815915d..b3fcd289d8ac7 100644
--- a/sandbox/js/posui/index.html
+++ b/sandbox/js/posui/index.html
@@ -18,7 +18,7 @@
                 Order Items
             </div>
             <div class="panel-body">
-                <checkout :orders="orders"></checkout>
+                <checkout :orders="orders" :debug="debug"></checkout>
             </div>
         </div>
     </div>

From 8eacda988c3581cdff5c9ba460eb44d54d64a3fa Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Sun, 3 Jan 2016 10:31:15 +0800
Subject: [PATCH 090/172] add gitter-sidecar chat

---
 _includes/gitter-sidecar.html | 6 ++++++
 _layouts/default.html         | 1 +
 2 files changed, 7 insertions(+)
 create mode 100644 _includes/gitter-sidecar.html

diff --git a/_includes/gitter-sidecar.html b/_includes/gitter-sidecar.html
new file mode 100644
index 0000000000000..a548b9bf8c5a8
--- /dev/null
+++ b/_includes/gitter-sidecar.html
@@ -0,0 +1,6 @@
+<script>
+    ((window.gitter = {}).chat = {}).options = {
+        room: 'devkini/devkini.github.io'
+    };
+</script>
+<script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
diff --git a/_layouts/default.html b/_layouts/default.html
index 8698877f9ff84..27ccf7f96b859 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -48,5 +48,6 @@ <h1 class="site-name"><a href="{{ site.baseurl }}/">{{ site.name }}</a></h1>
     </div>
 
     {% include analytics.html %}
+    {% include gitter-sidecar.html %}
   </body>
 </html>

From 93c65a767d90a0199d443fa2a6ef9dbcdca6e897 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Mon, 4 Jan 2016 18:34:07 +0800
Subject: [PATCH 091/172] Update README.md

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 40f22e63f1d2a..ebb3eda1ce22d 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[![Join the chat at https://gitter.im/devkini/devkini.github.io](https://badges.gitter.im/devkini/devkini.github.io.svg)](https://gitter.im/devkini/devkini.github.io?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
 # Jekyll Now
 
 **Jekyll** is a static site generator that's perfect for GitHub hosted blogs ([Jekyll Repository](https://github.com/jekyll/jekyll))
@@ -115,4 +117,4 @@ Issues and Pull Requests are greatly appreciated. If you've never contributed to
 
 You can start by [opening an issue](https://github.com/barryclark/jekyll-now/issues/new) describing the problem that you're looking to resolve and we'll go from there.
 
-I want to keep Jekyll Now as minimal as possible. Every line of code should be one that's useful to 90% of the people using it. Please bear that in mind when submitting feature requests. If it's not something that most people will use, it probably won't get merged. :guardsman:
\ No newline at end of file
+I want to keep Jekyll Now as minimal as possible. Every line of code should be one that's useful to 90% of the people using it. Please bear that in mind when submitting feature requests. If it's not something that most people will use, it probably won't get merged. :guardsman:

From 15234c56d3bc23d9be66c234f74af32017f4b6ac Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Tue, 5 Jan 2016 15:54:32 +0800
Subject: [PATCH 092/172] Create 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 _posts/2016-01-05-daily-git-commands.md

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
new file mode 100644
index 0000000000000..6dc39869c6e9f
--- /dev/null
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -0,0 +1,9 @@
+---
+layout: post
+title: "GIT: Daily commands"
+author: kamal
+tags: git, tips
+---
+
+Git commands are massive and chances are, you only need a small subset of them in daily usages. So here are the common git commands that I used daily:-
+

From 5551686f4e97a4866b53a15e11a3b387022bdcc8 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Wed, 6 Jan 2016 01:30:00 +0800
Subject: [PATCH 093/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 6dc39869c6e9f..739891a1009eb 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -7,3 +7,12 @@ tags: git, tips
 
 Git commands are massive and chances are, you only need a small subset of them in daily usages. So here are the common git commands that I used daily:-
 
+```
+# undo last commit
+git reset HEAD~1
+```
+
+```
+# abort merge
+git merge --abort
+```

From 3c0bebca43fd9ff74bf0ff637f3d08d61c8fb506 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Wed, 6 Jan 2016 01:32:18 +0800
Subject: [PATCH 094/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 739891a1009eb..5304ead4dd4bb 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -7,12 +7,20 @@ tags: git, tips
 
 Git commands are massive and chances are, you only need a small subset of them in daily usages. So here are the common git commands that I used daily:-
 
+Undo last commit:-
+
 ```
-# undo last commit
 git reset HEAD~1
 ```
 
+Abort merge:-
+
 ```
-# abort merge
 git merge --abort
 ```
+
+Set color on output (by default git already use color but not on OSX):-
+
+```
+git diff --color
+```

From b9ce51dc53ba68489cb2c7684df7201931cc1ed5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Wed, 6 Jan 2016 01:34:12 +0800
Subject: [PATCH 095/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 5304ead4dd4bb..a3005ef063e64 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -24,3 +24,10 @@ Set color on output (by default git already use color but not on OSX):-
 ```
 git diff --color
 ```
+
+Show diff on index/staging area:-
+
+```
+git diff --cached # OR
+git diff --staged
+```

From d0b1474d381972f5c3f23af1ff8c6015592e49d8 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Wed, 6 Jan 2016 15:29:50 +0800
Subject: [PATCH 096/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index a3005ef063e64..b323d5296120d 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -31,3 +31,16 @@ Show diff on index/staging area:-
 git diff --cached # OR
 git diff --staged
 ```
+
+Delete all branch except master:-
+
+```
+git branch | grep -v master | xargs git branch -d
+```
+
+Use `-D` instead to force delete. Sometimes git refused to delete like this:-
+
+```
+error: The branch '41-messages-too-long' is not fully merged.
+If you are sure you want to delete it, run 'git branch -D 41-messages-too-long'.
+```

From 9f9199e5921dd994e27355eff897142af030dd9d Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 10 Jan 2016 01:54:18 +0800
Subject: [PATCH 097/172] Update about.md

---
 about.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/about.md b/about.md
index 687f710deee15..ef36727f7d214 100644
--- a/about.md
+++ b/about.md
@@ -6,4 +6,4 @@ permalink: /about/
 
 We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
 
-Feel free to join our [Telegram group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw) or Channel [telegram.me/devkini](https://telegram.me/devkini).
+Join our Telegram Channel [telegram.me/devkini](https://telegram.me/devkini) or [Twitter](https://twitter.com/devkini) for latest update.

From b17e89a7cc4d1445cebe1d51d847d6ead32666d2 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 10 Jan 2016 02:14:02 +0800
Subject: [PATCH 098/172] Create 2016-01-10-telegram-generasi-bot.md

---
 _posts/2016-01-10-telegram-generasi-bot.md | 38 ++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 _posts/2016-01-10-telegram-generasi-bot.md

diff --git a/_posts/2016-01-10-telegram-generasi-bot.md b/_posts/2016-01-10-telegram-generasi-bot.md
new file mode 100644
index 0000000000000..13c2c1a0c6cd7
--- /dev/null
+++ b/_posts/2016-01-10-telegram-generasi-bot.md
@@ -0,0 +1,38 @@
+---
+layout: post
+title: "Telegram: Generasi bot"
+author: kamal
+tags: telegram, bot
+---
+
+Ada 2 generasi bot. Generasi awal, yang seperti user biasa - perlukan phone number dan seperti user biasa dapat baca kesemua mesej dalam group yang dia join. Bot yang guna command mula dengan `!` tu adalah generasi awal.
+
+Bot generasi baru menggunakan official [Bot API][api]. Nama dia mesti ada "bot" kat belakang. Tak perlukan phone number. Cuma boleh terima mesej yang dihantar khusus kepadanya - sama ada melalui command seperti `/cari`, `/help` atau pun kalau mention nama dia seperti `@kambingbot` dan sebagainya. Boleh terima semua mesej kalau privacy setting bot itu diubah.
+
+https://github.com/yagop/telegram-bot - bot generasi awal. Based on Lua so in theory boleh run kat windows.
+
+https://github.com/yagop/telegram-bot - A Telegram Bot based on plugins
+https://github.com/yukuku/telebot - bot generasi baru, based on Python, run on app engine.
+
+https://gist.github.com/k4ml/04867dc17389a1cfba45 - also on python tapi just basic example.
+
+Satu lagi library pilihan saya untuk develop bot adalah https://github.com/python-telegram-bot/python-telegram-bot. Menggunakan library ini, membina bot adalah semudah beberapa baris code seperti di bawah:-
+
+```python
+from telegram import Updater
+
+updater = Updater(token='token')
+dispatcher = updater.dispatcher
+
+def start(bot, update):
+  bot.sendMessage(chat_id=update.message.chat_id, text="I'm a bot, please talk to me!")
+
+def echo(bot, update):
+  bot.sendMessage(chat_id=update.message.chat_id, text=update.message.text)
+
+dispatcher.addTelegramCommandHandler('start', start)
+dispatcher.addTelegramMessageHandler(echo)
+updater.start_polling()
+```
+
+[api]:https://core.telegram.org/bots

From ba4fd1d8f1dc586387ee6dd92eedca86a85341c5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 10 Jan 2016 02:19:19 +0800
Subject: [PATCH 099/172] Update post.html

---
 _layouts/post.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_layouts/post.html b/_layouts/post.html
index 6607fcb8fd4d6..aac950e538d3e 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -15,7 +15,7 @@ <h1>{{ page.title }}</h1>
   </div>
   
   <div class="panel">
-    Get latest updates from us by joining our <a href="https://telegram.me/devkini">Telegram Channel</a> - <a href="https://telegram.me/devkini">telegram.me/devkini</a> or get into discussion in our <a href="https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw">Telegram Group</a>.
+    Get latest updates from us by joining our <a href="https://telegram.me/devkini">Telegram Channel</a> - <a href="https://telegram.me/devkini">telegram.me/devkini</a> or follow our <a href="https://twitter.com/devkini">Twitter</a>.
   </div>
   
   <div class="related">

From d63958b769863e8d698aade58755b4da31c28c5e Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 10 Jan 2016 02:20:42 +0800
Subject: [PATCH 100/172] Update _config.yml

---
 _config.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_config.yml b/_config.yml
index 85275693dbcbf..aaf9abce174c9 100644
--- a/_config.yml
+++ b/_config.yml
@@ -26,7 +26,7 @@ footer-links:
   linkedin:
   pinterest:
   rss: # just type anything here for a working RSS icon, make sure you set the "url" above!
-  twitter:
+  twitter: devkini
   stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers"
   youtube: # channel/<your_long_string> or user/<user-name>
   googleplus: # anything in your profile username that comes after plus.google.com/

From 43255fda3d9afa56f018babe02724c954461fc7a Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 04:48:10 +0800
Subject: [PATCH 101/172] Create 2016-01-14-github-notes-lack-search.md

---
 _posts/2016-01-14-github-notes-lack-search.md | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 _posts/2016-01-14-github-notes-lack-search.md

diff --git a/_posts/2016-01-14-github-notes-lack-search.md b/_posts/2016-01-14-github-notes-lack-search.md
new file mode 100644
index 0000000000000..f928aa734886d
--- /dev/null
+++ b/_posts/2016-01-14-github-notes-lack-search.md
@@ -0,0 +1,17 @@
+---
+layout: post
+title: "Github: Notes and Lack of Search"
+author: kamal
+tags: github, git
+---
+
+It's been a while since we fully moved all our project repos (in svn) to Github. So I'll try to share our experiences so far.
+
+Search definitely lacking. You can only search through issues and code per repo only, or through all repos globally on Github, which useless for private repos. While commenting on commit and pull request are great for code review, unable to search it back is definitely an awful experience as that what make code review valuable when you trying to figure out the past on why certain thing being done in certain way.
+
+The workaround for search as of now is to search your emails (if you enable notification). In our case, we're using Slack so we can use the following keywords:-
+
+* "New comment on commit" <keyword> - code review search.
+* "New comment on issue" <keyword> - issue search.
+
+This [blog post](http://ariya.ofilabs.com/2012/08/github-and-lack-of-searchability.html) also talk in length on the lack of search issue.

From 408a113ca8bc4444e412db0ab1b0e4b79b2a76fa Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 05:01:45 +0800
Subject: [PATCH 102/172] Update 2016-01-14-github-notes-lack-search.md

---
 _posts/2016-01-14-github-notes-lack-search.md | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/_posts/2016-01-14-github-notes-lack-search.md b/_posts/2016-01-14-github-notes-lack-search.md
index f928aa734886d..566b8deccf18b 100644
--- a/_posts/2016-01-14-github-notes-lack-search.md
+++ b/_posts/2016-01-14-github-notes-lack-search.md
@@ -15,3 +15,14 @@ The workaround for search as of now is to search your emails (if you enable noti
 * "New comment on issue" <keyword> - issue search.
 
 This [blog post](http://ariya.ofilabs.com/2012/08/github-and-lack-of-searchability.html) also talk in length on the lack of search issue.
+
+## Triangular Workflow
+This work great so far except for a few hiccups but let's look at what it mean first. This diagram describe it well:-
+
+<img src="https://cloud.githubusercontent.com/assets/1319791/8943755/5dcdcae4-354a-11e5-9f82-915914fad4f7.png"></img>
+Image ref - https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows
+
+Most of our repos only writable by a few developers, which the rest of the team will need to fork and submit their changes through a Pull Request. Few of the hiccups I mentioned just now:-
+
+* Collaboration between developers - When a developer submit a PR, other fellow dev might need to chip in some fixes and naturally, he would also submit a PR against the other developer's fork. But this making the workflow more complicated, not to mention the discussion now all over the place, instead in just one single PR. So for now what we did is require all developers to set their forks to be writable by entire team, so any developer that need to contribute will just need to clone the repo, and commit to the same branch, which would then appear in the same PR.
+* Tagging release.

From 477211851c88fc0fa32eeabfb2b002f5324dc6d1 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 05:10:46 +0800
Subject: [PATCH 103/172] Update 2016-01-14-github-notes-lack-search.md

---
 _posts/2016-01-14-github-notes-lack-search.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2016-01-14-github-notes-lack-search.md b/_posts/2016-01-14-github-notes-lack-search.md
index 566b8deccf18b..ce92245a1d0b2 100644
--- a/_posts/2016-01-14-github-notes-lack-search.md
+++ b/_posts/2016-01-14-github-notes-lack-search.md
@@ -25,4 +25,4 @@ Image ref - https://github.com/blog/2042-git-2-5-including-multiple-worktrees-an
 Most of our repos only writable by a few developers, which the rest of the team will need to fork and submit their changes through a Pull Request. Few of the hiccups I mentioned just now:-
 
 * Collaboration between developers - When a developer submit a PR, other fellow dev might need to chip in some fixes and naturally, he would also submit a PR against the other developer's fork. But this making the workflow more complicated, not to mention the discussion now all over the place, instead in just one single PR. So for now what we did is require all developers to set their forks to be writable by entire team, so any developer that need to contribute will just need to clone the repo, and commit to the same branch, which would then appear in the same PR.
-* Tagging release.
+* Tagging release - When making release, developer need to make a tag but since they don't have write access to the canonical repo, that mean committing the tag to their fork. But at the same time, there's no PR kind of thing for tag, so they have to manually inform the repo maintainer to fetch new tags from their fork, which really prone to human error - forgotten.

From 4d21f70d811328ad64e67267fff20cffe50f55fb Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 05:11:21 +0800
Subject: [PATCH 104/172] Update 2016-01-14-github-notes-lack-search.md

---
 _posts/2016-01-14-github-notes-lack-search.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2016-01-14-github-notes-lack-search.md b/_posts/2016-01-14-github-notes-lack-search.md
index ce92245a1d0b2..0da47c09253b3 100644
--- a/_posts/2016-01-14-github-notes-lack-search.md
+++ b/_posts/2016-01-14-github-notes-lack-search.md
@@ -16,6 +16,8 @@ The workaround for search as of now is to search your emails (if you enable noti
 
 This [blog post](http://ariya.ofilabs.com/2012/08/github-and-lack-of-searchability.html) also talk in length on the lack of search issue.
 
+<!--more-->
+
 ## Triangular Workflow
 This work great so far except for a few hiccups but let's look at what it mean first. This diagram describe it well:-
 

From 9c6a49edffc4afb1e0bbbb4d60d641795560ac30 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 05:12:54 +0800
Subject: [PATCH 105/172] Update 2016-01-14-github-notes-lack-search.md

---
 _posts/2016-01-14-github-notes-lack-search.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2016-01-14-github-notes-lack-search.md b/_posts/2016-01-14-github-notes-lack-search.md
index 0da47c09253b3..41c3eba0cad84 100644
--- a/_posts/2016-01-14-github-notes-lack-search.md
+++ b/_posts/2016-01-14-github-notes-lack-search.md
@@ -5,7 +5,7 @@ author: kamal
 tags: github, git
 ---
 
-It's been a while since we fully moved all our project repos (in svn) to Github. So I'll try to share our experiences so far.
+It's been a while since we fully moved all our project repos (in svn) to Github. So I'll try to share our experiences so far. This is a work in progress so I'll keep adding more as we progress.
 
 Search definitely lacking. You can only search through issues and code per repo only, or through all repos globally on Github, which useless for private repos. While commenting on commit and pull request are great for code review, unable to search it back is definitely an awful experience as that what make code review valuable when you trying to figure out the past on why certain thing being done in certain way.
 

From 7d8fd00f613228a229d990b65134544a02394369 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 15:18:05 +0800
Subject: [PATCH 106/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index b323d5296120d..da3290528fb59 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -44,3 +44,10 @@ Use `-D` instead to force delete. Sometimes git refused to delete like this:-
 error: The branch '41-messages-too-long' is not fully merged.
 If you are sure you want to delete it, run 'git branch -D 41-messages-too-long'.
 ```
+
+List commits on local but not yet on remote (kind of `hg outgoing`):-
+
+```
+git log origin/master..master
+```
+http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in

From a576905fb34afde737f08407e7c40f07b8b11720 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 14 Jan 2016 17:31:15 +0800
Subject: [PATCH 107/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index da3290528fb59..5d9059231a42f 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -51,3 +51,24 @@ List commits on local but not yet on remote (kind of `hg outgoing`):-
 git log origin/master..master
 ```
 http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in
+
+Git add patch (`git add -p`) I think is pretty well known but I've just discovered one of it's very handy option:-
+
+```
+Stage this hunk [y,n,q,a,d,/,K,g,e,?]? s
+y - stage this hunk
+n - do not stage this hunk
+q - quit; do not stage this hunk nor any of the remaining ones
+a - stage this hunk and all later hunks in the file
+d - do not stage this hunk nor any of the later hunks in the file
+g - select a hunk to go to
+/ - search for a hunk matching the given regex
+j - leave this hunk undecided, see next undecided hunk
+J - leave this hunk undecided, see next hunk
+k - leave this hunk undecided, see previous undecided hunk
+K - leave this hunk undecided, see previous hunk
+s - split the current hunk into smaller hunks
+e - manually edit the current hunk
+? - print help
+```
+So the proposed hunk might contain 2 unrelated changes you don't want to commit together. The `s` option allow you to split the hunk into much smaller hunk.

From d7460b2b051630e39f1a5f4f754d0500c54f7480 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Tue, 19 Jan 2016 12:15:15 +0800
Subject: [PATCH 108/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 5d9059231a42f..eeeec56b87188 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -72,3 +72,9 @@ e - manually edit the current hunk
 ? - print help
 ```
 So the proposed hunk might contain 2 unrelated changes you don't want to commit together. The `s` option allow you to split the hunk into much smaller hunk.
+
+Stash untracked files:-
+
+```
+git stash save -u
+```

From 42bfd9ae20c25b787a7a948d64955b480360f02a Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:06:05 +0800
Subject: [PATCH 109/172] Create index.html

---
 sandbox/js/fbsdk/index.html | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 sandbox/js/fbsdk/index.html

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
new file mode 100644
index 0000000000000..23d66ebe61bbe
--- /dev/null
+++ b/sandbox/js/fbsdk/index.html
@@ -0,0 +1,21 @@
+<html>
+<body>
+<script>
+  window.fbAsyncInit = function() {
+    FB.init({
+      appId      : 'your-app-id',
+      xfbml      : true,
+      version    : 'v2.5'
+    });
+  };
+
+  (function(d, s, id){
+     var js, fjs = d.getElementsByTagName(s)[0];
+     if (d.getElementById(id)) {return;}
+     js = d.createElement(s); js.id = id;
+     js.src = "//connect.facebook.net/en_US/sdk.js";
+     fjs.parentNode.insertBefore(js, fjs);
+   }(document, 'script', 'facebook-jssdk'));
+</script>
+</body>
+</html>

From e9532bf32a7a29fb9f8b6dbbda33252bf7a5f8d8 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:08:59 +0800
Subject: [PATCH 110/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 23d66ebe61bbe..fa4956e329101 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -3,7 +3,7 @@
 <script>
   window.fbAsyncInit = function() {
     FB.init({
-      appId      : 'your-app-id',
+      appId      : '1767915503436232',
       xfbml      : true,
       version    : 'v2.5'
     });

From de2b921b64bd8d8a5faec81a50fc0ff469492594 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:10:35 +0800
Subject: [PATCH 111/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index fa4956e329101..2011d2d358a2c 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -17,5 +17,11 @@
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
 </script>
+<div
+  class="fb-like"
+  data-share="true"
+  data-width="450"
+  data-show-faces="true">
+</div>
 </body>
 </html>

From 2c7bed694a1656de22cb28e4a9e3544c84970c6c Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:14:57 +0800
Subject: [PATCH 112/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 2011d2d358a2c..0c2974f5aeb19 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -16,6 +16,11 @@
      js.src = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
+   
+   // Only works after `FB.init` is called
+function myFacebookLogin() {
+  FB.login(function(){}, {scope: 'publish_actions'});
+}
 </script>
 <div
   class="fb-like"
@@ -23,5 +28,6 @@
   data-width="450"
   data-show-faces="true">
 </div>
+<button onclick="myFacebookLogin()">Login with Facebook</button>
 </body>
 </html>

From 033aba6320eb35bd280ee8351fd6a0866b01aef5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:33:40 +0800
Subject: [PATCH 113/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 0c2974f5aeb19..0fd5c2e5a9e69 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -19,7 +19,7 @@
    
    // Only works after `FB.init` is called
 function myFacebookLogin() {
-  FB.login(function(){}, {scope: 'publish_actions'});
+  FB.login(function(){}, {scope: 'publish_actions, user_posts'});
 }
 </script>
 <div

From 1c6411b6937faa1b759108683bd8c3c0a8e301cd Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:48:20 +0800
Subject: [PATCH 114/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 0fd5c2e5a9e69..7b203345ee754 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -21,13 +21,15 @@
 function myFacebookLogin() {
   FB.login(function(){}, {scope: 'publish_actions, user_posts'});
 }
+
+FB.getLoginStatus(function(response) {
+  if (response.status === 'connected') {
+    console.log('Logged in.');
+  }
+  else {
+    myFacebookLogin();
+  }
+});
 </script>
-<div
-  class="fb-like"
-  data-share="true"
-  data-width="450"
-  data-show-faces="true">
-</div>
-<button onclick="myFacebookLogin()">Login with Facebook</button>
 </body>
 </html>

From dd2ff1258c4467b0d1e5ea0bf6873f6cdb58fab2 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 15:57:21 +0800
Subject: [PATCH 115/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 41 ++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 21 deletions(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 7b203345ee754..23dd7bd3c2de6 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -1,13 +1,26 @@
 <html>
 <body>
 <script>
-  window.fbAsyncInit = function() {
-    FB.init({
-      appId      : '1767915503436232',
-      xfbml      : true,
-      version    : 'v2.5'
-    });
-  };
+    window.fbAsyncInit = function() {
+        FB.init({
+            appId      : '1767915503436232',
+            xfbml      : true,
+            version    : 'v2.5'
+        });
+    
+        function myFacebookLogin() {
+            FB.login(function(){}, {scope: 'publish_actions, user_posts'});
+        }
+
+        FB.getLoginStatus(function(response) {
+            if (response.status === 'connected') {
+                console.log('Logged in.');
+            }   
+            else {
+                myFacebookLogin();
+            }
+        });
+    };
 
   (function(d, s, id){
      var js, fjs = d.getElementsByTagName(s)[0];
@@ -16,20 +29,6 @@
      js.src = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
-   
-   // Only works after `FB.init` is called
-function myFacebookLogin() {
-  FB.login(function(){}, {scope: 'publish_actions, user_posts'});
-}
-
-FB.getLoginStatus(function(response) {
-  if (response.status === 'connected') {
-    console.log('Logged in.');
-  }
-  else {
-    myFacebookLogin();
-  }
-});
 </script>
 </body>
 </html>

From 6be307b776ff73b0bc2469cadcf7eacba2f32e25 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 16:08:51 +0800
Subject: [PATCH 116/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 23dd7bd3c2de6..72dfddbedb9d2 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -1,5 +1,13 @@
 <html>
+<head>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.13/vue.min.js"></script>
+</head>
 <body>
+<div id="app">
+    <ul>
+        <li v-for="post in posts">{{ post.message }}</li>
+    </ul>
+</div>
 <script>
     window.fbAsyncInit = function() {
         FB.init({
@@ -14,7 +22,14 @@
 
         FB.getLoginStatus(function(response) {
             if (response.status === 'connected') {
-                console.log('Logged in.');
+                FB.api('/me/feed', function(response) {
+                    new Vue({
+                        el: '#app',
+                        data: {
+                            posts: response.data    
+                        }
+                    });   
+                }
             }   
             else {
                 myFacebookLogin();

From c37338290bfe053ecf3bb17278c7a78bed148b05 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 16:09:49 +0800
Subject: [PATCH 117/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 72dfddbedb9d2..58539ab47820a 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -29,7 +29,7 @@
                             posts: response.data    
                         }
                     });   
-                }
+                });
             }   
             else {
                 myFacebookLogin();

From 1f25274e1f173403af25f847c45e6a362a0c66a9 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 16:39:13 +0800
Subject: [PATCH 118/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 58539ab47820a..eb1efb7fcda7d 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -7,6 +7,8 @@
     <ul>
         <li v-for="post in posts">{{ post.message }}</li>
     </ul>
+    <button v-if="!loggedIn" @click="login()">Login to view your posts</button>
+    <button v-if="loggedIn" @click="getPost()">Get Posts</button>
 </div>
 <script>
     window.fbAsyncInit = function() {
@@ -19,20 +21,25 @@
         function myFacebookLogin() {
             FB.login(function(){}, {scope: 'publish_actions, user_posts'});
         }
-
-        FB.getLoginStatus(function(response) {
-            if (response.status === 'connected') {
-                FB.api('/me/feed', function(response) {
-                    new Vue({
-                        el: '#app',
-                        data: {
-                            posts: response.data    
+        
+        new Vue({
+            el: "#app",
+            data: {
+                posts: [],
+                loggedIn: false
+            },
+            methods: {
+                getPost: function() {
+                    FB.getLoginStatus(function(response) {
+                        if (response.status === 'connected') {
+                            this.loggedIn = true;
+                            FB.api('/me/feed', function(response) {
+                                this.posts = response.data;
+                            });
                         }
-                    });   
-                });
-            }   
-            else {
-                myFacebookLogin();
+                    });
+                },
+                login: myFacebookLogin
             }
         });
     };

From 14f06a2ac28fdfffec5afd421c03267ad1acd2e5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 16:47:26 +0800
Subject: [PATCH 119/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index eb1efb7fcda7d..04c8ce32c9357 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -39,7 +39,13 @@
                         }
                     });
                 },
-                login: myFacebookLogin
+                login: function() {
+                    FB.login(function(response){
+                        if (response.status === 'connected') {
+                            this.loggedIn = true;
+                        }
+                    }, {scope: 'publish_actions, user_posts'});
+                }
             }
         });
     };

From 4ab4642cebe93d5a129033eb470fe6d87a8599de Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 16:52:51 +0800
Subject: [PATCH 120/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 04c8ce32c9357..3c23a158bceb7 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -8,7 +8,7 @@
         <li v-for="post in posts">{{ post.message }}</li>
     </ul>
     <button v-if="!loggedIn" @click="login()">Login to view your posts</button>
-    <button v-if="loggedIn" @click="getPost()">Get Posts</button>
+    <button @click="getPost()">Get Posts</button>
 </div>
 <script>
     window.fbAsyncInit = function() {

From 9cccf695a4ef55b0a8f2f39d5995be884f5af637 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 16:58:11 +0800
Subject: [PATCH 121/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 3c23a158bceb7..1298d91dc9bb2 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -35,6 +35,7 @@
                             this.loggedIn = true;
                             FB.api('/me/feed', function(response) {
                                 this.posts = response.data;
+                                console.log(this.posts);
                             });
                         }
                     });

From 6a29599ef108b2e6c4f6f7402cf65508f23dcfeb Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 17:03:40 +0800
Subject: [PATCH 122/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 1298d91dc9bb2..29839c722d75a 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -9,6 +9,7 @@
     </ul>
     <button v-if="!loggedIn" @click="login()">Login to view your posts</button>
     <button @click="getPost()">Get Posts</button>
+    <pre {{ $data | json }}</pre>
 </div>
 <script>
     window.fbAsyncInit = function() {

From b2ea63bba28233117e8c54fed65b7a11275ffeb0 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sat, 23 Jan 2016 17:05:11 +0800
Subject: [PATCH 123/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 29839c722d75a..372823f0ce253 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -9,7 +9,7 @@
     </ul>
     <button v-if="!loggedIn" @click="login()">Login to view your posts</button>
     <button @click="getPost()">Get Posts</button>
-    <pre {{ $data | json }}</pre>
+    <pre>{{ $data | json }}</pre>
 </div>
 <script>
     window.fbAsyncInit = function() {

From 4aa47236bb3ea229e1aff008bac650780326c5b8 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Sat, 23 Jan 2016 18:37:06 +0800
Subject: [PATCH 124/172] fix getPost.

Need to rebind this to self.
---
 sandbox/js/fbsdk/index.html | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 372823f0ce253..38408a84f7a4b 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -19,10 +19,6 @@
             version    : 'v2.5'
         });
     
-        function myFacebookLogin() {
-            FB.login(function(){}, {scope: 'publish_actions, user_posts'});
-        }
-        
         new Vue({
             el: "#app",
             data: {
@@ -31,20 +27,16 @@
             },
             methods: {
                 getPost: function() {
-                    FB.getLoginStatus(function(response) {
-                        if (response.status === 'connected') {
-                            this.loggedIn = true;
-                            FB.api('/me/feed', function(response) {
-                                this.posts = response.data;
-                                console.log(this.posts);
-                            });
-                        }
+                    var self = this;
+                    FB.api('/me/feed', function(response) {
+                        self.posts = response.data;
                     });
                 },
                 login: function() {
+                    var self = this;
                     FB.login(function(response){
                         if (response.status === 'connected') {
-                            this.loggedIn = true;
+                            self.loggedIn = true;
                         }
                     }, {scope: 'publish_actions, user_posts'});
                 }

From 5571ca6b2c16647c00a0290a636954f585fe040c Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Sun, 24 Jan 2016 04:52:35 +0800
Subject: [PATCH 125/172] Show share count for post.

Still need to figure out how to show share for each post. Currently
since we use a single attribute `shares` on the model, the count will
appear on each post.
---
 sandbox/js/fbsdk/index.html | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index 38408a84f7a4b..ec525f02636f9 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -5,7 +5,10 @@
 <body>
 <div id="app">
     <ul>
-        <li v-for="post in posts">{{ post.message }}</li>
+        <li v-for="post in posts">
+            {{ post.message }}
+            <span @click="getShare(post.id)">Shares: {{ share }}</span>
+        </li>
     </ul>
     <button v-if="!loggedIn" @click="login()">Login to view your posts</button>
     <button @click="getPost()">Get Posts</button>
@@ -23,7 +26,8 @@
             el: "#app",
             data: {
                 posts: [],
-                loggedIn: false
+                loggedIn: false,
+                share: null
             },
             methods: {
                 getPost: function() {
@@ -39,6 +43,17 @@
                             self.loggedIn = true;
                         }
                     }, {scope: 'publish_actions, user_posts'});
+                },
+                getShare: function(post_id) {
+                    var self = this;
+                    FB.api('/' + post_id, {fields: 'shares'}, function(response) {
+                        if (response && !response.error) {
+                            console.log(response.shares);
+                            if (response.shares) {
+                                self.share = response.shares.count;
+                            }
+                        }
+                    });
                 }
             }
         });

From adf731ea4d10eaec0f62c3707a67902b05a53bb6 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 24 Jan 2016 05:33:09 +0800
Subject: [PATCH 126/172] Update index.html

---
 sandbox/js/fbsdk/index.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sandbox/js/fbsdk/index.html b/sandbox/js/fbsdk/index.html
index ec525f02636f9..a2cdfc31c2e3f 100644
--- a/sandbox/js/fbsdk/index.html
+++ b/sandbox/js/fbsdk/index.html
@@ -1,3 +1,4 @@
+<!-- Join telegram channel https://telegram.me/devkini for updates -->
 <html>
 <head>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.13/vue.min.js"></script>

From c503751709522d53c72d30eeb376a0247452f44c Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Thu, 28 Jan 2016 18:59:51 +0800
Subject: [PATCH 127/172] added article on git merge unrelated repos

---
 .../2016-01-28-git-merge-unrelated-repos.md   | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 _posts/2016-01-28-git-merge-unrelated-repos.md

diff --git a/_posts/2016-01-28-git-merge-unrelated-repos.md b/_posts/2016-01-28-git-merge-unrelated-repos.md
new file mode 100644
index 0000000000000..793e65632a867
--- /dev/null
+++ b/_posts/2016-01-28-git-merge-unrelated-repos.md
@@ -0,0 +1,35 @@
+---
+layout: post
+title: "Git: Merge Unrelated Repos"
+author: kamal
+tags: git
+---
+
+So I have this repo - `git@github.com:k4ml/k4ml.github.io.git` and I want to merge
+it with `git@github.com:barryclark/jekyll-now.git`. Both repos are not related.
+
+```
+git clone git@github.com:k4ml/k4ml.github.io.git
+cd k4ml.github.io
+git pull -s recursive -X theirs git@github.com:barryclark/jekyll-now.git master
+```
+
+You'll see a warning about no common commits but the merge proceed:-
+
+```
+warning: no common commits
+remote: Counting objects: 1257, done.
+remote: Total 1257 (delta 0), reused 0 (delta 0), pack-reused 1257
+Receiving objects: 100% (1257/1257), 8.17 MiB | 1.09 MiB/s, done.
+Resolving deltas: 100% (698/698), done.
+From github.com:barryclark/jekyll-now
+ * branch            master     -> FETCH_HEAD
+ Auto-merging index.html
+ Auto-merging about.md
+ Auto-merging README.md
+```
+
+The `theirs` merge strategy option mean if there's conflict (similar filename for example), the incoming
+version will be used.
+
+I'd first seen this being used in [Openshift example](https://github.com/openshift/django-example).

From 21a5f10354ed6127eadb70b354071d334c7433fa Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <kamal.mustafa@gmail.com>
Date: Thu, 28 Jan 2016 20:04:03 +0800
Subject: [PATCH 128/172] added link to orchestra project, thx @crynobone

---
 _posts/2016-01-28-git-merge-unrelated-repos.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2016-01-28-git-merge-unrelated-repos.md b/_posts/2016-01-28-git-merge-unrelated-repos.md
index 793e65632a867..6cc87de88af37 100644
--- a/_posts/2016-01-28-git-merge-unrelated-repos.md
+++ b/_posts/2016-01-28-git-merge-unrelated-repos.md
@@ -33,3 +33,5 @@ The `theirs` merge strategy option mean if there's conflict (similar filename fo
 version will be used.
 
 I'd first seen this being used in [Openshift example](https://github.com/openshift/django-example).
+
+Other merge tips from Orchestra project - http://read.cookbook.orchestraplatform.com/installation/sync.html.

From aceb14e521325b0a4cd1e68f02b3e5ccd3536bae Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 11 Feb 2016 08:11:40 +0800
Subject: [PATCH 129/172] Use heading for easy bookmarking

---
 _posts/2016-01-05-daily-git-commands.md | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index eeeec56b87188..d21207be3adc5 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -7,52 +7,52 @@ tags: git, tips
 
 Git commands are massive and chances are, you only need a small subset of them in daily usages. So here are the common git commands that I used daily:-
 
-Undo last commit:-
+### Undo last commit
 
 ```
 git reset HEAD~1
 ```
 
-Abort merge:-
+### Abort merge
 
 ```
 git merge --abort
 ```
 
-Set color on output (by default git already use color but not on OSX):-
+### Set color on output (by default git already use color but not on OSX):-
 
 ```
 git diff --color
 ```
 
-Show diff on index/staging area:-
+### Show diff on index/staging area
 
 ```
 git diff --cached # OR
 git diff --staged
 ```
 
-Delete all branch except master:-
+### Delete all branch except master:-
 
 ```
 git branch | grep -v master | xargs git branch -d
 ```
 
-Use `-D` instead to force delete. Sometimes git refused to delete like this:-
+### Use `-D` instead to force delete. Sometimes git refused to delete like this
 
 ```
 error: The branch '41-messages-too-long' is not fully merged.
 If you are sure you want to delete it, run 'git branch -D 41-messages-too-long'.
 ```
 
-List commits on local but not yet on remote (kind of `hg outgoing`):-
+### List commits on local but not yet on remote (kind of `hg outgoing`)
 
 ```
 git log origin/master..master
 ```
 http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in
 
-Git add patch (`git add -p`) I think is pretty well known but I've just discovered one of it's very handy option:-
+### Git add patch (`git add -p`) I think is pretty well known but I've just discovered one of it's very handy option
 
 ```
 Stage this hunk [y,n,q,a,d,/,K,g,e,?]? s
@@ -73,7 +73,7 @@ e - manually edit the current hunk
 ```
 So the proposed hunk might contain 2 unrelated changes you don't want to commit together. The `s` option allow you to split the hunk into much smaller hunk.
 
-Stash untracked files:-
+### Stash untracked files
 
 ```
 git stash save -u

From b6884de247c4f6180c23bfb48c688015a803705e Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 11 Feb 2016 08:14:12 +0800
Subject: [PATCH 130/172] fix long header

---
 _posts/2016-01-05-daily-git-commands.md | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index d21207be3adc5..17dafc08b27ab 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -19,7 +19,8 @@ git reset HEAD~1
 git merge --abort
 ```
 
-### Set color on output (by default git already use color but not on OSX):-
+### Set color on output
+By default git already use color but not on OSX:-
 
 ```
 git diff --color
@@ -32,7 +33,7 @@ git diff --cached # OR
 git diff --staged
 ```
 
-### Delete all branch except master:-
+### Delete all branch except master
 
 ```
 git branch | grep -v master | xargs git branch -d
@@ -52,7 +53,8 @@ git log origin/master..master
 ```
 http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in
 
-### Git add patch (`git add -p`) I think is pretty well known but I've just discovered one of it's very handy option
+### Git add patch
+`git add -p` I think is pretty well known but I've just discovered one of it's very handy option
 
 ```
 Stage this hunk [y,n,q,a,d,/,K,g,e,?]? s

From 4385d2c73ec26e5b750c8b19bd173d3e7b5a1523 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 11 Feb 2016 08:19:03 +0800
Subject: [PATCH 131/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 17dafc08b27ab..b21ff0fa02b0a 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -80,3 +80,8 @@ So the proposed hunk might contain 2 unrelated changes you don't want to commit
 ```
 git stash save -u
 ```
+
+### Stash patch
+Discovered this today. I'm on a branch and there's some changes there that I want to commit to master. Git won't allow you to checkout `master` unless you commit all the changes, or stash them. But there's only certain hunk that I want to commit to master, while the rest should be committed to the current branch (when ready). So it would be great if I can stash all the changes into proper hunks that I want to commit.
+
+So `git stash -p` is the equivalent of `git add -p` for stashing.

From cc92789cd2206a13af487786330c65be45d4cd4f Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 11 Feb 2016 08:40:11 +0800
Subject: [PATCH 132/172] Update 2016-01-05-daily-git-commands.md

---
 _posts/2016-01-05-daily-git-commands.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index b21ff0fa02b0a..0ba0d0ddb465f 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -85,3 +85,5 @@ git stash save -u
 Discovered this today. I'm on a branch and there's some changes there that I want to commit to master. Git won't allow you to checkout `master` unless you commit all the changes, or stash them. But there's only certain hunk that I want to commit to master, while the rest should be committed to the current branch (when ready). So it would be great if I can stash all the changes into proper hunks that I want to commit.
 
 So `git stash -p` is the equivalent of `git add -p` for stashing.
+
+Reference - http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-multiple-files-that-have-changed-with-git

From 1b96b3d287fd5cd8df0e8ab03f91f824aa7b988b Mon Sep 17 00:00:00 2001
From: Amree Zaid <mohd.amree@gmail.com>
Date: Wed, 10 Feb 2016 11:10:45 +0800
Subject: [PATCH 133/172] Based on https://git.io/vgYlB, GitHub will only
 support kramdown in the future. This will also remove pygments which is
 Python dependent

---
 _config.yml                                    |  8 ++++----
 _posts/2015-12-18-week-3-dec-2015-updates.md   |  6 +++---
 _posts/2015-12-19-bagaimana-aws-bermula.md     |  6 +++---
 _posts/2016-01-05-daily-git-commands.md        |  2 +-
 _posts/2016-01-10-telegram-generasi-bot.md     | 10 +++++-----
 _posts/2016-01-14-github-notes-lack-search.md  |  4 ++--
 _posts/2016-01-28-git-merge-unrelated-repos.md |  2 +-
 7 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/_config.yml b/_config.yml
index aaf9abce174c9..faacaf81514b5 100644
--- a/_config.yml
+++ b/_config.yml
@@ -54,13 +54,13 @@ baseurl: ""
 # !! You don't need to change any of the configuration flags below !!
 #
 
-markdown: redcarpet
-highlighter: pygments
+markdown: kramdown
 permalink: /:title/
 markdown_ext:  markdown,mkdown,mkdn,mkd,md
 
-redcarpet:
-  extensions: ["tables", "autolink", "strikethrough", "space_after_headers", "with_toc_data", "fenced_code_blocks"]
+kramdown:
+  input: GFM
+  syntax_highlighter: rouge
 
 # The release of Jekyll Now that you're using
 version: v1.1.0
diff --git a/_posts/2015-12-18-week-3-dec-2015-updates.md b/_posts/2015-12-18-week-3-dec-2015-updates.md
index 9d963d84a4a97..78af343aac98d 100644
--- a/_posts/2015-12-18-week-3-dec-2015-updates.md
+++ b/_posts/2015-12-18-week-3-dec-2015-updates.md
@@ -24,9 +24,9 @@ Hello, this is the first series of updates on software development that we hope
 
 Here some interesting products or services we found this week:-
 
-1. List of VPS providers in Japan - https://romanrm.net/vps/japan.
-2. An easy way to build website - http://kedaiweb.site/.
-3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - http://instaweb.my/.
+1. List of VPS providers in Japan - [https://romanrm.net/vps/japan](https://romanrm.net/vps/japan).
+2. An easy way to build website - [http://kedaiweb.site/](http://kedaiweb.site/).
+3. Another easy way to build website but this is a bit different, it build your website from your Facebook Page. Quite cool and practical idea I think - [http://instaweb.my/](http://instaweb.my/).
 4. Webfaction (disclosure: my favourite shared hosting) has added [support for PHP7](https://blog.webfaction.com/2015/12/php-7-is-here/) in it's hosting package.
 
 That's all for now. Until we meet again next week. Meanwhile, why not hop to our [Telegram Group](https://telegram.me/joinchat/ACIF0AHECE3dGeOPeqM8zw) for discussion ?
diff --git a/_posts/2015-12-19-bagaimana-aws-bermula.md b/_posts/2015-12-19-bagaimana-aws-bermula.md
index a807ea88baced..cee5fa4309570 100644
--- a/_posts/2015-12-19-bagaimana-aws-bermula.md
+++ b/_posts/2015-12-19-bagaimana-aws-bermula.md
@@ -27,6 +27,6 @@ Antara dapatan menarik daripada kisah ini adalah bagaimana Jeff Bezos memberi pe
 
 Sumber:-
 
-1. http://www.businessinsider.com/amazons-game-changing-cloud-was-built-by-some-guys-in-south-africa-2012-3
-2. http://www.businessinsider.my/benjamin-black-and-amazon-web-services-2014-7/
-3. http://blog.b3k.us/2009/01/25/ec2-origins.html
+1. [http://www.businessinsider.com/amazons-game-changing-cloud-was-built-by-some-guys-in-south-africa-2012-3](http://www.businessinsider.com/amazons-game-changing-cloud-was-built-by-some-guys-in-south-africa-2012-3)
+2. [http://www.businessinsider.my/benjamin-black-and-amazon-web-services-2014-7/](http://www.businessinsider.my/benjamin-black-and-amazon-web-services-2014-7/)
+3. [http://blog.b3k.us/2009/01/25/ec2-origins.html](http://blog.b3k.us/2009/01/25/ec2-origins.html)
diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 0ba0d0ddb465f..7c487c8b17f5b 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -51,7 +51,7 @@ If you are sure you want to delete it, run 'git branch -D 41-messages-too-long'.
 ```
 git log origin/master..master
 ```
-http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in
+[http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in](http://stackoverflow.com/questions/7624790/what-is-the-git-equivalent-of-of-hg-outgoing-hg-out-or-hg-incoming-hg-in)
 
 ### Git add patch
 `git add -p` I think is pretty well known but I've just discovered one of it's very handy option
diff --git a/_posts/2016-01-10-telegram-generasi-bot.md b/_posts/2016-01-10-telegram-generasi-bot.md
index 13c2c1a0c6cd7..f60a13fe0f302 100644
--- a/_posts/2016-01-10-telegram-generasi-bot.md
+++ b/_posts/2016-01-10-telegram-generasi-bot.md
@@ -9,14 +9,14 @@ Ada 2 generasi bot. Generasi awal, yang seperti user biasa - perlukan phone numb
 
 Bot generasi baru menggunakan official [Bot API][api]. Nama dia mesti ada "bot" kat belakang. Tak perlukan phone number. Cuma boleh terima mesej yang dihantar khusus kepadanya - sama ada melalui command seperti `/cari`, `/help` atau pun kalau mention nama dia seperti `@kambingbot` dan sebagainya. Boleh terima semua mesej kalau privacy setting bot itu diubah.
 
-https://github.com/yagop/telegram-bot - bot generasi awal. Based on Lua so in theory boleh run kat windows.
+[https://github.com/yagop/telegram-bot](https://github.com/yagop/telegram-bot) - bot generasi awal. Based on Lua so in theory boleh run kat windows.
 
-https://github.com/yagop/telegram-bot - A Telegram Bot based on plugins
-https://github.com/yukuku/telebot - bot generasi baru, based on Python, run on app engine.
+[https://github.com/yagop/telegram-bot](https://github.com/yagop/telegram-bot) - A Telegram Bot based on plugins
+[https://github.com/yukuku/telebot](https://github.com/yukuku/telebot) - bot generasi baru, based on Python, run on app engine.
 
-https://gist.github.com/k4ml/04867dc17389a1cfba45 - also on python tapi just basic example.
+[https://gist.github.com/k4ml/04867dc17389a1cfba45](https://gist.github.com/k4ml/04867dc17389a1cfba45) - also on python tapi just basic example.
 
-Satu lagi library pilihan saya untuk develop bot adalah https://github.com/python-telegram-bot/python-telegram-bot. Menggunakan library ini, membina bot adalah semudah beberapa baris code seperti di bawah:-
+Satu lagi library pilihan saya untuk develop bot adalah [https://github.com/python-telegram-bot/python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot). Menggunakan library ini, membina bot adalah semudah beberapa baris code seperti di bawah:-
 
 ```python
 from telegram import Updater
diff --git a/_posts/2016-01-14-github-notes-lack-search.md b/_posts/2016-01-14-github-notes-lack-search.md
index 41c3eba0cad84..82fa98647e4e8 100644
--- a/_posts/2016-01-14-github-notes-lack-search.md
+++ b/_posts/2016-01-14-github-notes-lack-search.md
@@ -21,8 +21,8 @@ This [blog post](http://ariya.ofilabs.com/2012/08/github-and-lack-of-searchabili
 ## Triangular Workflow
 This work great so far except for a few hiccups but let's look at what it mean first. This diagram describe it well:-
 
-<img src="https://cloud.githubusercontent.com/assets/1319791/8943755/5dcdcae4-354a-11e5-9f82-915914fad4f7.png"></img>
-Image ref - https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows
+<img src="https://cloud.githubusercontent.com/assets/1319791/8943755/5dcdcae4-354a-11e5-9f82-915914fad4f7.png" />
+Image ref - [https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows](https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows)
 
 Most of our repos only writable by a few developers, which the rest of the team will need to fork and submit their changes through a Pull Request. Few of the hiccups I mentioned just now:-
 
diff --git a/_posts/2016-01-28-git-merge-unrelated-repos.md b/_posts/2016-01-28-git-merge-unrelated-repos.md
index 6cc87de88af37..187d02bc156f3 100644
--- a/_posts/2016-01-28-git-merge-unrelated-repos.md
+++ b/_posts/2016-01-28-git-merge-unrelated-repos.md
@@ -34,4 +34,4 @@ version will be used.
 
 I'd first seen this being used in [Openshift example](https://github.com/openshift/django-example).
 
-Other merge tips from Orchestra project - http://read.cookbook.orchestraplatform.com/installation/sync.html.
+Other merge tips from Orchestra project - [http://read.cookbook.orchestraplatform.com/installation/sync.html](http://read.cookbook.orchestraplatform.com/installation/sync.html).

From dbec180f3187091d7e03bb24f65a49c5324f5896 Mon Sep 17 00:00:00 2001
From: Amree Zaid <mohd.amree@gmail.com>
Date: Thu, 11 Feb 2016 08:57:12 +0800
Subject: [PATCH 134/172] Update link to Markdown format

---
 _posts/2016-01-05-daily-git-commands.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/_posts/2016-01-05-daily-git-commands.md b/_posts/2016-01-05-daily-git-commands.md
index 7c487c8b17f5b..861bb375d2b14 100644
--- a/_posts/2016-01-05-daily-git-commands.md
+++ b/_posts/2016-01-05-daily-git-commands.md
@@ -86,4 +86,5 @@ Discovered this today. I'm on a branch and there's some changes there that I wan
 
 So `git stash -p` is the equivalent of `git add -p` for stashing.
 
-Reference - http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-multiple-files-that-have-changed-with-git
+Reference -
+[http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-multiple-files-that-have-changed-with-git](http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-multiple-files-that-have-changed-with-git)

From f04c722ac84148c68c3f7b06234c1397d8149a67 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Thu, 3 Mar 2016 22:43:11 +0800
Subject: [PATCH 135/172] Fake update to test gitlab-ci.

---
 about.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/about.md b/about.md
index ef36727f7d214..68c3a4ae4723c 100644
--- a/about.md
+++ b/about.md
@@ -7,3 +7,5 @@ permalink: /about/
 We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
 
 Join our Telegram Channel [telegram.me/devkini](https://telegram.me/devkini) or [Twitter](https://twitter.com/devkini) for latest update.
+
+x

From 17f7c7b8d4cb0c705cfe30de6a825bae0c3fe56e Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Fri, 4 Mar 2016 01:29:15 +0800
Subject: [PATCH 136/172] Update about.md

---
 about.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/about.md b/about.md
index 68c3a4ae4723c..ef36727f7d214 100644
--- a/about.md
+++ b/about.md
@@ -7,5 +7,3 @@ permalink: /about/
 We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
 
 Join our Telegram Channel [telegram.me/devkini](https://telegram.me/devkini) or [Twitter](https://twitter.com/devkini) for latest update.
-
-x

From 957d4f74c43958dbae8f119df7d0e591182e5960 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Mar 2016 13:09:55 +0800
Subject: [PATCH 137/172] Link to devkini.xyz

---
 index.html | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/index.html b/index.html
index 5e0cb3ee5773d..ccb536643fcd2 100644
--- a/index.html
+++ b/index.html
@@ -6,13 +6,7 @@
   {% for post in site.posts %}
     <article class="post">
 
-      <h1><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></h1>
-
-      <div class="entry">
-        {{ post.excerpt }}
-      </div>
-
-      <a href="{{ site.baseurl }}{{ post.url }}" class="read-more">Read More</a>
+      <h1>We have moved to <a href="http://devkini.xyz/">devkini.xyz</a></h1>
     </article>
   {% endfor %}
-</div>
\ No newline at end of file
+</div>

From 413f612d6cdd1d1d495a747708814d19eebb2512 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Mar 2016 13:12:40 +0800
Subject: [PATCH 138/172] Update post.html

---
 _layouts/post.html | 30 +-----------------------------
 1 file changed, 1 insertion(+), 29 deletions(-)

diff --git a/_layouts/post.html b/_layouts/post.html
index aac950e538d3e..a3e2461f6b80e 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -3,35 +3,7 @@
 ---
 
 <article class="post">
-  <h1>{{ page.title }}</h1>
-
-  <div class="entry">
-    {{ content }}
-  </div>
-
-  <div class="date">
-    Written on {{ page.date | date: "%B %e, %Y" }}
-    {% if page.author %} by {{ page.author }} {% endif %}
-  </div>
-  
-  <div class="panel">
-    Get latest updates from us by joining our <a href="https://telegram.me/devkini">Telegram Channel</a> - <a href="https://telegram.me/devkini">telegram.me/devkini</a> or follow our <a href="https://twitter.com/devkini">Twitter</a>.
-  </div>
-  
-  <div class="related">
-  <h2>Related Posts</h2>
-  <ul class="related-posts">
-    {% for post in site.related_posts limit:3 %}
-      <li>
-        <h3>
-          <a href="{{ site.baseurl }}{{ post.url }}">
-            {{ post.title }}
-            <small>{{ post.date | date_to_string }}</small>
-          </a>
-        </h3>
-      </li>
-    {% endfor %}
-  </ul>
+  <h1>This post now on <a href="http://devkini.xyz/{{ page.url }}">http://devkini.xy/{{ page.url }}</a></h1>
 </div>
 
   {% include disqus.html %}

From fcd773b1745dc402381906c127e1c68738cb0e08 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Mar 2016 13:13:50 +0800
Subject: [PATCH 139/172] Update index.html

---
 index.html | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/index.html b/index.html
index ccb536643fcd2..92521d83b1def 100644
--- a/index.html
+++ b/index.html
@@ -3,10 +3,7 @@
 ---
 
 <div class="posts">
-  {% for post in site.posts %}
     <article class="post">
-
       <h1>We have moved to <a href="http://devkini.xyz/">devkini.xyz</a></h1>
     </article>
-  {% endfor %}
 </div>

From 944d242a35671c4fa3ca5ddd8974756ec819f9cf Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Mar 2016 13:14:53 +0800
Subject: [PATCH 140/172] Update post.html

---
 _layouts/post.html | 2 --
 1 file changed, 2 deletions(-)

diff --git a/_layouts/post.html b/_layouts/post.html
index a3e2461f6b80e..6c8d86fcb6f6f 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -5,6 +5,4 @@
 <article class="post">
   <h1>This post now on <a href="http://devkini.xyz/{{ page.url }}">http://devkini.xy/{{ page.url }}</a></h1>
 </div>
-
-  {% include disqus.html %}
 </article>

From 7fa915f5d6a4d5eb1b0ebc87b6c035417d8e77a5 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Mar 2016 13:15:55 +0800
Subject: [PATCH 141/172] Update post.html

---
 _layouts/post.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_layouts/post.html b/_layouts/post.html
index 6c8d86fcb6f6f..3ad8bd417c4bb 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -3,6 +3,6 @@
 ---
 
 <article class="post">
-  <h1>This post now on <a href="http://devkini.xyz/{{ page.url }}">http://devkini.xy/{{ page.url }}</a></h1>
+  This post now on <a href="http://devkini.xyz/{{ page.url }}">http://devkini.xy{{ page.url }}</a>
 </div>
 </article>

From f9a5981114b0b4b16ac81c9b85e14e86688a2685 Mon Sep 17 00:00:00 2001
From: k4ml <k4ml@users.noreply.github.com>
Date: Sun, 6 Mar 2016 14:02:04 +0800
Subject: [PATCH 142/172] Update index.html

---
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.html b/index.html
index 92521d83b1def..e1a014e732657 100644
--- a/index.html
+++ b/index.html
@@ -4,6 +4,6 @@
 
 <div class="posts">
     <article class="post">
-      <h1>We have moved to <a href="http://devkini.xyz/">devkini.xyz</a></h1>
+      We have moved to <a href="http://devkini.xyz/">devkini.xyz</a>.
     </article>
 </div>

From 10a6afb49e585b3f2cf5e70a493c8b2dc005ae22 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 07:43:50 +0800
Subject: [PATCH 143/172] Update index.html

---
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.html b/index.html
index e1a014e732657..528b85c417c90 100644
--- a/index.html
+++ b/index.html
@@ -4,6 +4,6 @@
 
 <div class="posts">
     <article class="post">
-      We have moved to <a href="http://devkini.xyz/">devkini.xyz</a>.
+      Welcome.
     </article>
 </div>

From 4457e7aae3732816682042bb7f49f59c3e4b741f Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 07:48:01 +0800
Subject: [PATCH 144/172] Update index.html

---
 index.html | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/index.html b/index.html
index 528b85c417c90..1fe120af5d83c 100644
--- a/index.html
+++ b/index.html
@@ -4,6 +4,8 @@
 
 <div class="posts">
     <article class="post">
-      Welcome.
+      We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
+
+Join our Telegram Channel [telegram.me/devkini](https://telegram.me/devkini) or [Twitter](https://twitter.com/devkini) for latest update.
     </article>
 </div>

From f67e447f00f3e3d76b912eb668924b34590a3d13 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 07:51:39 +0800
Subject: [PATCH 145/172] Update index.html

---
 index.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/index.html b/index.html
index 1fe120af5d83c..4239392af3a00 100644
--- a/index.html
+++ b/index.html
@@ -4,8 +4,8 @@
 
 <div class="posts">
     <article class="post">
-      We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group.
+      <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group<p>
 
-Join our Telegram Channel [telegram.me/devkini](https://telegram.me/devkini) or [Twitter](https://twitter.com/devkini) for latest update.
+      <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini]</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
     </article>
 </div>

From 2813afbfd18908e9f7354877c71be2f583c9ece8 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 07:52:25 +0800
Subject: [PATCH 146/172] Update index.html

---
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.html b/index.html
index 4239392af3a00..37b99066155a3 100644
--- a/index.html
+++ b/index.html
@@ -6,6 +6,6 @@
     <article class="post">
       <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group<p>
 
-      <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini]</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
+      <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
     </article>
 </div>

From d1810819251b0e9f4823826b333dd61cfa3e2d5d Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 07:53:44 +0800
Subject: [PATCH 147/172] Update default.html

---
 _layouts/default.html | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/_layouts/default.html b/_layouts/default.html
index 27ccf7f96b859..3fa2211d7d338 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -28,8 +28,7 @@ <h1 class="site-name"><a href="{{ site.baseurl }}/">{{ site.name }}</a></h1>
           </div>
 
           <nav>
-            <a href="{{ site.baseurl }}/">Blog</a>
-            <a href="{{ site.baseurl }}/about">About</a>
+          
           </nav>
         </header>
       </div>

From ffec451ac075cd99da1d0f0ae0156e4e3d6fd396 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 07:55:57 +0800
Subject: [PATCH 148/172] Update index.html

---
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.html b/index.html
index 37b99066155a3..66ad8d89cd240 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
 
 <div class="posts">
     <article class="post">
-      <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group<p>
+      <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).<p>
 
       <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
     </article>

From f109a9daa73edabdac73241784fde76e6f5cae1f Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 08:19:23 +0800
Subject: [PATCH 149/172] Update index.html

---
 index.html | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/index.html b/index.html
index 66ad8d89cd240..f7a3ad0d185cf 100644
--- a/index.html
+++ b/index.html
@@ -7,5 +7,11 @@
       <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).<p>
 
       <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
+        
+        <p>Subscribe to our weekly summary</p>
+    
+    <form style="border:1px solid #ccc;padding:3px;text-align:center;" action="https://tinyletter.com/devkini" method="post" target="popupwindow" onsubmit="window.open('https://tinyletter.com/devkini', 'popupwindow', 'scrollbars=yes,width=800,height=600');return true"><p><label for="tlemail">Enter your email address</label></p><p><input type="text" style="width:140px" name="email" id="tlemail" /></p><input type="hidden" value="1" name="embed"/><input type="submit" value="Subscribe" /><p><a href="https://tinyletter.com" target="_blank">powered by TinyLetter</a></p></form>
+        
     </article>
+         
 </div>

From ddeea67b2ffc378ada3bec1957435b06311e7d8c Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 15 Jul 2017 08:20:26 +0800
Subject: [PATCH 150/172] Update index.html

---
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.html b/index.html
index f7a3ad0d185cf..80f3a9e1f1e69 100644
--- a/index.html
+++ b/index.html
@@ -8,7 +8,7 @@
 
       <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
         
-        <p>Subscribe to our weekly summary</p>
+        <p>Or subscribe to our weekly summary:-</p>
     
     <form style="border:1px solid #ccc;padding:3px;text-align:center;" action="https://tinyletter.com/devkini" method="post" target="popupwindow" onsubmit="window.open('https://tinyletter.com/devkini', 'popupwindow', 'scrollbars=yes,width=800,height=600');return true"><p><label for="tlemail">Enter your email address</label></p><p><input type="text" style="width:140px" name="email" id="tlemail" /></p><input type="hidden" value="1" name="embed"/><input type="submit" value="Subscribe" /><p><a href="https://tinyletter.com" target="_blank">powered by TinyLetter</a></p></form>
         

From 99155564ee15b2b89d55c7b769695dadaeada62a Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Tue, 16 Jan 2018 08:02:23 +0800
Subject: [PATCH 151/172] Update index.html

---
 index.html | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/index.html b/index.html
index 80f3a9e1f1e69..edc4043de73d0 100644
--- a/index.html
+++ b/index.html
@@ -7,11 +7,7 @@
       <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).<p>
 
       <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
-        
-        <p>Or subscribe to our weekly summary:-</p>
-    
-    <form style="border:1px solid #ccc;padding:3px;text-align:center;" action="https://tinyletter.com/devkini" method="post" target="popupwindow" onsubmit="window.open('https://tinyletter.com/devkini', 'popupwindow', 'scrollbars=yes,width=800,height=600');return true"><p><label for="tlemail">Enter your email address</label></p><p><input type="text" style="width:140px" name="email" id="tlemail" /></p><input type="hidden" value="1" name="embed"/><input type="submit" value="Subscribe" /><p><a href="https://tinyletter.com" target="_blank">powered by TinyLetter</a></p></form>
-        
+      <script async src="https://telegram.org/js/telegram-widget.js?1" data-telegram-post="devkini/547" data-width="100%"></script>
     </article>
          
 </div>

From 8ae3b49fa70bd1f83696fcab59678aa885842167 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:28:58 +0800
Subject: [PATCH 152/172] Update index.html

---
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/index.html b/index.html
index edc4043de73d0..3242b157e0a47 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
 
 <div class="posts">
     <article class="post">
-      <p>We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).<p>
+      <p>We are a group of software developers/programmers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).<p>
 
       <p>Join our Telegram Channel <a href="https://telegram.me/devkini">telegram.me/devkini</a> or  Twitter <a href="https://twitter.com/devkini">@devkini</a> for latest update.</p>
       <script async src="https://telegram.org/js/telegram-widget.js?1" data-telegram-post="devkini/547" data-width="100%"></script>

From 2a465caeb1bf6a5185191546b415f3e319aca313 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:35:40 +0800
Subject: [PATCH 153/172] Update meta.html

---
 _includes/meta.html | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/_includes/meta.html b/_includes/meta.html
index b8f4a3308354a..cf2fead283204 100644
--- a/_includes/meta.html
+++ b/_includes/meta.html
@@ -2,6 +2,7 @@
     <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
     <meta http-equiv='X-UA-Compatible' content='IE=edge'>
     <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'>
+    <meta name="twitter:card" content="summary">We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).</meta>
 
     {% if page.excerpt %}
     <meta name="description" content="{{ page.excerpt| strip_html }}" />
@@ -15,4 +16,4 @@
     {% if page.title %}
     <meta property="og:title" content="{{ page.title }}" />
     <meta property="twitter:title" content="{{ page.title }}" />
-    {% endif %}
\ No newline at end of file
+    {% endif %}

From fe06735e2965ed5068f5940fccc584702cfa1aa1 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:38:32 +0800
Subject: [PATCH 154/172] Update meta.html

---
 _includes/meta.html | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/_includes/meta.html b/_includes/meta.html
index cf2fead283204..8c84a11915077 100644
--- a/_includes/meta.html
+++ b/_includes/meta.html
@@ -2,8 +2,7 @@
     <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
     <meta http-equiv='X-UA-Compatible' content='IE=edge'>
     <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'>
-    <meta name="twitter:card" content="summary">We are a group of software developers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite).</meta>
-
+    <meta name="twitter:card" content="summary"></meta>
     {% if page.excerpt %}
     <meta name="description" content="{{ page.excerpt| strip_html }}" />
     <meta property="og:description" content="{{ page.excerpt| strip_html }}" />

From 7be9b26909b9bdbfc67acbf48a76e2c28add7c08 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:42:16 +0800
Subject: [PATCH 155/172] Update meta.html

---
 _includes/meta.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_includes/meta.html b/_includes/meta.html
index 8c84a11915077..83bd1d0db4a84 100644
--- a/_includes/meta.html
+++ b/_includes/meta.html
@@ -2,7 +2,7 @@
     <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
     <meta http-equiv='X-UA-Compatible' content='IE=edge'>
     <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'>
-    <meta name="twitter:card" content="summary"></meta>
+    <meta name="twitter:card" content="summary" />
     {% if page.excerpt %}
     <meta name="description" content="{{ page.excerpt| strip_html }}" />
     <meta property="og:description" content="{{ page.excerpt| strip_html }}" />

From a5f4cea981c297faddff42afbc4821561bdde365 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:46:22 +0800
Subject: [PATCH 156/172] Update meta.html

---
 _includes/meta.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_includes/meta.html b/_includes/meta.html
index 83bd1d0db4a84..b415fe6e3eebf 100644
--- a/_includes/meta.html
+++ b/_includes/meta.html
@@ -3,6 +3,7 @@
     <meta http-equiv='X-UA-Compatible' content='IE=edge'>
     <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'>
     <meta name="twitter:card" content="summary" />
+    <meta name="twitter:description" content="We are a group of software developers/programmers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite)." />
     {% if page.excerpt %}
     <meta name="description" content="{{ page.excerpt| strip_html }}" />
     <meta property="og:description" content="{{ page.excerpt| strip_html }}" />

From a027542f2538540887ce3a123d6e59b38a01e0ed Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:48:39 +0800
Subject: [PATCH 157/172] Update meta.html

---
 _includes/meta.html | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/_includes/meta.html b/_includes/meta.html
index b415fe6e3eebf..b3d70c25e2f50 100644
--- a/_includes/meta.html
+++ b/_includes/meta.html
@@ -4,6 +4,9 @@
     <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'>
     <meta name="twitter:card" content="summary" />
     <meta name="twitter:description" content="We are a group of software developers/programmers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite)." />
+    <meta name="twitter:title" content="DevKini" />
+    <meta name="twitter:site" content="@devkini" />
+
     {% if page.excerpt %}
     <meta name="description" content="{{ page.excerpt| strip_html }}" />
     <meta property="og:description" content="{{ page.excerpt| strip_html }}" />

From 762616b234b8990d091d81a8c1c2516eb48376d7 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 29 Dec 2018 18:50:24 +0800
Subject: [PATCH 158/172] Update meta.html

---
 _includes/meta.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_includes/meta.html b/_includes/meta.html
index b3d70c25e2f50..a3074def50731 100644
--- a/_includes/meta.html
+++ b/_includes/meta.html
@@ -6,6 +6,7 @@
     <meta name="twitter:description" content="We are a group of software developers/programmers in Malaysia. Most of the time, we do discussion in a Telegram group (contact @k4ml for invite)." />
     <meta name="twitter:title" content="DevKini" />
     <meta name="twitter:site" content="@devkini" />
+    <meta name="twitter:image" content="http://i.imgur.com/wxhzSUi.jpg" />
 
     {% if page.excerpt %}
     <meta name="description" content="{{ page.excerpt| strip_html }}" />

From 804627cf23591290bd1e0f5e18129c954a1741d2 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 18:52:17 +0800
Subject: [PATCH 159/172] Update index.html

---
 index.html | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/index.html b/index.html
index 3242b157e0a47..fa3c79e8a9386 100644
--- a/index.html
+++ b/index.html
@@ -11,3 +11,10 @@
     </article>
          
 </div>
+
+<div class="posts">
+    <h2>Recent posts</h2>
+  {% for post in site.posts limit:2 %}
+    <h3><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></h3>
+  {% endfor %}
+</div>

From 176d0763560d1bdac566c084deb5af1fa2b95038 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 18:56:16 +0800
Subject: [PATCH 160/172] Create 2019-01-03-discussion-notes-jan.md

---
 _posts/2019-01-03-discussion-notes-jan.md | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 _posts/2019-01-03-discussion-notes-jan.md

diff --git a/_posts/2019-01-03-discussion-notes-jan.md b/_posts/2019-01-03-discussion-notes-jan.md
new file mode 100644
index 0000000000000..06aa330241571
--- /dev/null
+++ b/_posts/2019-01-03-discussion-notes-jan.md
@@ -0,0 +1,8 @@
+---
+layout: post
+title: "Discussion notes - January"
+author: kamal
+tags: notes
+---
+
+Push Notifications.

From bd696758e667d24e25c97b49fba646e00a2920cc Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 18:59:38 +0800
Subject: [PATCH 161/172] Update post.html

---
 _layouts/post.html | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/_layouts/post.html b/_layouts/post.html
index 3ad8bd417c4bb..d27c48066a71e 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -3,6 +3,15 @@
 ---
 
 <article class="post">
-  This post now on <a href="http://devkini.xyz/{{ page.url }}">http://devkini.xy{{ page.url }}</a>
-</div>
+  <h1>{{ page.title }}</h1>
+
+  <div class="entry">
+    {{ content }}
+  </div>
+
+  <div class="date">
+    Written on {{ page.date | date: "%B %e, %Y" }}
+  </div>
+
+  {% include disqus.html %}
 </article>

From dbed8a9df47c864e545a35ae892d4bcfb67c437f Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 19:01:18 +0800
Subject: [PATCH 162/172] Rename 2019-01-03-discussion-notes-jan.md to
 2019-01-03-discussion-notes-jan-2019.md

---
 ...ssion-notes-jan.md => 2019-01-03-discussion-notes-jan-2019.md} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename _posts/{2019-01-03-discussion-notes-jan.md => 2019-01-03-discussion-notes-jan-2019.md} (100%)

diff --git a/_posts/2019-01-03-discussion-notes-jan.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
similarity index 100%
rename from _posts/2019-01-03-discussion-notes-jan.md
rename to _posts/2019-01-03-discussion-notes-jan-2019.md

From c78f8359787720b3b6bad46fb5ffea1bc710751c Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 19:20:06 +0800
Subject: [PATCH 163/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 .../2019-01-03-discussion-notes-jan-2019.md   | 238 +++++++++++++++++-
 1 file changed, 236 insertions(+), 2 deletions(-)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index 06aa330241571..8448999db2795 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -1,8 +1,242 @@
 ---
 layout: post
-title: "Discussion notes - January"
+title: "Discussion notes - January 2019"
 author: kamal
 tags: notes
 ---
 
-Push Notifications.
+## Push Notifications.
+
+```
+haj, [02.01.19 13:50]
+Firebase push notification has been very slow for me
+
+haj, [02.01.19 13:50]
+Anyone using a different push notification service thatโ€™s more reliable?
+
+as, [02.01.19 14:01]
+@tw is a fan of OneSignal
+
+haj, [02.01.19 14:05]
+Apparently one signal now uses firebase as the base
+
+haj, [02.01.19 14:05]
+Thus we abandoned switching over to one signal
+
+haj, [02.01.19 14:06]
+I started a telegram group called xxx. Got one suggesting amazon sns
+
+k, [02.01.19 14:13]
+sns I think still depend on gcm to deliver the message.
+
+haj, [02.01.19 14:14]
+Gcm is the basic I think
+
+mraar, [02.01.19 14:34]
+[In reply to haj]
+How slow is slow
+
+haj, [02.01.19 14:45]
+[In reply to mraar]
+20 mins
+
+haj, [02.01.19 14:45]
+To send to one device
+
+haj, [02.01.19 14:45]
+But itโ€™s ridiculously too long
+
+hca, [02.01.19 15:09]
+You know GCM is deprecated in favour of firebase now?
+
+hca, [02.01.19 15:10]
+You want FCM. Firebase Cloud Messaging.
+
+hca, [02.01.19 15:10]
+Tricky because "Firebase" is now a brand that they've been applying to different things that used to be called different things, argh.
+
+hca, [02.01.19 15:13]
+[In reply to haj]
+He/she doesn't know what he/she is talking about, ignore. SNS is just the server to server stuff. When you want notification to rehca mobile, it still needs GCM (deprecated? renamed to FCM?) et al.
+
+https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-application-as-subscriber.html
+
+hca, [02.01.19 15:13]
+Note: @hca also doesn't know what he's talking about. Please do due diligence.
+
+haj, [02.01.19 15:24]
+Lol
+
+hca, [02.01.19 15:48]
+I just checked. At least a client for Telegram on android also uses Firebase to receive (some) notifications. https://github.com/TelegramOrg/Telegram-Android/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/GcmPushListenerService.java
+
+hca, [02.01.19 15:49]
+https://github.com/TelegramOrg/Telegram-Android/blob/master/TMessagesProj/build.gradle#L17
+
+hca, [02.01.19 15:50]
+tl/dr: If it took that long for your messages to arrive via Firebase, either Firebase, or the way you use it is suboptimal.
+
+haj, [02.01.19 15:51]
+we're writing in RN
+
+hca, [02.01.19 15:51]
+Your bridge sucks, then? ๐Ÿ˜›
+
+hca, [02.01.19 15:52]
+Sorry, dunno. I've not dived in that deep into RN. ๐Ÿ˜…
+
+hca, [02.01.19 15:54]
+From what I experienced, we had stupid random issues with cheaper non standard phones doing nasty aggressive throttling and sleeping and unloading from memory.
+
+hca, [02.01.19 15:55]
+The flagships mostly just works. It's the damn budget Chinese brands that causes random issues. Including some crappy misreported GPS accuracy.
+
+hca, [02.01.19 16:00]
+[In reply to haj]
+All devices takes forever, or just this one device? I suggest using telegram/whatsapp to spam, to see if it had same issue. Might be related to network, or phone slept too much. Or damn phone whitelisted whatsapp/telegram/wechat to higher priority.
+
+tw, [02.01.19 16:08]
+[In reply to hca]
+This. GCM == FCM right? Not the whole service, just the push notification server. Like APNS for iOS devices
+
+hca, [02.01.19 16:10]
+I think GCM just got renamed to FCM, and slowly having the API and accounting streamlined under the Firebase umbrella. Much like how Crashlytics -> Fabric -> Firebase. https://get.fabric.io/roadmap
+
+tw, [02.01.19 16:11]
+[In reply to haj]
+Any link to refer to?
+
+tw, [02.01.19 16:13]
+I am using OneSignal for different apps. Most notifications received within <1 sec. If you're saying OneSignal is using Firebase, then it doesn't make sense that OneSignal is sending the push faster than Firebase that you're using
+
+And this is server side integration. I don't think RN makes any difference, no?
+
+tw, [02.01.19 16:15]
+Funny thing is, I'm thinking to migrate to Firebase since it's a lot easier to manage all Google products. You are probably the first one that's complaining their push is slow/problematic. Might impact our decision if it's true
+
+fm, [02.01.19 16:22]
+[In reply to hca]
+yeah. this
+
+fm, [02.01.19 16:26]
+sometimes the device may affect the push notifications. power mode, connection, etc
+
+haj, [02.01.19 19:07]
+[In reply to tw]
+https://documentation.onesignal.com/docs/generate-a-google-server-api-key
+
+haj, [02.01.19 19:08]
+[In reply to hca]
+fk. most of the phones we deploy are on china brands like huawei.
+
+haj, [02.01.19 19:09]
+oh wait. we have samsung too.
+
+tw, [02.01.19 19:09]
+[In reply to haj]
+That's like generating APNS for Apple. It's the same with GCM
+
+tw, [02.01.19 19:11]
+China phones have problems with push notifications. But most of the time it's not delayed. Just that you won't get any notification until you set the phone config right
+
+k, [02.01.19 19:12]
+This one is using mqtt. https://pushy.me/
+
+k, [02.01.19 19:12]
+facebook messenger also using mqtt.
+
+hca, [02.01.19 19:14]
+[In reply to k]
+Server to server, not to mobile. The only way is to piggy back FCM for Android.
+
+hca, [02.01.19 19:15]
+Facebook messenger uses mqtt for messages, not for waking up. The FCM triggers a wake and it can show you some basic snippets, but telegram and mqtt and other stuff gets invoked *after* the trigger.
+
+hca, [02.01.19 19:15]
+Can't tell directly for Facebook Messenger, just a guess. Lemme check how Telegram does it.
+
+k, [02.01.19 19:15]
+the diagram show it using mqtt for android, and apns for ios.
+
+hca, [02.01.19 19:16]
+Dunno, just try it, I suppose.
+
+hca, [02.01.19 19:16]
+Note that Android 8.0 Oreo changes a number of stuff that broke a lot of old ways of doing alternate push notifications.
+
+tw, [02.01.19 19:19]
+Lots of ways to do it in Android apparently. Just create custom service, no need FCM if you don't want to. But feels kinda risky. Most apps are using it, and they're still problematic. I imagine it's harder if you choose the lesser choices
+
+tw, [02.01.19 19:19]
+Or you know
+
+tw, [02.01.19 19:19]
+https://www.uber.com/en-ZA/drive/resources/approved-devices/
+
+hca, [02.01.19 19:20]
+Yup. https://pushy.me/docs/android/modify-androidmanifest WAKE_LOCK. No wonder Android drains more battery.
+
+hca, [02.01.19 19:20]
+Sorry, Facebook Messenger on Android. ๐Ÿ˜›
+
+k, [02.01.19 19:25]
+[In reply to hca]
+what this mean?
+
+jy, [02.01.19 19:25]
+Insomnia
+
+hca, [02.01.19 19:25]
+It can prevent the phone from going to sleep/low power mode. https://developer.android.com/training/scheduling/wakelock
+
+hca, [02.01.19 19:28]
+The cheap chinese phones, I suspect hacked the Android stuff to force more aggressive sleeping regardless of the permissions asked by the apps, hence spotty performance.
+
+I *suspected* some slow network + slow phone + aggressive sleeping caused some of the issues we saw on our android app. Can be handled, but those sort of things statistically more commonly occured for slower phones. Circumstantial evidence.
+
+k, [02.01.19 19:29]
+[In reply to hca]
+[ Photo ]
+will this override that?
+
+hca, [02.01.19 19:31]
+Yup, but "but some features e.g. push notifications" may be affected. See pattern?
+
+hca, [02.01.19 19:33]
+tl/dr: For push notifications to work, either way via PlayStore's FCM or another method, at least one or two background service needs to be running and waking up and check the network.
+
+Google pushing for FCM means only Google's background service needs to be running for more than one app needing server push notifications.
+
+(From what I know)
+
+hca, [02.01.19 19:35]
+Some of the newer battery optimizations on android (ios as well?) is for the OS to bunch the wakeups from sleep so it gets more apps and work done before going back to sleep. Individual apps waking up in different intervals drains more battery.
+
+hca, [02.01.19 19:36]
+This is related to what I know. https://tamingthedroid.com/battery-optimization-doze-mode Things may have been changed and tweaked in later years.
+
+tw, [02.01.19 19:39]
+[In reply to hca]
+Not really. Even with FCM, you still need to allow the background activity for the apps that you installed. *Depends* on manufacturer as well. China phones need that. Other phones I didn't check, but if we don't receive any notification, that's one of the usual culprit regardless of which provider you're using
+
+hca, [02.01.19 19:40]
+Yup, listen to tw.
+
+tw, [02.01.19 19:43]
+Wish there's an easy way to help, but push notification is tricky. Harder with Android fragmentation. Cross-patlform might make it worse too? Haha
+
+Back to the original question. I'm using OneSignal with no big problems so far for the last 2 years
+
+hca, [02.01.19 19:46]
+[In reply to tw]
+Does it use FCM as the transport mechanism for Android?
+
+hca, [02.01.19 19:46]
+Yes: https://documentation.onesignal.com/docs/android-sdk-setup
+
+haj, [02.01.19 19:47]
+Thanks
+
+hca, [02.01.19 19:48]
+Heh, just avoid cheap chinese phones. ๐Ÿ˜›
+```

From feee350ba34d0cd1ef25694a0669be8f50e5c950 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 19:20:44 +0800
Subject: [PATCH 164/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 _posts/2019-01-03-discussion-notes-jan-2019.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index 8448999db2795..f73052e9afa2e 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -6,6 +6,7 @@ tags: notes
 ---
 
 ## Push Notifications.
+Raw discussion logs, with names redacted to protect the innocent.
 
 ```
 haj, [02.01.19 13:50]

From d93f6a4f8d64884e9d4cca584d79b695e14dc630 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 19:21:16 +0800
Subject: [PATCH 165/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 _posts/2019-01-03-discussion-notes-jan-2019.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index f73052e9afa2e..fc382d0ff2a3c 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -5,9 +5,9 @@ author: kamal
 tags: notes
 ---
 
-## Push Notifications.
 Raw discussion logs, with names redacted to protect the innocent.
 
+## Push Notifications.
 ```
 haj, [02.01.19 13:50]
 Firebase push notification has been very slow for me

From 0e0807409c6225de548bd46d7d5d9c5a6e8976bc Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 19:23:30 +0800
Subject: [PATCH 166/172] Update custom.css

---
 custom.css | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/custom.css b/custom.css
index 69671902f2c84..78abcdbf37655 100644
--- a/custom.css
+++ b/custom.css
@@ -10,3 +10,7 @@
   margin-top: 5px;
   text-align: center;
 }
+
+pre {
+  white-space: pre-wrap;
+}

From 88e3d3746bac74c1e6d6df7f9cfc2d0a6bf5f060 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Thu, 3 Jan 2019 20:13:36 +0800
Subject: [PATCH 167/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 .../2019-01-03-discussion-notes-jan-2019.md   | 227 +-----------------
 1 file changed, 7 insertions(+), 220 deletions(-)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index fc382d0ff2a3c..fa0d3f149d584 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -5,239 +5,26 @@ author: kamal
 tags: notes
 ---
 
-Raw discussion logs, with names redacted to protect the innocent.
+Some notes from discussion in Telegram group.
 
 ## Push Notifications.
-```
-haj, [02.01.19 13:50]
-Firebase push notification has been very slow for me
+Problem: Firebase push notification has been very slow, looking for alternative.
+OneSignal - Apparently one signal now uses firebase as the base.
+SNS - still using GCM/FCM to deliver messages.
 
-haj, [02.01.19 13:50]
-Anyone using a different push notification service thatโ€™s more reliable?
-
-as, [02.01.19 14:01]
-@tw is a fan of OneSignal
-
-haj, [02.01.19 14:05]
-Apparently one signal now uses firebase as the base
-
-haj, [02.01.19 14:05]
-Thus we abandoned switching over to one signal
-
-haj, [02.01.19 14:06]
-I started a telegram group called xxx. Got one suggesting amazon sns
-
-k, [02.01.19 14:13]
-sns I think still depend on gcm to deliver the message.
-
-haj, [02.01.19 14:14]
-Gcm is the basic I think
-
-mraar, [02.01.19 14:34]
-[In reply to haj]
-How slow is slow
-
-haj, [02.01.19 14:45]
-[In reply to mraar]
-20 mins
-
-haj, [02.01.19 14:45]
-To send to one device
-
-haj, [02.01.19 14:45]
-But itโ€™s ridiculously too long
-
-hca, [02.01.19 15:09]
-You know GCM is deprecated in favour of firebase now?
-
-hca, [02.01.19 15:10]
-You want FCM. Firebase Cloud Messaging.
-
-hca, [02.01.19 15:10]
-Tricky because "Firebase" is now a brand that they've been applying to different things that used to be called different things, argh.
-
-hca, [02.01.19 15:13]
-[In reply to haj]
-He/she doesn't know what he/she is talking about, ignore. SNS is just the server to server stuff. When you want notification to rehca mobile, it still needs GCM (deprecated? renamed to FCM?) et al.
-
-https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-application-as-subscriber.html
-
-hca, [02.01.19 15:13]
-Note: @hca also doesn't know what he's talking about. Please do due diligence.
-
-haj, [02.01.19 15:24]
-Lol
-
-hca, [02.01.19 15:48]
 I just checked. At least a client for Telegram on android also uses Firebase to receive (some) notifications. https://github.com/TelegramOrg/Telegram-Android/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/GcmPushListenerService.java
-
-hca, [02.01.19 15:49]
 https://github.com/TelegramOrg/Telegram-Android/blob/master/TMessagesProj/build.gradle#L17
 
-hca, [02.01.19 15:50]
-tl/dr: If it took that long for your messages to arrive via Firebase, either Firebase, or the way you use it is suboptimal.
-
-haj, [02.01.19 15:51]
-we're writing in RN
-
-hca, [02.01.19 15:51]
-Your bridge sucks, then? ๐Ÿ˜›
-
-hca, [02.01.19 15:52]
-Sorry, dunno. I've not dived in that deep into RN. ๐Ÿ˜…
-
-hca, [02.01.19 15:54]
-From what I experienced, we had stupid random issues with cheaper non standard phones doing nasty aggressive throttling and sleeping and unloading from memory.
-
-hca, [02.01.19 15:55]
-The flagships mostly just works. It's the damn budget Chinese brands that causes random issues. Including some crappy misreported GPS accuracy.
-
-hca, [02.01.19 16:00]
-[In reply to haj]
-All devices takes forever, or just this one device? I suggest using telegram/whatsapp to spam, to see if it had same issue. Might be related to network, or phone slept too much. Or damn phone whitelisted whatsapp/telegram/wechat to higher priority.
-
-tw, [02.01.19 16:08]
-[In reply to hca]
-This. GCM == FCM right? Not the whole service, just the push notification server. Like APNS for iOS devices
-
-hca, [02.01.19 16:10]
-I think GCM just got renamed to FCM, and slowly having the API and accounting streamlined under the Firebase umbrella. Much like how Crashlytics -> Fabric -> Firebase. https://get.fabric.io/roadmap
-
-tw, [02.01.19 16:11]
-[In reply to haj]
-Any link to refer to?
-
-tw, [02.01.19 16:13]
-I am using OneSignal for different apps. Most notifications received within <1 sec. If you're saying OneSignal is using Firebase, then it doesn't make sense that OneSignal is sending the push faster than Firebase that you're using
-
-And this is server side integration. I don't think RN makes any difference, no?
-
-tw, [02.01.19 16:15]
-Funny thing is, I'm thinking to migrate to Firebase since it's a lot easier to manage all Google products. You are probably the first one that's complaining their push is slow/problematic. Might impact our decision if it's true
-
-fm, [02.01.19 16:22]
-[In reply to hca]
-yeah. this
-
-fm, [02.01.19 16:26]
-sometimes the device may affect the push notifications. power mode, connection, etc
+Had stupid random issues with cheaper non standard phones doing nasty aggressive throttling and sleeping and unloading from memory.
 
-haj, [02.01.19 19:07]
-[In reply to tw]
-https://documentation.onesignal.com/docs/generate-a-google-server-api-key
+China phones have problems with push notifications. But most of the time it's not delayed. Just that you won't get any notification until you set the phone config right.
 
-haj, [02.01.19 19:08]
-[In reply to hca]
-fk. most of the phones we deploy are on china brands like huawei.
+https://pushy.me/ - using mqtt. https://pushy.me/docs/android/modify-androidmanifest WAKE_LOCK. No wonder Android drains more battery. It can prevent the phone from going to sleep/low power mode. https://developer.android.com/training/scheduling/wakelock
 
-haj, [02.01.19 19:09]
-oh wait. we have samsung too.
-
-tw, [02.01.19 19:09]
-[In reply to haj]
-That's like generating APNS for Apple. It's the same with GCM
-
-tw, [02.01.19 19:11]
-China phones have problems with push notifications. But most of the time it's not delayed. Just that you won't get any notification until you set the phone config right
-
-k, [02.01.19 19:12]
-This one is using mqtt. https://pushy.me/
-
-k, [02.01.19 19:12]
-facebook messenger also using mqtt.
-
-hca, [02.01.19 19:14]
-[In reply to k]
-Server to server, not to mobile. The only way is to piggy back FCM for Android.
-
-hca, [02.01.19 19:15]
 Facebook messenger uses mqtt for messages, not for waking up. The FCM triggers a wake and it can show you some basic snippets, but telegram and mqtt and other stuff gets invoked *after* the trigger.
 
-hca, [02.01.19 19:15]
-Can't tell directly for Facebook Messenger, just a guess. Lemme check how Telegram does it.
-
-k, [02.01.19 19:15]
-the diagram show it using mqtt for android, and apns for ios.
-
-hca, [02.01.19 19:16]
-Dunno, just try it, I suppose.
-
-hca, [02.01.19 19:16]
-Note that Android 8.0 Oreo changes a number of stuff that broke a lot of old ways of doing alternate push notifications.
-
-tw, [02.01.19 19:19]
-Lots of ways to do it in Android apparently. Just create custom service, no need FCM if you don't want to. But feels kinda risky. Most apps are using it, and they're still problematic. I imagine it's harder if you choose the lesser choices
-
-tw, [02.01.19 19:19]
-Or you know
-
-tw, [02.01.19 19:19]
-https://www.uber.com/en-ZA/drive/resources/approved-devices/
-
-hca, [02.01.19 19:20]
-Yup. https://pushy.me/docs/android/modify-androidmanifest WAKE_LOCK. No wonder Android drains more battery.
-
-hca, [02.01.19 19:20]
-Sorry, Facebook Messenger on Android. ๐Ÿ˜›
-
-k, [02.01.19 19:25]
-[In reply to hca]
-what this mean?
-
-jy, [02.01.19 19:25]
-Insomnia
-
-hca, [02.01.19 19:25]
-It can prevent the phone from going to sleep/low power mode. https://developer.android.com/training/scheduling/wakelock
-
-hca, [02.01.19 19:28]
-The cheap chinese phones, I suspect hacked the Android stuff to force more aggressive sleeping regardless of the permissions asked by the apps, hence spotty performance.
-
-I *suspected* some slow network + slow phone + aggressive sleeping caused some of the issues we saw on our android app. Can be handled, but those sort of things statistically more commonly occured for slower phones. Circumstantial evidence.
-
-k, [02.01.19 19:29]
-[In reply to hca]
-[ Photo ]
-will this override that?
-
-hca, [02.01.19 19:31]
-Yup, but "but some features e.g. push notifications" may be affected. See pattern?
-
-hca, [02.01.19 19:33]
-tl/dr: For push notifications to work, either way via PlayStore's FCM or another method, at least one or two background service needs to be running and waking up and check the network.
-
-Google pushing for FCM means only Google's background service needs to be running for more than one app needing server push notifications.
-
-(From what I know)
-
-hca, [02.01.19 19:35]
 Some of the newer battery optimizations on android (ios as well?) is for the OS to bunch the wakeups from sleep so it gets more apps and work done before going back to sleep. Individual apps waking up in different intervals drains more battery.
 
-hca, [02.01.19 19:36]
 This is related to what I know. https://tamingthedroid.com/battery-optimization-doze-mode Things may have been changed and tweaked in later years.
 
-tw, [02.01.19 19:39]
-[In reply to hca]
 Not really. Even with FCM, you still need to allow the background activity for the apps that you installed. *Depends* on manufacturer as well. China phones need that. Other phones I didn't check, but if we don't receive any notification, that's one of the usual culprit regardless of which provider you're using
-
-hca, [02.01.19 19:40]
-Yup, listen to tw.
-
-tw, [02.01.19 19:43]
-Wish there's an easy way to help, but push notification is tricky. Harder with Android fragmentation. Cross-patlform might make it worse too? Haha
-
-Back to the original question. I'm using OneSignal with no big problems so far for the last 2 years
-
-hca, [02.01.19 19:46]
-[In reply to tw]
-Does it use FCM as the transport mechanism for Android?
-
-hca, [02.01.19 19:46]
-Yes: https://documentation.onesignal.com/docs/android-sdk-setup
-
-haj, [02.01.19 19:47]
-Thanks
-
-hca, [02.01.19 19:48]
-Heh, just avoid cheap chinese phones. ๐Ÿ˜›
-```

From 573cab2a3219f448258e57468161f418788e1502 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Fri, 11 Jan 2019 12:00:17 +0800
Subject: [PATCH 168/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 .../2019-01-03-discussion-notes-jan-2019.md   | 50 +++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index fa0d3f149d584..63e057f46383b 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -28,3 +28,53 @@ Some of the newer battery optimizations on android (ios as well?) is for the OS
 This is related to what I know. https://tamingthedroid.com/battery-optimization-doze-mode Things may have been changed and tweaked in later years.
 
 Not really. Even with FCM, you still need to allow the background activity for the apps that you installed. *Depends* on manufacturer as well. China phones need that. Other phones I didn't check, but if we don't receive any notification, that's one of the usual culprit regardless of which provider you're using
+
+## Notes taking tools
+
+I think I found Bear's replacement. Will try tomorrow:
+https://news.ycombinator.com/item?id=18840990
+https://github.com/zadam/trilium
+
+Major flaws with Bear:
+- no password
+- not cross platform 
+- limited to only markdown 
+- veeery limited customization
+
+I've been using Quiver for a while now.
+Can you display the notes in tree-hierarchy? Can it protect some notes with password? Can you do diagrams? Those 3 are the most interesting I find with Trilium
+1. can't. 
+2. can't. 
+3. kind of. There's https://github.com/HappenApps/Quiver/wiki/Getting-Started#diagram-cell
+I like it mostly because it's fast and native ๐Ÿ˜›
+
+I recommend OneNote.
+there's this one
+https://github.com/glushchenko/fsnotes
+
+[In reply to AS]
+Bear is too simple (probably too much), but that's their goal. Up to the users whether they can accept it or not. I switched to Notion for a while, but return to Bear for the simplicity.
+
+Bear + Alfred = Too good
+
+Just use orgmode.
+[Forwarded from HH]
+๐Ÿ™‹๐Ÿฝโ€โ™‚๏ธ
+Guna pure vim (no plugin) untuk lbih kurang setahun, kemudian berhijrah ke spacemacs (emacs + vim keybinding).
+Emacsโ€™ Org-mode is addictive.
+
+Keybinding vim ni, once dah master, memang tak nak tukar. Editor or ide lain maybe ada vim plugin, tpi tak rasa ia cukup powerful.
+Tapi spcemacs lain.
+[Forwarded from HH]
+The thing is, it is mnemonic.
+
+If you press SPC->b, you can access pretty much all of the important stuff related to buffers.
+If you press SPC->p, you can access project related stuff
+If you press SPC->l, you can control the layout of your buffers (think layout as workspace)
+And so on. It is easy to remember and easy for the hand.
+Nevertheless, you can still do the vim way like :w since it is really emacs enhanced with vim good stuff.
+
+Oh wow good to know next version of Bear will have encryption and note-locking feature. Also web app for non-OSX/iOS.
+https://www.reddit.com/r/bearapp/comments/achrh7/my_yearly_subscription_is_coming_to_an_end_and_i/ed95brn
+relevant bit:
+> Now, as one of the marketing folks here, I can say weโ€™re preparing some communication about the progress of Bear 1.7 (with encryption and note locking features), our major overhaul to the Editor (probably Bear 2.0), and the web app.

From c5315dfee0d2ecbd83b1329c565ff3b389567acc Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Fri, 11 Jan 2019 12:02:24 +0800
Subject: [PATCH 169/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 _posts/2019-01-03-discussion-notes-jan-2019.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index 63e057f46383b..dc55f9f7cdb54 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -5,7 +5,7 @@ author: kamal
 tags: notes
 ---
 
-Some notes from discussion in Telegram group.
+Some notes from discussion in Telegram group. This will be continuously updated until the end of this month, so stay tuned.
 
 ## Push Notifications.
 Problem: Firebase push notification has been very slow, looking for alternative.

From a1604dea002254c63edcfcb901e273b260dfa4a1 Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 19 Jan 2019 08:08:37 +0800
Subject: [PATCH 170/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 .../2019-01-03-discussion-notes-jan-2019.md   | 91 +++++++++++++++++++
 1 file changed, 91 insertions(+)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index dc55f9f7cdb54..575649b82826e 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -78,3 +78,94 @@ Oh wow good to know next version of Bear will have encryption and note-locking f
 https://www.reddit.com/r/bearapp/comments/achrh7/my_yearly_subscription_is_coming_to_an_end_and_i/ed95brn
 relevant bit:
 > Now, as one of the marketing folks here, I can say weโ€™re preparing some communication about the progress of Bear 1.7 (with encryption and note locking features), our major overhaul to the Editor (probably Bear 2.0), and the web app.
+
+## Local cert
+Alternative to minica for https for localhost: https://blog.filippo.io/mkcert-valid-https-certificates-for-localhost/
+
+## Refusing to work on non-legal code at work
+* devs, our industry might not be regulated, but I think we can also do our due diligence, like refusing to work on any source code that we (or our company) don't have legal license yet).
+
+it might look like small matter, but consider long term implication, like we have moved away but our previous company get into legal copyright issue, that could be affecting our career as well if it was revealed that we also involved in working on that illegal source code.
+
+## Network setup in co-location
+Usually on co-location setup, do they put us in private subnet or open network, shared with everyone else?
+
+Open. So if you have unsecured box that need to be exposed to the internet, put another machine in front (let call this the firewall), this machine is the one that will be connected to the co-location network, which in turn exposed it to public Internet. The unsecured box then should be connected to the firewall using direct cable connection or bring your own switch to setup local network between the firewall and the unsecured box.
+
+## Serveo, Ngrok like services
+Was checking out https://serveo.net, then saw:
+If Serveo doesn't meet your needs, this guide (https://dev.to/k4ml/poor-man-ngrok-with-tcp-proxy-and-ssh-reverse-tunnel-1fm) has some ideas for setting up OpenSSH.
+
+## repl.it
+A 13 y/o programmer on how he built a large crypto-mining operation on https://twitter.com/replit. He built a distributed mining and monitoring software purely on repls. - https://mobile.twitter.com/amasad/status/1083517163153944576
+
+No diff than running leela zero or other heavy stuff on colab.research.google.com
+
+Colaboratory is a free Jupyter notebook environment that requires no setup and runs entirely in the cloud. See our FAQ for more info.
+
+# Good Go learning material
+Get started - http://howistart.org/posts/go/1
+Quick ref:-
+
+* https://learnxinyminutes.com/docs/go/
+* https://github.com/devkini/notes/wiki/Go
+
+Ebook:-
+
+* http://www.golangbootcamp.com/book
+
+Web framework:-
+
+* ?
+
+Why framework is ?. No good framework, or people don't usually use framework?
+
+still no good recommendation
+
+What I got when I asked this a while back: stdlib is good enough
+
+This, without going into a rant. Figure out what you wanna do and all the parts are there in the Lego pieces, rather than requiring anything fancy.
+
+It's the roughly the same sort of question asked by new programmers: What is the best IDE for me to use? It's an invitation to bikeshed and derail the conversation into trivialities.
+
+These days, I'll just say "vscode" to the IDE question, and gorm for the ORM/db access. Web stuff, the std lib already has all the bits.
+
+It'll be easier to ask a "How do I do a SPA with Go and Angular?" And then see it in action.
+
+I'll bookmark this and might run through the most simplistic way to do it some time. Kinda busy these few months.
+
+Or just use https://revel.github.io/ (good enough docs and examples) and get out of our hair. (Most of the Go folks I know don't use it, so you're on your own).
+
+But pretty much everything except "How do I layout my controller, model and views files?" (Do whatever you prefer) is normally pretty easily codable straight.
+
+to compare with other languages like python and why such languages need web framework:-
+
+* No concept of http request/response exists in python stdlib. So if you want to do web in python with just the stdlib, you have to socket.listen() and socket.recv(bytes_size) (good luck thinking to do it in blocking or non-blocking way) and parse the request string yourself just to get name=myname data user submitted. Go stdlib otoh has net/http.Request that abstract the incoming http request.
+
+* No production web server implementation exists in python stdlib. In go, net/http.Server is production ready with full https support.
+
+e.g. https server with let's encrypt: 
+
+```
+package main
+
+import (
+  "fmt"
+  "log"
+  "net/http"
+
+  "golang.org/x/crypto/acme/autocert"
+)
+
+func main() {
+  mux := http.NewServeMux()
+  mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+    fmt.Fprintf(w, "Hello, TLS user! Your config: %+v", r.TLS)
+  })
+  log.Fatal(http.Serve(autocert.NewListener("localhost"), mux))
+}
+```
+
+wow, is that new, acme/autocert? but /x is not stdlib, right?
+
+extended/experimental. "These packages are part of the Go Project but outside the main Go tree. They are developed under looser compatibility requirements than the Go core." https://godoc.org/-/subrepo

From 15a8ba48aae9af3f157fa4ff8f7c018c0959990c Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 19 Jan 2019 08:11:37 +0800
Subject: [PATCH 171/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 .../2019-01-03-discussion-notes-jan-2019.md   | 25 +++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index 575649b82826e..671c5e02885c6 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -169,3 +169,28 @@ func main() {
 wow, is that new, acme/autocert? but /x is not stdlib, right?
 
 extended/experimental. "These packages are part of the Go Project but outside the main Go tree. They are developed under looser compatibility requirements than the Go core." https://godoc.org/-/subrepo
+
+## Overriding files in docker
+is there other options to overwrite certain files inside container during docker run (not build) other than volume mount?
+
+https://stackoverflow.com/questions/35705421/overwrite-files-with-docker-run
+
+overriding directory with volume mount make sense but if you just want to override only certain files, it look quite excessive. ok, maybe docker cp.
+
+docker cp works on a running *container*, not image. Just use a startup script on the docker image during bootstrap to pull in your deps, like everyone else.
+
+entry-point script?
+
+should work I think, as I have the container id at the  point this need to be done.
+
+Yup. See example like https://github.com/mysql/mysql-docker/tree/mysql-server/8.0 (i'm referring to entrypoint script)
+
+oh, wait. That's too late already, the service already started.
+
+already using entry-point script. So what I should do is volume mount the files in /somedir in the container, and then cp it to intended location in entry-point script?
+
+Yup. That's the standard way.
+
+We run sed and other stuff during the entrypoint script as well, to rewire all the deps properly in places and programs where they're too complicated to do environment variable properly.
+
+Have a look at https://github.com/mysql/mysql-docker/blob/mysql-server/8.0/docker-entrypoint.sh#L52 to get some ideas. It's your own script, so figure out how you wanna grab/or inject your deps.

From 0442421becb041860b4e35220008187e30ae7bfc Mon Sep 17 00:00:00 2001
From: Kamal Mustafa <k4ml@users.noreply.github.com>
Date: Sat, 19 Jan 2019 08:17:42 +0800
Subject: [PATCH 172/172] Update 2019-01-03-discussion-notes-jan-2019.md

---
 .../2019-01-03-discussion-notes-jan-2019.md   | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/_posts/2019-01-03-discussion-notes-jan-2019.md b/_posts/2019-01-03-discussion-notes-jan-2019.md
index 671c5e02885c6..7d956487a75b5 100644
--- a/_posts/2019-01-03-discussion-notes-jan-2019.md
+++ b/_posts/2019-01-03-discussion-notes-jan-2019.md
@@ -194,3 +194,41 @@ Yup. That's the standard way.
 We run sed and other stuff during the entrypoint script as well, to rewire all the deps properly in places and programs where they're too complicated to do environment variable properly.
 
 Have a look at https://github.com/mysql/mysql-docker/blob/mysql-server/8.0/docker-entrypoint.sh#L52 to get some ideas. It's your own script, so figure out how you wanna grab/or inject your deps.
+
+## Docker official images, automated build
+
+u build ur own docker image or just use whats available?
+
+I always prefer official image (on docker hub, with auto build so you know the Dockerfile showed is really the one used to produce the image)
+
+other than that, yes, I tend to build my own image
+
+is that guaranteed?
+
+Official images?  No. Official image is protected somewhat by docker, so less worries. And they have official vuln scanning (https://docs.docker.com/docker-hub/official_images/#official-image-vulnerability-scanning).
+
+But if it has autobuild, yes, you can be sure it's following the Dockerfile
+
+I can put what I claim as my Dockerfile in the README, but there's no guarantee that's what I really use
+
+If you absolutely have to use untrusted image, pull it, inspect the history, use image inspection tool like dive (https://github.com/wagoodman/dive).
+
+seem like you can trust mine.
+
+https://hub.docker.com/r/k4ml/docker-js/builds
+
+yeap. You didn't build yourself and push there. Hub built for you using your dockerfile
+
+It's probably wrong that I'm using "untrusted" or "trusted". "Correct" is probably more correct? The image could still be untrusted if you have no idea what the Dockerfile is using (and if it's running arbitrary code in one of its `RUN`s)
+
+Your example is just showing if the image is built by you and pushed to the hub, or built by them by them pulling from your git repo, and built and pushed by them.
+
+https://docs.docker.com/docker-hub/builds/
+
+Trusted vs untrustred is something else: https://docs.docker.com/engine/security/trust/content_trust/
+
+(I think).
+
+Official: https://hub.docker.com/search?q=&type=image&image_filter=official
+
+Official = OSS curated by Docker themselves.