Telpon Lewat Internet Tidak Gratis

Hingga hari ini masyarakat yang baru mengenal Smartphone (ponsel cerdas) banyak yang benar-benar belum smart, bisa dibilang lebih cerdas ponselnya dibanding yang makai. Misalnya ada yang bilang bahwa nelpon lewat internet itu gratis, padahal sebenarnya tetap bayar. Belum lama ini penulis ngobrol-ngobrol dengan Calon Customer yang sok cerdas, berikut kurang-lebih obrolannya.


C: Calon Customer - P: Saya
  • C: Laptop saya LCDnya pecah, mas-e bisa benerin?
  • P: Gak bisa, harus ganti
  • C: Di sini punya gak?
  • P: Merek dan seri Laptopnya apa
  • C: Toserba xyz 12345
  • P: Stok sedang kosong pak, kalau pesan bisa dicarikan
  • C: Kalau sudah ada saya kabari ya mas, punya WA kan mas?
  • P: Punya, jawab saya sambil nyodorin kartu nama
Kemudian dia menerima kartu nama saya dan memberikan nomor WAnya dengan menulis di atas kertas kosong
  • C: Kalau sudah ada kabari ya, telpon aja lewat WA, gratis kok kalau telpon lewat WA
  • P: Yang bener aja, Telpon lewat WA itu tidak gratis, malah yang menerima telpon ikut bayar
  • C: Gak kok bayar mas, kalau saya telpon pakai WA pulsa saya tidak berkurang.
  • P: Ya pulsanya tidak berkurang, tapi kuotanya berkurang, coba aja telpon WA tapi paket data seluler dimatikan, bisa gak?
Kemudian dia melakukan seperti yang saya bilang
  • C: Ya mas, tidak bisa, tapi kalau saya telpon pakai WA kan mas-e gak ikut bayar seperti yang mas bilang tadi
  • P: Saya tetap ikut bayar kok, coba saya matikan Data Seluler, kemudian sampean telpon saya pakai WA, nyambung gak
  • C: Dia telpon saya pakai WA, dan ternyata tidak bisa tersambung.
Kesimpulannya adalah Telpon lewat WA tidak bebas Roaming, alias yang ditelpon ikut bayar, bukan hanya lewat WA saja, lewat beberapa aplikasi jejaring sosial lain juga bayar (Telegram, Facebook Messenger, Google Hangout, dll.)

Ini ceritaku, mana ceritamu?

Mempercepat Proses Build di Travis CI

Seperti yang sudah saya tulis sebelumnya, linhub telah menggunakan CI dengan memanfaatkan layanan dari Travis-CI. Ketika pertama kali menggunakan layanan ini proses build untuk berkas statis terasa begitu lama, dimana memerlukan waktu sekitar 2 menit. Dengan 2 menit kita bisa melakukan hal-hal lain daripada hanya duduk bengong menunggu hasil build.

Caching Travis

Untuk mencoba mengurangi waktu ini, saya melakukan metode caching pada berkas-berkas yang sering digunakan

Caching pada direktori _site

Seperti yang kita ketahui, jekyll menggenerate berkasnya pada direktori _site, untuk mempercepat proses generate maka saya melakukan caching pada direktori ini dengan menambah baris berikut pada .travis.yml

cache:
    - directories:
        - _site

Selain itu saya juga menambahkan parameter incremental: true pada _config.yml, hal ini agar jekyll menggenerate berkas yang memang ada perubahan saja.

Caching pada direktori .rvm dan .nvm

Ketika melakukan perintah rvm install dan npm install memerlukan waktu sekitar 14 detik untuk masing-masing perintah

rvm

nvm

Karena itu saya menambahkan baris

cache:
    - directories:
        - _site
        - $HOME/.rvm
        - $HOME/.nvm

Hal ini cukup membantu mengurangi waktu yang diperlukan untuk mengunduh paket-paket yang diperlukan.

Menggunakan Opsi sudo: false

Ketika menggunakan opsi sudo: false pada .travis.yml maka akan memerintahkan travis untuk melakukan build dengan lingkungan container-based hal ini cukup mempercepat proses build sekitar 19 - 46 detik.

Setelah melakukan proses diatas maka berikut adalah waktu untuk proses build yang diperlukan

Final Travis

Ah Elaaah .. ga berasa juga bedanya ….

Buku Inkscape Versi Cetak Tidak Tersedia

Sejak saya meluncurkan Buku Inkscape versi Digital secara Gratis, hingga hari ini saya menerima banyak pesan, baik lewat Surel, Japri, maupun SMS/WA, yang isinya kurang lebih menanyakan harga buku tersebut versi cetaknya.

Ini yang menurut saya agak aneh, dulu waktu masih dijual tidak pada mau pesan atau beli, eh begitu saya berikan secara gratis malah pada mau beli, terus selama dua tahun ini pada ngapain?
Ada sih beberapa orang ingin membeli buku dengan alasan sebagai bentuk penghargaan kepada penulis buku tsb agar semangat menulis buku lagi.

Untuk memberi penghargaan kan tidak hanya berupa uang saja kalau ada yang mau kasih juga mau sih atau membeli buku tersebut, sudah mau membaca dan menyebarkan buku tersebut dalam versi digital juga suatu bentuk penghargaan kok


Maka melalui postingan ini, penulis umumkan bahwa; "mulai hari ini Buku Desain Grafis dengan Inkscape versi cetak sudah tidak dijual lagi".


Sebenarnaya masih ada sisa beberapa eksemplar buku, tapi saya sudah berniat tidak untuk menjualnya, namun akan saya bagikan secara gratis pada event atau acara-acara yang berhubungan dengan Open Source.

Demikian Pengumuman mengenai Buku Desain Grafis dengan Inkscape yang saya tulis
Terima kasih

Scanning for malware with Linux Malware Detect (LMD)

Pekerjaan sebagai web developer khususnya di PHP, tak jarang menemukan situs/web pelanggan yang terserang backdoors php, darkmailers dan banyak file berbahaya lainnya. Untuk memulihkan situs yang ‘sakit’ saya sering menggunakan Linux Malware Detect (LMD) atau sering disebut maldet. Kebanyakan situs/web pelanggan di hosting pada shared hosting (cpanel), biasanya saya lakukan pemulihan web yang ‘sakit’ di mesin lokal (laptop) karena instalasi dan penggunaan maldet membutuhkan akses root.

Cekidot, langsung instal aja.

$ sudo su
# cd /usr/local/src/
# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz && tar -xzvf maldetect-current.tar.gz
# cd maldetect-*
# chmod +x install.sh
# ./install.sh

Sampai sini maldet telah terpasang pada mesin. Penggunaanya cukup mudah.
Pertama kita perbaharui maldet dan daftar virus

# maldet -d && maldet -u
# maldet -a /var/www/websakit/

atau dijalankan di belakang (background)

# maldet -b --scan-all /var/www/websakit/

melihat semua hasil dan SCANID

# maldet --report list
# maldet --report SCANID

atau melihat semua hasil dari log

# grep "{scan}" /usr/local/maldetect/event_log

karena secara bawaan hasil scan yang terinfeksi tidak dikarantina. untuk mengkarantinanya bisa menggukanan perintah berikut:

# maldet -q SCANID

Biasanya saya jarang langsung mengkarantinakan berkas yang terinfeksi. Tapi dibersihkan dengan cara menyunting berkas tersebut(untuk berkas *.php/*.html) atau mengekspor ulang menggunakan gimp/imagemagick (untuk berkas *.png/*.jpg). Lalu di unggah ulang ke hosting.

 

Salam,

The post Scanning for malware with Linux Malware Detect (LMD) appeared first on Aris Winardi.

What To Do After Move to Firebase Hosting

Akhirnya semalam pindahan linhub untuk menggunakan hosting Firebase telah berhasil, sebelumnya sempat ada masalah pada permalink yang saya gunakan, namun hal ini dapat diselesaikan karena bantuan dari teman bernama Pringgo Radianto yang menyadari bahwa kesalahan ada pada permalink dan bukan routing. Setelah berhasil pindahan dari Github Pages ke Firebase ada beberapa hal yang saya sadari

  1. Layanan Spark hanya menyediakan 1 GB Storage
    Hal ini mengejutkan saya karena batasannya hanya 1 GB, ketika melakukan perintah bundle exec jekyll build ./_site akan menghasilkan berkas sebesar 11 MB. Jika saya menjalankan Challenge ODOA dimana sehari diperlukan satu artikel maka dalam 1 bulan akan meghabiskan storage kurang lebih 300 MB, itu jika tidak ada kesalahan seperti typo atau tulisan yang kurang jelas. Untuk mengatasi ini Firebase memberikan opsi bagi kita untuk menghapus berkas yang sebelumnya kita deploy. Cukup pilih menu di tombol kanan daftar deploy dan pilih Delete, saya hanya menyediakan 3 berkas deployment untuk berjaga-jaga.

    Firebase Delete Deploy

  2. Layanan Travis-CI Menggunakan Zona Waktu Berbeda
    Perihal ini menyebabkan ketika saya melakukan build untuk linhub tidak menampilkan post yang saya buat di zona waktu saya (GMT +9), hal ini dapat diakali dengan menambahkan future: true pada berkas _config.yml. Serta menambah baris berikut pada .travis.yml

     before_script:
         - export TZ=Asia/Jayapura
         - date
    
  3. Firebase tidak mengatur Cache-Control untuk berkas statis secara otomatis
    Seperti yang kita ketahui, sangat penting untuk mengatur resource yang bisa kita cache agar mengurangi waktu ketika user membuka halaman linhub. Untuk itu saya melakukan beberapa pengaturan melalui firebase.json menjadi seperti berikut

     {
     "hosting": {
         "public": "_site",
         "headers": [ {
         "source" : "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
         "headers" : [ {
             "key" : "Access-Control-Allow-Origin",
             "value" : "*"
         } ]
         }, {
         "source" : "**/*.@(jpg|jpeg|gif|png)",
         "headers" : [ {
             "key" : "Cache-Control",
             "value" : "max-age=31536000"
         } ]
         }, {
         "source" : "404.html",
         "headers" : [ {
             "key" : "Cache-Control",
             "value" : "max-age=300"
         } ]
         }, {
         "source" : "**/*.@(css|js|ico)",
         "headers" : [ {
             "key" : "Cache-Control",
             "value" : "max-age=2592000"
         } ]
         } ]
         }
     }
    

Saat ini saya masih belum menemukan bagaimana melakukan pengaturan Connection: keep-alive pada firebase ini, karena hal ini menurunkan peringkat saya pada Think With Google.

Seperti yang sudah saya sampaikan diatas, ketika melakukan migrasi ke Firebase linhub melakukan perubahan permalink hal ini berpengaruh pada komentar teman-teman melalui Disqus. Sepertinya saya akan melakukan mapping terlebih dahulu pada Disqus agar komentar lama dapat dimunculkan kembali.

Mengganti Template Inkscape

Ketika Anda menjalankan atau membuka halaman baru Inkscape maka secara otomatis halaman yang terbuka adalah ukuran A4 dengan orientasi portrait (tegak). Di Inkscape versi 0.48 jenis satuan atau unit yang digunakan secara baku (default) adalah px, sedangkan mula versi 0.92 adalah mm (mulai 0.92 atau 0.91 penulis agak lupa).

Beberapa teman yang baru menggunakan Inkscape versi 0.92 ternyata merasa kikuk dengan masalah ini karena belum terbiasa.

Masalah ini sempat ditanyakan oleh salah seorang anggota group Facebook Inkscape Indonesia, tadinya sih penulis biarkan saja pertanyaan itu menggantung tanpa jawaban, tujuannya adalah memberi kesempatan orang lain untuk menjawabnya, alasannya karena kunci jawabannya sudah ada di Buku Inkscape versi Digital yang penulis bagikan secara gratis, tapi karena sudah lebih dari 7 jam tidak ada yang jawab akhirnya salah seorang admin group memberi jawabannya.


Lain di dunia maya, lain di dunia nyata, beberapa bulan lalu ketika penulis mengisi pelatihan Desain Grafis di salah satu Pabrik (perusahaan) pembuat tas, pertanyaan serupa juga ditanyakan oleh salah seorang peserta, namun pertanyaannya sedikit berbeda yaitu; bagaimana agar ketika membuka halaman baru otomatis satuannya cm?, pertanyaan ini muncul karena mereka (bahkan di Indonesia pada umumnya) lebih sering menggunakan satuan atau ukuran cm daripada satuan lain.

Berikut salah satu solusi yang dapat dilakukan untuk mengatasi masalah di atas:

  • Buka halaman baru Inkscape, panggil jendela Document Properties, ubah satuan pada Display units dan Unit yang tadinya mm menjadi px atau cm (sesuai keinginan).

  • Simpan halaman atau berkas ini di direktori tertentu pada komputer Anda, beri nama default (format svg), tutup halaman Inkscape.
  • Salin berkas yang dibuat tadi ke direktori usr/share/inkscape/templates, timpa (replace) berkas defautl.svg yang sudah ada dengan berkas yang dibuat tadi.


Catatan 
  • Jika Anda menggunakan sistem operasi GNU/Linux maka ketika melakukan salin-tempel berkas ke direktori usr/share/inkscape/templates harus menggunakan mode root atau mengubah hak akses pada direktori tersebut.

Referensi:
  • Buku Desain Grafis dengan Inkscape versi Digital Bab 3 dan 4.



Memindahkan Github Pages ke Firebase

Jadi semalam teman-teman di Pegelinux sedang ramai membicarakan masalah static web. Sebagian besar member menggunakan Github Pages sebagai layanan hostingnya, karena pada artikel Firebase Project Deployment from Github memungkinkan kita untuk melakukan deploy ke Firebase melalui Travis-CI maka pada kesempatan ini kita akan coba memindahkan blog ini ke Firebase.

Kurang lebih cara yang akan kita lakukan sama dengan artikel Firebase Project Deployment from Github, namun ada beberapa perubahan pada .travis.yml.

Penting!!! jekyll menggunakan folder _site ketika melakukan build, gunakan folder tersebut sebagai public directory dari proyek Firebase kita.

Buat berkas .travis.yml dengan isi sebagai berikut

language: node_js
node_js: '7.8.0'

before_install:
- rvm install 2.1
- rvm use 2.1
- . $HOME/.nvm/nvm.sh && nvm install 6.1 && nvm use 6.1
- gem install bundler
- bundle check || bundle install

install:
- npm install -g firebase-tools

before_script:
    - chmod +x ./script/cibuild

script: ./script/cibuild

after_success:
- firebase deploy --token $FIREBASE_TOKEN

branches:
only:
- master

env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true

sudo: false

Selanjutnya buat script untuk melakukan build pada Jekyll, beri nama cibuild dan letakkan pada folder script pada repo anda dengan isi

#!/usr/bin/env bash
set -e # halt script on error

bundle exec jekyll build
bundle exec htmlproofer ./_site --disable-external --assume-extension

Jangan lupa menambahkan html-proofer pada berkas Gemfile dengan

gem "html-proofer"

Ujicoba deploy dengan git push seperti biasa. Setelah berhasil dapat dilanjutkan dengan menghubungkan domain sebelumnya ke google firebase.

Sumber : https://jekyllrb.com/docs/continuous-integration/travis-ci/

Update untuk mencoba hasil pindahan ini silahkan kunjungi https://linhub-io.firebaseapp.com/

Berikutnya saya akan memindahkan layanan CF dan Github Pages full ke Firebase.

Menyamakan Jam pada Dua Sistem Operasi Berbeda (bagian 2)

Postingan ini adalah update (pembaruan) dari postingan terdahulu yang berjudul Menyamakan Jam pada Dua Sistem Operasi Berbeda. Dalam contoh pada postingan tersebut penulis masih menggunakan BlankOn 8 Rote, sedangkan postingan ini penulis menggunakan BlankOn X Tambora.

Systemd
Untuk manajemen sistem, BlankOn Linux versi 9 ke bawah menggunakan SysVinit (SysV init) atau sering disebut sebagai system init, namun mulai  BlankOn X Tambora sudah menggunakan systemd. Penggunaan Systemd pada BlankOn Linux terbaru bertujuan untuk inisialisasi, manajemen dan pelayanan penelusuran sistem dan daemons agar lebih cepat.

Penjelasan mengenai systemd baca halaman wiki: https://en.wikipedia.org/wiki/Systemd

Booting Sistem Operasi
Ketika Komputar baru dinyalakan, maka proses booting dimulai dengan perangkat lunak BIOS (Basic Input / Output System) di motherboard untuk memeriksa dan menginisialisasi perangkat keras, selanjutnya BIOS menjalankan bootloader (Blankon menggunakan GRUB). Bootloader mengakses Master Boot Record (MBR) atau GUID Partition Table (GPT) di media simpan yang terpasang untuk memuat dan memulai kernel Linux.

Halah..... malah ngomongin systemd

Penulis asusmsikan bahwa pembaca sudah membaca dan memahami artikel Cara Menyamakan Jam pada Dua Sistem Operasi Berbeda sehingga tidak kebingungan ketika membaca postingan ini.

Untuk menyamakan Jam pada sistem Operasi yang sudah menggunakan systemd lakukan langkah berikut:

  • Login ke sistem operasi lain
  • Atur jam di sistem operasi lain => Simpan
  • Restart komputer
  • Login ke BlankOn X Tambora
  • Buka Terminal
  • Cek Jam/tanggal dengan perintah : $ timedatectl 
  • Kemudian, generate adjtime, yaitu dengan perintah $ sudo timedatectl set-local-rtc 1 
  • Masukkan sandi Root.
  • Selesai

Demikian postingan singkat Menyamakan Jam pada Dua Sistem Operasi Berbeda (bagian 2) ini, semoga bermanfaat.

Membuat Analisis Gage R&R

Jika pada artikel sebelumnya kita telah berkenalan dengan Gage R&R dan kegunaannya maka kali ini kita akan mencoba membuat analisa Gage R&R dengan menggunakan R. Sebagai contoh kasus, pada sebuah perusahaan baterai Sang Manager ingin melakukan improvement pada lini produksinya. Perusahaan ini menghasilkan tiga tipe baterai. Sebelum melanjutkan proses berikutnya pastikan kamu sudah

  1. Memasang paket SixSigma Jika belum memasang paket SixSigma lakukan dengan perintah install.packages("SixSigma")

  2. Buat data frame sebagai berikut untuk contoh analisa

    Voltmeter Baterai Uji ke-n Voltase
    1 1 1 1.4727
    1 1 2 1.4206
    1 1 3 1.4754
    1 2 1 1.5083
    1 2 2 1.5739
    1 2 3 1.4341
    1 3 1 1.5517
    1 3 2 1.5483
    1 3 3 1.4614
    2 1 1 1.3337
    2 1 2 1.6078
    2 1 3 1.4767
    2 2 1 1.4066
    2 2 2 1.5951
    2 2 3 1.8419
    2 3 1 1.7087
    2 3 2 1.8259
    2 3 3 1.5444

Sintaks dasar untuk membuat analisa Gage R&R pada lingkungan R adalah ss.rr(var, part, appr, data, main, sub) dengan detail

Parameter Deskripsi
var Variasi yang diukur (hasil pengukuran)
part Faktor yang diukur
appr Faktor pengukur (mis. operator, voltmeter)
data Data Frame yang digunakan
main Judul untuk Diagram
sub Subtitle untuk Diagram

Penting! Pastikan kamu sudah memanggil paket yang akan digunakan dengan library(SixSigma)

Untuk membuat diagram analisa, jalankan perintah berikut

> my.rr <- ss.rr(var = voltage, part = battery,
    appr = voltmeter,
    data = batteries,
    main = "Six Sigma Gage R&R Measure",
    sub = "Batteries Project MSA")

