Saturday, 11 November 2017

Tutorial Membuat Fitur Verifikasi Email Pada Formulir Registrasi di Laravel

Selamat pagi, siang, sore, dan malam.
Kembali lagi dengan mimin di turtorial laravel 5.* setelah sekian lama tidak berkecimpung dilaravel karena pekerjaan saat ini yang tidak menggunakan laravel. hahaha
Mungkin saya ketinggalan info seputar laravel nih guys, makanya mohon info-info jika ada yang kurang dan jika ada hal-hal yang baru tulis aja dikolom komentar.


Baik langsung saja. Hari ini saya akan mendemonstrasikan bagaimana cara membuat verikasi email ketika mengisi form register dengan judul artikel "Tutorial Membuat Fitur Verifikasi Email Pada Formulir Registrasi di Laravel". 

Saya akan menunjukan bagaimana cara membuat sebuah antrian di laravel 5.* untuk verifikasi email dengan menggunakan integrasi Auth RegisterController. Selain itu, saya juga akan menunjukan cara menambahkan proses pengiriman email ke antrian agara proses aplikasi kalian lebih cepat.

Pada tutorial kali ini, saya menggunakan database untuk pekerjaan antrian. Namun, kalian dapat menggunakan Redist atau driver lainnya, seperti yang didefinisikan dalam dokumen resminya.

Saya tidak akan menerangkan bagaimana cara untuk menginstall laravel, jika masih bingung coba pergi ke dokumentasi di web resminya. Jika sudah siap gunakan Auth default bawaan dari laravel dengan memasukan perintah
php artisan make:auth

Siapkan Table

Mari kita mulai menambahkan table dalam database yang sudah dipersiapkan. Kita akan menambaghkan table user dan table queue yang akan digunakan sebagai table antrian.

Memperbagarui Table User
Kalian bisa cek file migration di direktori database/migrations. Update kodenya dengan kode dibawah ini:

public function up()
{
   Schema::create('users', function (Blueprint $table) {
      $table->increments('id');
      $table->string('name');
      $table->string('email')->unique();
      $table->string('password');
      $table->tinyInteger('verified')->default(0);
      $table->string('email_token')->nullable();
      $table->rememberToken();
      $table->timestamps();
   });
}
Kita hanya menambahkan field table verified sebagai tanda sudah diverifikasi dan token_email untuk token.

Menambahkan Table Queue

Mari sekarang tambahkan table untuk queue jobs dan failed jobs. Untuk itu jalankan perintah
php artisan queue:jobs
php artisan queue:failed_jobs
perintah tersebut akan menambahkan file di folder migrations untuk penambahan table.

Table Migrations

Setelah semua sudah siap, kita tinggal import ke database, dengan menuliskan perintah migrate:
php artisan migrate
Setelah selesai kalian bisa melihat table telah dibuat di database yang kalian hendaki.

Update file .env

Sekarang saya akan memperbaharui file .env dengan email dan informasi driver antrian. Agar kalian tidak menggunakan email sungguhan dan agar tidak menjadi spam di inbox email. Saya menyarankan kalian untuk menggunakan mailtrap.io. Mailtrap.io ini adalah server SMTP palsu bagi pengembang untuk kebutuhan testing, melihat dan berbagi email yang dikirim dari lingkungan pengembang dan pementasan tanpa menjebak pelanggan nyata.



Coba kalian daftar, jika sudah, masuk ke Demo Inbox, copy username dan passwordnya masukan ke file .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=8d09d128965b83
MAIL_PASSWORD=4819d81da2f23e
MAIL_ENCRYPTION=null
Membuat Mail dan View Untuk Email Verifikasi
Karena kita sudah menyiapkan SMTP untuk mengirim email, saatnya membuat class email yang akan mengembalikan view dan token yang akan dikirim dengan isi email. Jalankan perintah artisan berikut untuk membuat setup email:
php artisan make:mail EmailVerification
Setelah perintah selesai, folder baru dengan nama Mail beserta file class EmailVerification akan dibuat di dalam folder app. Ini adalah file yang perlu kalian hubungi ketika kalian perlu mengirim email.

Update Class EmailVerification

Class ini hadir dengan dua metode. Yang pertama adalah constructor() dan yang kedua adalah build() yang akan melakukan sebagian besar pekerjaan. Ini mengikan view dengan email. Kalian akan mengirim token user beserta view sehingga user bisa diverifikasi. Untuk ini tambahkan tambahkan variabel baru yang dilindungi dengan nama $user. 
protected $user
Sekarang tambahkan parameter $user baru di constructor dan menyampaikan ke variabel class $user
public function __construct($user)
{
    $this->user = $user;
}
Selanjutnya, update metode build() sehingga bisa mengembalikan view beserta token user.
public function build()
{
   return $this->view('email.email')->with([
   'email_token' => $this->user->email_token,
   ]);
}

Membuat Email Template

Untuk membuat template email, buat folder baru di dalam folder view dengan nama email lalu buat file baru di dalam folder ini dengan nama email.blade.php file ini akan berisi template sederhana sebagai berikut:
<h1>Click the Link To Verify Your Email</h1>
Click the following link to verify your email
<a href="{{url('/verifyemail/'.$email_token)}}">Verify</a>

View untuk email sekarang sudah selesai. Selanjutnya, kalian akan membuat antrian baru yang akan mengirim email ke pengguna terdaftar.

Membuat Queue Jobs SendEmailVerification

Sekarang jalankan perintah artisan berikut untuk membuat queue jobs baru 
php artisan make:job SendEmailVerification

Saat perintah selesai, folder baru dengan nama Jobs muncul di dalam folder app bersama dengan class SendVerificationEmail. Sekarang kalian edit file ini sehingga bisa digunakan untuk mengirim email.

Pertama tambahkan Mail dan EmailVerification namespaces di dalamnya.
use Mail;
use App\Mail\EmailVerification;

Tambahkan juga variabel $user sama dengan yang dibuat di file EmailVerifivication. Selanjutnya, tambahkan parameter baru $user di contruct() dan berikan nilainya ke variabel class $user.
protected $user
public function __contruct($user)
{
   $this->user = $user;
}

