Category Archives

356 Articles
Konfigurasi CAS 5.1.2
Arsitektur SSO dasar.

Konfigurasi CAS 5.1.2

Apereo CAS (sebelumnya Jasig CAS) banyak dipakai untuk SSO. Cara pemasangannya agak ribet dan sulit. Kebetulan, versi CAS 5.1.2 sekarang sudah menggunakan Spring Boot sebagai dasarnya.

Keuntungan penggunaan Spring Boot adalah Jasig CAS menggunakan banyak keunggulan framework Spring. Misalnya, teknologi Spring Cloud untuk teknologi devops, Spring Web Flow untuk arsitektur layanan mikro (micro service), service discovery, dan konfigurasi melalui YAML. Sehingga, kita bisa memasang infrastruktur SSO melalui CAS tanpa harus mengoding seperti dahulu. Atau, kita bisa mengembangkan layanan yang terpisah dari SSO ala layanan mikro.

Sebelum infrastruktur bertambah rumit, saya ingin memberikan jembatan keledai. Sebab, saya pikir SSO ini agak sulit pada awalnya kalau tidak tahu caranya. Saya harap ketika selesai membaca artikel ini, pembaca ada gambaran bagaimana SSO bisa dikembangkan.

Arsitektur yang dipilih

Arsitektur SSO

Arsitektur SSO dasar.

Ada banyak pilihan, tetapi saya memilih kapabilitas komponen yang bisa diskalakan secara horizontal dan modern. Misalnya, ada banyak pilihan untuk ruang penyimpan tiket (Ticket Storage), tetapi saya memilih Redis karena dia implementasi modern yang banyak dipakai untuk teknologi dewasa ini.

Setiap komponen yang saya pilih ini dapat dikluster. Saya memilih untuk mengembangkan satu layanan per mesin. Nanti kalau sudah mengerti teknologi perawanan, [uhuk colek Utian Ayuba] Anda bisa mengubah setiap ini menjadi konfigurasi devops macam Ansible, Puppet, Chef, Vagrant,  atau apa pun agama Anda.

CAS IdP

CAS IdP adalah mesin utama yang menyediakan profil, otentikasi, dan otorisasi. Semua klien terhubung ke sana.

Cara buat:

CAS IdP Server

CAS Ticket Storage

Secara baku CAS IdP menyimpan tiket sesi pada memori. Namun, untuk arsitektur kluster dan skalabilitas, lebih baik menggunakan Redis. Mengapa Redis? Karena Redis utamanya menggunakan memori.

Untuk peladen Redis tidak perlu dikluster. Lebih baik satu instans Redis yang memakan memori 24 GB dari pada membuat kluster.

Cara buat:

Redis Ticket Storage

CAS Service Storage

Satu situs/sistem/aplikasi yang menggunakan CAS untuk SSO disebut satu layanan (service). Setiap layanan dapat didefinisikan logo, URL, ACL pengguna, dan sebagainya secara granular. Itu semua secara baku disimpan oleh CAS IdP di berkas JSON.

Untuk pengelolaan yang lebih baik, saya memilih PostgreSQL sebagai ruang penyimpan. Pengalaman saya membandingkan PostgreSQL dengan MySQL mengatakan bahwa PostgreSQL rajanya basisdata untuk basisdata perangkat lunak bebas terbuka. Waktu itu saya membandingkan layanan Roundcube Webmail dengan MySQL dan PostgreSQL. Anda sebagai pengguna Webmail UI pasti merasakan bagaimana Webmail UI itu seperti mengakses sistem HTML statik.

Saya, sih, tidak apa kalau ada yang mau menggunakan MongoDB atau yang lainnya. Tetapi saya memilih karena daftar layanan ini tidak perlu kecepatan khusus. Selain itu, daftar layanan butuh untuk tahan banting, saya lebih memilih PostgreSQL. Tentu saja, saya takkan memilih Redis.

Cara buat:

CAS Service Registry

CAS Authentication Provider

Normalnya CAS menggunakan Spring Security dengan login casuser dan sandi Mellon. Tentunya, ini buat yang main-main. Untuk yang lebih serius, gunakan LDAP, basis data, atau bahkan layanan REST.

Penyedia otentikasi CAS dapat lebih dari satu (komposit). Tetapi, untuk kali ini, gunakan saja LDAP.

Cara buat:

CAS Auth LDAP

CAS Service Management Webapp

Aduh, lupa menulis dokumentasi. Silakan simpan URL ini, nanti saya coba tulis. Untuk sementara, langsung saja buat di basisdata. He… he… he….

Studi Kasus: WordPress

Penasaran dengan hasilnya? Langsung saja, buat aplikasi WordPress. Mengapa WordPress? Karena gampang memasangnya. Tinggal pakai plugin WP Cassify, daftarkan URL WP sebagai satu layanan, dan beres!

Cara buat:

WordPress Cassify

TODO:

  • Personalisasi halaman login.
  • Membuat CAS IdP terkluster (lebih dari satu instans)
  • Entahlah….
Membuat Cetakan Salindia dengan Reveal JS

Membuat Cetakan Salindia dengan Reveal JS

Saya tertarik untuk mengubah semua presentasi saya dengan HTML5. Kalau Anda lihat di laman publikasi, saya sudah bereksperimen dengan beberapa. Kali ini, saya menemukan sebuah proyek pembuatan salindia yang cukup modular: Reveal JS.

Dia memiliki fitur yang saya butuhkan: presentasi di peramban, cetak ke PDF, dan sintaksis. Ada juga yang mengembangkan catatan pemresentasi dan skema klien-peladen untuk menghubungkan beberapa perangkat. Tujuan dari sinkronisasi ini untuk tampilan pemresentasi dan tampilan presentasi berbeda. Tetapi, saya jarang menggunakan catatan kaki. Makanya, saya tidak mengejar fitur ini.

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Reveal JS cukup mudah dikembangkan. Selain memiliki contoh situs yang menggambarkan penggunaannya, Reveal JS juga menyediakan contoh-contoh penggunaan yang gila di alam sana. Salah satu yang menginspirasi saya adalah The Arab Spring Uprisings Five Years On oleh Council on Foreign Relations.

Modularitas ini yang membuat pengembangan Reveal JS bisa ditambah-tambahi dengan berbagai macam. Tetapi, saya yakin, yang paling penting adalah bagaimana cara memulainya. Apalagi, untuk orang-orang yang tidak terbiasa dengan Node JS, memasang paket-paket Node JS sangat mahal (biaya Internet) dan membingungkan.

Saya akan memulai membangun dasar Reveal JS yang saya gunakan mulai dari nol sampai beberapa modul yang saya rasa perlu. Di akhir tulisan ini, akan ada sebuah cetakan salindia yang siap untuk dibuat.

Paket Dasar

Perhatikan struktur direktori sebagai berikut:

.
├── css
│   ├── reveal.css
│   └── theme
│       └── beige.css
├── index.html
└── js
    └── reveal.js

Sesuai dengan contoh dari Reveal JS, hal yang paling dasar cukup menyediakan 4 berkas:

  1. Berkas CSS Reveal JS.
  2. Berkas CSS tematik yang digunakan. Untuk contoh kali ini saya menggunakan tematik Beige.
  3. Berkas Javascript Reveal JS sebagai skrip penjalan.
  4. Berkas HTML sebagai berkas salindia.

Anggap sudah ada di sebuah direktori, mari buat struktur yang cukup:

mkdir -p js css/theme

Unduh tiga berkas dari situs Reveal JS.

wget https://raw.githubusercontent.com/hakimel/reveal.js/master/css/reveal.css -O css/reveal.css
wget https://raw.githubusercontent.com/hakimel/reveal.js/master/css/theme/beige.css -O css/theme/beige.css
wget https://raw.githubusercontent.com/hakimel/reveal.js/master/js/reveal.js -O js/reveal.js

Lalu, buat sebuah berkas HTML biasa sebagai kerangka kerja:

cat > index.html << EOF
<html>
        <head>
                <link rel="stylesheet" href="css/reveal.css">
                <link rel="stylesheet" href="css/theme/beige.css">
        </head>
        <body>
                <div class="reveal">
                        <div class="slides">
                                <section>Slide 1</section>
                                <section>Slide 2</section>
                        </div>
                </div>
                <script src="js/reveal.js"></script>
                <script>
                        Reveal.initialize();
                </script>
        </body>
</html>
EOF

Sampai sini, sudah ada presentasi sederhana yang bisa digunakan dengan contoh dua halaman.

Contoh Salindia yang dihasilkan.

Contoh Salindia yang dihasilkan.

Perhatikan bahwa setiap halaman dalam salindia berada di dalam elemen HTML section. Bila ingin membuat laman yang ke bawah, buat section di dalam section. Nanti hasilnya laman dengan panah ke bawah.

Silakan menggunakan elemen HTML di dalam section untuk membuat isi salindia. Beberapa rekomendasi saya:

  • Saya menggunakan elemen H1 untuk membuat judul salindia dan H2 untuk judul laman.
  • Untuk menggunakan poin, gunakan saja elemen UL (unordered list) seperti biasa.

Fitur Pencetakan ke PDF

Untuk mencetak lebih baik, diperlukan dua berkas CSS yang memformat salindia menjadi format untuk dicetak:

mkdir -p css/print
wget https://raw.githubusercontent.com/hakimel/reveal.js/master/css/print/pdf.css -O css/print/pdf.css
wget https://raw.githubusercontent.com/hakimel/reveal.js/master/css/print/paper.css -O css/print/paper.css

Setelah itu, ubah HTML salindia pada elemen HEAD untuk membuat skrip yang sesuai:

<html>
<head>
<!-- ... -->
        <!-- Printing and PDF exports -->
        <script>
            var link = document.createElement( 'link' );
            link.rel = 'stylesheet';
            link.type = 'text/css';
            link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
            document.getElementsByTagName( 'head' )[0].appendChild( link );
        </script>
<!-- ... -->
</head>
<body>
<!-- ... -->
</body>

Saya membuang konteks yang lain agar tidak bingung Anda mau memasukkan baris elemen SCRIPT di mana.

Setelah ini, ketika mengakses dengan peramban, tambahkan “?print-pdf” (tanpa kutip) pada ujung URL. Tata letak dengan URL tersebut akan terlihat aneh. Namun, bila kita menekan CTRL+P untuk menampilkan dialog pencetakan, salindia akan tercetak dengan baik.

Print presentation to PDF.

Print presentation to PDF.

Dengan ini, salindia yang dibuat bisa diekspor ke PDF.

Skrip Pembantu

Sebelum memasang plugin, tambahkan skrip pembantu Head JS untuk membantu memasang skrip-skrip plugin ke elemen HEAD.

Unduh berkas-berkas seperti biasa.

mkdir -p lib/js
wget https://raw.githubusercontent.com/hakimel/reveal.js/master/lib/js/head.min.js -O lib/js/head.min.js

Tambahkan skrip pembantu sebelum skrip Reveal JS.

<html>
<head>
<!-- ... -->
</head>
<body>
<!-- ... -->
                <script src="lib/js/head.min.js"></script>
                <script src="js/reveal.js"></script>
<!-- ... -->
</body>

Dengan adanya Head JS ini, plugin-plugin bisa dimuat dengan mudah.

Fitur Kode

Saya tahu pasti kebanyakan yang membaca tulisan saya adalah seorang yang biasa mempresentasikan kode. Reveal JS menggunakan Highlight JS, tetapi saya lebih suka Prism JS.

Untuk Prism JS, harus mengunduh secara manual dan menaruhnya di direktori plugin/prism

mkdir -p plugin/prism

Tambahkan secara manual dua berkas Prism JS (CSS + Javascript) sehingga direktori tersebut berisi:

plugin/prism/
├── prism.css
└── prism.js

Ada dua tempat yang harus ditambahkan.

CSS

CSS diperlukan untuk tematik kode. Ditambahkan di elemen HEAD sehabis berkas CSS tematik.

 

