Sabtu, 28 Maret 2020

Global Component, Local Component dan Mixins

1. Global Component
Mendaftarkan component secara global akan membuat component tersebut bisa digunakan oleh semua objek utama (root) Vue.
Buat file baru dengan nama GlobalComponent.ht lalu masukkan kode berikut:
<!DOCTYPE html>
<html>
<head>
    <title> Global Component </title>
    <script src="lib/vue.js"></script>
</head>
<body>
    <div id="app1">
        <h1>Object 1</h1>
        <global1></global1>
        <global2></global2>
    </div>
    <div id="app2">
        <h1>Object 2</h1>
        <global1></global1>
        <global3></global3>
    </div>
    <script type="text/javascript">
        Vue.component('global1',{
            template : '<h3>Component Global 1</h3>'
            
        })
        Vue.component('global2',{
            template : '<h3>Component Global 2</h3>'
            
        })
        Vue.component('global3',{
            template : '<h3>Component Global 3</h3>'
            
        })
        new Vue({ el :'#app1'})
        new Vue({ el :'#app2'})
    </script>
</body>
</html>
Dan kemudian jika sudah dijalankan akan seperti ini hasilnya:


2. Local Component
Simplenya adalah omponent diregister pada suatu objek Vue dan hanya bisa digunakan pada objek tersebut saja.
Buat file baru dengan nama LocalComponent.html dan masukkan kode dibawah:
<!DOCTYPE html>
<html>
<head>
    <title>Local Component</title>
    <script src="lib/vue.js"></script>
</head>
<body>
    <div id="app1">
        <h1>Object 1</h1>
        <global1></global1>
        <global2></global2>
    </div>
    <div id="app2">
        <h1>Object 2</h1>
        <global1></global1>
        <global3></global3>
    </div>
    <script type="text/javascript">
        var Global1 = {
            template : '<h3>Component 1</h3>'
            
        }
        var Global2 = {
            template : '<h3>Component 2</h3>'
            
        }
        var Global3 = {
            template : '<h3>Component 3</h3>'
            
        }
        new Vue({ el :'#app1',
            components: {
                'global1': Global1,
                'global2': Global2,
                'global3': Global3
            }
        })
        new Vue({ el :'#app2',
        })
    </script>
</body>
</html>
Dari kode diatas maka hasilnya seperti ini:
 Lalu jika kita register kode dibawah ini:
 components: {
                'global1': Global1,
                'global2': Global2,
                'global3': Global3
            }
Maka hasilnya akan seperti ini:
Perbedaannya adalah jika kita register kode yang baru saja ditambah maka object 2 tidak muncul. Berbeda dengan Global maka tidak perlu regis kode diatas tadi.

3. Mixins
Mixins merupakan cara pada Vue untuk mendefinisikan suatu kumpulan fungsi atau option yang akan digunakan pada aplikasi atau component tertentu. Ketika objek Vue atau component menggunakan mixins maka semua option dari mixin tersebut akan di digabungkan ke dalam component yang menggunakannya tersebut. 
Masukkan kode dibawah:
<!DOCTYPE html>
<html>
<head>
    <title>Mixin</title>
    <script src="lib/vue.js"></script>
</head>
<body>

        <div id='app'>
            Component Mixins
            
        </div>
    </div>
    
    <script type="text/javascript">
        var Mixins1 = {
            created: function(){
                this.hallooo()
            },
            methods:{
                hallooo:function(){
                    console.log('Halo Mixins')
                }
            }
            }
        var vm = new Vue({ 
            el :'#app',
            mixins: [
                Mixins1
            ]
        })
        
    </script>
</body>
</html>
Maka hasilnya akan seperti ini:




Jumat, 27 Maret 2020

Konsep Containerization

The ABC of Containerization - DevOps Implementation