Perintah diatas akan menghasilkan keluaran

Complete model (with interaction):

                Df  Sum Sq Mean Sq F value Pr(>F)
battery            2 0.06308 0.03154   3.415  0.227
voltmeter          1 0.04444 0.04444   4.812  0.160
battery:voltmeter  2 0.01847 0.00924   0.584  0.573
Repeatability     12 0.18982 0.01582               
Total             17 0.31582                       

alpha for removing interaction: 0.05 


Reduced model (without interaction):

            Df  Sum Sq Mean Sq F value Pr(>F)
battery        2 0.06308 0.03154   2.120  0.157
voltmeter      1 0.04444 0.04444   2.987  0.106
Repeatability 14 0.20829 0.01488               
Total         17 0.31582                       

Gage R&R

                    VarComp %Contrib
Total Gage R&R    0.018162959    86.74
Repeatability   0.014878111    71.05
Reproducibility 0.003284848    15.69
    voltmeter     0.003284848    15.69
Part-To-Part      0.002777127    13.26
Total Variation   0.020940086   100.00

                    StdDev  StudyVar %StudyVar
Total Gage R&R    0.13477002 0.8086201     93.13
Repeatability   0.12197586 0.7318552     84.29
Reproducibility 0.05731359 0.3438816     39.61
    voltmeter     0.05731359 0.3438816     39.61
Part-To-Part      0.05269846 0.3161907     36.42
Total Variation   0.14470690 0.8682414    100.00

Number of Distinct Categories = 1 

Dan juga diagram seperti berikut

Gage R&R

Diagram diatas menunjukkan beberapa hal yang bisa diamati sebelum mengambil keputusan untuk melakukan improvement, pada artikel selanjutnya saya akan menulis tentang menerjemahkan diagram Gage R&R untuk mengambil keputusan.

BlanKoding Uluwatu di Surabaya

Apa itu BlanKoding? Baca hackathon.

Awal April kemarin, BlanKoding diinisiasi oleh Menejer Rilis di Surabaya, tepatnya di kantor Radnet. Yang hadir antara lain Pak Menejer, Pak Aftian, Pak Ben, Pak Darian dan saya sendiri. Tak lupa pula kami mengunjungi Duduk Sampean, menemui salah satu pengembang BlankOn yang belum pernah saya temui tatap muka, Pak Azis Ws.

BlanKoding ini ngapain aja? Kami mempelajari dan merekontruksi IRGSH, merapikan infra, menerapkan disiplin devops ke proyek BlankOn dan yang terakhir, makan sego boran! Lumayan banyak hal yang telah dicapai dan banyak juga yang saya pelajari di kesempatan ini. Berikut beberapa foto yang diambil oleh teman-teman pengembang.

Terima kasih banyak Radnet dan pak Noor Azam! Terima kasih juga untuk semua partisipan BlanKoding dan pak Azis Ws.

Disponsori oleh :

Continuous Integration on Windows 10

Beberapa hari lalu saya membuat artikel Firebase Project Deployment from Github, pada artikel tersebut kita memanfaatkan layanan dari Travis-CI untuk proses continuous integration pada repo yang berada di Github. Lalu bagaimana jika kita ingin menjalankan Travis-Ci ini secara lokal? Dan perlu diingat bahwa saya masih menggunakan Windows 10.

Karena masih menggunakan Windows 10 dan saya berniat mencoba instalasi Travis-CI secara lokal maka berikut adalah hal yang harus dipersiapkan

  1. Docker
    Docker adalah sebuah platform containerization yang memudahkan pengembang dalam melakukan deployment perangkat lunak. Untuk menjalankan Travis-CI secara lokal saya mengunduh Docker Community Edition.

  2. Quay.IO
    Menggunakan image dari quay.io, terdapat banyak pilihan image dari quay.io di sini saya akan menggunakan bahasa node.js jalankan perintah berikut pada PowerShell
     PS D:\ngalim\blog> docker run -it quay.io/travisci/travis-node-js /bin/bash
    

    PS: image yang akan diunduh cukup besar, jika memakai layanan dengan kuota terbatas pastikan sudah siap secara lahir batin.

    Setelah image Travis-CI berhasil diunduh, silahkan berganti ke user travis dengan

     su - travis
    

    Travis CI

  3. Setelah Docker dan Travis-CI terpasang anda dapat melakukan
    a. Cloning repo dari Github
    Dengan melakukan proses ini maka anda harus secara manual memasang dependencies dan menjalankan perintah build pada Travis-CI.

    b. Membuat berkas .travis.yml
    Berkas ini menginstruksikan untuk melakukan wrap pada proyek kita kemudian memerintahkan Travis-CI untuk mengunduh image docker, kemudian menjalankannya.

Pada kesempatan berikutnya saya akan membahas bagaimana langkah-langkah melakukan build dengan Travis-CI secara lokal.

Klarifikasi untuk Fanspage SMPN 1 Semarang

Tulisan ini saya buat sebagai klarifikasi pada salah satu postingan di Fanspage SMPN 1 Semarang, dengan adanya klarifikasi ini semoga tidak terjadi salah paham lagi oleh pembacanya.

Hari Rabu tanggal 16 Maret 2016 adalah jatah saya ngajar eskul Desain Grafis dengan Inkscape, hari itu adalah pertemuan kedua saya ngajar eskul di sekolah tersebut, adapun ruangan yang digunakan adalah Lab. Biologi lantai 2.
Seperti pada pertemuan sebelumnya, eskul dimulai jam 14.00 WIB dan berakhir pukul 16.00. Adapun materi pada pertemuan kali ini adalah menggambar Landscape dan sekilas mempelajari cara desain logo. Materi menggambar landscape dapat Anda baca di artikel Menggambar Pemandangan dengan Inkscape, sedangkan salah satu materi mempelajari logo dapat Anda lihat pada video di Youtube dengan judul Create tile Clones.

Di bawah ini adalah gambar postingan di di Fanspage SMPN 1 Semarang

Kemudian ada yang komentar begini "Pake windows tu masian", lebih jelasnya dapat Anda lihat pada gambar di bawah ini

Berikut kronologi sebenarnya yang terjadi
  • Pukul 14.07 WIB eskul dimulai dengan pembacaan doa sebelum acara dimulai, siswa yang resmi ikut eskul adalah 5 (lima) siswa/i, seharusnya sih 6 (enam) siswa/i, tapi yang satu siswa tidak datang. 2 Siswa menggunakan komputer desktop, sedangkan 3 siswa/siswi menggunakan Laptop. Komputer Desktop terinstall Windows dan Ubuntu (dualboot). 
  • Ketika pelajaran desain, 2 siswa yang menggunakan komputer desktop login dengan Ubuntu, sedangakn 3 siswa/i lainnya menggunakan windows di laptop masing-masing.
  • Sekitar 30 menit pelajaran desain berjalan, tiba-tiba listrik dari PLN padam sehingga siswa yang menggunakan komputer desktop terpaksa tidak dapat mengikuti pelajaran desain.
  • Sekitar 10 menit listrik nyala lagi, siswa yang menggunakan komputer desktop menyalakan komputer, karena si siswa belum terbiasa menggunakan Ubuntu maka pas pemilihan sistem operasi ia malah pilih  login ke Windows (sudah kebiasaan).  kemudian acara eskul dapat diikuti kembali oleh semua siswa/i. 
  • Sekitar Jam 15.15 WIB pihak sekolah mengambil gambar untuk dokumentasi, gambar inilah yang akhirnya diposting di Fanspage SMPN 1 Semarang kemudian dishare oleh lebih dari sepuluh orang. 
Di bawah ini adalah beberapa foto yang saya ambil menggunakan kamera HP buatan china yang saya miliki
-
-
-

Demikian klarifikasi yang dapat saya sampaikan, semoga kita tetap semangat untuk memajukan gerakan Open Source di Indonesia terutama dalam bidang Pendidikan.

Mengatasi Virus di Facebook dengan cara Blokir Teman

Sudah beberapa hari ini ketika saya membuka Facebook menjadi agak jengkel, masalahnya adalah; ada teman yang selalu ngirim komentar di hampir semua status yang saya tulis secara otomatis dengan isi yang sama.

Bagaimana tidak jengkel, hampir setiap beberapa detik sekali muncul notifikasi jika ada yang komentar di status yang saya tulis, hal ini selain mengganggu pekerjaan sampingan saya menulis, juga membuat baterai HP buatan china milik saya cepat habis.

Analisa sederhana saya sebagai pengguna smartphone yang pintaran alatnya dibandingkan saya, akun teman saya yang secara otomatis mengirim komentar tersebut sudah terkena virus atau malware karena terlalu penasaran dan ingin mengintip hal-hal yang sangat indah.

Saking jengkelnya, saya sudah berniat untuk memutus pertemanan dengan teman-teman saya yang telah kena virus atau malware kurang ajar sekurang ajar taman-teman saya tersebut. Namun hal ini akhirnya saya urungkan, untuk sementara saya pilih opsi melakukan pemblokiran saja.
-
Berikut cara blokir teman seperti yang saya lakukan:

  • Arahkan kursor ke segitiga kecil pada pojok kiri atas klik Setting

  • Pada jendela pengaturan yang tampil, klik Blocking, kemudian ketik nama teman yang akan diblokir pada kotak Block users, klik tombol Block untuk menyelesaikan proses pemblokiran teman.

Cara ini menurut saya lebih manusiawi daripada memutus perteman, jadi jika akun teman kita sudah normal kembali, kita dapat membuka blokir tersebut.
Eh, tadi pas saya ingin blokir salah seorang teman ternyata ada teman saya yang sudah hampir dua tahun saya blokir, kalau tidak salah ingat sih, teman saya tersebut saya blokir ketika sedang ramai-ramainya penyebaran malware dari vietnam dulu.

Sudah itu saja yang dapat saya tulis di blog pada hari ini, semoga bermanfaat untuk yang membacanya. 






Things To Do When Working Behind Corporate Proxy

Sebenarnya ketika bekerja di kantor, saya menggunakan Windows 7 sebagai sistem operasi wajib (belum dapat giliran upgrade ke Windows 10). Selain itu ketika bekerja saya harus menggunakan proxy untuk akses internet, agar dapat bekerja dengan baik berikut adalah hal yang saya lakukan

Setup Proxy Visual Studio Code

Untuk mengubah proxy pada visual studio code lakukan dengan mengubah berkas settings.json yang dapat diakses melalui File -> Preferences -> Settings dan tambahkan baris berikut

{
    "http.proxy": "http://username:password@host:port"
}

Selain mengubah proxy saya juga mengubah shell default dari cmd.exe ke Windows Powershell v3 dengan mengubah settings.json menjadi

{
    "http.proxy": "http://username:password@host:port",
    "terminal.integrated.shell.windows": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
}

Dengan ini maka ketika menekan CTRL + Backtick maka menjadikan powershell sebagai default shell kita

Powershell

Setup Proxy untuk Node.js npm

Selain Visual Studio Code saya juga menggunakan Node.js dan paket managernya npm, untuk menggunakan npm agar dapat bekerja dengan proxy ketik perintah berikut

npm config set proxy http://username:password@host:port
npm config set https-proxy https://username:password@host:port

npm akan membuat berkas .npmrc pada C:\Users\username berisi konfigurasi tersebut.

Setup Proxy untuk Python pip

Selain Node.js saya juga menggunakan python dan paket manager pip, mengatur pip untuk dapat bekerja dengan proxy dapat dilakukan dengan membuat environment variables dengan cara

set http_proxy=http://username:password@host:port
set https_proxy=https://username:password@host:port

Atau dengan cara manual dengan menambah environment variables pada Computer -> Properties -> Advanced system settings -> Environment Variables....

Setup Proxy untuk git

Yang paling penting untuk melakukan push dengan git saya mengubah berkas .gitconfig pada C:\Users\username dengan menambah baris

[http]
    proxy = http://username:password@host:port

[https]
    proxy = https://username:password@host:port

Dengan begitu saya tetap bisa bekerja meskipun sedang berada dibalik proxy. Namun dari semua cara diatas, hal paling mudah adalah dengan membuat sebuah virtual machine Linux yang di redirect ke proxy yang disediakan.

Molecule, Automate Testing Tool untuk Ansible Roles

logoMolecule

Dulu jaman masih cuma ngetik di chef, adalah tool namanya kitchen-vagrant yang biasa dipakai untuk ujicoba resep di chef (cookbook). Ansible role yang isinya mirip-mirip buku resep (cookbook) di chef juga butuh tool ujicoba. Ditemukanlah repo molecule di github beserta dokumentasinya!

Mencoba menjalankan role ansible dalam virtualbox, kemudian menguji hasil dari role. Untuk tools uji bawaan molecule adalah Testinfra. Memuaskan.

Molecule sendiri ditulis menggunakan python. Namun dalam pemakaian saya saat ini, saya menggunakan serverspec sebagai tools uji yang notabenenya serverspec ditulis dengan ruby. Dyar.

Untuk tipe OS yang saya gunakan adalah debian jessie64 atau xenial64. OS bawaan dari molecule adalah trusty64.

Mari kita coba!

  1. Dependensi.
    • virtualbox
    • vagrant
    • python pip
    • ansible
    • serverspec (verifier)
  2. Install molecule dep
    $ apt-get install gcc python-pip python-vagrant libssl-dev libffi-dev
    
  3. Install molecule
    $ pip install ansible docker-py molecule
    
  4. Buat role molecule. Perintah ini menghasilkan skeleton ansible role yang rapi sekali. Tinggal menyocokkan aja dengan role yang sudah pernah dibuat
    $ molecule init --role nginx --verifier serverspec
    
  5. Ganti tipe os yang digunakan.
    $ cd nginx
    $ bundle install
    

    Isikan kode dibawah ini pada file molecule.yml

    platforms:
        - name: ubuntu/xenial64
          box: ubuntu/xenial64
          box_url: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/16.04/providers/virtualbox.box
    
  6. Tulis task yang ingin dikerjakan. Isi dengan kode berikut, untuk memasang nginx.
    ---
    # tasks file for nginx
      - name: install apt-transport-https
        apt: name=apt-transport-https update_cache=yes
        become: yes
    
      - name: install packages
        apt: name={{ item }} update_cache=yes force=yes
        with_items:
          - nginx
          - curl
        become: yes
        notify:
          - restart nginx
    
    
  7. Tambahkan handler.
    ---
    # handlers file for nginx
      - name: restart nginx
        service: name=nginx state=restarted
        become: yes
    
  8. Tambahkan unit testing.
    require 'spec_helper'
    
    describe file('/etc/hosts') do
      it { should be_file }
      it { should be_owned_by 'root' }
      it { should be_grouped_into 'root' }
    end
    
    describe service('nginx') do
      it { should be_running }
    end
    
    describe port(80) do
      it { should be_listening }
    end
    
    
  9. Lakukan ujicoba molecule. Sejatinya perintah molecule sangat-sangat mirip dengan kichen-vargrant. Lakukan perintah ini secara berurutan.
    $ molecule --help
    $ molecule status
    $ molecule converge
    $ molecule verifier
    $ molecule test
    $ molecule destroy
    
  10. Melakukan debug.
    Saat melakukan converge, kadang mesin ndak jalan mulus, dan kita butuh login ke mesin. Caranya dengan bantuian ssh. karena terbiasa dengan vagran ssh, perintahnya sedikit berbeda kali ini.

    $ ssh ubuntu@127.0.0.1 -p 2222 -i $(pwd)/nginx/.vagrant/machines/nginx/virtualbox/private_key
    
  11. Implementasi.
    Setelah role ditesting dengan lancar, saatnya memasang rule di mesin produksi. Caranya cukup mudah. Buat file hosts yang isinya ip address server, dan pastikan sudah bisa ssh kesana dengan kunci publik

    [server]
    192.168.1.80
    

    Jalankan ansible playbook dari dir di luar nginx (dir molecule-ansible)

    $ ansible-playbook nginx/playbook.yml -i nginx/hosts --private-key ~/.ssh/id_rsa --user ubuntu
    

Udah, itu aja, semoga pada mendapat pencerahan. Contoh role diatas, bisa diakses di repo github saya. Selamat mencoba

Salam tabik untuk kontributor molecule. Kalian keren!

Estu~


Modem Sierra Gobi 3000 untuk Thinkpad T430

Beberapa hari lalu saya mendapat modem Sierra Gobi 3000 untuk dipasang pada laptop kesayangan bentuknya kurang lebih seperti ini

Modem Gobi

Dengan begitu semangat saya langsung coba pasang, dan ketika boot ke Ubuntu 16.04 jreng .. jreng .. . Modem sih kedetek tapi ya gitu sinyalnya kok CDMA, baca-baca dan juga curhat ama anak-anak Pegelinux katanya musti diaktivasi pakai Windows. Kan Thinkpad ini ga ada Windowsnya gimana dong …

Saya tidak menyerah begitu saja, saya mencoba tutorial di internet mengenai bagaimana memasang firmware untuk GSM pada modem ini menggunakan gobi_loader dan juga instalasi driver gobinet dan gobiserial. Walhasil belum mencapai kata sukses, bahkan sekarang instalasi Ubuntu saya menjadi error. Dengan sedikit putus asa akhirya saya memasang Windows 10 sebagai OS kedua pada Thinkpad ini.

Setelah memasang driver yang diperlukan untuk Sierra Gobi 3000, alangkah terkedjoetnya saya bahwa Windows lebih mudah dalam mengubah status CDMA ke GSM. Bahkan di Windows 10 juga ada aplikasi untuk membaca sms yang masuk tanpa harus menambah program.

Messaging App

Hufft …

Saya berpikir sudah dapat langsung digunakan untuk dial-up menggunakan Windows 10 ini, tetapi oh tetapi masih belum bisa juga untuk digunakan koneksi dial-upnya. Untuk beberapa saat kedepan mungkin saya masih akan menggunakan Windows 10 untuk trial error modem ini. Dan instalasi Ubuntu saya juga masih bingung mau diapakan ..

Firebase Project Deployment from Github

Jadi beberapa saat yang lalu lagi maen-maen sama anak-anak Pegelinux, karena dapat domain gratisan dari Freenom dengan akhiran .ga, .ml, dan .tk. Yang paling asik adalah domain dengan akhiran .ga, karena bisa dibuat bermacam-macam seperti domain pernah.ditinggalpaslagisayangsayangnya.ga yang di redirect ke domain teman. Dari sinilah muncul ide bagaimana jika saya membuat sebuah halaman statis yang di host di Google Firebase dengan domain .ga. Saya pun mendaftarkan beberapa domain .ga untuk persiapan nantinya.

Untuk proyek ini saya ingin repo berada di github, namun deployment ke Google Firebase. Karena keperluan tersebut saya menggunakan Travis-CI untuk melakukan deployment ke Google Firebase. Langkah yang saya lakukan adalah

Membuat repo project di github dan Firebase project

Karena ini adalah project baru maka saya membuat sebuah repo baru dengan nama baca.situsali.ga pada akun github saya, project keseluruhan dapat dilihat di sini. Selain membuat repo saya juga membuat firebase project melalui firebase console.

Clone repo ke lokal dan melakukan firebase init untuk inisialisasi project Firebase

Untuk mengisi project dengan berkas yang kita perlukan saya melakukan clone pada repo dengan perintah

C:\project> git clone https://github.com/nsiregar/baca.situsali.ga.git

Kemudian melakukan firebase init pada direktori proyek

C:\project> cd .\baca.situsali.ga\
C:\project\baca.situsali.ga> firebase init