<html>
<head>
<!-- ... -->
                <link rel="stylesheet" href="css/theme/beige.css">
                <link rel="stylesheet" href="plugin/prism/prism.css">
<!-- ... -->
</head>
<body>
<!-- ... -->
</body>

Setelah ini Javascript.

Javascript

Ubah konfigurasi di perintah:

Reveal.initialize();

Tambahkan berkas Javascript tersebut:

Reveal.initialize({
  dependencies: [
    { src: 'plugin/prism/prism.js' },
  ]
});

Contoh Penggunaan

Kode di HTML:

<section>
     <h2>Slide 3</h2>
     <pre><code class="language-html" data-trim data-noescape>
&#60;pre&gt;&#60;code class="language-bash"&gt;$ echo Test &#60;/code&gt;&#60;/pre&gt;
     </code></pre>
</section>

Hasilnya:

Highlight

Highlight

Fitur Markdown

Buat orang-orang yang terbiasa mengisi WIKI, Github Pages, dan sejenisnya, bahasa Markdown lebih sederhana daripada harus mengetik elemen HTML.

Unduh berkas-berkas seperti biasa.

mkdir -p plugin/markdown
wget https://raw.githubusercontent.com/hakimel/reveal.js/master/plugin/markdown/markdown.js -O plugin/markdown/markdown.js
wget https://raw.githubusercontent.com/markedjs/marked/master/marked.min.js -O plugin/markdown/marked.js

Javascript

Ubah konfigurasi di perintah:

Reveal.initialize();

Tambahkan kedua berkas tersebut:

Reveal.initialize({
  dependencies: [
    { src: 'plugin/prism/prism.js' },
    { src: 'plugin/markdown/marked.js' },
    { src: 'plugin/markdown/markdown.js' },
  ]
});

Contoh Penggunaan

<section data-markdown><script type="text/template">
## Slide 4: Markdown

```bash 
echo "Hello World!"
```
</script></section>

Hasilnya:

Created with Markdown

Created with Markdown

Terakhir

Saya lelah. Nanti lanjut (kalau tidak malas). Setidaknya saya sudah memberikan gambaran bagaimana cara menggunakan Reveal JS dan menambahkan plugin tambahan.

Bacaan Lebih Lanjut

Aktivasi Windows 10 Edu untuk Universitas Indonesia
Aktivasi Windows

Aktivasi Windows 10 Edu untuk Universitas Indonesia

Terkadang di dunia ini kita tidak dapat memilih apa yang harus kita kerjakan. — anon IT yang dipaksa mengoprek Windoze.

Ketika pemasangan Windows, seharusnya Windows yang sudah dipasang dengan lisensi volum Universitas Indonesia menggunakan DNS mengarah ke ms.ui.ac.id. Namun, ada kalanya DNS tersebut tidak dapat diakses. Misalnya, karena Windows tersebut berjalan sebagai sistem operasi tamu, berada di luar jaringan UI atau dalam NAT, dan lain sebagainya.

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Saya sendiri sudah frustrasi mencari cara mengonfigurasi DNS di Windows. Maklum, terakhir saya pengguna Windows XP. Itu sebabnya, dapat digunakan cara kedua yang lebih familiar.

Jalankan Powershell sebagai administrator

 → ketik “powershell”  klik kanan pada Windows Powershell  Run as administrator

Run Windows Powershell as administrator

Run Windows Powershell as administrator

Operasi selanjutnya dijalankan di dalam Windows Powershell.

Aktivasi Windows

cd \Windows\system32
cscript slmgr.vbs /skms km-01.ms.ui.ac.id
cscript slmgr.vbs /ato

Penjalanan skrip yang pertama adalah mengonfigurasi secara manual KMS UI. Yang kedua adalah menjalankan aktivasi Windows.

Windows Activation on Universitas Indonesia volume license

Windows Activation on Universitas Indonesia volume license

Kalau lisensi Anda belum lisensi Universitas Indonesia, silakan hubungi staf TIK fakultas terdekat. Atau, hubungi Helpdesk DSTI untuk pemanduan pemasangan lisensi. Setahu saya, semua sivitas akademika UI berhak memiliki lisensi Windows asli dan layanan Office 365 dari Universitas Indonesia.

 

Bacaan Lebih Lanjut

Akses Dolphin (Manajer Berkas KDE) ke SMBv2 atau SMBv3
About KDE

Akses Dolphin (Manajer Berkas KDE) ke SMBv2 atau SMBv3

Karena WCry 2.0, protokol SMBv1 sudah tidak berlaku lagi. Kebanyakan peladen berkas sudah berjalan di versi 2 ke atas. Masalahnya, banyak penjelajah berkas masih menggunakan SMBv1 secara baku. Untuk itu, perlu diaktifkan klien versi 2 ke atas.

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Saya pernah membuat sebuah retasan dengan memasang berkas tersebut menggunakan CIFS. Ternyata ada cara yang lebih baik, yakni dengan mengonfigurasi pustaka klien SMB untuk mengaktifkan sampai versi 3.

Caranya:

$ mkdir ~/.smb
$ cat > ~/.smb/smb.conf  << EOF
[global]
    client max protocol = SMB3
EOF

Selesai.

Bacaan Lebih Lanjut

Optimasi MySQL: Mematikan Query Cache

Optimasi MySQL: Mematikan Query Cache

Universitas Indonesia banyak menggunakan WordPress sebagai backend situs. Sayangnya, WordPress hanya mendukung basisdata MySQL. Untuk itu, kami memilih menggunakan MariaDB. Ada juga, sih, ingin menggunakan Percona, tetapi itu untuk kisah yang lain.

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Saya mendapati bahwa akses WordPress agak lama 1 sampai beberapa detik. Dari hasil baca sana-sini, saya menemukan sepertinya masalahnya ada pada konfigurasi query cache (QCache). Oracle menyarankan QCache dimatikan saja karena tidak mendukung paralelisasi pada mesin multi-core. Bahkan, untuk Oracle versi MySQL 5.6 secara baku mematikan fasilitas ini.

Lalu bagaimana?

Menurut saya, berhubung MariaDB berada di atas ZFS yang sudah ada ZIL dan ARC/L2ARC, mengapa tidak langsung saja pertembolokan diurus oleh sistemberkas?

Akhirnya, saya pun mematikan QCache:

query_cache_size = 0
query_cache_type = OFF

innodb_buffer_pool_instances = 4
innodb_buffer_pool_size = 4G

Sehingga:

MariaDB [(none)]> show global status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 62803 |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show global status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 62803 |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> SHOW STATUS LIKE 'Qcache%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Qcache_free_blocks      | 0     |
| Qcache_free_memory      | 0     |
| Qcache_hits             | 0     |
| Qcache_inserts          | 0     |
| Qcache_lowmem_prunes    | 0     |
| Qcache_not_cached       | 0     |
| Qcache_queries_in_cache | 0     |
| Qcache_total_blocks     | 0     |
+-------------------------+-------+
8 rows in set (0.00 sec)

Indikator kesuksesan saya adalah tabel yang terbuka di MariaDB tidak bertambah atau bertambah dalam jumlah yang sedikit. Hasilnya, situs berjalan dengan baik dan lebih cepat.

Saya tertarik dengan mematikan double buffer pada MariaDB. Fungsi ini dapat digantikan oleh ZFS dengan mekanisme ZIL. Untuk berkas selain ZFS (EXT4) sangat tidak disarankan karena bila MySQL OOM atau mati tiba-tiba, InnoDB bisa langsung rusak. Ya, tapi, berhubung itu untuk situs yang banyak menulis ke basisdata, saya rasa belum perlu.

Bacaan Lebih Lanjut

Perkakas untuk Perangkat Keras Peladen HP

Perkakas untuk Perangkat Keras Peladen HP

Sanggahan

Universitas Indonesia memiliki banyak penyedia (vendor) untuk menyediakan perangkat keras peladen. Ada IBM, HP, dan (Alm.) SUN Microsystem. Kebetulan salah satunya adalah HP. Saya tidak sedang mengiklankan merek tertentu, namun berbagi pengalaman saja.

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Penambahan Repo

Perkakas HP yang lama bernama hpacucli. Sekarang berganti nama menjadi ssacli.

Pertama-tama, pasang repo HP MCP:

echo "deb http://downloads.linux.hpe.com/SDR/repo/mcp stretch/current non-free" | sudo tee /etc/apt/sources.list.d/HP-mcp.list

Tambahkan kunci publik.

wget -O- https://downloads.linux.hpe.com/SDR/hpePublicKey2048_key1.pub | sudo apt-key add -

Perbaharui daftar aplikasi.

sudo apt update

Pemasangan Perkakas

Ada banyak perkakas yang disediakan oleh HP, termasuk juga SNMP. Namun, saya hanya tertarik perkakas untuk saya.

sudo apt install ssacli

Uji Coba

Kalau berhasil, maka perintah berikut akan bisa dijalankan.

$ sudo ssacli  ctrl all show

Smart Array P440ar in Slot 0 (Embedded)   (sn: PDNLH0BRH992F5)
Smart Array P441 in Slot 2                (sn: PDNMH0ARH84030)

Saya sengaja tidak mengurangi spasi pada parameter untuk membuktikan saya hanya menyalin perintah dari daftar perintah hpacucli.

Sepatah Kata Terakhir

Sejauh saya mencoba, parameter ssacli sepertinya identik dengan hpacucli. HP juga menyediakan SNMP untuk dapat mengakses kesehatan dan akses peramban. Namun, saya tidak membahasnya di sini karena ada di buku manual.

Repositori juga menyediakan untuk distro GNU/Linux lainnya seperti Ubuntu, Redhat, dan sejenisnya. Silakan lihat di daftar repositori. Saya mengubah URL menjadi HTTPS karena blog ini sensitif terhadap konten tidak aman (HTTP).

Bacaan Lebih Lanjut

Pemasangan Docker pada Debian Stretch
Docker

Pemasangan Docker pada Debian Stretch

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Pasang fitur HTTPS untuk APT:

sudo apt install apt-transport-https

Impor kunci repo:

wget -O- https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -

Tambahkan repo docker.io:

echo "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
    $(lsb_release -cs) \
    stable" | sudo tee /etc/apt/sources.list.d/docker.list

Perbaharui daftar paket repo dan pasang Docker:

sudo apt update && sudo apt install docker-ce

Muat ulang mesin biar aman:

sudo systemctl reboot

Selesai.

Tips #1 Eskalasi Izin Akun Pengguna Biasa

Supaya tidak perlu menjalankan Docker sebagai root, tambahkan izin untuk mengakses Docker dari login Anda. Caranya dengan menambahkan login Anda ke grup docker.

sudo gpasswd -a `whoami` docker
sudo newgrp docker

Tips #2 Pengujian Pemasangan Docker

Uji bila ini semua berhasil:

docker run hello-world

 

Solusi PostgreSQL dengan Patroni
PostgreSQL database

Solusi PostgreSQL dengan Patroni

Tahun baru dan Universitas Indonesia kedatangan peladen baru. Berhubung tim pengembang DSTI UI membuat pengembangan berbasis pelayan-mikro (microservice) dan ada pengembang yang iseng menantang saya menuju Kubernetes, saya pun tertantang membuat tutorial yang mendukung arsitektur tersebut. Kubernetes menyediakan fasilitas skalabilitas untuk menambah dan mengurangi peladen suatu layanan secara otomatis atau bisa diprogram manual.

Cara yang paling mudah untuk menyiapkan infrastruktur adalah dengan mengambil resep dari Ansible Playbook, menggunakan Juju, menggunakan helm, atau pemaket awan menurut keyakinan dan kepercayaan masing-masing. Namun, sebelum itu, saya tertarik untuk membahas bagaimana seandainya bila semua itu dibuat secara manual. Hal ini agar setiap kita dapat memahami bagaimana cara kerja masing-masing komponen yang nantinya diterbitkan dengan satu baris kode.

