WHAT'S NEW?
Loading...
Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Tidak diragukan lagi bahwa VS Code adalah salah satu text editor yg populer saat ini. Tidak seperti Vim yang legendaris, VS Code tidak mengharuskan kita untuk melakukan konfigurasi yg rumit tetapi kita diberikan banyak fitur menarik.

VS Code menyediakan banyak tombol Shortcuts yg bermanfaat utk kita dalam melakukan development dan dapat meningkatkan flow kerja kita, karena dengan Shortcuts dapat membantu mempercepat alur kerja tanpa harus menggunakan mouse. Meski begitu, kita harus bisa membiasakan diri menggunakannya agar secara otomatis kita bisa menghafal Shortcuts tersebut.

Berikut ini beberapa VS Code Keyboard Shortcuts yg bermanfaat, diantaranya:


1. Menampilkan Semua Commands

Windows/Linux macOS
CTRL + SHIFT + P or F1 SHIFT + ⌘ + P or F1

Ini adalah shortcut yang paling berguna, shortcut ini membuka Command Palette yang menyediakan akses ke semua fungsionalitas VS Code.
command palette (itfoss.com)

Pada Command Palette ini kita bisa melakukah hal seperti membuat file baru, membuka pengaturan, mengubah tema, dan melihat semua Shortcuts.

2. Split VS Code Editor Secara Vertical dan Horizontal


Windows/Linux macOS
CTRL + \ ⌘ + \


Yg satu ini cukup membantu bagi kita yg tidak menggunakan multiple-monitor, karena dengan hanya 1 monitor saja kita masih bisa melihat file berbeda dalam 1 tampilan, baik secara horizontal maupun vertical.


split editor (itfoss.com)

Dan kalaupun kita mau berganti fokus, kita juga bisa lakukan melalui Shortcuts.


Windows/Linux macOS
CTRL + 1/2/3 ⌘ + 1/2/3
CTRL + K CTRL + ←/→ ⌘ + K ⌘ + ←/→


3. Menampilkan Integrated Terminal


Windows/Linux macOS
CTRL + ` ⌘ + `

Integrated terminal adalah fitur yang sangat membantu yang memungkinkan kita menjalankan perintah dengan cepat tanpa harus berpindah jendela. Untuk menyembunyikan/memunculkan terminal di editor, shortcut ini tentu sangat berguna.

integrated terminal (itfoss.com)

Jika shortcut tersebut sulit dijangkau, kita juga bisa lakukan melalui command palette.

toggle terminal (itfoss.com)

4. Go To File

Windows/Linux macOS
CTRL + P ⌘ + P

Dimisalkan project kita sudah cukup besar, tentu mencari file cukup sulit. Oleh karena itu, kita bisa manfaatkan Shortcut utk mencari file yg ingin kita buka hanya dengan bantuan shortcut.

open file (itfoss.com)

5. Toggle Comment

Windows/Linux macOS
CTRL + / ⌘ + /

Jika kita ingin dengan mudah menambahkan komentar pada kode, kita bisa lakukan dengan bantuan shortcut yg mana juga mendukung utk menambahkan komentar dalam mode block ataupun single kode.

comment code (itfoss.com)
6. Find And Replace

Windows/Linux macOS
CTRL + F ⌘ + F
CTRL + H ⌥ + ⌘ + F

Dan yg terakhir, mencari dan mengganti text secara bersamaan. Situasi ini tentu tidak jarang diperlukan, dimana kita ingin mengganti nama variabel sebagai contoh. Hal ini dapat dilakukan melalui shortcut yg sudah disediakan. Bahkan juga fitur ini dapat mengganti text bukan hanya pada 1 file saja, melainkan beberapa file sekaligus.

find & replace (itfoss.com)

Itulah beberapa Shortcuts bermanfaat yg dapat kita gunakan dalam proses membantu meningkatkan menjadi lebih produktif dan meningkatkan flow kerja kita. Masih banyak Shortcuts lainnya yg mungkin bisa kalian gunakan, tapi beberapa diantaranya di atas adalah yg umum digunakan pada sebagian Developer.




Headline image: crio.do
Instalasi Android SDK Untuk Development MeteorJS di Linux

Android studio adalah salah satu development tool yang populer dalam pengembangan aplikasi mobile dengan pemrograman native, namun ada juga alternatif lain bagi selain native yaitu dengan Javascript yang salah satunya yaitu full stack framework MeteorJS. Saya kali ini akan memberikan tutorial cara integrasi MeteorJS dengan lingkungan mobile yang membutuhkan SDK dari android untuk Linux (saya menggunakan archlinux).

Langkah awal pastikan mendownload hanya SDK terlebih dahulu, tidak perlu android studio (install langsung android studio adalah alternatif rekomendasi) yang bisa langsung download disini atau pilihan versi lainnya di android official website dan tidak ketinggalan juga untuk gradle harus di download disini atau versi lainnya di gradle official website.

Selesai mendownload, cukup ekstrak di home direcotry ataupun directory yang diinginkan, saya asumsikan hasil ekstrak berada dalam /home/user/android/sdk dan /home/user/android/gradle. Langkah pertama yaitu perlu untuk menginstall package yang dibutuhkan dengan perintah berikut:
$ cd /home/user/android/sdk/tools/bin
$ ./sdkmanager --help
$ ./sdkmanager --update
$ ./sdkmanager --list
$ ./sdkmanager "build-tools;27.0.2"
$ ./sdkmanager "platforms;android-27"
$ ./sdkmanager "platform-tools"

** opsi untuk menghindari error no space left directory /tmp
$ mkdir ~/Downloads/PackageOperation01
$ sudo ln -s ~/Download/PackageOperation01 /tmp/PackageOperation01

