20 Sep 2018

Jadi...secara baku, lingkungan destop Gnome3 pada Fedora 28 sudah menggunakan display server Wayland alih-alih menggunakan Xorg. Walaupun Gnome3 dengan Xorg tetap bisa diakses pada pilihan ketika login.

Kejutannya adalah, ketika kita menggunakan Gnome3 dengan Wayland ini, aplikasi seperti Gedit, Geany, tidak bisa dibuka menggunakan terminal. Secara teknis, saya belum bisa menjelaskan kenapa hal tersebut terjadi. Apabila ada yang ingin membantu menjelaskan, jangan sungkan untuk menuliskannya pada bagian komentar. Terima kasih.

Nah, kembali ke permasalahan awal, solusinya adalah dengan mengeksekusi perintah ini pada terminal:
xhost +local:
eksekusi perintah tersebut dalam moda non-root ($). Apabila dieksekusi dalam moda root (#), maka akan keluar pesan galat seperti ini:
No protocol specified
xhost:  unable to open display ":0"
Setelah dieksekusi, apabila sukses, setidaknya pesan ini yang muncul dalam terminal pada laptop yang saya gunakan:
non-network local connections being added to access control list
Apabila sudah selesai, maka silahkan jalankan kembali aplikasi seperti Geany, Gedit dalam moda root. Magic.

Bahan bacaan:

  1. https://ask.fedoraproject.org/en/question/101641/run-gedit-as-root-in-wayland/
on 20 Sep 2018 09:14 AM

Longer Gnome Screencast

Arif Syamsudin

Apa yang Anda gunakan ketika Anda memerlukan aplikasi untuk merekam kegiatan pada layar monitor PC/laptop Anda? Kazam, RecordMyDesktop? Opsinya banyak. Kedua aplikasi yang saya sebutkan tadi, merupakan aplikasi-aplikasi yang sering saya gunakan.

Namun, tahukah Anda, apabila Anda menggunakan Gnome3 sebagai lingkungan destop pada sistem operasi GnU/Linux di PC/Laptop Anda, maka Anda akan sudah mendapatkan fitur tersebut secara baku? Kami biasa menyebutnya screencast.

Screencast, menurut Ubuntu Wiki adalah rangkaian penampilan dalam bentuk video dari sebagian atau keseluruhan dari destop dengan tujuan melakukan demo suatu aplikasi atau menunjukkan suatu proses.  Dengan merekam dalam format video (dan audio) akan membantu orang yang mengamati video tersebut untuk suatu kebutuhan.

Kembali ke Gnome3, seperti yang sudah disebutkan sebelumnya, untuk melakukan proses screencast pada destop Gnome3 Anda, yang perlu dilakukan adalah menekan kombinasi tombol:
CTRL+ALT+SHIFT+R
dengan menekan kombinasi tombol tersebut maka Anda bisa memulai melakukan perekaman kegiatan destop. Untuk mengakhiri perekaman, tekan kembali kombinasi tombol tersebut. Mudah khan?

Tapi masih ada yang kurang dari aplikasi tersebut. Waktu rekam yang pendek. Ya. Aplikasi screencast pada Gnome3 hanya mengizinkan waktu perekaman sepanjang 30 detik. Apabila waktu 30 detik sudah terpenuhi, maka proses perekaman akan otomatis berhenti. Bagaimana cara memperpanjang waktu perekamannya?

Untuk memperpanjang waktu perekaman, Anda bisa mengeksekusi perintah ini, pada commandline:
gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length xxx
ubah nilai xxx pada akhir perintah dengan waktu yang Anda inginkan. Untuk membuat aplikasi screencast merekam tanpa batas waktu, masukkan nilai "0" (nol).

Selamat mencoba :).

Bahan bacaan:

  1. http://antoine-schellenberger.com/linux/2014/11/03/change-default-screencast-duration-in-gnome-3.html
  2. https://ask.fedoraproject.org/en/question/63745/there-is-a-time-limit-in-gnome-screencast/
  3. https://help.gnome.org/users/gnome-help/stable/screen-shot-record.html.en
on 20 Sep 2018 08:55 AM

11 Sep 2018

Aplikasi yang baik adalah aplikasi yang sudah diuji fungsionalitasnya secara ketat untuk memastikan semua fungsionalitasnya berjalan dengan baik. Ada berbagai jenis metode pengujian di dalam pengujian perangkat lunak: unit-testing digunakan untuk menguji ketepatan output/luaran dari suatu fungsi atau model di dalam aplikasi secara internal, integration-testing digunakan untuk menguji kepaduan antara setiap komponen aplikasi, dan masih banyak jenis pengujian lainnya.

Untuk menguji aplikasi berbasis Web, ada beberapa macam pendekatan untuk melakukan pengujian baik unit testing maupun integration testing. Untuk aplikasi yang hanya mengandalkan REST API berbasis JSON, mungkin melakukan pengujian melalui masing-masing endpoint sudah cukup. Namun, untuk aplikasi Web interaktif yang memerlukan interaksi dari pengguna (isi teks, klik tombol), maka satu-satunya cara paling efektif untuk memastikan fungsionalitas dari interaksi berjalan lancar adalah dengan menguji langsung elemen-elemen interaktif dari aplikasi Web. Pengujian interaktifitas aplikasi Web bisa dilakukan melalui medium tester oleh manusia. Namun akan lebih baik jika proses pengujian ini bisa diotomatisasi sehingga bisa dilakukan berulang-ulang dengan cepat. Salah satu kakas/tool yang bisa Anda gunakan untuk melakukan otomatisasi interaksi aplikasi Web adalah Selenium WebDriver (SWD).

SWD menyediakan fasilitas untuk mengontrol suatu peramban Web (web browser) melalui otomatisasi dengan bahasa pemrograman. Pada saat program otomatisasi dijalankan, SWD akan membuka aplikasi peramban Web pilihan pengguna dan melakukan kontrol pada peramban Web tersebut seperti misalnya:

  • Membuka suatu halaman Web di bar alamat/address bar
  • Memilih suatu elemen di halaman menggunakan id, class, name, XPath.
  • Mengisi input pada elemen
  • Melakukan klik pada elemen
  • Menjalankan kode JavaScript (JS) pada halaman Web (termasuk mendapatkan nilai dari variabel JS)
  • Menunggu suatu state (misal, apakah data yang diambil secara AJAX sudah diambil nilainya).

Bahasa pemrograman yang didukung secara resmi oleh Selenium antara lain Java, Python, C#, Perl, JavaScript, Ruby, dan PHP. Sedangkan peramban Web yang bisa digunakan untuk proses otomatisasi antara lain Chrome, Firefox, Opera, Safari dan IE.

Pemasangan SWD untuk Python

CATATAN: Saya asumsikan Anda sudah memahami Python dan seluk beluknya sebelum lanjut

Untuk memasang SWD dengan Bahasa Pemrograman Python, Anda bisa menggunakan pengelola paket PIP untuk memasang paket bernama selenium melalui perintah baris berikut :

$ pip install selenium

Jika Anda ingin menggunakan bahasa pemrograman lain, silahkan merujuk ke pranala berikut.

Pemasangan WebDriver

Sebelum Anda dapat menggunakan SWD, Anda diharuskan untuk memasang WebDriver (WD) yang berfungsi sebagai penghubung antar SWD dengan peramban Web sehingga bisa dikontrol melalui bahasa pemrograman. WD untuk masing-masing peramban Web bisa diunduh melalui pranala lini (di bagian Third Party, Bindings, and Plugins). Tempatkan berkas biner/EXE dari WD ke dalam direktori yang bisa diakses melalui environment variable PATH.

Hello World

Untuk memulai menggunakan SWD dengan Python, silahkan membuka Python Interpreter (melalui perintah python atau ipython di baris perintah) dan mengimpor modul webdriver.

from selenium import webdriver

Kemudian, untuk memulai suatu WD, gunakan perintah berikut:

browser = webdriver.Chrome() # Untuk WD berbasis Chrome
browser = webdriver.Firefox() # Untuk WD berbasis Firefox

Seketika juga, Anda akan melihat aplikasi peramban Web muncul di layar. Anda sekarang bisa mengendalikan interaksi ke peramban Web baik secara langsung melalui peramban Web tersebut ATAU melalui kode program di melalui interpreter Python yang Anda gunakan.

Untuk membuka suatu halaman Web melalui interpreter Python, gunakan kode berikut (misal, jika Anda ingin membuka situs Google):

browser.get("https://google.com")

Maka peramban Web akan diarahkan ke situs yang dituju. Interpreter akan menunggu sampai halaman benar-benar dimuat secara penuh (document ready) sehingga Anda tidak perlu membuat kode untuk menunggu secara eksplisit.

Memilih suatu elemen

Untuk melakukan interaksi pada suatu elemen halaman Web, SWD menyediakan fungsi pencarian elemen (dan elemen jamak) menggunakan beberapa kueri: id dari elemen, class dari elemen, name dari elemen dan masih banyak lagi. Anda dapat menggunakan bantuan fitur Inspect Element (dengan menekan tombol F12 pada peramban Web) di Google Chrome atau Developer Tools di Mozilla Firefox untuk melakukan pengecekan nama id, class, name dari suatu elemen halaman Web.

Untuk melakukan pencarian sebuah elemen, Anda dapat menggunakan contoh perintah kode berikut:

kotak_cari = browser.find_element_by_name("q")  # Kotak pencarian
tombol_cari = browser.find_element_by_name("btnK") # Tombol "Penelusuran Google"
semua_input = browser.find_elements_by_tag_name("input") # Semua elemen dengan tag <input>
bahasa_google = browser.find_element_by_class_name("Q8LRLc") # Penunjuk nama bahasa di pojok kiri bawah

PERHATIAN: Jika Anda menggunakan fungsi dengan awalan find_element_* (element tanpa akhiran s), Anda harus memastikan bahwa id, class, atau properti elemen yang dicari memang ADA di halaman yang dibuka. Jika tidak, SWD akan melempar sebuah Exception.

Anda kemudian bisa menggunakan variabel luaran dari masing-masing fungsi find_element* (kita sebut variabel ini sebagai variabel elemen) untuk melihat properti DOM elemennya dengan menggunakan contoh kode berikut:

tombol_cari.get_attribute("value") # Hasil: "Penelusuran Google"

Anda juga bisa melakukan pencarian elemen kembali secara rekursif melalui suatu variabel elemen jika memang dibutuhkan:

body = browser.find_element_by_id("main").find_element_by_name("body")

Hanya saja, Anda tidak bisa melakukan manipulasi nilai DOM melalui fungsi bawaan SWD. Anda hanya bisa melakukan manipulasi nilai DOM dengan mengeksekusi suatu kode Javascript. Penjelasan mengenai eksekusi kode Javascript dijelaskan pada sub-bagian bawah.

Interaksi pada elemen

Anda dapat melakukan entri input dengan mensimulasikan entri tombol papan ketik ke suatu variabel elemen melalui perintah .send_keys seperti contoh penggunaan berikut:

kotak_cari.send_keys("Selenium Web Driver xx")

Anda juga bisa mensimulasikan tombol papan ketik khusus seperti berikut:

from selenium.webdriver.common.keys import Keys
kotak_cari.send_keys(Keys.BACKSPACE + Keys.BACKSPACE)

Untuk melakukan klik tombol, gunakan perintah .click atau .submit pada suatu variabel elemen seperti berikut:

tombol_cari.click() # Simulasi klik tombol "Penelusuran Google"
kotak_cari.submit() # Simulasi proses Submit

JavaScript

SWD menyediakan suatu fitur untuk mengeksekusi suatu JavaScript pada halaman yang sedang dibuka. Untuk melakukan hal ini, Anda dapat memanggil fungsi .execute_script melalui Web Driver dan mencantumkan snippet kode Javascript yang Anda ingin eksekusi. Anda dapat memasukkan lebih dari satu baris perintah JavaScript dengan membatasi tiap baris dengan tanda ;. Anda juga dapat mengambil nilai variabel dari Javascript ke dalam Python dengan menambahkan penanda return di sebelah kiri perintah/nama variabel.

Berikut adalah contoh penggunaan eksekusi skrip:

browser.execute_script("alert(0)")  # Menampilkan alert
browser.execute_script("document.getElementsByName('q')[0].setAttribute('value','Selenium Web Driver'") # Set value dari kotak pencarian
isi_pencarian = browser.execute_script("return document.getElementsByName('q')[0].getAttribute('value')") # Ambil value dari kotak pencarian

Agar proses pengujian bisa dilakukan secara terprediksi, Anda dapat melakukan proses penungguan suatu state (bisa berupa state di DOM atau Javascript) melalui fitur Explicit Wait yang ada di SWD. Untuk membuat suatu Explicit Wait, Anda bisa membuat sebuah fungsi lambda di Python yang menghasilkan nilai true jika keadaan yang diharapkan tercapai, dan nilai false jika keadaan yang diharapkan belum tercapai dan program harus melakukan penungguan. Berikut adalah contoh kode-nya (untuk timeout 10 detik):

from selenium.webdriver.support.ui import WebDriverWait

## Tunggu sampai kotak pencarian berisi tulisan "Sesuatu"
## Jika lebih dari 10 detik tidak tercapai, lembar Exception
WebDriverWait(browser, 10).until(lambda x: return browser.execute_script("return document.getElementsByName('q')[0].getAttribute('value')") == "Sesuatu")

Penutup

Di atas sudah dibahas mengenai cara dan contoh penggunaan Selenium Web Driver (SWD) untuk melakukan otomatisasi pengujian dan interaksi aplikasi Web menggunakan Python. Sebenarnya ada beberapa fitur Selenium yang sangat mumpuni namun belum dibahas di artikel ini.

Selain menawarkan otomatisasi melalui skrip, Anda juga bisa menggunakan Selenium IDE untuk membuat skrip otomatisasi langsung melalui peramban Web tanpa melalui coding. Selenium IDE mungkin akan saya di artikel blog saya selanjutnya.

Akhir kata, semoga artikel ini bermanfaat bagi Anda semua.

on 11 Sep 2018 12:25 PM

09 Sep 2018

Dark Mode itu keren lo, benar-benar fitur yang dibutuhkan banget.

— Wira di saat berbaring gelap gelapan sambil Youtube an

Coba Anda rasakan ketika Anda menggunakan komputer dengan aplikasi yang kebanyakan menggunakan latar belakang berwarna putih. Tentu saja menyilaukan dan melelahkan mata jika digunakan dalam waktu yang lama.

Sistem operasi modern baik di komputer dan mobile mulai menawarkan fitur yang membuat pengguna nyaman melihat layar. Salah satu fitur tersebut adalah night light yang menguningkan sedikit layar sehingga tetap enak. Namun fitur yang benar-benar ditunggu-tunggu sebenarnya adalah dark mode yang mengubah latar belakang aplikasi yang umumnya putih menjadi hitam bak High Contrast Mode. Walaupun fitur ini sangat dibutuhkan di berbagai aplikasi, kebanyakan OS atau aplikasi belum menyediakannya karena alasan sederhana: mengubah warna dari putih ke hitam atau abu-abu gelap tidak sesederhana menginversi warna layar, tetapi juga harus membuat UI tetapi terbaca dengan palet warna yang tetap pas. Windows baru menyediakan fitur ini untuk aplikasi Modern UI saja, Android baru menyediakan beberapa aplikasi yang mendukung dark mode secara sporadis, macOS baru-baru ini menyediakan fitur gelap yang near universal melalui versi Mojave.

Dan akhirnya, kembali ke topik artikel ini yaitu Youtube yang akhirnya (walaupun sangat telat) menyediakan dark mode di versi 13.35.51. Anda dapat mengaktifkannya melalui Setelan Umum / General.

Sayangnya, fitur dark mode ini harus dihidupkan/dimatikan secara manual. Tidak ada mekanisme untuk mengubah tema gelap/terang secara otomatis berdasarkan jam. Setahu saya baru Nova Launcher dan 9GAG Pro yang menyediakan fitur tersebut. Akhir kata, semoga dark mode ini bisa diadopsi secara universal, demi mata yang sehat.

on 09 Sep 2018 03:26 PM

Jaman dahulu kala, ketika Anda harus membuat dokumen di komputer menggunakan aplikasi WordStar yang berjalan di atas DOS, Anda harus membayang-bayangkan dan mereka-reka seperti apa bentuk dokumen yang dibuat ketika nantinya dicetak menggunakan printer dot matrix yang suaranya menyakitkan telinga itu. Pasalnya, teknologi komputer saat itu hanya mampu menampilkan sekumpulan teks di dalam matriks sebesar 25 baris x 80 kolom dengan jumlah warna yang bisa dihitung jari. Zaman itu komputer mainstream (komputer berbasis IBM PC berbasis DOS, tidak termasuk Macintosh yang kala itu sudah canggih) kebanyakan belum memiliki kemampuan me-render grafik berbasis raster (warna pada titik piksel dengan resolusi VGA/SVGA), sehingga bentuk font, ketebalan, miring, warna, dsb tidak bisa direpresentasikan ke layar.

WordStar zaman DOS

Sekian dekade kemudian dan kita sudah tidak asing dengan Microsoft Word dan aplikasi sejenis lainnya, yang mana melalui konsep WYSIWYG (What You See Is What You Get)-nya bisa menampilkan isi dokumen apa adanya seperti bentuk cetaknya. Tidak perlu lagi pusing dengan tanda markup semacam ^B, ^S, dan ^Y, segala tulisan, tabel, gambar ditampilkan apa adanya berkat kemampuan grafis raster yang ada di komputer modern.

Untuk mayoritas orang, aplikasi pengolah dokumen modern sudah cukup untuk memenuhi kebutuhan mereka (misalnya) dalam aktivitas membuat laporan, tugas sekolah, dan aktivitas lainnya. Pengguna hanya cukup mengetik, memberi format, menempelkan tabel dan gambar dan yang lebih canggih lagi bisa menggambar objek ilustrasi di dalamnya.

Namun taukah Anda, ada beberapa pihak yang tidak sreg dengan konsep penulisan secara WYSIWYG seperti misalnya akademisi (yang keukeuh menggunakan LaTeX dan variannya), penulis Wiki (yang punya bahasa penulisan sendiri) dan pengembang perangkat lunak (yang entah kenapa kebanyakan benci menulis laporan dengan MS Word). Mereka justru lebih sreg untuk menulis dengan teks editor (semacam Notepad), dan menulis segala bentuk formatting dalam bentuk Markup seperti layaknya zaman WordStar yang saya ceritakan di awal. Apakah mereka terlalu kolot untuk tetap mempertahankan “tradisi” sehingga mereka konservatif dalam teknologi, atau apakah ada alasan praktis dibalik keengganan mereka untuk menggunakan MS Word? Ternyata ada. Menurut saya, ada beberapa alasan praktis mereka dibalik itu semua:

  • Dibalik kemudahan penggunaannya, MS Word menggunakan format yang sangat ribet berbasis XML yang membuat penggunanya mau tidak mau harus lock-in menggunakan aplikasi MS Word atau aplikasi lain yang mendukung format ini (semoga saja Anda sukses membuka dokumen MS Word di LibreOffice dan sebaliknya tanpa formatnya berantakan /s)
  • Akademisi, Penulis Wiki dan Pengembang Perangkat Lunak membutuhkan KONSISTENSI baik dari segi struktur dan format dalam penulisan dokumen. Aplikasi pengolah kata WYSIWYG memungkinkan pengguna untuk menulis dengan format sesukanya sehingga aspek konsistensi ini susah untuk ditegakkan.
  • PLUS: Mereka-mereka ini umumnya tidak mau ribet masalah formatting. Mereka hanya ingin menulis tanpa memikirkan bagaimana tulisannya ditampilkan. Yang penting rapi dan konsisten.

Kadangkala, ada saatnya dimana menggunakan MS Word dan aplikasi pengolah kata WYSIWYG lainnya cenderung kontra-produktif. Misalnya ketika Anda menulis skripsi, ada beberapa kala ketika Anda harus mencurahkan sebagian besar waktu Anda untuk melakukan formating manual beberapa bagian teks karena misalnya: penggalan kata yang tidak pas, posisi gambar yang tidak cocok, penulisan paragraf tidak konsisten, dan masih banyak lagi. Mungkin saja hal-hal tersebut bisa dihindari dengan memanfaatkan fitur styling yang baik sejak awal. Namun masalahnya, tidak semua orang menggunakan fitur ini dengan baik karena tidak ada pengetatan sejak awal.

