Showing posts with label Coding Life. Show all posts
Showing posts with label Coding Life. Show all posts

Tuesday, December 7, 2021

Bedah kode Aplikasi Storage di Android

Storage/Media penyimpanan merupakan hal yang penting pada aplikasi berbasis mobile, salah satunya di Android. Berdasarkan data penyimpanan, di Android terdapat 2 jenis yaitu: data temporary dan data persistence. Data temporary umumnya diproses melalui internal storage dalam bentuk cache, sedangkan data persistence disimpan secara permanen dalam suatu file.

Pada artikel ini akan kita bahas jenis yang kedua yaitu data persistence. Android menyediakan beberapa solusi untuk menangani data persistence, tergantung dari sifatnya apakah private atau public. Beberapa solusi yang dipilih harus sesuai dengan kebutuhan spesifiknya, seperti apakah data yang disimpan akan bersifat private atau boleh diakses secara bebas (public) serta berapa banyak space yang dibutuhkannya. Selain itu, Android juga menyediakan cara untuk membuka data private ke aplikasi lain (apabila diperlukan), melalui Content Provider (inshaAllah akan dibahas di posting lainnya).

Images are taken from flaticon

Storage data persistence ini terbagi lagi menjadi 2 yaitu: 
  • Internal storage: direktori private yang hanya diakses pada aplikasi itu sendiri.
  • External storage: direktori public dapat diakses secara lebih luas pada aplikasi itu sendiri dan aplikasi lainnya.
Karakteristik internal storage:
  • Selalu tersedia/dapat diakses.
  • Menggunakan file sistem dari device.
  • Hanya bisa diakses pada aplikasi itu sendiri, kecuali secara eksplisit diatur agar dapat dibaca/tulis.
  • Saat aplikasi di-uninstall/clear data, sistem akan menghapus data di internal strorage.
Karakteristik exsternal storage:
  • Tidak selalu tersedia/dapat dihapus.
  • Menggunakan file sistem dari device atau external seperti SdCard.
  • World-readable, semua aplikasi dapat membaca.
  • Saat aplikasi di-uninstall, sistem tidak menghapus file tersebut.

Bedah kode aplikasi MyStorage

Langkah awal dengan membuat project baru di Android Studio, disini saya menggunakan nama aplikasi MyStorage dengan nama package net.ariflaksito.mystorage, minimal SDK adalah Android 5.0. Setelah itu di kita akan membuat contoh penggunaan internal dan external storage, pada MainActivity akan saya buat dua tombol untuk menuju ke activity InStorageActivity dan ExStorageActivity menggunakan Intent.

Jika anda ingin memahami lebih detail tentang Intent bisa disimak video berikut ini:


Silahkan anda siapkan layout seperti pada tampilan dibawah ini:

Tampilan awal MainActivity

Setelah itu kita bisa membuat 2 activity baru (Empty Activity) dengan nama : InStorageActivity dan ExStorageActivity. Untuk layout kedua activity tersebut, kita siapkan 4 Button dan 1 TextView seperti pada tampilan berikut :

Tampilan layout editor file

Untuk kode dari layout tersebut seperti dibawah ini:

Pada kode xml diatas kita perlu tambahkan beberapa resource di file strings.xml karena data-data text kita simpan di file res/values/strings.xml. Jika nanti diperlukan localize resource seperti aplikasi yang support multi bahasa lebih mudah dalam me-manage string tersebut.

Kode Activity Internal Storage

Selanjutnya kita edit bagian inStorageActivity. Pertama kita tambahkan class attribut nama-file, button dan textview seperti ini:

public static final String FILENAME = "myfile.txt";
Button btnCreate, btnEdit, btnRead, btnDelete;
TextView tvRead;

Selanjutnya kita set masing-masing komponen tersebut dan kita tambahkan label untuk ActionBar pada method onCreate( ) seperti berikut:

String title = getResources().getString(R.string.title_in_storage);
getSupportActionBar().setTitle(title);

btnCreate = findViewById(R.id.btn_create_file);
btnEdit = findViewById(R.id.btn_edit_file);
btnRead = findViewById(R.id.btn_read_file);
btnDelete = findViewById(R.id.btn_del_file);
tvRead = findViewById(R.id.tv_read);