$ ./sdkmanager "system-images;android-27;google_apis;x86"
Sampai disini package minimum sudah selesai, kemudian dilanjutkan dengan mengaktifkan konektifitas ke handphone atau dikenal dengan USB debugging.
$ sudo pacman -S libmtp android-tools android-udev
$ adb devices <== (utk memastikan hp sudah terhubung)
Kemudian kita lanjutkan dengan membuat android virtual device (AVD). Jadi nanti tinggal tentukan sendiri ingin menggunakan hp secara langsung atau AVD. Tapi sebelumnya perlu untuk menambah PATH untuk gradle dan SDK agar kedepan bisa dengan mudah mengeksekusi script tanpa perlu change direcotry, cukup copas kode berikut ke ~/.bashrc:
# Android SDK
export ANDROID_HOME="$HOME/android/sdk"
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools
# Gradle
export PATH=$PATH:$HOME/android/gradle/gradle-4.4/bin
Selanjutnya membuat AVD yang langkahnya juga cukup mudah.
$ cd /home/user/android/sdk/tools
$ ./avdmanager --help
$ ./avdmanager list target
$ ./avdmanager list device
$ ./avdmanager -v create avd --force --name meteorjsAVD --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86' $ ./avdmanager list avd <== melihat avd yang telah dibuat
$ ./emulator -avd meteorAVD <== menjalankan avd
Semua proses sudah selesai dan seharusnya AVD dapat berfungsi dengan baik. Namun terkadang ada kendala saat menjalankan AVD, semisal jika mengalami **emulator: WARNING: cannot read adb public key file: /home/user/.android/adbkey.pub** maka jalankan kembali perintah $adb devices dan pastikan untuk memberikan akses koneksi adb yang biasanya muncul di layar hp.
Dan juga apabila mengalami **libGL error: unable to load driver: i965_dri.so** cukup lakukan perintah berikut:
$ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6{,.bak}
$ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6.0.18{,.bak}
$ sudo ln -s /usr/lib/libstdc++.so /home/user/android/sdk/emulator/lib64/libstdc++/
Dengan begitu seharusnya AVD dapat berfungsi dengan baik. Lalu langkah terakhir adalah dengan menginstall platform android di proyek aplikasi meteor yang ada.

Perlu diketahui, MeteorJS saat ini masih membutuhkan API android level 25, jadi silakan install API level 25 dengan langkah yang sama seperti API level 27 diatas.

Demikian langkah yang diperlukan untuk menginstall android sdk tanpa android studio. Jika mengalami kendala harap berikan komentar pada kolom dibawah.

Image source: seekerswiki
Tutorial MongoDB: Operasi CRUD - Part 6

Create, read, update dan delete (CRUD) dasar interaksi yang selalu dilakukan saat menggunakan sebuah database. Setelah sebelumnya kita mengenal dasar-dasar MongoDB, kali ini kita mulai untuk ke bagian penting yaitu CRUD dalam MongoDB yang tersedia dengan beberapa metode.

Membuat document (Insert)

Dalam hal membuat document (istilah pengganti record table dalam NoSQL) MongoDB menyediakan beberapa cara yang diantaranya yaitu:

- membuat document menggunakan insert()

Cara yang paling umum untuk membuat data document baru adalah dengan metode insert(). Metode ini memerlukan 1 argument yang merepresentasikan data baru sebuah document. Contohnya yaitu sebagai berikut:
> db.people.insert({ "firstname": "Jim", "lastname": "Doe", "address": "20 Main St." })

- membuat document menggunakan update()

Metode update() biasanya digunakan untuk mengubah sebuah data. Tetapi dalam MongoDB kita dapat menggunakannya untuk membuat document baru dengan syarat jika tidak ada document yang sama dengan query document dan juga perlu menambahkan "upsert" flag. Contohnya sebagai berikut:
> db.people.update({
... "firstname": "Jim"
... },
... {
... "firstname": "Jim",
... "lastname": "Doe",
... "address": "555 Main St."
... },
... {
... upsert: true
... })
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("58e34c04002c40a5718b63af")
Contoh query diatas akan membuat MongoDB mencari "firstname" Jim dan mencoba untuk mengubah datanya, tapi nyatanya collection "people" tidak memiliki "firstname" Jim dan karena kita menggunakan "upsert" flag dan MongoDB tidak menemukan data yang sesuai untuk di update maka sebagai gantinya document baru akan dibuat.

- membuat document menggunakan save()

Cara lain untuk membuat document baru adalah dengan menggunakan metode save(). Berikut ini contoh menggunakan save():
> db.people.save({
... "firstname": "John",
... "lastname": "Doe",
... "address": "555 Main St."
... })
WriteResult({ "nInserted" : 1 })
Cukup sederhana cara kerjanya yaitu dengan memasukkan langsung document baru tanpa menyertakan key "_id", atau bisa juga dengan menyertakan key "_id" yang kemudian MongoDB akan memeriksa apakah "_id" itu ada. Efeknya mirip seperti metode update() yang akan langsung membuat document baru jika data yang dicari tidak ditemukan.

Mengubah Dokumen (Update)

Semua proses update membutuhkan paling tidak 2 argument. Argument pertama menspesifikasikan field document dengan nilai apa yang mau diubah dan argument kedua mendefinisikan nilai baru document yang akan diubah. Perlu untuk diketahui kalau secara default fungsi update() cuma mengubah sebuah document (single document), meskipun sebenarnya dapat dioperasikan untuk mengubah banyak document dan bahkan seluruh collection.

Ada 2 tipe umum dari update yaitu perbedaan antara maksud penggunaannya. Tipe pertama yaitu melakukan modifikasi terhadap sebuah document, dan tipe kedua yaitu melakukan replace document lama dengan yang baru. Contoh dari tipe pertama adalah sebagai berikut:
> db.people.update(
... {firstname: "John"},
... {$set: {lastname: "Smith"}}
... )
Proses dari operasi diatas yaitu mencari sebuah document dimana memiliki firstname "John" dan kemudian mengganti nilai field lastname menjadi "Smith". Dan juga kita menggunakan $set operator yang berguna untuk menentukan nilai spesifik sebuah field.

Kemudian untuk cara kedua cukup membingungkan, coba perhatikan operasi berikut ini:
> db.people.update(
... {firstname: "John"},
... {lastname: "Smith"}
... )
Hasil contoh diatas, document akan di-replace hanya pada yang memiliki field lastname, dan field firstname akan dihapus karena document pertama digunakan hanya untuk pencocokan(sebagai argument pertama) dan document kedua digunakan untuk me-replace document yang telah cocok dengan hasil pencarian berdasarkan document pertama.

Jadi intinya, menggunakan teknik replace cukup beresiko karena dapat menghapus field jika tidak digunakan dengan tepat, oleh karena itu harus hati-hati dalam penggunaanya dan lebih disarankan untuk menggunakan $set operator untuk mengupdate document.

Menghapus Document (Delete)

Kita sudah tahu dasar dari operasi create, read, dan update dalam MongoDB. Selanjutnya adalah operasi terakhir yang sederhana yaitu menghapus data.

Dalam penggunaannya, jika tidak ada parameter yang diberikan, operasi remove() akan menghapus semua collection dari document-nya, misalnya:
> db.people.remove()
Hasilnya sudah pasti akan menghapus seluruh data yang ada. Setidaknya kita butuh menghapus data tertentu dari sebuah document, dan untuk itu dibutuhkan parameter ataupun query selector kedalam fungsi remove().