Saya sendiri termasuk mereka-mereka yang lumayan sering menggunakan MS Word dan LibreOffice Writer untuk menulis laporan ke stakeholder. Namun, untuk kebutuhan lainnya seperti menulis blog, menulis diari, catatan kuliah, thesis, skripsi, menulis dokumentasi perangkat lunak, dsb saya benar-benar menghindari penggunaan aplikasi berbasis WYSIWYG karena alasan sederhana: ingin fokus menulis tanpa terdistraksi oleh formating. Untuk penulisan dokumen ilmiah, saya tidak pernah meragukan LaTeX yang membuat dokumen saya rapi dan konsisten. Pada saat saya skripsi S1, saya menyempatkan membuat templat LaTeX skripsi sesuai dengan format dari kampus (https://github.com/initrunlevel0/buku-ta-its-xelatex) sehingga bisa digunakan oleh angkatan bawah. Untuk menulis tulisan lainnya, saya mempercayakan Markdown yang fiturnya semakin canggih berkat dukungan di berbagai platform seperti Worpress (blogging) dan Github/Gitlab (pengembangan perangkat lunak). Saya juga menulis segala catatan dan diari terkait keseharian saya melalui Markdown menggunakan IDE bernama Typora (https://typora.io/) dan disinkronisasikan melalui Dropbox (bye bye OneNote~).

Akhir kata, tidak ada salahnya untuk belajar hal baru. Ada kalanya sesuatu yang terkesan old lebih efisien karena sederhana.

on 09 Sep 2018 02:54 PM

Halo Dunia

Putu Wiramaswara Widya

Selamat datang di blog saya yang sudah berkali-kali dihapus dan di-install ulang ini. Mohon maaf karena ketidakkonsistenan saya, sehingga artikel-artikel di blog lama menjadi hilang tak berbekas.

Dengan dunia baru dan karir baru yang saya alami sekarang, saya akan memulai sering menulis lagi tentang segala hal, yang saya senangi.

Sekian dari saya.

on 09 Sep 2018 02:04 PM

08 Sep 2018

Hello world!

Putu Wiramaswara Widya

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

on 08 Sep 2018 11:48 AM

17 Aug 2018

Since I've added remote branch on my local repository, and when I'm going to checking out a remote branch, I got an error/warning message like the title of this post above. After googling same keywords of the warning message, there was who asked on stackoverflow with the same error message like me.
$ git checkout apps-devel
Checking out files: 100% (208/208), done.
Switched to branch 'apps-devel'
Your branch is based on 'hsp/apps-Dev', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
For your information, the original remote branch is hsp/apps-Dev and I've rename it to apps-devel. I try to pull a remote branch as well, and get another message like below:
$ git pull hsp
Your configuration specifies to merge with the ref 'refs/heads/apps-Dev'
from the remote, but no such ref was fetched.
So this is how to fix it. First open the git config on your local repo (generally the location at .git/config). Here are my configs for the remote branch:
[branch "apps-devel"]
remote = hsp
merge = refs/heads/apps-Dev
and I change it to
[branch "apps-devel"]
remote = hsp
merge = refs/heads/apps-devel
Then let's checking it again
$ git pull hsp
Already up-to-date.

$ git status
On branch apps-devel
Your branch is up-to-date with 'hsp/apps-devel'.

nothing to commit, working tree clean
As you can see above, no more warning message again. Happy Independence day Indonesia! 🇮🇩 Hiduplah Indonesia Raya 🇮🇩
on 17 Aug 2018 09:16 AM

09 Aug 2018

Iya, tetiba aja. Kalau kamu menggunakan peramban Opera juga menggunakan GnU/Linux Fedora 28, maka yang terjadi ketika melakukan upgrade pada satu titik tertentu, maka ikon peramban Opera akan digantikan oleh ikon lain (semacam no icon begitulah).

Ternyata, karena baris yang mengarahkan ikon pada satu berkas terkait hal tersebut menjadi kosong. Berkas yang saya maksud adalah berkas opera.desktop yang berada di dalam direktori /usr/share/applications. Penampakkannya seperti ini:
[Desktop Entry]
.....
Icon=
.....
Actions=NewWindow;NewPrivateWindow;
Untuk memunculkan ikon peramban Opera yang hilang, cukup arahkan ke direktori tempat ikon peramban Opera itu disimpan. Sehingga isi dari baris tersebut menjadi seperti ini:
[Desktop Entry]
.....
Icon=/usr/share/icons/hicolor/256x256/apps/opera.png
.....
Actions=NewWindow;NewPrivateWindow;
Simpan perubahan yang dilakukan maka silahkan nikmati kembali ikon peramban Opera yang sudah muncul.

Bahan bacaaan:
[0] https://ask.fedoraproject.org/en/question/124428/opera-icon-missing-after-upgrade-to-f28/ 
 
on 09 Aug 2018 11:40 AM

09 Jul 2018

Awal Juli, saya perlu memperpanjang SIM A. Karena kesibukan yang cukup tinggi di Jakarta, kesempatan untuk balik ke Bandung guna menyelesaikan perpanjangan SIM ini sangat terbatas. Hasil cari info sana-sini, ada lokasi yang sangat menjanjikan: Mall Pelayanan Publik DKI, di Jalan HR Rasuna Said Kav 22. Patokan menuju lokasi ini: Jalan Episentrum Selatan, di belakang Hotel Luwansa. Anda bisa
on 09 Jul 2018 03:40 AM

01 Jul 2018

It's been a while.

Sudah beberapa rilis saya menggunakan distribusi GnU/Linux Fedora dan sejak saat itu, saya nyaman. Saya merasa nyaman karena saya selalu mendapatkan pembaruan-pembaruan terkini dari perangkat lunak yang saya gunakan, seperti yang saya harapkan. Tapi, tetap ada tapi, sebagai bagian dari pengembang SLiMS, ada kebutuhan spesifik dari versi aplikasi yang digunakan. Utamanya adalah versi PHP. Sementara pada repo baku distribusi, versi aplikasi PHP yang tersedia adalah 7.2 ke atas, SLiMS masih belum kompatibel dengan versi tersebut.

Nah, solusinya dari permasalah tersebut adalah menggunakan aplikasi LAMP yang portabel. XAMPP merupakan aplikasi LAMP portabel yang biasa saya gunakan. Pada Gnu/Linux Fedora versi 27, aplikasi ini bisa berjalan dengan baik. Namun entah kenapa, setelah saya upgrade ke versi 28, aplikasi XAMPP tidak bisa berjalan dengan menampilkan pesan galat berikut:
XAMPP is currently only available as 32 bit application. Please use a 32 bit compatibility library for your system.
Sedari awal saya selalu menggunakan XAMPP versi 64 bit. Versi yang tersedia untuk GnU/Linux punya hanya versi 64 bit.

Setelah beberapa waktu saya kebingungan bagaimana mengatasi masalah tersebut, akhirnya ditemukan solusi serta penjelasannya kenapa hal tersebut bisa terjadi. Sebagaimana yang dituliskan pada satu situs [0]Reddit:
Actually I fixed after short, libnsl.so.1 was in lib directory but somehow disappeared from lib64 directory in fedora 28 upgrade progress, installed libnsl-2.27-8.fc28.x86_64.rpm from https://www.rpmfind.net/linux/rpm2html/search.php?query=libnsl.so.1%28%29%2864bit%29&submit=Search+...&system=fedora&arch= and then all was fixed.
Ajaib! Pada akhirnya masalah yang saya temui tersebut bisa diatasi. Tidak muncul lagi pesan galat ketika menjalankan XAMPP dan saya bisa menjalankan versi LAMP yang saya inginkan.

Semoga bermanfaat.


Rujukan:
on 01 Jul 2018 04:07 PM

06 Jun 2018

Ceritanya kemarin daftar Free Trial Google Cloud Platform, dan hari ini nyoba-nyoba sesuatu, salah satunya cara install WordPress di atas Docker, gampang banget ternyata… Langkah pertama, jalankan container mariadb, ganti “rahasia” dengan password yang diinginkan Kemudian jalankan container wordpressnya Akses ke http://ipaddress_vminstance
on 06 Jun 2018 06:37 AM

04 Jun 2018

Ini udah agak lama sih sebenernya. Gue aja yang telat tahu. Tahunya juga gara-gara Instagramnya Saykoji. Dulu pas menimbang-nimbang soal Logic Pro X, gak jadi milih FL Studio alesannya karena FL Studio gak ada di Mac. Selain itu, kudu beli VST banyak kayaknya. Harganya sama persis $199.

Anyway, setelah coba download versi trialnya, kayaknya emang kurang nyaman juga sih FL edisi macOS. Kaya ke-zoom gitu User Interfacenya.

Tapi wishlistnya tetep Ableton lah. Cuma harganya gak karu-karuan. Maklum, gue cuma pehobi aja.

on 04 Jun 2018 06:48 AM

06 May 2018

Bionic and LXC

Andika Triwidada

This brand new Ubuntu LTS 18.04 surely had given me a big surprise. Major syntax change for LXC, because of upgrade from LXC v2 to v3. All my LXC VMs can't be started after this upgrade.Searching documentation about config syntax change was difficult. So I have resorted to reverse engineering: install new LXC VM, then compare its config to v2. Result is documented here. Still need more info to
on 06 May 2018 06:14 AM

27 Apr 2018

Arsitektur SSO

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….
on 27 Apr 2018 09:29 AM

20 Apr 2018

Well, my Dev team mate have a Linux server for build some projects, and they wanted to access their files from Linux by remote/konsole mode, in this case their files are on Windows. So, here are their files sharing on Windows system.
As you can see above, we will access on those folder Autogenerated and Resources. So, here's the step to make it accessible from Linux.
Installing a requirements packages
# apt-get install cifs-utils

After that then go to /etc/nsswitch.conf and edit it:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

add "wins" on that line
hosts:  files mdns4_minimal [NOTFOUND=return] wins dns mdns4

If winbind is not installed on Linux system, please install it by this issue command:
# apt-get install libnss-winbind winbind

Now reload the network to take effect:
# service networking restart

Mounting drive
Backup the fstab configuration to avoid any mistaken in the future.
# cp /etc/fstab{,.old}

Now create a credential user files who will accessing the folder share files on current linux user.
# printf '%s\n' 'username=darm' 'password=******' > .smbuser

Next, we should know the UID and GID on the system. Run the following command
# id programmer
uid=1000(programmer) gid=1000(programmer) groups=1000(programmer),27(sudo),7001(wksadmin)

Create folder for mounting point.
# mkdir /media/prg
# mkdir /media/prg2

Then we open fstab file to start mounting point, and put this line on it.
//Workstation/AutoGenerated /media/prg cifs credentials=/home/programmer/.smbcredentials,iocharset=utf8,gid=1000,uid=1000,file_mode=0777,dir_mode=0777 0 0
//Workstation/Resources /media/prg2 cifs credentials=/home/programmer/.smbcredentials,iocharset=utf8,gid=1000,uid=1000,file_mode=0777,dir_mode=0777 0 0

Save your configuration, and reload the fstab
# mount -a

Now let's take a look the result. :D
on 20 Apr 2018 07:21 AM

15 Apr 2018

Bandung yang dikenal sebagai kota dengan segudang tujuan wisata kelihatannya enggak pernah kehabisan gagasan untuk berinovasi. Terlebih semenjak walikota idola tidak sedikit warga, Ridwan Kamil, menjabat. Walikota yang akrab disapa Kang Emil ini kayaknya sebentar lagi akan mendapat fans baru nih. Kali ini datang dari komunitas penyuka kebudayaan Korea. Kok bisa? Pasalnya kota Bandung akan […]
on 15 Apr 2018 09:50 AM

11 Apr 2018

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

on 11 Apr 2018 06:25 AM

08 Apr 2018

Halo, lama tidak menulis. Berikut akan saya sampaikan bagaimana cara XAMPP untuk jalan secara otomatis pada sistem operasi GnU/Linux Ubuntu 16.04.

Menurut Wikipedia, fungsi XAMPP sebagai server yang berdiri sendiri (localhost), yang terdiri atas program Apache HTTP Server, MySQL database, dan penerjemah bahasa yang ditulis dengan bahasa pemrograman PHP dan Perl. Nama XAMPP merupakan singkatan dari X (empat sistem operasi apapun), Apache, MySQL, PHP dan Perl. Program ini tersedia dalam GNU General Public License dan bebas, merupakan web server yang mudah digunakan yang dapat melayani tampilan halaman web yang dinamis. Untuk mendapatkanya dapat mendownload langsung dari web resminya.

Untuk dapat menjalankan XAMPP ke dalam service, yang perlu dilakukan adalah sunting berkas rc.local dengan perintah:
$ sudo gedit /etc/rc.local
Silahkan gunakan aplikasi penyunting berkas yang Anda sukai, tidak musti Gedit, kemudian, tambahkan dua baris perintah berikut:
cd /opt/lampp
sudo ./lampp start
Tambahkan dua baris tersebut di atas baris perintah dengan tulisan:
exit 0
Setelah menambahkan dua baris tersebut di atas, silahkan mula-ulang sistem operasi GnU/Linux Ubuntu 16.04 Anda.

Semoga bermanfaat :).


Bahan bacaan:

  1. https://askubuntu.com/questions/870099/auto-start-xampp-in-ubuntu-16-04 
  2. https://id.wikipedia.org/wiki/XAMPP

on 08 Apr 2018 02:46 AM

31 Mar 2018

What is stack register?
Stack is a group of memory which is use for storage informations during the execution of program. It’s temporary area in CPU.
How it work?
The First data that goes into the stack is the Last data that come out from the stack.

In this article I will show you how it works using gdb (gnu debugger).
First, I create a program named stack in assembly language. I name the file stack.asm.

section .text
global _start
_start:

push 0xAAAAAAAA
push 0xBBBBBBBB
push 0xCCCCCCCC
push 0xDDDDDDDD

pop eax
pop ebx
pop ecx
pop edx

exit:
mov eax,1
mov ebx,0
int 0x80
stack01
Then I compile with “nasm” and link with “ld”. I add option -gstabs+ to tell nasm to save debugging information that I will use in gdb to print the line of assembler code that correspond to each assembler instruction. Since my processor is 32 bit, the format will be elf32.

$ nasm -f elf32 -gstabs+ stack.asm -o stack.o
$ ld stack.o – stack
stack02
Now, let start using gdb.
Type “gdb” followed by the program “stack”.

$ gdb stack
GNU gdb (Ubuntu/Linaro 7.3-0ubuntu2) 7.3-2011.08
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type “show copying”
and “show warranty” for details.
This GDB was configured as “i686-linux-gnu”.
For bug reporting instructions, please see:

Reading symbols from /home/darklinux/assembly/stack…done.
(gdb)

I set the breakpoint at “_start” so I can run the instruction line by line.
(gdb) break _start
Breakpoint 1 at 0x8048060

I set the display so I can read the assembler code more clear.
(gdb) set disassembly-flavor intel

I display the code.
(gdb) disassemble _start
Dump of assembler code for function _start:
0x08048060 : push 0xaaaaaaaa
0x08048065 : push 0xbbbbbbbb
0x0804806a : push 0xcccccccc
0x0804806f : push 0xdddddddd
0x08048074 : pop eax
0x08048075 : pop ebx
0x08048076 : pop ecx
0x08048077 : pop edx
End of assembler dump.

And run the program.
(gdb) run
Starting program: /home/darklinux/assembly/stack

Breakpoint 1, 0x08048060 in _start ()

I check where the current instruction position. It mean that gdb will start running the current instruction.
(gdb) disassemble _start
Dump of assembler code for function _start:
=> 0x08048060 : push 0xaaaaaaaa
0x08048065 : push 0xbbbbbbbb
0x0804806a : push 0xcccccccc
0x0804806f : push 0xdddddddd
0x08048074 : pop eax
0x08048075 : pop ebx
0x08048076 : pop ecx
0x08048077 : pop edx
End of assembler dump.
stack03

I can check also by display the content of eip register with “x/i $eip” commnad.
(gdb) x/i $eip
=> 0x8048060 : push 0xaaaaaaaa