Ketika inisiasi maka akan ditanyakan proyek akan disambungkan dengan firebase project yang mana, pilih yang kita buat pada langkah awal. Pada project ini saya hanya membuat dua buah berkas index.html dan juga style.css, kedua berkas ini berada pada folder public. Lakukan commit setelah inisialisasi proyek.

Menambahkan .travis.yml pada repo

Untuk dapat melakukan deployment dari Github ke Google Firebase, hal yang perlu kita ketahui adalah

  1. Firebase menggunakan perintah firebase deploy untuk deployment langsung dari komputer yang kita gunakan, namun perintah firebase deploy memiliki argument --token. Dengan argument ini maka kita bisa menjalankan deploy dengan perintah

    firebase deploy --token $FIREBASE_TOKEN

  2. Bagaimana mendapatkan token untuk Google Firebase? Untuk mendapatkan token dapat dilakukan dengan perintah firebase login:ci. Perintah ini akan menghasilkan token firebase yang kita perlukan

  3. Integrasikan project Github kita dengan Travis-CI

Setelah mengetahui tiga hal tersebut maka kita bisa membuat Environment Variable pada halaman Settings di Travis-CI repo yang kita integrasikan. Buat variable dengan nama FIREBASE_TOKEN dan isi dengan token yang digenerate oleh perintah firebase login:ci, penting Jangan nyalakan Display value in build log untuk keamanan.

Environment Variables

Setelah mendefinisikan environment variables kita akan membuat berkas .travis.yml pada repo kita, berikut adalah contoh .travis.yml yang saya gunakan.

language: node_js
node_js:
- "7.8.0"
script:
- echo "Deploying Process"
install:
- npm install -g firebase-tools
after_success:
- firebase deploy --token $FIREBASE_TOKEN

Yang perlu diperhatikan adalah after_success, ini adalah dimana kita akan melakukan deploy dari github ke Google Firebase setelah semua command sebelumnya berhasil dijalankan. Lakukan commit setelah membuat berkas .travis.yml.

Test Deployment

Untuk melakukan test deployment silahkan lakukan perintah

C:\project\baca.situsali.ga> git push

Setelah selesai maka pada Job Log pada Travis CI akan menampilkan

Firebase Deploy

Dengan begitu Google Firebase sudah menjalankan hosting untuk static files kita.

Menambahkan Custom Domain

Agar dapat dibuka melalui baca.situsali.ga, maka perlu menambahkan custom domain pada proyek firebase kita. Untuk lebih lengkap tentang menambah custom domain ini silahkan baca artikel berikut. Kelebihan dari Google Firebase adalah kita mendapat SSL Free ketika menggunakan custom domain.

Buat bang Ali, terimakasih sudah diberi kesempatan untuk domain https://baca.situsali.ga/.

Override ISP DNS Windows 10

Dari semalam saya masih bingung bagaimana memperbaiki instalasi Ubuntu saya yang rusak, untungnya tidak ada data penting hanya sistem. Saya juga telah mengunduh .iso terbaru dari Ubuntu 16.04.2 sebagai bahan jika memang instalasinya tidak bisa sembuh. Jadi sementara saya masih menggunakan Windows 10 sebagai sistem operasi utama, namun ada yang mengganjal hati saya ketika menggunakan sistem operasi ini. Yang mengganjal hati pertama kali adalah masalah DNS Hijacking yang dilakukan operator seluler yang saya gunakan, Telkomsel, dimana hal tersebut mengakibatkan saya tidak bisa membaca sumber berita dari situs kesayangan Reddit, membuka gambar dari Imgur, dan lain sebagainya.

Hal pertama yang saya lakukan untuk masalah ini adalah dengan mencoba trik seperti artikel Menggunakan OpenDNS di Ubuntu 16.04, dengan mengubah setting DNS ke OpenDNS pada IPv4 Properties namun cara ini tidak membuahkan hasil seperti yang diinginkan. Windows 10 malah tidak bisa melakukan resolve hostname, meskipun sudah melakukan perintah ipconfig /flushdns dan ipconfig /registerdns.

IPv4 Properties

Akhirnya saya mencari informasi mengenai bagaimana DNS Resolver bekerja pada Windows 10, namun sebelum membaca lebih jauh saya teringat kembali artikel dari Pak Haji Ali mengenai DNSCrypt di sini. Daripada ribet tentang bagaimana DNS Resolver bekerja pada Windows 10, saya memutuskan untuk memasang Simple DNSCrypt. SimpleDNSCrypt sendiri merupakan tool yang mempermudah kita untuk mengkonfigurasi dnscrypt-proxy pada lingkungan Windows. Setelah melakukan instalasi berikut adalah setting yang saya gunakan

Simple DNSCrypt

Saya menggunakan resolver basis Indonesia dengan harapan untuk kecepatan resolving yang lebih baik. Kemudian untuk memastikan saya tidak lagi mengalami DNS hijacking dari ISP, saya melakukan test pada DNS Leak Test dan berikut hasilnya

DNS Leak Test

Yey akhirnya situs kesayangan bisa diakses kembali …

BTW setelah melakukan instalasi Simple DNSCrypt kita tidak perlu mengutak-atik IPv4 Properties, semua otomatis.

Memperbaiki UFD yang Tidak Dapat Di Format Ulang

Beberapa saat yang lalu laptop kesayangan saya sedang mengalami masalah, sehingga saya melakukan pemasangan Windows 10 pada Thinkpad yang saya gunakan. Dengan berbekal Windows 10 saya mulai mengunduh beberapa berkas .iso linux untuk dapat memperbaiki laptop. Ketika menggunakan UnetBootin untuk membuat media instalasi dengan USB terjadi kegagalan, hal ini menyebabkan UFD yang saya gunakan tidak dapat terbaca pada sistem operasi Windows 10.

Akhirnya saya membuka Computer Management -> Storage -> Disk Management untuk melakukan format UFD yang saya gunakan, namun ketika melakukan aksi untuk

  1. Mengubah Drive Letter and Path

  2. Melakukan Format

Windows menampilkan pesan The system cannot find the file specified. Hal ini cukup merisaukan saya, agar mempercepat proses saya mencoba melakukan format dengan HP Formatter Utility. Namun hal ini juga tidak dapat memberikan hasil yang diharapkan.

Setelah beberapa saat dibingungkan oleh masalah ini saya teringat akan utility bawaan dari Windows sendiri yaitu DISKPART. DISKPART sendiri merupakan utility dari Windows untuk operasi berkaitan dengan disk yang kita gunakan, bisa dibilang Disk Management versi console. Untuk membuka DISKPART dapat dilakukan dengan

C:\Users\ngalim>diskpart

Perintah diatas akan menampilkan dialog konfirmasi untuk penggunaan DISKPART pada level administrator, program ini memerlukan akses administrator untuk dapat berjalan. Kemudian tampilkan daftar disk yang ada pada sistem anda dengan

DISKPART> LIST DISK

Disk ###  Status         Size     Free     Dyn  Gpt
--------  -------------  -------  -------  ---  ---
Disk 0    Online           53 GB      0 B
Disk 1    Online           14 GB      0 B
Disk 2    Online           31 GB      0 B    

Karena UFD yang bermasalah adalah Disk 1 maka saya akan memilihnya dengan

DISKPART> SELECT DISK 1

Disk 1 is now the selected disk.

Setelah itu ketik perintah

DISKPART> CLEAN

Perintah tersebut akan menghapus semua partisi dan volume dari disk yang kita pilih. Setelah itu buka kembali Computer Management -> Storage -> Disk Management, maka UFD yang dimaksud akan ditampilkan sebagai EMPTY. Dengan ini kita dapat melakukan operasi untuk membuat partisi dan format ulang UFD.

Btw saya masih bimbang untuk menggunakan Debian atau Ubuntu … Ah Sudahlah …

Menggunakan Fitur Panggilan untuk Telegram pada IOS

Jadi semalam dapat kabar resmi bila Telegram sudah bisa digunakan untuk melakukan panggilan, segera setelah melakukan update di AppStore saya ingin mencoba. Namun ternyata tampilannya sekilas tidak ada perbedaan dari sebelumnya

ios telegram

Sebenarnya fitur ini dapat digunakan dengan membuka kontak, dan memilih tombol call.

ios telegram

Namun saya ingin sebuah pintasan yang memudahkan sebagaimana pada tampilan aplikasi sejenis lainnya. Fitur ini sudah disediakan di Telegram iOS, untuk mengaktifkannya lakukan langkah berikut

Masuk ke menu Settings -> Recent Calls maka akan menampilkan menu berikut

ios telegram

Aktifkan Show Calls Tab untuk menampilkan tab panggilan pada menu utama

ios telegram

Sekarang akan muncul tab Calls pada menu utama seperti tampilan berikut

ios telegram

Selamat menggunakan fitur call pada Telegram …

Cara Menggambar Rantai dengan Inkscape

Tanggal 29 Maret 2017 adalah pertemuan ke sekian puluh pada acara Ekstra Kurikuler Desain Grafis di SMPN 1 Semarang, materi yang penulis ajarkan adalah cara menggambar Rantai dengan Inkscape.


Dikarenakan ada beberapa teman yang menanyakan materi tersebut, maka dengan senang hati penulis buat tutorialnya di blog ini, agar blog ini terlihat kalau masih terurus. 

Buka Inkscape sesuai sistem operasi yang Anda gunakan, atur tampilan halaman dengan perbandingan 1:1 atau Zoom 100%

  
Atur unit Inkscape yang Anda gunakan menjadi cm, pengaturan dapat dilakukan melalui Document Properties


Buat object persegi panjang menggunakan Rectangles Tool, lakukan pengaturan pada Tool control sebagai berikut W: 2,800 - H: 1,800 Rx: 0,800 Ry: 0,800


Hapus Fill pada object yang dibuat, aktifkan Stroke, beri warna stroke tersebut dengan warna tertentu (misal: biru)

Atur ukuran stroke menjadi 0,200 cm, pengaturan object dapat dilakukan melalui jendela Fill and Stroke
Geser pusat object ke arah tertentu (contoh: ke bawah), caranya klik object, kemudian klik sekali lagi hingga muncul tanda + (tambah) di tengah-tengan persegi panjang, seret tanda tersebut ke arah tertentu.

Perbanyak object persegi panjang menjadi jumlah tertentu, sebagai contoh menggunakan fitur Create Tiled Clones sehingga dapat memperbanyak object dengan jumlah tertentu sesuai keinginan, caranya klik Edit => Clone => Create Tiled Clones...

Klik tombol Reset pada jendela Create Tiled Clones jika Anda pernah menggunkan fitur ini, isi dengan nilai 12 x 1 pada kotak Rows, columns

Pindah ke tab Shift, kemudian beri tanda centang pada kotak Exclude tile

Pindah ke tab Rotate, ubah nilai pada kotak Angle - Per row menjadi 30.00 (30 derajat), dalam hal ini akan membuat object membentuk lingkaran yang terdiri dari 12 object

Klik tombol Create untuk melakukan Clone, geser ke arah tertentu salah satu object yang menumpuk di object asli, kemudian hapus object tersebut.

Matikan link object hasil clone dengan object asli, caranya; seleksi semua object, kemudian klik Edit => Clone => Unlink Clone
 .
Gabungkan semua object menjadi satu, cara klik Path => Combine.


Duplicate object (tekan Ctrl+D) yang sudah digabungkan tadi, kemudian geser object hasil duplicate ke lokasi lain.


Pilih object asli, klik Path => Path Effects.... atau tekan Shift+Ctrl+7

Pada jendela yang tampil, klik tombol tambah (+), pilih Knot => klik Add, (dalam contoh menggunakan Inkscape 0.92.1, jika Anda masih menggunakan Inkscape versi 0.48 ke bawah caranya sedikit berbeda)

Sekarang object yang Anda buat pada setiap pertemuan yang saling tumpang tindih (overlap) sudah terpotong atau berlubang, namun belum beraturan atau sesuai keinginan, untuk mengaturnya dapat dilakuan dengan  mengubah nilai pada kotak Fixed width (dalam contoh menjadi 0,30)
Jarak lubang pada pertemuan antar object sudah sesuai, namun masih kurang ideal, untuk itu perlu diatur lebih lanjut, berikut caranya; panggil jendela Fill and Stroke (Shift+Ctrl+F), klik Round cap.


Sampai langkah ini sebenarnya pembuatan gambar rantai sudah jadi, namun masih kurang realistik, untuk itu perlu disempurnakan lagi, berikut langkah lanjutannya:
Ubah object menjadi path, caranya klik Path => Object to Path atau tekan Shift+Ctrl+C.

Ubah stroke pada object menjadi path, carnya klik Path => Stroke to Path atau tekan Shift+Alt+C

Mungkin dari tadi ada yang bertanya-tanya apa fungsinya object hasil dupicate tadi sebenarnya tidak ada gunanya sih, berikut fungsi dari object hasil duplicate tersebut; pilih object hasil duplicate, klik Path => Stroke to Path


Langkah selanjutnya adalah memperbesar ukuran stroke (garis) caranya klik Path => Dynamic Offset


Ubah ukuran object, caranya klik ikon Node Tool pada Toolbox, kemudian seret titik node pada object ke atas


Ubah warna Fill menjadi warna yang lebih gelap dari warna object asli (contoh: Biru tua atau Navy)


Letakkan object Duplicate persis di atas Object asli, gunakan Align and Distribute untuk mempermudah prosesnya.
Pindahkan lokasi object Duplicate ke bawah object asli, caranya klik ikon lower selection to bottom atau tekan tombol End pada keyboard



Seleksi kedua object, klik Path => Difference.

Maka hasilnya seperti gambar di bawah ini

Akhirnya proses menggambar rantai dengan Inkscape selesai juga, mudah bukan?.
Mudah sih mudah, cuma penulis yang tangannya pegal-pegal ngetik dan buat tangkapan layar, Anda puas, Penulis lemas.
Anda juga dapat menggambar bentuk lain dengan cara seperti di atas, misalnya gambar lingkaran yang digambar oleh salah seorang siswi seperti di bawah ini

Referensi:
-
-

Mengatasi Galat pada Pemasangan Paket Secara Global via NPM

Ketika sedang mencoba Firebase diperlukan pemasangan paket firebase-tools secara global. Namun ketika saya menjalankan perintah

$ npm install -g firebase-tools

Terjadi galat dikarenakan isu permissions, hal ini membingungkan saya karena selain saya tidak ingin menggunakan akses sudo untuk instalasi tersebut seharusnya pemasangan tersebut bisa berjalan dengan normal. Karena galat tersebut artinya npm tidak memiliki akses untuk melakukan tulis pada direktori yang digunakan untuk menyimpan paket secara global. Untuk mengetahui dimana paket tersebut disimpan gunakan perintah

$ npm config get prefix

Pada Ubuntu 16.04 saya menampilkan hasil sebagai berikut

NPM Direktori

Dikarenakan saya tidak ingin menambah kerumitan, maka cara yang bisa dilakukan adalah dengan mengubah direktori pemasangan paket ke direktori lain. Hal ini dapat dilakukan dengan

  1. Membuat direktori untuk pemasangan global
    $ mkdir ~/.npm-global
    
  2. Mengkonfigurasi npm pada path direktori baru
    $ npm config set prefix '~/.npm-global'
    
  3. Mengubah berkas ~/.profile dan menambah baris berikut
    export PATH=~/.npm-global/bin:$PATH
    
  4. Update variabel sistem
    $ source ~/.profile
    

Untuk menguji maka lakukan pemasangan paket firebase-tools dengan cara

$ npm install -g firebase-tools

Selamat mencoba …

Update 30 Maret 2017

Artikel alternatif : https://nsetyo.id/post/npm-install-user-dir/

Getting Help on Terminal

Sering kali ketika sedang menghadapi persoalan pada program yang berjalan diatas terminal kita akan mencari bantuan dengan bertanya kepada teman-teman atau bertanya pada forum di internet. Namun ada beberapa cara yang cukup mudah dilakukan ketika kita memerlukan bantuan shell linux.

Menggunakan man

Dengan menggunakan man maka akan memberikan bantuan berupa dokumentasi, konfigurasi, dan lainnya untuk program yang kita jalankan. Perintah ini cukup membantu ketika kita sedang tidak terhubung dengan internet.

Shutdown man

Keluaran dari man cukup mirip dengan less, dan yang lebih mengedjoetkan kita bisa menggunakan perintah $ man man untuk mengetahui lebih detail tentang man.

Menggunakan apropos

Namanya manusia selalu diliputi oleh penyakit lupa, ketika kita sedang lupa nama program untuk keperluan tertentu kita dapat menggunakan perintah apropos. Sebagai contoh jika anda lupa perintah yang berkaitan dengan jaringan, anda dapat mengetik perintah $ apropos network.

Network apropos

Perintah apropos cukup simple, dimana program tersebut mencari pada hasil man yang sesuai dengan kata pencarian yang diberikan.

Menggunakan Sumber Lain

Ketika berkunjung ke blog teman di Se7enTime saya mendapat informasi mengenai penggunaan DuckDuckGo, selain itu kita bisa bertanya di StackExchange, membaca manual Debian dan Arch.

Memasang OpenGraph Meta pada Jekyll

Bagi yang sering menggunakan aplikasi messaging seperti Telegram, Facebook Messenger, WhatsApp dan sebagainya pasti menyadari ketika membagikan sebuah link maka secara otomatis preview dari link tersebut ditampilkan.

Opengraph

Ketika menggunakan Jekyll dengan Github Pages, laman web kita tidak secara otomatis menampilkan preview tersebut. Hal ini dikarenakan meta untuk OpenGraph belum kita atur. Bentuk umum meta HTML seperti berikut

    <meta name="" content="" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="description" content="deskripsi" />

Untuk menambahkan meta OpenGraph rubah _layouts/default.html dengan menambahkan meta OpenGraph diantara bagian <head> dan </head>, meta ini memiliki beberapa property antara lain:

  • og:title - Judul

  • og:description - Deskripsi dari laman

  • og:type - Tipe konten, bisa berupa video, musik, atau artikel

  • og:image - URL untuk gambar

  • og:url - URL dari laman

Berikut adalah contoh penggunaan OpenGraph pada linhub yang digabungkan dengan Liquid

    {% if page.title %}
      <meta property="og:title" content="linhub [dot] io - {{ page.title }}">
    {% else %}
      <meta property="og:title" content="linhub [dot] io">
    {% endif %}
    {% if page.excerpt %}
      <meta property="og:description" content="{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}">
    {% elsif page.description %}
      <meta property="og:description" content="{{ page.description }}">
    {% else %}
      <meta property="og:description" content="Personal Blog of Ngalim Siregar">
    {% endif %}
    <meta property="og:url" content="{{ page.url | prepend: site.baseurl }}">
    <meta property="og:image" content="{{ site.baseurl }}/img/profile.jpg">
    <meta property="og:type" content="website">

Untuk memeriksa apakah OpenGraph kita sudah tepat, kita bisa menggunakan tool berikut dari Facebook. Untuk infomasi lebih lengkap mengenai Facebook OpenGraph silahkan kunjungi tautan berikut.

Menggunakan Emoji pada Ubuntu 16.04

Pada zaman yang modern ini sudah sangat umum sekali untuk menggunakan emoji sebagai pengganti dari emoticon umumnya, hal ini pula yang mengganggu pikiran saya tentang bagaimana menulis karakter emoji pada Ubuntu 16.04 yang sedang saya gunakan. Setelah menjelajah ke berbagai sumber akhirnya saya menemukan sebuah applet untuk Ubuntu yang dapat dengan mudah memenuhi keinginan hati ini. Applet ini dikembangkan oleh Jorge S. de Lis yang bernama EmojiOne Picker.