Ada contoh yang misalnya kita ingin menghapus semua nama orang yang memiliki lastname "Smith", jadi bentuk query yang dibuat yaitu:
> db.people.remove(
... {lastname: "Smith"}
... )
Perlu diingat kalau fungsi remove() tidak akan menghapus collection melainkan hanya menghapus document, bisa disamakan dengan klausa DELETE dalam SQL. Dan untuk menghapus collection kita gunakan fungsi drop().
> db.people.drop()

Part 1: Tutorial MongoDB: Pengenalan MongoDB - Part 1
Part 2: Tutorial MongoDB: Mengoperasikan MongoDB - Part 2
Part 3: Tutorial MongoDB: Tipe Data MongoDB - Part 3
Part 4: Tutorial MongoDB: Tipe Data MongoDB (Tambahan) - Part 4
Part 5: Tutorial MongoDB: Dasar MongoDB Shell - Part 5
Part 6: Tutorial MongoDB: Operasi CRUD - Part 6

Itulah dasar dalam menggunakan operasi CRUD di MongoDB. Untuk perbandingan lebih jelas dapat dilihat pada MongoDB CRUD Operations yang telah menyediakan tabel perbanding antara query SQL dan NoSQL.
Package Sublime Text Terbaik Untuk Web Development

Sublime Text adalah salah satu text editor populer yang masih saya gunakan dalam hal development PHP. Pada artikel sebelumnya yang mengulas sedikit tentang Atom text editor, saya sudah berikan beberapa Atom Plugin Terbaik Untuk JavaScript Development, kali ini saya akan ulas lagi mengenai hal yang sama yaitu Package Sublime text terbaik untuk web development.

- Alignment
- BracketHighlighter
- CodeIgniter Snippets (Optionals)
- Color Highlighter
- ColorPicker
- Colorsublime
- DocBlockr
- Emmet
- FileDiffs
- Javascript Completions
- Package Control
- Status Bar Time
- SublimeLinter
- SublimeLinter-jshint (atau eslint)
- SublimeLinter-contrib-eslint
- SublimeLinter-php

Masih banyak lagi package yang dapat ditemukan melalui website https://packagecontrol.io. Dan juga sudah ada banyak artikel yang mengulas tentang package sublime text, untuk list package diatas adalah versi saya pribadi yang menggunakannya, sampai saat ini masih saya gunakan tanpa kendala.

Jika ada yang ingin ditanyakan, silakan isi komentar dan juga bisa berikan informasi mengenai package lainnya yang mungkin juga lebih baik untuk diguanakan dalam hal web development.

Image source: Wikipedia.
Cara Mengatasi MongoError: E11000 duplicate key error index

Kali ini saya akan menulis singkat mengenai error dalam penggunaan MongoDB dan cara penanganannya. Error ini baru saya alami jadi cukup membuat pusing dan akhirnya bisa terselesaikan.

Saya menggunakan NodeJS dan mongoose dalam membuat RESTful API, dan digunakan dengan jQuery Ajax standard (saya tidak mahir dalam hal front-end framework). Saat masuk proses POST data yang berupa submit form, saya selalu mendapati error di console browser "500 internal server error" dan yang membuat saya makin bingung, API saya tidak crash dan masih bisa berfungsi jika saya gunakan untuk operasi lainnya.

Dalam menggunakan NodeJS, banyak sekali yang merekomendasikan untuk menggunakan debugging tools (API yang saya masih development mode dan belum ada buat testing juga), nah disini saya menggunakan chrome-dev tools dalam hal debungging dan sampai akhirnya saya ketemu penyebab masalah yang saya hadapi yang berisikan error sebagai berikut:
MongoError: E11000 duplicate key error index: toolswatcher.users.$name_1 dup ......
Mungkin nantinya anda akan ketemu masalah yang sama, maka untuk mengatasinya cukup mudah yaitu dengan langkah melalui MongoDB shell dengan perintah berikut:
db.users.dropIndex({"name":1})
Hanya dengan langkah diatas, masalah yang saya hadapi sudah terselesaikan dan API-nya berjalan lancar sesuai yang saya inginkan.

Untuk detail penggunaan MongoDB shell bisa melihat langsung pada tutorial yang ada pada blog ini, dan sedangkan untuk error seperti diatas penjelasan lebih jelasnya bisa mengacu pada link Official MongoDB.

Image source: wpcookhouse.
Atom Plugin Terbaik Untuk JavaScript Development

Dalam dunia developer, dukungan tools adalah bagian penting untuk memperlancar proses kerja. Salah satunya yaitu text editor. Kali ini saya akan berbagi sedikit tentang text editor yang saya gunakan dalam development JavaScript.

Saya menggunakan Atom text editor dengan beberapa plugin yang sangat membantu, dan disini saya menggunakan OS Linux. Berikut ini beberapa plugin yang saya gunakan dalam text editor atom:


Cukup banyak memang tapi itu semua sudah memenuhi kebutuhan saat proses coding. Berikut ini contoh gambar dari editor dengan plugin-plugin tersebut.
Atom Plugin Terbaik Untuk JavaScript Development

Sedangkan untuk tema, saya menggunakan tema default atom dan saya sudah cukup nyaman dengan itu. Jadi jika tertarik menggunakannya silakan dicoba langsung. Jika ada tambahan ataupun plugin yang menarik bisa berikan komentar pada kolom dibawah.
headline


Pada part ini kita akan mulai menggunakan MongoDB Shell untuk lebih mengenal MongoDB dalam penggunaannya, terlebih dalam pengoperasian fungsi query NoSQL database.

Untuk memulai menggunakan MongoDB Shell, pastikan terlebih dahulu service MongoDB sudah dijalankan. Untuk dapat mengakses server secara kustom, seperti hostname/IP server, port dan database, gunakan perintah berikut dari terminal:
mongo host_server:27017/myDB <== 27017 port default MongoDB
Contoh di atas diasumsikan kita sudah mempunyai database yang akan diakses, namun bila kita belum punya database maka gunakan perintah berikut:
mongo
> help <== untuk melihat kumpulan perintah shell
> show dbs <== menampilkan nama database
> use myDB <== gunakan database myDB atau buat db myDB
> exit <== keluar dari shell
Contoh perintah di atas adalah untuk kasus memulai akses database, bila nantinya kita sudah punya database yang akan dihandle maka saya pribadi lebih senang menggunakan cara berikut ini:
mongo --nodb
> conn = new Mongo("host_server:27017")
> db = conn.getDB("myDB")
Cukup sederhana dan tentunya lebih terlihat terstruktur, akan tetapi bukan berarti harus menggunakannya, mungkin ada cara lain yang lebih bagus yang bisa ditemukan di internet.