I check the stack, still empty.
(gdb) x/4wx $esp
0xbffff3f0: 0x00000001 0xbffff564 0x00000000 0xbffff583

Then, I execute one machine instruction using si/stepi or step instruction.
(gdb) si
0x08048065 in _start ()

Now the current position is on address 0x08048065. The instruction at 0x08048060 has already executed.
(gdb) disassemble _start
Dump of assembler code for function _start:
0x08048060 : push 0xaaaaaaaa
=> 0x08048065 : push 0xbbbbbbbb
0x0804806a : push 0xcccccccc
0x0804806f : push 0xdddddddd
0x08048074 : pop eax
0x08048075 : pop ebx
0x08048076 : pop ecx
0x08048077 : pop edx
End of assembler dump.
(gdb) x/i $eip
=> 0x8048065 : push 0xbbbbbbbb

Now, you see that first memory in the stack already fill with “aaaaaaaa”.
(gdb) x/4wx $esp
0xbffff3ec: 0xaaaaaaaa 0x00000001 0xbffff564 0x00000000

Run another one machine instruction.
(gdb) si
0x0804806a in _start ()
(gdb) x/i $eip
=> 0x804806a : push 0xcccccccc

Second memory in stack filled with “bbbbbbbb”.
(gdb) x/4wx $esp
0xbffff3e8: 0xbbbbbbbb 0xaaaaaaaa 0x00000001 0xbffff564

Run another one machine instruction.
(gdb) si
0x0804806f in _start ()
(gdb) x/i $eip
=> 0x804806f : push 0xdddddddd
Third memory is filled with “cccccccc
(gdb) x/4wx $esp
0xbffff3e4: 0xcccccccc 0xbbbbbbbb 0xaaaaaaaa 0x00000001

Run another one machine instruction.
(gdb) si
0x08048074 in _start ()
(gdb) x/i $eip
=> 0x8048074 : pop eax
Fouth memory in stack is filled with “dddddddd”.
(gdb) x/4xw $esp
0xbffff3e0: 0xdddddddd 0xcccccccc 0xbbbbbbbb 0xaaaaaaaa

(gdb) disassemble _start
Dump of assembler code for function _start:
0x08048060 : push 0xaaaaaaaa
0x08048065 : push 0xbbbbbbbb
0x0804806a : push 0xcccccccc
0x0804806f : push 0xdddddddd
=> 0x08048074 : pop eax
0x08048075 : pop ebx
0x08048076 : pop ecx
0x08048077 : pop edx
End of assembler dump.
Now, all data has already push into the stack with the following sequence.
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd
stack04

I check the content of eax, ebx ecx and edx register. Still empty.
(gdb) info register eax ebx ecx edx
eax 0x0 0
ebx 0x0 0
ecx 0x0 0
edx 0x0 0
And the 4 data in stack are still there.
(gdb) x/4xw $esp
0xbffff3e0: 0xdddddddd 0xcccccccc 0xbbbbbbbb 0xaaaaaaaa

Run another one machine instruction.
(gdb) si
0x08048075 in _start ()
(gdb) x/i $eip
=> 0x8048075 : pop ebx

The instruction is to pop up the data on the top of the stack to eax register. As you can see the eax register is filled with “dddddddd” data.
(gdb) info register eax ebx ecx edx
eax 0xdddddddd -572662307
ebx 0x0 0
ecx 0x0 0
edx 0x0 0

I check the stack memory, 1 stack memory has already pop out. Only left 3 data.
(gdb) x/4xw $esp
0xbffff3e4: 0xcccccccc 0xbbbbbbbb 0xaaaaaaaa 0x00000001

Run another one machine instruction.
(gdb) si
0x08048076 in _start ()
(gdb) x/i $eip
=> 0x8048076 : pop ecx
It’s the second data pop out from the stack. Two data left.
(gdb) x/4xw $esp
0xbffff3e8: 0xbbbbbbbb 0xaaaaaaaa 0x00000001 0xbffff564
(gdb) info registers eax ebx ecx edx
eax 0xdddddddd -572662307
ebx 0xcccccccc -858993460
ecx 0x0 0
edx 0x0 0
(gdb)
stack05.png

Run another one machine instruction.
(gdb) si
0x08048077 in _start ()
(gdb) x/i $eip
=> 0x8048077 : pop edx
It’s the third data pop out from the stack. One data left.
(gdb) x/4xw $esp
0xbffff3ec: 0xaaaaaaaa 0x00000001 0xbffff564 0x00000000
(gdb) info register eax ebx ecx edx
eax 0xdddddddd -572662307
ebx 0xcccccccc -858993460
ecx 0xbbbbbbbb -1145324613
edx 0x0 0

Run another one machine instruction.
(gdb) si
0x08048078 in exit ()
(gdb) x/i $eip
=> 0x8048078 : mov eax,0x1
It’s the fourth data pop out from the stack. All gone.
(gdb) x/4xw $esp
0xbffff3f0: 0x00000001 0xbffff564 0x00000000 0xbffff583

The eax, ebx, ecx and edx are filled with data and the sequence are:
dddddddd
cccccccc
bbbbbbbb
aaaaaaaa

(gdb) info register eax ebx ecx edx
eax 0xdddddddd -572662307
ebx 0xcccccccc -858993460
ecx 0xbbbbbbbb -1145324613
edx 0xaaaaaaaa -1431655766
(gdb) disassemble _start
Dump of assembler code for function _start:
0x08048060 : push 0xaaaaaaaa
0x08048065 : push 0xbbbbbbbb
0x0804806a : push 0xcccccccc
0x0804806f : push 0xdddddddd
0x08048074 : pop eax
0x08048075 : pop ebx
0x08048076 : pop ecx
0x08048077 : pop edx
End of assembler dump.
(gdb)
stack06.png

Hope this tutorial can explain more clear about how stack CPUx86 work.

on 31 Mar 2018 03:03 PM

29 Mar 2018

Konferensi Lagi

Andika Triwidada

23 Maret kemarin, saya mengisi acara workshop LibreOffice di PENS, Surabaya. Sebenarnya saat mengisi CFP, saya hanya mengusulkan topik yang menjadi sesi ke-2 workshop, yaitu kurang lebih menguji dan memperbaiki terjemahan, yang saya pikir cukup untuk mengisi satu sesi sekitar 60 menit. Tapi ternyata panitia menodong dan memperluas usulan CFP menjadi workshop sehari penuh. Apa boleh buat. Sudah
on 29 Mar 2018 07:06 PM

14 Mar 2018

Aktivasi Windows
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

on 14 Mar 2018 11:11 PM

08 Mar 2018

About KDE

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

on 08 Mar 2018 01:45 PM
postgresql

Masih ingat tutorial saya tentang Patroni dahulu? Saya akan membuat tulisan lengkap dari nol sampai berjalan. Di akhir tutorial ini Anda bisa membuat kluster Patroni secara manual. Kalau Anda devops dan tertarik menulis resep untuk Ansible, Puppet, dan sejenisnya, saya harap artikel ini bisa menjadi acuan untuk mengerti Patroni.

Mesin-mesin yang Ada

Saya membagi setiap mesin yang digunakan dengan dua IP. Satu subnet IP internal yang digunakan untuk setiap mesin dalam kluster berkomunikasi dan satu subnet IP yang digunakan untuk akses luar. Implementasi fisik dengan menggunakan dua kartu jaringan (atau dua bonding fisik)  yang berbeda. Perbedaan jaringan untuk komunikasi internal dan komunikasi dengan klien ini selain menyediakan keamanan dalam isolasi, juga membuat koneksi internal atau pun eksternal tidak saling mengganggu.

 “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.

Untuk mengurangi kompleksitas tutorial ini, saya hanya menyediakan satu mesin HAProxy dan satu mesin etcd. Fokus tulisan ini adalah untuk ketersediaan PostgreSQL. Untuk membuat ketersediaan HAProxy dan etcd akan dibahas lain kali bila ada waktu [baca: kalau tidak malas].

Agar tidak membingungkan, saya selalu mempraktikkan penamaan kluster ditambah dengan prefiks nama aplikasi. Hal ini penting karena di perawanan yang sudah semakin terotomatisasi, kadang kita suka bingung kalau konfigurasi sudah tidak ada lagi.

konfigurasi

Konfigurasi server yang dipakai

Yak, intinya ada 5 mesin untuk tutorial kali ini. Saya menggunakan GNU/Linux Debian 9 karena itu standar sistem operasi UI. Untuk sistem operasi lain saya rasa tidak ada yang berbeda karena kali ini saya tidak menggunakan paket repositori.

Untuk memudahkan, pastikan kelima mesin ini memiliki berkas /etc/hosts yang berisi kelima host.

$ sudo tee -a  /etc/hosts << EOF
192.168.100.1   haproxy0-nyata
192.168.100.2   etcd0-nyata
192.168.100.3   pg1-nyata
192.168.100.4   pg2-nyata
192.168.100.5   pg3-nyata
EOF

Selanjutnya, akan dibuatkan etcd terlebih dahulu sebagai inti yang mengatur kluster.

ETCD

Aplikasi etcd adalah sebuah basisdata konfigurasi yang digunakan status. Aplikasi etcd tidak ada di repositori Debian 9. Saya mengunduh versi terbaru dari CoreOS dan memasang manual.

wget https://github.com/coreos/etcd/releases/download/v3.3.1/etcd-v3.3.1-linux-amd64.tar.gz
tar xvfz etcd-v3.3.1-linux-amd64.tar.gz
sudo cp etcd-v3.3.1-linux-amd64/etcd /usr/local/bin

Konfigurasi

Aplikasi etcd berisi satu binari. Untuk konfigurasi, buat manual.

$ sudo /etc/etcd.conf.yml << EOF
# This is the configuration file for the etcd server.

# Human-readable name for this member.
name: 'etcd0-nyata'

# Path to the data directory.
data-dir: /var/lib/etcd/data

# Path to the dedicated wal directory.
wal-dir: /var/lib/etcd/wal

# Number of committed transactions to trigger a snapshot to disk.
snapshot-count: 10000

# Time (in milliseconds) of a heartbeat interval.
heartbeat-interval: 100

# Time (in milliseconds) for an election to timeout.
election-timeout: 1000

# Raise alarms when backend size exceeds the given quota. 0 means use the
# default quota.
quota-backend-bytes: 0

# List of comma separated URLs to listen on for peer traffic.
listen-peer-urls: http://192.168.100.2:2380

# List of comma separated URLs to listen on for client traffic.
listen-client-urls: http://localhost:2379,http://192.168.100.2:2379

# Maximum number of snapshot files to retain (0 is unlimited).
max-snapshots: 5

# Maximum number of wal files to retain (0 is unlimited).
max-wals: 5

# Comma-separated white list of origins for CORS (cross-origin resource sharing).
cors: 

# List of this member's peer URLs to advertise to the rest of the cluster.
# The URLs needed to be a comma-separated list.
initial-advertise-peer-urls: http://192.168.100.2:2380

# List of this member's client URLs to advertise to the public.
# The URLs needed to be a comma-separated list.
advertise-client-urls: http://192.168.100.2:2379

# Discovery URL used to bootstrap the cluster.
discovery: 

# Valid values include 'exit', 'proxy'
discovery-fallback: 'proxy'

# HTTP proxy to use for traffic to discovery service.
discovery-proxy: 

# DNS domain used to bootstrap initial cluster.
discovery-srv: 

# Initial cluster configuration for bootstrapping.
initial-cluster: etcd0-scele=http://192.168.100.2:2380,

# Initial cluster token for the etcd cluster during bootstrap.
initial-cluster-token: 'etcd-nyata-cluster'

# Initial cluster state ('new' or 'existing').
initial-cluster-state: 'new'

# Reject reconfiguration requests that would cause quorum loss.
strict-reconfig-check: false

# Valid values include 'on', 'readonly', 'off'
proxy: 'off'

# Time (in milliseconds) an endpoint will be held in a failed state.
proxy-failure-wait: 5000

# Time (in milliseconds) of the endpoints refresh interval.
proxy-refresh-interval: 30000

# Time (in milliseconds) for a dial to timeout.
proxy-dial-timeout: 1000

# Time (in milliseconds) for a write to timeout.
proxy-write-timeout: 5000