Containerization adalah pendekatan dimana kita menjalankan multiple instances (containers) pada satu Operating System (OS) yang sama, dimana containers tersebut akan memiliki shared kernel.
Bisa juga disebut sebagai vitualisasi yang ringan. Karena hanya menyediakan kebutuhan minimum yang dibutuhkan sebuah aplikasi supaya bisa berjalan. Container merupakan virtual machine minimalis yang tidak berjalan pada hypervisor. Lalu apa saja yang ada di dalam container? Berikut ini yang ada dalam container :
1. Application
2. Binaries
3. Configuration File
4. Dependencies
5. Libraries

Bagaimana caranya bisa berjalan di environment yang berbeda? Containerization memungkinkan container untuk berjalan di environment yang berbeda dengan cara mengabstraksi sistem operasi dan infrastruktur fisik. Sebuah aplikasi yang dijadikan container berbagi kernel host operating system dengan container yang lain. Bagian sistem operasi yang dibagi itu bersifat “Read-only”. Biasanya, dalam satu container hanya terdapat satu buah service atau microservice.
Tentang kernel dan sitem operasi
Laptop, komputer, telepon, dll dibangun dengan menggunakan berbagai perangkat keras. Contohnya, CPU, kartu jaringan, memori, penyimpanan (SSD,HDD), dll. Semua orang tau hal itu, tapi bagaimana mereka berinteraksi satu sama lain. Interaksi itu dibantu dengan perangkat lunak yang disebut dengan kernel! Sebuah jembatan antara perangkat keras dan sistem operasi adalah kernel. Kernel inilah yang menjadwalkan untuk menjalankan sebuah proses, mengelola perangkat keras, menangani error, dll.
Selain itu, sistem operasi berguna untuk membantu proses booting dan mengelola ruang pengguna. Proses pengguna dijalankan pada ruang ini dan terus-menerus berinteraksi dengan kernel.

Teknologi Docker
Ini adalah salah satu teknologi container yang paling banyak digunakan. Bahkan, ketika orang merujuk ke kontainer, mereka kebanyakan memahami yang dimaksud itu Docker. Selain Docker, ada beberapa teknologi container open source seperti rkt oleh CoreOS. Juga, perusahaan besar telah membangun mesin container mereka sendiri. Misalnya, lmctfy oleh Google.
Jadi Docker sekarang menjadi standar industri dalam hal kontainerisasi. Bagaimana ini dibangun? Pada cgroups dan namespacing yang disediakan oleh kernel Linux dan Windows.
Lapisan Docker:
Docker container terdiri dari berbagai lapisan. Ini termasuk images dan binari yang dikemas ke dalam satu paket. Base image memiliki sistem operasi container. OS image dan OS host dapat berbeda atau sama. Bagaimana OS containernya? Itu dalam bentuk image. Jika Anda membandingkan OS image dengan OS host, ada perbedaan! OS host adalah sistem operasi penuh, sedangkan OS image tidak penuh. Image hanyalah sistem file dan binari untuk OS. Sementara, OS lengkap termasuk sistem file, binari, dan Kernel.
Ada beberapa image di atas base image. Mereka bersama-sama membuat sebagian dari container. Pengaturannya agak dinamis. Misalnya, di atas base image, ada image yang berisi dependensi apt-get. Di atas itu, mungkin ada image yang berisi aplikasi biner. Tetapi bagian yang paling menarik adalah, jika ada dua container dengan lapisan image 1,2,3 dan 1,2,4 maka anda hanya perlu menyimpan satu salinan dari setiap image! Secara lokal maupun di repositori. Ini adalah cara sistem file Docker beroperasi.
Docker dimuat dengan banyak fitur keren seperti:
(1) Copy on write.
(2) Volumes.
(3) Docker daemon.
(4) Version controlled repositories and more.

Apa yang diperlukan untuk container?
Proses isolasi hanyalah salah satu sifat contaianer. Namun terlepas dari itu, ada banyak properti bermanfaat lainnya.