Seperti yang kita tahu sebelumnya kalau "mongo" sederhananya adalah JavaScript shell, dengan begitu kita bisa melihat JavaScript dokumentasi sebagai referensi. Untuk fungsi MongoDB secara spesific, sudah terdapat fungsi built-in yang dapat dilihat dengan perintah "help" seperti contoh sebelumnya di atas.

Untuk tingkatan level tersedia melalui parameter masing-masing, misalnya level database (berada dalam shell database yang digunakan) yaitu "db.help()" dan untuk level collection yaitu "db.nmcollection.help()"

Ada hal yang mungkin bisa dikatakan unik dalam MongoDB shell, misalkan kita ingin mengetahui seperti apa sebuah fungsi bekerja dalam mengolah data, dalam hal ini kita ingin mengetahui bagaimana fungsi update bekerja, maka cukup lakukan perintah berikut melalui shell:
> db.books.update
Dari hasil diatas maka akan tampak barisan kode JavaScript yang menghandle fungsi tersebut. Perlu diketahui, pada contoh tersebut kita tidak menggunakan tanda kurung "()" pada akhir nama fungsi, hal ini bertujuan untuk menguak isi dari fungsi tersebut, tetapi bisa kita menggunakan tanda kurung "()" pada nama fungsi tersebut "update()" maka berarti fungsi akan dieksekusi.

Part 1: Tutorial MongoDB: Pengenalan MongoDB - Part 1
Part 2: Tutorial MongoDB: Mengoperasikan MongoDB - Part 2
Part 3: Tutorial MongoDB: Tipe Data MongoDB - Part 3
Part 4: Tutorial MongoDB: Tipe Data MongoDB (Tambahan) - Part 4
Part 5: Tutorial MongoDB: Dasar MongoDB Shell - Part 5
Part 6: Tutorial MongoDB: Operasi CRUD - Part 6

Itulah sedikit dasar dalam menggunakan MongoDB shell, jika ada yang salah ataupun ada hal yang ingin ditanyakan silakan isi komentar dibawah, dan jangan lupa tetap kunjungi blog ini ataupun bookmark label tag mongodb untuk update part selanjutnya.
headline

Dalam part ini, saya akan membahas sedikit lebih lanjut mengenai beberapa tipe data yang sudah dijelaskan sebelumnya.

Dates

Di JavaScript, class Date digunakan untuk tipe data date MongoDB. Ketika membuat object Date baru, selalu panggil new Date(....), bukan hanya Date(....). Perlu diperhatikan dalam penggunaannya karena proses pemanggilan menggunakan kata kunci new dan tanpa new itu berbeda (dalam hal ini dikenal istilah konstruktor). Untuk penjelasan lebih lengkap mengenai class Date dalam JavaScript dan format yang bisa diterapkan untuk sebuah konstruktor bisa dilihat langsung melalui Ecmascript ataupun referensi yang lainnya.

Array

Untuk pengertian array sendiri masih sama seperti array pada umumnya. Sebuah array dapat menampung nilai lists, stacks, ataupun queues. Dalam MongoDB sendiri kedudukan array dalam sebuah document cukup membantu karena sebuah key dapat memiliki nilai yang beragam. 

Misalnya ada sebuah document yang mempunyai key "tes" dan mempunyai nilai array:
{"tes" : ["pi", 3.14]}
Dari contoh tersebut, nilai array dapat memuat atau berisikan tipe data yang berbeda sebagai nilanya (pada contoh diatas, terdapat sebuah string dan floating-point number).

Array dalam document bisa mengandung array lainnya atau biasa dikenal dengan istilah "nested arrays". Satu hal yang mungkin bisa dikatakan sebagai keunggulan tentang array dalam sebuah document yaitu MongoDB mengerti struktur mereka dan tahu bagaimana membaca hingga kedalam nilai nested arrays sekalipun. Jadi hal ini memungkinkan kita untuk membuat sebuah index menggunakan key terkait untuk meningkatkan query speed.

Embedded Documents

Selain menampung sebuah konten, document sendiri bisa menampung document lain dalam sebuah key, ini dikenal dengan sebutan embedded document. Embedded document bisa digunakan untuk mengorganisir data  menjadi lebih natural ketimbang hanya dengan struktur yang flat untuk pasangan key/value.

Untuk contohnya, jika kita punya document yang meresepresentasikan seseorang dan ingin menyimpan alamatnya, kita bisa mengumpulkan informasinya ke dalam embedded "alamat" document:
{
    "nama" : "John Doe",
    "alamat" : {
        "jalan" : "Jl. Beringin",
        "kota" : "Jogja",
        "provinsi" : "DIY"
    }
}
Contoh diatas merupakan contoh kecil dari embedded document, mungkin ada banyak contoh lainnya di internet yang lebih dalam strukturnya. Jadi sederhananya untuk penggunaan embedded document lebih kurang seperti contoh diatas.

_id dan ObjectId

Setiap document yang tersimpan di MongoDB harus memiliki "_id" key. Pada part 2 kita sudah melihat proses post data ke dalam document yang mana key "_id" otomatis muncul dan memiliki nilainya sendiri. Nilai key "_id" bisa dengan berbagai tipe data, tetapi secara default adalah tipe data ObjectId. Dalam sebuah collection, setiap document harus memiliki nilai yang unik untuk "_id", yang memastikan bahwa setiap document dalam sebuah collection dapat diidentifikasi secara unik.

ObjectId

ObjectId adalah tipe default untuk "_id" dan merupakan sebuah Class yang di desain untuk menjadi ringan (lightweight). Desain ini menghasilkan kemudahan saat proses generate terhadap mesin yang berbeda. MongoDB mempunyai alasan utama kenapa mereka menggunakan ObjectId daripada menggunakan bentuk tradisional seperti autoincrement primary key adalah "karena sulit dan memakan waktu untuk sinkronisasi autoincrement primary key antar multiple server". Karena MongoDB didesain untuk menjadi database terdistribusi, hal tersebut menjadi penting untuk dapat menghasilkan identifikasi unik dalam sharded environment (multiple server).