# Time (in milliseconds) for a read to timeout.
proxy-read-timeout: 0

# Enable debug-level logging for etcd.
debug: false

# Specify a particular log level for each etcd package (eg: 'etcdmain=CRITICAL,etcdserver=DEBUG'.
log-package-levels: 

# Force to create a new one member cluster.
force-new-cluster: true
EOF

Layanan

Agar dapat dijalankan secara sistem, perlu dibuatkan layanan systemd secara manual.

$ sudo tee -a /etc/systemd/system/etcd.service << EOF
[Unit]
Description=etcd key-value store
Documentation=https://github.com/coreos/etcd
After=network.target

[Service]
User=etcd
Group=etcd
Type=notify
ExecStart=/bin/bash --login -c "/usr/local/bin/etcd --config-file /etc/etcd.conf.yml"
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target
EOF

Pengaktifan Layanan etcd

Perhatikan bahwa untuk contoh kali ini saya menggunakan akun etcd dan grup etcd. Praktik aman selalu jalankan layanan sebagai pengguna biasa, bukan root. Buat pengguna baru ini.

sudo adduser --system --home /var/lib/etcd --group etcd

Bagian terakhir dari etcd adalah mengaktifkan dan menjalankan layanan etcd.

sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd

Baris daemon-reload adalah agar systemd membaca konfigurasi yang baru saja dibuat. Baris enable untuk mendaftarkan etcd sebagai layanan yang dijalankan otomatis saat mesin baru mulai. Baris terakhir untuk menjalankan layanan etcd.

PostgreSQL

Berbeda dengan tutorial yang lalu, saya akan membuat konfigurasi per mesin agar lebih menggambarkan apa yang terjadi. Sebelum memulai, saya asumsikan bahwa setiap mesin PostgreSQL pengguna root memiliki kunci SSH sehingga antar mesin bisa masuk tanpa kunci.

Cara paling gampang, di salah satu mesin buat kunci.

ssh-keygen -t ecdsa

Lalu, taruh kunci publik dan privat ke root. Saya asumsikan bahwa kita bekerja di mesin pg1-nyata.

# asumsi kerja di mesin pg1-nyata
sudo mkdir /root/.ssh/
sudo cp ~/.ssh/id_ecdsa /root/.ssh/
cat ~/.ssh/id_ecdsa.pub | sudo tee -a /root/.ssh/authorized_keys

# Transfer
scp ~/.ssh/id_ecdsa ~/.ssh/id_ecdsa.pub pg2-nyata:/tmp
scp ~/.ssh/id_ecdsa ~/.ssh/id_ecdsa.pub pg3-nyata:/tmp

# ke mesin pg2-nyata
ssh pg2-nyata
sudo mkdir /root/.ssh/
sudo cp ~/.ssh/id_ecdsa /root/.ssh/
cat ~/.ssh/id_ecdsa.pub | sudo tee -a /root/.ssh/authorized_keys
rm /tmp/id_ecdsa*
exit

# ke mesin pg3-nyata
ssh pg3-nyata
sudo mkdir /root/.ssh/
sudo cp ~/.ssh/id_ecdsa /root/.ssh/
cat ~/.ssh/id_ecdsa.pub | sudo tee -a /root/.ssh/authorized_keys
rm /tmp/id_ecdsa*
exit

Ini saya pasang secara manual. Biasanya untuk Vagrant, Proxmox, dan sejenisnya sudah menyediakan opsi pemasangan kunci SSH di konfigurasi/plugin mereka. Namun, untuk kelengkapan tutorial ini saya tuliskan saja manual. Saya sendiri sebenarnya hanya memasang satu mesin; memasang PostgreSQL; dan baru diklon menjadi dua mesin lainnya.

Pemasangan PostgreSQL

Saya kali ini menggunakan PostgreSQL yang saya kompilasi sendiri. Mengapa? Karena hasil kompilasi lebih irit dan saya mau ada variasi tulisan. Di blog saya ada kok cara-caranya untuk memasang versi repo.

Pemasangan PostgreSQL setiap mesin sama. Untuk memasang paket ketergantungan di setiap mesin jalankan:

sudo apt -y install build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev pkg-config libsystemd-dev

Unduh PostgreSQL. Saya memakai versi stabil terbaru, 10.2. Kebetulan juga, saya ada peladen cermin di samping ruangan:

wget http://kambing.ui.ac.id/postgresql/source/v10.2/postgresql-10.2.tar.bz2
tar xvfj postgresql-10.2.tar.bz2
cd postgresql-10.2
sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h
./configure --prefix=/usr --with-icu --with-openssl --with-systemd --enable-thread-safety --docdir=/usr/share/doc/postgresql-10.2 CFLAGS="-O3 -march=native -mtune=native -pipe"
make -j$(nproc)
sudo make install

Saya melakukan optimasi CFLAGS untuk kompilasi. Hal ini karena saya tahu bahwa peladen di tempat saya itu homogen. Tapi, kalau misalnya Anda memasang di penyedia awan, sebaiknya  CFLAGS jangan disertakan.

Selanjutnya pemasangan Patroni.

Patroni

Patroni merupakan skrip Python. Untuk memasang Patroni, pastikan Python PIP dipasang. Saya memilih Python3. Namun, biasanya yang digunakan Python2. Saya memakai Python3 karena saya keren.

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

Pasang Patroni dan plugin etcd-nya.

sudo pip3 install psycopg2-binary
sudo -E pip3 install patroni[etcd]

Buat pengguna postgres

sudo adduser --system --home /var/lib/postgresql --group postgres

Buatkan layanan sistem.

$ 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/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

Selanjutnya, buat konfigurasi per mesin.

Konfigurasi Per Mesin

Buat konfigurasi per mesin /etc/patroni.yml

scope: postgres
namespace: /pg-nyata/
name: pg1-nyata
 
restapi:
    listen: 192.168.100.3:8008
    connect_address: 192.168.100.3:8008
 
etcd:
    host: 192.168.100.2: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.168.100.3/0 md5
    - host replication replicator 192.168.100.4/0 md5
    - host replication replicator 192.168.100.5/0 md5
    - host all all 0.0.0.0/0 md5
 
    users:
        admin:
            password: aiwaQuaeHuojeuyai2fiemai6Reeneix
            options:
                - createrole
                - createdb
 
postgresql:
    listen: 192.168.100.3:5432
    connect_address: 192.168.100.3:5432
    data_dir: /var/lib/postgresql/10.2-patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: zee0ohjisai5ohCohsaegho5gaeN8Xei
        superuser:
            username: postgres
            password: saichae9Aich0xeen2Otethaduphiepo
    parameters:
        unix_socket_directories: '.'
 
tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

Contoh konfigurasi yang tertulis untuk mesin pg1-nyata. Untuk pg2-nyata dan pg3-nyata ubah baris ke-3 name dengan nama mesin, dan setiap baris listen dan connect_address dengan IP per mesin.

Contoh perbedaan pg1-nyata dan pg2-nyata.

$ diff pg{1,2}-nyata/etc/patroni.yml -u
--- pg1-nyata/etc/patroni.yml   2018-03-08 10:03:26.502995392 +0700
+++ pg2-nyata/etc/patroni.yml   2018-03-08 10:08:35.869743378 +0700
@@ -1,14 +1,14 @@
 scope: postgres
 namespace: /pg-nyata/
-name: pg1-nyata
- 
+name: pg2-nyata
+
 restapi:
-    listen: 192.168.100.3:8008
-    connect_address: 192.168.100.3:8008
- 
+    listen: 192.168.100.4:8008
+    connect_address: 192.168.100.4:8008
+
 etcd:
     host: 192.168.100.2:2379
- 
+
 bootstrap:
     dcs:
         ttl: 30
@@ -17,28 +17,28 @@
         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.168.100.3/0 md5
     - host replication replicator 192.168.100.4/0 md5
     - host replication replicator 192.168.100.5/0 md5
     - host all all 0.0.0.0/0 md5
- 
+
     users:
         admin:
             password: aiwaQuaeHuojeuyai2fiemai6Reeneix
             options:
                 - createrole
                 - createdb
- 
+
 postgresql:
-    listen: 192.168.100.3:5432
-    connect_address: 192.168.100.3:5432
+    listen: 192.168.100.4:5432
+    connect_address: 192.168.100.4:5432
     data_dir: /var/lib/postgresql/10.2-patroni
     pgpass: /tmp/pgpass
     authentication:
@@ -50,7 +50,7 @@
             password: saichae9Aich0xeen2Otethaduphiepo
     parameters:
         unix_socket_directories: '.'
- 
+
 tags:
     nofailover: false
     noloadbalance: false

Semoga dengan ini tidak ada salah ganti atau terlewat.

Pengaktifan Layanan Patroni

Setelah konfigurasi dan unit layanan Patroni terpasang, layanan Patroni sudah bisa dijalankan. Untuk setiap mesin, jalankan:

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

Satu langkah lagi.

HAProxy

Bagian yang paling mudah saya salin saja, ya, perintahnya.

sudo apt install haproxy

Konfigurasi:

$ 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.168.100.3_5432 192.168.100.3:5432 maxconn 100 check port 8008
    server postgresql_192.168.100.4_5432 192.168.100.4:5432 maxconn 100 check port 8008
    server postgresql_192.168.100.5_5432 192.168.100.5:5432 maxconn 100 check port 8008
EOF

Lalu,

sudo systemctl restart haproxy

Selesai.

Bacaan Lebih Lanjut

on 08 Mar 2018 06:34 AM

Semalam saya akhirnya naik taksi lagi, karena butuh cepat, kelihatan BlueBird di jalan, langsung stop, terus berangkat.

Saya sebenarnya menghindari topik pembicaraan soal demo kemarin. Takut menyinggung atau salah paham. Karena saya kurang simpatik dengan aksi mereka. Tapi tak disangka, justru pengemudinya yang duluan mengajak saya berbicara soal ini.

Pengemudi (P): Lihat berita soal demo taksi kemarin, Mas?

Saya (S): Iya. Rame banget ya. (berusaha netral)

P: Saya ikut tuh, Mas. (bangga)

S: Oh gitu, dari perusahaan emang ngutus ya? (sekalian lah, saya tanya aja)

P: Enggak sih. Itu demo paguyuban pengemudi, perusahaan gak ada hubungan. Jadi tiap pool taksi ngirim 20 orang.

S: Tapi kok di jalanan kayaknya banyak banget, Mas?

P: Ya itu yang ikut-ikutan. Kalau yang resmi itu, di tangannya diikat pita hitam. Itu yang rusuh-rusuh itu bukan yang demo resmi, Mas.

S: Tapi tetep aja pengemudi BlueBird kan?

P: Yang seragam biru dan mirip kaya kami kan bukan BlueBird aja, Mas. Orang-orang main tuduh aja.

S: Lah, videonya jelas gitu kok. Orang justru jadi kurang simpatik karena jelas banyak bukti-bukti videonya, Mas.

..hening..

S: Tapi sebenarnya kalau Mas sendiri, apa sih yang dituntut soal Uber sama GrabCar?

P: Ya ijinnya, sama tarifnya, Mas. Tarifnya kok kaya gitu. Harusnya disetarain lah sama yang lain.

S: Kalau soal ijin, mungkin ya. Saya gak paham sih soal hukum. Kalau soal tarif, kenapa pengemudi gak minta ke perusahaan buat nurunin tarif ya? Biar sama gitu dengan Uber atau GrabCar?

P: Ya mana mungkin, Mas. Kami ini rugi terus sekarang sejak ada taksi online-online ini.

S: Saya gak tahu sih kalau misal diturunin, perusahaan jadi rugi atau enggak, tapi kalau lihat laporan keuangan perusahaan BlueBird sih, akhir tahun 2015 aja, keuntungannya udah 800-an miliar loh, Mas. Itu udah untung loh, Mas. Bukan pemasukan. Apa gak mending ngurangin keuntungan perusahaan biar pengemudinya gak pusing. Kasih promo, atau bikin aplikasi yang sekelas online-online itulah gitu.

P: (hening)

Lalu si pengemudi berganti topik

