Google Cloud: Setup HTTP Load Balancer

Selamat malam!

Pada jurnal ini saya ingin berbagi mengenai langkah-langkah bagaimana membuat dan mengkonfigurasi load balancer di Google Cloud Platform. Goal pada jurnal ini adalah client akan secara bergantian mengakses ke dua vm website yang berbeda secara bergantian atau tergantung ketersediaan si website.

Langsung saja ya!

Pertama, set default untuk zona dan region pada cloud shell. Ini agar resource yang akan dibuat berada di zona yang sama. Serta buat file startup.sh untuk startup-script vm. File ini merupakan apa saja yang ingin dijalankan saat vm dibuat, terlihat akan menginstal nginx dan mengubah tampilan default website menjadi Welcome to Google Cloud Platform – $HOSTNAME . Hostname akan menyesuaikan hostname vm.

gcloud config set compute/zone {zona}
gcloud config set compute/region {region}

cat << EOF > startup.sh
#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
EOF

Lalu buat instance-template bernama nginx-template dan gunakan file startup.sh tadi sebagai startup-script:

gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh

Buat target-pool bernama nginx-pool:

gcloud compute target-pools create nginx-pool

Lalu buat instance-group bernama nginx-group. Dalam grup instance ini akan dibuat vm sejumlah dua dan konfigurasi vm disesuaikan dengan template nginx-template yang dibuat sebelumnya.

gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool

Verifikasi instance telah dalam keadaan running:

gcloud compute instances list

Lalu buat firewall-rules untuk allow ingress port 80:

gcloud compute firewall-rules create www-firewall --allow tcp:80

Selanjutnya buat forwarding-rules untuk target-pool nginx-pool yang telah dibuat. IP address dari forwarding-rules inilah yang akan digunakan client untuk mengakses website. Jadi, dua buah website akan diakses dari satu IP publik saja.

gcloud compute forwarding-rules create nginx-lb \
--region us-east1 \
--ports=80 \
--target-pool nginx-pool

Jangan lupa verifikasi:

gcloud compute forwarding-rules list

Lalu buat health-check. Ini digunakan oleh si load balancer untuk mengecek apakah website dalam keadaan OK (kode 200 OK) dan dapat diakses. Ketika health check mengecek website pertama dan statusnya bukan 200 OK, maka akses akan dialihkan ke website kedua.

gcloud compute http-health-checks create http-basic-check

Lalu atur set-named-port pada instance-group agar port 80 di allow.

gcloud compute instance-groups managed \
set-named-ports nginx-group \
--named-ports http:80

Buat backend service dan attach ke instance group:

gcloud compute backend-services create nginx-backend \
--protocol HTTP --http-health-checks http-basic-check --global
gcloud compute backend-services add-backend nginx-backend \
--instance-group nginx-group \
--instance-group-zone us-east1-b \
--global

Buat URL map bernama web-map:

gcloud compute url-maps create web-map \
--default-service nginx-backend

Buat target HTTP proxy dan tautkan ke url map yang telah dibuat:

gcloud compute target-http-proxies create http-lb-proxy \
--url-map web-map

Buat forwarding rule dan gunakan target HTTP proxy yang telah dibuat.

gcloud compute forwarding-rules create http-content-rule \
--global \
--target-http-proxy http-lb-proxy \
--ports 80

Verifikasi:

gcloud compute forwarding-rules list

Untuk pengujian, akses website nginx menggunakan external IP dari vm:

Coba reload browser:

Terlihat hostname berubah, menandakan browser mengakses ke dua vm yang berbeda secara bergantian.

Sekian!

Migrasikan Konten Django Lama ke Jekyll

Para pengembang BlankOn Linux saat ini telah menggunakan Jekyll untuk beberapa situsnya, salah satunya adalah laman http://blankon.id. Penulisan konten berbasis Markdown dan situs statis merupakan pilihan yang diambil setelah beberapa tahun sebelumnya para pendahulu menggunakan Django untuk sebagian besar website mereka. Konsekuensinya konten-konten website lama yang berbasis Django tersebut perlu...

Permainan Baru di GCompris bagian 1 (Keyboard Bayi)

Awal bulan Oktober 2020 lalu penulis membaca pengumuman di Millis GCompris bahwa tim pengembang akan merilis GCompris V 1.0 pada tanggal 17 November 2020. Dengan adanya rencana rilis tersebut maka Server GCompris akan dibekukan pada tanggal 15 s/d 17 November 2020.

Dengan adanya pengumuman tersebut maka Tim Penerjemah GCompris Indonesia bergerak secara cepat melakukan diskusi melalui Telegram.

Nah di sini ternyata saya salah baca atau memahami tanggal dan bulan.


Yang seharus tanggal tanggal 15 November saya bacanya 15 September.

Pada rilis GCompris V 1,0 ini terdapat perubahan dan perbaikan pada beberapa permaianan, contohnya adalah permianan Jelajahi Peternakan Hewan, Permianan Catur, Menghitung Benda, Pengelompokan. dan lain-lain.

 

Selain itu terdapat juga beberapa permaian baru pada GCompris V1.0, yaitu: Keyboar Bayi, Listrik Analog, Labirin Pemrograman, Belajar Digit, Belajar Pengurangan,dan Belajar Penambahan.


Pada post kali ini penulis membahas permianan bernama Keyboard bayi, sedangkan permainan baru lainnya akan penulis bahas pada post berikutnya


Terjemahan pada judul permainan ini masih keliru, yang lebih tepat adalah Keyboard anak.
Tapi bisa dimaklumi karena tim penerjemah melakukan penerjemahan secara langsung dari judul aslinya yaitu Baby keyboard.



Permainan ini bertujuan sebagai sarana belajar memahami berbagai tombol pada keyboard sekaligus pengenalan huruf dan angka untuk anak-anak pada usia dini.

Cara memainkannya adalah Tekan tombol apa pun pada keyboard sesuai keinginan.
Maka Huruf, angka, atau karakter muncul di layar sesuai tombol yang ditekan tersebut.

Jika yang ditekan tombol berupa huruf dan angka maka keluar suara  sesuai tombol yang ditekan.
Jika yang ditekan tombol selain huruf dan angka maka suaranya hanya bleep.


Rencananya permainan ini akan penulis masukkan pada Buku Belajar Komputer Dasar tingkat 0 Tema 3 yang sedang penulis kerjakan, atau bisa jadi dimasukkan ke tema 1 atau 2 edisi revisi.

Untuk yang tertarik dengan buku yang penulis rilis dapat mengunjungi tautan berikut => Unduh Buku Digital Gratis



The First Verbeek Nightly Build with Package That Build by IRGSH

Today we’re pleased to announce our first nightly build (or “jahitan”) with package that build by our in-house toolchain IRGSH. This build featured Pop Shell extension package which marks our important milestone. The package help us to prove that IRGSH works as intended to help us to bring the source code to binary package, to injected it to signed repository then wrapped to a bootable ISO.

You can download the ISO file here. You may consider to use zsync to decerase the size of download between builds.

In case you’re curious about what Verbeek will be looks like, we’ve packaged Pop Shell because we want Verbeek to be developer-first desktop. The release will be providing software and tools you need as developer/IT professional. This is the third BlankOn Linux release that will have specific user as target, after Meuligoe Minimalist and Sajadah. If you want to get update about the development, please simply follow the BlankOn Linux Twitter account and click Watch on our release repository.

EJBCA Beginner Guide: From CA to Certificate Enrollment

X509 is a complicated thing and EJBCA makes it easier to grasp. Eww you may find EJBCA is complicated as well. This post will guide you to specific case as example:

CA that can issuing certificates for high education instutution. High education institution as end user can signing PDF files for their student certification.

This post is not the best practice example but it can introduce you to how EJBCA works. Let’s go.

EJBCA Preparation on local environment

docker-compose.yaml:

version: '3'

services:
  db:
    image: postgres:13-alpine
    env_file: .env
    restart: always
    volumes:
     - ./data:/data

  ejbca:
    image: primekey/ejbca-ce:6.15.2.6
    env_file: .env
    restart: always
    ports:
      - 80:8080
      - 443:8443
    depends_on:
      - db

.env:

# EJBCA
TLS_SETUP_ENABLED=simple
DATABASE_USER=postgres
DATABASE_PASSWORD=kLTPk5Ty9K3JHykCS38YBHDTVwXkVCgjsQs7HaT8wwT5VcY5G54tMbSNt6uCEztM
DATABASE_JDBC_URL=jdbc:postgresql://db/postgres

# DB
POSTGRES_PASSWORD=kLTPk5Ty9K3JHykCS38YBHDTVwXkVCgjsQs7HaT8wwT5VcY5G54tMbSNt6uCEztM
PGDATA="/data"

Spin them up with docker-compose up -d --force-recreate. It’ll take some minutes until EJBCA is ready to serve you.

Some notes:

  • Add 127.0.0.1 ejbca to your /etc/hosts as the ejbca declared itself on ejbca hostname/domain.
  • Make sure you can access https://ejbca/ejbca/adminweb/ without problem.

Issuing Root CA

  • On EJBCA Admin Web interface, go to CA Functions -> Certificate Authorities.
  • On Add CA form, write your Root CA common name, e.g. AgunoRootCA, then click Create
  • You’ll be redirected to complicated form of issuing CA.
  • Leave the default values as is except for:
    • CA Serial Number Octet Size: 20
    • Validity: set it to 10y
    • Issuing Distribution Point on CRLs: Use
    • Default CA defined validation data: click all Generate buttons in this section, then change the localhost strings to ejbca.
    • Monitor if CA active (healthcheck): Activate
  • Then click Create button.
  • At this point, you have two CAs:
    • ManagementCA
    • AgunoRootCA

Issuing Intermediate CA

  • Do the same again as above except:
    • The CA name is AgunoIntermediateCA
    • Leave the default values but set some values as above and:
      • CA Certificate Data, Signed By: AgunoRootCA
  • At this point, you have three CAs:
    • ManagementCA
    • AgunoRootCA
    • AgunoIntermediateCA

Preparing Certificate Profiles

Any attempt of issuing new certificate will require a certificate profile that define what kind of certificate that will be created. Let’s assume that we want to create certificate profile for high education institutions and it will be used to signing ijazah. Let’s name it HIGHEDUINSTITUTION.

  • On EJBCA Admin Web interface, go to CA Functions -> Certificate Profiles.
  • At the end of the list, enter your profile name, HIGHEDUINSTITUTION, click Add
  • It’ll be added to the list, now click Edit button as we need to modify some values. IMPORTANT NOTE: If you want to multiple select some values, press and hold Shift button or the previous selected values will be loss.
  • Now please set some values on this field :
    • Available Key Algorithms: select ONLY RSA, we need to make it broadly compatible.
    • Available Bit Lengths: select ONLY 4096 bits
    • Validity or end date of the certificate: 5y
    • Extended Key Usage: Use, Critical, select ONLY PDF Signing
    • Available CAs: select ONLY AgunoIntermediateCA
  • Click Save button

Preparing End Entity Profile

Certificate Profile defines the technical aspects of the certificate. On the other hand, EEP defines the entity aspects that related to identity.

  • Go to RA Functions -> End Entity Profiles
  • On Add Profile form, type your profile name, e.g. HIGHEDUINSTITUTION (same as the certificate profile name), then click the Add button.
  • After it added to the list, click the item then click Edit End Entity Profile button.
  • You’ll be redirected to (again) a complicated form. Leave it as is but modify some values:
    • Password: Required
    • Other subject attributes: Remove all attributes
    • Default Certificate Profile : HIGHENDINSTITUTION
    • Available Certificate Profiles: select ONLY HIGHENDINSTITUTION
    • Default CA: AgunoIntermediateCA
    • Available CAs: select ONLY AgunoIntermediateCA
    • Default Token: P12
    • Available Tokens: select ONLY P12
  • Click save
  • At this point, you have three CAs, a configured certificate profile and a configured entity profile. You’re ready to enroll new certificate for education institutions.

Let’s try to issuing and enrolling a new certificate for education institution

  • On EJBCA Web Admin interface, go to RA Functions -> Add End Entity
  • On End Entity Profile field, select HIGHEDUINSTITUTION, the form will be adjusted according to our end entity profile configuration.
  • Enter your entity information, e.g.:
    • Username: ugmacid
    • Password: enter the password for enrollment
    • E-mail address administration@ugm.ac.id
    • CN/Common name ugmacid
  • Leave other values as is.
  • Click Add button.