Untuk menggunakan EmojiOne Picker ini terdapat tiga cara yaitu:

  • Melakukan Kompilasi - cukup ribet menurut saya

  • Menggunakan Standalone Installer - seharusnya bisa untuk semua distro

  • Menggunakan PPA - ini yang cukup mudah menurut saya

Untuk memasang EmojiOne Picker menggunakan PPA, buka Terminal (CTRL + ALT + T) dan ketik perintah berikut

$ sudo add-apt-repository ppa:ys/emojione-picker && sudo apt update
$ sudo apt install emojione-picker

Lalu jalankan applet dengan mencari EmojiOne pada Unity Dash (lebih mudah menggunakan ALT + F2 lalu ketik emojione-picker). Berikut adalah tampilan EmojiOne Picker pada Ubuntu 16.04 yang saya gunakan

EmojiOne Picker

Jika anda ingin mencoba menggunakan standalone installer, berikut adalah langkah yang harus ditempuh

  1. Clone repo ke direktori lokal anda dengan perintah git clone https://github.com/gentakojima/emojione-picker-ubuntu

  2. Pindah ke direktori tersebut dengan cd emojione-picker-ubuntu dan checkout pada rilis stabil terakhir dengan memeriksa rilis git tag -l. Contoh checkout git checkout v0.1

  3. Jalankan ./install.sh, jika ingin membuangnya jalan ./install.sh kembali

Silahkan mencoba …

Membuat Jenkin Jobs dengan Groovy(5); Post Build Steps

logo-jenkinsIni udah masuk step terakhir. Post Build Steps adalah bagian dimana ketika selesai build jobs, jenkins disuruh ngapain lagi.

Saya biasa mengisi di step ini untuk beberapa kerjaan, diantaranya:

  1. Mengirim notifikasi ke slack
  2. Mengirim surel ke pihak-pihak tertentu
  3. Menyimpan file hasil build (save artefak)
  4. Mengunggah file hasil build ke s3
  5. Memanggil jobs lain saat jobs ini sukses.
  6. Dan masih banyak lagi…

Berikut saya lampirkan contoh potongan kode post build steps:

publishers {
archiveArtifacts {
pattern("Release/*.apk")
onlyIfSuccessful()
}
downstream("${app}/StagingDeploy", 'SUCCESS')
mailer('admin@email.com', false, true)
  slackNotifier {...}
s3BucketPublisher {...}
}

Itu saja dari saya. Gistnya bisa diintip disini. Semoga memberi pencarahan.

Estu~

 


Membuat Jenkin Jobs dengan Groovy(4); Build Steps

logo-jenkinsMari lanjut tahap keempat setelah sebelumnya part 1, membahas pengaturan umum dan part 2 SCM (Source Code Management). Bagian ketiga membahas mengenai build trigger. Bagian selanjutnya adalah Build. Atau kata lainnya, pekerjaan apa yg akan dilakukan oleh Jenkins.

Berikut contoh potongan bagian build dalam Jenkins Jobs:

steps {
  gradle {
    tasks('clean')
  }
  shell('''#!/bin/bash -e
echo "hello world"''')
}

Bagian steps, bagian ini bisa diisi dengan bermacam-macam step yang bisa dikerjakan. Modul yang biasa saya pakai adalah gradle, ant, maven, shell, powershell.

Pada potongan diatas saya menggunakan shell yg ada di GNU/Linux. Sehingga memungkinkan memanggil semua perintah yang bisa dijalankan oleh shell GNU/Linux termasuk memangggil binari app lain; semisal npm, calabash, tar dan lain lain. Silahkan berkreasi.

Bagian penting lainnya adalah penggunaan tanda petik:

  1. Untuk menulis perintah dalam satu baris gunakan petik satu
    shell('shell_command')
  2. Untuk menulis perintah dalam beberapa baris gunakan petik 3 kali
    shell('''ini baris satu
    ini baris dua''')

Mungkin ini saja penjelasan singkat mengenai build steps. Potongan kode diatas dapat diintip pada gist berikut. Sampai ketemu di bagian kelima.

Estu~


Mengenal RSS Feed

Bagi para blogger mungkin sudah tidak asing tentang RSS, sebuah teknologi yang memungkinkan kita untuk berlangganan artikel pada sebuah situs web tertentu. Pada Jekyll untuk menghasilkan sebuah RSS Feed dapat menggunakan dua buah cara yaitu :

  • Menggunakan Plugin Jekyll - jekyll-feed

  • Menggunakan Liquid

Pada kesempatan ini kita akan membahas cara kedua, yaitu menggunakan Liquid. Sebuah RSS Feed sebenarnya adalah sebuah berkas .xml yang memiliki meta data mengenai sebuah situs, yang diikuti dengan konten dari situs tersebut. Umumnya berupa artikel yang diposkan oleh penulis lengkap dengan judul, deskripsi, tanggal terbit dan juga link. Ketika seseorang berlangganan RSS Feed dari sebuah situs maka aggregator mereka akan secara periodik memeriksa dokumen .xml ini untuk item baru.

Untuk membuat RSS Feed menggunakan Liquid, pertama-tama kita perlu membuat berkas rss.xml atau feed.xml pada direktori utama jekyll. Berikut adalah contoh isi rss.xml untuk linhub.io yang berisi :

---
layout: null
title : RSS Feed
---

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
        <title>{{ site.title | xml_escape }}</title>
        <description>{{ site.title | xml_escape }} - {{ site.author.name | xml_escape }}</description>
        <link>{{ site.production_url }}</link>
        <atom:link href="{{ site.production_url }}{{ site.JB.rss_path }}" rel="self" type="application/rss+xml" />
        <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
        <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
        <ttl>60</ttl>

{% for post in site.posts limit:20 %}
        <item>
                <title>{{ post.title | xml_escape }}</title>
                <description>{{ post.content | xml_escape }}</description>
                <link>{{ site.production_url }}{{ post.url | uri_escape }}</link>
                <guid>{{ site.production_url }}{{ post.id }}</guid>
                <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
                {% for cat in post.categories %}
                        <category>{{ cat | xml_escape }}</category>
                {% endfor %}
        </item>
{% endfor %}
</channel>
</rss>

Semua variable yang ada dalam berkas tersebut didefinisikan dalam _config.yml. Tag yang wajib ada pada sebuah RSS Feed antara lain:

  • <title> - Nama dari kanal RSS

  • <link> - URL untuk situs

  • <description> - Deskripsi dari isi feed

Lalu bagaimana agar aggregator secara otomatis mendeteksi RSS Feed kita, hal ini dilakukan dengan menambahkan link pada <head> di _layouts\default.html

<link rel="alternate" type="application/rss+xml" title="linhub" href="/rss.xml">

Dengan begitu RSS Feed kita dapat diakses oleh aggregator RSS. Ada beberapa tag yang dapat digunakan dalam membuat berkas .xml ini, silahkan gunakan referensi ini sebagai acuan. Pada tulisan Pak Haji Mimin di sini disebutkan mengenai Bamboo Feed Reader sebagai favorit beliau untuk Feed Reader, namun saya lebih memilih NewsFox sebagai Feed Reader hal ini dikarenakan tampilan dari NewsFox yang mirip dengan mail client.

NewsFox

Selain itu NewsFox, juga dapat mengkategorikan artikel sesuai yang dipetakan oleh pemilik situs dengan meta <category>.

Ayo bagi RSS Feed situsmu pada komentar dibawah …

Mengenal Gage R&R

If you cannot measure it, you cannot improve it. - Lord Kelvin

Sebelum menganalisa data untuk sebuah improvement, yang pertama harus dikonfirmasi adalah kita telah melakukan pengukuran yang tepat. Hal ini dikarenakan ketika kita melakukan improvement pada pengukuran yang kurang tepat memberikan biaya yang mahal. Jadi, bagaimana kita mengetahui apakah sebuah improvement yang dilakukan valid dan tidak hanya produk dari suatu sistem pengukuran kinerja yang salah? Jika tidak dapat mempercayai sistem pengukuran , maka kita tidak bisa mempercayai data dari hasil pengukuran tersebut.

Dengan menjalankan sebuah studi Gage R&R, maka akan memberikan informasi untuk mengidentifikasi masalah pada sistem pengukuran dan keandalannya. Selain itu studi ini juga akan membantu dalam membuat pengambilan keputusan berdasar pada data.

Apakah Gage R&R?

Gage R&R adalah sebuah studi yang dilakukan untuk menganalisa variasi pada proses pengukuran. Studi ini menguji Repeatability and Reproducibility dari sistem pengukuran.

  • Repeatability adalah variasi yang ditimbulkan karena perbedaan equipment, didalam variasi itu sendiri
    Jika seorang operator A melakukan pekerjaan machining untuk komponen tipe A dengan alat tipe B secara berulang, apakah waktu yang diperlukannya akan tetap konsisten? Jika pertama kali melakukan machining memerlukan waktu 30 menit, apakah diperlukan waktu yang sama untuk komponen berikutnya?

  • Reproducibility adalah variasi yang ditimbulkan karena perbedaan operator, diantara variasi yang ada
    Jika operator A melakukan machining komponen tipe A dengan alat tipe B dalam waktu 30 menit, apakah diperlukan waktu yang sama oleh operator B? Bagaimana dengan operator C?

Catatan:
Gage R&R tidak mengukur kualitas dari sebuah produk, namun kualitas dari sebuah sistem pengukuran.

Tipe Studi Gage R&R

Ada dua jenis tipe studi Gage R&R yang umum digunakan yaitu:

  • Crossed Gage R&R
    • Metode terbaik, jika bisa dilakukan
    • Tiap operator mengerjakan tiap komponen
    • Komponen dikerjakan lebih dari satu kali
    • Pengamatan dalam pengerjaan komponen dilakukan dengan metode yang sama
    • mis. 3 operator, 4 komponen, 5 pengerjaan maka ada 3x4x5 = 60 pengamatan

Gage R dan R

  • Nested Gage R&R
    • Jika metode diatas tidak bisa dilakukan, dikarenakan operator tidak dapat mengerjakan semua komponen
    • mis. Operator A mengerjakan komponen 1 dan 2, Operator B mengerjakan komponen 3 dan 4

Dan jika sistem pengukuran ternyata kurang bagus, maka Gage R&R dapat digunakan untuk menentukan di mana kelemahan yang ada. Sebagai contoh, mungkin sebuah penelitian mengungkapkan bahwa sementara repeatibility baik, reproducibility rendah. Maka Gage R&R dapat digunakan untuk menggali lebih dalam dan mencari tahu mengapa operator yang berbeda memerlukan waktu yang berbeda.

Lebih Produktif dengan Tab Expansion

Beberapa saat lalu saya membaca artikel dari Pak Haji Mimin mengenai Bash Brace Expansion di sini, dan juga artikel yang mirip pada blog Bang Sty di sini. Kata expansion pada artikel tersebut mengingatkan saya mengenai tab expansion pada shell interaktif Bash dan juga Command Prompt Windows, ini adalah fitur yang cukup bagus karena dapat menghemat waktu ketika akan mengetik perintah pada shell.

Tab Expansion sendiri adalah sebuah fitur autocomplete pada shell interaktif modern, tanpa adanya tab expansion maka mengetik perintah pada shell akan memperlambat dan juga rawan galat ketika perintah cukup panjang. Perintah seperti cd nama_folder_yang_cukup_panjang_untuk_diketik, cukup dilakukan dengan cd na[TAB], jika hanya ada satu direktori yang berawalan na maka tab expansion akan mengisi sisa nama direktori tersebut.

Namun ada sedikit perbedaan antara tab expansion pada Command Prompt Windows dengan Bash, jika menggunakan Bash ketika menekan [TAB] dan ada beberapa kandidat yang memiliki awalan na maka Bash akan menampilkan daftar berkas yang sesuai, kemudian kita bisa menambahkan karakter untuk kemudian menekan [TAB] maka tab expansion akan melakukan tugasnya.

ls command

Pada gambar diatas, bila kita ingin mengetik ls -l fail2ban.log.4.gz menggunakan tab expansion maka ada 2 langkah mudah untuk dilakukan

  • Ketik ls -l fa[TAB] maka akan otomatis akan melengkapi menjadi ls -l fail2ban.log

  • Berikutnya ketik 4[TAB] untuk memilih berkas fail2ban.log.4 dan tab expansion akan melengkapi .gz

Fitur tersebut memberikan keuntungan antara lain:

  • Memperpendek pengetikan
    Bayangkan jika harus mengetik ls -l fail2ban.log.4.gz dengan total 23 keystroke, dengan tab expansion hanya perlu 9 keystroke dengan 2 kali [TAB]

  • Mengurangi Kesalahan
    Tab Expansion membantu mengurangi kesalahan ketika harus mengetik nama direktori atau berkas yang cukup panjang

  • Sebagai Pemeriksa Kesalahan
    Jika tab expansion tidak expand ada kemungkinan kesalahan pada awalan yang digunakan

Hal lain yang perlu diingat pada shell interaktif seperti Bash dan Command Prompt Windows, mereka memiliki command history, namun pada Bash lebih mendukung lingkungan interaktif untuk menyimpan, mengubah, dan mencari perintah yang pernah kita gunakan. Command History dapat digunakan dengan menggunakan [UP Arrow] dan [DOWN Arrow] pada shell interaktif.

Gunakan fitur-fitur tersebut untuk mengurangi kesalahan dan juga menghemat waktu ketika mengetik perintah shell !!

Menyelamatkan Aku

Alkisah (tapi ini nyata lho), harddisk rani nyaris tewas dan badsector-nya sudah lumayan. Kondisi ini berimbas ke beberapa layanan BlankOn, salah satu dan yang terpenting adalah Aku, bukan kamuuu. Aku adalah layanan single sign on (SSO) untuk layanan-layanan BlankOn yang lain. Contohnya, dengan satu akun, kita bisa masuk ke panduan.boi maupun dev.boi. Sumber kode Aku dapat dikunjungi di sini.

Saweran harddisk dibuka, Tim Infrastruktur bergegas mengamankan data-data, Menejer Rilis berkelana ke timur membawa harddisk baru untuk rani.

Tim riset kebagian berkas sqlite3 dari aku.boi yang jika dicek integritasnya dapat pesan galat,

$ sqlite3 aku.db "PRAGMA integrity_check"
Error: database disk image is malformed

Lumayan bikin berdebar karena irgsh, dev.boi dan panduan.boi (mungkin ada yang lain lagi) bergantung ke aku untuk otentikasi pengguna.

Basis data ini masih bisa diselamatkan, dengan men-dump apa saja yang masih bisa dibaca.

$ sqlite3 aku.db
sqlite> .mode insert
sqlite> .output dump.sql 
sqlite> .dump
sqlite> .exit

Kita dapat dump.sql-nya, pada kasus ini, masih berisi data pengguna sebelum kesehatan harddisk rani disadari oleh para pengembang. Intip-intip, ada nama-nama pendekar lama di sini :)

Sekarang aku.boi sudah dapat diakses kembali. Jika Anda tidak berhasil login dengan akun Anda, maka bisa diambil kesimpulan bahwa Anda mendaftar ke aku.boi setelah harddisk rani mulai tidak sehat. Silakan mendaftar ulang kembali.

Referensi :

Mencari Ning

Ditulis berdasarkan kisah nyata dari seorang kawan.

“Gol gol gol, ale ale ale”,

Kamu ingat potongan lagu itu. Sepak bola dan 1998. Kamu jadi ingin tertawa mengingat-ingat betapa banyak energi yang kamu miliki saat masih kecil dulu. Kamu bisa berlari kesana kemari, menendang bola, menyikut temanmu, berteriak lepas. Sampai sore. Sampai petang.

Namun sebelum semua itu, kamu menggeser lembar ingatan beberapa tahun ke belakang. Ketika kamu masih bocah laki-laki yang baru masuk SD. Ketika kamu masih merengek-rengek agar Ibumu tetap tinggal di sekolah selama kamu belajar. Ketika kamu belum punya keberanian untuk berteman dengan siapa pun di sekolah barumu. Di tahun-tahun pertama, kamu bukan anak populer dan tidak ada yang mau repot-repot menyapamu.

Kamu ingat semua itu namun tidak ingat bagaimana kamu bisa berkenalan dengan Ning, anak Ibu guru di sekolahmu. Pintar (tentu saja), baik dan bercita-cita menjadi guru seperti Ibunya. Kamu benar-benar tidak ingat kapan pertama kalinya kamu berinteraksi dengan Ning. Yang kamu ingat, kamu selalu menunggunya setiap pulang sekolah, belajar dan bermain bersama, menemaninya sampai Ibunya selesai mengajar.

Ning selalu juara kelas namun tidak keberatan belajar bersama dengan dirimu yang otaknya tidak terlalu bisa dibanggakan. Ning energik dan asyik diajak bermain. Ular tangga, monopoli, congklak, bekel (kamu tahu yang ini permainan anak perempuan, tapi kamu tetap melakukannya demi bisa tetap berteman), berlari-lari, apa saja. Kadang-kadang, kamu bersikeras lari pulang ke rumah hanya untuk mengambil alat main. Saat-saat itu adalah saat-saat yang paling berharga. Saat dimana kamu bisa bertemu dengannya lebih lama. Di lain waktu, kamu sulit menemukannya karena Ning berbeda kelas denganmu.

Seiring waktu berjalan, kamu memiliki beberapa teman lagi, namun tidak ada yang sedekat Ning. Beberapa teman-teman laki-lakimu mulai mengata-ngataimu. Mengatakan kamu banci dan sebagainya. Tentu saja kamu marah, tapi kamu tidak melakukan apa-apa saat itu.

Ning. Kamu mengalami beberapa kebahagiaan dan kesedihan selama mengenalnya.

Kebahagian pertama adalah saat di tahun berikutnya, kamu akhirnya satu kelas dengan Ning dan diajar langsung oleh Ibunya Ning. Kamu menjadi lebih sering belajar bersama. Kamu membenci matematika. Tidak, kamu membenci semua mata pelajaran. Namun dengan Ning, kamu mencintai lagi semua mata pelajaran itu. Apakah kamu bertambah pintar? Rasanya tidak, kamu kurang yakin.

Ketika sekolahmu mengumumkan seleksi cerdas cermat untuk mewakili sekolah di lomba kecamatan, Ning ikut. Kamu tahu dirimu tidak cukup pintar (meskipun sering belajar bersama Ning) namun kamu ingin ikut menyertai Ning. Jadi kamu merengek lagi ke Ibumu dan memintanya membantumu memahami semua pelajaran-pelajaran yang memusingkan ini.

Ibumu tentu saja terheran-heran, mendapati anaknya yang biasa-biasa saja tiba-tiba bersikeras ingin tahu bagaimana berhitung cepat, menghafal nama-nama pahlawan atau memahami fisika sederhana. Ibumu mengabulkan dan keesokan harinya, waktu-waktu subuhmu dipenuhi oleh buku-buku, kertas-kertas dan omelan Ibumu. Kamu benar-benar bekerja keras untuk bisa lolos seleksi dan mewakili sekolah serta menyembunyikan usaha-usaha ini dari Ning.

Kebahagiaan kedua adalah saat namamu tertulis sebagai salah satu dari 3 orang yang mewakili sekolah, bersama Ning dan satu orang lagi yang kamu lupa namanya siapa. Kamu langsung berlari pulang dari sekolah, menemui Ibumu dan memeluknya. Untuk pertama kalinya Ibumu menangis bangga atasmu (padahal ikut lomba saja kamu belum).

Di minggu-minggu perlombaan, Ibumu bersikeras mengantarmu langsung ke tempat lombanya di kecamatan, yang cukup jauh dari tempat tinggalmu. Ibumu menyaksikan sendiri bagaimana kamu berjuang bersama Ning dan temanmu satu lagi yang (maaf) kamu masih lupa namanya.