atur proses pengiriman email di dalam metode handle()
public function handle()
{
   $email = new EmailVerification($this->user);
   Mail::to($this->user->email()->send($email);
}

function handle() adalah membuat contoh template verifikasi email yang dikirimkan ke Mail untuk mengirim email pengguna.

Update Auth Registration

Sebelum memulai, tambahkan 'email_token' dalam array yang diisi di model user.
protected $fillable = [
   'name', 'email', 'password', 'email_token',
];

Sekarang buka file RegistrationController.php dan tambahkan namespaces 
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use App\Jobs\SendVerificationEmail;

Tambahkan juga di function create() email_token
protected function create(array $data)
{
    return User::create([
       'name' => $data['name'],
       'email' => $data['email'],
       'password' => bcrypt($data['password']),
       'email_token' => base64_encode($data['email']),
    ]);
}

Untuk token email, saya telah menggunakan pengkodean base64_encode untuk alamat email pengguna. Selanjutnya saya akan menambahkan dua fungsi baru berikut didalamnya
public function register(Request $request)
{
   $this->validator($request->all())->validate();
   event(new Registered($user = $this->create($request->all())));
   dispatch(new SendVerificationEmail($user));
   return view('verification');
}

public function verify($token)
{
   $user = User::where('email_token', $token)->first();
   $user->verified = 1;
   if($user->save())
   {
      return view('emailconfirm', ['user' => $user]);
   }
}


Apa yang telah saya lakukan adalah mengesampingkan metode induk register() dan menambahkan dua baris baru di dalamnya:
dispatch(new SendVerificationEmail($user));
return view('verification');

Dengan cara ini, email dikirimkan ke antrian dan alih-alih langsung masuk ke pengguna, dan saya mengarahkan kembali ke halaman lain yang akan meminta untuk memverifikasi emailnya agar bisa melanjutkan. Selanjutnya saya telah membuat metode verify() baru yang akan memverifikasi pengguna dan tokennya. Selanjutnya, saya akan membuat view yang saya panggil dalam dua metode ini. 

Buatlah file baru di folder views dengan nama emailconfirm.blade.php dan salin kode berikut didalamnya: 
@extends('layouts.app')

@section('content')

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Registration Comfirmation</div>
                <div class="panel-body">
                    Your email is successfully verified. Click here to <a href="{{url('/login')}}">login</a>
                </div>
            </div>
        </div>
    </div>
</div>

@endsection

Pada titik ini kode sudah lengkap dan siap digunakan. Mari kita coba. Tambahka route berikut di file web.php untuk memverifikasi user:
Route::get('/verifyemail/{token}', 'Auth\RegisterController@verify');

Saatnya Menguji Verifikasi Email
Pada command prompt, jalankan perintah berikut untuk mulai antrian
php artisan queue:work

dan tambahkan tab baru di command prompt lalu jalankan server dengan perintah
php artisan serve

Biarkan jendela dari command prompt terbuka dan buka halaman register di tab lain. Isi form dan daftarkan user baru. Setelah mengklik tombol Register, kalian akan melihat bahwa halaman konfirmasi registrasi terbuka dengan cepat karena dikirim ke antrian. Untuk melihat email yang masuk, kalian bisa membukanya di mailtrap.io



Tutorial ini sudah selesai, semoga bermanfaat. Sampat ketemu di tutorial selanjutnya, keep learn and share. Terimakasih


Saturday, 28 October 2017

Tutorial Git Dasar : Kerja tim (Git Teamwork)


Seri kali ini saya akan membahai bagaimana kita menggunaka Git dalam kerja tim (teamwork)

Git Workflow

Setelah kalian menggabungkan origin/master ke local kalian, kalian telah siap berkontribusi dengan yang lain untuk beberapa pekerjaan kalian. Alur kerja dalam kolaborasi Git biasanya mengikuti permintaan :
  1. Ambil dan gabungkan perubahan dari remote.
  2. Buat sebuah branch untuk fitur proyek baru.
  3. Kembangkan fitur di branch kalian.
  4. Ambil dan gabungkan lagi dari remote (jika ada commitan baru).
  5. Push branch kalian untuk diperiksa.
Langkah 1 dan 4 adalah tahap perlindungan penggabungan konflik, yang terjadi ketika dua branch berisi perubahan file yang tidak bisa ditangani dengan perintah git merge. Langkah 5 merupakan git push yang akan kalian pelajari selanjutnya.

Git Push

git push origin nama_branch
akan ngepush branch kalian ke remote, origin. Tim dapat meninjau branch kalian dan menggabungkannya kedalam master, menjadikan bagian dari versi proyek.

Ringkasan

Sekarang kalian sudah cukup tahun untuk bisa memulai berkolaborasi dengan tim. 
  • Remote adalah repositori Git yang berada diluar folder proyek kalian

Tambahan :
  • git clone : Membuat salinan remote dilocal
  • git remote -v : Daftar remote proyek Git
  • git fetch
  • git merge origin/master : Menggabungkan origin/master kedala branch local kalian
  • git push origin nama_branch : Ngepush(mendorong) branch kalian ke remote origin.

Proyek Git bisanya dikelola di Github, sebuah situs web yang memiliki proyek Git untuk jutaan pengguna. Dengan Github kalian bisa mengakses proyek kalian darimanapun dan kapanpun dengan menggunakan alur dasar yang telah dipelajari disini.

Baca Juga : Tutorial Git Dasar dan Kolabirasi Dengan Github

Sebenernya tidak hanya Github, kalian juga bisa pake Bitbucket atau Gitlab, alusnya sama saja..
Seri Tutorial Git Dasar ini sudah selesai sampai disini, semoga bermanfaat. Jangan lupa comment di bawah ya jika ada saran dan supportnya.


Thursday, 26 October 2017

Tutorial Git Dasar : Membuat Branch (cabang) untuk versi berbeda


Ini merupakan lanjutan dari seri tutorial Git dasar, sebelumnya saya sudah membuatnya dengan judul
"Tutorial Git Dasar : Alur Kerja Git dan Cara Mundur Ke Versi Sebelumnya"
Sebelum lanjut ke materi branch pada postingan ini, alahkah baiknya kalian pelajari dulu alur git di atas.

Git Branch


Lanjutan dari posting sebelumnya, perlu diketahui bahwa kalian hanya bekerja disatu branch(cabang) Git yang disebut master. Git memungkinkan kita membuat sebuah branch baru untuk bereksperimen dengan versi sebuah proyek. Bayangkan kalian ingin membuat sebuah versi dari proyek kalian contoh menambahkan fitur, tetapi kalian tidak ingin untuk mengganggu master dari proyek kalian. Caranya dengan membuat branch (cabang) di repositori Git kalian.

Dalam postingan ini kita akan menggunakan Git branching untuk mengembangkan beberapa versi. Kalian bisa menggunakan perintah dibawah ini untuk mengetahui dimana posisi branch kita sekarang.
git branch

output dari perintah tersebuh adalah posisi branch pada saat ini, dengan tanda (*) diawalnya. Karena kita baru punya branch master, maka cuma itu yang muncul.

Ikhtisan Branching

Dibawah ini merupakan gambaran dari branch yang akan kita pelajari

Bulatan-bulatan digambar merupakan sebuah titik commit yang membentuk garis histori di Git. Branch baru adalah versi yang berbeda dari proyek Git. Ini berisi commit dari master dan sekaligus commitan yang tidak dimiliki oleh master. Sampai sini semoga bisa dipahami.

Git Branch 2

Saat ini proyek Git hanya memiliki satu branch master. Untuk membuat branch baru gunakan perintah
git branch nama_branch

Disini nama_branch akan menjadi branch baru yang kalian buat. Pastikan membuat branch sesuai dengan apa yang menjadi tujuan branch dan nama branch tidak boleh berisi space. Cobalah untuk membuat branch baru.

Git Checkout

Setelah kalin membuat branch baru. Kalian bisa pindah ke branch yang lain dengan menggunakan perintah
git checkout nama_branch

Setelah kalian berpindah branch seperti biasa kalian bisa melakukan commit tanpa harus khawatir merubah source code di branch master.
Untuk mengetahui lebih jelasnya coba kalian modifikasi di direktori kerja kalian setelah itu tambahkan ke staging area dan commit.

Git Merge

Setelah kalian mempunyai dua branch (cabang), bayangkan jika kalian ingin menyertakan semua perubahan dari branch master dan branch yang baru. Kita bisa dengan mudah menyelesaikan hal ini dengan menggabungkan branch baru ke master branch dengan
git merge branch_baru

Semua perubahan yang berada di branch_baru akan di merge ke branch master. Dan apa yang dimiliki oleh branch baru sekarang dimiliki juga oleh master.

Merge Conflict

Penggabungan itu akan berhasil jika master tidak berubah sejak kita commit di branch baru. Git akan mengetahui perubahan perubaha di setiap branch. Jika kalian memperbarui di master sebelum kalian menggabungkannya dan commitan tersebut merubah text persis dengan yang kalian kerjakan di branch baru, ini akan terjadi konflik antar source dari branch baru. Git akan kebingungan source code mana yang akan digunakan dan disimpan.
Git akan menggunakan tanda untuk menunjukan versi master dan versi branch baru seperti contoh
<<<<<<<<<< HEAD
master version of line
===============
branch baru version of line
>>>>>>>>>> BRANCH BARU
Jika kalian memutuskan untuk menggunakan branch baru. Delete line di master/Head dan delete juga tanda >>>>> <<<<< dan ====== .

Delete Branch
Di Git, branch merupakan sarana untuk mencapai tujuan. Kalian membuatnya untuk mengerjakan fitur baru di proyek kalian, namun tujuan akhirnya adalah menggabungkannya kedalam master. Setelah branch diintegrasikan dengan master, ia telah melakukan tujuannya dan dapat dihapus. Untuk menghapus branch gunakan perintah
git branch -d nama_branch

Ringkasan

Luangkan waktu sejenak untuk meninjau kembali konsep dan perintah utama.

  • Git branching memungkinkan pengguna untuk bereksperimen dengan versi yang berbeda didalam sebuah proyek. 
Perintah dibawah berguna dalam alur kerja Git:
  1. git branch : Daftar semua branch Git
  2. git branch nama_branch : Membuat branch baru
  3. git chekout nama_branch : Digunakan untuk beralih dari branch satu ke branch yang lainnya
  4. git merge nama_branch : Digunakan untuk menggabungkan perubahan file dari branch yang satu ke branch yang lainnya.
  5. git branch -d nama_branch : Menghapus branch yang ditentukan.




Wednesday, 25 October 2017

Tutorial Git Dasar : Alur Kerja Git dan Cara Mundur Ke Versi Sebelumnya


Beberapa minggu lalu saya sudah membahas apa itu Git di postingan sebelumnya dengan judul
"Tutorial Git Dasar dan Kolaborasi dengan Github"
Disana saya menjelaskan bagaimana projek diupload ke github dan beberapa command Git yang biasa di pakai oleh pengembang. Hari ini saya ingin menjelaskan lagi perintah-perintah Git yang kemarin terlewatkan.

Sekilas sebagai pengingat kembali, Git merupakan perangkat lunak yang memungkinkan anda untuk melacak perubaha-perubahan pada sebuah proyek dari waktu ke waktu. Git bekerja dengan merekam semua perubahan yang kalian buat dalam sebuah proyek, menyimpan perubahan tersebut lalu mengijinkan kalian untuk merefer sesuai kebutuhan.

Git init

Ini awal dari semuanya, yang mana kata init merupakan sebuah inizialisasi yang dibutuhkan Git untuk memulai melacak perubahan didalam proyek kalian. Untuk memulainya dengan cara
git init

Git Workflow

Kita telah memiliki proyek Git. Proyek Git dapat dianggap memiliki tiga bagian
  1. Direktori kerja : Dimana kalian akan melakukan semua pekerjaan, seperti membuat, mengedit, menghapus dan mengatur file.
  2. Area Stage (stagging area) : Dimana anda akan mencantumkan perubahan yang kalian buat di direktori kerja.
  3. Repositori : Dimana Git secara permanen menyimpan perubahan tersebut sebagai persi proyek yang berbeda.

Alur kerja Git terdiri dari file pengeditan di direktori kerja, menambahkan file ke area stage, dan menyimpan perubahan ke area repositori Git. Di Git kita menyimpan perubahan dengan commit, yang akan kita pelajari lebih lanjut dipostingan ini.

Coba lihat dan pahamilah diagramnya sebelum kita melanjutkan. Ini akan membantu untuk mengenal alur kerja Git.

Git Status

Saat membuat proyek, kalian akan merubah isi direktori kerja kalian. Untuk melihat status perubahan yang kalian buat, kalian bisa chek status perubahan tersebut dengan
git status

Git Add

Agar Git mulai melacak file yang dibuat di proyek kerja, file tersebut perlu ditambahkan ke area stage. Kalian bisa menambahkan file ke area stage dengan  
git add nama_file
atau anda bisa menggunakan tanda "titik" untuk menggati nama_file, ini biasanya digunakan jika kalian memiliki banyak file.

Git Diff

Setelah anda tahu cara menambahkan file ke staging area, Sekarang bayangkan jika kalian telah memasukan file ke staging area dan kalian ingin melacak perubahan apa yang dibuat, kalian bisa mengecek perbedaan antara direktori kerja dengan area staging dengan
git diff nama_file

Git Commit

Commit adalah langkah terakhir dalam alur kerja Git kita. Sebuah Commit secara permanen menyimpan perubahan dari area staging didalam repositori. Git Commit adalah perintah yang akan kita lakukan selanjutnya. Namu ada satu lagi kode yang diperlukan untuk melakukan commit, opsi -m yang dilanjukan dengan sebuah pesan, seperti ini contohnya
git commit -m "Pesan commit"

Standar convention untuk pesan commit:
  • Harus dalam tanda petik
  • Ditulis dalam bentuk present tense
  • Harus ditulis secara singkat (50 karakter atau kurang) ketika menggunakan

Git Log

Dalam git adakalanya kalian akan mengalami untuk merujuk kembali ke versi sebelumnya atau versi yang lebih awal. Hasil commit yang dilakukan tersimpan dengan baik secara kronologi di repositori, histori-histori commit bisa kalian lihat dengan cara 
git log

Ringkasan

Sekarang kalian sudah mengenal alur kerja dasar sebuah Git. Sampai sini, coba kalian praktekan dimulai dari membuat direktori kerja lalu lakukan initialisasi dengan git init dan seterusnya dan seterusnya ....
  • Git adalah sistem kontrol versi standar untuk pengembang web
  • Guanakan perintah Git untuk melacak perubahan-perubahan yang dilakukan pada sebuah proyek.
    • 1. git init membuat repositori Git baru.
    • 2. git status memeriksa isi direktori kerja dan area staging.
    • 3. git add menambahkan file dari direktori kerja ke area staging.
    • 4. git diff menunjukan perbedaan antara direktori kerja dengan area stagin.
    • 5. git commit menyimpan semua perubahan secara permanen dari area staging di repositori.
    • 6. git log menampilan semua daftar commit yang dilakukan sebelumnya.

Git Reset

Membuat proyek sama halnya seperti kalian pergi kehutan ada kalanya kalian tersesat dan tak tau arah pulang.
Maka dari itu Git memungkinkan kalian mundur ke bagian sebelum kalian belok ke arah yang salah. Kalian bisa melakukannya dengan cara ini
git reset commit_SHA
Perintah ini bekerja dengan menggunakan 7 karakter pertama dari SHA commit sebelumnya. Misalnya jika SHA commit sebelumnya dalah 5d692065cf51a2f50ea8e7b19b5a7ae512f633ba gunakan
git reset 5d69206

Git reset review

Untuk lebih memahasi git reset perhatikan diagram dibawah ini. Setiap lingkarang mewakili commit.

Before Reset
  • HEAD adalah commit terbaru
After Reset
  • HEAD berubah menjadi commit pilihan kalian sebelumnya.
  • Linkaran abu-abu sekarang bukan lagi bagian dari proyek kita.
  • Pada intinya kalian telah merubah sejarah proyek. :D

Ada tiga cara berbeda untuk mundur di Git. Kamu bisa menggunakan perintah ini untuk membatalkan sebuah perubahan yang dilakukan di direktori kerja kalian.
  1. git checkout HEAD nama_file : Membuang perubahan dalam direktori kerja
  2. git reset HEAD nama_file : Unstage perubahan file di staging area
  3. git reset commit_SHA : Memperbaharui ke versi commit sebelumnya dalam histori commit kalian.





Monday, 23 October 2017

Membuat aplikasi chatting berbasis web: Socket io tutorial websocket menggunakan express js



Disini saya akan mencoba membuat aplikasi chatting berbasis web sederhana menggunakan socket io dan express js.

Apa itu websocket

  • Komunikasi antara klien(browser) dan server
  • Arus data secara real-time

Websocket adalah tekenologi canggih yang memungkinkan komunikasi interaktif secara real-time antara user dan server. Menggunakan protokol yang sama sekali berbeda yang memungkinkan aliran data dua arah. Dan ini membuatnya unik terhadap HTTP.

Jika kalian seorang pengembang, pasti kalian sudah tahu apa itu http atau https, setiap hari kalian akan melihatnya dibrowser kalian.
HTTP bekerja selalu diawali dengan sebuah pertanyan/permintaan untuk mendapatkan respon. Kalian harus selalu tanya terlebih dahulu ke server apakah ada pesan baru atau tidak. Begitulah seterusnya tanya dan tanya.
Berbeda dengan websocket dia secara sendirinya akan memberi respon atau pesan ke kita tanpa diminta/ditanya. 
Kalian hanya mendengarkan curhatan server jika server mempunyai pesan baru. Hahaha terlihat lebih praktis kan.

Websocket digunakan untuk :
  1. Game online dengan banyak pemain
  2. Pengeditan code secara kolaborasi
  3. Aplikasi chatting
  4. Kanvas gambar online
  5. Aplikasi to-do realtime dengan banyak pengguna
Saya tidak akan panjang lebar untuk menjelaskan websocket karena keterbatasa pengetahuan, dan juga agar kalian penasaran untuk mencoba mengexplore lebih banyak tentang websocket. Banyak referensi pendukung jika kalian mau.

Dalam tutorial ini saya menggunakan socket io sebagai librarinya dan node js dengan express js sebagai servernya. Jika kalian belum install node js, download dan install terlebih dahulu di website resminya node js
Jika sudah, buat sebuah folder dan berinama "websocket". Buka command prompt dan arahkan dimana folder websocket berada. Masukan perintah 

npm init
Perintah ini akan menghasilkan file package.json sebagai deskripsi dari aplikasi yang kita buat. Kita akan ditanya mengenai aplikasi yang akan kita buat, Sebagai contoh :
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (websocket)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author: crocodele
license: (ISC)
About to write to d:\Robi\Node\websocket\package.json:

{
  "name": "websocket",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "crocodele",
  "license": "ISC"
}


Is this ok? (yes) yes

Selanjutnya kita akan download framework express js yang populer dinunia nodejs. Caranya dengan perintah
npm install express --save

Setelah selesai kalian akan melihat folder dengan nama node_modules yang berisi dependency yang diperlukan.

Selanjutnya kika juga perlu install nodemon sebagai tools yang dibutuhkan server untuk bisa autoreload ketika kita merubah source code. Dengan perintah:
npm install nodemon --save-dev

Setelah selesai mari kita buat file index.js dan masukan kode dibawah ini:
var express = require("express");

//App setup
var app = express();
var server = app.listes(4000, function(){
 console.log("Listening to requests on port 4000");
});

File ini sebagai server yang digunakan untuk aplikasi kita yang bisa kita kases dengan port 4000. Mari kita coba apakah sudah jalan apa belum. Buka command prompt dan ketikan perintah
nodemon index

jika berhasil output yang keluar seperti:
[nodemon] 1.12.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index index.js`
Listening to request on port 4000

Sekarang setelah server siap kita coba bikin folder baru dengan nama "public" didalam folder "websocket" sekalian bikin file baru dengan nama index.html dan style.css. Buka file index.html dan masukan kode dibawah ini :
<html>
   <head>
      <meta charset="utf-8">
      <title>websocket 101</title>
      <link href="/style.css" rel="stylesheet"/>
   </head>
   <body>
      <h1>Hello World</h1>
   </body>
</html>

lalu modifikasi index.js dan tambahkan kode dibawah ini:
app.use(express.static("public"));

kode tersebut akan membaca static file yang kita buat yaitu index.html. Coba refresh browser untuk melihat perubahannya.
Sekarang kita modifikasi file style.css dengan kode dibawah ini:
body {
   font-family: "Nunito";
}

h2 {
   font-size: 18px;
   padding: 10px 20px;
   color: #575ed8;
}

#crocodele-chat {
   max-width: 600px;
   margin: 30px auto;
   border: 1px solid #ddd;
   box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.05);
   border-radius: 2px;
}

#chat-window {
   height: 400px;
   overflow: auto;
   background: #f9f9f9;
}

#output p {
   padding: 14px 0px;
   margin: 0 20px;
   border-bottom: 1px solid #e9e9e9;
   color: #555;
}

#feedback p {
   color: #aaa;
   padding: 14px 0px;
   margin: 0 20px;
}

#output strong {
   color: #575ed8;
}

label {
   box-sizing: border-box;
   display: block;
   padding: 10px 20px;
}

input {
   padding: 10px 20px;
   box-sizing: border-box;
   background: #eee;
   border: 0;
   display: block;
   width: 100%;
   background: #fff;
   border-bottom: 1px solid #eee;
   font-family: Nunito;
   font-size: 16px;
}

button {
   background: #575ed8;
   color: #fff;
   font-size: 18px;
   border: 0;
   padding: 12px 0;
   width: 100%;
   border-radius: 0 0 2px 2px;
}

Socket io

Jika sudah mari kita install socket io. Socket io adalah librari javascript yang menangani komunikasi antara klien dan server secara realtime. Penjelasan lebih tentang socket.io bisa kalian kunjungi langsung ke website resminya Socket.io


Cara install socket.io kita tinggal pergi ke command prompt dan ketik perintah:
npm install socket.io --save

perintah tersebut akan mendownload semua package yang diperluka. Setelah itu buka index.js modifikasi menjadi
var express = require("express");
var socket = require("socket.io");

//App Setup
var app = express();
var server = app.listen(4000, function() {
   console.log("Listening to request on port 4000");
});

//Static files
app.use(express.static("public"));

//Socket Setup
var io = socket(server);

io.on("connection", function(socket) {
   console.log("made socket connection", socket.id);
});

Modifikasi index.html menjadi
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>websocket 101</title>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
      <link href="/style.css" rel="stylesheet"/>
   </head>
   <body>
      <h1>Hello World</h1>
      <script src="/chat.js"></script>
   </body>
</html>

disana kita tambahkan script socket.io.js yang kita ambil dari website resminya disini. dan juga menambahkan script chat.js. Karena kita belum punya file dengan nama chat.js kita buat terlebih dahulu dan isikan kode dibawah ini:
var socket = io.connect("http://localhost:4000");

untuk mencobanya kita tinggal ketikan perintah
nodemon index

lalu refresh browser dan lihat di command prompt, setiap kali kita refresh browser akan ada pesan "made socket connection dan id_socket" itu berarti server socket telah berhasil dibuat.



Lanjut ketahap selanjutnya, kita buka index.html hapus kode <h1>Hello World</h1> dengan kode dibawah ini :
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>websocket 101</title>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
      <link href="/style.css" rel="stylesheet"/>
   </head>
   <body>
      <div id="crocodele-chat">
         <div id="chat-window">
            <div id="output"></div>
         </div>
         <input type="text" id="handle" placeholder="Handle">
         <input type="text" id="message" placeholder="Message">
         <button type="button" id="send">Send</button>
      </div>
      <script src="/chat.js"></script>
   </body>
</html>
Jika tahapan diikuti dengan benar, tampilan didepan akan menjadi seperti dibawah ini;


Selanjutnya buka kembali chat.js tambahkan query DOM didalamnya untuk menangkap value yang diberikan di index
var message = document.getElementById("message");
handle = document.getElementById("handle");
btn = document.getElementById("send");
output = document.getElementById("output");

tambahkan emit event dibawahnya:
btn.addEventListener("click", function() {
   socket.emit("chat", {
      message: message.value,
      handle: handle.value
   });
});

dan tambahkan juga code untuk ngepush message ke HTML
socket.on("chat", function(data) {
   output.innerHTML +=
      "<p><strong> " + data.handle + ": </strong>" + data.message + "</p>";
});
kode emit event diatas ini digunakan ketika ngeklik button send dan memasukannya ke variable message dan handle, kemudian data dimasukan ke tag HTML dengan id "output".

Setelah event emit dibuat sekarang beralih ke index.js dan tambahkan kode dibawah ini dan tempatkan didalam io.on tepat dibawah console.log:
socket.on("chat", function(data) {
     io.sockets.emit("chat", data);
});

Sekarang coba buka command prompt dan jalankan perintah nodemon index, lalu refresh browser. Kita sudah bisa memasukan nama dan isi pesan. Pesan akan muncul diarea output. Coba tes dengan menggunakan dua browser.


Sekian tutorial kali ini, referensi code bisa kalian ambil di github, jangan lupa untuk share dan comment ya..

Terimakasih

Thursday, 19 October 2017

Tutorial Git Dasar dan Kolaborasi Dengan Github

Tutorial Git Dasar Dan Kolaborasi Dengan Github

Apa itu git ?


Git adalah sistem kontrol versi terdistribusi yang pada dasarnya adalah sistem yang mencatat perubahan-perubahan pada file kita dari waktu ke waktu. Kita dapat mengingat kembali source code versi dengan spesifik file pada waktu tertentu.
Banyak orang dapat dengan mudah berkolaborasi dalam sebuah proyek dan memiliki versi file proyek mereka sendiri dikomputer mereka.

Git bisa memberikan kita:
  1. Penyimpanan revisi history proyek hanya dalam satu direktori.
  2. Kembali ke versi apapun dalam satu proyek sesuai yang diinginkan.
  3. Bekerja pada fitur baru tanpa mengganggu basis kode utama.
  4. Mudah berkolaborasi dengan pengembang lain atau kerja tim.

Untuk memulainya kita harus siapkan terlebih dahulu git di local repo kita dengan cara download dan install disini.
Setelah proses instalasi selesai coba buka command prom dan berikan perintah:
git --version 
Perintah tersebut akan memperlihatkan versi git di local kita. Sekarang kita configurasi git kita untuk seting username dengan peritah:
git config --global user.name namakita 
setelah itu setting juga email dengan perintah:
git config --global user.email emailkita@gmail.com 
kalo kita ingin melihanya username dan email configurasi di git hanya dengan perintah:
git config --global user.name
git config --global user.email 
Untuk persiapan environtmennya sudah selesai, sekarang kita mulai membuat sebuah proyek sample kecil-kecilan yang akan kita integrasikan pake git dan dipush ke github.
Biar lebih gampang kita samakan untuk mengarahkan command prompt kita ke directory d:, dan kita buat folder dengan perintah:
mkdir test
dan masuk ke folder test dengan perintah
cd test
buat file index.html dengan perintah
touch index.html
kalo tidak berhasil bikin secara manual saja.
Masukan perintah
git init
Perintah ini akan menciptakan sebuah folder git untuk initialisasi awal git terpasang di directory yang akan kita push nantinya. Sekara kita buka file index.html yang telah kita buat tadi menggunakan text editor kesayangan anda sublime, note++ dan apapun itu, dan isikan dengan code dibawah ini :
<!DOCTYPE html>
<html>
   <head>
      <title></title>
   </head>
   <body>

   </body>
</html>
Kembali lagi ke command prompt kita masukan perintah:
git status
perintah ini akan menampilkan file file yang telah di modify dan belum di push ke github. Berhubung file-file ini belum di add ke staging maka warnanya akan merah sebaliknya kalo sudah di staging akan berwatna hijau.
Sekarang kita coba masukan file yang di modify tadi ke staging dengan perintah:
git add index.html
sebenernya kalo kita mempunyai banyak file, kita bisa juga menggunakan perintah yang lebih singkat agar tidak usah menyebutkan nama filenya satu persatu
git add .
Selanjutnya coba kita cek kembali statusnya dengan perintah git status yang tadi. Dan filenya akan berubah menjadi warna hijau. Prosedur yang dilakukan ketika commit file kita ke git kurang lebih sebagai berikut.

Sedikit gambaran, kita asumsikan dalam 3 bagian:
  1. Modiff
    File awal
  2. Staging
    File yang ditandai untuk dicommit
  3. Commit
    File yang sudah di commit dan siap untuk di Push

Sekarang kita akan commit file yang kita rubah dengan perintah:
git commit -m "Keterangan apapaun bebas disini"
buka kembali text editor dan tambahin title di index.html menjadi
<!DOCTYPE html>
<html>
    <head>
       <title>Commit ke-2</title>
    </head>
    <body>

    </body>
</html>
coba cek statusnya dan masukan ke staging lalu commit.
Kita bisa melihat history commit yang kita lakuka tadi dengan perintah:
git log
biar lebih mudah melihatnya tambahin -oneline dibelakangnya
git log -oneline
untuk beralih ke source code yang awal kita tinggal masukan perintah
git checkout masukan_kode_commit
source code akan kembali kesemula dan branch akan beralih yang tadinya master menjadi kode commit. untuk kembali lagi ke master masukan perintah:
git checkout master
jika kita ingin mereset semua source code ke versi sebelumnya kita masukan lagi perintah:
git reset masukan_kode_commit
Source code akan kembali ke versi sebelumnya dan menghapus history commit versi dibawahnya.
Sekarang kita coba membuat branch, branch biasanya digunakan untuk panambahan feature applikasi kita, jadi setiap fungsi/feature memiliki branch masing-masing. tujuannya untuk lebih mudah mengontrolnya jika ingin dicopot dari aplikasi. Perintah untuk membuat branch tinggal masukan perintah:
git branch nama_branch
sekarang chek kita punya branch bearapa dengan perintah:
git branch -a
alihkan branch dari master menjadi nama_branch yang kita buat tadi dengan perintah:
git checkout nama_branch
sekarang kita buat file baru dengan nama style.css dan masukan kode dibawah ini:
body{
  color: red;
}
coba cek status dan masukan ke staging lalu commit. Setelah itu alihkan branch ke master. Maka file style.css akan hilang.
Coba kembali bikin branch baru dengan nama branch bebas dan bikin file baru dengan nama yang sama header.css dan masukan code berikut:
header{
  color: #ffffff;
}
jadi kita mempunya 3 branch termasuk master. Jika kita ingin menyatukan semua file kita switch terlebih dahulu ke branch master dan menggunakan perintah:
git merge nama_branch

Github

Sebelumnya saya telah menjelaskan beberapa repositori, Github, Bitbucket, dan Gitlab di postingan sebelumya.
Github adalah layanan yang memungkinkan kita mengatur repositori host.
Pusat repositori online yang dapat diakses oleh beberapa anggota tim.
sekarang login ke github.com jika belum punya akun silahkan daftar terlebih dahulu.
Setalah semua siap coba bikin new repository dengan nama repository bebas terserah, masukan deskripsi sesuka kalian dan klik tombol create repository. Kalo sudah, copy url gitnya, lalu buka kembali command prompt cek terlebih dahulu git status jikalau ada file yang belum di commit.
Kalo ada commit terlebih dahulu setelah semua selesai masukan perintah:
git push paste_url_git master
setelah selesai kita coba buka github.com, kita akan melihat source local kita berada disana.
Lakukan cara diatas secara berutan kalo ingin ngpush source ke github, dengan cara kita add, commit dan push.
Karena ketika ngpush kita akan kesulitan dengan url yang panjang ada kita bisa rubah url yang panjang itu menjadi lebih singkat dan gampang, masukan perintah:
git remote add origin paste_url_git
Pada dasarnya kita akan menyimpan url_git kedalam variable origin, jika kita ingin ngepush kita tinggal masukan perintah:
git push origin master
gimana lebih mudah kan?.
Untuk tutorial dasar github sudah selesai sampai disini. Dan satu lagi tambahan jika kita ingin mengambil source code di github jikalah kita ingin mengakses di komputer lain. Kita tinggal masukan perintah:
git clone paste_url_git
semua source code yang berada di github akan ke download ke repository local kita.
Sekian tutorial dasar Github kali ini semoga bermanfaat..
Please tinggal jejak di kolom komen ok. Terimakasih

Saturday, 14 October 2017

Github, Bitbucket, dan Gitlab

Hallo semua, selamat berakhir pekan. Kembali lagi untuk minat ngeblog setelah sekian lama tidak nulis karena hal kerjaan yang padat dan mood yang kurang bagus. Haha …

Hari ini saya ingin share beberapa repository management service yang sangat terkenal antara github, bitbucket dan gitlab. Ya semua orang dikalangan programmer dan sekitarnya pasti sudah tahu. Repository management merupakan kunci dari pengembang software secara kolaboratif. Dan memungkinkan mereka untuk mengelola perubahan dari setiap source code dan file terkait, membuat dan maintenance dengan beberapa versi di satu tempat. Bakalan ada banyak keuntungan yang dirasakan oleh pengembang software kalo menggunakan Manajemen repositori, bahkan misal ketika kalian bekerja sebagai single fighter sekalipun. Menggunakan manajemen repositori memungkinkan tim bergerak lebih cepat dan menjaga efisiensi.
Dibawah ini saya akan terangkan sekilas repositori-repositori yang terkenal pada saat ini.
  1. Github

    Github merupakan platform penyimpanan berbasis GIT yang awal diluncurkan pada tahun 2008 oleh Tom Preston-Werner, Chris Wnstrath, and PJ Hyatt. Ini adalah host repositori terbesar dengan lebih dari 38+ juta proyek.

  2. Bitbucket

    Bitbutket diluncurkan pada tahun 2008 juga oleh sebuah startup Australia, yang awalnya hanya mendukung proyek mercurial. Pada tahun 2010 Bitbucket diakuisisi oleh Atlassian dan mulai tahun 2011 ini juga mendukung GIT hosting, yang kini menjadi fokus utamanya.

  3. Gitlab
    Gitlab dimulai sebagai proyek Dmitriy Zaporozhets dan Valery Sizov yang memberikan alternatif solusi pengelolaan repositori yang tersedia pada tahun 2011. Dan pada tahun 2012 gitlab.com diluncurkan.

Fitur Dasar
Masing-masing dari ketiga platform ini adalah satu kesatuan terbesar dengan sendirinya ketika sampai pada fitur dan kemampuan. Membuat perbandingan fitur secara rinci tidak bisa saya jelaskan disini. Tapi kalau kita hanya melihat fitur dasar, semuanya hampir sama, mereka menunjukan kesamaan. Seperti:
  • Pull Request
  • Code Review
  • Inline Editing
  • Issue Tracking
  • Hosted Static Webpage
  • Fork / Clone Repository
  • 3rd Party Integration
Untuk lebih jelasnya kalian bisa mengunjungi halaman fitur dari Github, Bitbucket, dan Gitlab 

Open Source?
Dari ketiga platform manajemen repositori, hanya Gitlab yang memiliki versi open source. Source code Gitlab Community bisa kalian cek di situs mereka.
Github yang terkenal dengan Open Source Friendly dan host dengan jumlah terbesar (19.4M+) dari proyek open source ternyata bukan open source.
Bitbucket bukan open source tetapi setelah membeli versi self-hosted source code disediakan lengkap dengan pilihan kostimisasi produk.

Dimana tempat terbaik untuk menemukan proyek publik dan terhubung dengan pengembang lain?
Semua repositori yang disebutkan diatas memiliki fungsi untuk menemukan proyek publik dan terlepas dari Gitlab masing-masing menawarkan kemampuan untuk mengikuti pengguna lain.
Meskipun Github bukan open source, dia masih merupakan sarang untuk kolaborasi open source. Sejauh ini github merupakan proyek publik dan open source terbesar dan menampung banyak proyek signifikan. Dengan adopsi awal fitur sosial dan dengan hosting proyek publik secara gratis, ini jelas merupakan hub sosial antara pengembang profesional dan semua orang yang tertarik pada pengembangan software. Terlebih lagi katanya profil github yang menarik dapat membantu kalian untuk mendapatkan pekerjaan yang bagus. Semakin banyak HRD-HRD diluar sana menyukai kandidat untuk calon pekerjanya dengan profil Github yang aktif. WADAW

Thursday, 24 November 2016

Codeigniter : Pengenalan Controller dan Model (part 2)


Sebelumnya saya udah buat Tutorial Codeigniter part 1. Kali ini saya akan melanjutkan ke tahap dua yaitu penjelasan dari setiap direktori yang dipunyai CI

List :
Tutorial CodeIgniter Part 1

Struktur CI terbagi kedalam 3 bagian utama yaitu :
  1. Applicarion
  2. System
  3. User_guide

A  P  P  L  I  C  A  T  I  O  N

Ini adalah folder dimana semua code aplikasi kalian akan disimpan, dan di folder inilah kalian akan mengembangkan aplikasi. Di dalam folder ini terdapat beberapa folder lagi, yang terdiri dari :
  • Cache : folder ini akan menampung semua halaman cache. Cache ini akan meningkatkan kecepatan ketika kita mengakses halaman.
  • Config : folder ini berisi file-file untuk mengconfigurasi applikasi kalian, seperti contoh koneksi ke database dll. Maka ketika kalian ingin terhubung dengan database carilah di folder ini.
  • Controller : folder ini berisi file pengontrol atau pengendali applikasi kalian, controller ini merupakan pondasi dari applikasi yang akan kalian buat. Tugas controller adalah ya mengontrol semua perintah.
  • Core : folder ini berisa class-class dasar dari applikasi kalian.
  • Helper : dalam folder ini kalian dapat menambahkan class-class pemdukung ke dalam applikasi kalian.
  • Model : folder ini berisi file yang secara langsung mengarah ke database, atau sebagai pintu terhubungnya ke database. Tapi sangat berbeda dengan config.
  • Third Party : folder ini akan berisi plugin-plugin yang diperlukan untuk applikasi yang kalian sedang bangun. 
  • View : Nah ini merupakan folder dimana semua file html berkumpul. File yang akan menampilkan halaman web kita. 

SYSTEM
Folder ini merupakan folder yang berisi kode inti dari codeigniter, yang membantu mempermudah membangun sebuah applikasi berbasis web.
Kode-kode inti ini dibagi kedalam beberapa folder seperti :
  • Core : folde ini berisi file inti, dan jangan di coba-coba untuk merubahnya.
  • Database : berisi semua driver database inti dan keperluan-keperluan lainnya.
  • Font : folder yang berisi informasi perihal font dan pendukung lainnya.
  • Helper : folder yang berisi file pembantu CI yang paling mendasar. Seperti cookie, Url, tanggal dll.
  • Language : folder yang berisi configurasi dari bahasa.
  • Libraries : folder yang berisi file-file perpustakaan standar dari CI yang membantu kalian dalam kirim email, kalendear, file upload dan banyak lagi. Kalian bisa membuat librari sendiri untuk mengganti librari standar bawaan dari CI, tetapi kalian buat di folder APPLICATION jangan disini.

USER_GUIDE
Folder ini berisi buku petunjuk dari CI. Ini merupaka buku versi offline dari buku petunjuk yang ada di website CI. Dengan ini kalian bisa mempelajari fungsi dari berbagai librari, class dll. 

Sekarang kita lanjut ke pembahasan MVC Framework. Pada dasarnya CI dibangun dengan pola pengembangan Model - View - Controller  yang memisahkan logic applikasi dengan presentasi. Dalam prakteknya ini memungkinkan web kalian mengandung scrip yang sedikit karena memisahkan presentasi dengan scrip php.


Model 
Model mewakili struktur data kalian. Biasanya, model ini akan berisi fungsi yang akan membantu kalian mengambil, memasukan, dan memperbarui informasi di database.
View
View adalah informasi yang sedang disajikan kepada pengguna atau bisa dibilang halaman-halaman web. Di dalam CI, view bisasanya dibagi kedalam beberapa bagian seperti heade dan footer.
Controller
Controller merupakan perantara antara model, view dan sumber daya lainnya yang diperlukan untuk memproses permintaan-permintaan dari HTTP dan menghasilkan halaman web

C  O  N  T  R  O  L  L  E  R

Sekarang kalian pergi ke folder application/controller. Kalian akan menemukan 2 file disana, index.html dan welcome.php. File ini merupakan bawaan dari CI.

biarkan dua file tersebut sebagaimana mestinya, kita akan membuat file baru di folder tersebut dengan nama test.php dan masukan script dibawah ini
<?php 
   class Test extends CI_Controller {
      public function index() { 
         echo "Hello World!"; 
      } 
   } 
?>

Perhatikan class extent CI_Controller. Class ini harus ada ketika kalian membuat controller.
Ketika kalian sudah membuat controller Test.php diatas, kalian bisa panggil dengan url http://localhost:8080/codeigniter/index.php/test. Kebetulan saya menggunakan port 8080 di localhost dan codeigniter merupakan nama folder dari projek CI saya.

V  I  E  W

View ini meruopakan halaman web, bisa menjadi sederhana atau bisa juga komplek, yang dapat dipanggil oleh controller. Halaman web bisa berisi header, footer, sidebar dll. Dan view tidak bisa dipanggil langsung. Mari kita coba membuat file view, bikin file dengan nama test.php dan simpan file tersebut didalam direktori Application/view dan copy contoh source dibawah ini:
<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
   </head>
   <body> 
      CodeIgniter View Example 
   </body>
</html>
dan coba kalian rubah function index di controller Test.php dengan source dibawah :
$this->load->view('name');
name ini merupkana nama dari file view yang kita buat tadi, karena kita membuat dengan nama test, maka ganti name ini menjadi test dan tidak perlu memakai .php
$this->load->view('test');
sehingga controllernya menjadi :
<?php 
   class Test extends CI_Controller { 
      public function index() { 
         $this->load->view('test'); 
      } 
   } 
?>
Sekaranga coba refresh url yang tadi, maka akan berubah dari "hello world" menjadi "CodeIgniter View Example".

M  O  D  E  L

Class model dirancang untuk berkomunikasi dengan informasi di database. Analoginya ketika kalian membuat sebuah aplikasi yang memanage user, maka kalian harus mempunyai model yang berisi fungsi untuk menambah data, mengupdate data, menghapus data dll.
Model tersimpan di direktori application/model, berikut ini merupakan code dimana model ini dibuat
<?php 
   Class Model_name extends CI_Model { 
 
      Public function __construct() { 
         parent::__construct(); 
      } 
   } 
?> 
di Model_name ini merupakan nama dari class model, untuk penamaan sendiri nama model ini bebas sesuai dengan apa yang kalian inginkan. Setiap class model harus mewarisi CI_Model bawaan dari CI juga awal hurup dari nama model harus capital. Untuk memanggil model di controller cukup dengan memasang code dibawah ini :
$this->load->model('model_name');
Setalah kode ini dipasang maka kalian bisa menggunakan metode-metode yang ada di model tadi dengan menggunakan code :
$this->model_name->method();

Penjelasan tentang CI dicukupkan sekian sampai part ini, untuk part selanjutnya saya akan langsung praktek bagaimana membuat aplikasi dengan CI..

Terimakasih atas kunjungannya.. Saya berharap kritik dan sarannya demi kebaikan blog ini..

Saturday, 15 October 2016

CodeIgniter : Setup Environment dan Installasi (part 1)


Hallo semua,,
sudah lama tidak ngeblog nihh.. ok kali ini banyak yang minta untuk diajarin bagaimana cara membuat aplikasi dari CodeIgniter a.k.a CI. Oleh karena banyak permintaan itu saya akan membagikan sedikit catatan saya untuk kalian yang ingin belajar CI.

List :
Tutorial CodeIgniter Part 1
Tutorial CodeIgniter Part 2

Overview sedikit tentang CI.
CI adalah sebuah framework pengembang aplikasi, yang digunakan untuk mengembangkan aplikasi berbentuk website dan CI ini mengguankan PHP juga berbasis opersource. CI memiliki banyak fungsi yang dapat digunakan sehingga mempercepat dalam mengembangkan sebuah website.

Karena CI menggunakan PHP, alangkah baiknya jika kalian mengerti sedikit tentang PHP, karena dengan begitu CI akan membuat pekerjaan anda menjadi lebih mudah berkat libraries dan helpersnya. CI juga aman dari serangan-serangan yang terjadi di website.

Untuk mengintal CI cukup mudah, cukup ikuti beberapa langkah dibawah ini

  1. Download terlebih dahulu di sini.
    Ada dua versi yang terbaru adalah versi 3.x 
  2. Unzip folder.
  3. Upload semua file dan folder CI kedalam server kalian, atau jika server kalian local, kalian bisa pindahkan file dan foldernya di folder htdocs sesuai dengan xampp yang kalian instal. Jika kalian belum mengintsal xamppnya, kalian instal terlebih dahulu, saya tidak akan menjelaskan bagaimana cara menginstal xampp, kalian bisa cari sendiri dan download xampp di sini 
  4. Jika sudah dipindahkan, dan tentunya apache dan mysql sudah running, kalian bisa pergi ke browser dan kunjungi url http://localhost/<nama_folder> dan kamu akan melihat seperti gambar di bawah ini.
Arsitekture CodeIgniter
  • Kita bisa lihat dari gambar tersebut bahwa setiap kali permintaan datang ke CI itu pertama kali akan pergi ke halaman awal yaitu index.php
  • Pada langkah kedua, Routing akan memutuskan apakah akan meneruskan permintaan ini ke langkah-3 untuk caching atau melewati permintaan ini ke langkah-4 untuk pemeriksaan keamanan.
  • Jika halaman yang diminta sudah dalam Caching, maka Routing akan melewati permintaan ke langkah-3 dan respon akan kembali ke pengguna.
  • Jika halaman yang diminta tidak ada dalam Caching, maka Routing akan melewati halaman yang diminta untuk langkah-4 untuk cek Keamanan.
  • Sebelum melewati permintaan ke Application Controller,  Keamanan dari data yang diajukan akan diperiksa. Setelah cek Keamanan, controller akan memuat yang perlu dimuat sepert model, libraries, helpers, plugins dan script dan akan dikirim ke view
  • View akan membuat halaman dengan data yang tersedia dan mengirimkan untuk di caching. Sebagai halaman yang diminta ini belum di caching maka dengan itu kali ini akan di-caching terlebih dahulu. caching ini merupakan proses penyimpanan dimana ketika terjadi permintaan lagi dimasa depan sudah tersedia dan akan mempercepat response.
Struktur folder CodeIgniter
Dibawah ini adalah gambar struktur dari CI :

Struktur CI terbagi kedalam 3 bagian utama yaitu :
  1. Application
  2. System
  3. user_guide
Untuk struktur folder ini saya akan coba jelaskan di part ke-2


Wednesday, 15 June 2016

Membuat aplikasi crud menggunakan laravel 5.2



Membuat aplikasi crud menggunakan laravel 5.2

Sebelumnya jika kita ingin membuat sebuah aplikasi Create, Read, Update dan Delete (CRUD) sederhana menggunakan framework laravel, di laravel kita bisa membuatnya dengan begitu mudah dan simple. Kita cuma harus tahu langkah-langkahnya saja.

Minimal catat langkah-langkahnya saja, tidak perlu harus hafal codenya, karena terlalu banyak untuk di hafal.

Disini saya akan memberikan langkah-langkah membuat aplikasi CRUD sederhana menggunakan Laravel 5.2.

Jika kalian tidak mempunyai project laravel, bisa ikuti terlebih dahulu cara install laravel di postingan sebelumnya Membuat project laravel 

Ritaul yang pertama harus didahulukan yaitu menambahkan library di projek kita, keunggulan laravel yaitu terdapat banyaknya library yang dapat kita gunakan seenak kita. hahha
Kegunaan library ini tidak kurang dan tidak lebih untuk membantu dalam proses coding udah itu saja. untuk pembahasan bagaimana membuat library dsb lain waktu saya jelaskan. xoxoxoox

Jika kita sudah mempunyai projeck laravel di laptop kita, buka file composer.json didalam require kita tambahkan lagi "laravelcollective/html": "5.2.*"  sehingga menjadi seperti ini :
"require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.2.*",
        "laravelcollective/html": "5.2.*"
    }
Untuk apa si ini? ya intinya laravelcollective ini untuk mempermudah dalam penulisan code. Untuk lebih jelasnya kalian bisa lihat penjelasannya disini

Selanjutnya kita buka conposer dan jalankan code berikut
composer update
Selanjutnya buka file App.php yang ada pada folder Config/app.php lalu tambahkan code berikut pada bagian 'provider' .
Collective\Html\HtmlServiceProvider::class,
dan code berikut pada bagian 'aliases'
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
Setelah ritual awal sudah dipersiapkan sekarang mari lakukan. siap siap

  1. Pertama kita bikin database dengan nama “crud” tanpa tanda petik. Saya perkiraan semuanya sudah menginstall xampp di laptopnya.
  2. Karena laravel telah membuat default 2 table yaitu table users dan table password_reset jadi kita tidak perlu membuat table lain. Buka file yang berada di folder database/migrations disana bias kita lihat file create_users_table.php dan create_password_reset_table.php . Kedua file php ini merupakan file untuk menggenerate table, jadi kita tidak perlu lagi membuka php myadmin untuk membuat table.


  3. Setelah membuat database crud tadi, kita setting koneksi databasenya, kita bisa rubah di file database.php yang berada di folder config.
  4. 'mysql' => [
                'driver' => 'mysql',
                'host' => env('DB_HOST', 'localhost:8080'),
                'port' => env('DB_PORT', '3306'),
                'database' => env('DB_DATABASE', 'crud'),
                'username' => env('DB_USERNAME', 'root'),
                'password' => env('DB_PASSWORD', ''),
                'charset' => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix' => '',
                'strict' => false,
                'engine' => null,
            ],
  5.  Setelah pengaturan di config sudah selesai, sekarang kita cari file .env , file ini berada di luar folder. Edit user untuk login ke database.
  6. NECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=crud
    DB_USERNAME=root
    DB_PASSWORD=''
  7.  Membuat data dummy menggunakan seeder. Buka folder database -> seeds dan buat file dengan nama user_dummy_seeder.php selanjutnya isikan code berikut
  8. function run()
        {
            $users = [
             ['name' => 'Robi Alisandi', 'email' => 'alisandi@gmail.com', 'password' => bcrypt('heloword')],
             ['name' => 'Ridwan Kamil', 'email' => 'kamil@gmail.com', 'password' => bcrypt('heloword')],
             ['name' => 'Beby Jovanca', 'email' => 'baby@gmail.com', 'password' => bcrypt('heloword')],
             ['name' => 'Ronaldo', 'email' => 'ronaldo@gmail.com', 'password' => bcrypt('heloword')],
             ['name' => 'Agnes Mo', 'email' => 'agnes@gmail.com', 'password' => bcrypt('heloword')],
            ];
            DB::table('users')->insert($users);
        }
    Code ini dibuat untuk membuat data acak yang kita butuhkan sebagai data awal(initial) sebelum kita menginputnya. Selanjutnya kita edit file DatabaseSeeder.php dan tambahkan code berikut
    function run()
        {
             $this->call(user_dummy_seeder::class);
        }
  9. Sekarang buka composer dan ketikan php artisan migrate.
  10. artisan migrate
  11. Selanjutnya kita tambahkan baris kode di route dengan menambahkan code berikut 
  12. :resource('users', 'UserController');
  13. Sebelumnya kita tidak memiliki controller satupun, tetapi kita membutuhkan controller sebagai penyambung antara view dan model, oleh karenanya kita buat controller users menggunakan composer, jalankan baris code ini di composer.
  14. artisan make:controller –resource userController
    Sesudah kita menjalankan code tersebut sekarang kita telah membuat file controller, kita bisa melihatnya di folder App->Http->Controller maka terdapat file userController.php yang telah kita buat.
  15. Selanjutnya kita buka userControllernya dan sudah terdapat fungsi-fungsi seperti berikut
  16. namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Input;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Support\Facades\Redirect;
    use App\Http\Requests;
    use App\User;
    use View;
    
    class UserController extends Controller
    {
        /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
         */
        public function index()
        {
            //
        }
    
        /**
         * Show the form for creating a new resource.
         *
         * @return \Illuminate\Http\Response
         */
        public function create()
        {
            //
        }
    
        /**
         * Store a newly created resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        public function store(Request $request)
        {
            //
        }
    
        /**
         * Display the specified resource.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function show($id)
        {
            //
        }
    
        /**
         * Show the form for editing the specified resource.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function edit($id)
        {
            //
        }
    
        /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function update(Request $request, $id)
        {
            //
        }
    
        /**
         * Remove the specified resource from storage.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function destroy($id)
        {
            //
        }
    }
    
    Di code tersebut kita talah memiliki beberapa fungsi seperti fungsi index sebagai fungsi untuk halaman awal, fungsi create untuk halaman form isian data, fungsi store untuk proses penyimpanan, fungsi show untuk menampilkan data, fungsi edit untuk menampilkan halaman update/edit, fungsi update untuk proses penyimpanan update, dan terkahir fungsi destroy untuk menghapus data. Selanjutnya kita tambahkan code berikut didalam fungsi index
    function index()
        {
            $users = User::paginate(5);
            return View::make('users.index', compact('users'));
        }
  17. Membuat file index.blade.php di folder resource/view/users. Pertama kita buat terlebih dahulu folder users. Ini merupakan halaman pertama sebagai root file yang pertama ketika aplikasi kita di buka. Setiap view file yang akan kita buat jangan lupa kita menambhkan blade. Blade ini merupakan ritual yang harus ada ketika membuat view di framework laravel. Selanjutnya isi file index.blade.php tadi dengan code berikut
  18. @extends('layouts.user')
    
    @section('main')
    
    <h1>All Users</h1>
    
    <p>{{ link_to_route('users.create', 'Add new user')}}</p>
    
    @if($users->count())
     <table class="table table-striped table-bordered">
      <thead>
       <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Password</th>
        <th colspan="2"></th>
       </tr>
      </thead>
      <tbody>
       @foreach($users as $user)
       <tr>
        <td>{{ $user->name }}</td>
        <td>{{ $user->email }}</td>
        <td>{{ $user->password }}</td>
        <td>{{ link_to_route('users.edit', 'Edit', array($user->id), array('class' => 'btn btn-info')) }}</td>
        <td>
         {{ Form::open(array('method' => 'DELETE', 'route' => array('users.destroy', $user->id))) }}
         {{ Form::submit('Delete', array('class' => 'btn btn-danger')) }}
         {{ Form::close() }}
        </td>
       </tr>
       @endforeach
      </tbody>
     </table>
     {{ $users->links() }}
    @else
     There are no users
    @endif
    
    @stop
  19. Setelah membuat view seelanjutnya kita buat file layout user.blade.php buat folder layouts dan simpan didalamnya. File ini digunakan sebagai rangka dari semua halaman yang akan kita buat. Masukan code berikut  
  20. <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css">
            <style>
                table form { margin-bottom: 0; }
                form ul { margin-left: 0; list-style: none; }
                .error { color: red; font-style: italic; }
                body { padding-top: 20px; }
            </style>
        </head>
        <body>
            <div class="container">
                @if (Session::has('message'))
                    <div class="flash alert">
                        <p>{{ Session::get('message') }}</p>
                    </div>
                @endif
                @yield('main')
            </div>
        </body>
    </html>
    Penggalan code tersebut saya ambil dari bootstrap. View ini bisa kita modifikasi tampilannya sesuai selera.
  21. Kembali lagi ke file controller yang telah kita buat dan tambahkan di function create()
  22. create('users.create');
    Penjelasan code tersebut terdapat baris code users.create. Users merupakan nama folder di view dan create nama filenya.
  23. Sama seperti membuat file index kita buat juga file view dengan nama create.blade.php dan masukan code berikut
  24. @extends('layouts.user')
    
    @section('main')
    
    <h1>Create User</h1>
    
    {{ Form::open(array('route' => 'users.store')) }}
        <ul>
            <li>
                {{ Form::label('name', 'Name:') }}
                {{ Form::text('name') }}
            </li>
            <li>
                {{ Form::label('username', 'Username:') }}
                {{ Form::text('username') }}
            </li>
            <li>
                {{ Form::label('password', 'Password:') }}
                {{ Form::password('password') }}
            </li>
            <li>
                {{ Form::label('password', 'Confirm Password:') }}
                {{ Form::password('password_confirmation') }}
            </li>        
            <li>
                {{ Form::label('email', 'Email:') }}
                {{ Form::text('email') }}
            </li>
            <li>
                {{ Form::label('phone', 'Phone:') }}
                {{ Form::text('phone') }}
            </li>
            <li>
                {{ Form::submit('Submit', array('class' => 'btn')) }}
            </li>
        </ul>
    {{ Form::close() }}
    
    @if ($errors->any())
        <ul>
            {{ implode('', $errors->all('<li class="error">:message</li>')) }}
        </ul>
    @endif
    
    @stop
    File ini digunakan sebagai halaman ketika kita menginput data
  25. Selanjutnya mengedit function store() di controller, kita tambahkan code berikut
  26. public function store(Request $request)
        {
            $input = Input::all();
            $validation = Validator::make($input, User::$rules);
    
            if ($validation->passes())
            {
                User::create($input);
                return Redirect::route('users.index');
            }
            return Redirect::route('users.create')
                ->withInput()
                ->withErrors($validation)
                ->with('message', 'There were validation errors.');
        }
  27. Buka model User.php di folder App ganti sembua code dengan code berikut.
  28. ace App;
    
    use Eloquent;
    class User extends Eloquent {
      protected $guarded = array('id');
      protected $fillable = array('name', 'email');
      public static $rules = array(
        'name' => 'required|min:5',
        'email' => 'required|email'
      );
    }
  29. Kembali lagi ke controller, kita tambahkan lagi code berikut di function edit()
  30. edit($id)
        {
            $user = User::find($id);
            if (is_null($user))
            {
                return Redirect::route('users.index');
            }
            return View::make('users.edit', compact('user'));
        }
  31. Tambah function update() dengan beberapa baris code sebagai berikut
  32. update(Request $request, $id)
        {
            $input = Input::all();
            $validation = Validator::make($input, User::$rules);
            if ($validation->passes())
            {
                $user = User::find($id);
                $user->update($input);
                return Redirect::route('users.show', $id);
            }
    return Redirect::route('users.edit', $id)
                ->withInput()
                ->withErrors($validation)
                ->with('message', 'There were validation errors.');
        }
  33. Begitu juga tambah function destroy() sebagai berikut
  34. destroy($id)
        {
            User::find($id)->delete();
            return Redirect::route('users.index');
        }
    Dari semua proses yang telah kita lakukan kita bisa melihat hasilnya