Let’s enroll the certificate

  • Go to https://ejbca/ejbca/, this is the public interface of the EJBCA instance.
  • On Enroll section, click Create Browser Certificate
  • Enter the username and Enrollment code (password)
  • You’ll be asked for confirmation, click Enroll button
  • A P12 file will be downloaded to your computer, it’s protected by passphrase. Use the password as passphrase.

At this point, you may check the new issued certificate against the certificate chain.

Next post

I’ll write about authentication, roles and security on maintaining EJBCA instance.

Google Cloud : Create a Google Kubernetes Engine Cluster with gcloud Command Line

Assalamualaikum!

Pada jurnal ini saya ingin menjelaskan sedikit bagaimana membuat sebuah klaster GKE melalui gcloud command line. Untuk membuat klaster GKE melalui console bisa dibaca di https://misskecupbung.wordpress.com/2020/11/08/google-cloud-create-a-google-kubernetes-engine-cluster-with-cloud-console/

Oke, langsung saja ya!

Disini saya menggunakan Cloud Shell. Opsi lain bisa menggunakan terminal masing-masing yang sudah terinstall cloud sdk nya.

Pertama saya coba set default zone untuk nanti tempat cluster berada.

gcloud config set compute/zone us-central1-a

Lalu coba buat cluster GKE dengan perintah:

gcloud container clusters create [CLUSTER-NAME]

Verifikasi hasilnya akan seperti ini:

Agar dapat terhubung dan bisa me-manaje cluster yang sudah dibuat, dapatkan credential dengan perintah:

gcloud container clusters get-credentials [CLUSTER-NAME]

Untuk pengujian kita coba buat sebuah deployment sederhana:

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

Lalu agar aplikasi dapat diakses dari luar, buat service dengan tipe loadbalancer:

kubectl expose deployment hello-server --type=LoadBalancer --port 8080

Perlu ditunggu beberapa saat hingga IP Publik nya terlihat:

kubectl get services

Verifikasi melalui browser:

Untuk menghapus cluster bisa dengan perintah:

gcloud container clusters delete [CLUSTER-NAME]

Verifikasi clusternya sudah terhapus:

gcloud container clusters list

Sekian!

Google Cloud : Create a Google Kubernetes Engine Cluster with Cloud Console

Assalamualaikum!

Pada jurnal ini, saya ingin sedikit membahas mengenai bagaimana membuat sebuah cluster Google Kubernetes Engine di platform Google Cloud Platform. Untuk pengujian, kita coba membuat sebuah deployment menggunakan nginx, membuat sebuah service dengan tipe LoadBalancer dan pengujian akses aplikasi dari browser.

Langsung saja ya!

Pertama buka https://console.cloud.google.com/. Klik Navigation Menu -> Kubernetes Engine -> Cluster :

Untuk membuat cluster, klik Create Cluster:

Detail yang harus diisi:

  • Name: nama cluster
  • Location type: Tipe yang akan dipilih untuk lokasi cluster, zonal atau regional. Perbedaanya jika zonal nanti control plane akan diletakan di sebuah zona, sedangkan regional nanti beberapa control plane akan diletakan di beberapa region. Baca lebih lanjut di https://cloud.google.com/kubernetes-engine/docs/concepts/types-of-clusters
  • Master version: Versi dari GKE

Setelah OK, bisa klik create:

Akan ada pemberitahuan ketika cluster telah berhasil dibuat. Verifikasi:

Bisa klik nama clusternya, dan pada tab Details akan berisi detail informasi mengenai cluster:

Pad menu Storage berisi storage yang digunakan pada deployment jika sudah dibuat.

Pada menu Nodes berisi semua node yang terdapat dalam cluster yang sudah dibuat tadi:

Bisa kembali ke menu cluster, dan jika ingin terhubung ke cluster melalui Cloud Shell, klik Connect lalu klik Run Cloud Shell:

Dan jalankan jika dilihat dari cli akan menampilkan hasil yang sama dengan console:

Selanjutnya kita akan coba men-deploy sebuah aplikasi sederhana. Kembali ke dashboard cluster, klik Deploy:

Isikan nama dan informasi mengenai deployment:

  • Pada form Container pilih existing container name atau new container image. Disini saya memilih nginx:latest:
  • Pada tab configuration isikan detail mengenai nama aplikasi.

Lalu klik create:

Verifikasi bahwa deployment sukses dibuat:

Agar aplikasi bisa diakses dari luar, klik Expose:

Pilih port (ini port pada service), target port (port dalam aplikasi), protocol, dan service type, saya memilih Load Balancer dan buat service name nya. Jika sudah klik Expose:

Verifikasi:

Lihat IP publik dalam service beserta portnya, dan coba akses dari browser:

Sekian!

Google Cloud: Create a Windows Machine and How To Connect via RDP

Assalamualaikum!

Pada jurnal ini saya ingin sharing mengenai bagaimana membuat instance / vm windows pada Google Cloud dan bagaimana cara kita remote si windows via RDP.

Langsung saja ya!

Pertama, buka console GCP nya di https://console.cloud.google.com/ :

Buat vm dengan klik navigation menu -> Compute Engine -> VM Instances:

Klik Create Instance:

Lalu isikan detail informasi mengenai vm:

Detail penjelasan bisa dibaca lagi jurnal sebelumnya di https://misskecupbung.wordpress.com/2020/11/07/google-cloud-create-a-virtual-machine-with-console-and-gcloud-command-line/ ya.

Fokusnya ada di Boot Disk, klik Change untuk mengubah imagenya:

Dalam Google Cloud Platform ada empat tipe image yang bisa digunakan:

  • Public Image: Image yang bisa digunakan siapa saja dan image ini dimaintain oleh pihak google
  • Custom Images: Image yang hanya bisa kita gunakan di project sendiri, bersifat private
  • Snapshot: Ini bisa berisi snapshot dari instance kita sebelumnya sudah dibuat snapshotnya
  • Existing Disk: Disk yang didalamnya sudah berisi sistem operasi dan data kita.

Pilih Windows Server 2012 R2 Datacenter. Klik Select:

Verifikasi:

Di Google Cloud Platform terdapat beberapa opsi untuk akses vm via RDP. Misal saya pilih Download the RDP File. Saya unduh dan saya buka via Remmina:

Untuk mengenerate password vm, bisa dengan klik panah drop down -> Set Windows password:

Muncul seperti di bawah ini, klik SET:

Akan muncul passwordnya, salin dan pastekan di Remmina tadi ya:

Verifikasi Windows Server:

Sekian!

Google Cloud : Create a Virtual Machine with Console and gcloud Command Line

Assalamualaikum. Selamat malam!

Pada jurnal ini saya ingin sharing mengenai bagaimana membuat sebuah virtual machine di Google Cloud Platform menggunakan Console (Web-Based UI) dan menggunakan gcloud command. Untuk pengujian akan diinstall paket webserver nginx.

Langsung saja ya!

Pertama akan dicoba menggunakan console terlebih dahulu. Buka https://console.cloud.google.com/ . Pst! bisa melakukan percobaan menggunakan QwikLabs ya. Tampilan:

Oke, untuk membuat sebuah vm klik icon navigation menu di pojok kiri atas -> Compute Engine -> VM Instances. Tampilannya kurang lebih seperti ini:

Untuk membuat vm baru klik create:

Selanjutnya akan muncul form pengisian informasi mengenai vm, antara lain:

  • Name: nama instance
  • Label: label semacam tag untuk vm. Ini bersifat opsional
  • Region: region mana yang dipilih untuk vm
  • Zone: zone untuk vm
  • Series: nama seri
  • Machine type: tipe mesin, bisa juga disebut spesifikasi vm
  • Confidential VM service: aktifkan confidential pada vm ini, jika ya centang
  • Container: apakah dalam vm akan dideploy container image, jika iya centang
  • Boot Disk: Image beserta ukuran disk, default saat jurnal ini ditulis adalah Debian 10 Buster dengan ukuran 10GB disk, bisa disesuaikan
  • Service Account: sesuaikan akun service, bisa gunakan default
  • Access Scope: Permission untuk manajemen vm
  • Firewall: defaultnya ada dua opsi, allow http dan https, bisa diubah dan disesuaikan

Jika sudah oke dan sesuai, klik Create:

Verifikasi:

Untuk ssh ke vm disediakan beberapa opsi, yaitu open browser, gcloud command, hingga opsi ssh lainnya.

Semisal ingin via browser:

Atau bisa juga menggunakan gcloud command:

Seperti tangkapan layar saat pembuatan vm, firewall allow http saya aktifkan. Disini akan dicoba menginstall web server nginx dan verfikasi.

sudo su -
apt install nginx -y
ps aux | grep nginx

Verifikasi via browser menggunakan ip publik yang terlihat di atas tadi:

Selanjutnya, selain menggunakan console yang berbasis web-based UI, kita coba juga membuat vm via gcloud command. Bisa dilihat opsi yang bisa digunakan:

gcloud compute instances create --help

Semisal buat instance dengan perintah:

gcloud compute ssh gcelab2 --zone us-central1-c

Untuk melakukan ssh dari gcloud, bisa menggunakan:

gcloud compute ssh gcelab2 --zone us-central1-c

Bisa juga verifikasi vm yang telah dibuat dari console:

Sekian!

Google Cloud: Create a New Project and Getting Start Cloud Shell with gcloud

Assamualaikum!

Anggap saja jurnal ini merupakan pemanasan sebelum jurnal-jurnal selanjutnya yang akan membahas core-of-the core dari service-service di Google Cloud Platform ya. Pada jurnal ini saya ingin menunjukkan bagaimana membuat sebuah project baru dan mengenalkan apa itu gcloud serta bagaimana menghubungkan project baru yang sudah dibuat menggunakan gcloud.

Langsung saja ya!

Pertama, pastikan sudah membuat akun google gratis atau berbayar semacam gsuite.

Untuk manajemen cloud platform dari Google, bisa masuk ke https://console.cloud.google.com/ . Log In dan berikut tampilan dashboardnya:

Banyak sekali fitur yang dapat dieksplore. Tapi nanti:) akan kita pelajari satu-per-satu.

Percobaan pertama kita akan membuat project baru. Project dalam gcp adalah environtment yang di dalamnya bisa kita gunakan untuk deployment aplikasi dan lain-lain. Klik My First Project. Tulisannya tergantung project terakhir yang dibuka di masing-masing dashboard ya:

Untuk membuat project, klik Project Baru:

Isikan nama. Misal my-kubernetes-codelabs. Ingat! Project baru ini bersifat unik, jadi ketika nama yang diinginkan sudah dipakai, secara otomatis google akan meng-generate id unik tambahan sebagai pembeda. Klik Buat.

Klik icon lonceng dan akan ada pemberitahuan bahwa project telah berhasil dibuat.

Sudah. Selesai sampai disitu jika hanya ingin membuat project baru. Lalu bagaimana jika ingin menggunakan Cloud Shell untuk manajemen project yang telah dibuat tadi? Klik icon semacam terminal kalo di linux :

Jika pertama kali menggunakan Cloud Shell, maka akan tampil seperti berikut. Klik Lanjutkan:

Berikut ini tampilan Cloud Shell:

Untuk melihat autentikasi/akun yang terhubung dengan akun bisa dengan perintah:

gcloud auth list

Untuk melihat project yang aktif bisa dengan perintah:

gcloud config list project

Baiklah, selanjutnya kita coba hubungkan cloudshell dengan project yang baru dibuat:

gcloud config set project {project-id}

Verifikasi:

gcloud config list project

Perintah-perintah yang dapat digunakan untuk manajemen project bisa dilihat dengan:

gcloud -h
gcloud config --help
gcloud help config

Untuk melihat konfigurasi project yang telah dibuat bisa dengan perintah:

gcloud config list
gcloud config list --all

Sekian!

Sumber:

Cara Menginstall Python 3.6 di Debian 9 (stretch)