Kalian menang, menang, dan menang lagi sampai 4 besar, lalu kalah. Mereka menyebutnya juara harapan namun kamu tidak mengerti maksudnya. Kalian bertiga menangis meskipun guru-gurumu bilang ini sudah cukup bagus untuk pengalaman. Itu kesedihanmu yang pertama. Kamu merasa kamu mengecewakan Ning.

Ning bilang, dia ingin belajar bersama lebih giat lagi agar bisa mengalahkan semua sekolah tahun depan. Dan hari-harimu yang bersemangat pun kembali lagi, meskipun masih ada gangguan-gangguan minor (misal dikatai, “Hei Bencong! Mainnya sama cewek mulu!”). Kamu tetap bertahan, setidaknya sampai kelas 4, saat dimana kesedihanmu yang kedua datang.

Ibunya Ning dipindahtugaskan ke kota lain dan Ning juga akan ikut pindah tempat tinggal dan sekolah. Kamu tidak bisa membayangkan hal itu. Ning memintamu untuk ikut serta pindah sekolah dan saat kamu meminta hal tersebut ke Ibumu, Ibumu kembali terheran-heran. Hanya saja kali ini ia tidak mengabulkan permintaanmu.

Kamu menangis.

Hari-harimu berubah. Tidak ada lagi Ning di teras depan kelas pada jam-jam pulang sekolah. Tidak ada lagi belajar atau bermain bersama, tawa senda gurau. Tidak ada lagi ambisi-ambisi tentang mengalahkan semua sekolah sekecamatan. Nilaimu turun. Perilakumu menjadi nakal. Kamu mulai berteman baik dengan beberapa teman laki-laki. Mulai pandai bermain sepak bola. Mulai menjadi anak laki-laki seperti pada umumnya.

Kebahagianmu yang ketiga adalah ketika kamu hampir melupakan Ning dan temanmu bercerita bahwa dia sekarang les privat dengan Ibunya Ning, yang tempatnya lumayan jauh. Kamu ingin les juga di sana agar bisa bertemu Ning dan meminta hal tersebut ke Ibumu. Ibumu tidak mengabulkan dan bilang ia sendiri bisa mengajarimu seperti dulu jika kamu mau. Namun kamu tidak putus asa. Kamu menulis surat dan menitipkan ke temanmu.

Meskipun kamu tahu temanmu akan membacanya juga (meski telah diteriaki, “Awas, jangan dibaca!”), kamu tidak keberatan. Yang penting selembar (atau kadang-kadang 5 lembar) kertas itu sampai di tangan Ning. Kalian saling surat menyurat selama beberapa bulan dan kamu mendapat cerita-cerita dari Ning, hal baik maupun sedih. Ning tidak punya banyak teman di sana dan lebih sering menyendiri. Semangatnya untuk mewakili sekolah sudah tidak seperti dulu lagi karena ia masih rindu sekolah yang lama. Yang tidak berubah, prestasi Ning di kelas masih seperti dulu.

Kesedihan berikutnya adalah saat kamu naik ke kelas 5, dimana temanmu tidak lagi les dengan Ibunya Ning dan kamu kehilangan kontak (lagi). Tidak ada lagi surat menyurat, tidak ada lagi kertas-kertas yang kamu nantikan kehadirannya.

Maka suatu hari kamu bertanya ke temanmu, dimanakah rumahnya Ning?

Jauh.

Kamu kelas 6, anak laki-laki yang punya banyak energi dan memutuskan untuk mengkayuh sepedamu ke kota sebelah, mengunjungi Ning. Beberapa teman-temanmu menyertaimu, mengkayuh sepeda sejauh 20 kilometer, melawan terik dan melelehkan peluh. Namun saat kamu hampir sampai dan melihat Ning (sedang bermain lompat tali bersama teman-temannya) dari kejauhan, kamu berhenti.

Kamu hanya diam mengamati selama beberapa saat. Ketika teman-temanmu bertanya apakah kamu ingin menyapa Ning, kamu bilang tidak. Ini sudah cukup.

“Ayo kita pulang.”

Kamu masih ingat potongan lagu itu, dan saat itu kamu adalah kapten dari kesebelasan sepak bola SMP-mu yang akan bertarung dengan SMP lain. Demam persepakbolaan mendera banyak orang.

Kamu bukan lagi bocah kecil yang gemar merengek-rengek ke Ibumu dan hanya bermain bersama anak perempuan. Kamu beranjak remaja, tulang-tulangmu keras, larimu cepat, kamu pantang menyerah. Kamu kapten. Gol-gol yang dihasilkan timmu selalu dibalas oleh lawanmu. Penonton bersorak, lapangan menggema. Kamu sangat yakin akan memenangi permainan ini sebelum akhirnya kamu melihat sosok yang membuat dadamu berdegup lebih kencang dari yang seharusnya.

Meskipun kamu menghargai persahabatan dengan Ning, kamu berusaha tidak mengingatnya lagi atas beberapa alasan. Tadi, kamu merasa kamu melihat Ning di kelompok penonton pendukung lawan.

“Apakah Ning sekolah di SMP itu?”

“Ya”, jawab temanmu, “Tapi jangan pikirkan itu. Kita harus menang. Ayo!”

Namun kamu kalah. Ning mengalihkanmu. Ning membuatmu tidak fokus. Saat lawan-lawanmu bersorak dan kamu berlutut hampir menangis di dekat gawang, kamu melihatnya lagi dari jauh. Ning berdiri menatapmu tanpa ekspresi di tengah kerumunan yang sedang berbahagia atas kemenangan mereka.

Kamu bangkit dan mengejarnya. Kamu menerobos kerumunan dan mencari-cari. Kamu tidak berani bertanya kepada siapa pun. Kamu hanya terus menyibak kerumunan dan menyapu pandangan. Mencari wajah Ning.

Sampai kerumunan itu bubar, kamu masih tidak menemukannya. Kamu tidak pernah menemukannya lagi, sampai kamu beranjak dewasa dan bekerja di kota lain yang jauh. Sampai kehilangan yang lama itu perlahan memupuskan asamu untuk mencarinya. Itu adalah kesedihanmu yang terakhir.

Yang kamu dengar hanya kabar-kabar tipis, bahwa Ning sekarang menjadi seorang guru, secerdas Ibunya. Itu juga adalah kebahagianmu yang terakhir.

Menggunakan OpenDNS di Ubuntu 16.04

Beberapa saat lalu saya membaca artikel teman saya Ali mengenai penggunaan DNSCryt di sini, akhirnya saya penasaran ingin mencoba. Namun alih-alih ingin menggunakan DNSCrypt saya cuma ingin mengubah DNS bawaan dari Telkomsel ke OpenDNS, operator yang saya gunakan Telkomsel. Mulailah saya membaca petunjuk tentang bagaimana menggunakan OpenDNS di Ubuntu, namun sungguh tak dinyana dengan hanya mengikuti petunjuk tersebut tidak bisa mnegubah DNS Telkomsel menjadi DNS OpenDNS. Ketika melakukan pengecekan di https://www.opendns.com/welcome/ hasilnya

OpenDNS Fail

Akhirnya saya pun berkonsultasi dengan beberapa teman di grup Telegram untuk memecahkan masalah ini, dan berikut kesimpulannya :

  • Ubuntu menggunakan dnsmasq untuk mengatur DNS
    Karena hal ini ketika menggunakan custom DNS seperti OpenDNS, Ubuntu tidak dapat melakukan resolve host.
  • Berkas /etc/resolv.conf tidak dapat diubah permanen
    Berkas /etc/resolv.conf pada Ubuntu 16.04 ternyata di generate oleh resolvconf, hal ini mengakibatkan kita tidak bisa mengubah secara sembarang berkas tersebut.
  • Telkomsel melakukan redirect DNS untuk keperluan Internet Sehat
    Ketika sudah melakukan penggantian DNS melalui network-manager, DNS akan tetap kembali ke DNS Telkomsel.

Untuk mengatasi masalah tersebut berikut beberapa hal yang perlu dilakukan :

  1. Ubah berkas /etc/dhcp/dhclient.conf dan buang # pada baris
     prepend domain-name-servers <ip_domain>;
    

    Ganti <ip_domain> dengan IP dari OpenDNS yaitu 208.67.222.222 dan 208.67.220.220, hal ini bermaksud agar IP OpenDNS digunakan sebagai primary dan secondary DNS.

  2. Ubah berkas /etc/dnsmasq.conf dan tambahkan
     server=208.67.222.222#5353
     server=208.67.220.220#5353
    

    Hal ini bermaksud untuk menggunakan IP OpenDNS dengan custom port 5353 dengan simbol #, karena port default 53 tidak bisa digunakan pada Telkomsel.

  3. Jika tidak ingin menggunakan berkas /etc/resolv.conf tambahkan baris berikut untuk pengaturan no 2 diatas
     no-resolv
     no-pool
    

Dengan menggunakan cara tersebut maka saya berhasil menggunakan OpenDNS, berikut adalah hasil pengecekan di https://www.opendns.com/welcome/

OpenDNS Success

Update tambahan IP DNS dari DNS.Watch, ketika saya coba belum berhasil menggunakan metode diatas untuk mengubah DNS Telkomsel

Selain menggunakan IP dari OpenDNS

208.67.222.222
208.67.220.220

Kita juga bisa menggunakan IP dari DNS.Watch

84.200.69.80
84.200.70.40

Membuat Ishikawa Diagram dengan R

Ketika melakukan sebuah improvement salah satu tools yang kita gunakan adalah Diagram Ishikawa, diagram ini merupakan salah satu dari 7 Basic Quality Tools yang digunakan untuk menemukan akar permasalahan. Untuk membuat diagram Ishikawa, kita perlu menentukan Root Cause Category antara lain

6M 8P 5S
Machine Product Surroundings
Method Price Suppliers
Material Place Systems
Man Power Promotions Skills
Measurement People Safety
Mother Nature Process  
  Physical Evidence  
  Productivity and Quality  

Selain kategori diatas kita dapat menggunakan kategori lain yang dianggap mampu untuk membantu mengatur gagasan yang muncul.

Untuk membuat Diagram Ishikawa menggunakan R diperlukan paket qcc, pastikan sudah terpasang pada system anda.

Dengan menggunakan fungsi cause.and.effect() kita dapat membuat Diagram Ishikawa dengan menggunakan list, berikut adalah contoh pembuatan Diagram Ishikawa

library(qcc) # load library qcc

cause.and.effect(
cause = list( # cause list
    Man = c( "Produktivitas Rendah", "Efektivitas Rendah" ), # category list
    Method = c( "Tidak ada standar baku"),
    Machine = c( "Tingginya waktu perbaikan" ),
    Material = c( "Tidak tersedianya material khusus" )
),
effect = "TAT Unit Underground",
title = "Diagram Ishikawa - TAT Unit Underground"
)

Potongan kode diatas akan menghasilkan diagram sebagai berikut

Diagram Ishikawa

Analisis Weibull pada Data Produksi Perusahaan Manufacturing

Analisa Weibull merupakan sebuah metode untuk memperkirakan reliabilitas yang mengeneralisasi aplikasi distribusi, umumnya banyak digunakan dalam menganalisa reliabilitas yang berkaitan dengan rentang waktu (mis. rentang waktu kemungkinan sebuah equipment akan down). Dalam proses manufacturing, tehnik ini dapat membantu dalam menjawab pertanyaan seperti

  • Apakah ini masalah produksi atau masalah reliabilitas?
  • Seberapa besar reliabilitas proses di plant saya?
  • Apa saja proses utilisasi/efisiensi yang membebani plant saya?
  • Berapa kapasitas dari plant saya?

Dengan menggunakan tehnik Weibull maka perusahaan dapat menyusun strategi berdasarkan dari jumlah proses yang reliabel. Tool ini jika digunakan dengan tepat akan meningkatkan ketersediaan produk terhadap pelanggan, serta meningkatkan profit bagi para stakeholder.

Umumnya permasalahan mengenai reliabilitas adalah tentang memiliki banyak informasi namun kurang akan pengetahuan. Setiap proses di suatu plant dapat dipastikan memiliki data perihal spesifikasi dan kondisi dari equipment yang digunakan. Permasalahannya adalah untuk menyampaikan data tersebut agar mudah dipahami oleh setiap orang. Metode paling mudah adalah dengan menggunakan kuantitas keluaran produksi (hal ini dapat berupa jumlah barang atau revenue) dari proses dengan data produksi. Umumnya setiap proses produksi memiliki keluaran yang tersusun dalam urutan waktu, beberapa dapat berupa hasil study dalam bentuk statistik untuk melihat pola data.

Analysis Weibull adalah salah satu alat yang bisa digunakan untuk menyusun data tersebut. Grafik Weibull adalah salah satu alat yang akan digunakan untuk membuktikan reliabilitas suatu proses dan menghitung kerugian akibat kegagalan. Ketika produksi kehilangan waktu, maka tidak akan menghasilkan produk, tanpa produk maka tidak akan menghasilkan uang. Jika disampaikan dalam nilai uang atau waktu maka akan lebih mudah dipahami oleh orang pada umumnya.

Biaya yang dikeluarkan akibat kegagalan proses seringkali melebihi biaya dari kegagalan masing-masing equipment, Dengan menggunakan grafik weibull maka akan membantu engineer, process owner, serta management untuk menentukan terkait permasalahan reliabilitas atau produksi.

weibull plot

Buku Inkscape versi Digital Gratis

Bulan ini kurang lebih sudah dua tahun penulis menerbitkan dan mengedarkan buku Inkscape versi cetak, setelah melalui berbagai pertimbangan, hari ini penulis membagikan buku tersebut dalam versi digital (ebook).

Buku versi digital ini sengaja penulis bagikan secara gratis agar masyarakat umum yang tidak punya niat belum memiliki uang lebih untuk membeli buku versi cetak tetap bisa belajar menggunakan Inkscape. Walau demikian penulis tetap menerima dengan senang hati jika ada pembaca yang mau memberi sedikit donasi sukarela. Penulis menerima donasi berupa uang atau pulsa, tata cara melakukan donasi silakan baca halaman Kata Pengantar pada buku yang penulis bagikan.



Unduh Buku Inkscape versi Digital Gratis


Pembaca boleh menyebarkan buku versi digital ini ke masayarakat yang membutuhkan baik secara online ataupun offline, juga dipersilakan untuk membuat mirror di berbagai web atau server pembaca miliki. Jika mirror yang pembaca buat ingin dicantumkan di blog ini, silakan tulis mirror tersebut di bagian komentar blog ini.

Demikian, terima kasih
Semarang, Satu Februari Dua Ribu Tujuh Belas

Membuat Jenkin Jobs dengan Groovy(3); Build Trigger

logo-jenkinsMari lanjut tahap ketiga setelah sebelumnya part 1, membahas pengaturan umum dan part 2 SCM (Source Code Management). Bagian ketiga ini saya akan membahas mengenai build trigger. Yaitu bagian yg mengatur apa yang menjadi memantik jobs untuk segera dimulai.

Berikut beberapa opsi yang biasa saya gunakan:

triggers {
  scm('H/5 * * * *')
  upstream('NamaFolder/NamaJob','SUCCESS')
}

Penjelasannya adalah sebagai berikut:

  1. triggrers.scm = digunakan jika ingin jobs dikerjakan setiap ada commit baru di scm server (repo git, gitlab, bitbucket,github,phabricator). Nilai scm ('H/5 * * * *') digunakan untuk membuat interval, kapan saja Jenkins akan memeriksa pembaruan commit pada scm server.
  2. triggers.upstream = Memulai jobs setelah jobs lain (jobs hulu) selesai dilakukan. Parameter untuk job pemicu adalah ‘SUCCESS’, ‘UNSTABLE’ atau ‘FAILURE’.

Cukup itu saja. Perlu diingat bahwa opsi yg saya tulis diatas, cukup dipilih salah satunya. Kalo mau dua jg gpp, asalkan paham alur apa yg terjadi jika mengkombinasikan dua opsi tadi. Sampai ketemu di bagian keempat

Bacaan seriusnya disini.

Estu~


Membuat Jenkin Jobs dengan Groovy(1); Pengaturan Umum

logo-jenkinsDi tulisan kali ini saya akan menjelaskan beberapa fitur jobs dengan job-dsl dalam format *.groovy berupa potongan kode-kode yang berurutan.

Sebuah jenkins freestyle jobs dibagi dalam beberapa bagian. Diantaranya: General, SCM, Build Trigger, Build Enviroment, Build, Post Build Action. Selain freestyle juga ada pipeline job. Pipeline jobs akan saya bahas berikutnya.