Lalu muncul pertanyaan kenapa meng-insert document baru yang tidak ada memuat "_id" key secara otomatis tersimpan sendiri dalam document itu ? 
Jawabannya adalah terletak pada sisi client. MongoDB meng-handle hal tersebut melalui driver yang ada pada client, dan juga nilai ObjectId yang dihasilkan merupakan 12 bytes yang merupakan generate langsung dari mesin. Untuk lebih jelasnya bisa langsung mengunjungi official site MongoDB ataupun referensi lainnya.

Itulah sedikit tambahan penjelasan khusus terhadap tipe data diatas, jika ada yang salah ataupun ada pertanyaan mohon kiranya memberikan komentar pada kolom dibawah.

Part 1: Tutorial MongoDB: Pengenalan MongoDB - Part 1
Part 2: Tutorial MongoDB: Mengoperasikan MongoDB - Part 2
Part 3: Tutorial MongoDB: Tipe Data MongoDB - Part 3
Part 4: Tutorial MongoDB: Tipe Data MongoDB (Tambahan) - Part 4
Part 5: Tutorial MongoDB: Dasar MongoDB Shell - Part 5
Part 6: Tutorial MongoDB: Operasi CRUD - Part 6
Tutorial MongoDB: Tipe Data MongoDB - Part 3

Pada part sebelumnya kita sudah sedikit mengetahui fitur-fitur ataupun unsur yang ada dalam MongoDB. Pada part ini kita akan mulai mempelajari tipe data yang ada pada MongoDB.

Document didalam MongoDB dapat dianggap sebagai "JSON" karena secara konseptual mirip dengan object pada JavaScript. Perlu untuk diketahui bahwa JSON memiliki keterbatasan dalam hal dukungan tipe data yang diantaranya hanyalah: null, boolean, numeric, string, array, dan object. 

Dalam hal ini, MongoDB tersedia dengan dukungan tambahan terhadap tipe data dengan tetap membawa sifat dasar dari JSON itu sendiri. Berikut ini daftar tipe data yang umum dalam merepresentasikan sebuah document dalam MongoDB yaitu:
  • null
          Null dapat digunakan untuk merepresentasikan sebuah nilai null dan nonexistent field:
{"x" : null}
  • boolean
          Tipe data boolean dapat digunakan nilai dengan kondisi true dan false:
{"x" : true}
  • number
          Dalam shell MongoDB secara default menggunakan 64-bit floating point numbers. Jadi, nomor berikut ini akan terlihat
          normal dalam shell:
{"x" : 3.14} OR {"x" : 3}
         Untuk Integer, bisa menggunakan class numberInt() atau numberLong():
{"x" : NumberInt("3")}
{"x" : NumberLong("3")}
  • String
         Untuk setiap yang dari karakter UTF-8 bisa direpresentasikan dengan tipe string:
{"x" : "foobar"}
  • Date
         Tipe data date disimpan sebagai milliseconds since the epoch (saya tidak tahu arti yang tepat dalam bahasa indonesia),
         dan time zone sendiri tidak tersimpan:
{"x" : new Date()}
  • regular expression
         Mungkin bisa dibilang tipe data ini menarik karena menggunakan sintak regular expression JavaScript dan tentunya
         berfungsi dengan baik:
{"x" : /foobar/i}
  • array
         Membuat field yang mengandung daftar atau kumpulan suatu nilai bisa menggunakan tipe data array:
{"x" : ["a", "b", "c"]}
  • embedded document
         Document dapat juga mengandung nilai yang berupa documents dan tipe data dari embedded document itu 
         akan menyesuaikan: 
{"x" : {"foo" : "bar"}}
  • object id
         Sebelumnya kita tahu pada part sebelumnya saat proses insert secara otomatis field _id akan muncul dengan tipe data
         object id. Object id sendiri ialah sebuah 12-byte ID untuk document (detailnya akan saya jelaskan pada part berikutnya): 
{"x" : ObjectId()}
  • code
         Query dan document dalam MongoDB juga dapat memuat nilai arbitrary JavaScript code:
{"x" : function() { /* ... */ }}

Itulah penjelasan mengenai tipe data yang umum ditemukan dalam penggunaan database MongoDB. Mungkin penjelasan diatas belum begitu detail, jadi jika ada yang ingin ditanyakan bisa langsung mengisi kolom komentar dibawah, dan jangan lupa terus kunjungi blog saya untuk part selanjutnya. 

Part 1: Tutorial MongoDB: Pengenalan MongoDB - Part 1
Part 2: Tutorial MongoDB: Mengoperasikan MongoDB - Part 2
Part 3: Tutorial MongoDB: Tipe Data MongoDB - Part 3
Part 4: Tutorial MongoDB: Tipe Data MongoDB (Tambahan) - Part 4

Part 5: Tutorial MongoDB: Dasar MongoDB Shell - Part 5
Part 6: Tutorial MongoDB: Operasi CRUD - Part 6

Tutorial MongoDB: Mengoperasikan MongoDB - Part 2

Langkah awal yang diperlukan sebelum memulai menggunakan MongoDB yaitu mendownload dan menginstallnya. Dalam hal ini saya menggunakan Linux Debian sebagai wadahnya dan menginstallnya langsung dari repository dengan perintah "sudo apt-get install mongodb". Namun jika anda ingin memilih versi tertentu bisa langsung mengunjungi download center MongoDB.

Lakukan proses installasi hingga selesai kemudian ketikkan perintah berikut pada terminal untuk menjalankan MongoDB:
$ sudo mkdir -p /data/db; sudo chown `id -u` /data/db
$ mongod
Atau bisa juga langsung menggunakan perintah:
$ sudo systemctl start mongodb
Dari semua langkah diatas, bila tidak ada error berarti MongoDB sukses dijalankan.

MongoDB Shell

MongoDB datang dengan JavaScript shell yang memungkinkan interaksi dengan operasi atau perintah-perintah dari MongoDB. Untuk masuk kedalam shell cukup mudah, ketikkan perintah "mongo" maka kita akan langsung masuk kedalam shell, seperti contoh gambar berikut.
Tutorial MongoDB: Mengoperasikan MongoDB - Part 2

Karena MongoDB shell didukung full-feature JavaScript interpreter (penerjemah bahasa javascript), kita dapat melakukan coding langsung didalam shell, semisal saya membuat sebuah fungsi sederhana dengan JavaScript dan menjalankannya seperti gambar berikut.
Tutorial MongoDB: Mengoperasikan MongoDB - Part 2

Operasi dasar dengan Shell

Kita bisa menggunakan 4 dasar operasi seperti create, read, update, delete (CRUD) untuk memanipulasi dan melihat data didalam shell. Perlu untuk diketahui bahwa tidak ada penggunaan query relational database dalam NoSQL, melainkan menggunakan metode untuk menggantikannya.