Debian 9 (stretch) secara default membawa python2.7 (default) dan python3.5. Saya sedang melakukan instalasi aplikasi yang ternyata membutuhkan Python versi 3.6. Pada beberapa tutorial di internet, menyarankan untuk menggunakan repo debian testing. Namun saat tulisan ini dibuat, saya cek repo debian testing memiliki python versi 3.8, sedangkan versi tersebut ketinggian....

Mengunci Versi aplikasi di CentOS

Setelah catatan sebelumnya kita berhasil downgrade versi aplikasi di CentOS, ternyata saat kita lakukan yum update, aplikasi kembali dinaikkan versinya ke versi yang lebih baru. Tentunya hal ini menjengkelkan karena aplikasi project kita akan kembali error alias tidak jalan. Namun jangan khawatir, pada postingan ini kita akan membahas bagaimana cara...

Cara Downgrade Aplikasi di CentOS

Sebuah aplikasi yang ditulis oleh temen-temen developer terkadang hanya kompatibel dengan versi runtime tertentu pada bahasa pemrogramannya. Hal ini akan menuntut administrator agar dapat menyesuaikan dengan kebutuhan tersebut. Nah, catatan ini disimulasikan dijalankan di sebuah VM dengan sistem operasi CentOS 8. Catatan ini juga berdasarkan pengalaman penulis saat menangani sebuah...

Azure: Create a DNS zone and an A record in Azure DNS

Hallo!