Kali ini saya akan membahas tentang pengaturan umum (General).

    1. Nama aplikasi dalam variable
      String app = "JobGitHUb"
      
    2. Membuat folder
      // rapikan jobs dengan membuat folder
      folder("${app}") {
      description "Semua jobs dari github"
      }
      
    3. Menulis nama job dan deskripsi, karakter “\n” dibutuhkan untuk membuat baris baru
      job("${app}/Package") {
          description "Ini adalah\nDeskripsi"
      
    4. Manajemen Log (log rotator). Berapa banyal build yg disimpan dalam riwayat dan build pada hari apa yg terakhir disimpan.
          logRotator {
              daysToKeep(7)
              numToKeep(10)
          }
      
    5. Pembatasan Label. Ini berguna jika kita ingin membatasi job tertentu hanya bisa dijalankan oleh Node dengan spesifikasi spesifik. Misal: Windows, Android, Slave, Master. Pengaturan label ini ada pada bagian pengaturan Node(http://urljenkins/computer/(master)/configure).
          label('slave')
      

Potongan kode utuhnya seperti dibawah ini.

Kira-kira itu saja dulu. Bersambung ke part 2.


Membawa Sepeda ke Pesawat

Saya sudah pernah membawa sepeda lipat di kereta (Jakarta - Yogyakarta), namun belum pernah dengan pesawat.

Minggu lalu saya ada keperluan mendesak dan harus pulang ke Lombok (sekarang berdomisili di Depok). Kepulangan sebelumnya tidak begitu nyaman dikarenakan (nyaris) menghilangnya angkutan umum (disebut Bemo) di Mataram dan mesti menyewa taksi untuk kesana-kemari. Oleh sebab itu, saya ingin membawa sepeda lipat. Dari penelusuran di internet, saya mendapat beragam informasi terkait cara membawa sepeda ke pesawat. Beberapa bilang perlu membungkus sepeda dengan tas khusus (harganya bisa sampai 800k), ada yang cukup diikat. Satu hal yang pasti, ban sepeda mesti dikempeskan untuk mencegahnya meletus karena perubahan tekanan udara di pesawat nanti.

Yang perlu disiapkan :

  • Kunci sepeda, untuk mengikat sepeda, paling murah harganya barangkali 25 ribu rupiah.
  • Pompa tangan portabel

Saya berangkat dari bandara Soetta (CGK) dengan pesawat Lion Air (PP dengan maskapai yang sama). Dari Depok, sepedanya dimasukkan ke bagasi bis Damri. Sempat khawatir bakal diminta perlakuan khusus untuk sepeda, namun ternyata tak seorang pun petugas yang menanyai saya terkait sepeda. Untuk sepeda yang tidak dibungkus tas atau kardus, petugask Check-in akan meminta kita untuk membungkusnya dengan plastik wrap (bayar 50k). Sebelumnya saya mengikat sepeda dengan kunci sepeda, agar mudah dibawa dan dibungkus. Kemudian ditimbang. Sepeda saya hampir 13kg, masih di bawah batas gratis 20kg. Saya tetap membawa helm sepeda ke kabin, menggantung di ransel saya. Semua lancar dan beres. Saat tiba di Lombok, sepedanya baik-baik saja. Tinggal robek plastik wrapnya, pompa bannya, lalu gowes.

Saya mengharapkan pengalaman yang sama di Bandara Internasional Lombok saat balik ke Jakarta, namun tidak terkabul. Jadwal dimajukan dan pemberitahuannya mendadak, mesin wrap-nya ada namun petugasnya entah kemana. Alhasil sepedanya dibawa ke bagasi tanpa dibungkus wrap. Sesampai di Jakarta, tape-nya lepas. Tapi tidak apa-apa, asal tidak sampai bengkok-bengkok.

Andai saja jadwal penerbangannya tidak dimajukan dan masih ada waktu untuk mencari petugas mesin wrap-nya. Perjalanan berikutnya? Saya akan berusaha tetap bawa sepeda lipat. :)

[catatan] QGIS Web Client move focus to Custom Coordinate

Pada QGIS Web Client saya menggunakan Projeksi EPSG:4326 dan maxScale:250, minScale:7221282 pada bagian MapOptions

tambahkan sedikit script di bawah ini pada site/js/Customizations.js:

function dispatch(target, eventType, charCode) {
   var evt = document.createEvent("KeyboardEvent");
   evt.initKeyEvent(
    eventType,
    true,
    true,
    window,
    false,
    false,
    false,
    false,
    charCode,
    0
   );
  target.dispatchEvent(evt);

}
//disini saya mengubah posisi default ke papua
function moveToPapua(){
  var id = document.getElementById("CoordinateTextField");
  id.value = "136,-4"; //titik koordinat
  id.focus();

  id.onkeydown = id.onkeyup = id.onkeypress = function() {console.log(arguments)}

  dispatch(id, 'keydown', 13);
  dispatch(id, 'keyup', 13);
  dispatch(id, 'keypress', 13);
  dispatch(id, 'textinput', 13);
}

ubah pada fungsi customBeforeMapInit menjadi seperti ini:

function customBeforeMapInit() {
  window.setTimeout(moveToPapua, 3000);
}

Salam,
Aris Winardi

The post [catatan] QGIS Web Client move focus to Custom Coordinate appeared first on Aris Winardi.

Perpaduan Chef, Knife, AWS CLI, Digital Ocean, dan Google Compute Engine

6-alasan-wanita-tertarik-pada-pria-jago-masak
Idenya, saya ingin memanajemen beberapa provider layanan awan dalam satu tools. Kebetulan kantor menggunakan beberapa, diantaranya aws, digital ocean, gce.

 

Saya terbiasa menggunakan ChefDK dan knife sebagai alat masak. Mari kita pasang-pasang tools pendamping.

  1. ChefDK (Chef, Ruby, Knife)
  2. AWS CLI
     $ pip install awscli
    
  3. Google Cloud SDK
  4. Gem (knife-ec2, knife-digital_ocean, knife-google)
    $ chef gem install knife-ec2 knife-digital_ocean knife-google
    
  5. Atur knife.rb untuk masing-masing provider
    $ vim ~/.chef/knife.rb
    

    Atur kira kira seperti ini

    knife[:aws_credential_file] = File.join(ENV['HOME'], "/.aws/credentials")
    knife[:aws_config_file] = File.join(ENV['HOME'], "/.aws/config")
    knife[:aws_profile] = "default"
    knife[:digital_ocean_access_token]  = "xxxxxxxxxxxxxxxxxx"
    knife[:gce_project] = 'my-project-name'
    knife[:gce_zone]    = 'asia-east1-a'
    
  6. Knife siap digunakan
    $ knife ec2 server list
    $ knife digital_ocean droplet list
    $ knife google server list
    

Dah kira-kira begitu.
Sumber gambar dari sini.

Estu~


Pelatihan Migrasi Open Source di Dinkes Lamongan

Pada tanggal 28 dan 29 Oktober 2011  Komunitas Open Source dan Linux Lamongan  dan Dinas Kesehatan Kabupaten Lamongan mengadakan pelatihan migrasi ke Open Source. Sistem Operasi yang dipilih setelah disepakati adalah BlankonLinux. Ada beberapa hal yang menyebabkan Dinkes Lamongan dan KOSLA memilih BlankOn Linux. Ubuntu memang bagus, tapi karena terlalu cepat update rilis baru (tiap 6 bulan sekali) menyebabkan Sistem Operasi yang diinstall terasa jadul. ...

Radix Royal Edisi Saya

Kali ini saya akan membahas salah satu gitar dari koleksi saya. Gitar ini buatan Indonesia. Nasib baik, saya bisa punya edisi khusus dari merek beken ini.

Radix Guitars adalah merek gitar terkenal di Indonesia. Sudah lama berdiri. Saya sendiri pernah punya yang edisi awal-awal sampai akhirnya pindah tangan ke teman.

Selang beberapa waktu, nasib baik, berkah pertemanan,  saya dibuatkan oleh mas Toien (pemilik Radix Guitars) gitar sesuai selera. Saya mengambil bentuk dari Radix Royal. Berikut penampakannya:

Radix Guitars - Royal Special

Radix Guitars – Royal Special

Pembeda

Edisi ini memang berbeda dengan model aslinya, perbedaannya terletak pada knob, tremolo, 3 way switch serta headstocknya.

Headstock

The Headstock

Bridge yang terpasang di gitar ini adalah SyncroniZR, kebetulan saya punya part ini sejak lama, dan layak digunakan.

Setelah gitar ini datang (saat datang, barengan dengan gitarnya mas Andre Tiranda – Siksa Kubur, Radix Dogma berwarna hijau) saya mencoba-coba sekilas gitar baru saya ini. Sekilas pandang, ini OK. Secara estetika fisik, keren banget.

Hari berikutnya, saya perlu mengganti sepasang pickup yang sudah ada. Sebenarnya dari awal saya sudah diminta untuk mengirim sepasang pickup, namun tidak sempat mengirimkan. Jadinya diberikan pickup standar yang ada. Kenapa saya harus mengganti? ini karena selera saja, saya terbiasa menggunakan pickup Seymour Duncan Sh1 dan Sh4. Dari situ bisa saya buat acuan apakah suara dan rasa gitar ini sesuai ekspektasi saya. Ekspektasi saya adalah gitar ini berkarakter Brown Sound.

Saat mengganti, saya melakukan eksperimen, sama memiliki sepasang Seymour Duncan Sh1 dan Sh4 (ini berwarna hijau) juga memiliki Stranough Demonium yang konon suaranya mirip dengan Sh4. Jadilah saya mencoba sekalian, Sh1 di neck, Stranough Demonium di bridge.

Sh1 + Demonium

Sh1 + Demonium

Build Quality

Kesan pertama adalah keren banget, rapi dan cihuiy dah. Flame (veeneer) topnya bagus banget). Bagian belakang warna natural tanpa pelapis glosy, sehingga tangan akan merasakan kayu gitarnya.

Bodi

Bodi

 

Bodi Belakang

Bodi Belakang

Salah satu bentuk kerapiannya adalah saat bagian belakangnya terbuka (bagian penutup per tremolo). Sangat rapi dan halus. Berikut saya sertakan perbandingannya.

Bagian Belakang Radix

Bagian Belakang Radix

 

Bagian Belakang JEM77WDP

Bagian Belakang JEM77WDP

Kesimpulan

Gitar ini menurut saya sangat menyenangkan sekali. Enak dimainkan dan suaranya bener sesuai ekspektasi. Beberapa teman dekat saya ikutan mencoba dan semuanya mengakui. Salah satunya sudah memesan satu buah.

Sementara itu dulu deh, kalau ada yang kurang kalian bisa menanyakan dan saya akan memperbarui isi konten ini.


Xenyx 302 USB Mixer di BlankOn Tambora

Xenyx 302 USB

Xenyx 302 USB

Beberapa hari yang lalu dapat pinjeman perangkat tersebut di atas. Yang minjemin juga ngasih gitar yang keren banget. Gitar nanti akan saya posting di artikel berikutnya.

Mixer mini ini juga nanti rencananya buat mencoba layanan musik Gritjam.com. Mixer ini memiliki antar muka USB, saat mencoba kemarin, pakai macOS dan langsung terdeteksi. Langsung terpikir bahwa ini akan otomatis terdeteksi juga di BlankOn. Dan ternyata benar.

lsusb

lsusb

Lihat di pengaturan, juga langsung nongol. Dicoba muter musik, langsung jreng.

Plug and Jreng

Plug and Jreng


DevOps; Jenkins, Pengantar Lain

logo-jenkins*Tulisan dibawah ini banyak nggamblehnya.

Di era-era menuju implementasi DevOps, Jenkins bukanlah barang baru. Dan tidak diragukan lagi, Jenkins merupakan salah satu tools wajib dalam menunjang proses pengembangan perangkat lunak secara keseluruhan (Continuous Integration) dan memberdayakan tim untuk melaksanakan bagian teknis dari pengiriman berkelanjutan( Continuous Delivery).