Create

Merupakan fungsi insert document ke dalam collection. Semisal kita ingin membuat blog post, pertama kita buat lokal variabel "post" yang merupakan JavaScript object dengan berisikan data sebagai berikut:
> use blog <== secara otomatis membuat dan masuk kedalam database blog
> post = {
... "title" : "Judul Postingan",
... "content" : "Isi paragraf",
... "date" : new Date()} [tekan enter]
Kemudian kita bisa menyimpan data tersebut dengan menggunakan metode insert()  dan melihat data yang sudah tersimpan metode find(). Jika berhasil maka hasilnya akan terlihat seperti gambar berikut.
Tutorial MongoDB: Mengoperasikan MongoDB - Part 2

Dari gambar diatas terlihat bahwa data berhasil tersimpan, dan juga terdapat data baru berupa _id yang merupakan special key. Mengenai special key akan saya jelaskan dibagian lain.

Read

Fungsi read dalam MongoDB bisa menggunakan 2 metode yaitu find() dan findOne(). Cara penggunaannya sama dengan contoh sebelumnya, cukup mengganti nama metode yang digunakan.

Update

Untuk melakukan modifikasi dalam collection, kita perlu menggunakan metode update(). Dalam penggunaannya, metode update membutuhkan 2 parameter berupa document yang mau diupdate dan data baru yang akan dimasukkan. Contohnya masih menggunakan data sebelumnya, kita akan coba menambahkan key baru dengan nama comments dan menampung nilainya dalam array. Dalam JavaScript object dikenal istilah pasangan key/value dengan bentuk seperti:
{ key : "value" }
Kita akan memodifikasi variabel post dan menambahkan key dengan nama comments:
> post.comments = [] [tekan enter]
Kemudian kita lakukan update untuk postingan dengan title "Judul Postingan" dengan data document baru dengan perintah:
> db.blog.update({title: "Judul Postingan"}, post)
Kemudian periksa dengan metode find() jika berhasil maka akan ada key baru didalam document tersebut.

Delete

Menghapus document cukup menggunakan metode remove(). Untuk menghapus seluruh document dari collection cukup panggil tanpa menggunakan parameter, tetapi jika ingin menghapus document tertentu maka gunakan parameter. Seperti contoh berikut saya akan menghapus document dengan title "Judul Postingan".
> db.blog.remove({title: "Judul Postingan"})

Itulah beberapa operasi dasar dalam menggunakan MongoDB, bisa dibilang jauh berbeda dengan database yang umum kita gunakan. Meskipun begitu sangat menarik untuk mempelajari teknologi baru untuk menambah wawasan. Selamat mencoba dan silakan baca bagian lainnya.

Part 1: Tutorial MongoDB: Pengenalan MongoDB - Part 1
Part 2: Tutorial MongoDB: Mengoperasikan MongoDB - Part 2
Part 3: Tutorial MongoDB: Tipe Data MongoDB - Part 3
Part 4: Tutorial MongoDB: Tipe Data MongoDB (Tambahan) - Part 4
Part 5: Tutorial MongoDB: Dasar MongoDB Shell - Part 5
Part 6: Tutorial MongoDB: Operasi CRUD - Part 6

Tutorial MongoDB: Pengenalan MongoDB - Part 1

MongoDB adalah document-oriented database, dan bukan merupakan relational database atau biasa dikenal dengan nama NoSQL. Sebuah document-oriented database yang dimaksud ialah database yang menggantikan konsep "row" dengan model yang lebih fleksibel yaitu "document".

MongoDB dibuat dengan tujuan untuk digunakan sebagai database pada umumnya, jadi selain fitur umum seperti create, read, update, dan delete data tersedia juga fitur unik yang tersedia diantaranya yaitu: Indexing, Aggregation, Special collection types, File storage.

Dalam tiap-tiap bagian tutorial yang akan saya buat kita akan mengenal konsep dasar dari MongoDB. Untuk langkah awal kita akan mengenal dasar seperti:
  • Sebuah document adalah sama dengan row dari relational database
  • Sebuah collection adalah sama dengan table 
  • Database collection

Document

Document bisa dikatakan sebagai jantungnya MongoDB. Representasi dari dari sebuah document bervariasi untuk setiap bahasa pemrograman. Untuk contohnya, dalam JavaScript sebuah document direpresentasikan sebagai object:
{"show" : "Hello, world!"}
Contoh object diatas berisi sebuah key, "show" dengan nilai yaitu "Hello, world!". Dari contoh object diatas hanya memiliki single key/value, tentunya kita bisa memiliki banyak pasangan key/value dengan memisahkannya menggunakan tanda koma (,):
{"show" : "Hello, world!", "foo" : 3}
Perlu untuk diketahui bahwa document-object disini bersifat case-sensitive jadi perlu untuk lebih teliti saat membuatnya.

Collection

Collection adalah grup dari kumpulan document. Jika sebuah document MongoDB dianalogikan sebagai sebuah "row" dalam relasional database, maka collection dapat juga dianalogikan sebagai table dalam relasional database.
Collection memiliki dynamic schema, yang berarti kalau document dalam sebuah collection dapat memiliki bentuk yang berbeda, misalnya:
{"greeting" : "Hello, world!"} {"foo" : 5}
Document diatas dapat disimpan dalam sebuah collection, dan juga document tersebut bisa memiliki type data yang berbeda pula seperti contoh diatas yang terdiri dari string dan integer. Disamping itu, Collection mendukung format Subcollection yang dapat menjadikan data collection lebih terstruktur.

Database

MongoDB mengelompokkan collection ke dalam database. Sebuah database memiliki "permission" tersendiri dan setiap database disimpan menjadi bentuk file didalam disk. MongoDB sudah memiliki beberapa database yang telah tersedia secara default sehingga kita tidak bisa membuat nama database yang sama yaitu: admin, local, config. Ketiga database itu bisa dikatakan sebagai database special karena berisikan informasi dari pengoperasian MongoDB.

Itulah beberapa penjelasan dari dasar MongoDB. Masih banyak lagi fitur yang bisa diketahui dengan langsung mencobanya ataupun memeriksa berbagai macam fitur dan fungsi melalui official documentasi dari MongoDB.

Part 1: Tutorial MongoDB: Pengenalan MongoDB - Part 1
Part 2: Tutorial MongoDB: Mengoperasikan MongoDB - Part 2
Part 3: Tutorial MongoDB: Tipe Data MongoDB - Part 3
Part 4: Tutorial MongoDB: Tipe Data MongoDB (Tambahan) - Part 4
Part 5: Tutorial MongoDB: Dasar MongoDB Shell - Part 5
Part 6: Tutorial MongoDB: Operasi CRUD - Part 6

