Friday, 30 December 2016

Awesome Jekyll

Status : Draft


Landing Page Themes

  1. Landing Page Jekyll theme, http://shaneweng.com/landing-page-theme/

Themes for Labs

  1. Allan Lab website, https://github.com/allanlab/allanlab

Optimalisasi

  1. Optimizing images for web with Google Page Speed and jpegoptim, https://jmperezperez.com/jpegoptim-optimize-jpg-page-speed/
  2. Trimage image compressor, https://trimage.org/

Contoh Peluang Pekerjaan Freelance yang menggunakan Jekyll 

Thursday, 29 December 2016

Bersahabat dengan Emacs

Status : Draft


Referensi


  1. spacemacs, A community-driven Emacs distribution
  2. awesome-emacs, A community driven list of useful Emacs packages, libraries and others., https://github.com/emacs-tw/awesome-emacs

Saturday, 17 December 2016

Bersahabat dengan regex

Status : Draft



Referensi

  1. Regular-Expressions.info, The Premier website about Regular Expressions, http://www.regular-expressions.info/
  2. iHateRegex, https://ihateregex.io/

Thursday, 15 December 2016

Berkenalan dengan Redis

Pertanyaan : 
  1. Ketika menginstall redis, ada opsi apakah ingin mengaktifkan igbinary serializer support,   lzf compression support dan zstd compression support. Apa kekurangan dan kelebihan mengaktifkan ini ?

Redis di Google Cloud

[4]

redis-benchmark 


redis-benchmark -q -h 10.146.0.5 -p 6379 -c 100 -n 1000000 -k 1 -t set,get,mset,incr,lpush,lpop,sadd,spop,lpush,lrange

Hasil benchmark di MacBook Pro 2018 :

SET: 132240.16 requests per second
GET: 131700.25 requests per second
INCR: 134174.16 requests per second
LPUSH: 134898.16 requests per second
LPOP: 130958.62 requests per second
SADD: 129988.30 requests per second
SPOP: 126246.69 requests per second
LPUSH (needed to benchmark LRANGE): 127258.85 requests per second
LRANGE_100 (first 100 elements): 29457.69 requests per second
LRANGE_300 (first 300 elements): 12210.91 requests per second
LRANGE_500 (first 450 elements): 8519.19 requests per second
LRANGE_600 (first 600 elements): 6515.55 requests per second
MSET (10 keys): 91424.39 requests per second

Hasil benchmark di Google Compute : 

lpush,lpop,sadd,spop,lpush,lrange
SET: 50707.37 requests per second
GET: 50456.63 requests per second
INCR: 50334.72 requests per second
LPUSH: 48775.73 requests per second
LPOP: 49905.18 requests per second
SADD: 50890.59 requests per second
SPOP: 52069.77 requests per second
LPUSH (needed to benchmark LRANGE): 49766.10 requests per second
LRANGE_100 (first 100 elements): 26313.02 requests per second
LRANGE_300 (first 300 elements): 12700.67 requests per second
LRANGE_500 (first 450 elements): 9121.51 requests per second
LRANGE_600 (first 600 elements): 7058.56 requests per second
MSET (10 keys): 39756.69 requests per second

memtier_benchmark


$memtier_benchmark --server=127.0.0.1 --port=6379 --protocol=redis --threads=2 --test-time=120 --ratio=1:1 --clients=600 --data-size=100 --key-pattern=S:S --pipeline=50 --hdr-file-prefix=macbookpro2018


MacBook Pro 2018




Google Compute VM


GCP Memorystore




Latency Spectrum Redis MacBook Pro 2018 vs Google Compute vs GCP Memorystore




Mac Hardware Profile

$ system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro15,1
      Processor Name: Intel Core i7
      Processor Speed: 2.6 GHz
      Number of Processors: 1
      Total Number of Cores: 6
      L2 Cache (per Core): 256 KB
      L3 Cache: 9 MB
      Hyper-Threading Technology: Enabled
      Memory: 16 GB
      Boot ROM Version: 1554.60.15.0.0 (iBridge: 18.16.13030.0.0,0)
      Serial Number (system): C02XH8WHJG5J
      Hardware UUID: 21DEED7D-EEA5-53BC-882C-4B073F2C7854