(1) Container berfungsi sebagai unit mandiri. Ini berarti dapat berjalan di mana saja. Pada setiap instances, containernya persis sama. OS host tidak masalah. Itu bisa CentOS, Ubuntu, MacOS atau non UNIX seperti Windows. Singkatnya, container yang dibangun di sistem anda juga dapat bekerja di server perusahaan!
(2) Orang dapat menganggap container sebagai unit standar atau komputer. Secara umum, dikatakan bahwa setiap kontainer menjalankan server web tunggal, satu basis data dari database, dll. Jadi untuk menskalakan aplikasi, seseorang dapat dengan mudah skala jumlah kontainer.
(3) Container adalah alat terbaik untuk menerapkan arsitektur layanan mikro. Masing-masing microservice adalah seperangkat container yang bekerja sama. Sebagai contoh, dimungkinkan untuk mengimplementasikan layanan mikro Redis dengan container master tunggal dan beberapa container slave. Arsitektur microservice memiliki banyak keunggulan dibandingkan dengan pendekatan monolitik atau tradisional.

Kelebihan dan kekukangan container
Kelebihan:
(1) Menjalankan container tidak menggunakan banyak sumber daya. Jadi seseorang dapat menambahkan lebih banyak beban kerja komputasi pada server yang sama.
(2) Dibandingkan dengan mesin virtual, ukuran rata-rata suatu container berada dalam kisaran puluhan atau ratusan MB, sedangkan mesin virtual mengkonsumsi beberapa gigabytes. Server dapat menampung lebih banyak kontainer.
(3) Kontainer cepat! Membuat container hanya membutuhkan beberapa detik. Waktu respons cepat ketika menyangkut aktivitas pengguna. Kontainer membantu mengurangi waktu yang dibutuhkan untuk pengembangan, pengujian, dan penyebaran.
(4) Menemukan kesalahan dan menyelesaikannya mudah dengan container. Mengapa? Karena tidak ada perbedaan antara menjalankan aplikasi secara lokal atau pada server uji.

Kekurangan:
(1) Keamanan adalah masalah dengan virtualisasi berbasis container dibandingkan dengan mesin virtual tradisional. Dalam container, Kernel dan komponen lain dari sistem operasi host dibagikan. Mereka memiliki akses root! Jadi container kurang terisolasi satu sama lain. Secara keseluruhan, itu tergantung pada jenis aplikasi dan modifikasi.
(2) Ada kurang fleksibilitas dalam sistem operasi. Jika Anda ingin menjalankan kontainer dengan sistem operasi yang berbeda, Anda harus memulai server baru.

Contoh Studi Kasus Implementasi dari Containerization
IMPLEMENTASI DOCKER UNTUK PENGELOLAAN BANYAK APLIKASI WEB
(Studi Kasus : Jurusan Teknik Informatika UNESA)

Sistem web hosting modern, di dalam setiap servernya, mengelola banyak aplikasi web. Teknologi virtual machine dimanfaatkan untuk menyelesaikan masalah heterogenitas (perbedaan versi library atau tool dari beberapa aplikasi web). Peningkatan jumlah aplikasi web yang harus dihosting harus diikuti dengan peningkatan kualitas ataupun kuantitas sumber daya, terlebih saat hadirnya kebutuhan high availability dari layanan web tersebut. Teknik kontainerisasi (virtualisasi berbasis container) hadir sebagai solusi dan menjadi trend saat ini. Docker adalah salah satu software yang mengadopsi teknik kontainerisasi dan semakin banyak diterapkan di dalam lingkungan web hostingTulisan ini mencoba untuk melakukan kajian literatur terhadap teknologi virtualisasi di atas, baik virtual machine
maupun container dan kemudian merangkum perbandingannya. Arsitektur container di dalam Docker merupakan fokus dari tulisan ini, termasuk perkembangan dan keunggulan dari Docker yang sudah diteliti dan diimplementasikan dalam dua tahun terakhir. Docker memudahkan proses deployment (penyebaran) aplikasi web beserta software pendukung seperti web server, database server, dependensi dan environment lain ke server. Dapat kemudahan dengan proses deployment (penyebaran) aplikasi web beserta software pendukung seperti web server, database server, dependensi dan environment lain ke server. Memberikan solusi pada banyak Aplikasi web yang membutuhkan Docker untuk bereksperimen atau mendukung mahasiswa yang ingin melakukan tugas akhir dengan berbagai topik.