Tutorial Cara Menggunakan Socket.IO dan Express

Perkembangan teknologi web sudah semakin cepat, terlebih lagi pada perkembangan teknologi JavaScript. Kali ini saya akan sedikit membahas salah satu framework yang populer yaitu ExpressJS.

Berawal dari rasa penasaran dengan real time web application saya mulai mencobanya langsung dan mencari tahu dan akhirnya menemukan salah satu real time engine yang biasa digunakan dalam membangun real time web application yaitu Socket.io. Pada saat proses implementasinya saya menemukan masalah yang ternyata package socket.io tidak bisa langsung digunakan layaknya package aplikasi Node JS lainnya.

Dari hasil googling saya menemukan bahwa "Socket.io does not work with routes it works with sockets.". Lantas hal ini bukan berarti bahwa kita tidak bisa menggunakannya, tetapi yang perlu dilakukan yaitu modifikasi.

Mungkin dengan mencari keyword "Socket.io express" di google anda akan menemukan banyak artikel yang sudah menyertakan bagaimana cara modifikasi agar Socket.io bisa digunakan dalam aplikasi Express JS, dan saya juga akan menuliskan cara modifikasi yang saya sudah temukan dan berhasil berfungsi dalam aplikasi (cara ini berdasarkan hasil googling).

Saya menggunakan Express generator untuk membuat aplikasi Node JS. Pastikan sudah menginstall Node JS terlebih dahulu dan kemudian lakukan proses instalasi Express Generator dengan perintah berikut:
$ npm install express-generator
Kemudian buat project (saya ingin menggunakan handlebars sebagai template engine, gunakan --hbs) baru dengan perintah berikut:
$ express socketio-express --hbs
Lalu masuk ke direktori aplikasi install dependencies project yang baru dibuat:
$ cd socketio-express; npm install
Karena Socket.io merupakan package eksternal maka kita perlu menginstallnya, cukup dengan menjalankan perintah npm install socket.io tunggu hingga selesai.

Berikut ini daftar dependencies yang saya gunakan dalam contoh ini:
{
     "name": "socketio",
     "version": "0.0.0",
     "private": true,
     "scripts": {
          "start": "node ./bin/www"
     },
     "dependencies": {
          "body-parser": "~1.15.1",
          "cookie-parser": "~1.4.3",
          "debug": "~2.2.0",
          "express": "~4.13.4",
          "hbs": "~4.0.0",
         "morgan": "~1.7.0",
         "serve-favicon": "~2.3.0",
         "socket.io": "^1.7.2"
     }
}
Dari sini mari kita mulai proses modifikasi. Langkah pertama buka file app.js dan tambahkan 3 baris code berikut ini:
var socketio = require('socket.io');

var app = express();

// Socket.io
var io = socketio();
app.io = io;

// app.use('/', routes);
app.use('/', require('./routes/index')(app.io));
Cukup sampai disini, lalu simpan file tersebut. Lanjut langkah kedua, buka file bin/www dan tambahkan code berikut ini:
/**
* Create HTTP server.
*/

var server = http.createServer(app);

/**
* Socket.io
*/
var io = app.io;
io.listen(server);
Kemudian simpan lagi file tersebut. Kita lanjut ke langkah ketiga, buka file routes/index.js dan modifikasi menjadi seperti code dibawah ini:
// ====== change all this code to =======
// var express = require('express');
// var router = express.Router();

/* GET home page. */
// router.get('/', function(req, res, next) {
//      res.render('index', { title: 'Express' });
// });

// module.exports = router;

// ====== the following code =======
module.exports = function(io) {
//now you can use io.emit() in this file
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
     res.render('index', { title: 'Express' });
});
io.on('connection', function (socket) {
     socket.emit('news', { hello: 'world' });
     socket.on('my other event', function (data) {
          console.log(data);
     });
     console.log('A client connection occurred!');
});
     return router;
}
Lanjut ke langkah terakhir, buka file views/index.hbs dan modifikasi script seperti dibawah ini:
src="/socket.io/socket.io.js" // javascript tag source link
// socket.io in javascript tag
var socket = io();
socket.on('news', function (data) {
     console.log(data);
     socket.emit('my other event', { my: 'data'});
})

Setelah semua langkah ini dilakukan, mari kita coba jalankan aplikasinya dan jika berhasil akan tampak hasil seperti gambar berikut.
Tutorial Cara Menggunakan Socket.IO dan Express
Click to zoom
Dari hasil gambar diatas menunjukkan bahwa aplikasi berjalan dengan lancar dan juga socket.io yang digunakan juga berfungsi dengan baik tanpa adanya error, dengan begitu kita dapat membuat aplikasi yang kita inginkan dengan menggunakan socket.io. Jika ada yang ingin ditanyakan ataupun mengkoreksi code diatas, silakan isi kolom komentar dibawah. Happy coding..
Cara Mengatasi Error CodeIgniter Nginx 404 Not Found

Kali ini saya ingin membuat artikel dari apa yang saya alami hari ini yaitu terkait dengan aplikasi web CodeIgninter dengan Nginx web server. 

Saya membuat sebuah aplikasi dengan framework CodeIgniter, dan aplikasi ini sebenarnya sudah berjalan dengan normal pada Apache web server. Namun saat saya pindahkan ke laptop saya yang menggunakan Nginx web server, aplikasi tersebut terus tampil error "404 page not found" yang berarti saya tidak bisa mengakses aplikasinya, dikarenakan terburu-buru menyebabkan saya lupa untuk melakukan penyesuaian terhadap aplikasi itu.

Sebelum saya tuliskan cara mengatasi error tersebut, terlebih dahulu saya akan berikan contoh konfigurasi vhost nginx yang saya gunakan di laptop saya.

server {
listen 80;
root /usr/share/nginx/html/public_html/penggajian;
index index.html index.php index.htm;
server_name class.dev;
access_log /usr/share/nginx/html/public_html/penggajian/application/logs/access.log;
error_log /usr/share/nginx/html/public_html/penggajian/application/logs/error.log;
location / {
#autoindex on;
#try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
#try_files $uri =404;
try_files $uri /index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
}
location ~ /\.ht {
deny all;
}
}