Selanjutnya kita buat 4 method baru untuk menjalankan masing-masing fungsi, yaitu: createFile( ), editFile( ), readFile( ) dan deleteFile( ). Pada model internal storage kita gunakan fungsi getFilesDir( ) untuk meng-akses path dari storage. Untuk kode method createFile( ) seperti berikut:

void createFile() {
String isiFile = "Hello world!";
File file = new File(getFilesDir(), FILENAME);

FileOutputStream outputStream = null;
try {
file.createNewFile();
outputStream = new FileOutputStream(file, true);
outputStream.write(isiFile.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}

Secara lengkap kode fungsi-fungsi yang lain dalam Activity tersebut seperti berikut:

Lokasi/path dari myfile.txt tersebut pada device berada di /data/data/(package-name)/files/myfile.txt. Kita dapat melihat melalui device file explorer di Android Studio untuk lokasi file tersebut. Sedangkan dari device file explorer akses ke path tersebut tidak bisa kecuali device anda sudah di root.

Lokasi file di internal storage

Kode Activity External Storage

Pada metode penyimpanan external, kita perlu tambahkan beberapa kode untuk melakukan cek perijinan dari Android API 23 keatas. Selain mendefinisikan nama file, kita perlu mendefinisikan code request untuk kembalian dari cek perijinan tersebut. Selanjutnya kita siapkan method baru yaitu checkPermission( ) dan onRequestPermissionsResult( ).

Pada method tersebut aplikasi akan menampilkan alert/pop-up ke pengguna apakah pengguna memberikan ijin aplikasi untuk merubah data-data di storage. Jika pengguna menekan tombol allow maka akan dilanjutkan ke proses selanjutnya, jika tidak maka akses ke storage tidak bisa dilakukan oleh aplikasi.

Alert pada device untuk perijinan akses storage

Selain itu, untuk external storage ini perlu menambahkan code permission di AndroidManifest.xml yaitu sebagai berikut:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Pada element <application> di file manifest juga perlu ditambahkan atribut berikut: 

android:requestLegacyExternalStorage="true"

Untuk akses lokasi/path dari file tersebut, disni kita menggunakan method yang berada di class Environment, yaitu: Environment.getExternalStorageDirectory(). Pada method createFile( ) dan editFile( ) juga perlu ditambahkan validasi untuk cek apakah media storage tersebut sudah di mount atau belum dengan kode berikut:

String state = Environment.getExternalStorageState();

if (!Environment.MEDIA_MOUNTED.equals(state)) {
return;
}

Layout di activity ExStorageActivity menggunakan file yang sama pada activity sebelumnya. Untuk kode lengkap nya seperti dibawah ini:

Anda bisa ujicoba aplikasi tersebut dengan membuat file baru, melihat isi datanya, kemudian cek di device explorer, apakah sudah ada nama file tersebut. Selain itu anda bisa coba edit isi file dan hapus file.

Kesimpulan

Kapan kita perlu menggunakan internal dan external storage? Internal storage paling baik digunakan jika tidak ada yang boleh mengakses file selain aplikasi itu sendiri. Sebaliknya, external storage paling baik digunakan jika file tidak memerlukan batasan akses, file dapat di share ke aplikasi lain atau user diperbolehkan akses file melalui usb atau pc.

Friday, August 20, 2021

Menghitung Similarity dan Prediksi rating pada Collaborative filtering menggunakan Python

Melanjutkan artikel sebelumnya, bagaimana menghitung similarity antara user di sistem rekomendasi collaborative filtering(CF) dengan menggunakan excel, pada artikel ini saya akan share menghitung similarity user dan prediksi rating dengan menggunakan bahasa python di jupyter notebook.

Prediksi rating

Pada eksperimen ini akan digunakan sample data yang sama seperti pada artikel sebelumnya, lebih detail bisa anda simak disini: "Memahami Collaborative filtering di Sistem rekomendasi". Untuk pembahasan notebook tersebut saya bagi kedalam 2 bagian yaitu: User-based dan Item-based.

User-based CF Notebook

Pertama diperlukan membuat sample data dari library pandas yang kemudian kita susun menjadi matrix untuk user, item, dan rating. Pada matrix tersebut, nilai Nan/kosong di ubah menjadi rating dengan nilai 0.


Matrix user-based rating

Selanjutnya kita akan buat nilai rerata dari tiap user dan membuat matrix baru dengan nilai rating diambil dari selisih rerata dan rating asli.


Untuk menghitung similarity, dapat menggunakan library dari sklearn yaitu cosine_similarity. Disini kita perlu membuat suatu fungsi dengan parameter yaitu matrix rating, user aktif (yang akan kita cari nilai rating kosongnya) dan nilai k (jumlah tetangga/neighbor).


Output dari fungsi diatas akan menghasilkan nilai similarity dari user: Arif ke user lainnya berdasar dari matrix yang kita inputkan di parameter.

(['Don', 'Bob'], [0.7071067811865476, 0.30151134457776363])
Langkah terakhir adalah kita buat fungsi predict( ) untuk menghitung prediksi nilai kosong dari matrix tersebut pada user Arif di item-4.


Output dari fungsi tersebut adalah prediksi rating pada kolom item-4 seperti berikut:

array([[4.42526623],
       [1.93594684],
       [3.42953847]])

Item-based CF Notebook

Sedikit berbeda dengan code sebelumnya, pada code item-based ini kita akan melakukan prediksi pada beberapa rating kosong. Mari kita bedah code tersebut dari awal. Dimulai dari membuat matrix rating data sample data seperti pada postingan ini: "Memahami Collaborative filtering di Sistem rekomendasi".


Matrix item-based rating

Berikutnya kita bisa buat fungsi untuk menghitung similarity antara 2 item


Sedangkan fungsi predict( ) untuk item-based ini sedikit lebih complicated, berikut langkah-langkah penjelasannya:
  1. Perulangan pertama adalah menjadikan nilai setiap item menjadi list
  2. Perulangan ke-2 kita gunakan untuk memfilter rating 0 dari tiap user
  3. Didalam perulangan ke-2, terdapat perulangan lagi untuk menghitung nilai prediksi dengan membaca per-baris dari rating item.

Setelah kita running fungsi diatas, maka akan menghasilkan output dalam bentuk list beberapa rating prediksi dari rating 0 di matrix yang kita inputkan pada parameter.

[2.4899844588770113, 3.4286096052067627, 2.0]
Sebagai informasi, pada kedua kode diatas belum ada fungsi untuk mengenerate item rekomendasi, disini hanya fokus pada bagaimana menghitung nilai similarity dan prediksi saja. Jika anda ingin mendapatkan kode lengkap di file python notebook (*.ipynb), silahkan isi pada kolom komentar dengan email anda, inshaAllah akan saya share kode lengkap tersebut.

Referensi

  1. Gambar diambil dari https://www.formstack.com/resources/blog-new-rating-field
  2. User-based collaborative filtering, https://www.geeksforgeeks.org/user-based-collaborative-filtering/
  3. Item-based collaborative filtering, https://www.geeksforgeeks.org/item-to-item-based-collaborative-filtering/

Sunday, August 8, 2021

Keep productive during the pandemic


Since the beginning of 2020, most people have spent more than two-thirds of a day at home. Firstly, it seems enjoyable, because they do not need to go to school or the office as usual. However, it becomes hard to deal with it as time goes by since we are social creatures.

I really concede that it is a big problem when it happens to my students. The online meeting could not substitute offline classes where students learn and spend time discussing anything with their friends.

I will share amazing tips for students to deal with their mood to keep productive and finish studying on time.

1. Wake up early. 

Most computer engineering students enjoy doing their work, such as writing code, testing systems, or resolving bugs at midnight. Try to change your habit as I wrote in this article, "Kapan waktu efektif coding?"

2. Doing exercise

It is easy for people who have sport hobbies like cycling, running, or swimming to do it regularly. However, others think it will be a serious difficulty to start a routine exercise. You can download an exercise video from youtube, "7 minutes workout by Lifehack". I suggested starting small and regular ( twice or a third a week, every day will be better). For me, it is a tough moment; as a basketball fan, I should await my hobby activity until safe condition.

3. Clean up your desk and computer

It is believed that a tidy and clean workspace could maintain a great feeling. As a result, time will be productive to finish work. In this technology era, a computer is a vital part of students and workers. Unnecessary files in several folders sometimes make us frustrated. Allocate time for organizing this problem, although it is a dull activity.

Clean Downloads directory

4. Make it a habit

When you make any points above regularly, it is possible to become a healthy habit. Keep on track, and you will get advantages in your study.

Keep healthy. Stay strong!

Friday, March 13, 2020

Membuat Code Highlight di Word

Bagi beberapa mahasiswa tingkat akhir yang mengambil Skripsi/TA, khususnya di bidang ilmu Computer Science, Informatika, Sistem Informasi, dkk, masalah formating dan tata letak penulisan di aplikasi pengolah kata(Word processing) dapat menaikan level stress disaat si dosen pembimbing meminta menuliskan code-code secara rapi seperti pada Code editor.

planetb.ca ~ syntax-highlight-word
Kali ini saya akan share salah satu tools yang membuat hidup para pejuang-pejuang Skripsi/TA menjadi lebih indah tanpa harus berkutat dengan masalah formating code di Word.   

Saya biasa menggunakan tools online yang dibuat oleh om Jamie di alamat http://planetb.ca/syntax-highlight-word. Cara penggunaanya cukup mudah, tinggal copy khan saja baris code ke dalam form yang tersedia, kemudian pilih jenis bahasa pemrograman dan klik tombol Show Highlighted untuk mendapatkan hasilnya.

Tampilan tools online untuk code highlight
Selanjutnya dari tampilan highlight yang ada di browser "Select All" atau (Ctrl+A), kemudian copy dan paste di Word, naaah... sekarang sudah tampil rapi khan code-code anda di Word.

Tampilan saat di paste ke Word
Silahkan bisa dishare jika artikel ini anda rasa bermanfaat dan dapat membantu para pejuang Skripsi/TA/Thesis.






Monday, October 29, 2018

Kapan waktu efektif "coding"?



“Coding” istilah populernya.. dimana saat kita fokus mengerjakan modul, mencari solusi algoritma atau tracking error di suatu program biasanya membutuhkan waktu yang tidak sebentar. Kebanyakan programmer malam hari adalah waktu yang nyaman untuk melakukan aktivitas coding, ditemani dengan secangkir kopi panas dan camilan..  PERFECT! pastinya

Selama bertahun-tahun saya juga menikmati aktivitas coding di malam hari sampai dengan pagi. Setelah saya sadari ternyata saya banyak melewatkan hal-hal istimewa di saat pagi, yaitu tidak bisa shalat subuh berjamaah di masjid, karena sering ketiduran pas adzan, melakukan aktivitas seharian tidak fokus, karena masih kurang jatah tidurnya.

Akhirnya saya berusaha untuk merubah pola aktivitas tersebut supaya bisa mendapatkan keistimewaan dan keberlimpahan rejeki di pagi hari. Sekitar jam 8 malam, saya coba untuk mulai istirahat tidur, dan pasang alarm jam 2 atau 3 pagi. Saat bangun cobalah berwudhu dan lanjut shalat tahajud, inshaAllah hilang semua rasa kantuknya, selanjutnya mulailah aktivitas coding + kopi panas.

Alhamdulillah kebiasaan tersebut sudah terpola sejak 2-3 tahun yang lalu.

BangunAwal itu mengundang keberkahan dan keberlimpahan. "Ya Allah, berkahilah umatku di waktu pagi,” inilah doa Nabi Muhammad.

Di kesempatan lain, beliau bersabda, “Berpagi-pagilah dalam mencari rezeki, karena sesungguhnya berpagi-pagi itu membawa keberkahan dan mengantarkan pada kemenangan.”

Itulah salah satu rahasia sukses orang-orang beriman dalam melakukan penaklukan-penaklukan. Mereka melakukannya di waktu pagi. Bahkan hijrah Sang Nabi pun dilakukan di waktu pagi.

Silahkan bagi teman-teman yang ingin merubah pola waktu coding-nya bisa seperti yang saya lakukan, atau masih nyaman dengan menghabiskan waktu malam, silahkan sajaa.. 

Semoga bermanfaat..