Pada jurnal ini saya ingin sharing mengenai bagaimana membuat DNS zone dan menambahkan sebuah A record ke DNS zone yang sudah dibuat tadi di Azure. Seperti yang kita tahu, DNS Server berfungsi untuk mentranslasikan IP Address ke sebuah domain dan sebaliknya. Disini saya akan mencoba membaut dns zone misskecupbung313.com dan menambahkan sebuah record A www (akan menjadi http://www.misskecupbung313.com) ke ip private server di dalam azure yang sudah dibuat sebelumnya.

Langsung saja ya!

Pertama masuk ke Azure Portal, klik Create a Resource :

Pada Azure Marketplace bisa menggunakan kolom search, cari dns zone. Lalu klik.

Lalu bisa klik Create ya:

Pertama, pilih subscription, resource group, lalu isikan dns zonenya. Disini misal misskecupbung313.com. Lalu klik Next :

Untuk tag bisa disesuikan ya, lalu klik Next.

Verifikasi dan klik Create.

Pastikan berhasil ya. Hasilnya seperti di bawah ini :

Masuk ke dashboard. Catat name servernya ya. Jangan lupa, karena untuk verifikasi. Untuk membuat sebuah record, disini saya membuat A record, bisa masuk ke resource, klik Record set :

Isikan, misal www type A, sesuikan TTL, dan mapping ke ip private dari server yang sudah disiapkan. Lalu klik Create.

Verifikasi bisa seperti berikut. Gunakan ns yang sudah dicatat sebelumnya.

Sekian!

Multi Machine Vagrant dengan Vagrantfile Tunggal

Vagrant merupakan sebuah tools yang saya gunakan untuk provisioning Virtual Machine, khususnya untuk environment lokal di laptop. Vagrant juga dapat digunakan untuk provisioning VM dengan beberapa provider, antara lain VirtualBox, VMware, Docker, Hyper-V, maupun custom. Saya sendiri menggunakan provider Libvirt :D Oke, salah satu alasan kenapa tulisan ini saya buat...

Cara Install Autoscaling GitLab Runner yang Hemat Biaya

Ngomong-ngomong soal GitLab tidak lepas soal CI/CD (Continuous Integration/Continuous Delivery/Deployment). Nah, kebetulan Di tempat saya bekerja menggunakan gitlab-runner. GitLab Runner merupakan salah satu fitur yang sangat bermanfaat untuk menjalankan CI/CD. Saya tidak akan menjelaskan apa itu CI/CD di sini (mungkin akan saya jelaskan di postingan yang lain). Hanya akan saya...

Menjalankan Vagrant Provider Libvirt di openSUSE Leap 15.2

Melihat pak Andi Sugandi menggunakan vagrant untuk menyediakan lab VM saat beliau mengajar, saya pun jadi penasaran. Karena provisioning VM menggunakan vagrant ini sepertinya mengasyikkan, terutama karena….. Nanti deh saya ceritain apa, dan mengapa ini penting saya utarakan. Apa itu Vagrant? Tampilan Website Vagrant Vagrant merupakan sebuah perangkat lunak yang...

Cara Install gcloud CLI di openSUSE Leap 15.2

Postingan kali ini akan sangat singkat, karena merupakan catatan yang dibuat untuk sekedar mendokumentasikan apa yang saya ketikkan saat memasang gcloud CLI di laptop saya. Sistem Operasi yang digunakan di laptop saya seperti yant tertulis di judul tulisan ini, yaitu openSUSE Leap 15.2. Sebelumnya, mungkin perlu juga saya tulisan apa...

openSUSE Leap 15.2 di Google Cloud Platform (GCP)

Sebagai pengguna openSUSE, saya kadang merasa penasaran apakah bisa saya menggunakan os ini di langit sebagai server. Yang saya maksud di langit di sini adalah Google Cloud Platform (GCP), karena saya juga pengguna produk google tersebut di beberapa proyek milik klien. Namun melihat daftar templat citra (image template) di Google...

Pi Zero sebagai Tukang Periksa (Bot)

Bojongbot - Pi Zero

Saya memasang beberapa cctv berbeda merek, baik yang berjenis ip cam maupun yang analog dengan dvr. Kesemuanya terhubung ke 1 server shinobi video yang pernah saya tulis di artikel sebelumnya. Nah, beberapa perabotan itu tentunya memiliki IP, dan ada beberapa yang suka ngambek, gak hidup. Di-ping juga gak respon. Agak susah kalau tidak mengetahuinya. Kapan hari ada insiden panci presto meledak, namun cctv di area dapur pas heng. Jadi tidak ketahuan prosesnya.

Setelah kemarin ngoprek-ngoprek ARM (lagi setelah sekian lama), saya jadi inget punya beberapa perabotan arm yang tidak kepakai, salah satunya pi zero. Ya sudah itu aja dimanfaatkan jadi mesin bot. Tugasnya cuma kirim ping ke beberapa perangkat yang ada di daftar, jika gak ngasih balikan, ngirim pesan ke telegram via bot telegram.

Kodenya ada di https://github.com/princeofgiri/bojongbot.

Bot beraksi

Ada beberapa yang nanya, kenapa gak pakai ESP32 aja? Jawabannya sebagai berikut:

  1. Saya belum pernah ngoprek ESP32, baru order, belum datang saat tulisan ini dibuat
  2. Memanfaatkan yang sudah ada, jadi tinggal pakai gak perlu beli-beli
  3. Saya sangat familiar dengan linux dan bash, jadi ndak ribet bahasa pemrograman lainnya

Kepinginnya sih nanti botnya jadi tambah pinter, kulkas di rumah sepertinya ada API, bisa diintip nanti-nanti.

LibreOffice 7.0 di Raspberry Pi OS

Setelah kemarin bikin video Armbian dengan LibreOffice 7.0 (https://www.youtube.com/watch?v=1rTrCVgGXfA) ngoprek disela-sela kesibukan masih berlanjut. Kali ini ngidupin layar 7 inch dengan perangkat raspberry pi buat mainan bocah dengan GCompris.

Di Raspberry Pi OS (dulu Raspbian), yang berbasis debian buster. Caranya cukup mudah, pasang flatpak, pasang libreoffice dari flatpak. Beres!

Eh tunggu dulu, belum beres. Karena menu aplikasi libreofficenya belum bisa muncul. Harus digosok dulu. Berikut cara nggosoknya:

  • Edit berkas

/etc/xdg/lxsession/LXDE-pi/desktop.conf

  • Di paling bawah, tambahkan

[Environment_variable] XDG_DATA_DIRS=/var/lib/flatpak/exports/share:/home/pi/.local/share/flatpak/exports/share:/usr/local/share/:/usr/share/raspi-ui-overrides:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/

  • Reboot

Udah deh!

LibreOffice 7.0 di Raspberry Pi OSLibreOffice 7.0 di Raspberry Pi OS

Buku Belajar Komputer Tingkat Dasar 5 Tema 1

Puji syukur tim penulis panjatkan kepada Tuhan Yang Maha Esa yang telah memberikan rahmat dan karunia-Nya, setelah molor beberapa waktu akhirnya buku Belajar Komputer Tingkat Dasar 5 Tema 1 yang kami tulis hari ini bisa rilis.


Buku ini adalah lanjutan dari buku Belajar Komputer Tingkat Dasar 4 yang sudah terbit sebelumnya. Seperti pada buku sebelumnya, materi dalam buku ini juga masih mengusung tema belajar dan bermain secara menyenangkan.
Adapun beberapa materi dalam buku ini adalah:
  • Materi pada bab 1 berisi pelajaran geografi yaitu mengenal negara-negara di berbagai dunia, sehingga anak-anak dapat mengetahui nama benua dan negara di dunia. Di dalam bab ini juga berisi permainan tentang wilayah dalam berbagai negara di dunia.
  • Bab 2 berisi pelajaran huruf braille, yaitu huruf yang biasa digunakan oleh orang-orang tidak bisa melihat. Dengan menggunakan huruf braille, orang yang tidak bisa melihat bisa membaca. Di dalam bab ini juga dijelaskan sejarah singkat terciptanya huruf braille.
  • Bab 3 berisi pelajaran cara bermain catur untuk anak-anak. Di dalam bab ini dijelaskan pengetahuan dasar mengenai catur, notasi pada permainan catur, gerakan berbagai buah catur. Materi pelajar pada bab ini dapat dilakukan lewat permainan di komputer ataupun menggunakan perangkat catur asli yang tersedia.
 Untuk mengunduh buku digital Belajar Komputer Tingkat Dasar 5 Tema 1 silakan pilih salah satu tautan berikut:

Pembaca boleh menyebarkan buku versi digital ini ke masyarakat yang membutuhkan baik secara online ataupun offline, juga dipersilakan untuk membuat mirror di berbagai web atau server yang pembaca miliki.


-

Azure : Use a Resource Manager template for Azure Disk Encryption (ADE)

Assalamualaikum!

Pada jurnal ini saya ingin mencoba menggunakna Resource Manager Template dimana, template tersebut sangat diperlukan untuk meng-enkripsi disk dalam jumlah besar. Selain itu, template nya bisa digunakna ketika kita ingin migrasi disk vm tanpa takut adanya kerentanan dalam keamanan. Jadi, data dalam disk vm aman karena sudah ter-enkripsi.

Langsung saja ya!

Disini saya menggunakan Azure Portal. Klik Create a resource :

s1

Pada kolom search cari keyword template dan pilih Template Deployment (deploy using custom templates) :

e1

Lalu klik create :

e2

Scroll ke bawah, pada kolom select a template, pilih 201-decrypt-running-windows-vm-without-add . Ini bisa disesuaikan ya, karena disk vm yang ingin saya encrypt adalah windows. Lalu klik Select template :

e3

Pilih subcription, resource manager, isikan semua vm yang mana disknya ingin di encrypt. Lalu scroll ke bawah :

e4

Volume type pilih All. Yang lainnya bisa biarkan default, centang lalu klik Purchase :

e5

Tunggu sampai deploymentnya berhasil ya.

Untuk pengujiannya klik vm, pada kolom settings klik Disk. Secara otomatis, vm yang sudah kita pilih, bisa di enkripsi langsung, sekarang statusnya disabled. Klik encryption :

e7

Lalu bisa mulai enkripsi. Dan klik SAVE :

e8

 

 

 

Sekian!

Azure : Encrypt VM disks using Azure Disk Encryption (ADE)

Assalamualaikum!

Pada jurnal ini saya ingin share mengenai bagaimana meng-enkripsi sebuah disk di Azure Cloud Platform menggunakna Azure Disk Encryption atau bisa disingkat ADE.

Pada Azure, ada dua pilihan yang bisa digunakan untuk meng-enkripsi sebuah disk. Pertama, menggunakan Storage Service Encryption (SSE) dan kedua adalah Azure Disk Encryption (ADE).

Untuk Storage Service Encryption (SSE) mungkin akan dibahas di jurnal lain, khusus disini hanya akan dibahas mengenai Azure Disk Encryption (ADE). ADE sendiri menggunakan BitLocker untuk meng-enkripsi disk di windows, dan DM-Crypt untuk sistem operasi Linux. Dia akan meng-enkripsi disk, dan key nya nanti disimpan di tempat yang disebut Azure Key Vaults.

Jadi, ketika ingin meng-enkripsi sebuah disk menggunakan Azure Disk Encryption (ADE) tahap-tahapannya adalah :

  • Membuat key vault.
  • Mengatur policy dari si key vault.
  • Menggunakan key vault tadi untuk menyimpan key.

Mari kita praktik!

Pertama, saya coba buat disk dengan sistem operasi windows server 2016, ini hanya opsional. Bisa disesuaikan dengan vm masing-masing ya :

$location = (Get-AzResourceGroup -name <resource_group>).location
$vmName = "fmdata-vm01"
$rgName = "<resource_group>"
New-AzVm `
    -ResourceGroupName $rgName `
    -Name $vmName `
    -Location $location `
    -OpenPorts 3389

d1

Selanjutnya, bisa gunakan variabel dan verifikasi disk dalam vm yang sudah dibuat :

$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
$vm.StorageProfile.OSDisk

d2

Bisa diverifikasi juga, apakah disk sudah ter-enkripsi atau belum :

Get-AzVmDiskEncryptionStatus `
    -ResourceGroupName $rgName `
    -VMName $vmName

d3

Oke, mari kita coba meng-enkripsi disk. Pertama buat key vault nya :

$keyVaultName = "keys-ananda
New-AzKeyVault -VaultName $keyVaultName `
    -Location $location `
    -ResourceGroupName $rgName `
    -EnabledForDiskEncryption

d4

Lalu mulai enkripsi disk, simpan key nya ke dalam key vault yang sudah dibuat tadi ya :

$keyVault = Get-AzKeyVault `
    -VaultName $keyVaultName `
    -ResourceGroupName $rgName
Set-AzVmDiskEncryptionExtension `
    -ResourceGroupName $rgName `
    -VMName $vmName `
    -VolumeType All `
    -DiskEncryptionKeyVaultId $keyVault.ResourceId `
    -DiskEncryptionKeyVaultUrl $keyVault.VaultUri `
    -SkipVmBackup

d5

Verifikasi. Pastikan statusnya Encrypted :

Get-AzVmDiskEncryptionStatus -ResourceGroupName $rgName -VMName $vmName

d6

 

 

 

Sekian!

Azure : How to Connect Azure Data Lake Storage using Azure Storage Explorer

Assalamualaikum!

Pada jurnal ini saya akan share mengenai bagaimana menghubungkan Azure Data Lake Storage ke Storage Explorer dan nantinya Data Lake Storage tersebut bisa di-manage melalui Azure Storage Explorer .

Langsung saja ya!

Pertama, pastikan ekstensi storage-preview sudah terpasang. Ini digunakan untuk membuat Data Lake Storage Gen2 account.

az extension add --name storage-preview

j13

Selanjutnya bisa dibuat storage account nya :

az storage account create \
--name <storage_account> \
--resource-group <resource_group> \
--location westus2 \
--sku Standard_LRS \
--kind StorageV2 \
--hierarchical-namespace true

j14

Pastikan sudah terbuat ya.

Selanjutnya mari kita hubungkan Storage Account Data Lake ke Storage Explorer. Pertama, klik kanan Storage Accounts, klik Connect to Azure Storage :

j15

Pilih Azure, dan klik Next.

j16

Nanti akan muncul pop-up login akun Azure, dan bisa login ke akun masing-masing ya. Klik Refresh All dan storage yang dibuat tadi seharusnya sudah muncul :

j17

Kita akan coba membuat Blob Container. Klik kanan Blob Container, klik Create Blob Container :

j18

Isikan nama saat muncul form, lalu enter :

j19

Untuk membuat folder pada container yang sudah dibuat tadi, klik New Folder :

j20

Isikan nama. Lalu klik OK :

j21

Jika ingin meng-upload file ke dalam folder, klik Upload :

j22

Ada opsi, apakah kita ingin meng-upload file atau folder sekaligus :

j23

Arahkan ke file yang berada di laptop, lalu bisa klik Upload :

j24

Verifikasi :

j25

 

 

 

Sekian!

Unduh Buku Digital Gratis

Halaman ini sengaja penulis buat untuk kumpulan buku digital yang sudah penulis rilis dan bagikan gratis.
Silakan klik pada masing-masing judul buku untuk menuju link download



Cara menjadi Sponsor pada buku yang akan terbit


Install Openshift 4 di GCP

Berikut cara install Openshift 4.4 di Google Cloud Platfrom

1. Initial setup untuk gcloud

$ gcloud init

$ gcloud config list
[compute]
region = us-central1
zone = us-central1-a
[core]
account = sample@example.com
disable_usage_reporting = True
project = [PROJECT_NAME]

2. Enable beberapa API yang dibutuhkan

$ gcloud services enable compute.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable cloudapis.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable cloudresourcemanager.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable dns.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable iamcredentials.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable iam.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable servicemanagement.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable serviceusage.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable storage-api.googleapis.com --project [PROJECT_NAME]
$ gcloud services enable storage-component.googleapis.com --project [PROJECT_NAME]

3. Buat service account dan assign rolenya

$ gcloud iam service-accounts create openshift-sa \
--description="sa-for-openshift" \
--display-name="openshift-sa"

$ gcloud iam service-accounts keys create ~/.gcp/osServiceAccount.json \
--iam-account openshift-sa@[PROJECT_NAME].iam.gserviceaccount.com

$ gcloud projects add-iam-policy-binding [PROJECT_NAME] \
--member "serviceAccount:openshift-sa@[PROJECT_NAME].iam.gserviceaccount.com" --role "roles/owner"

5. Download openshift-install dan pull-secret dari link berikut

https://cloud.redhat.com/openshift/install/gcp/installer-provisioned

6. Deploy

$ tar -xvf openshift-install-linux.tar.gz
$ mkdir ocp4
$ cp pull-secret.txt ocp4/
$ ./openshift-install create install-config --dir=./ocp4/
$ ./openshift-install create cluster --dir=./ocp4/ --log-level=info
INFO Credentials loaded from file "~/.gcp/osServiceAccount.json"
INFO Consuming Install Config from target directory
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.[CLUSTER_NAME].[FQDN]:6443...
INFO API v1.17.1+912792b up
INFO Waiting up to 40m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 30m0s for the cluster at https://api.[CLUSTER_NAME].[FQDN]:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=~/ocp4/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.[CLUSTER_NAME].[FQDN] 
INFO Login to the console with user: kubeadmin, password: [PASSWORD]

Done

The post Install Openshift 4 di GCP appeared first on INVALEED.

Clicks to balance

One of the things that I am sure I will miss when moving back to Indonesia is how convenient it is to do bank-related transactions in The Netherlands. Almost everything, if not all, is already connected and standardized. There is no need for virtual accounts, going through e-wallet from startups, dealing with transaction cost, etc because there is a widely approved payment system called iDEAL. Every time I go for online shopping, this is the only logo I need to see to be sure that I can do business with the shop.

This is probably one of a series of posts comparing banking in Indonesia and The Netherlands. First, we will see what it takes to do one of the most important task, in my view, in an online banking site/app: Checking the balance. I consider this to be a common task but apparently different banks have gone different routes to provide this very basic information.

I will be comparing different banks that I have access to: BNI, BCAJenius, HSBC, ABN AMRO, and Bunq. The number to measure here would be the number of clicks I need to do after the login page to see the current balance. What I show here is from what I gather on the 28th of June 2020.

BNI Desktop Web

BNI Internet Banking requires you to do 2 clicks “Rekening” and then “Saldo Rekening” to see a supposedly list of accounts and the balances.

1_o6atev462exmp_8jtmoh2w

 

BNI Mobile Web

The mobile web version, on the other hand, requires you to do 6 clicks (or 7 depending on how many accounts you have I guess), to get into the balance page.

The wording is consistent to the desktop version and the important bits are put at the top which helps the navigation.

1_jipl5cmsdloz9qfje9i3nw

BNI Mobile App

Apparently to login I need to enter the number from the ATM card. I will skip this since I am too lazy to find the card 😂

BCA Desktop Web

This old school looking page (I think they take if it ain’t broke, don’t fix it mantra religiously) requires you to go to “Account Information” page and then “Balance Inquiry” and thus needs 2 clicks.

The menu wording is probably clear enough but the first menu is put at the middle of big list of options. For me, that rarely use this page, I have to remind myself of what the menu option is. Also, the small text size does not help me at all.

bca

BCA Mobile Web

Short of similar to the desktop version, this one requires 2 clicks: “Informasi Rekening” and then “Informasi Saldo” (same wordings as above but different language — probably just my settings). The first menu is also not put up front but fortunately the list is smaller.

bcam2

BCA Mobile App

The mobile app version follows almost the same steps with an additional PIN entry page before getting into the final balance page. However, unlike both desktop and mobile web versions, the required 3 clicks are on the items put at the top.

bcaa

Jenius Mobile App

Unlike the above banks, this mobile app only bank shows the balance up front immediately after the login page. For me who consider checking the balance amount an important task to do, this really saves my time.

1_yw1ltdtdi8pz-u86hylkza

HSBC Desktop Web

HSBC also puts the balance information on the first page after you login. Zero clicks needed.

1_zi0xh3px8zzuvpuk2kd2nq

HSBC Mobile App

This version of HSBC online banking also shows the accounts and balances on the first page.

1_8tvupqoxucjax5qk7cyuzq

ABN AMRO Desktop Web

ABN AMRO also shows all bank accounts and the balances immediately after the login process.

1_rfv8jtsguetrpil8vmgypw

ABN AMRO Mobile App

Same as the desktop version, accounts and balances up front.

1_rr8l_iatmvxh3lywrj5sbg

Bunq Mobile App

Bunq is probably my favorite bank so far in terms of user experience. As expected, it also shows all accounts and balances on the first page.

1_iclr9hee2gectjlm1sccfa

Bunq Desktop Web

Following the same pattern as the mobile app’s, the Desktop Web version shows all accounts and the balances.

1_1bwf5redxabfwgxjdjievg

Conclusion

If I can take any conclusion at all, I think Indonesian banks have to step up their game and give user experience more priority. Jenius is an exception here and it’s really a breath of fresh air.

Server CCTV dengan Shinobi Video – Bag. 5, IP Cam Murah Meriah

Setelah liat-liat di situs perbelanjaan daring, saya menemukan satu kamera yang fiturnya cukup pas untuk disambungkan dengan Shinobi, harganya juga berkisar 250 ribu rupiah. Berikut fitur yang penting untuk digunakan:

  • Onvif
  • AUTO TRACKING
  • PTZ Rotate Pan Tilt 360
  • Ada sensor suara, sensor gerak dan pemberitahuan ke Hp
Mini CameraMini Camera

PTZnya juga berhasil tersambung dengan Shinobi. Onvif devicenya dikenali bikinan Eyeplus.

Server CCTV dengan Shinobi Video – Bag. 4, Menyambungkan dengan DVR

Saya memiliki satu set CCTV beserta DVRnya. Mereknya Nathans, sponsor dari kantor (PT SKK). Ini CCTV asli ndak pakai ribet, just work. Nah … PRnya adalah gimana caranya nyambungin ke Shinobi. Berminggu-minggu saya gak berhasil menemukan solusinya. Sampai saya menyerah.

DVRDVR

Sekitar 2 mingguan lalu, saya tiba-tiba nemu sebuah saran url rtsp dari internet. Dan saya coba beneran bisa. Berikut urlnya:

rtsp://192.168.0.3:554/user=admin&password=passwordmu&channel=1&stream=1.sdp?real_stream–rtp-caching=100

Silahkan sesuaikan alamat IP beserta akun yang ada di DVR Anda.

Vortex Tab 75 Programming Guide

I need to write it down here so there will be no need to visit Vortex Gears’s incomplete documentation in the future.

Programming

  • Plug in the cable, you need the LED to guide you
  • PN + LEFT_CTRL (original position) to enter programming mode
  • Press the key that want to be programmed
  • Press the target key
  • PN to apply
  • PN + LEFT_CTRL to exit

It’s possible to lose a key. Sometimes you need to backup it first. Be careful.

Reset

  • Reset the current layer key-codes: Hold PN + R (original position)
  • Reset all layers’ key-codes and restore it to default: Hold LEFT_ALT + RIGHT_ALT (original position)

Bluetooth

  • PN + LEFT_ALT (on the left of the space bar key) for 3 seconds
  • PN + J or K or L (current position)
  • Pair the device

Fn swap

  • Hit FN + LEFT_SHIFT for 3 seconds then select new FN key directly

Pn swap

  • Hit PN + LEFT_SHIFT for 3 seconds then select new PN key directly

Layer

  • PN + M or < or > (original position), indicator on left LED.

Layout

  • PN + RIGHT_SHIFT (cycle) to change layout, indicator on right LED. No LED for Qwerty, red for Colemak, green for Dvorak

Operating system

  • PN + Q or W or E (original position) for Windows, Mac and Linux respectively

Vim's Native Multiple Cursors Feature

Sublime Text was my favourite text editor, I’ve been following it since its early days. The feature I most liked and can’t live without is the multiple cursors selection. Sublime Text lets you to select and edit string on multiple place at once based on pattern that you defined. I think it was a pain killer feature. The thing was that I always want to go back to Vim. The day I found this repository (https://github.com/terryma/vim-multiple-cursors), I switched back to Vim. vim-multiple-cursors is easy and intuitive as Sublime Text’s althought it has a bit differential. But nowdays vim-multiple-cursors has been broken, especially on the latest Vim release.

I were wondering if there is a way to do the same things with Vim’s internal command. Tada yada thanks to https://vim.fandom.com/wiki/Vim_Tips_Wiki. Not very intuitive as Sublime Text’s or vim-multiple-cursors but it works as intended. Actually it is not a multiple cursors thing, still and all it achieved the same as multiple cursors feature. It’s more like a multiple replay.

Vertical multiple replay

  • Ctrl+v to vertical select your lines, use jj to expand your selection.
  • Hit Shift+i then type the string you want to insert.
  • Pres Escape, the inserted text will be appears on all lines.

Multiple replay by pattern

  • Search your string with /stringyouwanttomark
  • Type cgn then type the new string.
  • Hit Ctrl-c to exit to visual mode.
  • Press . to replay it to the next one.

Update:

This repo showed up in vim-multiple-cursors’s issues (https://github.com/mg979/vim-visual-multi) and it works good too but I think I do stay on native Vim command so I don’t have to rely on my dotfiles for this feature.

UNK rev1 Trackpoint Module

As a person who have been using Thinkpad computers for years, I was always missing the trackpoint feature. I want to type on mechanical keyboard but also I don’t willing to dismiss the nipple. There are few solution for this issue: UHK, Tex Yoda, Tex Shinobi. These all are expensive keyboard, the shipping cost alone is crazy.

Trackpoint module is one of my goals while building UNK and I successfully build it. Here is the video if you wonder how it looks/works.

If you prefer to see it in pictures: https://imgur.com/gallery/cKV1syE

The trackpoint sensor is taken from a dead Thinkpad X201 keyboard. I was planning to make a magnetic detacable connector to the right half of the keyboard, just like magsafe but I didn’t success. So, I’m using another Pro Micro instead. It’s not perfect but it’s my build and I’m happy with it.

My First Custom Handwired Keyboard Build: UNK

More detail and build logs : https://github.com/herpiko/unk

Design Process

TO BE WRITTEN

Tensorflow GPU on Nvidia 1660 Ti

Although my GPU is not listed here, I can confirm that 1660 Ti works. The machine learning training is now significantly faster than using CPU.

➜  imagerec git:(updated-deps) ✗ nvidia-smi
Tue May  5 15:00:40 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 166...  On   | 00000000:01:00.0  On |                  N/A |
| 32%   35C    P8    12W / 130W |    293MiB /  5941MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1549      G   /usr/lib/xorg/Xorg                            18MiB |
|    0      1953      G   /usr/bin/gnome-shell                          48MiB |
|    0      2592      G   /usr/lib/xorg/Xorg                           108MiB |
|    0      2725      G   /usr/bin/gnome-shell                         114MiB |
+-----------------------------------------------------------------------------+
➜  imagerec git:(updated-deps) ✗ python
Python 3.7.7 (default, May  5 2020, 04:20:38) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tensorflow.python.client import device_lib
2020-05-05 15:01:16.900600: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-05 15:01:16.901543: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
>>> device_lib.list_local_devices()
2020-05-05 15:01:21.071110: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-05-05 15:01:21.100259: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3692985000 Hz
2020-05-05 15:01:21.100906: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55d1bb829330 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-05-05 15:01:21.100968: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-05-05 15:01:21.105053: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-05-05 15:01:21.217053: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.217492: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55d1bb8b7590 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-05-05 15:01:21.217525: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce GTX 1660 Ti, Compute Capability 7.5
2020-05-05 15:01:21.217760: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.218479: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce GTX 1660 Ti computeCapability: 7.5
coreClock: 1.86GHz coreCount: 24 deviceMemorySize: 5.80GiB deviceMemoryBandwidth: 268.26GiB/s
2020-05-05 15:01:21.218590: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-05 15:01:21.218654: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-05 15:01:21.220646: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-05 15:01:21.221035: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-05 15:01:21.223176: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-05 15:01:21.224561: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-05 15:01:21.224651: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-05 15:01:21.224857: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.225935: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.226839: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-05-05 15:01:21.226907: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-05 15:01:21.443386: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-05 15:01:21.443435: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-05-05 15:01:21.443446: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-05-05 15:01:21.443650: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.444083: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.444563: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/device:GPU:0 with 5176 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 7827239615455337760
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: 17179869184
locality {
}
incarnation: 9475332420332566901
physical_device_desc: "device: XLA_CPU device"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 11551463581523616297
physical_device_desc: "device: XLA_GPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 5427691520
locality {
  bus_id: 1
  links {
  }
}
incarnation: 634448236828243524
physical_device_desc: "device: 0, name: GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5"
]
>>> 

Using CPU,

python train.py  32,29s user 6,06s system 333% cpu 11,514 total

Using GPU,

GPU=1 python train.py  7,73s user 2,09s system 109% cpu 8,959 total

The setup is quite complex with various errors and version missmatches. I let myself to symlink different version of CUDA/cuDNN libraries.

If you’re planning to buy a GPU to support your machine learning project, pick a RTX graphics card. It’s tremendously faster with built-in tensor cores. Unlimited budget? Here you go.

I Spilled Coffee on My Mechanical Keyboard

My main keyboard was a Vortex Core. After my wife keep complaining about the noises (now you know it’s the blue one), I bought a Vortex Tab 75 with Cherry MX brown switches (she approved the new typing sound). It’s just a few weeks before I made an accidental disaster to the keyboard.

I was programming on some stuff while snacking Dua Kelinci peanuts. The peanuts were in a small plastic jar on the left of my keyboard. Also, there is a cup of coffee near there. I eat the peanuts by pouring them to my hand, then forwarded the peanuts to my mouth. These actions were done above the keyboard. Then I unconsciously grab the coffee cup and do the same as I thought it’s the peanut jar. So I just literally poured my hand with coffee and the fluid flood the keyboard!

What I’ve done to solve this:

Go to forums and read some advices

Most of the sources I found were from https://www.reddit.com/r/MechanicalKeyboards/.

Prepare some stuff

  • Screwdriver
  • Key puller
  • Solder
  • Vacuum desoldering pump
  • Tin
  • Alcohol
  • Cotton bud

Unplug it and/or turn it off

I grab the keyboard fast, unplugged the cable + batteries, then turned it upside down. Even if the keyboard uses a low voltage to operate, circuit short can causes a problem.

Pull all the keycaps

You need key puller. Full them all carefully.

Take apart and dried the board in a night

I put the board on top of a fan and left it for a night to make sure there is no fluid left behind.

Test it

The next morning, I plugged the keyboard into my computer and tested it. All the keys were worked as intended but some switches went bad. They felt terrible on my fingers. It may be easy for me if I poured plain water instead of coffee. My coffee contained a bit of sugar and it makes a big difference in how the switches feel. Sugar can make your switches sticky. I need to clean up the dried coffee fluid that remains in the switches’ housing. The only way to do this is to desolder the switches first.

I identified the bad switches and mark them with a permanent marker then unplugged the keyboard.

Desolder the bad switches

I carefully desolder the bad switches. A vacuum desoldering pump is a must here. You can’t do desoldering properly without this tool. I think this is the hardest part.

Take apart the switches and clean it with alcohol

I took apart each switch and cleaned it with a small amount of alcohol using the cotton bud. I reassembled the switches’ housing and test it immediately to make sure it does not feel sticky again.

Resolder

I resolder the switches back to the board. For me, resoldering is far much easy than desoldering.

Test it

I tested all the keys again but with keycap on. You need to test it using keycap to get the accurate feel of the switches. All my switches turned good except the K key switch. It still a bit sticky but it’s ok for me.

Reassembly

I reassembled the keyboard to its original shape. All was well.

UPDATE: 20200607

Turned out that the sticky K key became worse and it’s not ok for me because I used it intensively to navigate in Vim. Instead of fixing this particular one, I decided to replace the entire letter keys with Gateron brown switches. Gateron switches feel smoother than Cherry MX although I can’t overcome the difference while fast typing.

Here is a time-lapse video of me replacing the switches,

Data Diri Lengkap di Marketplace

Maraknya penjualan data yang dicuri dari marketplace sedikit banyak tidak lepas dari penggunanya juga, makanya sampai saat ini kalau ada notifikasi peringatan untuk melengkapi data diri (No KTP, KK, dll.) saya tidak melakukannya, termasuk dulu jamannya masih main di FJB Kaskus.

Di beberapa marketplace mensyaratkan kita harus melengkapi data diri tersebut agar akun kita bisa terverifikasi 100 %, tapi saya tetap tidak melakukan, biarlah akun saya tidak terverifikasi 100% tidak mengapa daripada data diri diperjual-belikan, resikonya sih calon pembeli yang belum begitu kenal sangsi dengan dengan reputasi toko online kita.

Segera ganti password dan PIN anda untuk mencegah kejadian yang tidak diinginkan

Satu lagi, jangan terlalu banyak membiarkan saldo kita di akun marketplace, lebih aman lagi kalau kita pindah ke rekening pribadi (walau tidak 100%).



Saatnya tarik saldo ah, kalau ada yang saldonya melimpah dan tidak punya rekening pribadi, saya tidak menolak jika anda mengirimnya ke rekening saya



Cara Install extensi redis di Azure App Service Linux

Pada proyek di salah satu klien di tempat saya bekerja, menggunakan layanan Azure app service untuk mendeploy aplikasi Laravel. Aplikasi tersebut membutuhkan ekstensi redis untuk dapat terhubung dengan cache service di azure yang berbasis Redis. Berikut langkah-langkah pemasangannya. Buka konsol KUDU https://<sitename>.scm.azurewebsites.net Pilih SSH pada konsol SSH, ketikkan perintah berikut...

Felix The Cat (1)


Buku ini cetakan kedua yang dicetak pada tahun 1928, saya temukan pada tahun 2017 di Surabaya. Harganya murah, cuma 20 ribu rupiah. Kisah yang diceritakan dalam buku ini sangat menarik, tak heran memenangi Pulitzer Prize. Umur buku ini hampir 1 abad. Buku yang paling tua yang pernah saya miliki. Tiap lembar kertasnya sangat tebal, setebal sampul buku tulis anak sekolahan, namun juga sangat rapuh. Saya menemukannya di belantara pasar Blauran, Surabaya. Buku ini terjepit di tumpukan paling bawah dari buku-buku yang mungkin tidak lagi dibaca oleh orang-orang. Kotor oleh tanah, sarang laba-laba dan beraroma tikus dan (maaf) pipis kucing. Yang pernah mengunjungi sektor buku bekas dari pasar Blauran di sekitar tahun 2015-2018 mungkin dapat membayangkan situasi yang saya maksud. Tapi bukan buku ini yang ingin saya bahas, melainkan buku lain yang diberikan sebagai bonus oleh penjual buku. Judulnya “Welcome To Felix the Cat”.


Felix The Cat sempat menarik perhatian saya karena sampulnya sangat tebal dan tidak ada nama penulis. Ketika saya buka, ternyata isinya tulisan tangan. Setelah saya bolak-balik dan baca cepat, saya menyadari bahwa ini adalah buku harian. Saya membiarkan buku itu dimasukkan ke kantong belanja saya.

Saya membaca separuh isi buku itu sepanjang perjalanan balik ke Jakarta. Setelah sampai di Jakarta, saya malah terbersit keinginan untuk kembali lagi ke Surabaya, mencari penulis buku ini.

Bersambung.

Screencast OBS Studio ke Google Meet di openSUSE

Saat ini masanya, masa pandemi ini banyak yang melakukan pekerjaan dari rumah (“WFH”). Salah satu kebutuhan saat meeting secara daring adalah melakukan screencasting, atau berbagi layar. Catatan ini menjelaskan bagaimana cara melakukannya dengan OBS Studio dan Google Meet. OS yang saya gunakan di laptop adalah openSUSE Leap 15.1. Yang perlu...

Xcode Not Enough Disk Space to Install

I need to update my Xcode on my MacBook Air, it only has 128 GB Flash Storage, and it is hard to upgrade the storage, obviously it has limited free storage, so I need to free some spaces, deleting my old files.

But, even there is already 23 GB free storage, it keep complaining, not enough disk space.

After I had 26 GB free storage, I can continue the update.

Membuat CI/CD di GitLab CI

Sekarang saatnya saya akan membuat sebuah catatan tentang bagaimana kita akan membuat CI/CD (Continuous Integration & Continuous Delivery/Deployment) di GitLab. Ini merupakan contoh sederhana yang mungkin dapat Anda jadikan acuan jika Anda sama sekali baru dalam dunia CI/CD, khususnya di GitLab CI. Istilah-Istilah Penting Hal pertama yang ingin saya jelaskan...

Raise/Lower Hand on Zoom Cloud Meeting

Raise/Lower Hand on Zoom Cloud Meeting is a very useful feature.

During online meeting, or online class using Zoom, not all participant can talk at the same time, sometimes the host will mute all participants, when participant want to interrupt, or asking something, so they need to raise the hand.

It seems like not all Zoom user have Raise/Lower Hand icon on the main window, the easiest way to do so is using short cut, for Mac user, the shortcut is: `option + y`.


Install GitLab Runner dengan Ansible

Setelah kita selesai menyiapkan server GitLab di postingan sebelumnya ini dan/atau ini, selanjutnya akan kita setup server atau instance untuk digunakan sebagai Runner. Apa itu GitLab Runner? GitLab Runner merupakan aplikasi sumber terbuka yang digunakan untuk menjalankan job dan mengirim kembali hasilnya ke GitLab. Sebagai penghubung dengan GitLab CI, layanan...

Quarantine PC Build

My wife has an old wish: a gaming platform to play both old games (e.g. Heroes of Annihilated Empires) and new games (e.g. The Witcher 3). I’ve setup a trial version VMWare Fusion on her Macbook Air to let her playing HoAE there but that old game does not run smoothly under VMWare DirectX 11 driver. Our Nintendo 3DS is not with us for now and our old Xbox 360 has been dead for a while (but the controllers still run well). On the other hand, self-quarantine easily gets us bored.

We already considered to buy a new gaming console but after some researches we reached a conclusion. It’s still cheaper to gaming on PC platfrom instead of console.

So I thought about building a budget PC gaming for her during this coronavirus quarantine period. PC Master Race subreddit call this Quarantine Build. The PC is mainly for my wife but sometimes I can use it. My goals are:

  • The budget should be less than 8 million rupiahs.
  • It should be able to play recent games (low setting is no problem for us)
  • It can support my job occasionally (huge RAM capacity, faster storage, minimum of 4 core processors for compiling purpose).

Let’s dive into the detail.

CPU and GPU: Ryzen 5 3400G with Radeon RX Vega 11 Graphics

After doing research on CPU and GPU, I decided to pick a Ryzen processor with iGPU. Radeon name still sounds great for me. If I bought a discrete GPU it’ll add at least another 4 millions to the budget. I’ll not make it. The CPU has 4 cores with 8 threads and 3.7Ghz base frequency. Some reviews said that this iGPU can run The Witcher 3 smoothly on low or medium settings. Should be ok for her. The CPU package provides stock CPU cooler named Wraith Spire.

Its price was almost at the same level as Ryzen 5 2500X (same core, thread and frequency), but with integrated GPU. The CPU has a 3 years warranty from EMD.

Motherboard: ASUS Prime A320M-K

ASUS said this motherboard has an overclocking feature. It’s conflicted with the fact that A320 chipset is not capable of OC. The recommended motherboards for 4500 series Ryzen are the A450, A550, and the X series chipsets. Some motherboard vendor updated their A320 motherboard to support the recent processors. This is a risky bet. If I got the outdated BIOS version, my build will not turn on correctly and show no display at all. At worst, I’ll have to:

  • find another old processor like Atlhon 200GE or
  • submit a request to AMD to send me a bootkit (also an Athlon 200GE) or
  • return the motherboard to the retailer and ask them to update the BIOS first.

The last one is not so convincing. I took the bet anyway and be prepared for bad luck.

The motherboard has a 3 years warranty as well.

RAM: 32GB V-Gen Platinum DDR 4 2666Mhz (2x16GB)

I want to play with k8s and be able to open hundreds of tabs on Firefox. My original plan is to buy a single 16GB RAM then add another 16GB several month later. But after seeing rupiah position going bad recently, I decided to pick 2 sticks at once instead. It will be 32GB RAM with dual channel activated. The processor supports up to 2933MHz and the motherboard supports it up to 3200Mhz. I see no cheap 2933Mhz at the market place and grab a pair of 2666Mhz RAM.

My first choice is the Klevv Bolt series but they are out of stocks everywhere. I got VGEN instead. This V-Gen RAM has no heatsink, just like the Klevv Value series. At least it’s black, matched with the mainboard.

Storage: Intel SSD 660P 512GB NVMe 2280 PCIe Gen 3 x4

My portable computer (X1 Carbon Gen 3) is fast enough with its NVME storage and I want NMVE SSD too in this build. At first Samsung EVO 970 is on my list but then this will not be a budget build. So I choose Intel 660p series for half of the price of Samsung EVO 970.

Power Supply Unit

I do care about PSU after a plurker gave a piece of advice so I pick a Cooler Master MWE 450W, an 80 plus PSU. Cheap enough but it has decent cable socket configuration, like 8 pins cable to power CPU and could handle most of the midrange graphic cards for future upgrade. The cables are in black color. I’ve no intent for overclocking, 450 watts should be enough.

Case: Micro ATX aigo darkFlash DLM22 Titanium

It’s a cheap minimalist but elegant case. Until now I don’t know if PC case has evolved to having the PSU on the bottom instead of the top.

Fans

Cheap fans with blue LED. I expected a modern fan with 3 pins small socket but I got otherwise. But that’s not a problem since the PSU has plenty of standard 4 pins unused.

Precaution on coronavirus

I cleaned then quarantined all the arrived packages for hours before opening them.

Building

Just like the old days, PC building is always fun.

After some digging, it turned out that this motherboard has X370 chipset instead of A320! No wonder if it has overclocking feature in the BIOS. The motherboard recognizes the Ryzen 5 3400G with no issue.

The bad part is the motherboard has some defects: it does not recognize the LAN port and the third PCIe lane. After all this coronavirus is over, I’ll look after the warranty.

Honestly, I was surprised by how the PC component has evolved since I was not following it for years.

Future Upgrade Plan

The motherboard has wide support for new Ryzen CPUs. My plan is after a year or more, I want to upgrade the CPU to non-APU with eight cores or more (maybe a zen 3 generation) and add a good graphic card (a GPU that equals with NVidia 1660 Ti or 2060).

PC Building in the past

I used to be a PC person. My first PC (actually it’s my dad’s PC) was an Intel 486. In 2015 I gave up my PC to my friend (a Pentium IV, 3.06GHz with hyperthreading and 4GB RAM) then moved to a bigger city. Since then my life depends on a portable computer/laptop. My PC was considered old at that time. PSU cables used to be yellow and red. PSU was placed on the top instead of the bottom. Cable management? There was no room on the back of the motherboard, you supposed to ties the cable manually. Even the best cable management was not neat enough for today’s standard. Boards are green, so are the RAM sticks. Graphic cards were used to be fanless. If it has a fan, it’s a small fan. Fans are loud compared to today’s fans that have a modern bearing. I have a small LCD screen but I preferred the CRT screen. Long live the CRT. PC cases were strong and heavy. It has front slots for CD/DVD ROMs and a floppy disk. BIOS user interface used to be plain just like the ncursed based UI, blue and white pixels.

I used to play with various operating systems, included Hackintosh.

The motherboard was placed on the table just like that.

Once I got a case, there was an apple sticker as I was dreaming of owning a Mac computer.

Conclusion

If you’re planning to build a PC, take a look at https://pcpartpicker.com/. It’ll help you to find the compatibility information and also the estimated watt needed for your build. Do not forget take some precautions while handling the packages and components. Wash your hand frequently.

Update: 2020/04/19

It was an early birthday present from my wife. It’s a bit silly to have two-but-not-scalable GPUs in one system but I’m happy with them. The Ryzen GPU can be used as spare if this discrete GPU gone wrong. At the time of this writing, 1660Ti is the latest GTX of NVidia. It has Turing architecture but without ray tracing feature (RTX). Any AAA games run well.

Update: 2020/04/29

My Dream PC

So I thought about what if I got a huge amount of cash to build my dream PC. Then it should be consist of:

  • Motherboard: ASUS ROG Strix AMD AM4 X570 Mini-ITX
  • CPU: Ryzen 9 3950X (3.5 GHz,105 Watt,64M L3 Cache,16 Cores)
  • GPU: AMD Radeon 5700 XT
  • HSF: Noctua NH-D15
  • RAM: G.Skill Trident Z RGB 32GB (16gb x 2) 3200mhz
  • Storage 1: Samsung 970 EVO NVMe M.2 SSD 500GB
  • Storage 2: Samsung 860 Pro 2TB x 2 (RAID 1/Mirroring)
  • PSU: Corsair CX650M 650 Watt 80+ Bronze
  • Monitor: Dell UltraSharp 25 inch U2518D x 2
  • Keyboard: Ultimate Hacking Keyboard Blue Switch with trackpad module.
  • Mouse: Logitech G304
  • Case: NZXT H200 - Mini-ITX

Server CCTV dengan Shinobi Video – Bag. 3, Menggunakan IP Cam Publik

Bagaimana kalau mau belajar pemasangan shinobi namun tidak memiliki IP Cam? ada caranya kah?

Ada. Pasti Ada

Salah satu caranya adalah dengan menggunakan IP Cam publik yang berada di beberapa wilayah/negara. Daftarnya bisa didapat di http://www.insecam.org/. Tidak semua bisa digunakan, namun tentu saja ada yang bisa. Saya sendiri menemukan satu yang sukses digunakan. Tahapannya kurang lebih seperti ini:

  1. Cari salah satu kamera. Saya menemukan yang berada di Jepang. http://www.insecam.org/en/view/534370/.
  2. Ambil IP Addressnya, investigasi url-urlnya dengan iSpy agar bisa mendapat informasi lebih detil.
  3. Jika tanpa nomor 2, juga bisa, kebetulan kameranya support ONVIF, tinggal masukin alamat IP dan atur-atur dan coba-coba sampai pas
  4. Khusus ini, saya menemukan bahwa konfigurasi yang pas itu MJPEG.
IP Cam PublikIP Cam Publik

Selamat mencoba dan latihan untuk kamera yang lain. Banyak spot-spot bagus juga lho.

 

PS: CCTV Xiaomi Yi Max 02 1080p Outdoor Smart IP Cam ini ndak support ONVIF gak bisa diakses via rtsp jadinya.

Server CCTV dengan Shinobi Video – Bag. 2, Pemasangan Shinobi

Pemasangan Shinobi cukup mudah sekali, cukup menjalankan sebaris perintah dari root:

bash <(curl -s https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-install.sh)

Selanjutnya tinggal mengikuti langkah-langkah yang ada di layar. Saya memilih mengambil dari branch development agar mendapatkan fitur-fitur terbaru sekaligus testing. Dokumentasi pemasangan secara lengkap bisa dibaca di sini.

Berikut hal-hal utama yang perlu dilakukan setelah pemasangan:

Peramban Firefox

Gunakan peramban Firefox. Karena peramban Chrome tidak mau bila ada https dan self sign. Juka untuk streaming beberapa video cctv. Firefox bekerja lebih benar dari pada Chrome. Enggak tau kenapa.

Masuk sebagai admin dan buat user

Kita perlu memasukkan url http://alamat-ip-shinobi-server:8080/super. User / Pass bakunya adalah admin@shinobi.video / admin. Dari halaman ini kita bisa membuat user baru untuk masuk ke dashboard shinobi server. Juga untuk mengganti password akun admin tersebut.

Super AdminSuper Admin

Shinobi Dashboard

Untuk masuk ke dashboard, buka peramban dan arahkan ke http://alamat-ip-shinobi-server:8080/ lalu masukkan username/password yang sudah dibuat tadi.

Menambahkan Kamera

Klik tombol + (Add Monitor). Di sini kamera disebut monitor. Lalu tinggal isikan parameter-parameter yang sesuai kamera. Saya mencoba sendiri dan ribet. Setelah beberapa kali percobaan, baru berhasil.

Menambah KameraMenambah Kamera

Ada cara gampangnya, melalui menu pojok kiri atas – ONVIF. Lalu isikan alamat ip dan klik tombol search. Secara pintar, shinobi bisa mendeteksi kamera dalam jaringan yang kombatibel ONVIF. Jika ketemu, akan ditampilkan deskripsi kamera, bahkan bisa tahu merek/modelnya. Lalu tinggal klik tombol bergambar 2 dokumen (seperti ikon duplicate).

Add Monitor - ONVIFAdd Monitor – ONVIF

Selanjutnya tinggal melengkapi/mengganti isian yang ditampilkan (sama dengan jendela Add Monitor). Tinggal disesuaikan saja atau langsung Save. Secara baku, kamera akan memiliki mode View Only. Kita bisa mengatur/mengganti modenya menjadi Record.

Dua Kamera/MonitorDua Kamera/Monitor

Power Video Viewer

Digunakan untuk melihat video yang sudah tersimpan terekam. Tombol ikonnya mirip seperti tag/point pada peta.

Video ViewerVideo Viewer

Seingat saya, Power Video Viewer ini yang tidak bisa di Chrome.

Dah itu dulu tulisan kali ini. Tulisan berikutnya saya akan jelaskan cara optimasinya.

 

*Featured image diambil dari http://getwallpapers.com/collection/hidden-leaf-village-wallpaper

Install GitLab dengan Ansible

Nah, kemarin sudah kita bahas instalasi GitLab secara manual di postingan sebelumnya. Kali ini saya akan tuliskan langkah-langkah instalasi GitLab dengan cara yang lebih simple, yaitu dengan Ansible. Ansible adalah sebuah alat otomasi yang dikembangkan oleh RedHat. Beberapa kata kunci yang melekat pada Ansible adalah “automation tool”, “configuration management”, “infrastructure...

Server CCTV dengan Shinobi Video – Bag. 1, IP Cam

Oprekan kali ini bermula dari lokasi proyek rumah yang kemalingan. Saat awal bangun, kemalingan genset, berikutnya beberapa minggu lalu, para tukang kemalingan handphone.

Saya memiliki cctv yang ada di rumah, subsidi dari Pak Bos yang memiliki perusahaan penjualan cctv. Yang sudah dipakai, sangat mudah dioperasikan. Just work. Namun kali ini sejak pandemi, saya kepikir untuk memanage cctv tersebut dengan linux, entah raspi atau pakai komputer-komputer spek rendah.

Sebelumnya, saya sama sekali tidak mengerti teknologi cctv beserta perabotannya. Namun sejak ngoprek ini, pengetahuan jadi bertambah. Awalnya hanya tau/nemu Shinobi Video saja, setelah itu bingung, harus bagaimana? cara koneksinya ke cctv bagaimana?

Dinamakan IP Cam, tentunya memiliki IP, umumnya, dari pabrikan diatur menjadi dhcp client. Sehingga dapat IP otomatis dari router/server dhcp. Saya dipinjami IP Cam oleh Pak Iwan Tahari. Dalam kardusnya tidak ada informasi apapun (buku manual juga tidak ada). Merek/Pabrikan pembuatnya juga tidak tahu. Jadi dengan coba-coba colokin aja ke router/modem yang ada di rumah, lalu diintip dapat IP berapa, nah itu dia tinggal dipanggil IPnya di peramban.

IP CamIP Cam

Setelah sukses dapat IP, saya punya 1 komputer yang rencananya jadi server cctv dan sudah ada dhcp servernya, saya sambungkan IP Cam tersebut ke komputer . Dapat IP 10.42.0.151. Tinggal dipanggil di peramban dan muncul antar muka web si kamera.

Antarmuka WebAntarmuka Web

Hal utama yang perlu dilakukan adala mengatur zona waktu/waktu, agar nantinya saat dipakai, timestamp yang ditampilkan sesuai. Hal berikutnya adalah pengaturan kualitas gambar. Kamera ini sanggup merekam video/gambar dengan codec H265 dan H264, juga bisa merekam audio serta pengaturan fps dan kualitas. Saya mengatur kualitas medium dan codec H264 (karena H265, rata-rata browser tidak mulus menampilkannya).

Selanjutnya, bagaimana cara menguji bahwa kamera tersebut bisa digunakan? Saya cukup bingung dengan pertanyaan sendiri. Mencari-cari, akhirnya menemukan jawaban, bahwa bisa menguji dengan menggunakan VLC. Tinggal memasukkan url rtp/udp melalui menu Open Network. Nah bagaimana mendapatkan urlnya? macem-macem jawabnya dan bingung. Namun saya menemukan aplikasi pembantu, yang bisa memandu kita.

Aplikasinya bernama iSpy, opensource, adanya di OS Windows saja. Cara penggunaannya cukup mudah, bisa mencari berdasarkan IP yang kita masukkan atau dia mencari melalui jaringan yang ada. Setelah itu dia akan memberikan info ke kita daftar url yang bisa digunakan.

iSpyiSpy

Ada beberapa format yang perlu diperhatikan:

  • ONVIF, ini format standar IP Cam, jika bisa ini, dengan Shinobi bisa otomatis dalam pendeteksiannya.
  • RTSP, catat url rtsp yang diberikan, di atas contohnya rtsp://ip:8554/live/ch00_0
VLC dengan rtspVLC dengan rtsp

Setelah sukses tampil di VLC, kita bisa melanjutkan pemasangan Shinobi Video.

Install GitLab di Ubuntu 18.04

Setelah sekian lama, saya merasa perlu memerbarui konten blog ini. Kali ini saya akan menulis ulang panduan instalasi GitLab di Ubuntu 18.04 dalam Bahasa Indonesia. Dokumentasi resminya dapat langsung diakses melalui halaman ini. Di sana cukup singkat dan mudah dipahami. Namun saya menambah beberapa cuil penjelasan tambahan berdasarkan hasil praktek...

Membuat VM dengan Ubuntu Cloud Image di KVM/virsh

PERINGATAN, Aku akan mengambil harta karunmu. Eh, bukan. Kalo disebut tutorial sebenarnya enggak juga, postingan ini lebih ke catatan pribadi. Dan mungkin akan banyak yang sulit dipahami, terutama jika pembaca belum pernah menggunakan Linux, atau belum pernah menggunakan virsh. Namun, saya akan tetap menulikan ini sebagai “tutorial” yang mungkin akan...

Pasang ulang Weibu F3C – Endless Mini PC (unreleased)

Saya mendapatkan komputer ini dari Baris, CEO Endless Solutions jaman saya masih jadi ambassador pada 2017. Sudah terpasang Endless OS dan berfungsi dengan baik. Beberapa hari ini saya memutuskan untuk mengganti OSnya dengan OS apapun yang memungkinkan.

Pengujian pertama dengan openSUSE Tumbleweed, pemasangan berjalan mulus, masuk desktop agak kacau dikarenakan layar HDMI dianggap sebagai layar extended. Jadi harus mengarahkan kursor yang tepat dan mengatur ulang layar beserta resolusinya. Setelah masuk desktop, wireless tidak bisa digunakan. ini sudah sesuai prediksi. Pasang firmware non-free juga tidak membuahkan hasil.

Pengujian berikutnya dengan Ubuntu 20.04 yang masih Beta. Hampir sama, perbedaannya hanya si Ubuntu sedikit lebih pintar mengenali layar dari pada openSUSE. Namun tetap perlu mengatur resolusi layarnya. Wireless juga sama-sama tidak bisa digunakan walaupun sudah memasang firmware non-free.

Berikutnya nyari firmware yang dipakai Endless OS, nemu di github https://github.com/endlessm/linux-firmware. Coba dipasang … jreng, tetep gagal. Karena masih penasaran, saya unduh iso Endless OS terkini, dan install lagi. Selanjutnya ambil /lib/firmware untuk dibandingkan, ternyata ada sedikit (bisa dibilang banyak sih) tambahan dari yang ada di github. Saya rangkum di https://lumbung.mycoop.id/ahmadharis/linux-firmware/commit/ee4aec2c50e82a06861e2b166814d418e3d5046b. Setelah dipasang, reboot, tetep gak mau.

Baca-baca dmesg, terus guling-guling, nemu titik terang untuk ambil dari https://archive.raspberrypi.org/debian/pool/main/f/firmware-nonfree/firmware-brcm80211_20161130-3+rpt3_all.deb terus dibongkar. Dicomot yang brcmfmac43455. Saya rangkum di https://lumbung.mycoop.id/ahmadharis/linux-firmware/commit/1c1f19900b2399ce123dd5e5d2978aa6ba21e397.

Dicoba di Ubuntu 20.04 sukses. Di openSUSE Tumbleweed pun demikian.

openSUSE TumbleweedopenSUSE Tumbleweed

 

Ubuntu 20.04Ubuntu 20.04

Macbook Jadul dengan openSUSE Tumbleweed

Jadi kapan hari menjenguk duo R, dan keinget kalau ada “harta” lama yang gak dipakai. Jadinya saya minta dan dicoba dihidupkan. Macbook2,1. Laptop jaman Pak Beye kata teman saya.

Macbook2,1Macbook2,1

Ini komputer cukup nyusahin. Kalau pakai MacOS X mentok di Lion. Walhasil gak bisa ngapa-ngapain, wong banyak aplikasi ndak support. Boot usb linux juga ndak mau, gak kayak Macbook keluaran baru yang mau boot linux. Dulu masang ubuntu lewat media CD. Berhubung sudah gak punya CD, alhasil menggunakan segala cara agar bisa boot. Cara termudah adalah memasang ubuntu dari komputer lain, lalu pindah disknya ke macbook jadul tersebut.

Bagaimana dengan OS Linux lainnya? susah … gak bisa kepasang. Kesimpulan akhir, karena grub yang terpasang di ubuntu itu grub-pc i386 (walaupun pakai arch 64 bit). Jadi yang mulus terpasang pertama kali adalah ubuntu.

Selanjutnya usaha agar memasang openSUSE Tumbleweed. Berbagai cara sudah digunakan, ketemu kesimpulan cara yang mujarab sebagai berikut:

  1. Pasang opensuse (boot legacy, jangan uefi) pada disk (usb flashdisk) lain dengan komputer lain.
  2. Sediakan partisi kosong ext4 di macbook jadul tersebut.
  3. Salin isi usb flashdisk pada nomor 1 ke dalam partisi ext4 tadi. Salin dengan opsi -rapv biar kebawa semua atribut dan permission berkasnya.
  4. Uji dengan chroot, kalau mulus berarti sudah benar.
  5. Ubah fstab, sesuaikan dengan uuid yang baru, pindah motherboard/komputer akan membuat beda uuid.
  6. Edit grub di ubuntu, sesuaikan.

Ribet kan? tapi seru, buat nambah kesibukan selama masa diam di rumah.

Pergi ke FOSDEM 2020

Ini nulisnya telat banget, juga males nulis banyak karena udah telat. Intinya sih pingin pamer kalau berhasil pergi ke FOSDEM 2020 di Belgia. Dan seru-seruan bersama teman-teman TDF/LibreOffice.

TDF Board & MCTDF Board & MC

 

Biar kayak orang-orangBiar kayak orang-orang

 

Konser BrexitKonser Brexit

 

Bawaan balik ke kampungBawaan balik ke kampung

Foto lainnya masih banyak sih, tapi ndak minat ditaruh di sini. 🙂
Perjalanan ini ditanggung sepenuhnya oleh The Document Foundation (kecuali pembelian oleh-oleh).

Harbor Installation & Configuration

Preparation

# mkdir /workspace
# cd /workspace
# wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
# tar -xvf harbor-offline-installer-v1.10.1.tgz
# cd harbor

# vi harbor.yml

hostname: 192.168.65.141 <- Ubah sesuai dengan IP Harbor.
  http:
    port: 80
  https:
    port: 443
    certificate: /data/cert/example.com.crt
    private_key: /data/cert/example.com.key

Crete SSL self-sign certificates

# openssl genrsa -out ca.key 4096

# openssl req -x509 -new -nodes -sha512 -days 3650 \
   -subj "/C=CN/ST=Jakarta/L=Jakarta/O=example/OU=Personal/CN=example.com" \
   -key ca.key \
   -out ca.crt

# openssl genrsa -out example.com.key 4096

# openssl req -sha512 -new \
   -subj "/C=CN/ST=Jakarta/L=Jakarta/O=example/OU=Personal/CN=example.com" \
   -key example.com.key \
   -out example.com.csr

# cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=example.com
DNS.2=example
DNS.3=harbor
IP.1=192.168.65.141
EOF

# openssl x509 -req -sha512 -days 3650 \
   -extfile v3.ext \
   -CA ca.crt -CAkey ca.key -CAcreateserial \
   -in example.com.csr \
   -out example.com.crt

# mkdir /data/cert/
# cp example.com.crt /data/cert/
# cp example.com.key /data/cert/
# openssl x509 -inform PEM -in example.com.crt -out example.com.cert
# mkdir /etc/docker/certs.d/example.com/
# cp example.com.cert /etc/docker/certs.d/example.com/
# cp example.com.key /etc/docker/certs.d/example.com/
# cp ca.crt /etc/docker/certs.d/example.com/
# cp ca.crt /usr/local/share/ca-certificates/
# update-ca-certificates
# systemctl restart docker

Deploy Harbor

# ./prepare
# docker-compose down -v
# docker-compose up -d

Push Docker images

# docker login example.com
# docker tag mysql:latest example.com/nama_project/mysql:latest
# docker push example.com/nama_project/mysql:latest

Done

The post Harbor Installation & Configuration appeared first on INVALEED.

Monitoring Jenkins dengan Prometheus dan Grafana

1. Jalankan container jenkins, prometheus dan grafana, dalam tutorial ini semua container ada di dalam satu host.

# docker run -d --name invaleed/jenkins-custom -p 8080:8080 -p 50000:50000 jenkins
# docker run -d --name prometheus -p 9090:9090 prom/prometheus
# docker run -d --name grafana -p 3000:3000 grafana/grafana

2. Install “Prometheus metrics plugin” di Jenkins
3. Periksa hasil instalasi plugin dengan mengakses http://JENKINS_HOST:PORT/prometheus
4. Ubah konfigurasi prometheus dengan menambahakan konfigurasi berikut di bagian paling bawah pada berkas prometheus.yml

# docker exec -it prometheus /bin/sh
# vi /etc/prometheus/prometheus.yml

- job_name: 'jenkins'
  metrics_path: /prometheus
  static_configs:
    - targets: ['JENKINS_HOST:PORT']

# docker restart prometheus

5. Login ke grafana http://GRAFANA_HOST:PORT/ menggunakan username admin/admin
6. Dashboard — Add Datastore — pilih Prometheus, masukkan url “PROMETHEUS_HOST:PORT”, save & test.
7. Dashboard — Import Dashboard — Masukkan ID 9964
8. Done

The post Monitoring Jenkins dengan Prometheus dan Grafana appeared first on INVALEED.

Vim Dev Containers

I’ve been using vim and docker previously, but this post that explain how to use vscode devcontainers amaze me.

Pre-Req

Before try this tutorial you should have docker and docker-compose installed.

Setup Global .gitignore

Create .gitignore_global file to ignore .containers folder

$ echo '.containers' > ~/.gitignore_global

Then enable it by configure git

$ git config --global core.excludesfile ~/.gitignore_global

Create .containers directory for your project

In this post, I will use ruby repository for example. You can clone the repository from github

$ cd workspace
$ git clone https://github.com/ruby/ruby.git

Create your .containers directory inside ruby repository

$ cd ruby
$ mkdir .containers
$ touch .containers/docker-compose.yml
$ touch .containers/Dockerfile

You will have file structure similar to this

/home/user/workspace/ruby/
    .containers
    | | docker-compose.yml
    | | Dockerfile
    other_ruby_files

Edit your .containers/Dockerfile with this

FROM ubuntu:18.04

WORKDIR /workspace

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y git ruby autoconf bison gcc make zlib1g-dev libffi-dev libreadline-dev libgdbm-dev libssl-dev build-essential tzdata

You’ll need tzdata to running timezone-related tests in ruby repository

Before create compose file, some tests in ruby refer to [::1] as localhost, which makes us to enable ipv6 in our container. Configure your docker to enable ipv6 by editing /etc/docker/daemon.json

{
    "ipv6": true,
    "fixed-cidr-v6": "2001:db8:1::/64"
}

Then reload docker with $ sudo systemctl reload docker

Edit your .containers/docker-compose.yml with

version: '3'

services:
  dev:
    build:
      dockerfile: Dockerfile
      context: ./
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
    command: sleep infinity
    volumes:
      - .bash_history:/root/.bash_history
      - ./..:/workspace:cached

To make persistent command history in our container, we can mount .bash_history.

Build Containers

Next we need to build our containers then running it as a daemon

$ docker-compose -f .containers/docker-compose.yml build
$ docker-compose -f .containers/docker-compose.yml up -d

To compile ruby and running tests, we need to use container shell

$ docker-compose -f .containers/docker-compose.yml exec dev bash

Build Ruby and Running Tests

To build ruby we need to run several commands based on README.md files

These commands run in your docker container

root@docker-hash-container:/workspace# autoconf
root@docker-hash-container:/workspace# ./configure
root@docker-hash-container:/workspace# make

To running tests

root@docker-hash-container:/workspace# make test-all #running all tests
root@docker-hash-container:/workspace# make test-all TESTS='test/ruby/test_time_tz.rb' #running single file test

Create shortcut

If you want to connect container’s shell via vim, you can add following lines to your .vimrc

nnoremap <silent> <leader>dev :terminal docker-compose -f .containers/docker-compose.yml exec dev bash<CR>

Now you can connect to container’s shell with <leader>dev, but you should spawn your container first. I also create alias in my .zshrc for easier command

alias container='docker-compose -f .containers/docker-compose.yml'

Now you can spawn or kill container with

$ container build #for build container
$ container up -d #for running container in background
$ container exec dev bash #for connecting to container shell
$ container down #for shutting down container

What Next

Now you can still use vim as editor, and have containerized development env.

Howto Create Scalabale Jenkins

Deploy jenkins deployment file, please refer to this link.

# kubectl create -f jenkins-deployment.yaml
# kubectl create -f jenkins-service.yaml
# kubectl create -f jenkins-ingress.yaml

Create a service account

# kubectl -n default create sa jenkins

Gives cluster-admin permissions to the new account

# kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=default:jenkins

Retrieves the secret

# kubectl get -n default sa/jenkins --template='{{range .secrets}}{{ .name }} {{end}}' | xargs -n 1 kubectl -n default get secret --template='{{ if .data.token }}{{ .data.token }}{{end}}' | head -n 1 | base64 -d -

Copy the whole content printed at the console and go to Jenkins > Credentials > System > Global credentials > Add Credentials, change the Kind drop-down options to Secret text and past into Secret, create with name “jenkins-sa”.

Configure Jenkins

# Kubernetes
Name : kubernetes
Kubernetes URL : ["kubectl cluster-info | grep master"]
Credentials : jenkins-sa
Jenkins URL : ["kubectl describe pod jenkins-xxx | grep IP:"]

# Pod Template
Name : jenkins-slave
Namespace : default
Labels : jenkins-slave

# Container Template
Name : jenkins-slave
Docker image : jenkins/jnlp-slave

Lets the others to be default

Create jenkins job and test!

The post Howto Create Scalabale Jenkins appeared first on INVALEED.

Beli Kuota Rela, Tapi Beli Aplikasi Tidak Mau

Beberapa hari lalu saya mengisi acara Seminar Pendidikan yang diselenggarakan oleh salah satu yayasan, temanya adalah "Implementasi Belajar Sambil Bermain lewat Permainan di Gawai" (kurang lebih seperti itu kalau diterjemahkan ke bahasa Indonesia).

Salah satu Materi saya adalah mengenai penggunaan GCompris untuk belajar sesuai kurikulum yang berlaku.

Pada sesi tanya jawab ada salah seorang peserta yang bertanya;
  • Apakah GCompris bisa diinstal di Android?
  • Bisa, jawab saya singkat, cari saja di Playstore
Kemudian sebagian besar peserta seminar mulai mencarinya di playstore.
Salah seorang peserta bertanya;
  • Kok berbayar?

  • Ya, jawab saya dengan beberapa penjelasan singkat
  • Peserta lain kemudian menimpali kalau harganya terlalu mahal untuk sebuah permainan.
Saya pun menjawab:
  • Dalam satu bulan anda belu kuota habis berapa?
Dia jawab
  • Kurang lebih 100 ribu untuk saya, kalau untuk anak saya 20 ribu untuk seminggu.
Kemudian saya menimpali, Anda beli kuota setiap bulan saja tidak sayang, kok beli aplikasi yang harganya cuma 99.000 dan bisa dipakai seumur Android sayang banget.
Belum lagi kuota untuk anaknya yang dipakai untuk game online yang tidak jelas unsur pendidikannya.

Padahal rata-rata peserta seminar adalah tenaga pendidik (guru), termasuk kedua peserta yang bertanya tadi.
Sepertinya tingkat Edukasi untuk tenaga pendidik di Indonesia masih perlu ditingkatkan lagi.
 

Penulis Yang Egois



Belakangan ini saya memang sedang sering berinteraksi dengan orang-orang yang bergerak di bidang Keperpustakaan atau Literasi.

Dari obrolan dengan beberapa penulis buku dalam kegiatan tersebut, saya mendapatkan fakta bahwa kebanyakan penulis tersebutnya ketika mengawali jadi penulis menggunakan aplikasi yang tidak legal.
Sebagian dari mereka sadar bahwa aplikasi yang dia gunakan untuk menulis itu ilegal.

Sebagian lagi tidak mengetahuinya sama sekali karena ketika membeli komputer/laptop aplikasi tersebut sudah terpasang.
Saat sudah menjadi penulis terkenal, sebagian sudah menggunakan aplikasi yang legal dengan membelinya.

Sebagian lagi tetap menggunakan aplikasi yang ilegal walau sudah mampu membelinya dari hasil menulis buku. Dia pun tahu dan sadar kalau yang dia lakukan tidak benar.

Ada juga yang walau sudah menerbitkan puluhan judul buku tapi tetap tidak tahu kalau aplikasi yang dia gunakan untuk menulis itu ilegal.

Padahal di semua buku yang dia tulis, kemudian diterbitkan selalu tertulis kalimat kurang lebih seperti ini  
Hak Cipta dilindungi undang-undang. Dilarang memperbanyak atau memindahkan sebagian atau seluruh isi buku ini dalam bentuk apapun, baik secara elektronis maupun mekanis, termasuk memfotokopi, merekam atau dengan sistem penyimpanan lainnya tanpa izin tertulis dari penulis.


Dia sendiri ketika menulis buku sudah melanggar hak cipta, atau menggunakan aplikasi hasil penggandaan tanpa seijin pembuatnya, lha buku yang dia tulis kok tidak boleh digandakan!
Menurut saya ini namanya penulis yang egois dan dzalim.

Pesan saya, daripada menulis dengan aplikasi ilegal karena memang belum mampu beli, lebih baik pakai aplikasi yang walau gratis tapi legal.