Dalam pekerjaannya, praktisi DevOps diharuskan mampu mengubah infrastuktur, konfigurasi dan alat-alat yang menunjang proses DevOps menjadi sebuah kode. Beberapa menyebutnya “Infrastructure as Code (IaC)”. Tujuannya adalah pengurangan biaya(Cost reduction), kecepatan eksukusi (Speed- Faster execution) dan pengurangan resiko( (Risk – remove errors and security violations).

Ada banyak cara untuk melakukannya. Provisioning merupakan salah satunya. Toolsnya juga macam-macam. Saya terbiasa menggunakan shell scripting, chef dan ansible. Sudah itu aja pengantarnya. Abis ini saya ndongeng membuat jobs di Jenkins.

Sebenarnya membuat jobs di Jenkins itu ndak susah-susah amat. Namun kebiasaannya, membuat jobs cukup dengan klik klik terus jadi. Ya jadi. Tapi bagaimana dengan prinsip  IaC diatas? Ya mbuh. Nek jenkinsnya modar, trs? Ya wasalam.

Sebenarnya jobs dan konfigurasi di Jenkins bisa saja langsung disimpan, tapi formatnya adalah xml. Sedikit nganu.

Salah satu solusinya adalah dengan menulis Jenkins Jobs dalam format *.groovy. Kumpulan *.groovy ini dikumpulkan dalam lumbung, yang akan diperbaharui otomatis. Adalah job-dsl yang bertugas mengubah format groovy menjadi jobs yang disimpan dalam bentuk xml.

Kita mulai dari mana?

  1. Salin repo
    $ git clone https://github.com/tuanpembual/jenkins-jobs.git
    
  2. Install Jenkins. Cara paling mudah adalah menggunakan Vagrant. Vagrantfilenya bisa dicomot dari repo saya. Dalam Vagrantfile sudah ada box yg bisa dipilih. Saya menggunakan ubuntu 16.04. Kemudian jalankan instalasi jenkins via shell provisioning. Oh iya, sekalian direktori share foldernya dicek; sesuaikan dengan kondisi anda.
  3. Install plugin jobs-dsl (ini plugin awal kita bekerja). Dan install jg beberapa plugin lain yang dibutuhkan. Berikut beberapa plugin yang saya rasa perlu:
    • git
    • greenballs
    • build-pipeline-plugin
    • job-dsl
    • cloudbees-folder
    • swarm
    • slack
    • envinject
    • gradle
    • view-job-filters
    • postbuildscript
    • email-ext
    • plot
    • aws sdk
    • s3 plugin
  4. Konfigurasi root jenkins. Bagian yang perlu diperhatikan adalah bagian root:
    <workspaceDir>${ITEM_ROOTDIR}/workspace</workspaceDir>
    <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
    
  5. Buat jobs untuk menampung seed jobs. Isian untuk seed jobs kira-kira begini: (atau bisa nyomot file xml di repo tadi)
    Project Name: seed-jobs
    SCM: none
    Build Trigger: none
    Build: Process Jobs DSLs

    • DSL Script: jobs/*.groovy
    • Action for removed jobs: Disable
    • Action for removed views: Ignore
  6. Buat folder jobs di repo. Dengan vim, buatlah file baru semisal BelajarJenkins.groovy. Isinya kira-kira begini:
    ## jobs/BelajarJenkins.groovy
    String app = "BelajarJenkins"
    folder("${app}") {
      description "ini adalah description"
    }
    job("${app}/BuildGradle") {
      description "Coba build gradle"
      logRotator {
        daysToKeep(7)
        numToKeep(10)
      }
      triggers {
        scm('H/2 * * * *')
      }
      steps {
        gradle {
          tasks('clean test')
        }
      }
      publishers {
        mailer('mail@example.com', false, true)
      }
    }
    
  7. Lakukan perintah buid di seed jobs di Jenkins dengan menekan tombol build now. *semoga g ada error 😀
  8. Tadaaaa. Jobs pertama sudah jadi. Silahkan buat file *.groovy lainnya untuk membuat jobs lainnya ya.

Jika akan digunakan untuk proses produksi, silahkan aktifkan scm menuju repo jenkins-jobs anda. Kemudian trigger scm dalam format cron (* * * * *). Artinya seed-jobs akan dibuild setiap menit jika terdapat perubahan pada repo. Efeknya adalah segala perubahan manual pada jenkins jobs lainnya akan ditimpa selalu. Dan untuk melakukan perubahan diharuskan mengubah langsung pada file *.groovy dan ajukan pull request ke repo.

Sudah, itu saja. Berikut beberapa bacaan lain terkait jobs-dsl. Setelah ini saya akan menulis beberapa potongan kode yang biasa saya gunakan dalam membuat jobs.

Bacaan:
[0]. Getting Started:  https://github.com/jenkinsci/job-dsl-plugin/wiki/Tutorial—Using-the-Jenkins-Job-DSL
[1]. API Viewer: https://jenkinsci.github.io/job-dsl-plugin/

Selamat mencoba.

Estu~


Recovering MongoDB Database from Oplog

Shit happens occasionally. Last week, a MongoDB replication pair (master-slave) on production losts its databases. According to the investigation result, it caused by power failure that happened too often which lead to storage corruption. If the power failure happens while the replication set still syncing the oplog (operation logs), the database will be corrupted and MongoDB will drop it, without confirmation. The last backup managed at May 2015. Quite scary.

The log bellow is from master :

Tue Jan 17 16:56:31.800 [conn997] end connection slave:54531 (2 connections now open)
Tue Jan 17 16:56:31.813 [initandlisten] connection accepted from slave:54532 #998 (3 connections now open)
Tue Jan 17 16:56:34.102 [initandlisten] connection accepted from 95.211.153.138:47214 #999 (4 connections now open)
Tue Jan 17 16:56:36.381 [conn999] dropDatabase basisdata starting
Tue Jan 17 16:56:36.383 [conn999] removeJournalFiles
Tue Jan 17 16:56:36.933 [conn999] dropDatabase basisdata finished
Tue Jan 17 16:56:36.940 [conn999] command basisdata.$cmd command: { dropDatabase: 1.0 } ntoreturn:1 keyUpdates:0 locks(micros) W:558806 reslen:60 558ms
Tue Jan 17 16:56:37.225 [conn999] dropDatabase local starting
Tue Jan 17 16:56:37.261 [conn999] removeJournalFiles
Tue Jan 17 16:56:37.327 [conn999] dropDatabase local finished
Tue Jan 17 16:56:37.327 [conn999] command local.$cmd command: { dropDatabase: 1.0 } ntoreturn:1 keyUpdates:0 locks(micros) W:101854 reslen:56 101ms
Tue Jan 17 16:56:37.958 [conn3] getMore: cursorid not found local.oplog.rs 65856224222618
Tue Jan 17 16:56:37.976 [conn3] end connection slave:53578 (3 connections now open)
Tue Jan 17 16:56:38.184 [FileAllocator] allocating new datafile /var/lib/mongodb/WARNING.ns, filling with zeroes...
Tue Jan 17 16:56:38.184 [FileAllocator] creating directory /var/lib/mongodb/_tmp
Tue Jan 17 16:56:38.235 [FileAllocator] done allocating datafile /var/lib/mongodb/WARNING.ns, size: 16MB,  took 0.016 secs
Tue Jan 17 16:56:38.243 [FileAllocator] allocating new datafile /var/lib/mongodb/WARNING.0, filling with zeroes...
Tue Jan 17 16:56:38.260 [FileAllocator] done allocating datafile /var/lib/mongodb/WARNING.0, size: 64MB,  took 0.017 secs
Tue Jan 17 16:56:38.261 [FileAllocator] allocating new datafile /var/lib/mongodb/WARNING.1, filling with zeroes...
Tue Jan 17 16:56:38.261 [conn999] build index WARNING.WARNING { _id: 1 }
Tue Jan 17 16:56:38.269 [conn999] build index done.  scanned 0 total records. 0.008 secs
Tue Jan 17 16:56:38.270 [conn999] Assertion: 13347:local.oplog.rs missing. did you drop it? if so restart server
0xa6d3c6 0xa3fd3d 0xa23c4c 0x81cd2b 0x817bcd 0x7c3be1 0x7c8ed0 0x7ca5d6 0x5922ea 0xa544b1 0x7f0a5c5310a4 0x7f0a5a66c87d
Tue Jan 17 16:56:38.299 [FileAllocator] done allocating datafile /var/lib/mongodb/WARNING.1, size: 128MB,  took 0.038 secs
 /usr/bin/mongod(_ZN5mongo15printStackTraceERSo+0x26) [0xa6d3c6]
 /usr/bin/mongod(_ZN5mongo10logContextEPKc+0xfd) [0xa3fd3d]
 /usr/bin/mongod(_ZN5mongo11msgassertedEiPKc+0x9c) [0xa23c4c]
 /usr/bin/mongod() [0x81cd2b]
 /usr/bin/mongod(_ZN5mongo5logOpEPKcS1_RKNS_7BSONObjEPS2_Pbb+0x3d) [0x817bcd]
 /usr/bin/mongod(_ZN5mongo14checkAndInsertEPKcRNS_7BSONObjE+0x131) [0x7c3be1]
 /usr/bin/mongod(_ZN5mongo14receivedInsertERNS_7MessageERNS_5CurOpE+0x5e0) [0x7c8ed0]
 /usr/bin/mongod(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x1586) [0x7ca5d6]
 /usr/bin/mongod(_ZN5mongo16MyMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0xba) [0x5922ea]
 /usr/bin/mongod(_ZN5mongo17PortMessageServer17handleIncomingMsgEPv+0x471) [0xa544b1]
 /lib/x86_64-linux-gnu/libpthread.so.0(+0x80a4) [0x7f0a5c5310a4]
 /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f0a5a66c87d]
Tue Jan 17 16:56:38.301 [conn999] insert WARNING.WARNING keyUpdates:0 exception: local.oplog.rs missing. did you drop it? if so restart server code:13347 locks(micros) w:147507 116ms

And this is from slave :

Tue Jan 17 16:55:36.957 [initandlisten] connection accepted from master:41189 #573081 (6 connections now open)
Tue Jan 17 16:56:07.157 [conn573081] end connection master:41189 (5 connections now open)
Tue Jan 17 16:56:07.169 [initandlisten] connection accepted from master:41191 #573082 (6 connections now open)
Tue Jan 17 16:56:36.965 [repl writer worker 2] dropDatabase basisdata starting
Tue Jan 17 16:56:37.040 [repl writer worker 2] removeJournalFiles
Tue Jan 17 16:56:37.371 [conn573082] end connection master:41191 (5 connections now open)
Tue Jan 17 16:56:37.388 [initandlisten] connection accepted from master:41192 #573083 (6 connections now open)
Tue Jan 17 16:56:37.971 [rsBackgroundSync] repl: old cursor isDead, will initiate a new one
Tue Jan 17 16:57:07.604 [conn573083] end connection master:41192 (5 connections now open)
Tue Jan 17 16:57:07.616 [initandlisten] connection accepted from master:41193 #573084 (6 connections now open)
Tue Jan 17 16:57:12.445 [repl writer worker 2] dropDatabase basisdata finished
Tue Jan 17 16:57:12.446 [rsBackgroundSync] replSet syncing to: primer:27017
Tue Jan 17 16:57:12.484 [rsBackgroundSync] replSet sync source problem: 1000 replSet source for syncing doesn't seem to be await capable -- is it an older version of mongodb?
Tue Jan 17 16:57:12.503 [rsBackgroundSync] replSet syncing to: primer:27017

The team splitted to two, investigation and recovery. I was in recovery part, alone.

The first thing that flying in my mind when database got flushed and need to be recovered is stopping the service then finding any big files around. I simply do du -hs /var/lib/mongodb on both master and slave. The master has no hope but slave has quite huge size, around 22GB. They are files that named local.0, local.1, and so on. What is their purposes?

I copied all the files under var/lib/mongodb to isolated environment (Docker). I managed to run an instance of MongoDB with the copied database files then enter the mongo shell.

It has a database named local, with some collections. I counted the documents in each collections and oplog.rs has the most items, more than 900000 documents.

The doc looks like this :

{
  "ts": Timestamp(1462635333, 12646),
  "h": NumberLong("-9088484139601204321"),
  "v": 2,
  "op": "i",
  "ns": "basisdata.import",
  "o": {
    "id": 1462635222048,
    "type": "p",
    "data": {
      "NAMA_LGKP": "-------------",
      "ALAMAT": "-------------",
    },
    "_id": ObjectId("572e0b3e1116738144bf45eb")
  }
}

Nah, it’s the data that we seeked. op in the doc means operation, the are consist of insert, update and delete. Oplog is stands for operation log, where any operation in master that needed to be synced in slave stored. All the slave replset has oplogs.

Then I looked at to the range of timestamp :

> use local
switched to db local
> db.oplog.rs.find().sort({ts : 1}).limit(1)
{ "ts" : Timestamp(1462635333, 12646), "h" : NumberLong("-9088484139601204321"), "v" : 2, "op" : "i", "ns" : "basisdata.import", "o" : { "id" : 1462635222048, "type" : "p", "data" : { "NAMA_LGKP" : "----") }, "_id" : ObjectId("572e0b3e1116738144bf45eb") } }
> db.oplog.rs.find().sort({ts : -1}).limit(1)
{ "ts" : Timestamp(1485187231, 1), "h" : NumberLong("5020891137542662538"), "v" : 2, "op" : "u", "ns" : "basisdata.epr", "o2" : { "_id" : ObjectId("5880d47321e1a19014389954") }, "o" : { "id" : 1484838001848, "type" : "lp", "subType" : "l", "data" : {  "stage" : "done" }, "_id" : ObjectId("5880d47321e1a19014389954"), "hps" : 632.06 } }
>

The timestamp (it’s UNIX timestamp, do (new Date(1485187231 * 1000)).toString() in NodeJS to get the human-readable value) said it begins at Mei 2016 and ended at Januari 2017. Luckily, it matched with the last backup. So I just need to recover this that then merge it to the last backup.

On normal condition, the oplog could be replayed using official MongoDB tools, but it gave error oplog mode is only supported on full dumps. I can’t full-dump it since the master still being investigated. Both master and slave need to be up and connected when doing full-dump in replset.

So I created a simple script to replay all the oplog. Just exclude the culprit ( { op : { dropDatabase : 1 } } ).

The script is in Javascript :

const async = require('async');
const Db = require('mongodb').Db, Server = require('mongodb').Server;
var db1 = new Db('local', new Server('localhost', 27017));
var db2 = new Db('basisdata', new Server('localhost', 27017));


db1.open(function(err, db1) {
  db2.open(function(err, db2) {

    const oplog = db1.collection('oplog.rs');
    var col = {}
    col['import'] = db2.collection('import');

    var count = 0;
    var q = async.queue((doc, cb) => {
      count++;
      var colName = doc.ns.split('.')[1];
      console.log(count + ' : ' + doc.o._id + ' on ' + colName);
      if (!col[colName]) {
        console.log('Collection doesnt exist');
        console.log(colName);
        process.exit();
      }
      if (doc.op == 'i') {
        col[colName].insert(doc.o, (err) => {
          if (err && err.message && err.message.indexOf('E11000') < 0 ) {
            console.log(err);
            process.exit();
          }
          cb();
        })
      } else if (doc.op == 'u') {
        col[colName].findOneAndUpdate({_id : doc.o._id}, doc.o, (err) => {
          if (err && err.message && err.message.indexOf('E11000') < 0 ) {
            console.log(err);
            process.exit();
          }
          cb();
        })
      } else if (doc.op == 'd') {
        col[colName].remove({_id : doc.o._id}, (err) => {
          if (err && err.message && err.message.indexOf('E11000') < 0 ) {
            console.log(err);
            process.exit();
          }
          cb();
        })
      } else {
        cb();
      }
    }, Infinity)

    q.drain = function() {
      if (cursor.isClosed()) {
        console.log('All items have been processed');
        db1.close();
        db2.close();
      }
    }

    var limit = new Date('2016/05/10'); // Tentukan limit waktunya

    var ts = new require('mongodb').Timestamp(0, Math.floor(limit.getTime() / 1000))
    var cursor = oplog.find ({ts : { '$gte' : ts  } });
    cursor.each((err, doc) => {
      if (err) throw err;
      if (doc) q.push(doc);
    })
  })
})

The recovered database restored to prod then we sync it again from start.

Lesson learned

Backup anything daily!

Memasang Inkscape 0.92 di BlankOn X Tambora

Seperti yang telah kita ketahui bersama, awal bulan ini Proyek BlankOn telah merillis BlankOn seri kesepuluh yaitu BlankOn X Tambora. Dalam BlankOn X Tambora sudah tersedia berbagai aplikasi yang siap digunakan untuk kebutuhan sehari-hari, termasuk aplikasi grafis, dalam hal ini sudah menyertakan Inkscape .091.

Beberapa hari kemudian Pengembang Inkscape merillis Inkscape versi terbarunya, yaitu Inkscape 0.92, lha terus apa hubungannya?
Tidahk ada sih 

Beberapa teman ada yang bertanya, bagaimana cara install Inkscape 0.92 di BlankOn X Tambora?
Ah.... sebenarnya mudah saja kok, namun tetap saja ada beberapa teman yang tidak berani  ambil resiko install Inkscape 0.92 di komputernya

Berikut ini catatan singkat cara memasang Inkscape 0.92 di BlankOn X Tambora.

Sebelum melakukan langkah ini sebaiknya baca artikel Cara Menambahkan Repository Debian ke BlankOn X Tambora, karena artikel ini merupakan lanjutan dari artikel tersebut. 

Langkah pertama adalah menghapus Inkscape 0.91 yang sudah terpasang secara baku, karena cara inilah yang paling mudah dilakukan. Pemulis pernah mencoba upgrade secara langsung dari Inakcap 0.91 ke 0.92 dan hasilnya gagal total.
Untuk menghapus Inkscape 0.91 di BlankOn X Tambora dapat dilakukan dengan dua cara, yaitu melalui Terminal dan Synaptic Manager Paket. Dalam contoh tulisan ini menggunakan Synaptic Paket Manager, alasannya kalau pakai Terminal nanti dikira Hacker.

Untuk membuka Synaptic Manager Paket dapat dilakukan dengan klik Menu Utama BlankOn => Administrasi => Synaptic Manager Paket.


Setelah Synaptic Manager Paket terbuka, lakukan pencarian aplikasi Inkscape 0.91 yang akan dihapus, caranya klik tombol Cari, pada kotak kecil yang tampil ketik kata kunci Inkscape, kemudian tekan Enter atau klik tombol Cari, tunggu beberapa saat hingga aplikasi ditemukan.

Langkah selanjutnya adalah memilih aplikasi yang akan dicabut (dalam hal ini inkscape), caranya seperti berikut: klik kanan tulisan Inkscape, pilih Tandai untuk Dicabut Habis, maka segera tampil konfirmasi Tandai yang lain? untuk melakukan pencabutan suatu aplikasi berikut beberapa paket lainnya, klik tombol Tandai


Maka segera tampil jendela konfirmasi untuk menerapkan operasi yang akan dilakukan, klik tombol Apply untuk menerapkannya.


Sesaat setelah tombol Apply ditekan maka proses pencabutan aplikasi segera berlangsung, tunggu prosesnya hingga selesai
Langkah selanjutnya adalah melakukan pembaruan paket atau memuat ulang repository pada Synaptic, karena jika langsung melakukan pemasangan Inkscape 0.92 akan terjadi error atau galat sepeti gambar di bawah ini

Klik tombol Muat Ulang (reload) pada pojok kanan atas di bawah Menu Bar pada Synaptic


Maka preses menguduh paket dan pembaruan Repository berlangsung, tunggu hingga selesai.

Setelah proses pembaruan repository selesai, saatnya untuk memasang Inkscape 0.92, caranya sebagai berikut;
  • Klik tombol Cari, pada kotak kecil yang tampil ketik kata kunci Inkscape, kemudian tekan Enter atau klik tombol Cari, tunggu beberapa saat hingga aplikasi ditemukan.
  •  Langkah selanjutnya adalah memilih aplikasi yang akan dipasang (dalam hal ini inkscape), caranya klik kanan tulisan Inkscape, pilih Tandai untuk Dipasang.


  •  Maka segera tampil konfirmasi Tandai yang lain? untuk melakukan pencabutan dan pemasangan suatu aplikasi berikut beberapa paket lainnya, klik tombol Terapkan (Apply).

Sesaat setelah tombol Apply diklik maka proses pemasangan aplikasi beserta paket lainnya segera berlangsung, tunggu prosesnya hingga selesai. Lamanya proses pemasangan tergantung seberapa besar paket yang diunduh dan kecepatan Internet yang digunakan.

Jika ketika proses pemasangan Inkscape berlangsung, muncul konfirmasi untuk memperbarui paket lain klik tombol Forward, dalam hal ini terjadi pembaruan pada Debconf-editor yang digunakan penulis untuk mengatur tampilan Ikon pada submenu Aplikasi.

Jika muncul kembali konfiramsi seperti gambar di bawah ini, klik tombol Forward untuk melanjutkan proses pemasang
Maka proses pemasangan dan pencabutan perangkat lunak berlangsung kembali, tunggu hingga selesai, jika sudah selesai klik tombol Close.

Catatan:
  • Agar Anda tidak perlu menekan tombol Close setelah proses pemasangan perangkat lunak selesai, beri tanda centang pada kotak Automatically close after the changes have been successfully applied 
Setelah proses pemasangan aplikasi selesai, tutup Synaptic Paket Manager.
Seperti yang sudah diketahui bersama, bahwa aplikasi yang baru saja di pasang pada BlankOn X Tambora tidak secara otomatis muncul pada menu aplikasi pada Panel Kiri, sehingga aplikasi tersebut dapat langsung digunakan. Agar aplikasi yang baru saja dipasang muncul pada menu, lakukan logout Destop Manokwari yang Anda gunakan, kemudian masuk kembali ke Destop.
Cara lainnya untuk memunculkan aplikasi yang baru saja selesai dipasang pada menu dapat dilakukan melalui Terminal dengan perintah $ pkill manokwari


 Di bawah ini adalah tampilan Inkscape 0.92 yang setelah berhasil dirpasang pada BlankOn X Tambora


Demikian tutorial singkat Cara  Memasang Inkscape 0.92 di BlankOn X Tambora yang dapat penulis sampaikan pada tulisan singkat kali ini, sampai jumpa pada tulisan lainnya.

Enable Right Click with Two Fingers at X240

slackware-logoOS: Slackware64 14.2
Device: Thinkpad x240
After testing many tutorials, found at Archlinux Wiki

# synclient TapButton2=3

Source:
[0] https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X240
[1] https://wiki.archlinux.org/index.php/Touchpad_Synaptics

Estu~


Mengapa Sangat Penting bagi Kendaraan Roda Empat untuk Tidak Parkir di Jalur Sepeda

Sebagian gambar diambil dari : http://www.theage.com.au/victoria/modify-the-roading-system-to-make-it-safer-for-cyclists-says-roads-expert-20150815-gizzfw.html

Baduy in The Wild

In the wild, karena ia seorang diri di salah satu kota sibuk di Indonesia. Kota bising ini pastilah tempat antah berantah buatnya. Ini adalah kisah beberapa minggu yang lalu, ketika saya berjumpa dengan seorang suku Baduy di pinggir jalan Margonda Depok pada siang bolong.

Saya melihatnya persis setelah turun dari angkot. Dia mengenakan pakaian serba putih, lengkap dengan penutup kepala dan tas selempang. Tentunya tanpa alas kaki. Salah satu tangannya menggenggam botol madu.

Ketika saya mendekatinya, dia menawarkan madunya. Harganya Rp. 150.000. Saya tidak tidak tahu itu murah atau mahal. Saya juga tidak tahu itu madu asli atau tidak. Saya tidak pernah membeli madu sebelumnya. Tapi saya membelinya karena ingin membuat hatinya senang sejenak dan agar membiarkan saya bertanya-tanya.

Dia sudah 2 minggu meninggalkan Baduy. Saya pikir Baduy tidak diperkenankan meninggalkan komunitasinya. Katanya dia sudah minta izin sama tetuanya. Berarti Baduy dalam atau luar? Saya tidak bertanya lebih banyak karena Bahasa Indonesianya tidak lancar. Saat menghitung uang kembalian, dia juga agak lama.

Sampai rumah, saya googling cara membuktikan madu asli dan mencobanya bersama teman saya. Ini beneran asli.

Using IPEGA PG-9025 Bluetooth for Steam at BlankOn X Tambora

Saya memilki Joystick IPEGA ini karena bergabung dengan Pengembang BlankOn. 😀

Langsung saja.

  1. Pasang paket berikut:
    $ sudo apt install -y xboxdrv 
  2. Hubungkan Ipega dengan dengan komputer/laptop anda, caranya tekan tombol X + Home sampai lampu led berkedip.
  3. Buka pengaturan bluetooth dan cocokan
  4. Setelah Ipega terhubung cari Nomor device ( /dev/input/eventXX ) dengan cara
    $ cat /proc/bus/input/devices 

    akan tampil seperti ini

  5. Ubah pengaturan vboxdrv agar sesuai dengan ipega dengan cara berikut :
    $ sudo xboxdrv --evdev /dev/input/eventXX --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_Z=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_A=a,BTN_B=b,BTN_X=x,BTN_Y=y,BTN_TL=lb,BTN_TR=rb,BTN_TL2=lt,BTN_TR2=rt,BTN_THUMBL=tl,BTN_THUMBR=tr,BTN_SELECT=back,BTN_START=start --silent & 

    jangan lupa ubah /dev/input/eventXX sesuai pada poin ke empat

  6. Buka Steam big picture mode pada tahap ini Ipega telah dapat digunakan.

Jika ada pertanyaan silakan berkomentar dibawah. 😀

Selamat mencoba.

 

Sumber :

  • https://steamcommunity.com/app/221410/discussions/0/558748653738497361/
  • https://drive.google.com/file/d/0B2SVXPgdVdQ1SEkxR2hYOU1iVW8/view

The post Using IPEGA PG-9025 Bluetooth for Steam at BlankOn X Tambora appeared first on Aris Winardi.

Menjadi Pengembang BlankOn

Apa itu Pengembang BlankOn?

Pengembang BlankOn adalah manusia-manusia yang aktif berkontribusi dan ingin membangun negeri dengan cara yang berbeda serta keahliah yang berbeda. Mereka terkumpul dalam sebuah kelompok yang bertujuan mencerdaskan kehidupan bangsa dan ikut menertibkan dunia. Kelompok ini menghasilkan orang-orang yang cerdas, canggih, mandiri serta berbudi pekerti yang luhur. Selain itu menghasilkan efek samping berupa distribusi sistem operasi berbasis Linux dengan cita rasa nusantara. Kegiatan atau proyek tersebut bernama BlankOn.

BlankOn sendiri bisa diterjemahkan topi belangkon, namun kecenderungannya adalah Blank dan On. Di mana artinya dari keadaan ‘mati’ ke ‘nyala/hidup’. Dengan bahasa yang universal “from zero to hero”.

Proyek BlankOn sendiri dimulai sejak Februari 2005.

Kenapa Saya Bergabung dengan BlankOn?

Saat itu, kehidupan saya tidak seperti sekarang. Kondisi masih terlalu awam dan labil. Yang terpikir hanya saya harus belajar hal-hal yang teman-teman saya belum bisa. Seiring waktu, saya mendapatkan banyak pengetahuan dari teman-teman yang lebih senior lainnya.

Saya mengidolakan beberapa teman-teman yang sudah terlebih dahulu berada di Proyek BlankOn. Mereka keren dan baik dalam kehidupan sehari-hari ataupun dalam hal-hal teknis. Namun umumnya, saya ingin seperti mereka. Contoh sederhana, saya ingin seperti pak Mdamt ataupun pak Fajran yang saat itu punya ‘mainan’ banyak. Bapak berdua itu juga tidak pelit dalam hal berbagi ilmu ataupun mainan.

Saya juga bermimpi bisa membawa para Pengembang BlankOn ke tingkat yang lebih tinggi sehingga yang tidak pinter seperti saya, bisa ikut maju dan menjadi orang yang bermanfaat bagi sekelilingnya.

Obsesi tersebut beraneka macam jalannya, salah seorang mantan atasan saya pernah bilang “pengguna linux itu nantinya harus keren, laptop pakai Mac, ndak pakai sandal jepit bulukan, dan kalo perlu punya Ducati”. Ujaran tersebut begitu mengena dan berusaha saya terapkan. Kesemuanya sudah terpenuhi kecuali yang terakhir (tapi punya yang kelas bawah). Hahaha.

Manfaat

Bagi saya, saya sudah menganggap BlankOn ini sebagai keluarga. Bisa juga ini menjadi sekte sendiri. Saya tidak gampang berteman dengan orang, namun dari BlankOn ini saya jadi memiliki banyak teman baik. Banyak teman banyak rezeki.

Selain itu, saya jadi dikenal banyak orang karena aktif sebagai Pengembang BlankOn, efek sampingnya, gampang mencari pekerjaan (dalam beberapa waktu, malah sering kelimpahan banyak pekerjaan).

Di dunia komunitas, rekan-rekan yang lebih berpengalaman mendorong saya dan yang lainnya untuk aktif ke proyek hulu (upstream). Menjadikan saya dan yang lainnya bisa ikut kontribusi dalam tingkatan dunia. Ketemu para pengembang dari berbagai negara, juga bisa berkunjung ke berbagai negara.

Saya tidak akan bisa menjadi seperti sekarang ini tanpa ada teman-teman Pengembang BlankOn.

Ah itu dulu dah yang terpikir setelah semalem mengumumkan pensiun menjadi Pengembang BlankOn. Kalau ada yang ditanyakan, bisa komentar di bawah.

🙂


Cara Menambahkan Repository Debian ke BlankOn X Tambora

Belum lama ini Proyek BlankOn merillis Distro BlankOn terbarunya, yaitu BlankOn X Tambora. Kemudian beberapa teman pengguna baru bertanya, apakah di BlankOn bisa menambahkan PPA seperti di Ubuntu?
Pertanyaan ini biasanya muncul karena pengguna tersebut ingin memasang aplikasi terbaru yang belum tersedia di Lumbung Paket (repository) resmi BlankOn, misalnya ingin memasang Inkscape 0.92.

Jawabannya adalah, di BlankOn tidak bisa menambahkan PPA seperti di Ubuntu, karena BlankOn bukan turunan Ubuntu, kalau kata pak Manajer Rillis sih beda Mazab.

Lalu bagaimana caranya agar pengguna dapat menggunakan aplikasi terbaru?
Cara yang saya tempuh adalah dengan menambahkan Repository Debian unstable (testing).
Dengan menggunakan cara ini selain dapat memasang aplikasi terbaru, kita juga dapat memang aplikasi tertentu yang tidak tersedia di lumbung paket resmi BlankOn, atau aplikasi di Repository BlankOn sedang rusak dan belum ada yang memperbaiki, misalnya yang seperti saya alami tadi pagi ketika ingin memasang Krita


Berikut ini penjelasan singkat cara menambahkan repository Debian ke BlankOn Tambora, dalam contoh saya menambahkannya lewat terminal dengan mode Gedit, karena cara ini lebih mudah untuk dipahami dan diikuti oleh pemula, untuk pengguna tingakt lanjut dapat menggunakan mode vim atau nano, hasilnya sama saja kok.
Buka Terminal dengan cara klik Menu Utama BlankOn => Perkakas Sistem => Terminal, Setelah terminal terbuka, ketik sudo gedit /etc/apt/sources.list untuk membuka daftar list repository dengan gedit.
Ketik sandi  (password) Adminstrator komputer yang Anda buat ketika memasang BlankOn, ketika Anda mengetik sandi tidak akan muncul, lanjut saja, kemudian tekan tombol Enter.
Maka setelah Anda menekan tombol Enter, segera tampil list repository lewat gedit seperti di bawah ini
Langkah selanjutnya adalah menambahkan repository milik Debian unstable dan testing ke source.list seperti di bawah ini
# Testing repository - main, contrib and non-free branches
deb http://http.us.debian.org/debian testing main non-free contrib
deb-src http://http.us.debian.org/debian testing main non-free contrib


# Testing security updates repository
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free


# Unstable repo main, contrib and non-free branches, no security updates here
deb http://http.us.debian.org/debian unstable main non-free contrib
deb-src http://http.us.debian.org/debian unstable main non-free contrib
Maka daftar source.list pada repository menjadi seperti gambar di bawah ini

Jika source.list Debian sudah selesai ditambah, simpan perubahan tersebut dengan klik tombol Simpan, kemudian tutup gedit

Langakh selanjutnya adalah melakukan pembaruan (update) repository, salah satu caranya adalah dengan mengetik perintah sudo apt-get update melalui terminal.

Tunggu proses pembaruan repository hingga selesai

Setelah proses pembaruan (update) repository selesai, tutup terminal. Sampai langkah iini proses penambahan Repository Debian sudah selesai, Anda dapat langsung memasang aplikasi tertentu melalui terminal dengan perintah apt-get instal nama_aplikasi

Bagi pengguna mahir, pemasangan aplikasi lewat terminal sebenarnya  tidak sulit, namun untuk pemula tentunya tidaklah mudah.
Untuk mempermudah pemasangan suatu aplikasi (terutama pemula) dapat menggunakan Synaptic Paket Manager, caranya klik Menu Utama BlankOn => Administrasi => Synaptic.
Ketik nama aplikasi pada kotak pencarian cepat. Aplikasi ini menampilkan daftar paket perangkat lunak secara detail. Selain itu, Anda juga bisa menambah dan menghapus aplikasi, Anda juga bisa melakukan hal yang sama untuk pustaka sistem yang tersedia.

Untuk menandai paket perangkat lunak yang ingin dipasang, klik kanan pada aplikasi yang akan dipasang lalu pilih menu Tandai untuk Pemasangan.

Tunggu proses pemasangan hingga selesai, lamanya proses pemasangan tergantung seberapa besar aplikasi yang dipasang dan kecepatan internet yang Anda gunakan.
Setelah proses pemasangan selesai, tutup Synaptic Paket Manager dan semua aplikasi yang masih berjalan, logut dari destop dan login kembali untuk dapat menggunakan aplikasi yang telah berhasil dipasang.



Demikian tutorial singkat Cara Menambahkan Repository Debian ke BlankOn X Tambora yang dapat penulis sampaikan pada post singkat ini, sampai jumpa pada tulisan lainnya.

Manokwari Shell (Tidak Resmi)

Manokwari adalah desktop bawaan BlankOn,, berikut adalah tampilan standar dari manokwari

manokwari-asli

Manokwari Versi Standar bawaan BlankOn

karena ada versi yang batal dirilis, tidak ada salahnya saya menggunakan Manokwari Versi abal2 ini, dan inilah penampakannya.

kalender

Manokwari Tidak Resmi dengan tampilan kalender dan pengaturan cahaya

kanan

Panel Kanan On Top Aplikasi

Ow ya, jika pengen coba bisa di Unduh diisini, dan maaf hanya tersedia arch amd64.

Cara pasang:

0. Unduh

1, sudo dpkg -i manokwari_1.0.13-0blankon1%2bamira1_amd64.deb

2. pkill manokwari dan berubah,


Chip Pico8 Riviu

Akhir bulan lalu datang barang pesanan saya yang sejak 4 bulan lalu saya pesan yang sempat mengalami kesalahan teknis. Pesanan tersebut berupa 2 mesin yang masing-masing seharga 9 dolar, mesin termurah yang pernah saya beli. Berikut penampakan barangnya.

Chip Pico8 9 Dolar

Berikut tuangan layar dari salah satu mesin yang telah beroperasi.

Chip Pico9 with MariaDB

Desain dan Bentuk Perangkat

Perangkat ini adalah perangkat kedua terkecil yang saya punya setelah Arduino Nano. Bentuk kompak dan mungilnya cukup menarik hati saya sejak awal selain harganya.

Selain itu mesin ini di desain sebagai sebuah kumputer siap pakai. Tidak perlu perangkat tambahan lain untuk melakukan komputasi selain catu daya.

Setup

Cara konfigurasi mesin ini lebih mudah dari mesin yang telah saya punya sebelumnya, RaspberryPi dan BananaPi, karena tidak memerlukan adanya tambahan perangkat. Dan dengan dukungan headless-mode saya tidak memerlukan perangkat aneh-aneh untuk membuatnya berfungsi, cukup dengan minicom /dev/ttyACM?, dimana ? merupakan nomor yang muncul ketika terdeteksi oleh mesin.

Untuk pengguna Windows bisa menggunakan cara dari Dexter Industries.

Kelebihan dan Kekurangan

Kelebihan perangkat ini sudah saya sebutkan diatas, yaitu: bentuk kompak, harga murah, siap pakai dan kemudahan setup. Sedangkan kekurangannya adalah prosesor tunggal, dan media penyimpanan yang minim.

Tapi apa yang bisa dituntut dari komputer seharga 9 dolar?

Mari mengoprek. Biar komputernya kerja.

OpenBSD bricks Sun Enterprise M3000

Bricks? bata? hahahaha bukan. tapi rusak dan tak dapat dipakai sama sekali. Istilah ini umumnya dipakai dalam peralatan-peralatan elektronika yang memiliki sistem operasi atau firmware di dalamnya.

Pertengahan Juli lalu, aku diundang oleh seorang kawan untuk ngoprek sebuah server antah berantah yang aku sendiri tak yakin bisa mengoperasikan. Server itu adalah rackmount server 2U Sun Enterprise M3000, yang berarsitektur sparc Awalnya aku memandu dia untuk menyalakan server tersebut, yang ternyata tidak semudah server x86 biasa. harus ada serangkaian ritual yang harus dilaksanakan, yaitu dengan mengetik sesuatu lalu memutar kunci, dan menekan tombol Enter. Tidak ada port VGA untuk menampilkan local console, hanya terdapat serial console.

Berbagai sistem operasi akhirnya kucari untuk dapat menghidupkan server antah berantah ini, sampai pada akhirnya pilihanku jatuh pada OpenBSD. pada saat mode LiveCD, segalanya berjalan dengan lancar, hingga saat instalasi dimulai. sebelumnya aku telah membaca postingan milis yang mengatakan bahwa ternyata instalasi OpenBSD di server ini membuat motherboardnya fault. Hmmm... sialan bener dah. dan kami segera menghentikan segala kegiatan ngoprek kami hari itu juga hahaha

The Professionals [ Spoiler Alert ] dan HSM

Karena cukup puas dengan Headshot (meskipun tidak sebagus seri The Raid), saya beranggapan bahwa film laga Indonesia sudah membaik dan memutuskan untuk lanjut menonton The Professionals. Saya tertarik terutama karena trailernya memperlihatkan aksi tim yang direncanakan dengan rapi dan ada scene meretas komputer. Jadi penasaran, mereka ngapain aja.

Namun ternyata tidak sesuai ekspektasi. Saya tidak akan mengulas tentang kualitas film dan plotnya, hanya sisi teknis mengenai “dongle”. Peringatan : paragraf di bawah ini mengandung spoiler.

Dua tokoh sentral di sini adalah Abi dan Reza. Keduanya telah membangun perusahaan namun karena skandal perusahaan, Abi dikorbankan dan dipenjara. Setelah bebas, Abi membentuk tim untuk membalaskan dendamnya, yaitu dengan mendapatkan data-data perusahaan yang dilindungi Reza untuk diserahkan ke kepolisian. Nah, data tersebut dilindungi oleh “dongle”.

Yang dimaksud dengan dongle di film ini adalah HSM (Hardware Security Module), yang digunakan untuk menyimpan kunci privat dari pasangan kunci yang ada. Pada praktiknya, kunci privat bisa digunakan untuk membuka sebuah sistem tertentu atau data yang terenkripsi oleh pasangan kunci publiknya. Bentuk HSM bermacam-macam, ada yang berbentuk seperti mesin server sampai ukuran kecil seperti USB Flashdisk.

Saat tim Abi mendapatkan dongle yang pertama, mereka mestinya bisa mengenali bahwa itu hanya flashdisk biasa, karena vendor HSM berbeda dengan vendor USB Flashdisk kebanyakan, misalnya daftar vendor yang didukung oleh pustaka OpenSC.

Saya sudah curiga sejak Reza pegang-pegang iPhone 6 setelah mengamankan dongle-nya. Sebelumnya, beberapa scene film menunjukkan bahwa Reza sangat konsisten dengan ponsel lamanya (iPhone 4) dan selalu membawa-bawa. Namun menyimpan kunci privat ke sistem lain (ponsel pintar, di filesystem) tidak sama dengan menyimpan kunci privat di HSM.

Begitu tim Abi mendapatkan dongle, tidak semudah itu menggunakannya untuk membuka sistem atau enkripsi, karena HSM dilindungi PIN sebagaimana kunci privat dilindungi passphrase.

Anggaplah tim Abi sudah mendapatkan PIN-nya sejak memasang kamera pengintai dan mengawasi ketikan Reza di Macbook-nya. Namun saat dani diminta mengembalikan data dan Dani bilang ia perlu dongle, saya rasa ini tidak tepat.

Pada praktiknya, jika menggunakan HSM, maka kunci privat disimpan di suatu tempat yang aman, untuk jaga-jaga jika HSM hilang atau rusak. Bisa disimpan sebagai HSM cadangan maupun disimpan di tempat tertentu sebagai berkas sistem. Misalnya, saya menyimpan kunci privat SSH di suatu tempat dan jika saya kehilangan komputer jinjing, saya masih bisa mendapatkan akses ke server-server yang saya gunakan untuk bekerja, yaitu dengan kunci privat yang dicadangkan tersebut.

Jadi, meskipun donglenya sudah dicuri oleh Abi, Reza masih bisa menyuruh Dani membuat HSM lain dengan alinan kunci privat yang sudah diamankan. Jika Dani tidak menyimpan kunci privat cadangan maka IQ-nya yang 130-an perlu dipertanyakan.

Dan apa yang diminta Reza ke Dani sebenarnya tidak masuk akal. Apa yang mau dikembalikan? Data yang terdekripsi dan sudah disalin ke media lain dalam keadaan daring tidak mungkin ditarik kembali. Dalam kasus ini, data sudah disalin oleh Abi ke USB Flashdisk untuk diserahkan ke kepolisian.

Saya memberi nilai 4/10.

Belajar R part 1.

Suatu hari terjadi percakapan kecil antara saya dan teman saya. Hingga pada suatu waktu dia bertanya, begini kira kira percakapannya (nama orang dan jenis OS tersamarkan)

X : ka, coba ajarin gimana sih cara pakai R?

Saya : gini, lu coba install dulu R nya udah belum?

X : Ok … (Menunggu waktu instalasi …) Sip, udah. Abis itu gimana?

Saya : lu buka terminal tuh, trus lu ketik “R” gitu tanpa tanda kutip .

X: nah, udah nih, trus gimana lagi?

Saya: kalo udah lu ketik quit(). Gampang kan.

X: 😥


Filed under: Uncategorized

js2py

This week I’m playing with MPI and small Raspberry Pi cluster. Parallel coding was fun! The problem that I’m trying to solve is a BFS pathfinding algorithm. I want to make the solution done in bi-directional finding with the help of parallel computing.

I’ve wrote the code some years ago in Javascript and now need it run in Python with mpi4py. Since I’m too lazy to port the code, I seek for an automate solution and found this js2py library. This is awesome.

>> import js2py
>> js2py.eval_js6('console.log("hello world")')

Even it can transpile the entire JS file to Python

>> js2py.translate_file('foo.js', 'foo.py')

The transpiled code looks like this :

    def PyJsHoisted_determine_path_(this, arguments, var=var):
        var = Scope({u'this':this, u'arguments':arguments}, var)
        var.registers([u'yy', u'aa', u'xx', u'bb', u'zz'])
        pass
        pass
        pass
        var.put(u'xx', var.get(u'target'))
        pass
        var.put(u'aa', (var.get(u'pohon').get(u'length')-Js(1.0)))
        #for JS loop
        var.put(u'bb', var.get(u'aa'))
        while (var.get(u'bb')>Js(0.0)):
            try:
                if (var.get(u'pohon').get(var.get(u'bb')).get(u'anak')==var.get(u'xx')):
                    var.put(u'xx', var.get(u'pohon').get(var.get(u'bb')).get(u'ortu'))
                    var.get(u'path').callprop(u'push', var.get(u'xx'))
            finally:
                    (var.put(u'bb',Js(var.get(u'bb').to_number())-Js(1))+Js(1))
        #for JS loop
        var.put(u'yy', Js(0.0))
        while (var.get(u'yy')<var.get(u'path').get(u'length')):
            try:
                var.get(u'land').get((var.get(u'parseInt')(var.get(u'path').get(var.get(u'yy')))-Js(1.0))).put(u'state', Js(u'white'))
            finally:
                    (var.put(u'yy',Js(var.get(u'yy').to_number())+Js(1))-Js(1))
        var.get(u'console').callprop(u'log', (Js(u'result : ')+var.get(u'path')))

Hardly unnreadable, of course.

But,

The performance of the result script is too slow! And I ended up with porting the code manually for an hour. u_u

[bash] Make a random password in terminal

Tulisan ini sebagai pengingat diri untuk membuat password yang kuat dengan mengandalkan perintah yang ada di bash. Mungkin bisa menambah pengalaman bagi anda.

Berikut caranya :

  • Menggukanan kombinasi perintah echo , md5sum dan base64
    $ echo "ini text password saya" | md5sum | base64 | head -c10 ; echo 

    * pada tulisan ini text password saya, bisa diubah menjadi kata/kalimat yang mudah diingat oleh anda
    * pada -c10 bisa diubah panjang password nya sesuai keinginan anda

  • Menggunakan fitur /dev/urandom
    $ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c10 ;echo; 
    $ tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
    

    * pada -c10 bisa diubah panjang password nya sesuai keinginan anda
    * pada -w30 bisa diubah panjang password nya sesuai keinginan anda

    cara lain menggunakan /dev/urandom

    $ strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo
    

    bisa juga yang simple seperti ini

    $ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6
    
  • Yang ini menggunakan funsi rand pada openssl. yang mungkin tidak terpasang secara bawaan pada sistem operasi anda
    $ openssl rand -base64 32
  • Menggunakan pwgen
    $ sudo apt-get install pwgen 
    $ pwgen
    Aica0yei chaeW1ja shoh9uoB ta4phaiZ iePa0ooc etapeeL1 wae4Iung baiH5sai
    timou1Ph ohw2Ahxu aiW1ohfe iemae9Th Vuf1iu7a eipu9ooM ieth1ohR hew9aePh
    yoc2Quee ze7Pei4o Iloo7aeg MooNg5ph Vus4phia gi3uQu3f ue4Aibai Yeinga0i
    aitooSh3 DooSePh4 see9Eiyi OhNg2che XeeX6iGi chei5Lei aecieFe3 egh8gaiZ
    QuoRaiz0 Zeejai8A Zefoogh8 boYae6ag aeka7eTh tie3daiD aSei4oe1 pae8Aeke
    Ichahd6o ChaiB2oh Coeth3ai coTho5qu vaKa6she eveeZah3 Rea0ogoo aht3ueXo
    uuVaph0p zaeY1phi gieFo3ph Uphaiwe0 quoo9ieK sheeR0ae Cae2oihe aiFeiZ0g
    faiFae9u Eewoh0pe Mai3eere fauWee4i ieluL7ae Mohxah6o Ujeev8oo Eiv6ees0
    ieB0aix9 go6it9Pa eiWee9ew eesai4Ei lieN9Ni9 Eic0ooya theuMah8 bie7Wedu
    eikai5Ue Jai3deep aiN9Da1i weer2fuT NahSh9ph lioteeL8 ahFa4eud teeh9uuY
    Aegher5u Isheib9E iGhee8ca aSha0Kae kaePh9Xo Een6ieNg iMeegh8a ohChiiw4
    da9iJah2 Eim9naeh gohl8Wah liePes3n ahThooL0 Ei5aejiv Su0madah aeph8Fie
    Eezujei1 Meca7tha Rahj3tee In8coh6x eiCh0ooc yuLai4oh Aid6eig1 buShooV0
    meaTahR4 Aewo0aa6 xaeS5xei joo9yuMo taiJoh4a Ogh0uefo ouZ9wae0 ohT4EoGh
    jieYu2ai oQu5Rai2 douNi9yu mohie1Zu iePhee8h aibohS8f Dei7shee Eec0cood
    oY4buive Ooquaju2 Aevo5rai duvi0Tui daixaeT8 Ong6uuSh aeShahk5 Aibahth3
    ceiLuoz3 nohS9kei Ieph4loh Iemeux5S Cheuf2ee Vieg8ipu quugei3K nau4Chu8
    JeeXie5u fel9Uo1z ooMozuo2 joh1Lae2 Eib8KohX daeyo4Ti Wee1he9S eefe6WaX
    Tiulei6u Phieboh1 duaHae4o eiFag9io ooZe9eix aesh3Jie ooca5ieB iYooxah2
    Noofo6sh eiph8Ech oequ8Oj7 phijaeC4 boh9Ohhi aip9ooNa ei8Eiy1l gahbei3P
    
    
  • Menggunakan makepasswd
    $ sudo apt-get install makepasswd
    $ makepasswd --count 5 --chars 32
    FMPp05phTpVrm80Cexa0Jv1UDvXwU5Sr
    UD8J8EL7UgUCCmIjL6IqGN2ImnGebDjR
    aRGnbhfdIi5YAwqnb1nnAJ4x1C3b48PL
    orreMBDCv5EVVP0cU4ndDQr1q0dnJGjD
    0WG12JpH0aijg88T4NbiT86z7J3X2URE
    

Itulah beberapa cara yang bisa digunakan untuk membuat password.

Selamat hari Senin

The post [bash] Make a random password in terminal appeared first on Aris Winardi.