Minggu, 22 Maret 2020

Vue Js Form Data & Binding

1. Handling Submit Form & Validation
Buat file dengan nama form.html dan tambah kode berikut:
<!DOCTYPE html>
<html>
<head>
    <title>Form Data</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/
4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTN
h0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <script type="text/javascript" src="lib/vue.js"></script>

</head>
Sampai disini adalah untuk memasukkan bootstrap kedalamnya.

<body>
    <div class="col pt-3">
                <h2 class="font-weight-bold"> Input The Data </h2>
                <hr>
            </div>
        <div id="app" class="container">
            <form class = "form-control"ref="formBook" @submit.prevent="submitForm($event)"
            action="" method="post" id="myForm">
            <p v-if="errors.length">
                    <b>Oops Something is wrong!</b>
                <ul>
                    <li v-for="error in errors">{{ error }}</li>
                </ul>
            </p>
            <hr>
            <div class="row">
                <div class="col">
                    <label>Name Of Product :</label>
                    <input class = "form-control" type="text" v-model="nama" ref="nama"/>
                    <br>
                </div>
                <div class="col">
                    <label>Description :</label>
                     <textarea class="form-control" v-model="description"></textarea>
                </div>
            </div>
            <div class="row">
                <div class="col">
                    <label>Brand :</label>
                    <input class = "form-control" type="text" v-model="merk">
                </div>
                <div class="col">
                    <label>Price :</label>
                    <input class = "form-control" type="number" v-model.number="price">
                </div>
            </div>
                <div class="row">
                    <div class="col">
                        <label>Categories:</label>
                        <select multiple class"form-control"  v-model="categories" multiple>
                            <option v-for="option in options" :value="option.value">
                            {{ option.text }}
                            </option>
                        </select>
                    </div>
                </div>
            <div class="row">
                <div class="col">
                    <label>Picture :</label>
                    <input  name="gambar" ref="gambar" type="file" class="form-control-file">
                    <br>
                    <input type="submit" value="Submit" class="btn btn-primary">
                </div>
            </div>
            <br>
            </form>
        </div>
        <script type="text/javascript">
                var vm = new Vue({
                el: '#app',
                data: {
                    nama: '',
                    description: '',
                    merk: '',
                    price: 0,
                    categories: [],
                    options: [
                            { text: 'Shirt'value: '01' },
                            { text: 'T-Shirt'value: '02' },
                            { text: 'Jacket 'value: '03' },
                            { text: 'Hoodie 'value: '04' },
                            { text: 'Pants 'value: '05' },
                            { text: 'Accesories 'value: '06' }
                            ],
                    errors: []
                        },
                    methods: 
                    {
                        submitForm(event){
                            this.errors = []
                            // kode validasi
                            if(this.nama.length < 3){
                                this.errors.push('Input the name more than 2 char')
                                this.$refs.nama.select()
                            }
                            if(this.description.length > 500){
                                this.errors.push('Description max is 500 char!')
                                this.$refs.description.select()
                            }
                            if(this.merk.length < 3){
                                this.errors.push('Input the brand more than 2 char')
                                this.$refs.merk.select()
                            }
                            if(this.price < 0){
                                this.errors.push('No minus on price')
                                this.$refs.price.select()
                            }
                            if(this.categories.length === 0){
                                this.errors.push('Choose minimal 1 category')
                                this.$refs.categories.focus()
                            }
                            // kode status informasi
                            if(this.errors.length === 0 ){
                            // persiapkan data
                                let formData = new FormData()
                                let gambar = this.$refs.gambar.files[0]
                                formData.append('nama'this.nama)
                                formData.append('description'this.description)
                                formData.append('merk'this.merk)
                                formData.append('price'this.price)
                                formData.append('categories'this.categories)
                                formData.append("gambar"gambar)
                                // kirim data ke server
                                let xhttp = new XMLHttpRequest() // create objek XMLHttp
                                // definisikan fungsi ketika terjadi perubahan state
                                xhttp.onreadystatechange = function() {
                                // state ini menunjukkan data terkirim dan diterima server dengan baik
                                if (this.readyState == 4 && this.status == 200) {
                                // respon text dari server
                                console.log(this.responseText)
                                    }
                            }
                            // sesuaikan dengan lokasi file proses.php
                            xhttp.open("POST""http://localhost/proses.php"true)
                        // kirim objek formData
                            xhttp.send(formData)
                        }
                    }
                    }
                    })
        </script>