GCP Hardware Profile

e2-standard-2 (2 vCPUs, 8 GB memory)

$ sudo lshw -short
H/W path            Device      Class          Description
==========================================================
                                system         Google Compute Engine
/0                              bus            Google Compute Engine
/0/0                            memory         96KiB BIOS
/0/1001                         processor      Intel(R) Xeon(R) CPU @ 2.00GHz
/0/1002                         processor      CPU
/0/200                          memory         8GiB System Memory
/0/200/0                        memory         8GiB DIMM RAM Synchronous
/0/100                          bridge         440FX - 82441FX PMC [Natoma]
/0/100/1                        bridge         82371AB/EB/MB PIIX4 ISA
/0/100/1.3                      bridge         82371AB/EB/MB PIIX4 ACPI
/0/100/3                        generic        Virtio SCSI
/0/100/3/0          scsi0       generic        Virtual I/O device
/0/100/3/0/0.1.0    /dev/sda    disk           53GB PersistentDisk
/0/100/3/0/0.1.0/1  /dev/sda1   volume         49GiB EXT4 volume
/0/100/3/0/0.1.0/e  /dev/sda14  volume         3071KiB BIOS Boot partition
/0/100/3/0/0.1.0/f              volume         123MiB Windows FAT volume
/0/100/4                        network        Virtio network device
/0/100/4/0          ens4        network        Ethernet interface
/0/100/5                        generic        Virtio memory balloon
/0/100/5/0                      generic        Virtual I/O device
/0/100/6                        generic        Virtio RNG
/0/100/6/0                      generic        Virtual I/O device
/0/1                            system         PnP device PNP0b00
/0/2                            input          PnP device PNP0303
/0/3                            input          PnP device PNP0f13
/0/4                            communication  PnP device PNP0501
/0/5                            communication  PnP device PNP0501
/0/6                            communication  PnP device PNP0501
/0/7                            communication  PnP device PNP0501

Redis GUI

RDM

Untuk Mac, bisa melakukan kompilasi sendiri, sangat mudah jika mengikuti dokumentasi yg ada.

Referensi

  1. Redis, https://redis.io/
  2. RDM, https://rdm.dev/
  3. RedisInsight, https://redislabs.com/redis-enterprise/redis-insight/
  4. Running Redis on GCP: four deployment scenarios, https://cloud.google.com/blog/products/databases/running-redis-on-gcp-four-deployment-scenarios
  5. memtier_benchmark, https://github.com/RedisLabs/memtier_benchmark
  6. Memtier-Benchmark Director, https://github.com/RedisLabs/mbdirector



Berkenalan dengan SSDB : A high performance NoSQL database supporting many data structures, an alternative to Redis.

Status : Draft

Referensi

  1. SSDB, A high performance NoSQL database supporting many data structures, an alternative to Redis., http://ssdb.io/

Saturday, 26 November 2016

Saturday, 19 November 2016

Atom : A Hackable Text Editor

Status : Draft

Berikut adalah beberapa plugin yang bisa penulis gunakan :

Thema :
Produktivitas :
  1. nuclide, https://atom.io/packages/nuclide
  2. atom-ide-ui, https://atom.io/packages/atom-ide-ui
    Jika Anda sudah menggunakan nuclide, Anda tidak perlu menginstall kembali  atom-ide-ui, karena nuclide sudah dibundle dengan atom-ide-ui
  3. ide-typescript, https://atom.io/packages/ide-typescript
  4. ide-flowtype, https://atom.io/packages/ide-flowtype
  5. ide-java, https://atom.io/packages/ide-java
  6. ide-php, https://atom.io/packages/ide-php
  7. local-history, https://atom.io/packages/local-history
  8. php-fmt support for Atom, https://atom.io/packages/php-fmt
  9. symbols-tree-nav, https://atom.io/packages/symbols-tree-nav
  10. tab-switcher, https://atom.io/packages/tab-switcher
  11. language-elixir, https://atom.io/packages/language-elixir
  12. atom-elixir, https://atom.io/packages/atom-elixir
  13. linter-elixirc, https://atom.io/packages/linter-elixirc
  14. linter, https://atom.io/packages/linter
  15. language-r, https://atom.io/packages/language-r
  16. autocomplete-r, https://atom.io/packages/autocomplete-r
  17. language-rust, https://atom.io/packages/language-rust