Tulisan ini sebenarnya mengikuti tutorial dari Linode. Hanya saja, saya menyesuaikan dengan lingkungan UI, Debian Stretch. Sehingga, ada yang saya modifikasi untuk keperluan dan keyakinan saya.

Arsitektur

PostgreSQL HA

PostgreSQL HA dengan 3 node dibalik haproxy

Untuk lingkungan ujicoba, saya membuat 5 mesin VM di VirtualBox dengan menggunakan 2 kartu jaringan (NIC). Satu NIC tipe NAT untuk keluar (standar VirtualBox) dengan DHCP. Satu lagi NIC tipe Jaringan Internal yang digunakan untuk setiap VM berkomunikasi satu sama lain.

pg1:

  • hostname: pg1
  • NIC: 192.0.2.11
  • Memori: 1GB

pg2:

  • hostname: pg2
  • NIC: 192.0.2.12
  • Memori: 1GB

pg3:

  • hostname: pg3
  • NIC: 192.0.2.13
  • Memori: 1GB

haproxy0:

  • hostname: haproxy0
  • NIC: 192.0.2.22
  • Memori: 512MB

etcd0:

  • hostname: etcd0
  • NIC: 192.0.2.21
  • Memori: 1GB

Berhubung komputer saya memiliki memori 32GB, saya agak royal mengalokasikan memori. Untuk keperluan pembelajaran, bisa, kok, dikurangi menjadi 512MB. Tapi, saya belum mencoba.

Sekedar tips untuk pengerjaan pg1 s.d. pg3. Sebaiknya kerjakan saja dulu pg1 lalu setelah rampung, klon dan ubah konfigurasi IP dan hostname sesuai dengan masing-masing mesin.

Konfigurasi Jaringan

Ada dua hal yang perlu dikerjakan:

  1. Konfigurasi IP pada NIC yang digunakan untuk berkomunikasi
  2. Tambahkan daftar hostname.

Konfigurasi IP

Pertama-tama kita perlu tahu NIC yang perlu dikonfigurasi. Debian Stretch sudah tidak lagi menyediakan ifconfig. Cara yang sahih sekarang untuk mengetahui ada antarmuka NIC apa saja yang tersedia:

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:86:ca:c3 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 08:00:27:20:b1:2b brd ff:ff:ff:ff:ff:ff

Pada konfigurasi VM saya, yang NIC yang perlu dikonfigurasi adalah enp0s8 — punya Anda bisa beda. Untuk menambahkan konfigurasi IP statik umpanya untuk mesin pg1:

$ sudo tee /etc/network/interfaces.d/enp0s8 << EOF
auto enp0s8
allow-hotplug enp0s8
iface enp0s8 inet static
  address 192.0.2.11
  netmask 255.255.255.0
EOF

Gunakan penyunting teks favorit Anda, tapi saya menggunakan cara heker. 😛

Lakukan ini untuk pg2, pg3, haproxy0, dan etcd0 dengan IP mereka masing-masing.

Untuk langsung mengaktifkan konfigurasi jaringan:

$ sudo ifup enp0s8

Lakukan ini di semua mesin.

Konfigurasi Hostname

Untuk VM, sebaiknya untuk setiap VM yang berhubungan dimasukkan namanya ke daftar /etc/hosts. Lakukan ini di semua mesin:

$ sudo tee -a  /etc/hosts << EOF
192.0.2.21      etcd0
192.0.2.22      haproxy0
192.0.2.11      pg1
192.0.2.12      pg2
192.0.2.13      pg3
EOF

Ganti nama hostname, umpanya untuk mesin pg1:

sudo hostnamectl set-hostname pg1

Keluar dari SSH lalu masuk kembali. Kalau tidak, nama sudah berganti tetapi shell Anda masih bernama yang lama.

Pemasangan etcd

TIPS: Pengerjaan yang saya lakukan adalah saya mematikan pg1. Lalu, saya klon dan saya ubah IP dan hostname.

Aplikasi etcd adalah sebuah repositori konfigurasi yang bisa diakses dari jaringan. Dia bisa dibuat kluster, tetapi untuk contoh kali ini dibuatkan satu saja. Saya asumsikan jaringan dan nama sudah terbuat.

Cara terbaik saat ini untuk lingkungan awan adalah menggunakan pemaket snapcraft untuk mendapatkan perangkat lunak terbaru yang stabil. Debian Stretch tidak memasang pemaket ini secara baku. Pasang dulu:

sudo apt update
sudo apt install snapd

Lalu, pasang etcd menggunakan snapcraft:

sudo snap install etcd

Konfigurasi aplikasi berbasis snapcraft ada di /var/snap. Berhubung konfigurasinya panjang, saya sudah sediakan unduhan. Saya jelaskan properti yang penting saja nanti. Cara pasang:

wget -q -O- https://raw.githubusercontent.com/jpmrblood/postgresql-ha-configuration/master/etcd.conf.yml | sudo tee /var/snap/etcd/common/etcd.conf.yml

Beberapa properti yang penting:

  • name: ‘etcd0’ — memberi nama mesin ini. Kalau ada lebih dari satu mesin etcd, pastikan masing-masing unik.
  • data-dir: /var/lib/etcd/data — tempat data etcd. Saya sesuaikan dengan FHS.
  • wal-dir: /var/lib/etcd/wal — tempat penampungan untuk jurnal etcd.
  • listen-peer-urls: http://192.0.2.21:2380 — Alamat TCP/IP untuk mendengarkan permintaan bergabung.
  • listen-client-urls: http://localhost:2379,http://192.0.2.21:2379 — Alamat TCP/IP untuk aplikasi ini beroperasi.
  • initial-advertise-peer-urls: http://192.0.2.21:2380 — Alamat TCP/IP untuk mengiklankan diri sendiri ke etcd yang lain. Saat ini tidak terpakai karena hanya ada satu saja.
  • advertise-client-urls: http://192.0.2.21:2379 — Alamat TCP/IP yang diberitahukan kepada yang lainnya.
  • initial-cluster: etcd0=http://192.0.2.21:2380, — Sejumlah alamat TCP/IP peladen etcd yang tergabung dalam kluster. Kali ini hanya satu.
  • initial-cluster-token: ‘etcd-cluster’ — Nama kluster etcd kita. Maaf kalau kurang kreatif.
  • initial-cluster-state: ‘new’ — Kondisi awal saat pertama kali etcd nanti dijalankan.

Kalau tutorial Linode memuat semua ini dalam variabel lingkungan. Sayangnya, Debian Stretch tidak ada etcd sehingga kita terpaksa memasangnya dari snapcraft.

Sebelum menjalankan etcd, jangan lupa membuat direktori yang dibutuhkan.

sudo mkdir -p /var/lib/etcd/data /var/lib/etcd/wal
sudo snap start etcd

TIPS #1: Kalau mau mencoba dulu, sebelum menggunakan snap start, gunakan snap run untuk menjalankan etcd langsung. Apabila sudah selesai diagnosis, tekan CTRL+C untuk selesai.

Bila sudah benar, maka akan terlihat:

$ snap services
Snap  Service  Startup  Current
etcd  etcd     enabled  active

Bila statusnya sudah aktif, sekarang saatnya memasang PostgreSQL beserta Patroni.

Pemasangan PostgreSQL (pg1, pg2, dan pg3)

Kecuali hostname dan IP, semua pemasangan PostgreSQL identik. Selain itu, saya menggunakan pwgen untuk membuat sandi. Mohon sandi Anda berbeda dengan tutorial ini!

Pasang PostgreSQL

Pasang seperti biasa.

echo "deb http://kambing.ui.ac.id/postgresql/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
wget --quiet -O - http://kambing.ui.ac.id/postgresql/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update && sudo apt install postgresql-10

Saya sengaja memilih versi 10. Lebih baru dan keren.

Matikan layanan PostgreSQL karena kita mau menjalankannya dari Patroni:

sudo systemctl disable postgresql

Pasang Patroni

Patroni tersedia di Python PIP. Pasang PIP:

sudo apt install python3-pip
sudo pip3 install --upgrade setuptools

Baru pasang Patroni dan Python-etcd:

sudo pip3 install patroni[etcd]

Selanjutnya, buat konfigurasi Patroni:

$ sudo tee /etc/patroni.yml << EOF
scope: postgres
namespace: /db/
name: pg1

restapi:
    listen: 192.0.2.11:8008
    connect_address: 192.0.2.11:8008

etcd:
    host: 192.0.2.21:2379

bootstrap:
    dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        postgresql:
            use_pg_rewind: true

    initdb:
    - encoding: UTF8
    - data-checksums

    pg_hba:
    - host replication replicator 127.0.0.1/32 md5
    - host replication replicator 192.0.2.11/0 md5
    - host replication replicator 192.0.2.12/0 md5
    - host replication replicator 192.0.2.13/0 md5
    - host all all 0.0.0.0/0 md5

    users:
        admin:
            password: ioqu8ohqueh6kai5va0Hoigirae7Xaem
            options:
                - createrole
                - createdb

postgresql:
    listen: 192.0.2.11:5432
    connect_address: 192.0.2.11:5432
    data_dir: /var/lib/postgresql/10/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: shohkaitahsee0er6eXoh0Ohghie2toh
        superuser:
            username: postgres
            password: exuush9shohlail6Cool9eeng3kae5iy
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
EOF

Jangan lupa mengganti IP pada setiap baris listen dan connect_address pada mesin pg2 dan pg3 dengan IP masing-masing. Jangan lupa mengganti sandi (password) agar tidak sama dengan tutorial ini!

Siapkan direktori data untuk PostgreSQL versi Patroni:

sudo -u postgres mkdir -p /var/lib/postgresql/10/patroni

Terakhir, pasang unit pelayan systemd Patroni:

$ sudo tee /etc/systemd/system/patroni.service << EOF
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

Environment="PATH=/usr/lib/postgresql/10/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
ExecStart=/usr/local/bin/patroni /etc/patroni.yml

KillMode=process

TimeoutSec=30

Restart=no

[Install]
WantedBy=multi-user.target
EOF

Daftarkan dan jalankan Patroni:

sudo systemctl daemon-reload
sudo systemctl enable patroni
sudo systemctl start patroni

Kalau sudah benar, maka Patroni akan menjalankan PostgreSQL versinya.

$ systemctl status patroni
● patroni.service - Runners to orchestrate a high-availability PostgreSQL
   Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2018-01-26 11:18:14 WIB; 2min 27s ago
 Main PID: 9391 (patroni)
    Tasks: 12 (limit: 4915)
   CGroup: /system.slice/patroni.service
           ├─9391 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni.yml
           ├─9417 postgres -D /var/lib/postgresql/10/patroni --config-file=/var/lib/postgresql/10/patroni/postgresql.conf --max_prepared_transactions=0 --port=5432 --cluster_name=postgres --max_locks_per_transaction
           ├─9420 postgres: postgres: checkpointer process   
           ├─9421 postgres: postgres: writer process   
           ├─9422 postgres: postgres: wal writer process   
           ├─9423 postgres: postgres: autovacuum launcher process   
           ├─9424 postgres: postgres: stats collector process   
           ├─9425 postgres: postgres: bgworker: logical replication launcher   
           └─9430 postgres: postgres: postgres postgres 192.0.2.11(44308) idle

Lakukan ini di pg2 dan pg3. Jangan lupa mengganti IP pada berkas /etc/patroni.yml.

Oh, iya, kalau menggunakan klon, jangan lupa /etc/network/interfaces.d/enp0s8 diubah sesuai dengan IP mesin. Jangan lupa juga ganti hostname.

Terus, kalau misalnya pg2 dan pg3 diklon dari pg1 saat Patroni sudah terkonfigurasi, jangan lupa kosongkan terlebih dahulu direktori data Patroni.

sudo systemctl stop patroni
sudo -u postgres rm -rf /var/lib/postgresql/10/patroni/
sudo -u postgres mkdir /var/lib/postgresql/10/patroni/
sudo systemctl start patroni

Kalau tidak, bisa aneh nanti.

Pemasangan HAProxy