</body>
</html>
Kode diatas adalah kode tampilan formKode v-if=”errors.length” adalah untuk memeriksa apakah ada yangg tidak sesuai dengan ketentuan atau error. Jika ada maka akan lanjut ke this.errors dan akan muncul alert sesuai dengan errornya.
Misal, errornya adalah kita lupa memasukkan nama dari produknya maka akan muncul "Input the name more than 2 char"

Setelah itu buat 1 file baru yang bernama proses.php dan masukkan kode dibawah ini:
<?php
// untuk mencegah error akibat CORS
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
echo "SIMULASI KIRIM DATA FORM <hr>";
// menampilkan data yang dikirimkan dengan method post
print_r($_POST);
print_r($_FILES['gambar']);
Kode ini untuk menerima data yang dikirim dari form. Dan kemudian tampilannya akan seperti ini pada browser:
Dan kemudian untuk contoh error akan seperti dibawah ini:



2. Input Binding
Buat file dengan nama binding.html kemudian masukkan kode dibawah:
<!DOCTYPE html>
<html>
<head>
    <title> Form BInding </title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, 
shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/
css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E2
63XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <script type="text/javascript" src="lib/vue.js"></script>
</head>
Sama seperti yang input tadi, ini juga adalah untuk memasukkan bootstrap.
Lalu masukkan lagi kode ini dibawahnya:
<body>
    <div id"app" class ="container">
        <div class="row">
            <div class="col pt-3">
                <h2 class="font-weight-bold"> Binding </h2>
                <hr>
            </div>
        </div>
        <form>
             kategori : <input type="text" name="kategori" v-model="kategori" 
placeholder="pilih kategori di bawah">
            <hr>
            <input type="radio" id="baju" value="baju" v-model="kategori">
            <label for="baju">baju</label>
            <br>
            <input type="radio" id="celana" value="celana" v-model="kategori">
            <label for="two">celana</label>
            <hr>
            <span> Pilih warna nya : </span>
            <br>
            <input type="checkbox" id="merah" value="merah" v-model="checked">
            <label for="jack">merah </label>
            <input type="checkbox" id="kuning" value="kuning" v-model="checked">
            <label for="john">kuning</label>
            <input type="checkbox" id="hijau" value="hijau" v-model="checked">
            <label for="mike">hijau</label>
            <hr>
            <select v-model="selected">
              <option disabled value="">pilih salah satu</option>
              <option> jearsey </option>
              <option> Katun </option>
              <option> Jeans </option>
            </select>
            <hr>
            <textarea v-model="deskrip" placeholder="Tambahkan Deskripsi Baju">
</textarea>
            <hr>
            <h2 class="font-weight-bold"> Hasil Binding </h2>
            <span>Kategori text : {{ kategori }}</span>
            <br>
            <span> fitur radio button : {{ kategori }}</span>
            <br>
            <label for="checkbox">fitur check box :{{ checked }}</label>
            <br>
            <span>fitur select : {{ selected }}</span>
            <br>
            <span>Deskripsi Baju: {{ deskrip }}
            </span>
        </form>
    </div>
    <script type="text/javascript">
        var vmnew Vue({
            el:'#app',
            data : {
                kategori:"",
                checked:[],
                selected:"",
                deskrip:""
            }
        })
    </script>
</body>
</html>
Kode ini untuk tampilan binding pada browser.
Terdapat fitur input text, radio button, check box dan selected dalam kode diatas.
Dan tampilan dari kode diatas adalah:
Kemudian jika kita masukkan data maka akan seperti dibawah ini: 

Data yang ada diatas terikat ke data yang ada dibawah sehingga hasilnya yang dibawah dipengaruhi dari yang di atasnya.