P: Saya ini langsung dari kampung Mas. Habis demo besoknya saya pulang kampung ke Tegal. Kemarin malem saya balik lagi, nyampe pool jam 1-an pagi. Tidur-tidur bentar, setengah tiga pagi sudah jalan. Dari jam 3 pagi tadi sampe sekarang saya baru dapat segini, Mas! Jarinya sambil menunjuk mesin argo. Disitu tertera 481 ribu. Waktu menunjukkan sekitar pukul 10.30 malam.

S: Berapa kali bawa penumpang tuh, Mas?

P: Ini.. (Dia mencet tombol di argo, terus terlihat angka 11). Nih, dari subuh sampai malam gini saya baru dapat 11 kali tarikan. Duit cuma segitu. Bensin 100 persen di tanggung pengemudi. Nombok saya Mas. Bukan saya aja, semua pengemudi sekarang sepi banget, Mas. Ini kan gak adil. Kasian kami, Mas. Mau makan apa kalau kaya gini terus.

S: Kenapa kok jadi sepi, Mas?

P: Ya itu.. yang online-online itu.

S: Tapi orang-orang pada pindah ke yang online-online itu karena apa?

P: Ya itu.., tarifnya gak adil.

S: Kenapa gak tanya sama perusahaan kenapa tarifnya gak disamain?

(hening)

Lalu dia berlanjut curhat, istrinya jadi marah-marah karena penghasilan kurang dan seterusnya. Saya duduk saja mendengarkannya sampai saya tiba di tujuan.

Catatan:

Tulisan ini dibuat bulan Maret tahun 2016, tak lama setelah demo besar-besaran itu. Baru saya post sekarang (2 tahun kemudian). Entah kenapa. Sepertinya lupa publish. Saat tulisan ini dibuat, Go-Car belum ada. Aplikasi BlueBird juga masih jelek sekali.

Kondisi sekarang (Maret 2018). Aplikasi BlueBird di Android sudah bagus banget. Saya pribadi lumayan sering pakai. Terutama fitur EasyRide nya (naik taksi tanpa pemesanan online tetap bisa bayar cashless lewat aplikasinya). Lalu yang unik, BlueBird justru sudah ber-partner dengan Go-Jek.

Pemasukan BlueBird (kode saham BIRD) juga terus turun. Tahun 2015 penghasilannya sekitar 800-an miliar rupiah, tahun 2016 turun ke 500-an miliar. Sampai dengan kwartal 3 tahun 2017, pemasukannya “baru” 300-an miliar.

on 08 Mar 2018 02:19 AM

04 Mar 2018

[Ilustrasi: pexels.com]

Kalau ditanya soal film, saya senang genre thriller yang penuh intrik politik, “detektif-detektifan”, mafia, perebutan kekuasaan dan plot twist yang tak terduga. Contohnya seperti film Game of Thrones, House of Card, The Godfather, The Good Fellas, Billions, Designated Survivor, The Wire, Miss Sloane, dkk. Sayangnya, di Indonesia jarang sekali ada film bergenre seperti ini. Setahu saya (film modern) Indonesia yang bergenre seperti ini paling-paling cuma film “2014: Siapa di Atas Presiden?

Karena film Indonesia jarang yang bergenre seperti ini, akhirnya saya memutuskan berganti ke novel. Ternyata novel bergenre seperti ini pun jarang ada. Saya awalnya hanya tahu 2 novel karya Tere Liye saja yang masuk kriteria saya ini: Negeri di Ujung Tanduk, dan Negeri Para Bedebah. Cukup lumayan plotnya. Saya cuma kurang cocok di gaya bahasanya yang terlalu kaku. Mungkin niatnya nyeni gitu ya. Maklumlah, saya bukan pecinta sastra yang sampai gimana gitu.

Belakangan saya tahu ada novel Indonesia berjudul Sudut Mati karya Tsugaeda. Lumayan, tapi masih kurang nendang. Akhirnya saya baca novel pertamanya, Rencana Besar. Nah ini baru sesuai ekspektasi saya. Plot twistnya saya suka. Temanya juga gak umum, corporate-thriller gitu kalau bisa saya sebut. Selain itu ada intrik politik dengan serikat buruh. Keren.

Saya masih penasaran dengan novel-novel Indonesia lain. Ternyata ada yang temanya thriller, tapi berbau IT. Judulnya Spammer, karya dari Ronny Mailindra. Ceritanya tentang hacker/spammer, berhubungan dengan korupsi, dan KPK. Secara tema saya suka, tapi secara plot cerita saya kurang suka. Tapi untuk berani mengambil tema seperti ini saya acungi jempol. Oh iya, satu lagi part yang cukup membuat saya kaget, penceritaannya soal hacker, spammer dan hal-hal berbau IT nya terasa detail. Setelah kepo-kepo di Google, ternyata penulisnya memang bekerja di bidang IT. Boleh juga nih.

Saat ini novel lain yang masih belum saya selesaikan adalah Koin Terakhir karya Yogie Nugraha. Ini sih kalau menurut saya ala-ala Dan Brown banget sih plot ceritanya. Ceritanya tentang agen intelijen BIN yang mendapat tugas rahasia. Di sini yang bikin saya suka, karena saya yang tadinya justru lebih familiar dengan cerita-cerita FBI, CIA, NSA, Homeland, Secret Service, dll akhirnya jadi lebih tahu tentang dunia intelejen Indonesia sendiri. Tapi plot ceritanya sih sejauh ini menurut saya masih kurang nendang. Entahlah, nanti kalau sudah selesai, kalau ada waktu, nanti saya ulas.

Novel lain dalam genre ini yang sudah masuk radar saya adalah Pendosa Suci, yang juga karya Yogie Nugraha. Sama, bertema BIN (Badan Intelejen Negara) juga. Berikutnya ada novel Tiga Sandera Terakhir (tentang penyanderaan di Papua) dan Halaman Terkahir (kisah tentang Jendral Polisi Hoegeng).

Minat Masyarakat Indonesia

Saya kurang tahu soal minat atau genre favorit novel-novel di Indonesia. Tapi sepertinya, genre yang saya bahasa di sini ini tidak terlalu diminati di Indonesia. Buktinya, selain novel karya Tere Liye tadi (yang penulisnya lebih dikenal karena novel lainnya yang bertema cinta/religi), novel-novel di atas tadi sulit sekali ditemukan di toko buku (ini spesifik Gramedia sih). Selalu stok kosong. Saya cuma berhasil menemukan Sudut Mati saja.

Untungnya sih, judul-judul lainnya yang saya sebut di atas masih tersedia di Google Play Store. Di situlah akhirnya saya membeli novel tadi.

Sebenarnya ada beberapa judul novel lagi sih yang sempat masuk radar saya. Tapi karena tidak bisa saya temukan di toko buku maupun di Google Play store, akhirnya terpaksa saya lewatkan. Ini membuat saya bertanya-tanya, kenapa novel-novel yang tidak bisa saya temukan itu tidak dimasukkan saya ke Play Store ya? Ya kan gak ada ongkos biaya apa-apa (kayaknya). Siapa tahu ada lumayan banyak orang seperti saya yang lebih suka beli di Play Store. Lumayan kan?

*kenapa gak beli buku fisik di online shop saja? Saya males nanyain satu-satu ke penjualnya, stoknya masih ada atau enggak. Karena banyak yang majang di website, sebenarnya stoknya gak ada.

Btw, kalian ada tahu judul-judul novel Indonesia lainnya yang masuk  genre ini? Share dong di kolom komentar.

on 04 Mar 2018 06:35 PM

14 Nov 2017

For the past 5 years I’ve been relying heavily on my Buffalo Linkstation Quad NAS to store personal data. These personal data include photos I of my family that I have collected for over 16 years, to me these data is highly valuable.

Recently lightning stuck and the surge killed my Mikrotik Router, Cisco Cable Modem, LAN port of my Wifi, my son’s LG air conditioner, 4 light bulbs and the LAN Port of the Buffalo Linkstation Quad NAS Storage device sitting on my desk. 🙁

Checking the lightning rod, it turns out that an irresponsible has cut the cable that links the rod to ground. I suspect severity of the lighting strike was due to this fact.

If you have a different experience on preventing lighting surge please comment..

Back in June 2012 I estimated that 3TB of data will last me a long while in storing photos of my family, hence I did not create an array of disks to store my data. Instead I treated the 2 drives I had as individual drives each shared as separate network drives leaving me room to grow with 2 drive bays ready.