Dari konfigurasi di atas, nginx sudah berjalan dengan baik tanpa error hanya saja aplikasinya tidak bisa diakses. Adapun yang menyebabkan aplikasi tersebut tidak bisa diakses adalah karena nama file controller. Perlu diketahui Nginx bersifat sensitif terhadap nama file controller, jika membuat nama file yang tidak sesuai maka aplikasi menjadi tidak dapat diakses. Berikut ini gambaran mengenai masalah yang saya alami.

Cara Mengatasi Error CodeIgniter Nginx 404 Not Found
welcome.php error
Cara Mengatasi Error CodeIgniter Nginx 404 Not Found
Welcome.php success
Dari kedua gambar diatas yang membedakan hanyalah huruf kapital diawal file. Pada awalnya semua file controller saya menggunakan huruf kecil dan hal itu menyebabkan error page not found, setelah diganti mengikuti cara di atas aplikasi sudah dapat diakses kembali.

Hal yang cukup sederhana tetapi bisa membuat bingung. Kira-kira seperti itulah cara saya mengatasinya, jika anda punya pengalaman ataupun tahu cara yang lebih bagus untuk mengatasinya anda dapat berbagi pada komentar dibawah.
Web Browser Terbaik Untuk Web Programmer dan Web Developer

Blisk adalah salah satu web browser untuk anda seorang web programmer dan web developer. Disini saya akan menjelaskan sedikit dan mengapa anda harus mencobanya.

Saat Mozilla telah membuat perangkat lunak yang dev-friendly dengan Firefox Developer Edition, Blisk muncul dengan memberikan kemudahan bagi anda pengembang aplikasi web.

Dirancang khusus untuk pengembang dan saat ini tersedia untuk Mac dan Windows, juga akan menyusul Linux. Blisk adalah browser berbasis Chromium yang bertujuan untuk meningkatkan produktivitas dan kualitas kode dengan menyediakan beragam alat untuk pengembangan web dan preview perangkat desktop dan mobile.

Web Browser Terbaik Untuk Web Programmer dan Web Developer

Aplikasi yang anda buat dapat dilihat langsung dengan mode yang tersedia baik untuk perangkat desktop maupun mobile.

Preview yang dilihat sepenuhnya disinkronkan. Scrolling desktop dan drag pada perangkat mobile anda maka tampilannya akan bergerak mengikuti. Dan ketika klik link pada salah satu tampilan maka keduanya akan tereksekusi.

Web Browser Terbaik Untuk Web Programmer dan Web Developer

Terdapat pilihan perangkat alternatif seperti iPhone, iPads, Galaxy ini, Nexus yang tercantum di sidebar. Klik salah satunya untuk melihat bagaimana model situs anda tertampil.

Browser ini juga memiliki fitur "auto-refresh" yang akan terus mengperbaharui halaman web sehingga programmer tidak perlu lagi merefresh secara manual saat ada perubahan kode dalam aplikasinya.

Jika anda tertarik mencobanya, bisa langsung download melalui link disini.
Mengatasi Error "gradle DSL method not found: android()" Android Studio

Saya telah menggunakan Android Studio lebih kurang selama setahun, saya mulai menggunakannya untuk belajar bagaimana membuat aplikasi Android. Terdapat banyak referensi yang bisa didapat untuk memulai belajar, bahkan untuk seorang pemula dalam dunia pemrograman sekalipun.

Saya biasanya belajar melalui referensi yang saya punya seperti ebook ataupun website, dan terkadang juga saya mendownload open source projects (banyak terdapat di GitHub) untuk memperlajari code dari aplikasi yang dibuat oleh orang lain. Saya sendiri juga masih belum terlalu familiar dengan GitHub, jadi ketika mengimpor sebuah source aplikasi dari GitHub, Android Studio tidak dapat mengimpornya dengan lancar.

Hal ini umumnya terjadi karena perbedaan versi antara source yang dibuat dan Android Studio yang digunakan. Pada kasus saya source memiliki versi yang lebih rendah dari pada versi build tools dan compile SDK yang terinstall pada laptop saya. Jadi pada saat proses impor saya mendapati error "gradle DSL method not found: android()" ketika compile build gradle telah selesai. Saya mulanya berpikir aneh error ini terjadi padahal saya sudah menggunakan versi build tools dan compile SDK terbaru.
Mengatasi Error "gradle DSL method not found: android()" Android Studio
Setelah mencari informasi diinternet dan menanyakan kepada teman, saya akhirnya mengetahui apa yang menyebabkan error itu terjadi.

Metode android() berada pada tempat yang salah, yaitu pada top-level build.gradle file.
Mengatasi Error "gradle DSL method not found: android()" Android Studio
Jadi yang perlu dilakukan ialah menghapus method tersebut. Buka terlebih dahulu file seperti yang tampak pada gambar diatas, kemudian cari baris code berikut ini dan hapus, misalnya:
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
}
Mengatasi Error "gradle DSL method not found: android()" Android Studio

Jika telah dihapus, silakan compile ulang atau bisa juga rebuild ulang project anda maka seharusnya errornya akan hilang dan project yang diimpor berhasil dibuild kedalam Android Studio. Selamat mencoba.

facebook react native for android

Membuat aplikasi Android dapat dibuat dengan mudah salah satunya membuat aplikasi android dengan MIT App Inventor. Baru-baru ini Facebook telah merilis React Native for Android yang merupakan sebuah library yang dapat memudahkan dan mempercepat seorang pengembang aplikasi (Developer) membuat aplikasi Android dengan menggunakan JavaScript.

Dengan versi ini, proyek aplikasi yang sedang dibuat dimungkinkan dapat mengkompilasi aplikasi yang ditulis dalam JavaScript untuk Web, iOS dan Android dari basis single code, yang artinya seorang developer dapat mempelajari atau menguasai hanya sebuah bahasa pemrograman dan kemudian dapat mengembangkan aplikasi mereka pada tiga platform sekaligus.

facebook native for android
Selain itu, hal ini dapat memudahkan pagi perusahaan ataupun pengembang untuk mengurangi jeda antara peluncurang aplikasi pada platform-platform tersebut, tidak peduli platform yang mana terlebih dahulu yang dikerjakan.

Facebook mengatakan bahwa tool ini baru digunakan untuk aplikasi Ads Manager platform iOS, sedangkan untuk dukungan Ads Manager platform Android baru akan dirilis dalam 3 bulan kedepan. 

Dengan adanya tool ini memang lebih memudahkan dalam mengelola iklan, seperti yang kita tahu bahwa menggunakan sistem iklan facebook cukup menjanjikan, terlebih lagi bila ditargetkan pada pengguna mobile, oleh karena itu tool ini layak dicoba bagi pengembang aplikasi mobile.