Google Cloud: Backup and Restore Strategy on Google Kubernetes Engine (GKE)

Hi all!

I hope that you are doing well, safe and healthy!

In this journal, I would like to share and explain a case study related to one of the great features provided by Google Kubernetes Engine (GKE). Yup, it is a Backup for GKE. As the name suggests, this feature is intended to back up and restore the workloads in the Kubernetes cluster we have on Google Cloud.

What can be backed up by?:

  • Configuration: Kubernetes resource including manifest and the cluster state.
  • Volume backups: Application data that correspond to PersistentVolumeClaim resources

There are many possible scenarios that we can choose to do back up and restore the cluster. For example, we can only back up the configuration and restore it to newly created cluster, or we can also back up the entire cluster and restore it to the source cluster for disaster recovery that may happen. Besides that, we can also set a scheduler job to run back up automatically. It will save our lives when shocking incidents unexpectedly happen .

From the main documentation here, there are two main components to focus on. A service and an agent. A service has ability to serve as a controller for Backup for GKE service, and the agent will run automatically in cluster where backups or restores are performed. Below is the diagram architecture:

Now. In this journal, we will do a simple backup and restore scenario. I have a GKE cluster in us-central1 named gke-cluster1-a. There, I deploy a wordpress application with a persistent disk provided by PersistentVolumClaim and execute backup regularly every hour. Then I create a new GKE cluster named gke-cluster1-b, and try to restore the backup created before to test and ensure that the backup runs smoothly and successfully.

What will I backup? GKE cluster configuration and wordpress data stored on persistent disk. So, when the restore is complete, wordpress is automatically loaded and can be accessed from outside.

Okay! Let’s jump in!

Here, I will use Google Cloud SDK instead of Google Cloud Console. So, I will define the environment variables first like below:

# Define env variables
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_USER=$(gcloud config get-value core/account)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export IDNS=${PROJECT_ID}.svc.id.goog

export GCP_REGION="us-central1"
export GCP_ZONE="us-central1-c"

export NETWORK_NAME="default"

Make sure the configuration is correct, and then set the default region and zone based on the variables defined before.

gcloud config set compute/region $GCP_REGION
gcloud config set compute/zone $GCP_ZONE

We can verify with the command below:

gcloud config list

We need to enable three APIs that will be used for each service. Containers API will be used by GKE for computing, storage API will be used by GKE for persistent disk, and also GKE Backup for backup and restore tasks.

gcloud services enable compute.googleapis.com \
    container.googleapis.com \
    storage.googleapis.com \
    gkebackup.googleapis.com

We can verify the enabled services with command below:

gcloud services list --enabled

Next. We have to create a GKE cluster. I create it as a public cluster with a multi-zones configuration in us-central1 region. Do not forget to add –addons=BackupRestore to install Backup for GKE agent in this cluster.

export CLUSTER_NAME="gke-central1-a"
gcloud beta container clusters create $CLUSTER_NAME \
    --project=$PROJECT_ID  \
    --region=$LOCATION \
    --addons=BackupRestore \
    --num-nodes=1 \
    --enable-autoupgrade --no-enable-basic-auth \
    --no-issue-client-certificate --enable-ip-alias \
    --metadata disable-legacy-endpoints=true \
    --workload-pool=$IDNS  

Verify the cluster and make sure the state of all workers is Ready.

gcloud container clusters get-credentials $CLUSTER_NAME \
--region $GCP_REGION --project $PROJECT_ID

kubectl get nodes -o wide

For wordpress application, I am using the tutorial from here. You can follow along, or use your own application instead.

# create Kustomize file
cat > ./kustomization.yaml << EOF
secretGenerator:
- name: mysql-pass
  literals:
  - password=gkebackup2022
EOF

# download manifests
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml 

# update Kustomize file (note >> which appends original file)
cat >> ./kustomization.yaml << EOF
resources:
  - mysql-deployment.yaml
  - wordpress-deployment.yaml
EOF

# deploy (using built-in kustomize feature of kubectl)
kubectl apply -k ./

Make sure the pod is running, the external IP in the service appears, and the volume state is bound.

kubectl get pods
kubectl get svc
kubectl get pvc

Try to access the application from browser like below.

Now, we are going to do back up strategy. We will back up the entire kubernetes cluster environment, including data volume and secrets.

Before that, make sure the location can provide it, because not all regions can using command below:

gcloud alpha container backup-restore locations list \
    --project $PROJECT_ID

For the backup strategy, we have to create a BackupPlan first. I will create it using environment variables that defined below

# Define env variables for GKE Backup
export BACKUP_PLAN="gke-central1-a-backup"
export LOCATION="us-central1"
export CLUSTER="projects/$PROJECT_ID/locations/$GCP_REGION/clusters/$CLUSTER_NAME"
export RETAIN_DAYS="3"

And then, create a BackupPlan which will back up all namespaces, including secret and volume data. I also set the cron scheduler that will automatically back up every hour and set backup retention only for 3 days.

gcloud alpha container backup-restore backup-plans create $BACKUP_PLAN \
    --project=$PROJECT_ID \
    --location=$LOCATION \
    --cluster=$CLUSTER \
    --all-namespaces \
    --include-secrets \
    --include-volume-data \
    --cron-schedule="0 * * * *" \
    --backup-retain-days=$RETAIN_DAYS \
    --locked

Verify the backup plan newly created:

gcloud alpha container backup-restore backup-plans list \
--project=$PROJECT_ID \
--location=$LOCATION

We can also verify from the Cloud Console too,

How do we back up using BackupPlan created before? Using the command below will create a manually backup named manual-backup1 with the appropriate BackupPlan, location, and project.

export BACKUP=manual-backup1
gcloud alpha container backup-restore backups create $BACKUP \
    --project=$PROJECT_ID \
    --location=$LOCATION \
    --backup-plan=$BACKUP_PLAN \
    --wait-for-completion

Wait and ensure the backup is successful.

All right. After we do the back up the task. We need to test using restore to ensure that the backup is running correctly.

First, I will create a second GKE cluster with the same specification like the cluster one.

export CLUSTER_NAME2="gke-central1-b"
gcloud beta container clusters create $CLUSTER_NAME2 \
    --project=$PROJECT_ID  \
    --region=$LOCATION \
    --addons=BackupRestore \
    --num-nodes=1 \
    --enable-autoupgrade --no-enable-basic-auth \
    --no-issue-client-certificate --enable-ip-alias \
    --metadata disable-legacy-endpoints=true \
    --workload-pool=$IDNS   

Same as BackupPlan, I define the environment variables:

export RESTORE_LOCATION="us-central1"
export RESTORE_PLAN="gke-central1-b-restore"
export CLUSTER2="projects/$PROJECT_ID/locations/$GCP_REGION/clusters/$CLUSTER_NAME2"
export CLUSTER_RESOURCE_CONFLICT_POLICY="use-backup-version"
export NAMESPACED_RESOURCE_RESTORE_MODE="delete-and-restore"
export VOLUME_DATA_RESTORE_POLICY="restore-volume-data-from-backup"

d

And do the manual restore with appropriate restore plan and the backup created before.

export RESTORE="manual-restore1"
gcloud alpha container backup-restore restores create $RESTORE \
    --project=$PROJECT_ID \
    --location=$GCP_REGION \
    --restore-plan=$RESTORE_PLAN \
    --backup=projects/$PROJECT_ID/locations/$LOCATION/backupPlans/$BACKUP_PLAN/backups/$BACKUP \
    --wait-for-completion

Wait until the restore is successful. Verify the pods is running, PVC are bounds, and the external IP is accessible

Cheers!

Google Cloud: Deploying a Static Web Application to Google Cloud Storage Bucket with HTTPS Load Balancer

Hi all!

I hope that you are doing well, safe, and healthy!

In this journal, I would like to share how to deploy a static web application using the Google Cloud Storage bucket for hosting with HTTPS Load Balancer. So it will be safely accessible from outside.

What makes it different from static web hosted on other platforms? Using this HTTPS Load Balancer will ensure the communication and/or user requests will be secure using the HTTPS 443 Protocol.

You may see the diagram below:

The data flow is:

  • When external users access a static website from outside, the request will forward to the Load Balancer system.
  • Like a gate, the forwarding rule is the first part that needs to be passed. It contains the public IP along with the port used by the application. The forwarding rule is responsible for forwarding requests to the respective HTTP(S) proxy targets.
  • Once received by the target HTTP(S) proxy, the request will be evaluated using the URL Map to determine where to forward the request. For example, in this journal will be forwarded to the GCS backend, which contains the application. In this section also, we can add security using an SSL certificate to make it even more secure.

Let’s jump in.

Here. I am using Google Cloud SDK for configuration. First, we have to define the environment variables.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_USER=$(gcloud config get-value core/account)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# Workload identity domain
export IDNS=${PROJECT_ID}.svc.id.goog

export GCP_REGION="asia-southeast2"
export GCP_ZONE="asia-southeast2-b"

export NETWORK_NAME="default"

And enable the appropriate APIs

# enable apis
gcloud services enable compute.googleapis.com \
    storage.googleapis.com

To verify which APIs is enabled, we can use the command below:

gcloud services list --enabled | head -25 | tail -15

Set default region and zone to avoid wrong location

# Configure default region and zone
gcloud config set compute/region $GCP_REGION
gcloud config set compute/zone $GCP_ZONE

To verify all configuration is correct, use the command below:

gcloud config list