A week after the surge killed the LAN port, I pulled out the drives and placed it in a USB external case and hooked it up to a freshly installed desktop running Ubuntu 16.04 LTS. Knowing that it was formatted EXT4. I was hoping that the drives would be detected, in fact it didn’t :(.

Running

sudo fdisk -l

did not identify the filesystem type of the partition, instantly my heart raced thinking that the surge had also killed the hard drive. Being used as single drives I was convinced that I did not need to rebuild a disk array, and did not install mdadm. So I thought I needed to either rebuild the partition table or connect both hard drives and rebuild the array.

Luckily I got curios and wanted to know what the RAID array looks like, so I installed mdadm

sudo apt-get install mdadm

and auto magically all 3 partitions of the hard drive was detected and mounted. Wow what a reliever! Now I can see all the photos and videos of my family, collected for over 16 years.. what a relief!!!

Bagus lahir

Now moving forward I am budgeting a replacement of this NAS, also I’m setting up redundancy by manually uploading my family photos and videos to Google Photos.. as writing this post I’m thinking maybe better to automate this process.. any pointers? hmm let me google “Google Photos upload API”…

on 14 Nov 2017 08:09 AM

09 Aug 2017

Lama saya baru sadar kalau tulisan-tulisan lama di blog ini tidak lagi bisa diakses. Baru sadar setelah iseng-iseng baca tulisan-tulisan lama saya sendiri. Secara naluri otomatis saya menyalahkan plugin-plugin baru yang saya pasang. Termasuk menyalahkan update WordPress terbaru.

Utak-atik sana-sini, lama baru ketemu apa penyebabnya.

Ternyata karena plugin Facebook OpenGraph, Twitter Card, dkk. 😐

on 09 Aug 2017 09:51 AM

24 Jul 2017

Karena harddisknya di pindah ke server lain, ethernet cardnya tidak ke detek di config /etc/network/interface

silahkan ketik perintah

lspci | grep -i net

pastikan network card sudah terdetek pada OSnya

silahkan ketik perintah

sudo ls /sys/class/net

apakah ada perubahan nama network card yang biasa  eth0 atau eth1 menjadi yang lain seperti eth2 dan eth3 dst..

selanjutnya silahkan rubah pada config /etc/network/interface

Reboot kembali server

on 24 Jul 2017 06:46 AM

20 Jul 2017

Selama beberapa tahun saya terbiasa menggunakan Digital Audio Workstation (DAW) yang bernama Ableton. Ketika masih di Windows, ataupun ketika sudah berganti ke laptop Mac. Kekurangannya, hampir semua instrumen bawaan Ableton tidak pernah saya gunakan. Mentok saya cuma gunakan untuk membuat white-noise.  Jadinya sangat bergantung dengan VST.

Setelah install ulang Mac saya dengan OS terbaru (Sierra), saya memutuskan berganti ke Logic Pro X. Agak berat sebenarnya, karena Logic ini hanya tersedia di Mac. Jika suatu saat nanti saya berganti ke OS lain, otomatis program ini tidak bisa saya gunakan lagi.

Saya nyaman sekali menggunakan Ableton sebenarnya. Tapi selain kekurangan di atas, harga Ableton juga mahal, $799, kalau dikonversi ke Rupiah menjadi sekitar Rp 10 juta.

FL Studio saya tidak begitu familiar, cuma pernah coba sehari atau 2 hari jaman kuliah dulu. Harganya sama dengan Logic sebenarnya, itu sudah termasuk berbagai instrumen VST. Sayangnya FL Studio tidak tersedia untuk Mac. Dulu sih mereka pernah meluncurkan versi Betanya untuk Mac. Tapi entah mengapa gak lanjut.

Anyway, akhirnya saya akhirnya membeli Logic Pro. $199, dirupiahkan kemarin menjadi Rp2,99 jt. Tapi ini sudah dilengkapi berbagai instrumen dan sampler. Selain itu kita bisa download sekitar 80GB sound sample dan loop, gratis, free royalti, resmi dari Apple. Jadi enggak perlu beli sample sound seperti Vengeance dkk, yang harganya justru lebih mahal dari Logic.

Setelah coba-coba selama sebulanan (yes, this is my first time using Logic), akhirnya berhasil jadi 1 lagu, genrenya dance music. Saya juga gak tahu ini genre Electro House, atau apa. Saya cuma pehobi amatiran. Kalau suka silahkan didownload via situs-situs downloader YouTube itu. 😀

Gimana, enak lagunya?

on 20 Jul 2017 04:33 PM

30 Jun 2017

In this tutorial, I assume that you are familiar with linux Terminal and basic command line.

Step 1.Make sure your wireless card in “Monitor mode”.
aireply01

Type “iwconfig your_wireless_card”.
You can turn off the wireless card, switch to ‘Monitor Mode’ and turn it on again.
aireply02

I prefer to use ‘airmong-ng’ to create a virtual wireless network. Airmon-ng is bash script that use to turn wireless card into monitor mode.
aireply03

Step 2. Run airodump-ng to check who are connected to your wifi network.
BSSID is your Access Point MAC address.
ESSID is your Access Point name.
STATION is the list of devices that are connected to BSSID.
For example, I want to kick out device with MAC address 70:72:0D:59:3D:81 from my Access Point. My Access Point MAC address is 98:DE:D0:4C:DF:74.
aireply04

Step 3. Run ‘aireply-ng’ to kick off the target.
Type: $ sudo aireplay-ng -0 0 -a your_Access_point -c your_target mon0
aireply05

 

 

 

 

 

 

 

 

 

 

 

 

 

 

on 30 Jun 2017 02:33 AM

Ping is a simple test to check if the target is exist. When your are connected with free wifi in a cafe library etc, and someone try to hack your system, usually this is one of the method that they do.

You can it using tcpdump.

If it’s not in your system yet, you can install by typing (for Ubuntu): apt-get install tcpdump in your linux terminal.

Type the command below to start the process:

sudo tcpdump -i wlan0 icmp and icmp[icmptype]=icmp-echo
-i option is for your wireless network interface. I use atheros chipset, so my one is wlan0.
When I ping from my other device, tcpdump will tell me that there is a device from an ip address try to ping me.
tcpdump

on 30 Jun 2017 02:31 AM

18 Jun 2017

Sejak teknologi A2DP muncul saya belum begitu tertarik untuk mencobanya. Baru kemarin-kemarin saja mulai tertarik untuk mencoba. Hasil dari mencoba menggunakan bluetooth speaker besutan Mifa jadi pengen mencoba merk lain dan yang relatif lebih kecil. Belilah... Xiaomi Bluetooth Speaker Portable yang bentuknya agak imut.

Awalnya memang digunakan di ponsel. Tapi iseng-iseng mencoba dikoneksikan dengan MacbookPro8,1 yang terinstall LinuxMint. Teman-teman menyebut Macbook yang saya gunakan adalah Macbook Bajakakan. Berikut langkah-langkah mengkoneksikan dengan Xiaomi Bluetooth Speaker Portable:
1. Klik pada bagian kanan bawah dengan logo Bluetooth kemudian muncul menu seperti gambar di bawah ini.


2. Pilih Bluetooth Settings maka akan muncul gambar dibawah ini.

3. Klik tanda plus (+) sambil mencari bluetooth sekitar menyala, pilih MI Portable Bluetooth Speaker, klik Continue .

4. Klik Quit, artinya komputer dan Xioami Bluetooth Speaker Portable sudah terkoneksi.

5. Setting Xiaomi Bluetooth Speaker Portable pada bagian Sound Settings.

6. Pilih Headset seperti pada gambar di bawah ini.

7. Anda juga dapat melakukan pengujian suara untuk memastikan suara dari komputer keluar di Xiaomi Bluetooth Speaker menggunakan Test Sound.

8. Setelah suara terdengar saatnya Anda menikmati hiburan favorit.




on 18 Jun 2017 09:34 AM

16 Apr 2017

OK, langsung saja download flag.zip yang di berikan seperti diatas.
Sebelumnya, mari kita cek dahulu flagnya.
$ file flag.png 
flag.png: PNG image data, 960 x 5, 8-bit/color RGBA, non-interlaced

Bisa kita cek lebih dalam lagi file nya dengan binwalk.
$ binwalk flag.png 

DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 960 x 5, 8-bit/color RGBA, non-interlaced
253 0xFD Zlib compressed data, default compression
330 0x14A PNG image, 960 x 5, 8-bit/color RGBA, non-interlaced
392 0x188 Zlib compressed data, default compression
469 0x1D5 PNG image, 960 x 5, 8-bit/color RGBA, non-interlaced
---snip---
7514 0x1D5A Zlib compressed data, default compression
8404 0x20D4 PNG image, 960 x 5, 8-bit/color RGBA, non-interlaced
8466 0x2112 Zlib compressed data, default compression
9249 0x2421 PNG image, 960 x 5, 8-bit/color RGBA, non-interlaced
9311 0x245F Zlib compressed data, default compression

Setelah itu estrak file gambarnya menggunakan foremost.
$ foremost -v flag.png 
Foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus
Audit File

Foremost started at Fri Apr 14 00:57:40 2017
Invocation: foremost -v flag.png
Output directory: /home/darm/CTF/FITHACK/forensic/aw/output
Configuration file: /etc/foremost.conf
Processing: flag.png
|------------------------------------------------------------------
File: flag.png
Start: Fri Apr 14 00:57:40 2017
Length: 82 KB (84177 bytes)

Num Name (bs=512) Size File Offset Comment

0: 00000000.png 330 B 0 (960 x 5)
1: 00000000_1.png 139 B 330 (960 x 5)
2: 00000000_2.png 139 B 469 (960 x 5)
3: 00000001.png 139 B 608 (960 x 5)
4: 00000001_1.png 139 B 747 (960 x 5)
5: 00000001_2.png 139 B 886 (960 x 5)
6: 00000002.png 139 B 1025 (960 x 5)
7: 00000002_1.png 139 B 1164 (960 x 5)
8: 00000002_2.png 139 B 1303 (960 x 5)
9: 00000002_3.png 139 B 1442 (960 x 5)
10: 00000003.png 254 B 1581 (960 x 5)
11: 00000003_1.png 357 B 1835 (960 x 5)
12: 00000004.png 516 B 2192 (960 x 5)
13: 00000005.png 603 B 2708 (960 x 5)
14: 00000006.png 657 B 3311 (960 x 5)
15: 00000007.png 764 B 3968 (960 x 5)
16: 00000009.png 932 B 4732 (960 x 5)
17: 00000011.png 895 B 5664 (960 x 5)
18: 00000012.png 893 B 6559 (960 x 5)
19: 00000014.png 952 B 7452 (960 x 5)
20: 00000016.png 845 B 8404 (960 x 5)
21: 00000018.png 1 KB 9249 (960 x 5)
22: 00000020.png 901 B 10328 (960 x 5)
23: 00000021.png 936 B 11229 (960 x 5)
24: 00000023.png 946 B 12165 (960 x 5)
25: 00000025.png 1 KB 13111 (960 x 5)
26: 00000027.png 795 B 14142 (960 x 5)
27: 00000029.png 927 B 14937 (960 x 5)
28: 00000030.png 976 B 15864 (960 x 5)
29: 00000032.png 726 B 16840 (960 x 5)
30: 00000034.png 895 B 17566 (960 x 5)
31: 00000036.png 983 B 18461 (960 x 5)
32: 00000037.png 1 KB 19444 (960 x 5)
33: 00000039.png 1019 B 20473 (960 x 5)
34: 00000041.png 1 KB 21492 (960 x 5)
35: 00000044.png 1 KB 22760 (960 x 5)
36: 00000047.png 975 B 24130 (960 x 5)
37: 00000049.png 1 KB 25105 (960 x 5)
38: 00000051.png 1 KB 26239 (960 x 5)
39: 00000053.png 954 B 27272 (960 x 5)
40: 00000055.png 1 KB 28226 (960 x 5)
41: 00000057.png 1 KB 29528 (960 x 5)
42: 00000060.png 1 KB 30765 (960 x 5)
43: 00000062.png 1 KB 32207 (960 x 5)
44: 00000065.png 1 KB 33520 (960 x 5)
45: 00000068.png 1 KB 34835 (960 x 5)
46: 00000070.png 1024 B 36058 (960 x 5)
47: 00000072.png 850 B 37082 (960 x 5)
48: 00000074.png 1 KB 37932 (960 x 5)
49: 00000076.png 844 B 39000 (960 x 5)
50: 00000077.png 1 KB 39844 (960 x 5)
51: 00000079.png 1 KB 40899 (960 x 5)
52: 00000081.png 965 B 41927 (960 x 5)
53: 00000083.png 901 B 42892 (960 x 5)
54: 00000085.png 879 B 43793 (960 x 5)
55: 00000087.png 1 KB 44672 (960 x 5)
56: 00000089.png 862 B 45871 (960 x 5)
57: 00000091.png 944 B 46733 (960 x 5)
58: 00000093.png 1 KB 47677 (960 x 5)
59: 00000095.png 1 KB 48788 (960 x 5)
60: 00000097.png 1 KB 50164 (960 x 5)
61: 00000100.png 1 KB 51236 (960 x 5)
62: 00000102.png 1 KB 52302 (960 x 5)
63: 00000104.png 1 KB 53454 (960 x 5)
64: 00000106.png 1 KB 54677 (960 x 5)
65: 00000109.png 1 KB 55882 (960 x 5)
66: 00000111.png 1 KB 57143 (960 x 5)
67: 00000113.png 1 KB 58175 (960 x 5)
68: 00000115.png 1 KB 59223 (960 x 5)
69: 00000117.png 997 B 60313 (960 x 5)
70: 00000119.png 931 B 61310 (960 x 5)
71: 00000121.png 882 B 62241 (960 x 5)
72: 00000123.png 939 B 63123 (960 x 5)
73: 00000125.png 858 B 64062 (960 x 5)
74: 00000126.png 854 B 64920 (960 x 5)
75: 00000128.png 943 B 65774 (960 x 5)
76: 00000130.png 885 B 66717 (960 x 5)
77: 00000132.png 881 B 67602 (960 x 5)
78: 00000133.png 996 B 68483 (960 x 5)
79: 00000135.png 1 KB 69479 (960 x 5)
80: 00000137.png 1 KB 70558 (960 x 5)
81: 00000139.png 1 KB 71664 (960 x 5)
82: 00000142.png 1 KB 72726 (960 x 5)
83: 00000144.png 863 B 73797 (960 x 5)
84: 00000145.png 976 B 74660 (960 x 5)
85: 00000147.png 790 B 75636 (960 x 5)
86: 00000149.png 713 B 76426 (960 x 5)
87: 00000150.png 689 B 77139 (960 x 5)
88: 00000152.png 732 B 77828 (960 x 5)
89: 00000153.png 566 B 78560 (960 x 5)
90: 00000154.png 554 B 79126 (960 x 5)
91: 00000155.png 472 B 79680 (960 x 5)
92: 00000156.png 402 B 80152 (960 x 5)
93: 00000157.png 307 B 80554 (960 x 5)
94: 00000157_1.png 357 B 80861 (960 x 5)
95: 00000158.png 435 B 81218 (960 x 5)
96: 00000159.png 403 B 81653 (960 x 5)
97: 00000160.png 432 B 82056 (960 x 5)
98: 00000161.png 290 B 82488 (960 x 5)
99: 00000161_1.png 287 B 82778 (960 x 5)
100: 00000162.png 139 B 83065 (960 x 5)
101: 00000162_1.png 139 B 83204 (960 x 5)
102: 00000162_2.png 139 B 83343 (960 x 5)
103: 00000163.png 139 B 83482 (960 x 5)
104: 00000163_1.png 139 B 83621 (960 x 5)
105: 00000163_2.png 139 B 83760 (960 x 5)
106: 00000163_3.png 139 B 83899 (960 x 5)
107: 00000164.png 139 B 84038 (960 x 5)
*|
Finish: Fri Apr 14 00:57:40 2017

108 FILES EXTRACTED

png:= 108
------------------------------------------------------------------

Foremost finished at Fri Apr 14 00:57:40 2017

Euw, ternyata banyak juga, ada 108 files yang berhasil di ekstrak.
$ cd output/
$ ls
audit.txt png
$ cd png/
$ l
00000000_1.png 00000002.png 00000012.png 00000029.png 00000047.png 00000068.png 00000085.png 00000104.png 00000123.png 00000139.png 00000154.png 00000161.png
00000000_2.png 00000003_1.png 00000014.png 00000030.png 00000049.png 00000070.png 00000087.png 00000106.png 00000125.png 00000142.png 00000155.png 00000162_1.png
00000000.png 00000003.png 00000016.png 00000032.png 00000051.png 00000072.png 00000089.png 00000109.png 00000126.png 00000144.png 00000156.png 00000162_2.png
00000001_1.png 00000004.png 00000018.png 00000034.png 00000053.png 00000074.png 00000091.png 00000111.png 00000128.png 00000145.png 00000157_1.png 00000162.png
00000001_2.png 00000005.png 00000020.png 00000036.png 00000055.png 00000076.png 00000093.png 00000113.png 00000130.png 00000147.png 00000157.png 00000163_1.png
00000001.png 00000006.png 00000021.png 00000037.png 00000057.png 00000077.png 00000095.png 00000115.png 00000132.png 00000149.png 00000158.png 00000163_2.png
00000002_1.png 00000007.png 00000023.png 00000039.png 00000060.png 00000079.png 00000097.png 00000117.png 00000133.png 00000150.png 00000159.png 00000163_3.png
00000002_2.png 00000009.png 00000025.png 00000041.png 00000062.png 00000081.png 00000100.png 00000119.png 00000135.png 00000152.png 00000160.png 00000163.png
00000002_3.png 00000011.png 00000027.png 00000044.png 00000065.png 00000083.png 00000102.png 00000121.png 00000137.png 00000153.png 00000161_1.png 00000164.png

Setelah melihat gambar hasil dari ekstrakan diatas, kalau dilihat satu persatu isi gambar adalah potongan-potongan gambar yang tidak lain adalah Flag yang kita cari-cari. Terus gimana gabunginnya? Caranya cukup mudah, kita bisa menggunakan tool dari ImageMagick yaitu convert.
$ convert -append *.png out.png

Flag: FIT{6xgwxloxq79ew}
on 16 Apr 2017 07:07 PM
Soal yang diberikan yaitu Trivia, and here you go.

Trivia1 [10]

A bug found in bash causes arbitrary code to be executed remotely
Flag format: FIT{[Capital letters and no spaces]}

Flag: FIT{SHELLSHOCK}


Trivia2 [10]

A dog breed that exists in version 3.0 of SSL.
Flag format: FIT{[Capital letters and no spaces]}

Flag: FIT{POODLE}


Trivia3 [10]

VyOS 1.0.0 - 1.0.5
Flag format: FIT{[Capital letters and no spaces]}

Flag: FIT{HYDROGEN}


Trivia5 [10]

Nickname of SHA-1 collision attack done by Google and CWI.
Flag format: FIT{[Capital letters and no spaces]}

Flag: FIT{SHATTERED}
on 16 Apr 2017 05:56 PM

Seperti yang terlihat pada challenge diatas, langsung saja kita akses pada link url https://look.problem.ctf.nw.fit.ac.jp, dan ternyata tidak ada apa-apa disana. Sesuai dari Hint yang diberikan "Look quickly", saya langsung cek response headers dari website tersebut.


Did you see the flag?
Yes, flag langsung muncul pada response headers yang terletak di set-cookie, tapi disitu terlihat ada URL encoding pada flag, dan gampang saja kita bisa melakukan decode flag melalui situs penyedia layanan URL decode seperti dibawah ini.

Flag: FIT{17_i5_n07_4_c00ki3_t0_3a7}
on 16 Apr 2017 05:50 PM

09 Apr 2017

Secara resmi ponsel yang dapat dipasang Kali NetHunter dapat dilihat pada pranala https://github.com/offensive-security/kali-nethunter/wiki#10-supported-devices-and-roms. Sampai tulisan ini dibuat Xioami Mi4 belum tercatat sebagai ponsel yang dapat dipasang Kali NetHunter. Namun pada pranala https://github.com/offensive-security/nethunter-devices/tree/master/marshmallow ada mesin cancro yang digunakan Xiaomi Mi4 dan Mi3. Kebetulan sampai saat ini Mi4 menggunakan MIUI 8.2.x yang berbasis Android M.

+fazlur rahman sudah memulai terlebih dahulu melakukan pemasangan di perangkat Xiaomi. Cara saya agak sedikit berbeda yang dilakukan oleh +fazlur rahman dan semua saya lakukan menggunakan LinuxMint. Saya memulai dari direktori Download:
1.   Ponsel sudah dalam kondisi rooted
2.   Hak akses pengembangan disesuaikan
3.   Untuk jaga-jaga, sudo python -m pip install pyopenssl pyasn1 ndg-httpsclient
4.   git clone https://github.com/offensive-security/kali-nethunter.git
5.   cd kali-nethunter/update/data/app/
6.   adb install Term-nh.apk
7.   adb install nethunter.apk
8.   cd ~/Download
9.   Unduh, wget -c https://images.offensive-security.com/https://images.offensive-security.com/kalifs-armhf-full.tar.xz
11. Pastikan hak akses pada MIUI sudah diperkenankan semuanya
12. mv kalifs-armhf-full.tar.xz kalifs-full.tar.xz
13. adb push kalifs-full.tar.xz /sdcard/
14. Jalankan aplikasi NetHunter pada ponsel
15. Ikuti petunjuk pada pilihan Kali Chroot Manager

Pada prinsipnya Kali NetHunter bisa berfungsi di Xiaomi dengan MIUI-nya namun saya belum bisa memanfaatkan maksimal karena terkendala cukup banyak seperti kapasitas internal memory dan terbentur dengan sistem keamanan MIUI yang menurut saya cukup ketat. Suatu saat kalau memang benar-benar longgar dan memiliki perangkat yang sesuai rekomendasi saya akan ngulik lagi.





on 09 Apr 2017 11:38 PM

12 Feb 2017

Menarik untuk disimak… Meme #1: We have shared software since we have written software. Meme #2: Writing good software is hard work. Meme #3: There is no scale without discipline. Meme #4: Software is inherently dynamic. Meme #5: You always get more than you give. Meme #6: Freeloaders are essential to success. Meme #7: Don’t […]
on 12 Feb 2017 01:01 PM

04 Feb 2017

Mohon maaf jika tulisan dan judul tidak nyambung saya hanya teringat gaya menulis jaman masih SMP. Belajar menulis hasil praktikum di Lab. IPA menurut saya masih bermanfaat sampai saat ini. Hal ini didasari pemilihan Instant Messenger yang cocok untuk sebuah "forum diskusi singkat". Untuk forum diskusi saya lebih menyukai milis atau web forum. Selain itu juga ada pemberitaan yang diduga ada rekayasa dalam sebuah percakapan Instant Messenger. 

A. Alat dan Bahan
Dalam ngoprek kali ini alat dan bahan yang saya perlukan sebenarnya standar dan mudah didapat (apalagi kalau menggunakan Linux). Ada pun alat dan bahan yang saya gunakan sebagai berikut:
  1. Ponsel dengan sistem operasi Android yang telah ter-root.
  2. Kabel data (sebaiknya yang original)
  3. Komputer bersistem operasi Linux
  4. ADB yang terpasang di komputer
  5. Aplikasi Sqliteman yang terpasang di komputer

B. Tujuan
Instant Messenger saat ini banyak sekali tersedia di Playstore. Bisa dikatakan terkadang bingung memilihnya. Namun yang saat ini cukup populer di Indonesia menurut JakPat yang saya kutip dari DailySocial diantaranya Blackberry Messenger, Whatsapp, Line, FB Messenger dan Telegram. Dalam ngoprek  saya tidak menggunakan tidak menggunakan Line. Intinya saya hanya ingin "melihat" pesan yang tertinggal didalam ponsel sesuai kaidah analisis forensik.

C. Langkah Kerja
Dalam tulisan ini saya tidak menjelaskan secara detil tentang mendapatkan barang bukti digital dari  Blackberry Messenger, Telegram, FB Messenger, dan Whatsapp maupun barang bukti elektronik berupa ponsel. Asumsinya bahwa proses pengambilan barang bukti digital sudah memenuhi kaidah akuisisi barang bukti digital secara logikal.
1. Pastikan ponsel dalam kondisi ter-root.
2. Pastikan ponsel dalam mode developer.
3. Pastikan USB debugging telah aktif.
4. Saya tancapkan kabel data antara ponsel dan komputer ber-Linux kondisinya aman tidak perlu install driver ponsel.
5. Jalankan perintah adb shell.
6. Masuk ke mode administrator ketik su.
7. Membuat direktori dengan perintah, mkdir /sdcarcd/forensik-201702
8. Menyalin barang bukti digital ke direktori /sdcard/forensik-201702

D.  Analisis Barang Bukti Digital
Dengan kondisi ponsel yang ter-root memudahkan dalam mendapatkan barang bukti digital. Semua barang bukti digital disalin ke direktori /sdcard/dorensik-201702. Selanjut barang bukti digital satu per satu disalin ke komputer untuk analisis menggunakan perintah adb pull /sdcard/forensik-201702/nama.db ~/forensik/2017/02/ . Ingat harus satu per satu tidak bisa menyalin secara semua dengan tanda * . Analisis lebih lanjut silakan bisa dipelajari, berikut hanya tangkapan layar dari masing-masing barang bukti digital.
1. Blackberry Messenger
Barang Bukti Digital: master.enc
2. Telegram
Barang Bukti Digital: cache4.db


Memiliki 39 Tabel
3. Whatsapp
Barang Bukti Digital: msgstore.db

Memiliki 18 Tabel
4. FB Messenger
Barang Bukti Digital: threads_db2

Memiliki 15 Tabel
E. Kesimpulan
Ada 2 Instant Messenger yang tidak bisa saya baca isi pesannya yaitu Blackberry Messenger dan Telegram. Whatsapp dan FB Messenger tidak ada enkripsi apapun sehingga sangat mudah dibaca. Sebelum 1 November 2014 Blackbeery Messenger masih bisa dibaca menggunakan BBMPork. Serupa seperti Whatsapp versi terbaru yang tidak terenkripsi. Tidak seperti jaman dulu, Whatsapp relatif sulit dibaca walaupun ada aplikasi tambahan yang dapat membongkarnya seperti Wforensic dan Whatsapp Xtract. Sekedar bonus jika Whatsapp boros media penyimpanan. Whatsapp di ponsel saya hampir "memakan" 1 GB dapat dilihat di gambar berikut.


Harapannya adanya analisis ini Anda bisa bijak memilih dan menggunakan Instant Mesenger. Insya Allah dalam waktu dekat hasil analisis ini akan saya presentasi di Padepokan ASA, waktu dan tempat mohon bisa memantau blog ini.

on 04 Feb 2017 08:00 AM

03 Feb 2017

Ini perbaikan dari tulisan sebelumnya. Masih sama dengan kata kunci terdahulu yaitu Recover MySQL Root Password, Reset MySQL Root Password, Reset Forgotten MySQL Root Password, dan lain-lain. Berikut langkah-langkah mengubah password Mysql yang lupa di Ubuntu 16.04:
1. sudo /etc/init.d/mysql stop
2. sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld ; sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &. Jika sudah muncul tulisan seperti dibawah ini berarti "angin segar".
2017-02-03T07:47:01.759823Z mysqld_safe Logging to syslog.
2017-02-03T07:47:01.763524Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-03T07:47:01.767094Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-03T07:47:01.789149Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

3. Login mysql dengan perintah, mysql -uroot -p dan tekan enter untuk memasukan password-nya.
4. Saat pada konsol mysql jalankan perintah
USE mysql;
FLUSH PRIVILEGES;
SET PASSWORD FOR root@'localhost' = PASSWORD('password_baru_anda');
FLUSH PRIVILEGES;
\q
5. Hentikan proses mysql dengan perintah, ps ax| grep mysql | awk '{print $1}' | xargs kill -9
6. Jalankan mysql dengan perintah, /etc/init.d/mysql start

 Silakan dicoba ulang menggunakan password baru anda.
on 03 Feb 2017 08:09 AM