Category Archives: Informatics

ITMS-90809: Deprecated API Usage

[Solved] ITMS-90809: Deprecated API Usage – UIWebView API Deprecation

Yesterday I was facing an issue when submitting my application to App Store. Not long after my submission, I got an email from Apple with title as you can see in the top of this article. It said that my application has an issue‚ÄĒi.e., ITMS-90809: Deprecated API Usage.

This issue happened because my app uses UIWebView class which is already deprecated. And they suggest developers to use WKWebView instead.

Actually I had been facing this issue since my first submission in early February. But I was too lazy to solve the issue ūüė¨. At that time the issue was just a warning. Apple still accepted our app.

However, this time I couldn’t escape anymore. I ought to solve this issue in order the app to be accepted.

I searched the solutions for this matter in the internet. Actually the solution is pretty obvious. UIWebView must be replaced with WKWebView. The problem is I didn’t remember (or know ūüėĚ) which codes that use UIWebView.

Thanks to this thread that gives me some hints. There are possibilities that our dependency modules use UIWebView. To find out which files that contain UIWebView, we can run command grep -r UIWebView node_modules/* in the root of the project. After executing that command, I got this following:

Result of command “grep -r UIWebView node_modules/*”

Most of the words of “UIWebView” which are found are located in comments. But apparently in my case there is one line of code that uses UIWebView. That line of code is from module “react-native-device-info”.

Then I also tried to search it directly in XCode just to double-check. XCode also gave quite similar result.

Search result of UIWebView in XCode

So, in my case the culprit was the “react-native-device-info” module. I was still using v2 at that time. After reading its documentation in this link, I needed to upgrade it to minimum v3. Then I upgraded it to v3.

Boom! The issue was solved. I then submitted my app to Apple Store and it has been successfully accepted. ūüėÉ

Mengatasi Konflik Subnet antara Jaringan Lokal dan VPN di MacOS

Baru-baru ini saya menemukan masalah ketika mencoba mengakses beberapa server dengan VPN (Virtual Private Network) kantor menggunakan wifi di rumah dari MacBook. Jika menggunakan wifi kantor, biasanya tidak ada masalah.

Untuk browsing biasa, sebenarnya tidak ada masalah. Namun ketika mencoba mengakses via SSH ke server yang berada di jaringan VPN, selalu gagal terhubung. Saya ping juga pun jaringan gagal menemukan server yang dimaksud.

Gagal ping server gitlab yang ada di IP 192.168.0.104

Sebagai informasi, di kantor saya menggunakan layanan internet dari Megavision. Sementara di rumah saya menggunakan layanan internet dari First Media. Saya sempat berpikir apakah karena faktor settingan router-nya ya.

Selanjutnya saya mencoba mengetes koneksi VPN tersebut dari HP Android saya. Masih di jaringan wifi yang sama. Ternyata saya bisa mengakses server-server tersebut. Artinya tidak ada masalah pada settingan router wifi.

Saya mencoba menge-ping IP address MacBook dari HP Android saya. Tidak bisa. IP address tidak ditemukan. Lucunya, jika saya menge-ping IP address HP Android dari MacBook, ping berhasil.

Ping MacBook di IP 192.168.0.18 dari HP Android gagal
Ping HP Android di IP 192.168.0.9 dari MacBook berhasil

Di situ saya menyadari ternyata default gateway pada kedua device ini berbeda. HP Android menggunakan default gateway dari jaringan VPN. Sementara MacBook masih menggunakan jaringan lokal (local network). Karena itu MacBook masih bisa menemukan device HP Android, sedangkan HP Android tidak bisa menemukan IP MacBook.

Hal tersebut bisa terjadi, khususnya di MacBook, karena subnet local network di wifi rumah saya (192.168.0.1/24) juga di-cover oleh jaringan VPN tersebut sehingga terjadi konflik. Itulah sebabnya saya tidak bisa terhubung ke server di jaringan VPN dengan IP address 192.168.0.xxx. Sedangkan untuk server dengan IP address di subnet yang lain seperti 172.19.211.xxx, saya bisa mengaksesnya.

Tapi saya masih belum paham kenapa MacBook menggunakan default gateway dari local network. Sedangkan HP Android otomatis menggunakan default gateway dari jaringan VPN.

Kemudian saya menjadi kepikiran. Jaringan wifi kantor kan menggunakan subnet 192.168.1.1/24. Pantas saja koneksi VPN-nya lancar-lancar saja.

Solusi yang pasti untuk masalah ini sebenarnya adalah dengan mengubah subnet dari jaringan wifi rumah ke subnet selain 192.168.0.1/24 (dan subnet lain yang berpotensi konflik dengan subnet di dalam jaringan VPN). Namun dalam beberapa kasus, mungkin kita tidak memiliki akses untuk melakukan pengaturan tersebut.

Ada alternatif cara lain yang juga bisa menjadi solusi. Kita bisa menambahkan route pada routing table MacBook agar semua traffic ke IP address di subnet 192.168.0.1/24 diarahkan melalui jaringan VPN.

Routing tables ketika awal terhubung ke VPN

Dari routing tables di atas kita bisa melihat IP address 192.168.0.xxx (Destination 192.168.0) diasumsikan berada dalam local network yang sama dengan host (link#4). Gateway tersebutlah yang ingin kita ubah agar traffic diarahkan ke jaringan VPN.

Sebelumnya, kita perlu menghapus terlebih dahulu route untuk destinasi tersebut dengan menjalankan command berikut dari terminal:
$ sudo route -n delete -net 192.168.0/24
delete net 192.168.0

Selanjutnya kita menambahkan kembali route dengan destinasi tadi, tapi kali ini mengarahkannya ke gateway VPN:
$ sudo route -n add -net 192.168.0/24 192.168.20.19
add net 192.168.0: gateway 192.168.20.19

Dalam kasus di atas IP address gateway VPN adalah 192.168.20.19. Berikut ini adalah perubahan routing tables yang telah diterapkan:

Routing tables yang baru

Kini saya sudah bisa mengakses server yang ada di jaringan VPN.

Server Gitlab yang ada di IP 192.168.0.104 bisa merespon

Namun solusi ini hanya temporary sifatnya. Jika kita melakukan re-connect ke wifi tadi, routing tables ini akan kembali seperti semula. Tentu saja setelah itu kita perlu melakukan pengaturan route lagi. Jika ingin permanen, solusi dengan mengubah subnet jaringan lokal wifi tadi lah caranya.

Meningkatkan Ukuran Boot Disk di VM Instance Google Compute Engine

Tulisan ini adalah dokumentasi mengenai bagaimana cara meningkatkan ukuran disk yang digunakan oleh suatu VM instance di Google Compute Engine. Dengan teknologi cloud computing sekarang hal itu bisa dilakukan dengan cukup mudah.

Mengecek Sisa Disk

Sebelum memutuskan untuk melakukan resizing disk biasanya kita ingin memastikan berapa GB disk yang digunakan dan yang tersisa. Cara untuk memastikannya adalah dengan masuk ke dalam server melalui SSH kemudian menjalankan perintah df -h. Partisi /dev/sda1 adalah yang kita cari.

Dalam kasus saya di bawah ini, partisi /dev/sda1 yang berkapasitas 10 GB sudah terisi penuh 100%.

Sejauh ini yang saya ketahui dari halaman preview VM instance, kita belum bisa melihat angka berapa penggunaan disk atau sisa disk tersedia. Hanya bisa melihat angka kapasitas total disk saja.

Preview Boot Disk VM Instance

Melakukan Resizing Boot Disk

Selanjutnya berikut ini langkah-langkah melakukan resizing atau meningkatkan ukuran disk di VM instance Google Compute Engine kita.

Halaman Compute Engine
Halaman Compute Engine
  • Step 2: Klik menu Disks di sidebar.
  • Step 3: Klik nama disk yang ingin kita resize.
  • Step 4: Pada bagian atas halaman detail disk, klik tombol Edit.
  • Step 5: Pada field Size, masukkan ukuran baru yang ingin diterapkan untuk disk tersebut.
  • Step 6: Pada bagian bawah halaman tersebut, klik tombok Save untuk menerapkan perubahan.
  • Step 7: Tunggu beberapa saat sampai notifikasi yang muncul memberitahukan bahwa proses updating telah selesai. Jika sudah selesai, pada halaman detail disk akan menunjukkan size yang baru.
Halaman detail disk menunjukkan angka size yang baru
  • Step 8: Karena yang saya resize adalah boot partition, maka VM instance perlu di-reboot agar efek perubahannya dapat terlihat.
  • Step 9: Verifikasi perubahan dengan mengeceknya menggunakan command df -h.
Kapasitas Disk /dev/sda1 kini sebesar 50GB
Kapasitas Disk /dev/sda1 kini sebesar 50GB

Untuk step 8 dan 9 akan berbeda jika yang kita resize bukan boot partition. Kita tidak perlu melakukan reboot VM instance. Namun, ada beberapa command yang perlu kita eksekusi agar efek perubahan dapat diterapkan.

[Solved] Jaspersoft Studio Glitches on Ubuntu

Yesterday I installed Jaspersoft Studio for the first time in my laptop. I’m using Ubuntu 17.10 as the operating system for my laptop.

I don’t usually work on Jasper Reports. But there was an error in a report on a project that I’m working on that needed to be fixed ASAP.

It was just a little error actually. So I decided to fix it myself. I installed Jaspersoft Studio 6.2.2 in my laptop. Since I’m using Ubuntu, I downloaded the .deb one.

Then I opened up the app. Strangely when I opened my jrxml file, the report design didn’t show up. There was an error message displayed but then it quickly disappeared before I could even read it (but I could quickly take a screenshot of the error message, haha). Moreover, the app itself was running very slowly.

Error opening the jrxml file on Ubuntu 17.10

Error opening the jrxml file on Ubuntu 17.10

So then I tried to download and install the .tgz one, hoping this time it could work. Still there was no luck. It still had the same problem.

I then googled the issue and, thanks God, finally I came accross this article in jaspersoft community forum. Apparently the problem is the app by default is not compatible with the version of GTK+3 used by Ubuntu. Fortunately the solution is easy. We just need to insert the magic words i.e. export SWT_GTK3=0 into the script runubuntu.sh.

#!/bin/bash
export SWT_GTK3=0
DIR=$(dirname "$0")
export UBUNTU_MENUPROXY=0;
"$DIR"/Jaspersoft\ Studio $*

Then execute again the script¬†runubuntu.sh. Tadaaa….! Finally it works.

Yayyy... now it can show up

Yayyy… now the report design can show up

 

Migrasi Data dengan Talend Open Studio

Ketika sebuah instansi memutuskan untuk hijrah dari menggunakan sebuah sistem yang lama ke sistem yang baru, hal yang tak kalah pentingnya ikut menjadi perhatian adalah bagaimana memindahkan data yang ada di sistem lama ke sistem baru tersebut. Akan tetapi hal itu tidak akan menjadi persoalan jika data di sistem yang lama memang benar-benar ingin di-cut off dan benar-benar memulai dari awal di sistem yang baru.

Memindahkan data dari sistem yang lama ke sistem yang baru bukanlah hal yang semudah memindahkan file dari satu perangkat ke perangkat yang lain. Utamanya karena struktur basis data yang digunakan di sistem baru sudah pasti berbeda dari sistem yang lama. Kalau tidak, ya tidak bisa disebut sistem baru juga. Cuma ganti wajah saja tapi dalaman tetap sama, hehehe.

Setidaknya diperlukan effort untuk memetakan kolom-kolom pada basis data di sistem lama dengan yang di sistem baru. Belum lagi jika ada attribut data seperti tipe data, format, jumlah digit atau karakter, nilai default, dsb yang berubah di sistem yang baru, sehingga memerlukan penanganan khusus, atau yang biasa disebut dengan data cleansing.

Untuk menyelesaikan persoalan tersebut ternyata ada satu kakas (tool) yang menurut saya sangat membantu. Dan yang tak kalah pentingnya, gratis! Hehehe.

Talend namanya. Talend sendiri memiliki beberapa produk. Produk yang saya gunakan untuk mengerjakan kasus tadi adalah Talend Open Studio For Big Data. Kebetulan bisa dibilang ini Continue reading

Mount HD Eksternal dengan OS Windows di Dalamnya

Masih berhubungan dengan tulisan sebelumnya, di SSD yang baru ini saya memutuskan untuk hijrah ke OS (Operating System) Ubuntu. Sebelumnya di hard disk (HD) yang lama saya menggunakan Windows 8. HD yang lama itu kemudian saya jadikan sebagai HD eksternal. Di dalamnya masih terinstall Windows 8.

Namun ada hal yang perlu diperhatikan ketika ingin menjadikan hard disk dengan OS Windows (versi 8 ke atas) sebagai HD eksternal. Pastikan bahwa Windows benar-benar telah dalam kondisi fully shutdown, bukan hybrid shutdown (setengah shutdown dan setengah hibernate) yang memang adalah default configuration dari Windows 8 (dan juga 10).

Jika tidak, maka HD tersebut tidak akan bisa diakses saat berada di OS Linux (dalam kasus saya, saya menggunakan Ubuntu). Mounting bisa, tapi hanya dalam mode read-only saja.

Untuk melakukan full shutdown ini cukup simpel. Kita bisa melakukannya dari Command Prompt dengan menjalankan perintah sebagai berikut:

shutdown /s /t 0

Kata “shutdown” sudah jelas adalah perintah untuk melakukan¬†shutdown (atau reboot). Sementara itu parameter “/s” menyatakan¬†shutdown,¬†bukan¬†reboot¬†(dinyatakan dengan “/r”) atau¬†hybrid shutdown¬†(dinyatakan dengan “/hybrid”). Sementara parameter “/t 0” menyatakan berapa detik komputer harus melakukan¬†shutdown¬†sejak perintah itu dieksekusi. Karena itu parameter “/t 0”¬†menyatakan bahwa komputer akan melakukan¬†shutdown¬†seketika¬†command¬†line¬†dieksekusi.

Apabila OS sudah benar-benar shutdown, HD tersebut pun bisa di-mount dengan sebagaimana mestinya di OS Linux. Kita bisa melakukan aksi read & write terhadap HD tersebut.

 

Rekomendasi film dari Netflix

Eranya Rekomendasi

Pernah kepikiran nggak sih kalau sekarang ini kita hidup di eranya “rekomendasi”? Mau ngapa-ngapain — terutama untuk sesuatu hal yang baru yang belum pernah kita lakukan atau temui sebelumnya — secara naluri kita akan melihat (atau mendengar) terlebih dahulu¬†review¬†orang lain.

Nah, yang namanya review itu biasanya sih kalau nggak mengandung pujian, ya kritikan, atau juga dua-duanya sekaligus. Ujungnya si pe-review biasanya ngasih rating, entah itu dalam skala 5, 10, 100 atau suka-suka dia :D. Rating yang diberikan itu kemudian akan masuk dalam pertimbangan orang yang membaca review. Apabila si pe-review juga ngasih kesimpulan dalam kata-kata seperti recommended atau nggak recommended (atau kata-kata yang sejenis), wah itu tentu bakal semakin membekas pada si pembaca. Jadi polanya review → rating → recommendation.

Kenapa saya sebut “era”, karena memang seiring dengan¬†perkembangan teknologi informasi saat ini, akses terhadap review-review¬†tersebut menjadi sangat mudah. Banyak sekali Continue reading