Komponen terakhir yang hendak kita pasang adalah HAProxy. Untungnya, sudah ada paket Debian untuk HAProxy. Pasang seperti biasa:

sudo apt install haproxy

Konfigurasi HAProxy untuk menjadi proksi ketiga mesin  PostgreSQL kita.

$ sudo tee /etc/haproxy/haproxy.cfg << EOF
global
    maxconn 100

defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s

listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /

listen postgres
    bind *:5000
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server postgresql_192.0.2.11_5432 192.0.2.11:5432 maxconn 100 check port 8008
    server postgresql_192.0.2.12_5432 192.0.2.12:5432 maxconn 100 check port 8008
    server postgresql_192.0.2.13_5432 192.0.2.13:5432 maxconn 100 check port 8008
EOF

Setelah itu, muat ulang HAProxy untuk memuat konfigurasi baru.

sudo systemctl restart haproxy

Saya mengikuti Tutorial Linode untuk membuat port PostgreSQL pada port 5000. Anda bisa saja membuat port 5432. Kebetulan PC saya ada layanan PostgreSQL lain yang jalan pada port itu.

Untuk memonitor, silakan buka peramban Anda pada port 7000.

HAProxy interfacing Patriani's PostgreSQL nodes

HAProxy interfacing Patriani’s PostgreSQL nodes

Hanya ada satu yang hijau/aktif. Kalau tiga-tiganya, kemungkinan Anda mengklon tanpa mengubah konfigurasi dan mengosongkan direktori data PostgreSQL terlebih dahulu.

Selesai.

(Kulshekhar Kabra, 2017)

Daftar Pustaka

Kulshekhar Kabra (2017, September 19). Create a Highly Available PostgreSQL Cluster Using Patroni and HAProxy. Retrieved January 26, 2018 from https://linode.com/docs/databases/postgresql/create-a-highly-available-postgresql-cluster-using-patroni-and-haproxy/.^
Memasang Python 3.6.4 pada Debian dan Turunannya
ID Python

Memasang Python 3.6.4 pada Debian dan Turunannya

Cara sebelumnya menggunakan pyenv, sebuah perkakas yang membantu untuk memasang Python 3. Python 3.6 menyatakan bahwa paket pyenv sudah kedaluwarsa, alias sudah tidak akan dipakai lagi. Ya, sudah, dari pada ada masalah, mari memasang dengan mengompilasi dari kode sumber. Sekalian saja, mengoptimasi pemasangan.

Seperti yang lain, pasang paket yang dibutuhkan:

sudo apt install -y build-essential libbz2-dev libssl-dev libreadline-dev libsqlite3-dev tk-dev libpng-dev libfreetype6-dev

Unduh kode sumber, ekstraksi, dan masuk ke direktori:

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
tar xvfJ Python-3.6.4.tar.xz
cd Python-3.6.4/

Konfigurasi dengan optimasi menyeluruh:

CXX="/usr/bin/g++" CFLAGS="-march=native -mtune=native -pipe" CXXFLAGS=$CFLAGS ./configure --enable-optimizations --with-lto --enable-shared  --with-system-expat --with-system-ffi --with-system-libmpdec --with-ensurepip=yes

Kompilasi:

make -j$(nproc)

Ada sekitar 406 tes yang harus dilewati. Untuk itu, sebaiknya saat kompilasi Anda menyapa keluarga Anda, gebetan Anda, atau pun rekan di sebelah Anda. Ingat! Anda tidak sendirian di dunia ini.

Pasang dengan nama alternatif agar tidak bentrok dengan Python yang telah terpasang di sistem:

sudo make altinstall

Konfigurasi Sebuah Lingkungan Python versi 3.6.4

Cara untuk membuat sebuah lingkungan terisolasi yang didukung oleh Python adalah dengan menggunakan perkakas venv. Perkakas pyenv sudah kedaluwarsa dan tidak disarankan pengembang Python.

Pasang sebuah lingkungan baru:

python3.6m -m venv ~/.local/python-3.6.4

Masukan direktori lingkungan lokal tersebut ke PATH dan simpan di ~/.bashrc agar tersimpan PATH baru tersebut.

echo "PATH=~/.local/python-3.6.4/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

Jalankan Python versi 3.6.4

Untuk menjalankan Python yang sudah terpasang:

source activate

Untuk mematikan — mengembalikan ke Python versi sistem:

source deactivate

Selesai.

Memasang Python 3 Terbaru di Debian dan Turunannya
ID Python

Memasang Python 3 Terbaru di Debian dan Turunannya

Debian menyertakan Python 3 versi 3.5 yang sebenarnya cukup untuk digunakan. Namun, untuk menambah khasanah dan tulisan di blog ini, saya berusaha menulis cara memasang Python versi terbaru. Siapa tahu ada yang berminat. Apalagi, Python menjadi seksi semenjak banyak pustaka seperti Numpy dan Pandas untuk pengolahan data besar.

Paket yang Diperlukan

Pasang pengembangan paket yang diperlukan:

sudo apt install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                         libsqlite3-dev tk-dev libpng-dev libfreetype6-dev  -y

Pasang paket GIT karena perkakas untuk memasang memerlukan akses GIT:

sudo apt install git

Perkakas pyenv

Perkakas pyenv adalah sebuah perkakas yang bisa memasang berbagai versi Python dan mengaktifkannya sesuai selera.

 wget -O- https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer  | bash

Perkakas pyenv akan memasang skrip yang dibutuhkan untuk memasang Python. Setelah memasang pyenv, tambahkan tiga baris berikut ke ~/.bashrc dengan penyunting teks favorit Anda.

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Untuk bisa langsung mengaktifkan, langsung jalankan:

source ~/.bashrc

Pemasangan Python

Setelah perkakas pemasang selesai dipasang, langsung saja pasang Python 3 terbaru:

pyenv install 3.6.4

Setelah selesai pemasangan, kasih nama lingkungan Python versi 3.6.4 itu agar nanti kalau butuh versi ini gampang diaktifkan.

pyenv virtualenv 3.6.4 versi_3.6.4

Versi Global

Sampai baris ini, bila kita mengetik:

$ python --version
Python 2.7.13

akan terlihat versi baku untuk pengguna yang aktif adalah Python 2.7.13 (Debian Stretch). Agar versi yang telah dikompilasi menjadi versi yang baku, jalankan:

pyenv global versi_3.6.4

Selesai.

Bacaan Lebih Lanjut

WordPress 4.9.1 dengan PHP 7.2

WordPress 4.9.1 dengan PHP 7.2

Saya biasanya kalau mau memperbaharui WordPress selalu menunggu versi minor .1 atau lebih. Soalnya, suka ada perilaku tak terduga kalau versi mayor baru terbit. Kali ini, WordPress 4.9.1 sudah terbit.

Menurut situsnya, WordPress merekomendasikan penggunaan PHP 7.2. Saya sendiri baru tahu kalau sudah ada PHP 7.2. Pantas saja WordPress berhenti di versi 4.8.4 pada beberapa peladen.

Saatnya memasang PHP 7.2!

Pemasangan PHP 7.2

Saya pernah membahas tentang PHP 7.1+ di artikel terdahulu. Jadi, ini sekedar mengulang saja.

Aktifkan modul APT untuk mengakses repo berbasis HTTPS dan beberapa paket lainnya.

sudo apt-get install apt-transport-https lsb-release ca-certificates

Aktifkan repo Suri.

wget -O- https://packages.sury.org/php/apt.gpg | sudo apt-key add -
echo "deb https://packages.sury.org/php/ jessie main" | sudo tee -a /etc/apt/sources.list.d/php-sury.list
sudo apt update

Lalu, pasang PHP 7.2 untuk menggantikan PHP 5.

sudo apt install php7.2-fpm php7.2-curl php7.2-gd php7.2-imagick php7.2-json php7.2-mysql php7.2-readline php-redis php7.2-xml php7.2-mbstring php7.2-zip php7.2-mysql

Kalau hanya sekedar php-fpm, yang terpasang bakal versi 7.1. Harus secara eksplisit disebutkan versi 7.2.

Selanjutnya, menyalin konfigurasi fpm dari /etc/php5/fpm/pool.d ke /etc/php/7.2/fpm/pool.d untuk setiap pool.

Saya sejauh ini tidak ada masalah.

Fungsi Yang Mulai Ditinggalkan

Nampaknya PHP7 dan terbaru hendak dibuat menjadi domain yang ketat (strict typecast). Mungkin pengembang PHP ingin menjadikan PHP sebagai bahasa yang lebih aman. Kalau saya melihat log, biasanya akan diprotes bentuk akses senarai (array). Saya mendapati fungsi count() terutama yang paling sering dicatat.

count(): Parameter must be an array or an object that implements Countable in ...

Ada orang-orang yang memutuskan untuk kembali ke PHP 7.1. Tapi saya tidak! Agar sesuai dengan PHP7.2 dan terbaru, misalnya ada variabel:

count($elements[‘#value’])

count ( $elements )

Diubah dengan menambahkan uji tipe senarai :

is_array ( $elements ) && count ( $elements )

Atau, saat diubah menjadi tipe senarai:

$elements = ( array ) $source->getElements();

Penyebab ini semua kalau saya lihat di kode sumber WordPress adalah biasanya karena penggunaan variabel global.

Untung saja, untuk yang lain pun WordPress dan plugin-nya sudah cukup bersahabat.

Bacaan Lebih Lanjut

Melihat Laporan DMARC

Melihat Laporan DMARC

Dengan semakin ganasnya SPAM dan bisnis surel, Universitas Indonesia pun selalu memperbaharui konfigurasi surel agar selalu aman dan nyaman. Selama inisaya hanya menerapkan SPF, DKIM, ADSP, DMARC dan lain sebagainya ke sub domain UI. Kali ini, untuk domain global UI, DMARC pun diterapkan.

Saya membuka kotak pandora! Ternyata ada domain-domain di bawah UI yang masih perlu dikonfigurasi. Misalnya, untuk domain yang berbasis Google Apps (GMail), saya menerapkan minimum konfigurasi SPF dan DMARC. Namun, ini semua harus ditambahkan satu persatu.

Beruntung, DMARC menyediakan mekanisme laporan berkala yang bisa dipakai oleh UI untuk melihat bagaimana domainnya digunakan ke tempat lain. Laporan DMARC berformat XML. Untuk ini, saya menuliskan cara saya membaca XML tersebut dengan perkakas yang sudah ada.

Saya malas membuat pencacah sendiri. Untungnya, Dave dari TechSneeze menyediakan perkakas kecil untuk itu. Ada dua bagian yang perlu dipasang, pencacah dan pembaca. Berhubung saya tiba-tiba jadi malas menulis, saya percepat saja.

Basisdata

Pencacah ini memasukkan XML ke dalam basisdata. Basisdata MySQL ini digunakan untuk menyimpan hasil proses pelaporan DMARC. Mari buat sebuah basisdata:

sudo mysql --defaults-file=/etc/mysql/debian.cnf -e "create database opendmarc;"
sudo mysql --defaults-file=/etc/mysql/debian.cnf -e "grant all privileges on opendmarc.* to 'opendmarc'@'localhost' identified by 'p4$sW0Rd';"
sudo mysql --defaults-file=/etc/mysql/debian.cnf -e "flush privileges;"

Jangan lupa mengganti sandi dengan yang benar!

Pencacah

Pasang paket-paket pendukung.

sudo apt-get install libmail-imapclient-perl libmime-tools-perl libxml-simple-perl \
libclass-dbi-mysql-perl libio-socket-inet6-perl libio-socket-ip-perl libperlio-gzip-perl \
libmail-mbox-messageparser-perl unzip

Unduh dan masuk ke direktori.

git clone https://github.com/techsneeze/dmarcts-report-parser.git
cd dmarcts-report-parser

Salin berkas dmarcts-report-parser.conf.sample menjadi dmarcts-report-parser.conf yang akan dipakai sebagai konfigurasi. Ubah login MySQL di berkas tersebut.

$dbname = 'opendmarc';
$dbuser = 'opendmarc';
$dbpass = 'p4$sW0Rd';

Sudah bisa digunakan. Cara saya menggunakannya:

zcat /tmp/linkedin.com\!ui.ac.id\!1513036800\!1513123200\!chips.xml.gz | ./dmarcts-report-parser.pl -x -

Saya suka cara seperti ini. Kalau misalnya semua berkas laporan ditaruh di sebuah direktori, maka tinggal:

for report in `find /tmp/reports/ -type f `; do zcat $report | ./dmarcts-report-parser.pl -x - ; done

Kalau membaca konfigurasi, perkakas ini bisa membaca dari IMAP. Tetapi saya belum mencobanya.

Pembaca

Salin GIT:

rm -rf /var/www/html
git clone https://github.com/techsneeze/dmarcts-report-viewer.git html
sudo mv html /var/www
sudo chown -R 33:33 /var/www/html

Pasang PHP-FPM dan NGINX. Berkas utamanya ada di /var/www/html. Saya terlalu malas untuk mengonfigurasi. Tapi, ini kira-kira konfigurasi saya:

cat >> /etc/nginx/sites-enabled/default << EOF
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$query_string;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php7.0-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php7.0-fpm:
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
EOF

Jangan lupa dmarcts-report-viewer-config.php.sample menjadi dmarcts-report-viewer-config.php dan ubah $dbname, $dbuser, dan $dbpass seperti konfigurasi pencacah.

Silakan diubah sesuai selera. Nanti kalau sudah selesai, bisa dilihat di peramban:

DMARC Report

DMARC Report

Kalau saya tidak sedang sibuk dan malas menulis, saya akan mencoba membagikan bagaimana mengonfigurasi SPF, DKIM, ADSP, DMARC dan lain sebagainya. Kalau ingat, ya…. Tak janji.

Bacaan Lebih Lanjut

Membuat VLOG dengan Perangkat Lunak Bebas dan Terbuka

Saat ini di Indonesia sedang keranjingan membuat VLOG. VLOG adalah jurnal berbentuk video yang diunggah ke Youtube. Bahkan, Pakde Jokowi, Presiden RI, juga memiliki kanal Youtube resmi.

Mengapa saya spesifik menyebutkan hanya Youtube? Mengapa saya tidak menyebut media sosial lainnya? Karena vidio.com jarang yang menonton dan Vimeo masih saja ada yang memblokir. Selain itu, proses komersialisasi video atau lazim yang disebut sebagai monetisasi, hanya disediakan dengan mantap oleh Youtube.

Ahem! Saya sebenarnya mau menyinyir yang lainnya, bukan itu. Saya sedih bahwa banyak artis-artis media sosial yang menyarankan menggunakan perangkat berbayar semisalnya Adobe Premiere Pro. Banyak yang memberikan tutorial menggunakan perkakas ini. Sepertinya mereka banyak yang sanggup membayar Rp269.800,00 per bulan atau Rp3.237.600,00 per tahun.

Hmm…

Menurut saya, ada banyak peralatan yang lebih murah untuk membuat itu.

Perkakas yang Digunakan

Saya menggunakan kamera telepon pintar saya, Xiaomi Mi 6. Berikut spesifikasi saya:

  • Sistem operasi saya Lineage OS 14.1 bentukan 1024 oleh Xiaobai yang didapatkan dari XDA Developer.
  • Aplikasi Legend untuk membuat logo yang menarik. Saya dapatkan dari Playstore.
  • Aplikasi Audio Recorder untuk merekam suara. Saya dapatkan dari F-Droid.
  • Aplikasi kamera Snapdragon PRO M 4.4.0. Saya dapatkan zip pemasangan dari XDA.

Semua aplikasi yang saya sebutkan bisa diganti dengan yang lain. Intinya, semua kebutuhan (OS, kamera, dan aplikasi) sudah bisa dipenuhi dan banyak alternatif yang gratis dan bebas.

Saya memiliki PC dengan memori 32GB dan AMD FX-8350 seperti yang sudah pernah saya bahas sebelum ini. PC ini masih mumpuni. Berikut spesifikasi saya:

  • Sistem operasi saya GNU/Linux KDE Neon 5.11, sebuah distribusi KDE berdasarkan Ubuntu 16.04.
  • Aplikasi Kdenlive untuk menyunting video.
  • Aplikasi Audacity untuk menyunting suara. Aplikasi ini sangat penting untuk memperbaiki bising yang timbul.

Sekarang saatnya membuat video.

Bahan-bahan

Saya menggunakan bahan-bahan sebagai berikut:

  • Berkas intro tanpa suara yang dibuat dari Legend.
  • Berkas ketukan untuk suara intro yang saya rekam sendiri menggunakan Audio Recorder. Saya buat dengan mengetukkan meja.
  • Berkas “Take_You _Home_Tonight.mp3” yang disediakan oleh Youtube untuk bebas diunduh. Kalau penasaran, sumbernya “Take You Home Tonight – Vibe Tracks”.
  • Berkas saya berbicara singkat.
  • Berkas suara saya berbicara singkat.

Membuat Intro (dan Outro Karena Saya Terlalu Malas)

Create logo

Dari Legend, ketik kata yang mau dijadikan logo. Lalu, tekan tanda centang.

Edit Logo

Edit Logo

Sunting animasi logo dan tekan tanda panah ke bawah (ekspor/unduh) untuk memilih mengunduh sebagai video.

Video yang dibuat masih tidak ada suara. Anda dapat membuat suara apa pun, namun perhatikan lisensi lagu/suara yang hendak dijadikan suara latar. Untuk menghindari kerumitan, kali ini saya menggunakan suara yang saya buat sendiri. Selain unik, suara ini pun bebas lisensi dari orang lain. Benar-benar 100% karya sendiri.

Pada Kdenlive, klik Project → Add Clip untuk menambah video animasi dan suara ketukan animasi. Nanti pada Project Bin, video animasi dan suara akan muncul sebagai aset proyek (sebutan untuk mereka klip suara dan klip video). Untuk menggunakan keduanya, drag saja masing-masing ke linimasa (timeline) Video 1 dan Suara 1.

Inilah demarkasi yang membedakan orang jago dan bodoh. Proses membuat suara dan video menjadi sesuai/sinkronisasi. Anda harus pintar untuk menyesuaikan suara dan video (timing). Saya, sih, membuat klip video animasi pada menit 0 dan klip suara mulai dari menit ke-15. Saya juga menambahkan efek Phaser ke klip suara.

Setiap kita punya selera berbeda. Namun, saya sudah memberikan prinsip bagi Anda.

Video Isi

Pada video isi, saya seperti biasa menambahkan aset klip video pembicaraan saya.

Lalu, pada Project Bin, saya klik kanan → Extract Audio → Wav 48000Hz untuk menghasilkan klip suara pembicaraan saya. Pada video asli, suara saya berdesis (noise).

Modifikasi Desis

Buka Audacity dan buka berkas mentahan klip suara. Pada Audacity, drag pada bagian kosong yang biasanya cuma berisi desis.

Drag to get noise sample

Drag to get noise sample

Lalu, pilih Efek → Noise Reduction → Get Noise Profile.

Setelah itu, pilih semua bagian klip suara yang mau dibuang kebisingannya. Saya pilih CTRL + A untuk memilih semua.

Setelah terpilih, klik Efek → Noise Reduction → Get Noise Profile → OK. Ya, silakan ubah-ubah parameter sebelum OK. Saya sendiri hanya mengubah Noise reduction menjadi 15dB.

Buat Diam

Oh, iya, terkadang kita tidak bisa menghindari suara-suara aneh, misalnya di awal ada suara kamera. Drag saja area klip suara yang mau dibuang. Lalu, pilih Buat → Diam… → OK.

Simpan perubahan dengan Berkas → Export Audio.

Sinkronisasi Pembicaraan

Nah, ini yang paling ribet sedunia. Bahkan dunia rekaman profesional pun suka salah. Masukkan klip suara yang sudah dibuat di Audacity sebagai aset proyek.

Saya biasanya membagi klip video menjadi kanal video dan kanal suara. Caranya, dengan klik kanan pada klip di linimasa dan pilih Split Audio.

Buat kanal Audio baru dengan cara klik kanan pada panel label linimasa dan pilih Insert Track.

Drag klip suara ke trek yang baru dibuat. Sesuaikan gambarnya dengan trek audio asli.

Sound edit

Sound edit. Sorry BGM got in the way because recreate for the tutorial.

Seperti pada gambar, saya berusaha menyesuakan suara hasil sunting dengan suara asli. Saya perhatikan gunung-gunung suara. Mohon maaf bila pada gambar tersempil kanal BGM. Cuplikan saya buat setelah produksi untuk keperluan blog ini. Biasanya di atas BGM.

Setelah dirasa sesuai, klik kanan pada kanal Suara Asli dan hapus kanal tersebut. Hal ini agar suara yang digunakan adalah suara yang sudah dibersihkan sebelumnya.

Suara Latar (BGM/Background Music)

Beda jenis isi, beda pula penggunaan BGM. Ada yang sama sekali tak perlu misalnya, bila itu isinya adalah lagu, khotbah, atau diskusi bersama. Namun, suara jangkrik akan terdengar bila saya sendirian berbicara tanpa ada suara apa pun. Biasanya, untuk format santai, gunakan suara latar untuk menambah isi.

Prinsipnya sama seperti waktu kita makan di restoran atau belanja di Mall. Lagu yang dipasang menambah suasana kondusif. Ingat, ya, penambah, bukan untuk mengacaukan. Jadi, pilihlah suara yang sesuai dengan tema isi blog.

Youtube menyediakan aset suara yang bisa diunduh dan digunakan secara bebas. Perhatikan lisensi suara yang hendak digunakan. Biasanya ada lisensi yang memerlukan atribusi (penyantuman nama lagu yang digunakan) dan sebagainya. Saya menggunakan suara yang berlisensi Domain Publik/bebas.

Seperti biasa, masukkan berkas suara tersebut menjadi klip suara di Project → Add Clip. Drag seperti biasa untuk sejajar dengan konten. Atau, bisa agak geser sedikit kalau mau agak nyeni dan sedikit pro.

Ada dua cara untuk menyesuaikan durasi klip suara latar dengan klip konten. Yang pertama, ke ujung klip lalu kecilkan bingkai klip lagu sehingga pas dengan durasi yang dibutuhkan. Cara kedua, klik dua kali pada  klip suara dan klip bisa disesuaikan parameter durasi, mulai muncul pada menit ke berapa, dan berakhir pada menit ke berapa. Saya menggunakan cara pertama, lalu menggunakan cara kedua untuk lebih presisi lagi.

Ingat! Kita mau mendengar suara saya yang lembut dan bersahaja, bukan suara musik. Untuk itu, suara BGM harus dipelankan. Caranya: pilih klip suara, lalu pilih Add Effect → Audio correction → Volume (keyframable). Pada bagian Effects for Take_You_Home_Tonight.mp3, di bagian Volume, saya menurunkan Gain menjadi -17dB. Cara menurunkannya adalah dengan drag di batang Gain.

Setiap klip baik suara mau pun video dapat dibuat efek-efek yang ditumpuk menjadi satu. Namun, untuk saat ini, cukup gunakan efek dasar saja.

Terakhir

Saya pun menambahkan klip video Intro di bagian akhir. Saya memperpanjang durasi klip suara BGM sampai ke bagian akhir klip ini.

Semua proses ini saya kerjakan sekitar sejam lebih. Hal ini karena saya harus mencari-cari aplikasi yang diperlukan dan iseng-iseng mencoba. Menurut saya, kalau memang niat, kumpulkan saja klip-klip yang diperlukan. Dan, apabila sudah terbiasa, paling proses ini hanya 15 menit saja. Apalagi, saya belum menggunakan preset (konfigurasi yang sudah tersimpan dan siap digunakan).

Saya justru menghabiskan waktu untuk mengetik entri blog ini. Ah, saya sudah ditunggu untuk minum kopi bersama. Masih banyak perkakas lain yang bisa dipakai untuk membuat video. Namun, untuk saat ini saya rasa cukuplah untuk membuat video Youtube yang sederhana dan mumpuni. Yang bikin canggih itu  kreativitas, bukan perkakas yang mahal.

May the source be with you.

Memasang Enterprise Single Sign-On – CAS  (Sebelumnya Jasig CAS)

Memasang Enterprise Single Sign-On – CAS (Sebelumnya Jasig CAS)

SSO merupakan sebuah konsep yang sebenarnya digunakan di portal korporasi. Namun, pada perkembangannya, justru organisasi pendidikan tinggi mengadopsinya juga untuk login yang terfederasi. Contoh pengguna SSO yang terfederasi untuk perguruan tinggi adalah eduroam.

Saya mau membuat sebuah solusi SSO menggunakan Jasig CAS. Ada, sih, versi lain seperti SUN CAS, Google Accounts, atau WSO2 Identity Provider. Tapi, saya memilih CAS karena sudah lama digunakan di UI dan saya malas mencari yang lain.

Berhubung tulisan ini panjang, langsung saja saya berikan asumsi berikut:

  • Debian Strecth masih kosong.
  • CAS berdiri sendiri (standalone) dengan Jetty.
  • Sertifikat SSL sudah ditandatangani oleh pihak ketiga.
  • Iman yang teguh.

Langsung saja persiapan sistem.

Persiapan Sistem

Sebelum memasang CAS, persiapkan sistem terlebih dahulu.

Memasang JDK 8

Saya percaya isi lisensi, lebih baik dilewati saja:

echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

Agar dapat memasang sertifikat dari Webupd8, pastikan untuk memasang dirmgr (khusus Stretch):

sudo apt install dirmngr

Tambahkan repo Pemasang Oracle Java.

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
sudo apt update

Pasang Oracle JDK8 dan paket unlimited JCE. Paket JCE berfungsi untuk mengaktifkan fungsi enkripsi yang lebih tinggi dari standar enkripsi yang disediakan oleh Oracle Java.

sudo apt install oracle-java8-installer oracle-java8-unlimited-jce-policy -y

Selesai untuk Java.

Menyiapkan Direktori yang Perlu

Sayangnya, sebelum CAS terpasang, ada yang harus dipersiapkan. Hal ini karena konfigurasi CAS masih terkode langsung dan tersebar di konfigurasi sehingga lebih baik untuk pemula mengikuti direktori konfigurasi standar.

Yang saya maksud adalah membuat direktori /etc/cas yang dimiliki oleh pengguna. Bisa saja dijalankan sebagai root langsung. Namun, lebih baik Anda berhenti membaca tulisan ini dan cari pekerjaan yang lebih cocok daripada sysadmin.

sudo mkdir /etc/cas /var/log/cas
sudo chown user:user /etc/cas /var/log/cas
sudo chmod 700 /etc/cas

Penambahan ekstra keamanan sehingga hanya bisa diakses oleh pengguna yang menjalankan CAS.

Memasang Sertifikat SSL

Untuk sertifikat yang ditandatangani sendiri, silakan baca panduan yang sudah disediakan pada Daftar Bacaan. Serius, deh. Pelit sekali Anda untuk bahkan  tidak mau menyediakan waktu untuk membuat sertifikat SSL Let’s Encrypt dengan certbot.

Hal yang perlu dilakukan adalah mengonversi PEM menjadi PKCS12 yang siap untuk diimpor ke dalam format keystore Java.

Ubah format PEM ke format PKCS12. Buat sembarang sandi karena keytool Java (JKS) tidak bisa mengimpor kunci tanpa sandi.

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name sesukaakulah -CAfile server.crt -caname geotrust

Terakhir, ubah dari PKCS12 ke JKS. Lihat, berkas dan kunci masing-masing saya buat dengan sandi yang berbeda. Jangan lupa disesuaikan pada berkas konfigurasi.

keytool -importkeystore  -deststorepass 2tZ065jsXz866Jxm -destkeypass wQShfDLHWmK4Zt6E -destkeystore thekeystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias

Ubah perizinan berkas thekeystore dan pindahkan ke direktori /etc/cas.

chmod 0400 thekeystore
mv thekeystore /etc/cas

Selanjutnya memasang CAS.

Memasang Overlay CAS

CAS versi terbaru (5.1.x) memecah paket-paket modulnya dalam banyak modul. CAS menggunakan perkakas pembangun Java untuk membungkus dan memaket modul sesuai dengan kebutuh pengguna. Jenis pemaketan tersebut dinamakan overlays. Ada dua jenis yang didukung yakni Maven dan Gradle. Saya memilih Gradle karena Maven lebih gampang dipasang.

Mengunduh Overlay CAS

Unduh dan ekstraksi overlay untuk Gradle:

wget https://github.com/apereo/cas-gradle-overlay-template/archive/master.tar.gz
tar xvfz master.tar.gz && cd cas-gradle-overlay-template-master/

Mengonfigurasi Overlay CAS

Pada gradle.properties saya mengubah versi Spring Boot ke yang terbaru:

springboot.version=1.5.7.RELEASE

Pada etc/cas/config/application.yml tambahkan:

server:
  ssl:
    enabled: true
    keyStore: /etc/cas/thekeystore
    keyStorePassword: quoofah2AeL1Quu0
    keyPassword: Lah3ohmooreeng9e

Pada baris ke-5 etc/cas/config/log4j2.xml ubah direktori log ke standar FHS (/var/log):

            <Property name="baseDir">/var/log/cas</Property>

Pada cas/build.gradle ubah tomcat menjadi jetty:

    compile "org.apereo.cas:cas-server-webapp-jetty:${project.'cas.version'}@war"

Selanjutnya, jalankan perintah berikut untuk membangun paket yang dibutuhkan.

./gradlew build --parallel

Menjalankan CAS

Berkas yang dihasilkan dari hasil konfigurasi ada di cas/build/libs/cas.war. Berkas ini merupakan sebuah paket aplikasi Web Java yang bisa dijalankan oleh kontainer Servlet apa pun. Namun, untuk keperluan kali ini, jalankan perintah:

./gradlew bootRun

Kalau sukses akan muncul di port 8443. Gunakan login casuser dan sandi Mellon untuk masuk.

Berhubung hari sudah subuh, saya berhenti di sini. Nanti selanjutnya tutorial akan lanjut kepada konfigurasi CAS.

Bacaan Lebih Lanjut

Mengaktifkan Camera2 API

MIUI 9 dibuat dari rangka Android 7.1.1 seharusnya memiliki Camera2 API di dalamnya. Sayangnya, MIUI mengaktifkan pustaka HAL 1 bukannya HAL 3 sehingga fungsionalitas Camera2 API dimatikan oleh sistem.

Untuk mengatasi hal tersebut, /system/build.prop harus diubah dan ditambahkan:

persist.camera.HAL3.enabled=1

Dari pada secara manual dan berisiko merusak sistem, gunakan saja modul Magisk yang dibuat orang.

Memasang Modul Magisk

Karena sebagian dari kalian kemungkinan ada provider malas yang belum membuka akses Reddit, maka saya terpaksa memberikan akses langsung ke berkas.

  1. Unduh magisk-Camera2-API.zip.
  2. Masuk ke Magisk Manager. Klik tombol 3 garis → Modules  → (+) → pilih modul Magisk Camera2 API yang sudah terunduh.
  3. Reboot.

Selesai.

Aplikasi Kamera yang Memanfaatkan

Aplikasi standar MIUI masih berjalan seperti biasa, kecuali modus slow-mo. Namun, sayang rasanya bila Camera2 API tidak dimanfaatkan secara maksimal.

  • Kamera OP5. Saya suka kamera ini simpel. Secara mengejutkan, dia mendukung dual-camera yang ada di MIUI juga! Untuk foto-foto sederhana kamera ini cukup baik. Aplikasi ini ada di XDA Developer.
  • Kamera Google Pixel XL. Format HDR+ yang dihasilkan aplikasi ini luar biasa. Saya anjurkan menggunakan aplikasi ini untuk membuat foto-foto panorama.  Untuk bisa memfoto dengan baik, kamera diubah menjadi mode video terlebih dahulu, baru ubah kembali ke mode kamera. Aplikasi ini ada di XDA Developer.
  • Open Camera. Tampilannya rumit, namun semuanya sangat detail. Saya sejujurnya lebih suka aplikasi ini. Bisa dibuat untuk menyimpan dalam format RAW selain JPEG. Aplikasi ini ada di F-Droid.

Tentu penilaian saya ini masih jauh dari sempurna mengingat saya memasang dan menguji sekilas (first impression).

Bacaan Lebih Lanjut

Memasang TWRP 3.1.1-1 dan Magisk SU
Super Android, recharge!

Memasang TWRP 3.1.1-1 dan Magisk SU

Setelah saya membuka kunci Mi6 dan memasang MIUI 9, saya butuh TWRP dan Magisk. Sayangnya, saya selalu bootloop saat memasang TWRP dan Magisk. Sebelum itu, pada ROM MIUI 8 Global Stable, saya bisa dengan melakukan pemasangan berulang-ulang Magisk. Benar-benar magis pemasangan perkakas ini.

 The twins looked at each other jubilantly but with some surprise. Although 70-534 answer analysis they 70-534 answer analysis considered themselves Scarlett’s favored suitors, they had never before gained tokens ADM-201 exam dumps of this favor so easily. Usually she made them beg and plead, while she put them off, CISSP exam topics refusing to give a 70-534 answer analysis Yes or No answer, laughing if they sulked, growing cool if they became angry. And here she had practically promised them 70-534 answer analysis the ADM-201 exam dumps whole of tomorrow—seats by her at 70-534 answer analysis the barbecue, all the waltzes (and they’d see to it that the dances were CISSP exam topics all waltzes!) and the supper intermission. This was worth getting expelled from the university.Filled ADM-201 exam dumps with new enthusiasm by their success, they CISSP exam topics lingered on, talking about the barbecue 70-534 answer analysis and the ball and Ashley Wilkes 300-208 study material CISSP exam topics and Melanie Hamilton, CISSP exam topics interrupting each other, making jokes and laughing at them, hinting broadly for invitations 300-208 study material to supper. ADM-201 exam dumps Some time had passed before they realized that Scarlett was having very little to say. The atmosphere had somehow changed. Just how, the twins did not know, but the fine glow had gone out of the afternoon. Scarlett seemed to ADM-201 exam dumps be paying little attention to 70-534 answer analysis what they 300-208 study material 70-534 answer analysis ADM-201 exam dumps said, although she made the correct answers. Sensing something they 300-208 study material could not understand, baffled and annoyed by it, the twins struggled along for a while, and then rose reluctantly, ADM-201 exam dumps looking at their 300-208 study material watches.The sun was low CISSP exam topics across the new-plowed fields and the tall woods across the river ADM-201 exam dumps were looming ADM-201 exam dumps blackly in silhouette. Chimney swallows were darting swiftly across the yard, and chickens, ducks and turkeys were waddling 70-534 answer analysis and strutting and straggling in from the fields.Stuart bellowed: “Jeems!” And after an interval a 70-534 answer analysis tall black boy of their own age ran breathlessly around CISSP exam topics the house and out toward the ADM-201 exam dumps tethered horses. Jeems was their 300-208 study material body servant and, like CISSP exam topics the dogs, accompanied them everywhere. He had been CISSP exam topics their childhood playmate and had been given to the twins for their own ADM-201 exam dumps on their tenth birthday. At the sight of him, CISSP exam topics CISSP exam topics the Tarleton hounds rose up out of the red dust and stood waiting expectantly for their masters. The 300-208 study material boys bowed, shook hands and 300-208 study material told CISSP exam topics Scarlett they’d be over 300-208 study material at the 300-208 study material Wilkeses’ early in the morning, waiting for her. Then CISSP exam topics they were ADM-201 exam dumps off down the 70-534 answer analysis walk CISSP exam topics at a rush, mounted their horses and, followed by ADM-201 exam dumps ADM-201 exam dumps Jeems, went down the avenue of cedars at a gallop, waving their hats and yelling back to her.When they had rounded the curve of the dusty road that hid them from Tara, Brent drew his horse to a ADM-201 exam dumps stop under a clump of dogwood. Stuart halted, 70-534 answer analysis too, and the darky boy pulled up a few paces behind 300-208 study material them. The horses, feeling slack reins, 300-208 study material stretched down their necks to crop the tender spring grass, and the patient hounds lay down again in the 300-208 study material CISSP exam topics soft red dust and looked up longingly at the chimney swallows circling in the gathering dusk. 300-208 study material Brent’s wide ingenuous face was puzzled and mildly indignant.“Look,” he said. “Don’t it look to you like she 70-534 answer analysis would of asked us to stay for supper?”  Nor did 70-534 answer analysis James and Andrew, who took him into their store in Savannah, regret his lack of education. His clear hand, his 300-208 study material accurate CISSP exam topics figures and his shrewd ADM-201 exam dumps ability in bargaining won their respect, where a knowledge 70-534 answer analysis of literature and a fine appreciation of music, had young 300-208 study material Gerald possessed them, would have moved them to snorts of contempt. America, in the early years of the century, had been kind to the Irish. James and Andrew, who had begun by hauling goods in covered wagons 70-534 answer analysis from Savannah to Georgia’s inland towns, had prospered into a store of their own, and Gerald prospered with them.

Menurut TheStrix, pengelola TWRP resmi untuk Mi6, ada skrip pada MIUI versi 8+ yang bertugas untuk menulis kembali partisi recovery. Untuk itu, perlu dinonaktifkan. Berikut adalah perjalanan saya memasang TWRP dan Magisk SU.

Persiapan

Unduh:

  1. twrp-3.1.1-1-sagit.img
  2. Magisk-v13.5(1350).zip

sebagai persiapan di PC.

Oh, iya, jangan lupa aktifkan USB Debugging di Mode Pengembang.

Memasang TWRP

Masuk ke Fastboot:

adb reboot fastboot

Pasang TWRP:

sudo fastboot flash recovery twrp-3.1.1-1-sagit.img

Masuk ke TWRP:

sudo fastboot boot twrp-3.1.1-1-sagit.img

Masukkan sandi Anda untuk membuka partisi data. Normalnya, partisi data dikunci dengan pola.

Setelah di menu utama, kaitkan (mount) partisi /system:

adb shell mount /system

Non-aktifkan skrip rusuh yang membuat berhari-hari tak bisa tidur memikirkan apa yang salah dengan langkah yang telah dilakukan dahulu.

adb shell mv /system/bin/install-recovery.sh /system/bin/install-recovery.sh.bak

Sampai langkah ini TWRP selesai dipasang. Selanjutnya, mari memasang Magisk SU.

Memasang Magisk

Versi yang saya pasang saat penulisan adalah versi 13.5 Beta. Versi 13.3 yang terpasang pada MIUI 8 dahulu tidak dapat melewati Safety Net. Safety Net adalah mekanisme Google untuk menguji apakah sistem Android yang ada cukup aman untuk dapat mengaktifkan Google Payment dan fasilitas lainnya yang membutuhkan keamanan.

Taruh ZIP Magisk ke Mi6:

adb push Magisk-v13.5\(1350\).zip /sdcard

Dari TWRP, pilih Install  lalu pilih berkas Magisk-v13.5(1350).zip yang baru saja ditaruh di /sdcard.

Setelah melakukan pemasangan, jangan lupa hapus Cache/Dalvik Cache.

Mi6 telah di-root dan melewati Safety Net.

Magisk 13.5 Beta passing Safety Net.

Magisk 13.5 Beta passing Safety Net.

Tambahan

Berikut modul-modul Magisk yang saya pasang:

  1. Enable Camera2 API.  Google Camera memiliki kemampuan HDR+ yang memerlukan API Camera2. Mamun sayangnya, MIUI 9 secara baku menggunakan HAL1, bukan HAL3. Modul ini diperlukan untuk mengaktifkan HAL3.
  2. F-Droid Privileged Extension. Saya pengguna F-Droid.
  3. Terminal Emulator Debloater. Saya tidak suka banyak aplikasi bawaan MIUI 9.
  4. Universal SafetyNet Fix. Modul ini membetulkan Mi6 untuk dapat melewati SafetyNet.

Sekian.

Bacaan Lebih Lanjut

Pengalaman Memasang MIUI 9 dari Xiaomi Mi6 Global ROM (unlocked)
Super Android, recharge!

Pengalaman Memasang MIUI 9 dari Xiaomi Mi6 Global ROM (unlocked)

 The twins looked at each other jubilantly but with some surprise. Although 70-534 answer analysis they 70-534 answer analysis considered themselves Scarlett’s favored suitors, they had never before gained tokens ADM-201 exam dumps of this favor so easily. Usually she made them beg and plead, while she put them off, CISSP exam topics refusing to give a 70-534 answer analysis Yes or No answer, laughing if they sulked, growing cool if they became angry. And here she had practically promised them 70-534 answer analysis the ADM-201 exam dumps whole of tomorrow—seats by her at 70-534 answer analysis the barbecue, all the waltzes (and they’d see to it that the dances were CISSP exam topics all waltzes!) and the supper intermission. This was worth getting expelled from the university.Filled ADM-201 exam dumps with new enthusiasm by their success, they CISSP exam topics lingered on, talking about the barbecue 70-534 answer analysis and the ball and Ashley Wilkes 300-208 study material CISSP exam topics and Melanie Hamilton, CISSP exam topics interrupting each other, making jokes and laughing at them, hinting broadly for invitations 300-208 study material to supper. ADM-201 exam dumps Some time had passed before they realized that Scarlett was having very little to say. The atmosphere had somehow changed. Just how, the twins did not know, but the fine glow had gone out of the afternoon. Scarlett seemed to ADM-201 exam dumps be paying little attention to 70-534 answer analysis what they 300-208 study material 70-534 answer analysis ADM-201 exam dumps said, although she made the correct answers. Sensing something they 300-208 study material could not understand, baffled and annoyed by it, the twins struggled along for a while, and then rose reluctantly, ADM-201 exam dumps looking at their 300-208 study material watches.The sun was low CISSP exam topics across the new-plowed fields and the tall woods across the river ADM-201 exam dumps were looming ADM-201 exam dumps blackly in silhouette. Chimney swallows were darting swiftly across the yard, and chickens, ducks and turkeys were waddling 70-534 answer analysis and strutting and straggling in from the fields.Stuart bellowed: “Jeems!” And after an interval a 70-534 answer analysis tall black boy of their own age ran breathlessly around CISSP exam topics the house and out toward the ADM-201 exam dumps tethered horses. Jeems was their 300-208 study material body servant and, like CISSP exam topics the dogs, accompanied them everywhere. He had been CISSP exam topics their childhood playmate and had been given to the twins for their own ADM-201 exam dumps on their tenth birthday. At the sight of him, CISSP exam topics CISSP exam topics the Tarleton hounds rose up out of the red dust and stood waiting expectantly for their masters. The 300-208 study material boys bowed, shook hands and 300-208 study material told CISSP exam topics Scarlett they’d be over 300-208 study material at the 300-208 study material Wilkeses’ early in the morning, waiting for her. Then CISSP exam topics they were ADM-201 exam dumps off down the 70-534 answer analysis walk CISSP exam topics at a rush, mounted their horses and, followed by ADM-201 exam dumps ADM-201 exam dumps Jeems, went down the avenue of cedars at a gallop, waving their hats and yelling back to her.When they had rounded the curve of the dusty road that hid them from Tara, Brent drew his horse to a ADM-201 exam dumps stop under a clump of dogwood. Stuart halted, 70-534 answer analysis too, and the darky boy pulled up a few paces behind 300-208 study material them. The horses, feeling slack reins, 300-208 study material stretched down their necks to crop the tender spring grass, and the patient hounds lay down again in the 300-208 study material CISSP exam topics soft red dust and looked up longingly at the chimney swallows circling in the gathering dusk. 300-208 study material Brent’s wide ingenuous face was puzzled and mildly indignant.“Look,” he said. “Don’t it look to you like she 70-534 answer analysis would of asked us to stay for supper?”  Nor did 70-534 answer analysis James and Andrew, who took him into their store in Savannah, regret his lack of education. His clear hand, his 300-208 study material accurate CISSP exam topics figures and his shrewd ADM-201 exam dumps ability in bargaining won their respect, where a knowledge 70-534 answer analysis of literature and a fine appreciation of music, had young 300-208 study material Gerald possessed them, would have moved them to snorts of contempt. America, in the early years of the century, had been kind to the Irish. James and Andrew, who had begun by hauling goods in covered wagons 70-534 answer analysis from Savannah to Georgia’s inland towns, had prospered into a store of their own, and Gerald prospered with them.

ISI ARTIKEL INI DAPAT MEMBUAT XIAOMI MI6 ANDA RUSAK!

SAYA TIDAK MENGANJURKAN UNTUK MELAKUKAN INI 

DAN SEBAGAI PENULIS TIDAK BERTANGGUNG JAWAB

ATAS APA YANG ANDA LAKUKAN.

Ini sekedar pengalaman saya saja, tolong jangan jadikan tutorial resmi. Untuk bisa melakukan ini, hal-hal yang telah saya persiapkan:

  • Memiliki GNU/Linux KDE Neon (Ubuntu 16.04) yang sudah terpasang fastboot dan adb dengan benar. Artinya, keduanya sudah bisa membaca Android.
  • Xiaomi Mi6 sudah di-unlock secara resmi.
  • USB Debug sudah diaktifkan di mode pengembang.
  • Sudah memasang TWRP 3.1.1-0. Namun, ini tidak penting, karena pemasangan tidak dari recovery, tapi dari fastboot.
  • ROM versi Fastboot dari forum MIUI untuk Mi6. Besar berkas sekitar 2GB (2020MB), jadi silakan ditunggu saja unduhannya. Sengaja tidak saya kasih hotlink, tidak sopan.

Hal yang mau saya capai adalah memasang MIUI 9 tanpa menghapus aplikasi lama.

MASUK KE FASTBOOT

MIUI menyediakan dua versi, Recovery dan Fastboot. Untuk Mi6 yang dari MIUI 8 Global Stable (V8.2.2.0.NCAMIEC), tidak bisa melakukan dari recovery.

  1. Matikan perangkat Mi6.
  2. Setelah mati, tekan tombol Volume Turun + Power. Tahan sampai muncul tampilan Fastboot.
  3. Terakhir, hubungkan perangkat Mi6 ke PC/Laptop. Saya sarankan dengan laptop, sih. Supaya catu daya stabil dan gangguan listrik padam minim. Takut gagal di tengah jalan dan perangkat jadi bata.

Pasang MIUI 9

Paket MIUI yang kita unduh itu sebenarnya berkas TAR yang membungkus semua berkas IMG dan skrip pasang. Bongkar dan masuk ke direktori:

tar xvfz sagit_global_images_7.8.10_20170810.0000.00_7.1_global_8039c40e70.tgz
cd sagit_global_images_7.8.10_20170810.0000.00_7.1_global

Jalankan skrip flash_all_except_storage.sh. Saya pilih skrip ini karena saya tidak mau konfigurasi dan aplikasi yang telah saya pasang hilang.

$ sudo bash flash_all_except_storage.sh 
[sudo] password for jp: 
product: sagit
erasing 'boot'...
OKAY [  0.007s]
finished. total time: 0.007s
target reported max download size of 536870912 bytes
sending 'crclist' (0 KB)...
OKAY [  0.001s]
writing 'crclist'...
OKAY [  0.002s]
finished. total time: 0.003s
target reported max download size of 536870912 bytes
sending 'sparsecrclist' (0 KB)...
OKAY [  0.000s]
writing 'sparsecrclist'...
OKAY [  0.000s]
finished. total time: 0.001s
target reported max download size of 536870912 bytes
sending 'xbl' (3970 KB)...
OKAY [  0.128s]
writing 'xbl'...
OKAY [  0.104s]
finished. total time: 0.232s
target reported max download size of 536870912 bytes
sending 'xblbak' (3970 KB)...
OKAY [  0.126s]
writing 'xblbak'...
OKAY [  0.135s]
finished. total time: 0.261s
target reported max download size of 536870912 bytes
sending 'abl' (108 KB)...
OKAY [  0.004s]
writing 'abl'...
OKAY [  0.003s]
finished. total time: 0.007s
target reported max download size of 536870912 bytes
sending 'ablbak' (108 KB)...
OKAY [  0.004s]
writing 'ablbak'...
OKAY [  0.005s]
finished. total time: 0.008s
target reported max download size of 536870912 bytes
sending 'tz' (1892 KB)...
OKAY [  0.061s]
writing 'tz'...
OKAY [  0.050s]
finished. total time: 0.111s
target reported max download size of 536870912 bytes
sending 'tzbak' (1892 KB)...
OKAY [  0.060s]
writing 'tzbak'...
OKAY [  0.069s]
finished. total time: 0.129s
target reported max download size of 536870912 bytes
sending 'hyp' (248 KB)...
OKAY [  0.009s]
writing 'hyp'...
OKAY [  0.007s]
finished. total time: 0.016s
target reported max download size of 536870912 bytes
sending 'hypbak' (248 KB)...
OKAY [  0.009s]
writing 'hypbak'...
OKAY [  0.007s]
finished. total time: 0.016s
target reported max download size of 536870912 bytes
sending 'rpm' (228 KB)...
OKAY [  0.008s]
writing 'rpm'...
OKAY [  0.007s]
finished. total time: 0.015s
target reported max download size of 536870912 bytes
sending 'rpmbak' (228 KB)...
OKAY [  0.008s]
writing 'rpmbak'...
OKAY [  0.007s]
finished. total time: 0.015s
target reported max download size of 536870912 bytes
sending 'pmic' (49 KB)...
OKAY [  0.002s]
writing 'pmic'...
OKAY [  0.002s]
finished. total time: 0.004s
target reported max download size of 536870912 bytes
sending 'pmicbak' (49 KB)...
OKAY [  0.002s]
writing 'pmicbak'...
OKAY [  0.002s]
finished. total time: 0.005s
target reported max download size of 536870912 bytes
sending 'devcfg' (56 KB)...
OKAY [  0.002s]
writing 'devcfg'...
OKAY [  0.002s]
finished. total time: 0.004s
target reported max download size of 536870912 bytes
sending 'storsec' (48 KB)...
OKAY [  0.002s]
writing 'storsec'...
OKAY [  0.002s]
finished. total time: 0.004s
target reported max download size of 536870912 bytes
sending 'bluetooth' (380 KB)...
OKAY [  0.013s]
writing 'bluetooth'...
OKAY [  0.011s]
finished. total time: 0.024s
target reported max download size of 536870912 bytes
sending 'cmnlib' (212 KB)...
OKAY [  0.007s]
writing 'cmnlib'...
OKAY [  0.008s]
finished. total time: 0.015s
target reported max download size of 536870912 bytes
sending 'cmnlibbak' (212 KB)...
OKAY [  0.008s]
writing 'cmnlibbak'...
OKAY [  0.008s]
finished. total time: 0.016s
target reported max download size of 536870912 bytes
sending 'cmnlib64' (275 KB)...
OKAY [  0.009s]
writing 'cmnlib64'...
OKAY [  0.010s]
finished. total time: 0.019s
target reported max download size of 536870912 bytes
sending 'cmnlib64bak' (275 KB)...
OKAY [  0.010s]
writing 'cmnlib64bak'...
OKAY [  0.008s]
finished. total time: 0.018s
target reported max download size of 536870912 bytes
sending 'modem' (110524 KB)...
OKAY [  3.545s]
writing 'modem'...
OKAY [  4.501s]
finished. total time: 8.046s
target reported max download size of 536870912 bytes
sending 'dsp' (16384 KB)...
OKAY [  0.518s]
writing 'dsp'...
OKAY [  0.450s]
finished. total time: 0.968s
target reported max download size of 536870912 bytes
sending 'keymaster' (369 KB)...
OKAY [  0.013s]
writing 'keymaster'...
OKAY [  0.011s]
finished. total time: 0.023s
target reported max download size of 536870912 bytes
sending 'keymasterbak' (369 KB)...
OKAY [  0.013s]
writing 'keymasterbak'...
OKAY [  0.013s]
finished. total time: 0.026s
target reported max download size of 536870912 bytes
sending 'logo' (14132 KB)...
OKAY [  0.446s]
writing 'logo'...
OKAY [  0.534s]
finished. total time: 0.980s
target reported max download size of 536870912 bytes
sending 'splash' (167 KB)...
OKAY [  0.006s]
writing 'splash'...
OKAY [  0.024s]
finished. total time: 0.030s
target reported max download size of 536870912 bytes
sending 'misc' (8 KB)...
OKAY [  0.001s]
writing 'misc'...
OKAY [  0.001s]
finished. total time: 0.002s
target reported max download size of 536870912 bytes
erasing 'system'...
OKAY [  0.541s]
sending sparse 'system' 1/7 (515528 KB)...
OKAY [ 23.088s]
writing 'system' 1/7...
OKAY [ 21.534s]
sending sparse 'system' 2/7 (509068 KB)...
OKAY [ 20.232s]
writing 'system' 2/7...
OKAY [ 22.077s]
sending sparse 'system' 3/7 (524282 KB)...
OKAY [ 21.680s]
writing 'system' 3/7...
OKAY [ 21.243s]
sending sparse 'system' 4/7 (518394 KB)...
OKAY [ 21.380s]
writing 'system' 4/7...
OKAY [ 19.992s]
sending sparse 'system' 5/7 (524202 KB)...
OKAY [ 21.734s]
writing 'system' 5/7...
OKAY [ 23.267s]
sending sparse 'system' 6/7 (472247 KB)...
OKAY [ 18.714s]
writing 'system' 6/7...
OKAY [ 20.218s]
sending sparse 'system' 7/7 (81808 KB)...
OKAY [  3.096s]
writing 'system' 7/7...
OKAY [  4.964s]
finished. total time: 263.760s
target reported max download size of 536870912 bytes
erasing 'cache'...
OKAY [  0.008s]
sending 'cache' (6200 KB)...
OKAY [  0.196s]
writing 'cache'...
OKAY [  0.351s]
finished. total time: 0.555s
target reported max download size of 536870912 bytes
sending 'recovery' (22169 KB)...
OKAY [  0.713s]
writing 'recovery'...
OKAY [  0.579s]
finished. total time: 1.292s
erasing 'sec'...
OKAY [  0.000s]
finished. total time: 0.000s
target reported max download size of 536870912 bytes
sending 'cust' (341855 KB)...
OKAY [ 10.859s]
writing 'cust'...
OKAY [ 21.771s]
finished. total time: 32.630s
target reported max download size of 536870912 bytes
sending 'boot' (20085 KB)...
OKAY [  0.631s]
writing 'boot'...
OKAY [  0.682s]
finished. total time: 1.313s
rebooting...

finished. total time: 0.050s

Proses ini memakan waktu sekitar 50 detik. Setelah selesai dengan sempurna, skrip akan memulai ulang perangkat Mi6.

Selesai.

MIUI 9 Global Beta

MIUI 9 Global Beta

Aplikasi saya tidak terhapus, namun saya tidak lagi ter-root. Perangkat jauh lebih enteng dan cair. Ya, berhubung setelah memasang saya langsung menulis ini, saya belum menjelajahi lebih lanjut. Namun, sejauh ini, sih, saya senang.

Bacaan Lebih Lanjut

Pemasangan Oneplus 5: Bagian 2
Super Android, recharge!

Pemasangan Oneplus 5: Bagian 2

Pada bagian ini saya hendak menceritakan beberapa perkakas yang saya pasang untuk membantu saya.

Komponen Google

Ingat bahwa saya menghapus banyak aplikasi standar OOS? (Debloated)

Nampaknya, ada beberapa komponen Google yang harus ada supaya aplikasi dan penggunaan Oneplus maksimal.

  • Google. Nampaknya peluncur Oneplus dan komponen lainnya mengambil data dari API Google. Jadi, aplikasi ini terpasang secara baku.
  • GBoard. Saya suka dengan susunan tombol dari Google Keyboard.
  • GMail. Untuk mengakses surel yang diperlukan untuk spamming daftar ke banyak situs.
  • Google Calendar. Pengingat ulang tahun nomor wahid. Bisa rusak hubungan tanpa ini.
  • Google Drive. Setidaknya bisa melihat dokumen dengan ini.
  • Google Play Games. Mobile Legends menggunakan ini untuk menyimpan data. Apa? Anda pikir saya terlalu serius?
  • Google Text-to-speech (TTS). Penyedia NLP de facto di Android. Saya malas memasang yang alternatif. Teknologi TTS dibutuhkan untuk aplikasi yang menyebutkan sesuatu seperti nama jalan. Aplikasi Here MAPS yang saya gunakan butuh ini.
  • Snapseed. Untuk menjadi (mengemulasi diri seperti) anak gaul perlu banyak efek kamera yang komprehensif. Didukung dengan kamera yang prima, Snapseed menjadi perkakas utama untuk tampil prima di media sosial.

Komponen Magisk

Magisk adalah sebuah proyek baru yang mengimplementasi supersu, fungsi rooting di Android. Berikut adalah modul tambahan yang saya masukkan untuk membuat Oneplus 5 saya lebih berwarna:

  • Busybox for Android NDK. Seperti Google, aplikasi wajib.
  • F-Droid Privileged Extension. Aplikasi market yang memasang aplikasi FOSS.
  • Sony Music app Magisk Module. Saya pecinta Sony Ericsson dari zaman Z600 sampai terakhir Xperia Mini Pro. Berhubung tidak ada aplikasi musik pada ROM yang saya pasang, saya memilih aplikasi ini. Keunggulan dia adalah bisa memilih dari direktori atau pustaka. Plus, bisa mencari gambar album. Terakhir, menaruh lagu/album ke playlist.

Demikian.

 

 

Repositori Suri untuk PHP 7.1+

Repositori Suri untuk PHP 7.1+

Plessis mengumumkan bahwa dia sudah tidak mau lagi mengelola pemaketan PHP terbaru di Dotdeb. Dia kemudian menyarankan untuk menggunakan repositori dari Sury, seorang pengelola resmi pemaketan PHP dari Debian.

Karena Sury menggunakan HTTPS, jangan lupa pasang dulu transportasi HTTPS untuk APT:

sudo apt install apt-transport-https

Cara menambahkan:

wget -O- https://packages.sury.org/php/apt.gpg | sudo apt-key add -
echo "deb https://packages.sury.org/php/ jessie main" | sudo tee -a /etc/apt/sources.list.d/php-sury.list
sudo apt update

Selesai. Secara baku, paket PHP yang dipilih adalah 7.1. Namun, Sury menyediakan juga untuk paket PHP 7.0.

Create A Database and Its Owner on PostgreSQL
PostgreSQL database

Create A Database and Its Owner on PostgreSQL

In MySQL, these are the chants:

sudo mysql --defaults-file=/etc/mysql/debian.cnf
create database mydb;
grant all privileges on mydb.* to myuser identified by 'p@s$W0rd';

On PostgreSQL, the chants are:

sudo -u postgres createuser -DAP myuser
sudo -u postgres createdb -O myuser mydb

Very simple actually and Debian by default listen at localhost. Users can connect to its database via port 5432.

Of course, these chants are useful for developing apps. In Production, you should supply a user that can only Read/Write/Update a database. In fact, several frameworks like Laravel could setup another user just to Read the database.