We need to create a new bucket in GCS to store the static files. We can use gcloud or gsutil command-line tool that provided by Google Cloud to create it. For example, I create a bucket named pengedit-markdown-sept2022site

# create a storage bucket
export BUCKET_NAME="pengedit-markdown-sept2022site"
gsutil mb -b on gs://$BUCKET_NAME

gsutil ls

I will use a react app I created before for this scenario. So, I need to clone from the repository first, and run npm run build command to provide a build directory for production-ready application

# Setup the application
APP_NAME="pengedit-markdown"
git clone https://github.com/misskecupbung/pengedit-markdown
cd $APP_NAME
npm i react-scripts
npm run build
cd ../

Copy all the sources code in build directory to the bucket newly created.

# upload site files
gsutil cp -r $APP_NAME/build/* gs://$BUCKET_NAME

For making it accessible from outside, we need to configure permission too. It must be accessible by anyone with read-only access.

# set read permissions for public
gsutil iam ch allUsers:objectViewer gs://$BUCKET_NAME

# set 404 to redirect to index.html page
gsutil web set -m index.html -e index.html gs://$BUCKET_NAME

Prepare the dishes is finished.

Now, we are going to set up the HTTPS Load Balancer which will serve to handle external requests from outside. Before that, I will define the environment variable for IP Public and SSL Certificate that I will request and domain name that I will use

export ADDRESS_NAME="my-public-ip"
export CERTIFICATE_NAME="pengedit-markdown-ssl"
export DOMAIN="pengedit-markdown.dwiananda.me"

Request a dedicated Public IP with command below. This IP will be used by the web application.

# reserve external IP
gcloud compute addresses create $ADDRESS_NAME --global

After that, go to your own DNS Management and point the domain to the appropriate IP Address before. Make sure it is resolved by a command similar nslookup or dig.

Fortunately! And maybe this is also one of the huge benefits when we use HTTPS Load Balancer, we can request an SSL Certificate that we can use on the target HTTPS or target SSL proxy just by one line command.

# create a certificate
gcloud compute ssl-certificates create $CERTIFICATE_NAME \
    --description=$DOMAIN \
    --domains=$DOMAIN \
    --global

The requesting process may consume around 20-40 minutes depending on the issuer. Please wait until the status changes into ACTIVE.

We can also verify the SSL Certificate from the cloud console like below

And then, we also need to create a backend service that will distribute the requests to the healthy backends. In this case, it is a GCS bucket.

# create backend bucket for lb
export BACKEND_BUCKET_NAME="pengedit-md-backend-static-site"
gcloud compute backend-buckets create $BACKEND_BUCKET_NAME \
    --gcs-bucket-name=$BUCKET_NAME

Define a backend service created before in a URL MAP

# configure URL Map
gcloud compute url-maps create https-lb \
    --default-backend-bucket=$BACKEND_BUCKET_NAME

And create a target HTTPS Proxy which configured URL Map and SSL Certificate created before.

# Add HTTPS target proxy to LB
gcloud compute target-https-proxies create https-lb-proxy \
    --url-map=https-lb \
    --ssl-certificates=$CERTIFICATE_NAME

After the target HTTPS proxy is created, create a new forwarding rule that connected to the target.

# Configure Forwarding Rule
gcloud compute forwarding-rules create https-content-rule \
    --load-balancing-scheme=EXTERNAL \
    --network-tier=PREMIUM \
    --address=$ADDRESS_NAME \
    --global \
    --target-https-proxy=https-lb-proxy \
    --ports=443

Don’t forget to create a firewall rule to allow the incoming request from outside using TCP port 80 and 443.

# Add a firewall rule
gcloud compute firewall-rules create allow-http-https-traffic \
    --direction=INGRESS \
    --priority=10000 \
    --action=ALLOW \
    --rules=tcp:80,tcp:443 \
    --source-ranges=0.0.0.0/0

And that is. After all the configuration is successfully. We can verify the web application using command-line tool similar like cURL or using browser instead.

References:

Cheers!

AWS: Building a Simple Web Application Using AWS CodeBuild

Hai!

Selamat siang. Pada jurnal ini saya ingin berbagi sedikit mengenai AWS CodeBuild. AWS CodeBuild merupakan layanan yang memiliki tugas untuk meng-compile kode aplikasi, menjalankan unit test, dan membuat artifak yang siap untuk di deploy oleh layanan AWS CodeDeploy.

AWS CodeBuild menawarkan banyak sekali build environment yang sudah dikemas oleh bahasa pemrograman dan build tools populer seperti Apache Maven, Gradle, dan masih banyak lagi. Kelebihan AWS CodeBuild:

  • Fully managed. Dikelola sepenuhnya oleh AWS
  • On demand. Skalabilitasnya sangat tinggi dan sesuai permintaan
  • Out of the box

Mari kita coba.

Pertama, masuk ke AWS Management Console. Pada kolom pencarian, ketik AWS CodeBuild.

Berikut ini tampilan dashboard dari AWS CodeBuild. Klik Create Build Project untuk membuat project baru.

Isikan nama project, misal web-app dan isikan deskripsinya lalu gulir ke bawah

Untuk Source Provider, pilih AWS CodeCommit dan pilih repositori yang diinginkan. Jangan lupa atur branch nya juga ya. Disini saya atur default ke master. Lalu gulir ke bawah

Pada bagian environment, saya pilih Managed Image dengan pengaturan:

  • Operating system: Amazon Linux 2
  • Runtime: Standard
  • Image: aws/codebuild/amazonlinux2-arch64-standard:1.0
  • Image Version: use the latest image for this runtime version

Untuk bagian service role, saya pilih New Service Role dan set default pengaturan lainnya

Pilih No Artifact karena disini saya tidak ingin membuat artifak dan hanya ingin mencoba AWS CodeBuild saja dan uncheck pada Logs. Lalu klik Create Build Project

Pastikan project berhasil dibuat dan untuk menjalankan build klik Start Build

Tunggu sampai statusnya berubah menjadi Succeded

Buka tab Phase details dan bisa diverifikasi mengenai tiap fase build yang telah dijalankan

Sekian!

AWS: Creating a Private Repository using AWS CodeCommit

Hai!

Selamat siang. Pada jurnal ini saya ingin berbagi mengenai salah satu layanan AWS yaitu AWS CodeCommit. AWS CodeCommit merupakan layanan version control (mirip seperti GitHub) yang dikelola AWS untuk menyimpan repositori yang berisi kode aplikasi pribadi hingga binary yang aman dan memiliki skalabilitas yang tinggi.

AWS CodeCommit memungkinkan para developer dalam satu tim untuk saling berkolaborasi dalam membuat kode yang saling terintegrasi satu sama lain melalui pull request, branching, dan merging. Dan selain itu juga dapat melakukan tracking untuk melihat perubahan kode yang terjadi.

Mari kita coba.

Pertama, buka AWS Management Console masing-masing.

Lalu pada kolom pencarian, ketik codecommit

Setelah masuk ke dashboard CodeCommit. Klik Create repository untuk membuat repositori baru yang nantinya akan digunakan sebagai lumbung untuk menyimpan kode.

Isikan nama repositori. Misal web-app, isikan deskripsi dan klik Create

Verifikasi bahwa repositori berhasil dibuat dan salin perintah clone yang terdapat di step ketiga, yang tertera git clone https://git-xxxxx . Perintah ini yang nantinya kita gunakan untuk mendorong/push kode dari lokal laptop ke repositori

Selanjutnya, kita akan mengatur autentikasi yang dapat digunakan untuk mengakses repositori secara remote CLI. Pada kolom pencarian, ketik IAM.

Masuk ke menu Users dan pilih user yang akan digunakan untuk mengakses repositori. Misal user dwi

Masuk ke tab Security Credentials

Gulir ke bawah sampai menemukan opsi HTTPS Git Credentials for AWS CodeCommit. Klik Generate

Akan muncul kredensial yang berhasil di generate, dan bisa diunduh

Selanjutnya, akan kita coba uji adengan mendorong/push kode aplikasi ke repositori.

Pertama, clone repo dengan perintah yang telah disalin sebelumnya. Gunakan kredensial yang telah digenerate.

Note: terdapat warning karena repositorinya memang masih kosong.

Lalu coba unggah kode aplikasi dengan melakukannya seperti tangkapan layar berikut ini

Bisa diverifikasi melalui web-app repo di console, apakah kode berhasil diunggah atau belum

Sekian!

Memaksimalkan Ryzen 5 5600g untuk Video Game

Setelah menimbang-nimbang cukup lama, akhirnya saya menjual CPU dan GPU saya selagi harganya masih tidak masuk akal, yakni Ryzen 5 3400g di harga 2.5 juta rupiah (harga beli 2 juta rupiah di tahun 2020) dan GTX 1660 Ti di harga 6.6 juta rupiah (harga beli 4 juta rupiah di tahun 2020).

Terus saya pakai apa, dong? Sesuai judul, saya comot 5600g di harga 3.2 juta rupiah dan tidak menggunakan discrete GPU sampai harga GPU kembali normal. Bagaimana saya bisa yakin harganya akan normal? Berikut alasannya:

  1. Eth akan pindah ke PoS paling dekat Q2 2022, paling lama entahlah. Setelah Eth 2.0 merged ke main net, mining ethereum tidak lagi berlaku. GPU bekas akan memenuhi pasaran dan sesuai hukum supply demand, harga GPU baru akan tertekan turun.
  2. Intel masuk ke pasar discrete GPU.
  3. Rilis RTX 4000 series.

Saya memilih 5600g dibanding 5700g karena perbedaan harganya lebih dari 1 juta rupiah sementara perbedaan performanya hanya sekitar 5%. Artinya 5600g ini masuk ke best bang for the bucks.

Saya tidak terlalu puas dengan performa CPU saya sebelumnya, yakni 3400g. Sementara 5600g ini memberikan banyak kejutan. Judul seperti Dirt Rally 2.0, Battlefield V, PES 2020, Jedi Fallen Order, PUBG dan lainnya cukup lancar dimainkan. Meskipun ada beberapa permainan koleksi saya yang tidak begitu lancar seperti Horizon Zero Dawn dan BeamNG. Toleransi lancar di sini bagi saya adalah 45-50 FPS.

Mestinya yang nyaman itu 60FPS, bukan? Itu dia.

Overclock

Ada 2 hal yang bisa saya tingkatkan dari sistem yang saya miliki sekarang. Frekuensi CPU dan RAM-nya.

Untuk CPU caranya cukup mudah. Naikkan saja VSOC-nya ke 1.35v dan frekuensi CPU-nya akan naik sampai 4.3 sampai 4.4 GHz. Lebih dari itu harusnya tidak stabil.

Sementara untuk RAM lebih rumit. Ini juga pengetahuan baru buat saya. RAM yang dipasarkan untuk umum memiliki beberapa kualitas kelas chip yang disebut die.

Samsung B-Die adalah yang terbaik untuk dioverclock, overheadnya lumayan dan cukup stabil. Jadi kalau Anda ingin merakit PC baru, sebaiknya cocokkan RAM dari QVL dengan daftar yang ada di sini.

RAM saya (F4-3200C16D-16GFX) sayangnya masuk kelas C-Die. RAM ini dipasarkan dengan XMP Profile yang mencapai 3200MHz. Apakah bisa lebih kencang dari ini? Bisa.

Caranya adalah sebagai berikut (di setiap langkah ini setelan BIOS perlu disimpan lalu reboot ke sistem operasi untuk melihat apakah setelannya cukup stabil):

  1. Disable XMP Profile, frekuensinya akan turun ke 2133MHz.
  2. Naikan voltase VDIMM ke 1.1v.
  3. Naikkan multipliernya ke target, misalnya 3400MHz.
  4. Setel timing yang cukup longgar, misal mulai dari 18-22-22-22-44
  5. Perkecil angka timingnya secara perlahan, misal 18-21-21-21-40.
  6. Perkecil terus sampai ketemu batasnya (tidak stabil, crash, reboot, tidak bisa boot)
  7. Jika ketemu, kembali ke setelan terakhir. Jika dirasa cukup stabil, ulangi siklusnya dari no 3, naikkan multipliernya ke jenjang berikutnya. Lanjutkan sampai ketemu frekuensi dan timing yang stabil.

Di kasus saya, frekuensi yang stabil jatuh pada 3600Mhz dengan timing 18-18-21-21-39, GDM di-disabled dan Cmd2T disetel ke 1T. Ini sesuai dengan panduan yang saya ikuti https://www.reddit.com/r/overclocking/comments/mfcwb4/samsung_cdie_3200cl16_1st_overclock_attempt_70ns/.

Usaha ini memberikan hasil berupa tambahan performa, yaitu sekitar 5-15 FPS tergantung permainannya.

Sekarang saya bisa lanjut nyetir di Dirt Rally 2.0 dengan 60FPS di resolusi 1080p. Sungguh di luar perkiraan.

AWS: Deploy Container Workloads using Amazon Lightsail

Hai!

Selamat malam teman-teman. Pada jurnal ini saya ingin berbagi bagaimana men-deploy container(s) di AWS menggunakan Amazon Lightsail. Untuk Lightsail sendiri sudah pernah saya bahas di jurnal sebelumnya, bisa dibaca dulu AWS: Launch a WordPress Site using Amazon Lightsail. Selain itu, saya juga pernah share mengenai bagaimana men-deploy container menggunakan Amazon ECS, bisa dibaca dulu di AWS: Getting Started with Amazon ECS (Elastic Container Service) using Fargate.

Pada intinya, goal yang diinginkan sama, yaitu aplikasi di dalam container running dan bisa diakses. Hanya saja, di AWS banyak opsi yang bisa dipilih, salah satunya adalah Amazon Lightsail.

Mari kita coba.

Klik Services > Compute > Lightsail

Kita akan diarahkan ke dashboard Amazon Lightsail. Klik tab Containers > Create container service

Pada langkah pertama, bisa pilih region yang akan menjadi tempat service berada. Saya pilih Singapore dan gulir ke bawah

Pilih spesifikasi dari container, misal saya pilih Micro dengan scale x 2 (container akan direplika menjadi 2)

Klik + Set Up Deployment > Specify a custom deployment. Ubah nama container, image, configuration (jika ada), dan port aplikasi, misal 80 HTTP. Sesuaikan dengan container yang ingin dibuat

Bisa tentukan konfigurasi health check nya juga seperti di bawah ini

Tentukan nama service, misal virtualpiano dan klik Create container service.

Tunggu hingga status container menjadi Running

Akses public domain melalui tab baru, maka aplikasi bisa diakses seperti berikut ini

Sekian!

AWS: Create an Amazon FSx File System for Windows File Server

Hai!

Selamat malam teman-teman. Pada jurnal ini saya ingin berbagi mengenai bagaimana membuat file server dengan menggunakan Amazon FSx untuk Windows workload. Jurnal ini merupakan jurnal lanjutan, bisa dibaca dulu di AWS: Create AWS Managed Microsoft AD Directory dan AWS: How to Join a Windows Server Instance to AWS Managed Microsoft AD Directory .

Ibaratkan Windows workload sudah terbentuk, file server disini berperan untuk saling berbagi dan menyimpan file. Amazon FSx merupakan layanan file server yang fully-managed untuk Windows. Dengan backend fully-native Windows file system, Amazon FSx memiliki banyak fitur seperti performa dan kompatibilitas yang tinggi.

Mari kita coba.

Sebelum memulai, pastikan AD directory sudah aktif dan instance Windows Server di jurnal sebelumnya bisa diakses.

Untuk menggunakan Amazon FSx, klik Services > Storage > FSx

Kita akan diarahkan ke dashboardnya. Klik Create file system untuk membuat fs baru.

Pilih tipe file system yang akan digunakan. Klik Amazon FSx for Windows File Server lalu Next.

Tentukan nama file system, tipe lokasi (Multi-AZ atau Single-AZ), dan tipe storage (SSD atau HDD) lalu Gulir ke bawah

Tentukan VPC yang akan digunakan oleh file system dan pilih security groupnya. Pastikan rule berikut sudah di allow:

RulesPorts
UDP53, 88, 123, 389, 464
TCP53, 88, 135, 389, 445, 464, 636, 3268, 3269, 5985, 9389, 49152-65535

Untuk autentikasi saya pilih AWS Managed Microsoft Active Directory, dan pilih direktori yang sudah dibuat di jurnal sebelumnya.

Enkripsi saya pilih default dan untuk auditing, bisa ceklis log yang diperlukan.

Bisa tambahkan dns alias (memudahkan untuk map drive), dan tentukan konfigurasi backup and maintenance nya. Atur daily backup, retensi, dan kapan daily maintenance window dilakukan.

Bisa tambahkan tag, lalu Next

Bisa lakukan review untuk verifikasi apakah konfigurasi sudah benar

Jika sudah OK, klik Create file system

Tunggu hingga statusnya berubah menjadi Available.

Klik nama file system untuk melihat detail, dan untuk mengaitkan instance ke file system, bisa klik Attach

Akan muncul pop up berisi langkah-langkah bagaimana melakukan attach file system

Kita bisa gunakan perintah di atas dan paste di CMD, atau melalui GUI seperti berikut:

Saat sudah di attach, drive siap digunakan

Referensi:

  1. https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step2.html

Sekian!

AWS: How to Join a Windows Server Instance to AWS Managed Microsoft AD Directory

Hai!

Selamat malam teman-teman. Pada jurnal ini saya ingin membahas kelanjutan jurnal sebelumnya. Bisa dibaca disini AWS: Create AWS Managed Microsoft AD Directory. Setelah kita berhasil membuat direktori dengan tipe AWS Managed Microsoft AD, saya akan menjelaskan bagaimana instance windows server/client dapat join ke direktori tersebut.

Langsung saja mari kita coba.

Pertama, kita buat instance yang akan join ke domain terlebih dahulu. Misal instance Microsoft Windows Server 2022. Klik Services > Compute > EC2

Pada menu Instances, klik Launch Instance

Pada langkah pemilihan AMI, pilih Microsoft Windows Server 2022 Base

Pilih instance type nya, misal t3.xlarge dengan spesifikasi 4 core vCPU dan 16GB RAM.

Ada dua cara yang bisa kita jalankan agar instance bisa join ke AD, pertama secara manual dari instance nya sendiri, kedua melalui pengaturan Domain join directory di langkah ketiga seperti berikut ini. Ketika menggunakan opsi kedua, bisa langsung pilih direktori mana dan atur IAM Role nya.

Saya disini akan coba menggunakan opsi pertama, jadi pada langkah ketiga bisa langsung Next

Pada pengaturan Storage bisa diatur atau langsung Next.

Bisa ditambahkan tags (opsional) untuk instance lalu Next.

Pada pengaturan Security Group, pilih sg dengan port 3389 di inbound rule sudah di allow.

Bisa lakukan Review dan klik Launch

Tunggu hingga statusnya Running. Untuk mengakses instance, ceklis > Connect

Saya coba pilih menggunakan RDP client. Unduh file RDP nya bisa klik Get password untuk melihat password user Administrator dari user Windows Server.

Gunakan aplikasi RDP di laptop dan bisa coba akses. Pastikan Windows Server dapat diakses seperti berikut. (Jika gagal, bisa cek security group, pastikan port 3389 sudah di allow).

Kita set Preferred DNS server di Windows Server menggunakan IP Address dari AWS Managed Microsoft AD dan pastikan bisa diping.

Buka System Properties dan coba ubah Computer Name, pilih Domain dan isikan nama domain. Saat muncul pop-up seperti berikut, isikan kredensial Admin dari AD dan klik OK.

Pastikan muncul pesan Welcome sebagai tanda komputer telah join ke AD seperti berikut ini

Referensi:

  1. https://docs.aws.amazon.com/fsx/latest/WindowsGuide/walkthrough01-prereqs.html

Sekian!

AWS: Create AWS Managed Microsoft AD Directory

Hai!

Selamat malam teman-teman. Pada jurnal ini, saya ingin berbagi mengenai layanan AWS Directory. Layanan tersebut memungkinkan kita untuk menggunakan Microsoft AD (Active Directory) dan mengintegrasikannya dengan berbagai layanan di AWS.

Direktori akan menyimpan berbagai informasi seperti user, group, dan perangkat yang nantinya digunakan untuk mengelola akses dan sumber daya. AWS Directory Service menawarkan beberapa pilihan direktori yang ingin mengunakan existing Microsoft AD atau LDAP (Lightweight Directory Access Protocol) yang berbasis cloud. Apa saja itu?

  1. AWS Directory Service for Microsoft Active Directory
  2. AD Connector
  3. Simple AD
  4. Amazon Cognito

Mari kita coba.

Dari AWS Management Console > Security, Identity & Compliance > Directory Service

Kita akan diarahkan ke darshboard Directory Service. Klik Set up directory untuk membuat direktori baru.

Langkah pertama, pilih tipe. Misal saya pilih AWS Managed Microsoft AD lalu Next.

Pilih edisi. Dari AWS sendiri menawarkan dua tipe, Standard dan Enterprise. Karena saya hanya untuk pengujian, saya pilih Standard.

Isikan Directory DNS name, misal ad.ananda.com dan NetBIOS (opsional) lalu gulir ke bawah

Bisa isikan deskripsi dan tentukan password dari Administrator. Lalu bisa Next

Pilih VPC dan Subnets yang akan digunakan. Lalu Next

Bisa lakukan review, dan jika sudah OK bisa klik Create directory.

Tunggu status direktorinya menjadi Active. Ini membutuhkan waktu 20-40 menit.

Klik ID untuk melihat detail.

Bagaimana implementasi dan penggunaan nya? Bagaimana client/Windows Server join ke directory yang telah dibuat? Kita akan bahas di jurnal selanjutnya ya!

Referensi:

  1. https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html

Sekian!

Analisis Berkas Log Rutin, Jangan Lupa

Kemarin, tepatnya 3 hari yang lalu, maklum begitulah kebiasaan lama, ada mention ke saya di github mengenai tugas yang pernah saya kerjakan yaitu pembenahan repository BlankOn. Yang mana pembenahan tersebut memang memakan space penyimpanan yang cukup besar. Yang akhirnya membuat berhenti proses yang membuat harus menelusuri hingga berkas log.

Tulisan ini tidak akan panjang karena laporan detil harusnya memang hanya untuk internal tim. Namun yang perlu dan sering lupa saya lakukan adalah melakukan analisis terhadap berkas log dari sistem, yang seringkali di-ulik baru saat setelah ada kejadian. Perlu ada mekanisme analisis singkat pada sistem, misalkan bila ada entry-an log berulang selama sekian kali dengan kejadian serupa maka wajib melakukan apa.

Menurut saya tidak perlu baku, namun minimal perlu ada warning. Dan sepertinya perlu mencari tahu adakah proyek yang memfasilitasi ini.

Sekian pembahasan berkas log yang membuat penuh root dini hari ini.

The post Analisis Berkas Log Rutin, Jangan Lupa first appeared on Blog.YHT.Web.ID.

AWS: Getting Started with Application Load Balancer

Hai!

Selamat malam teman-teman. Pada jurnal ini saya ingin berbagi mengenai salah satu tipe ELB (Elastic Load Balancer) di AWS, yaitu ALB atau Application Load Balancer.

ALB merupakan salah satu tipe lb yang bekerja di layer 7 OSI (presentation layer) atau sesuai nama, layer aplikasi. Aplikasi yang menjadi target ALB adalah IP, instance, dan lambda dengan protocol listener yang didukung HTTP, HTTPS, dan gRPC.

ALB memiliki beberapa kelebihan, diantaranya mendukung redirection (mengalihkan request ke URL lain), mampu melakukan kustomisasi HTTP Response, mendukung aplikasi berbasis container, dan melakukan peningkatan performa dengan bantuan AWS Global Accelerator.

Bagaimana ALB bekerja?

  1. User melakukan request ke aplikasi
  2. Listener di load balancer menerima request yang cocok dengan protokol dan port yang telah dikonfigurasikan
  3. Listener mengevaluasi request berdasarkan rule yang ditentukan, jika oke, request akan diarahkan ke target yang sesuai
  4. Target yang health (dalam artian dapat menerima request) dalam satu atau beberapa grup menerima trafik berdasarkan algoritma load balancer (round-robin) dan aturan perutean yang ditentukan di listener.

Mari kita coba.

Disini saya sudah memiliki dua ec2 instance dengan tampilan seperti berikut. Saya bedakan agar mudah dikenali bahwa trafik dikirim dari instance yang berbeda.

Sebelum membuat lb, kita buat target group terlebih dahulu. Target ini yang akan menangani request dari user. Klik Create target group

Pilih tipe target sesuai aplikasi yang dimiliki. Saya coba pilih Instance

Tentukan nama target, protokol HTTP dan port 80 (karena web server saya menggunakan HTTP). Pilih VPC dan versi protokol yang digunakan oleh aplikasi.

Atur konfigurasi health check berupa protokol, port, threshold, timeout dan interval. Lalu klik Next

Pilih instance yang akan dimasukan ke dalam target dan klik Include as pending below. Pastikan instance sudah masuk ke kolom Review Targets dan bisa klik Create target group.

Pastikan target berhasil dibuat dan klik nama target untuk melihat detail.

Pastikan status kedua registered targets adalah Healthy.

Saat target sudah dibuat, kita bisa langsung membuat LB nya. Klik Create Load Balancer

Pada tampilan pertama, terlihat ada empat tipe.

Klik Create pada tipe ALB

Definisikan nama LB, skema (saya pilih Internet-facing karena aplikasi bersifat publik) dan tipe IPv4.

Pilih VPC dan az yang akan digunakan. Saya sesuaikan az nya sama dengan az dari target group.

Pilih Security group. Pastikan port 80 sudah di allow di sg tersebut. Pada Listeners and routing, pilih protokol HTTP, port 80, dan forward to alb-target (target group yang dibuat sebelumnya).

Bisa ceklis di bagian AWS Global Accelerator untuk peningkatan performa (opsional), review dan kalo sudah OK, bisa klik Create.

Pastikan LB berhasil dibuat.

Tunggu hingga status dari LB sudah Active.

Coba akses melalui DNS name di browser.

Referensi:

  1. https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html

Sekian!

AWS: How to Set Up a Network Load Balancer

Hai!

Selamat malam teman-teman. Setelah di jurnal sebelumnya kita membahas Classic Load Balancer, disini kita akan membahas tipe load balancer kedua. Yaitu Network Load Balancer di AWS. NLB memiliki ciri merutekan trafik di layer 4 OSI (layer transport), seperti TCP, UDP, dan juga TLS (untuk koneksi yang secure) yang dapat menghandel jutaan request per-detik.

Bagaimana alur kerja dari NLB? kurang lebih seperti di bawah ini:

Penjelasan:

  1. User melakukan request ke aplikasi
  2. Load balancer menerima request secara langsung maupun melalui endpoint untuk konektivitas private (melalui AWS PrivateLink).
  3. Listener di load balancer menerima request protokol dan port lalu mengarahkannya berdasarkan tindakan default sebelumnya yang telah ditentukan.
  4. Target group yang healthy (dalam artian dapat menerima request) akan menangani trafik sesuai dengan algoritma.

Mari kita coba.

Seperti di jurnal sebelumnya juga, saya sudah membuat dua instance yang di dalamnya telah terinstall web server dengan tampilan seperti berikut.

Sebelum membuat lb, kita akan membuat target group (berisi aplikasi yang menangani request) terlebih dahulu. Di laman EC2 Instance > Load Balancing > Target Groups. Klik Create target group.

Pada langkah pertama, atur tipe target. Disini saya memilih tipe Instances dan gulir ke bawah

Atur nama target, misal lb-network-target. Pilih protocol yaitu TCP port 80. Pilih VPC, dan atur konfigurasi health check nya juga.

Pengaturan health check berupa healthy treshold, timeout, dan interval. Lalu klik Next

Pada langkah kedua, pilih instance yang akan didaftarkan ke target tersebut > Include as pending below sampai instance berpindah pada tab Review targets, Lalu klik Create a target group

Pastikan target berhasil dibuat.

Klik nama target untuk melihat detail

Setelah target dibuat, kita bisa langsung membuat lb nya. Buka menu Load Balancers > Create Load Balancer

Tentukan tipe dari load balancer yang akan dibuat. Klik Create pada tipe Network Load Balancer.

Isikan nama lb, misal network-lb. Atur skema (disini saya pilih Internet-facing karena lb digunakan untuk mengatur trafik publik), dan tipe IP address yaitu IPv4. Lalu gulir ke bawah.

Atur VPC dan AZ. Ceklis az mana saja yang digunakan untuk merutekan trafik.

Pada Listeners and routing, pilih protokol TCP, port 80, dan forward ke target yang telah dibuat sebelumnya.

Lakukan review dan jika oke bisa klik Create load balancer.

Pastikan load balancer berhasil dibuat

Tunggu status dari lb berubah menjadi active

Dan Health status pada target berwarna hijau

Salin DNS name dari lb dan coba buka melalui browser. Terlihat tampilan berbeda menunjukkan trafik diarahkan oleh lb ke instance yang berbeda.

Referensi:

  1. https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html

Sekian!

Hoby Pencet Tombol Meteran

Sudah hampir 1 bulan ini sering pencet-pencet tombol Meteran PLN.
Berkaitan dengan pencet-memencet tombol meteran tersebut saya ada beberapa cerita menarik, tapi saat ini saya ceritakann 1 dulu saja.
Beberapa hari lalu ada teman yang beli token listrik, nah ketika selesai diinput tulisannya gagal, sudah dicoba berulang-ulang tetap nihil hasilnya.


Akhirnya dia komplain ke saya, ya sudah saya kompain ke PLN melalui call center 123, biar cepat karena kalau lewat aplikasi PLN Mobile prosesnya lebih lama, walau begitu ketika kita telp ke 123 salah satu jawaban si robot adalah kurang lebih seperti ini "agar pelayan lebih cepat ditangani silakan gunakan aplikasi PLN Mobile" tapi yaitu tadi kenyataannya malah sebaliknya.

 


Pernah komplain lewat aplikasi PLN Mobile dari jam 8 pagi, jam 4 sore baru ditangani.
Singkat cerita ketika saya telp 123 diminta nomor WA yang aktif. saya berikan saja.
Saya Telp 123 pukul 14.xx WIB, pukul 21.xx WIB si Halo Electrizen baru kirim WA berisi Key Change Token-1 untuk diinput ke meteran yang bermasalah.


Ya sudah saya teruskan saja kode tersebut ke pemilik meteran, dengan sedikit penjelasan cara menggunakannya.

Beberapa menit kemudian pemilik meteran balas WA saya, bahwa ketika selesai memasukkan kode baris ke-2 selalu gagal.
Akhirnya dia minta tolong ke saya untuk datang ke rumahnya, saya pun dijemput.
Sampai di rumahnya langsung saya input 4 baris kode tersebut, ternyata memang benar seperti yang dia bilang, pada baris kedua keterangannya gagal.


Jalan keluarnya saya reset meteran tersebut dengan pencet angka 0 (nol) sebanyak 2 kali, kemudian Enter.
Baru deh masukkan 4 baris kode tersebut, selanjut masukkan kode token yang dia beli. dan input token pun sukses.

Sementara ini kalau ada yang beli token listrik, saya tolak dengan alasan Saldo habis, daripada cuma untung seribu rupiah tapi ribet dan menyita waktu. Lebih baik waktu digunakan untuk keperluan lain yang lebih bermanfaat, misalnya menulis buku.
-
Mungkin PLN keliru dengan slogannya "Listrik Printar" kalau jadinya ribet begini, mungkin sloganya bisa diubah jada "Listrik Belajar"

GitLab Productivity Tracking: Know How Your Team Breathing

How do I know if my team performs well? How to tell that with data? If we’re underperformed or didn’t meet the deadline, how to find the causes and tackle them? I was thinking about analyzing the entire activities in my team to get some insights, starting from GitLab issues.

I put some filters to the issues:

  • Has been assigned to someone
  • Has mentioned in (at least one) a merge request
  • Has been closed
  • The entire time spent (from open to closed) is less than two weeks (some issues were created as reference or documentation which sometimes took a bit long to be resolved)

For each, I fetch the:

  • Notes, contains activities of the issue, including comments, assignments, etc. There is a timestamp for each assignment activity.
  • Merge requests to the particular issue. They contain the timestamp of created and merged events which are very useful to get insight from the dev side.

From 500 issues sorted by the latest updated (by the boundaries above), they narrowed down to 113 issues.

By using this data, I could aggregate it to get the duration of the activities for each issue:

  • From opened to closed, which represents the lifetime of an issue.
  • From opened to picked by/assigned to someone.
  • From assigned to the first merge request, which represents how long devs finished their jobs.
  • From merge request creation to a merged event, which represents how long peer to peer review process and revisions (if any) take time.
  • From merged to issue get closed, which represents how long the QA took over the issue and test them.

I wrote them into a single script: https://gist.github.com/herpiko/b5aa126e29f5f2ad15c4ff481bf5aee8. There is a lot more area to explore. Of course, this setup has some inaccuracy as there were so many things that happened in the team but let’s see the early insight first, shall we?

There were some bottlenecks:

  • The developers took too long to get merge requests merged into our main branches. It’s a bit tricky and has a trade-off. You can stop your coding session to help your coworker by reviewing their patches immediately then you get a costly context switch here. Or you can ignore it, let your job done first then take a look at the patches later which may impact the issue cycle a lot.
  • QAs (which at the time they were also handling the other stuff) have a hard time testing it. The single issue should take less than an hour to test but the QAs have not picked it for days until they have time or until the deadline came nearer.

In the last step, let’s gather the team and talk.

Cryptocurrency Mining

After a year of having mining-capable GPU for gaming and despite the EIP 1559 plan, I decided to join the bandwagon in the end of April. Then I added some GPUs. Still, it’s a small rig. Quite late but I still got much profit. In this October I sold the rig and left with the 1660 Ti so I could continue to play video games. Some of the reasons:

  • The daily profit is low in recent days
  • Some miners began to sell their GPUs while the GPU prices spiked again
  • There is a difficulity bomb in Ethereum that will be dropped in December (but maybe get postponed https://ambcrypto.com/ethereum-developers-propose-to-postpone-difficulty-bomb-until-may-2022/)
  • It is not something that can leave unmonitored. Sometimes issues occured. Also I still worry about the safety.
  • https://www.fi.se/en/published/presentations/2021/crypto-assets-are-a-threat-to-the-climate-transition–energy-intensive-mining-should-be-banned/
  • Want to focus to another side hustle

I learned a lot in the process. The profit exceeded my expectation. Big portion of it goes into investment portofolio and I bought myself a steering wheel as selfreward. When in doubt, flat out!

Parting with Wakijo

He served me for almost eight years. Not very well but he did his job. Since COVID, I barely touch him and I believe my family could not get much advantage by having him around. So I let it go.

Wakijo passed to my old friend, his previous owner.

Music as a Time Capsule

I’m not talking about music that takes you back to the year where it got popular. That is a shared experience among other people. What I’m talking about is the music that could bring you up a specific memory about specific place or event, about yourself, in one strong dose. I don’t know if it works for others but here is how it works for me.

Over and over again, almost infinite

It’s started with an album by Enno Lerian when I was still a kindergarten kid. I’ve to asked my dad to hook the cassette into stereo player every single time I want to dance with dudidam. I only want to hear dudidam and dismiss the rest of the album. Backward and forward buttons were my best fellow since there is no repeat feature back then.

Then I grew up with impaired hearing disability and understanding music is hard for me. I don’t mind about lyric or genre. As long as the beat blasts my brain and the melodies make my body wiggled, I’ll just listen. I frequently found myself loving a certain song by how it sounds but completely disagree against the raison d’etre of its lyric.

So I just played the song I liked over and over again until I found another easy listening song. I can stays with single track for long hours, days or weeks. The trade off is clear: I’ve bad knowledge (and sometime bad taste, some people said) about music and its diversity.

I don’t know the long term effect of this habit until I move to another city for the first time.

Just how strong the dose is?

The memories is as strong as its inaccuracy. No instrument that could bring sharp memories as text or imaging or talking with your old friend, but music do this differently on me. A particular song could help me to imagine the place in strong vibe. It maybe inaccurate but it’s strong.

My wife hate the way I play songs so I never play it using loud speaker.

This is the way.

Teman Lama

Suatu pagi di hari minggu saya “reuni” dengan teman-teman SMA yang satu ekstrakulikuler (Paskibra). Dari 14 orang cuma 11 yang berhasil dikumpulkan di grup WA. Yang hadir di zoom 10 orang. 8 sudah menikah, 6 sudah punya anak, 1 bahkan tinggal di Montreal nikah sama bule di sana. 2 dari 3 orang yang ga berhasil dikontak hidupnya kurang beruntung/bermasalah, sementara yang 1 tidak diketahui kabarnya.

Semua ini berangkat dari 1 orang yang rindu di Kanada sana, mengemukakan idenya di grup WA. Hal ini mengingatkan akan diri saya beberapa tahun yang lalu yang merasa kesepian setelah lama merantau di ibu kota.

Sistem peringatan dini (EWS)

“Entah kenapa ketika tiba-tiba passion gue muncul terhadap satu hal, biasanya akan ada pekerjaan dalam waktu dekat” begitu kata gue ke Aris suatu malam di kantor Cilandak waktu gue ngoprek SMS gateway dan dia membuktikannya dua Minggu kemudian kami kedatangan tamu dari Belanda

Selepas dari kampus sekitar tahun 2010an, saat itu lagi rame-rame nya kejadian gempa di Indonesia, saat itu pengguna internet ga seramai sekarang dan blackberry masih menguasai pangsa gadget high-end. gue sempet bantuin disebuah NGO kebencanaan buat membangun sistem peringatan dini bencana alam terutama gempa bumi. datanya dari BMKG buat dibroadcast ke stasiun tv, portal, dan SMS warga di sekitar area terdampak. Teknologinya sederhana memang tapi lumayan gue jadi punya kesempatan jadi pembicara di banyak tempat gara-gara itu.

Sekitar tahun yang sama sebagian teknologi tersebut mulai diadopsi oleh beberapa lembaga dari pemantauan kota di Jakarta, pemantauan kekerasan di Papua dan Thailand selatan, pemantauan lingkungan, kekerasan thd TKI, hingga pemantauan pemilu di malaysia. Beberapa tahun kemudian. sekitar 2013 tiba-tiba dikontak mahasiswa MIT diajak mengembangkan salah satu teknologi tersebut untuk pemantauan banjir di Jakarta. Sayangnya itu hanya menjadi sebatas paper. Mungkin karena terlampau canggih kala itu.

Beberapa waktu kemudian saat rame kebakaran hutan, gw terlibat dalam pengembangan sistem peringatan dini kebakaran hutan, metodenya jauh berbeda dari yang sebelumnya lumayan ribet, tapi beberapa tahun kemudian berguna buat pekerjaan gue di lokadata. Nah sekarang gw lagi pengen iseng bikin EWS buat SpO2 karena mungkin ketersediaan tempat tidur RS akan semakin berkurang dan akan lebih banyak yg isoman, kalo ada sebuah EWS yg bisa broadcast ke nakes/RT/RW keknya bisa mengurangi beban RS. ternyata alat dan bahannya cukup murah.

Gue bilang juga apa!!

Penggalan frasa semacam itu dan sejenisnya udah gue tinggalkan sejak mungkin 5 tahunan lebih, frasa yang ga ada gunanya selain bentuk keinginan pengakuan atas keberhasilan yang entah apa yang sebenernya juga ga jelas.

Bener ga jelas, karena gw jamin 80% yang bilang kaya gitu ga siap perencanaan jika ide mereka yang dipake, kalo ditanya bagaimana rencananya biasanya akan jawab “lah gue kan udah usul, masa gue juga yang harus bikin rencana?” Terlihat flawless sekali bukan?

Belakangan sejak pemerintah terlihat kehilangan kontrol terhadap pengendalian pandemi, frasa semacam itu banyak yang lewat di timeline sosial media gue. Jadi inget omongan si Bahlul suatu hari waktu kami duduk disebuah rapat, dan lagi ngomongin yang mimpin rapat .

G: “Omongannya tinggi banget ya ga takut kesamber pesawat tuh?”
B: “Orang Indonesia itu dilahirkan dengan rahang yang kuat”
G: “maksudnya gimana?”
B: ” hobinya komentar doang ga ada eksyen”
G: “itu soalnya pas absen pembagian otak bangunnya kesiangan, dapetnya dikit deh”

Sinyal dan indikator

Bagaimana untuk mengetahui seekor sapi sedang lapar atau sudah kenyang?

Setahun trading gue belajar untuk menunggu sinyal, kemudian menunggu konfirmasi kemudian baru di eksekusi. Setelah eksekusi pun kita perlu pasang pengaman sampai semua berjalan sesuai arah sinyal. Pengaman dipasang di awal biar gue ga mikir lagi buat mengakhiri kalo ternyata setelah konfirmasi gerakan ga berjalan sesuai dengan rencana.

Mendefinisikan keberanian adalah ketika kita mengeksekusi setelah melihat konfirmasi dan memasang pengaman, spekulasi adalah ketika kita baru hanya melihat sinyal kemudian kita langsung mengeksekusi, gegabah adalah ketika ga ada sinyal kita maksa buat masuk.

Secara umum trading mencerminkan kehidupan secara keseluruhan. Manusia tidak didesain untuk mengatasi semua masalah, banyak hal yang diluar kuasa setiap individu. Dari alam sampai perasaan individu yang lain. Kita hanya perlu alat ukur atau indikator yaitu sebuah alat yg bisa kita gunakan untuk mengukur sebuah kejadian.

Output dari beberapa indikator yang saling berkorelasi bisa membentuk sebuah sinyal, sinyal – sinyal tersebut tentunya akan banyak sekali dan karena alat ukur ini adalah alat ukur statistik maka tidak selalu sinyal ini benar, oleh karena itu sinyal perlu diperkuat oleh sebuah konfirmasi. Setelah adanya konfirmasi gerakan sesuai dengan yg sinyal berikan baru rencana dapat dijalankan.

Jadi menurut gue kalo mau belajar apapun pelajari sifat dan indikator baru pelajari sinyal dan konfirmasi.

Obituary

Lebih dari 10 tahun hidup di perantauan gue bersyukur banyak ketemu orang baik, seorang kawan pernah bilang “orang baik biasanya bakal ketemu orang baik, cuma ya biasanya yg ga baik lebih banyak.”

Well, Veri Junaedi adalah salah satunya, sebelum mengenal baik kami sempat bertemu beberapa kali saat persiapan pemilu 2014 sama-sama di KPU tapi beda bidang beliau di peraturan perundangan gw di teknologi mungkin circa 2012, di tahun yang sama di kepentingan yang lain kami dipertemukan di sebuah program yaitu Matamassa program inisiatif masyarakat untuk pemantauan pemilu. Tak lama kemudian kami berada satu gedung dalam usaha rintisan kami masing-masing.

Veri Junaedi, adalah sosok yang istimewa berbeda dengan image orang yg bekerja dibidang hukum kebanyakan yg gw kenal. Entah apa yang dia lihat sama gue sehingga mau berteman sama gue. Mungkin karena kesamaan kami spontan, ketika punya ide kemudian langsung dieksekusi.

Dia orang yg tiba-tiba ga ada angin ga ada hujan tiba-tiba ngajak makan bareng, yang mungkin setiap Ramadhan ngajak buka bareng, setiap kesempatan makan-makan gw selalu diundang. hmm mungkin ini juga salah satu kesamaan kami, kami suka makan enak.

Beberapa kali kami nyoba buat bikin usaha rintisan bareng juga tapi ga jalan, kami terlalu sibuk dengan urusan masing-masing, meski gagal pertemanan kami baik-baik saja. ya gue menemukan definisi pertemanan tak sebatas materi dari orang-orang baik sekitar gue.

Perbedaan usia kami ga terlalu jauh, Gue udah nganggep dia seperti kakak gue sendiri. Sekali gue pernah ngenalin perempuan spesial gue ke dia, gue ajak ke pembukaan rumah makannya. buat gue ini adalah big move karena gue bukan tipe orang yg selalu ngenalin cewek gue ke orang-orang terdekat, unless she has taken half of my soul. Sayangnya gw ga berjodoh sama dia.

Sekitar 3 Minggu yang lalu seperti biasa dia kontak ngajakin ngopi di proyek rumah barunya di Cibinong, dia bercerita setiap weekend dia nginep disana. Rumahnya gede iya memang dia sekalian menyiapkan untuk kantor istrinya yang notaris. Ajaibnya dia juga tetep bikin area buat kumpul2 seperti yg biasa kami dan kawan-kawan sering lakukan.

“Ini nanti kita bisa kumpul-kumpul disini mas, terus yang bawah itu bisa buat barbeque, sebelah sana nanti saya bikin kolam renang, terus nanti pintu ke rumah udah saya bedakan biar yg ngumpul ga ganggu orang rumah, dan kalo kemaleman males balik udah saya siapkan kamar khusus tamu” kata Beliau sambil tertawa-tawa

Kemudian kami makan, dan gue dikenalkan seluruh keluarga besarnya dari neneknya yang biasa dia panggil emak sampai ibunya. saat itu neneknya bercerita tentang masa kecil mas Veri yang sudah ditinggal bapaknya dari usia 4 bulan dalam kandungan, kemudian ibunya yang banting tulang sebagai single parents membesarkan dia, juga paman dan sodara-sodaranya yang lain yang bahu membahu membesarkan dia. “Saya juga ga nyangka dia akan jadi anak yang pinter begini” ujar emak

Saat itu gue jadi tau darimana kebaikan dia berasal. Dia dibesarkan oleh orang-orang yang baik dan tidak pernah putus asa. dalam hati gue bertanya apa harus jadi orang sesusah ini buat jadi orang berhasil? Gue melihat mas Veri ini orang yg berhasil. Dia berhasil menjalin pertemanan dengan banyak orang dari berbagai kalangan, dia berhasil membangun kantornya yang nyaris ga sepi dari pelanggan, dan menularkan kebaikannya pada ketiga putrinya yang masih kecil.

Sekitar dua Minggu lalu dia memasang status di WA bahwa dia terkena Covid 19, gw kirim pesan ke dia semoga lekas pulih. Namun tak pernah terbalas hingga siang tadi gue dapat kabar dari Fadli teman kami bahwa Mas Veri sudah Wafat siang tadi pukul 14.10 di RS. Pelni.

Anak dan Video Gim

Saya dan saudara-saudara saya tumbuh di keluarga pengusaha yang ketat tentang apa yang boleh dan tidak boleh dilakukan oleh anak mereka. Bapak saya membolehkan apa pun selama hal itu terkait dengan sekolah. Pilihan atau keputusan-keputusan orang tua saya itu adalah hak mereka. Saya patut mematuhi mereka sampai saya diizinkan untuk mengambil keputusan penting sendirian. Namun saya menyayangkan satu hal yaitu betapa tidak sukanya orang tua saya terhadap video gim, apa pun bentuknya. Orang tua saya pastinya memiliki alasan tersendiri.

Saya dan kakak saya tidak pernah meminta konsol video gim kepada orang tua kami secara terang-terangan. Tapi kami masih bisa bermain di rumah teman/tetangga kami atau di rental video gim, kan? Tidak juga, orang tua kami juga tidak mengizinkan itu. Kami selalu melakukannya secara sembunyi-sembunyi. Jangan remehkan rasa penasaran anak-anak yang sangat tinggi. Hal-hal yang berbau teknologi dan elektronik sangat menarik minat kami. Puncaknya, bapak saya marah besar saat mengetahuinya dan langsung menjemput kami di tempat kami bermain.

Dampak

Sejak kejadian itu saya tidak pernah benar-benar bisa menikmati bermain video gim.

Saya berusia 12 tahun saat bapak saya meralat sikapnya dan memberi saya kebebasan yang lebih longgar. Saya pindah ke lingkungan baru di mana saya bertemu anak-anak baru yang lebih mapan. Kebanyakan dari mereka memiliki konsol video gim di rumahnya. Meskipun bapak saya tidak pernah lagi melarang saya akan tetapi saya tidak pernah bisa menikmati video gim seperti dulu. Semacam ada perasaan tidak enak menghantui dan hal itu sangat mengganggu.

Jika sedang bermain video gim dengan teman-teman, saya lebih sering dijadikan bulan-bulanan karena saya sangat payah. Saat teman-teman berdebat tentang aturan-aturan dalam permainan tertentu, saya sudah malas mencernanya. Saya menjadi anak yang memiliki sifat kurang kompetitif, gampang menyerah, selalu mencari cara aman atau malas mengambil resiko dan tidak cukup kreatif dalam urusan strategi. Saya tidak lagi menyukai permainan yang melibatkan lebih dari 1 orang seperti sepak bola. Saya menyukai basket tapi saya tidak pernah suka bermain dalam tim.

Setelah tumbuh dewasa dan bisa menghasilkan uang sendiri, saya pernah mencoba menyewa konsol gim, dibawa pulang selama beberapa hari untuk melihat apakah saya dapat menumbuhkan kembali hasrat yang dulu. Hal itu ternyata sia-sia.

Akibat yang paling memalukan barangkali pendapat sok tahu saya yang menyatakan bahwa video gim bukanlah bentuk seni. Saya salah. Saya hanya kurang dapat mengapresiasi jenis karya yang satu ini karena bias dan trauma.

Kembali

Saya pertama kali bertemu istri saya pada suatu sore di tahun 2017, kenal lebih dekat 1 tahun kemudian dan akhir 2019 kami menikah. Buat saya hal yang paling mengejutkan dari dirinya adalah ia seorang gamer. Ia tumbuh besar di keluarga yang mampu membeli konsol video gim dan masih bermain gim sampai sekarang. Saat ia mempersiapkan pindahan untuk tinggal bersama saya, ia membawa serta konsol Xbox 360 dan sebuah Nintendo 3DS yang sistemnya terkunci dalam bahasa/aksara Jepang. Hati saya bergejolak. Saya tidak dapat menahan diri dan mencoba menjelajahi konsol genggam tersebut. Saya kembali menjelma seperti anak kecil yang penasaran akan dunia luas yang pintunya tidak lebih lebar dari 800 piksel. Dan yang paling penting, orang terdekat saya sekarang memahami dengan baik perasaan meluap yang saya alami itu.

Keputusan untuk memiliki anak juga mendorong saya untuk bereksperimen ulang dengan video gim. Kami kemudian memutuskan untuk merakit PC gaming. Dengan dukungan istri, saya perlahan dapat menumbuhkan kembali minat yang hampir 2 dekade telah pudar. Setelah setahun berlalu dan menamatkan judul-judul epik seperti What Remains of Edith Finch, Inside, Shadow of Mordor dan lainnya, saya dapat mengapresiasi video gim sebagai karya seni. Saya juga menyempatkan diri untuk mempelajari kultur dan perkembangan video gim yang selama ini saya ketinggalan banyak.

Sekarang video gim menjadi salah satu pilihan saya dalam mengisi waktu luang di akhir pekan. Tidak jarang saya bermain bersama keluarga. Video gim juga telah membantu saya melewati tekanan pada masa-masa karantina atau isolasi mandiri karena infeksi COVID-19. Video gim melatih saya untuk bergerak lebih kreatif, tidak mudah menyerah, mengembangkan kelincahan dalam berpikir dan memberi saya kumpulan emosi positif yang tidak saya dapatkan di media lain.

Menjadi Orang Tua

Keresahan orang tua zaman saya masih kecil mungkin berbeda dengan orang tua zaman sekarang. Video gim masih menghantui sebagai salah satunya. Sekarang di media massa mudah didapati berita-berita tentang seorang anak yang menghabiskan jutaan rupiah hanya untuk membeli voucher gim. Di lingkungan tempat tinggal saya sendiri dapat ditemukan anak-anak yang nongkrong dengan telepon genggam masing-masing dan menghabiskan waktu sepanjang hari tanpa pengawasan. Video gim pada anak-anak masih erat diselimuti isu adiksi dan minim pengawasan.

Keresahan macam apa yang akan saya hadapi di zaman anak-anak saya nanti? Saya tidak tahu apa yang akan terjadi nanti namun saya harus siap beradaptasi apa pun itu. Inti dari tantangan ini barangkali bagaimana kita dapat melindungi anak-anak kita dari keresahan-keresahan itu tanpa membuat mereka tertinggal dari perkembangan zaman ataupun menghambat aspek-aspek tumbuh kembang mereka.

Saya dan istri saya sepakat tidak akan melarang anak kami bermain video gim. Saya akan membelikannya konsol video gim jika dia memintanya, barangkali sebagai bentuk apresiasi atas prestasi. Saya akan mengawasi dan menemaninya. Saya akan mengizinkannya mengalahkan saya dalam permainan, saya tidak keberatan. Saya akan membatasi screen time sesuai rujukan ilmiah terkini. Saya percaya video gim dapat memberi dampak yang baik dalam perkembangan anak bila kesempatan itu diberikan dengan batas wajar dan diawasi. Anak saya berhak menikmati karya seni ini jika dia mau.

Anak saya usianya belum satu tahun dan saya sudah membual tentang apa yang akan saya lakukan dengannya. Saya tahu ini tidak mudah. Tulisan ini akan saya kunjungi ulang sewaktu-waktu untuk membantu saya mengevaluasi apa yang telah saya lakukan di masa mendatang.

Menghapus Gambar Latar Belakang di LibreOffice Calc

Kemarin sore di group Telegram LibreOffice Indonesia ada salah seorang anggota yang mengalami masalah ketika menggunakan LibreOffice.

Kemudian yang dia bertanya bagaimana cara mengatasinya, adapun permasalahannya adalah; dia menyisipkan tandatangan berupa gambar format JPG pada dokumen, kemudian dia mengaturnya ke Latar Belakang dengan cara Arrange to Background. Nah, setelah itu dia kesulitan untuk menghapusnya.

 Sampai esok harinya belum juga ada yang bisa memberi jawaban memuaskan atas pertanyaan tersebut.

Kemudian penulis menanyakan permasalahan tersebut terjadi pada LibreOffice Writer, Calc, atau Impress?


Namun penanya tidak juga memnjawab pertanyaan penulis. Akhir penulis perhatikan dengan cara yang seksama dan sesingkat-singkatnya pada tangkapan layar yang dilampirkan, dan dapat disimpulkan bahwa permasalahan tersebut terjadi pada LibreOffice Calc.

 Cara mengatasi masalah

Karena penulis juga penasaran dengan permasalahan tersebut, maka penulis berusaha mencari jalan keluaranya.

Pertama penulis mencari berkas lama yang berisi data yang agap mirip dengan milik penanya, akhirnya ditemukanlah berkas daftar belajar komputer murid-murid PKBM Kertajaya.

Langkah selanjutnya adalah; penulis menyisipkan tandatangan ke salah satu sel di berkas LibreOffice Calc tersebut (biasanya kalau saya menyisipkan tanda tangan berarti bayaran).

 
Selanjutnya penulis mengatur tandatangan tersebut ke belakang dengan cara klik kanan tanda tangan => Arrange => To Background.

Dan memang benar, setelah gambar diatur ke latar belakang tidak bisa dikelola lagi atau jadi beku, mau dihapus, digeser, diperbesar tidak bisa.

Penulis pun mencobanya dengan disertai menekan tombol pintas, yaitu dengan menekan tombol Ctrl, Shift, Alt sambil klik pada gambar tandatanga, namun tetap tidak bisa. Bahkan penulis sempat masuk ke sel dengan menekan tombol F2 hasilnya tetap nihil.

Akhirnya penulis menggunakan metode seleksi seperti pada aplikasi grafis (Inkscape, Gimp, Scribus), dan ternyata berhasil.

Berikut caranya:

Tampilkan Alat Menggambar pada LibreOffice Calc dengan cara klik View => Toolbar => Drawing.

Setelah Alat Menggambar sudah berhasil ditampilkan, cari dan klik ikon Select (biasanya berada di pojok paling kiri)

Sekarang arahkan kursor ke gambar tanda tangan, kemudian klik tanda tangan tersebut, bisa bukan?.

Dengan cara ini kita tetap bisa mengolah gambar atau tandatangan pada LibreOffice Calc yang telah diatur ke Latar Belakan (Arrang To Background), Mudah bukan?

Di bawah ini adalah video sesuai artikel ini


Demikian Tutorial singkat yang dapat penulis bagikan hari ini, sampai jumpa pada tutorial lainnya, semoga penulis tidak malas menulis di blog ini.


 

Upgrade PC Tanpa Menggoncang Tabungan

Suatu ketika saya ingin meng-upgrade PC saya tapi kok rasanya berat hati untuk menyentuh tabungan. Rasanya kok keinginan tersebut tidak pada prioritas yang betul kalau sampai tabungan terkorek. Apa lagi sebentar lagi saya akan punya anak, tentu tidak betul kalau sampai pundi-pundi yang sudah diatur sedemikian rupa jadi terganggu. Terus bagaimana dong?

Decluttering

Ada orang-orang yang dengan mudah menyingkirkan barang yang tidak mereka perlukan, ada pula orang yang perlu arahan/motivasi lebih untuk melakukan itu. Saya adalah jenis orang yang kedua.

Ada dua buah buku yang saya baca secara berurutan pada tahun 2018, yaitu The Life-Changing Magic of Tidying Up oleh Marie Kondo dan Goodbye, Things oleh Fumio Sasaki.

Ide soal spark of joy dari Marie Kondo tidak begitu masuk ke kepala saya. Banyak benda yang tidak memenuhi kriteria tersebut tapi kalau disingkirkan dari hidup saya maka saya akan menjadi kesusahan secara tidak perlu. Nasihat-nasihat dari Fumio Sasaki lebih mengena di hati dan kepala.

Saat menulis buku tersebut, Fumio Sasaki adalah pria lajang tanpa tanggung jawab yang banyak, bahkan tanpa pacar. Jadi nasihat-nasihatnya sangat ekstrim. Saya juga sudah pernah beberapa kali melakukan decluttering, baik dengan giveaway mau pun dengan penjualan namun saya belum pernah mencobanya dengan cara yang ekstrim. Sekarang saya dapat melakukannya.

Keputusan memiliki anak ada trade-off-nya: ada banyak hal yang tidak dapat saya lakukan lagi dikarenakan waktu dan tenaga yang terbagi untuk keluarga. Setelah saya pikir-pikir, ternyata saya:

  • Tidak bisa naik gunung sampai 5-10 tahun ke depan.
  • Mengganti olahraga saya dengan yang lebih sederhana seperti jogging. Ditambah kondisi pandemi, saya tidak lagi bersepeda jauh-jauh untuk berolahraga.
  • Sulit/tidak dapat meluangkan waktu untuk beberapa mainin/koleksi.

Artinya benda-benda yang terkait dengan kegiatan di atas tidak lagi berguna untuk saya. Jadi saya memutuskan untuk menjual barang-barang saya tersebut: alat-alat dan perlengkapan mendaki gunung, sepeda, mechanical keyboard, beberapa barang elektronik, barang-barang yang duplikat (misal saya punya tetikus 2 buah), barang-barang yang dibeli sebagai cadangan, barang-barang pemberian, dan sebagainya. Pokoknya banyak banget! Banyak dari benda-benda itu adalah barang kesayangan, koleksi, dan memiliki kenangan namun manfaatnya untuk saya tidak ada. Manfaatnya untuk keluarga saya lebih nihil lagi. Apa yang lebih nihil dari nihil?

Saya tidak dapat menjelaskannya sebaik Fumio Sasaki. Jika kamu termasuk orang yang perlu motivasi tambahan untuk menyingkirkan barang-barang tidak terpakai, Goodbye Things boleh dicoba.

Strategi penjualan

Saya menjual semuanya dengan harga jual 3/4 harga beli. Bahkan ada yang setengah harga beli jika saya pikir barang tersebut sulit ditemukan pembelinya. Jika yang membelinya adalah orang yang saya kenal baik, maka saya memberinya kepercayaan untuk cicilan yang bebas diaturnya sendiri. Ada yang mengambil cicilan 1 tahun, ada pula yang mengambil cicilan 1.5 tahun. Dengan adanya cicilan ini, saya mesti menyediakan semacam dana buffer yang nantinya harus diganti oleh piutang cicilan ini. Dana ini dapat saya gunakan dengan segera untuk upgrade.

Kurang dalam 2 minggu penjualan, ditambah hasil penjualan spare part PC yang mau diupgrade, saya berhasil mengumpulkan dana sekitar 18 juta rupiah. Saya juga kaget dengan kalkulasi ini. Tapi saya hanya menggunakan sekitar 7-8 juta rupiah untuk upgrade PC. Selebihnya bisa masuk tabungan. Asyik kan?

Spesifikasi unit PC sekarang

Jika ditambahkan dengan nilai dari sebelum di-upgrade, totalnya Rp 16.301.000. Lumayan juga, tapi saya cukup senang dengan hasil ini.

Dari rig lama, pembelian 2020:

  • AMD Ryzen 5 3400G, Rp. 2.080.000
  • Zotac NVidia 1660 Ti AMP, Rp. 4.000.000
  • Nvme M2 SSD Intel 660P 512GB, Rp 1.507.000

Upgrade 2021:

  • Gigabyte B450 I Aorus Pro Wifi, Rp 2.158.000
  • RAM G.SKILL F4-3200C16D-16GFX FlareX 16GB (2x8GB) DDR4 3200Mhz, Rp. 1.363.000
  • Corsair - SF750 80 Plus Platinum 750 Watt SFX P, Rp. 2.668.000
  • CPU cooler Noctua NH-L9a AM4, Rp. 698.000
  • Geeek A50 Plus White ITX Case, Rp. 1.510.000
  • ID-COOLING NO-9215 92mm Slim Cooling Fan PWM, Rp. 231.000
  • Mini ITX Wifi & Bluetooth Antenna RP-SMA Female, Rp. 65.000
  • Audio Splitter Combiner, Rp. 21.000

Penampakan

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.


-

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.

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

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

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


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.

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

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

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

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

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

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.


Fungsi Fitur Arrange di Inkscape

Salah seorang pengguna Inkscape pemula ada yang bertanya mengenai fungsi dari fitur Arangge, mungkin karena bingung cara menggunakannya, atau belum pernah mencoba menggunakannya tapi sudah bertanya duluan.

Sayangnya lagi gambar yang ia lampirkan berupa hasil foto yang kurang jelas, mungkin ia tidak tahu cara mengambil cuplikan layar (screenshot) di komputer, ya mohon dimaklumi saja.

Sebenarnya  penjelasan mengenai fitur tersebut sudah saya tulis di buku Desain Grafis dengan Inkscape versi 2 yang rencanya akan terbit setelah Inkscape versi 1.0 rilis filnal secara resmi.

Di bawah ini adalah penjelasan singkat penggunaan Arrange yang saya Salin-Tempel dari buku yang sedang saya kerjakan tersebut.


Arrange digunakan untuk mengatur beberapa object yang letaknya tidak beraturan supaya rapi, cara kerjanya adalah menata object-object tersebut membentuk kolom dan baris dengan jarak tertentu sesuai parameter yang telah dilakukan.
Jendela pengaturan Arrange dapat ditampilkan dengan klik Object => Arrange.

Pada jendela pengaturan Arrange terdapat dua Tab, yaitu Rectangluar grid dan Polar Coordinate.

Berikut contoh penggunaan pada tab Rectangluar grid:
  • Seleksi object yang akan diatur

  • Isikan nilai tertentu pada kotak Rows dan Columns (contoh: 5 x 5)
  • Lakukan pengaturan pada menu Alignment (contoh: Center) 
  • Pilih salah satu menu Fit into selection box atau Set spacing (contoh: pilih Set spacing)
  • Isikan nilai tertentu pada kotak X dan Y (contoh: 2 X 2 cm)

Jika semua pengaturan dirasa sudah selesai dan benar, klik tombol Arrange, maka hasilnya seperti gambar di bawah ini


Berikut contoh penggunaan pada tab Polar Coordinate:
  • Pilih tab Polar Coordinate
  • Pada menu Objecs' bounding boxes: pilih Center

Pada menu Arrange on pilih Parameterized, maka segera tampil submenu seperti gambar di bawah ini:


Sebagai contoh latihan, lakukan langkah seperti berikut:
  • Pada kotak Center X/Y masing-masing isi dengan nilai 20,00 cm 
  • Pada kotak Radius X/Y masing-masing isi dengan nilai 20,00 cm
  • Pada kotak Angle X/Y isi dengan nilai 0,00 dan 360, jangan lupa unitnya pilih derajat (bukan turn, rad, atau grad).
  • Beri tanda centang pada Rotate objects
Jika semua pengaturan dirasa sudah selesai dan benar, klik tombol Arrange, maka hasilnya seperti gambar di bawah ini
Demikian penjelasan singkat contoh penggunaan fitur Arrange pada Inkscape.
Sampai jumpa pada tutorial menarik lainnya.
-
Sumber:
Draf naskah buku Desain Grafis dengan Inkscape v.2