Shorcut 

ctrl+t atau ctrl+p : Untuk mencari file secara cepat 
ctrl+alt+o : Untuk membuka symbol tree nav
ctrl+g : Untuk loncat menuju baris ke-

Jika menggunakan nuclide dapat melihat [3]

Wednesday, 28 September 2016

Export/Import Data dari PostgreSQL Menggunakan PHP dengan Format XML

Status : Draft

Latar Balakang

Pada salah satu aplikasi yang kita kembangkan, Bank Soal [1], kita memerlukan proses export/import data custom, karena proses export/import data menggunakan database yang kita gunakan, PostgreSQL, sudah tidak memenuhi kebutuhan lagi. Oleh karena itu diperlukan utilitas export/import data yang custom menggunakan format data xml.

Solusi

Export

Untuk export, kita menggunakan solusi built-in postgresql query_to_xml(query text, nulls boolean, tableforest boolean, targetns text) [2].

Salah satu contoh SQL untuk exportnya seperti ini :

SELECT * FROM query_to_xml('SELECT * FROM jenis_soal  WHERE id_jenis_soal
                           IN(SELECT DISTINCT(id_jenis_soal)
                              FROM soal WHERE id_set_soal = '||$1||')',true,false,'') jenis_soal_xml;
Contoh Outputnya seperti berikut :

<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
  <id_jenis_soal>1</id_jenis_soal>
  <nama>Pilihan Berganda</nama>
  <urut>1</urut>
</row>
<row>
  <id_jenis_soal>2</id_jenis_soal>
  <nama>Kombinasi Berganda</nama>
  <urut>3</urut>
</row>
</table>


Import

Untuk proses import kita menggunakan php dengan bantuan pustaka sabre/xml [5].

Contoh Implementasi Import :

  $service = new Sabre\Xml\Service();
  $service->elementMap = [
   '{}row' => function(Sabre\Xml\Reader $reader) {
return Sabre\Xml\Deserializer\keyValue($reader, '');
},
'table' => function(Sabre\Xml\Reader $reader) {
return Sabre\Xml\Deserializer\repeatingElements($reader, 'row');
},
  ];

  $data_xml   = $service->parse(file_get_contents($file_xml));

Outputnya akan berupa array, seperti berikut :

Array
(
    [0] => Array
        (
            [id_jenis_soal] => 1
            [nama] => Pilihan Berganda
            [urut] => 1
        )
    [1] => Array
        (
            [id_jenis_soal] => 2
            [nama] => Kombinasi Berganda
            [urut] => 3
        )
)

Referensi

  1. Sistem Informasi Bank Soal,Transformative Assesment : When Assesment is Not Only About Judging The Students But Developing Their Performance,  http://banksoal.openthinklabs.com
  2. PostrgreSQL : Export - Import Data, http://postgresql.openthinklabs.com/2016/08/postrgresql-export-import-data.html
  3. Export/Import Data dari MySQL Menggunakan PHP dengan Format XML, http://software.openthinklabs.com/2015/10/exportimport-data-dari-mysql.html
  4. An XML library for PHP you may not hate., http://evertpot.com/an-xml-library-you-may-not-hate/
  5. sabre/xml, http://sabre.io/xml/

Friday, 26 August 2016

Bedah APK Nurbaya Initiative

Status : Draft

Referensi





  1. 5 Aplikasi ini Siap Bantu Majukan Petani Negeri, https://www.goodnewsfromindonesia.org/2016/04/12/5-aplikasi-ini-siap-bantu-majukan-petani-negeri

Bedah APK PantauHarga

Status : Draft

Referensi





  1. 5 Aplikasi ini Siap Bantu Majukan Petani Negeri, https://www.goodnewsfromindonesia.org/2016/04/12/5-aplikasi-ini-siap-bantu-majukan-petani-negeri

Bedah APK LimaKilo

Status : Draft

Referensi





  1. 5 Aplikasi ini Siap Bantu Majukan Petani Negeri, https://www.goodnewsfromindonesia.org/2016/04/12/5-aplikasi-ini-siap-bantu-majukan-petani-negeri

Bedah APK TaniHub

Status : Draft

Referensi





  1. 5 Aplikasi ini Siap Bantu Majukan Petani Negeri, https://www.goodnewsfromindonesia.org/2016/04/12/5-aplikasi-ini-siap-bantu-majukan-petani-negeri

Bedah APK Petani

Status : Draft

Referensi


  1. 5 Aplikasi ini Siap Bantu Majukan Petani Negeri, https://www.goodnewsfromindonesia.org/2016/04/12/5-aplikasi-ini-siap-bantu-majukan-petani-negeri

Saturday, 6 August 2016

Bedah Data Pokok Pendidikan Dasar dan Menengah

Status : Draft 



Untuk saat ini sayangnya belum bisa banyak yang bisa dibedah. Aplikasi Dapodik ini dibangun menggunakan bahasa pemrograman PHP, kode nya diencrypt menggunakan ionCube [1] dan instalasi hanya mendukung Windows.

Karena belum memiliki akses ke Windows, sementara belum bisa ditelaah lebih jauh.

Tujuan utama membedah Aplikasi Dapodik adalah untuk melakukan integrasi dengan OpenThink SAS, Sistem Informasi Sekolah dengan semangat "Iqra Lingkungan" [3].

Referensi

  1. Data Pokok Pendidikan Dasar dan Menengah, Direktorat Jenderal Pendidikan Dasar dan Menengah, Kementerian Pendidikan dan Kebudayaan, http://dapo.dikdasmen.kemdikbud.go.id/
  2. ionCube, http://www.ioncube.com/
  3. OpenThink SAS, http://sas.openthinklabs.com

Thursday, 4 August 2016

Perbandingan Beberapa Solusi Payment Gateway di Indonesia

Status : Draft

Ketika ingin membuka  toko online atau loket pembayaran ataupun solusi custom lain, seperti pembayaran spp sekolah, tentu kita ingin menggunakan, mendapatkan solusi payment gateway yang handal tapi dengan biaya transaksi yang minim. Berikut adalah studi singkat perbandingan beberapa solusi payment gateway yang ada di Indonesia  :

1. Doku, http://doku.com

2. iPay88, http://www.ipay88.co.id/

3. Mandiri e-cash, http://mandiriecash.co.id

4. KasPay, https://www.kaspay.com/

5. Payza, https://www.payza.com/

6. Veritrans, https://veritrans.co.id/

7. FirstPay, http://firstpay.co.id/

8. Xendit, https://www.xendit.co


Referensi

  1. What are the leading payment gateway companies in Indonesia?, https://www.quora.com/What-are-the-leading-payment-gateway-companies-in-Indonesia
  2. Dukung Industri Digital Indonesia, Bank Mandiri Berencana Membuka Akses API e-cash, https://id.techinasia.com/ank-mandiri-berencana-buka-akses-api-e-cash

Tuesday, 2 August 2016

Software Stack Dibelakang PayPal


Berikut adalah Software Stack yang digunakan oleh PayPal :


  1. Dust.js, Asynchronous Javascript templating for the browser and server, http://www.dustjs.com/
  2. Bootstrap, The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web, http://getbootstrap.com/
  3. Bower, A package manager for the web, https://bower.io/
  4. Less, CSS pre-processor, http://lesscss.org/
  5. RequireJS, JavaScript file and module loader, http://requirejs.org/
  6. Backbone.js, Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface., http://backbonejs.org/
  7. Grunt, The JavaScript Task Runner, http://gruntjs.com/
  8. Mocha, feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases, https://mochajs.org/
  9. Krakenjs, Kraken is a secure and scalable layer that extends express by providing structure and convention, http://krakenjs.com/

Referensi

  1. PayPal Switches from Java to JavaScript, https://www.infoq.com/news/2013/11/paypal-java-javascript

Tuesday, 31 May 2016

Software Help Desk Open Sources

Status : Draft

Beberapa software help desk open sources

UVdesk Opensource Community Helpdesk 

Berbasis symfony framework 

Diamante Desk

Berbasis symfony framework

ticketit

Berbasis Laravel framework

Taiga


Berbasis Django. Menerapkan konsep Scrum, Kanban


Berbasis Laravel framework


Berbasis PHP


Lebih spesifik untuk membantu manajamen pengembangan software, Bugzilla digunakan oleh Mozilla 


Berbasis PHP, lebih spesifik untuk membantu manajemen pengembangan software


Berbasis ruby

Sunday, 17 April 2016

Uji Coba Berbagai OCR OpenSource untuk Membaca Resep dalam Kemasan

Status : Draft

Baru mencoba 2, Tesseract dan Abbyy. Abbyy masih jauh lebih akurat daripada Tesseract, untuk sementara fokus menggunakan Abbyy sambil melihat-lihat jika ada library OCR lain yg menggunakan pendekatan yg lebih baik, sehingga hasilnya jauh lebih akurat

Referensi


  1. Perfect OCR scanning for Android, http://stackoverflow.com/questions/21552615/perfect-ocr-scanning-for-android
  2. Fork of Tesseract Tools for Android, https://github.com/rmtheis/tess-two
  3. Experimental optical character recognition app, https://github.com/rmtheis/android-ocr
  4. OCR on Android, https://solidgeargroup.com/ocr-on-android
  5. Compare Tesseract and deep learning techniques for Optical Character Recognition of license plates, http://christopher5106.github.io/computer/vision/2015/09/14/comparing-tesseract-and-deep-learning-for-ocr-optical-character-recognition.html
  6. FastAnnotationTool, https://github.com/christopher5106/FastAnnotationTool
  7. ScanHalal, http://scanhalal.com/
  8. How to find Halal Food Products?, https://medium.com/@dev.technerd/how-to-find-halal-food-products-5063f6c5210c

Thursday, 24 March 2016

Friday, 18 March 2016

AlisJK SmartScan - Linux

Posting ini merupakan log pengembangan AlisJK [1] SmartScan - Linux.

Jika AlisJK SmartScan - Windows [2], menggunakan bahasa C#, untuk versi Linux Kita akan menggunakan code simple-scan [3] sebagai basis awal pengembangan

simple-scan 

Instalasi, dari [3], dengan beberapa tambahan :

sudo apt-get build-dep simple-scan
sudo apt-get install libsqlite3-dev
sudo apt-get install valac-0.22 vala-0.22
sudo update-alternatives --config valac # select vala-0.22
sudo apt-get install libgusb-dev
sudo apt-get install libpackagekit-glib2-dev
# one of the follwing
./autogen.sh                           # system-wide installation
./autogen.sh --prefix=`pwd`/install    # for development purposes
make
make install
./install/bin/simple-scan
Ketika menginstall via github (18-Maret-2016), ketika proses make, mendapatkan pesan error :

  VALAC    simple_scan_vala.stamp
ui.vala:1815.27-1815.30: warning: Argument 1: Cannot pass null to non-null parameter type
            set_titlebar (null);
                          ^^^^
simple-scan.vala:68.13-68.36: error: The name `device_added' does not exist in the context of `GUsb.Context'
            usb_context.device_added.connect (() => { scanner.redetect (); });
            ^^^^^^^^^^^^^^^^^^^^^^^^
simple-scan.vala:69.13-69.38: error: The name `device_removed' does not exist in the context of `GUsb.Context'
            usb_context.device_removed.connect (() => { scanner.redetect (); });
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
Compilation failed: 2 error(s), 1 warning(s)
make[1]: *** [simple_scan_vala.stamp] Error 1
Error yang sama terjadi ketika melakukan build source dari bzr. 

Referensi


  1. Analisis Lembar Jawaban Komputer (AlisJK), http://negeripelangi.org/id/produk/alisjk
  2. Alisjk SmartScan, http://workshop.openthinklabs.com/resources/programming-language/csharp/studi-kasus/alisjk-smartscan
  3. simple-scan, https://github.com/mnagel/simple-scan

Wednesday, 2 March 2016

Chemical Markup Language (CML)

Status : Draft
Panduan Pertanyaan :

  1. Bagaimana cara konversi CML ke Image dengan command line ? 
  2. Lihat output ChemDraw ketika diembed ke word, apakah yang diembed itu CML nya ?
  3. Apakah memungkinkan mengkonversi CML ke Latex



Referensi

  1. Chemical Markup Language, https://web.chemdoodle.com/demos/chemical-markup-language-cml/
  2. ChemDraw Professional, http://www.cambridgesoft.com/Ensemble_for_Chemistry/ChemDraw/ChemDrawProfessional/
  3. Chemistry Add-in for Word, http://research.microsoft.com/en-us/projects/chem4word/
  4. chemfig – Draw molecules with easy syntax, https://www.ctan.org/pkg/chemfig

Wednesday, 20 January 2016

Belajar Macro di Microsoft Office >= 2007

Status : Draft

Studi kasus, memodifikasi [1]. Untuk mengedit custom riboon, dapat menggunakan tool Custom UI Editor Tool [6]

Microsoft Office Windows

Untuk versi windows, bisa diunduh di [8]

Microsoft Office Mac 

[7][8]

Untuk instalasi secara manual, copy file

  1. banksoal2WordInstaller/Mac/banksoalStartup.dotm
ke dalam folder : /Users/{username}/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Startup.localized/Word 
serta copy kedua file berikut :
  1. banksoal2WordInstaller/Mac/banksoalParagraf.dotx
  2. banksoal2WordInstaller/Mac/banksoalQuestion.dotx
ke  /Users/{username}/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Startup.localized/Word

Untuk ke folder Users, dapat melalui menu : Go --> Computer --> Macintosh HD

Referensi

  1. Moodle2Word, http://www.moodle2word.net/
  2. Record or run a macro, https://support.office.com/en-US/article/Record-or-run-a-macro-cd56fb86-d8b2-475c-ba39-9728389feeeb
  3. Getting Started with VBA in Word 2010, https://msdn.microsoft.com/en-us/library/ff604039.aspx
  4. Customize the ribbon, https://support.office.com/en-us/article/Customize-the-ribbon-3c610b47-6f0f-4179-83d3-68a254a80ea6
  5. Excel Ribbon - Add a Custom Tab, http://www.contextures.com/excelribbonaddcustomtab.html
  6. Custom UI Editor Tool, http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/05/26/customuieditor.aspx
  7. Office for Mac, https://docs.microsoft.com/en-us/office/vba/api/overview/office-mac
  8. banksoal2WordInstaller, https://github.com/OpenThinkLabs/SistemInformasiBankSoal/tree/master/banksoal2WordInstaller

Tuesday, 19 January 2016

PHP Obfuscator

Status : Draft

Referensi


  1. YAK Pro - Php Obfuscator, https://www.php-obfuscator.com/

Membangun E-Commerce dengan Static Site Generator

Status : Draft


Jekyll


Jekyll dibangun menggunakan Ruby [1] s.d [10]

Gatsby


Gatsby dibangun menggunakan React [11][12][14]

Referensi

  1. Jekyll, https://jekyllrb.com/
  2. Jekyll (or another static site generator) for client sites with e-commerce. Doable? , https://www.reddit.com/r/webdev/comments/3f5weh/jekyll_or_another_static_site_generator_for/
  3. Little Big Blue, http://jekyllthemes.org/themes/little-big-blue/
  4. ModernBlog, http://jekyllthemes.org/themes/modernblog/
  5. Gridster, http://jekyllthemes.org/themes/gridster/
  6. dentistSmile, http://jekyllthemes.org/themes/dentistsmile/
  7. Siera, http://jekyllthemes.org/themes/siera/
  8. Twister, http://jekyllthemes.org/themes/twister/
  9. Jekyll Masonry, http://jekyllthemes.org/themes/jekyll-masonry/
  10. Freelancer, http://jekyllthemes.org/themes/freelancer/
  11. Gatsby, Blazing-fast static site generator for React, https://www.gatsbyjs.org
  12. Can I build an e-commerce site with Gatsby?, https://github.com/gatsbyjs/gatsby/issues/2586
  13. JAMstack : JavaScript, APIs, Markup Stack, http://software.openthinklabs.com/2018/03/jamstack-javascript-apis-markup-stack.html
  14. ReactJS E-Commerce With No Backend Using Snipcart & Gatsby, https://snipcart.com/blog/snipcart-reactjs-static-ecommerce-gatsby