Tampilkan postingan dengan label Reyhan Razaby. Tampilkan semua postingan
Tampilkan postingan dengan label Reyhan Razaby. Tampilkan semua postingan

Minggu, 15 Mei 2016

Weekly Report 15/5/2016 - Reyhan Razaby

Saya telah mereview apa yang sudah di-push oleh Luthfi pada link ini
Dan hasilnya ternyata terdapat logic error pada perhitungan pencapaian di class "StatisticsActivity".

Pada case: Al-Kahfi (target 1 kali perminggu), jika di-check 2x dalam seminggu maka harusnya memiliki pencapaian 200%. Sedangkan kondisi yang sekarang masih 100% (seperti gambar di bawah kiri). Begitupun terjadi pada amalan lainnya seperti puasa senin kamis
Case berikutnya, pada amalan Puasa Ayyamul Bidh (target 3x sebulan) masih memiliki pencapaian 33,33% jika dilakukan sebanyak 3x, padahal seharusnya sudah 100% (seperti gambar di bawah kanan)


Review ini saya tulis juga di fitur "Create Issues" pada GIT

Kemudian saya mencoba push dengan ".gitlab-ci.yml" yang bersebelahan dengan folder Evaluasi Ibadah (folder project kami). ".gitlab-ci.yml" berguna supaya project kami dapat di-build di website Gitlab itu sehingga "publik" bisa mengetahui apakah program kami bisa dijalankan atau tidak.
pada gambar di atas terdapat tulisan "build: passed" yang menunjukkan apa yang saya push berhasil di-build tanpa ada error.

Saya juga sudah merancang class diagram untuk aplikasi ini di link ini
class diagram tersebut juga bisa dilihat di bawah ini



Amalan hanya ada jika kategorinya ada sehingga Amalan dan Category memiliki hubungan composition. Tetapi AmalanManager hanya untuk menyimpan kumpulan Amalan dan Category sehingga mereka hanya memiliki hubungan agregation.

Amalan memiliki bagian khusus, yaitu AmalanWeekly yang memiliki atribut khusus bernama "dayList" (berisi daftar hari apa saja) dan AmalanMonthly yang memiliki atribut "dateList" (berisi daftar tanggal berapa saja).

Setiap amalan bisa memiliki Reminder. Dan Reminder tersebut hanya ada jika Amalan-nya ada (composition).

Ada juga class CalendarManager sebagai modul untuk membantu mengatur penanggalan. Dan LocalStorage sebagai perantara dalam penyimpanan data ke memori internal pada device.

Kemudian dalam kegiatan programming, kelompok kami memiliki standar code dengan bahasa inggris supaya project pada GIT kami bisa dimengerti oleh umum.

untuk penulisan nama pada Java, kami mengikuti Best Practice dari Oracle, di antaranya:
- Penulisan class diawali dengan huruf besar setiap kata (contoh: Amalan, LocalStorage, EvaluasiIbadah, dll)
- Penulisan variable diawali huruf kecil, namun huruf awal pada kata selanjutnya kapital (contoh: name, dayBefore, category, dateList, dll)
- Penulisan untuk konstanta huruf besar semua (contoh: DAILY_POSITION, REPEAT_DAILY, dll)

untuk penulisan pada xml masih diperbincangkan

Minggu, 01 Mei 2016

Weekly Report 5/2/2016 - Reyhan Razaby

Minggu ini saya membuat halaman Statistics seperti di bawah ini. Secara fungsional halaman ini belum berfungsi, karena yang akan mengimplementasikannya adalah Luthfi.


Code Activity tersebut sudah saya push ke sini

Selain itu saya melakukan refactoring lagi pada class PageOfDay. Awalnya pada Mainpage, setiap tanggal yang tampil adalah amalan-amalan (beserta kategorinya) dengan objek baru (menggunakan syntax "new"), sehingga jika ada 22 amalan pada suatu tanggal, maka akan dibuat 22 objek amalan baru (bahkan belum termasuk objek kategori). Setelah saya refactor, setiap tanggal tidak membuat objek amalan maupun kategori baru lagi, tetapi memakai objek yang sudah ada pada TreeMap "amalanOfUser" yang ada pada class AmalanManager. 

Hasil refactor di atas sudah saya push ke sini

Refactor selanjutnya adalah saya mengupdate library Expandable RecyclerView menjadi versi 2.1.1 (sebelumnya versi 1.x). 


Keuntungannya, pada library yg baru ini bisa mengatur layout parent (kategori) tampil dalam kondisi ter-expand pada posisi tertentu. Kerugiannya adalah tidak ada animasi pada icon chevron jika kategori diexpand. Oleh karena itu, saya atur animasinya secara manual di dalam method yang memanggil jika layout kategori tersebut disentuh.

Hasilnya sudah saya push ke sini 

Minggu, 24 April 2016

Weekly Report 25/4/2016 - Reyhan Razaby

Kami sudah menentukan MVP kami, yaitu fitur-fitur yang ada pada aplikasi Evaluasi Ibadah yang lama (buatan Badr asli) beserta tambahan dari kami. Detailnya ada di bawah ini:
Fitur lama:
1. Amalan dapat dicheck / diisi jika terlaksana
2. Pada halaman utama bisa pindah-pindah hari ke kanan (later) dan ke kiri (earlier)
3. Amalan dapat diedit, dihapus dan ditambah baru
4. Setiap amalan memiliki atribut berupa nama, jenis (check / isian) dan target
5. Dapat dilihat statistik tiap amalan berdasarkan target yang sudah ditentukan
6. Ada fitur pengingat (notifikasi) yang dapat diatur jam nya. Namun hanya bisa 1 pengingat, itupun secara keseluruhan, bukan tiap amalan.
(aplikasi dapat diunduh di sini)

Fitur tambahan dari kami:
1. Pengguna dapat daftar melalui akun Evaluasi Ibadah atau akun Google
2. Data disimpan ke server juga
3. Setiap amalan memiliki kategori
4. Ada atribut baru pada amalan, yaitu pengulangan (hari, minggu, bulan) dan deskripsi amalan tersebut
5. Setiap amalan memiliki lebih dari satu notifikasi yang bisa diatur jamnya

Selain itu banyak refactoring yg saya lakukan agar memenuhi best practice dalam pemrograman android.
Di antaranya adalah mengubah penamaan table dan atribut pada SQLite (pada class Localstorage) yang dibuat luthfi. Awalnya dia menamakan table dan atribut langsung menuliskan nama table atau atributnya (seperti yg terlihat pada gambar 1) yang kemudian masing2 nama table dan atribut saya buat variabelnya (seperti gambar 2). Jadi untuk selanjutnya, untuk pemanggilan nama table dan atribut dapat dilakukan seperti di gambar 3.
Gambar 1
Gambar 2
Gambar 3


Refactoring selanjutnya pada program kami melakukan pembuatan class LocalStorage baru di setiap Activity, sehingga lebih memakan memory. Untuk itu, saya buatkan class EvaluasiIbadah yang mengextends class Application sehingga class ini hanya perlu dipanggil sekali selama aplikasi menyala. Class EvaluasiIbadah ini menyimpan class LocalStorage yang akan digunakan pada Activity lain sehingga tidak perlu membuat class LocalStorage lagi di setiap Activity tersebut. Karena di class EvaluasiIbadah ini, saya membuat aksesor dengan method public dan static. Tidak hanya class LocalStorage yang disimpan di class EvaluasiIbadah ini, tetapi juga class penolong lainnya yang dibutuh kan oleh beberapa atau semua Activity. Bentuk class kurang terlihat pada gambar 4 di bawah ini.

Gambar 4


Pada pembuatan amalan dan kategori built-in dilakukan di class AmalanManager. Pembuatan object-object ini hanya dilakukan pada pengguna baru yang belum memilih amalan-amalan yang ingin dievaluasi (pada halaman Welcome). Bagi yang sudah pernah memilih amalan, jika dia menutup aplikasi dan membuka lagi, tidak perlu memilih amalan lagi dan tidak perlu mengambil dari database server, cukup database local. Jika dia melakukan logout dan login lagi, tidak perlu memilih amalan lagi, namun perlu ambil data yang di database server. Di bawah ini potongan kodingan yang melakukan hal di atas.
Gambar 5

Gambar 6
Gambar 7

Semua yang berkaitan dengan kodingan di atas sebenarnya saya lakukan sejak 2 minggu lalu, jadi sudah terpush ke GIT pada minggu lalu

Minggu, 17 April 2016

Weekly Report 18/4/2016 - Reyhan Razaby

Seminggu belakangan ini saya melakukan merancang sprint backlog untuk sprint 2. Dan di sprint 2 ini rencana kami adalah melanjutkan halaman Welcome (biasa disebut Luthfi halaman default) yang tidak sempat dikerjakan pada sprint 1 lalu. Kemudian di sprint 2 ini rencananya adalah menyelesaikan masalah login dan register menggunakan server yang diberikan dari Badr. Kemudian juga menyelesaikan halaman Editmode yang tugasnya adalah mengedit amalan & kategori, menambah amalan & kategori, dan menghapus amalan & kategori.

Untuk hasil lebih detailnya bisa dilihat di Trello

Atau bisa dilihat di screenshot di bawah ini



Kemudian saya sudah berhasil membuat halaman (tampilan masih akan diperbaiki) Editmode dan secara fungsional sudah berhasil. Tampilan sementara bisa dilihat di bawah ini.



Saya tambahkan tombol tiga titik untuk memunculkan popup dan tombol silang untuk menghapus amalan atau kategori. Jika kategori dihapus, amalan-amalan yang ada di dalamnya sudah berhasil ikut dihapus. Selain itu pada menu popup baru bekerja pada pilihan "Edit", dan amalan yang diklik pada menu "Edit" tersebut sudah berhasil dibawa ke halaman Edit untuk mengedit amalan tersebut.

Selain itu saya juga sudah membuat halaman Welcome yang bertujuan untuk memilih amalan-amalan yang akan dievaluasi. Tampilan halaman sementara bisa dilihat di bawah ini


Code sudah saya push ke GIT

Selain itu saya melakukan perubahan pada userstory yaitu saya tambahkan fitur Settings yang tugasnya mampu mengubah bahasa, warna tampilan dan profil (seperti nama lengkap dan password).

Minggu, 10 April 2016

Weekly Report 11/4/2016 - Reyhan Razaby

Untuk minggu ini saya hanya mengerjakan progress dalam satu hari, yaitu pada hari Minggu kemarin. Dan yang saya kerjakan adalah memperbaiki buatan Luthfi sebelumnya.

Pada sebelumnya Luthfi telah membuat halaman Tambah Amalan dan Tambah Kategori namun pilihan menu untuk keduanya tersebut masih berada di Mainpage, sedangkan yang kami rencanakan sebelumnya adalah di halaman Edit Mode. Dan yang sudah saya lakukan adalah membuat halaman Edit Mode tersebut tetapi belum ada konten apa-apa, baru toolbar yang berisi icon tambah (+) yang fungsinya untuk menampilkan menu Tambah Amalan dan Tambah Kategori yang sebelumnya berada di Mainpage.

Selain itu pada halaman Tambah Kategori, Luthfi masih membuatnya dalam activity baru, sedangkan yang kami rencanakan hanyalah sebuah dialog box. Karena hanya memerlukan input dari nama kategori yang diinginkan.

Proyek sementara di atas sudah saya push ke GIT

Minggu, 27 Maret 2016

Weekly Report 28/3/2016 - Reyhan Razaby

Untuk minggu ini bisa dibilang tidak ada task yang selesai. Selain karena banyak kuis pada mata kuliah lain dan sakit selama dua hari (Kamis-Jumat), juga dikarenakan beberapa faktor teknis.

Pertama, terdapat miss communication dengan Iqbal pada pengambilan data dari database. Saya awalnya menanyakan pada Iqbal beberapa minggu lalu, bisa atau tidak jika saya mendapatkan data dari database dalam bentuk array, di mana satu index melambangkan satu tuple dan tiap atribut dipisahkan oleh semicolon ";" (seperti punya saya sebelumnya yang ada di GIT). Iqbal bilang iya. Namun, ternyata yang ada di dalam pikiran Iqbal berbeda dengan yang saya maksud. Yang saya maksud adalah Iqbal membentuk seperti itu di dalam mySQL-nya yang kemudian saya pecah di java dan dijadikan suatu objek Amalan atau Kategoti. Sedangkan ternyata yang Iqbal maksud, dia membentuk array dan semicolon tersebut dalam java juga, sehingga kalau saya pecah di java akan kerja 2 kali (digabungkan di java, kemudian dipisah lagi).

Kemudian saat saya ingin refactoring menjadi seperti yang Iqbal maksud, Luthfi memberitahu saya kalau ingin mengubah dari SharedPreferences menjadi SQLite supaya lebih mudah dalam menyesuaikan ke database. Jadi saat proses refactoring, saya juga menyesuaikan Luthfi pada proses penyetoran data ke penyimpanan internal tesebut.

Selain itu saya mengatur manajemen penyimpanan data karena masih ada yang bingung tentang ini, terutama Luthfi. Pada saat pertama kali login (setelah registrasi), di situlah database diakses untuk mengambil amalan mana yang akan dipilih dan dimasukkan ke memori internal. Jika logout, data dalam memori internal pada user tersebut dihapus. Jika login kembali, ambil lagi yang ada di database dan masukkan lagi ke memori internal. Pada saat user membuka aplikasi, data yang ada di memori internal dimasukkan ke struktur data seperti ArrayList, TreeMap atau HashMap (namun kondisi sekarang, saat berpindah halaman masih dipanggil berkali-kali karena belum membuat flag), dan jika keluar dari aplikasi, flag tersebut dihapus kembali supaya saat membuka kembali, data dari memori internal dtampung lagi ke struktur data yang ada. Database juga di-update pada proses edit, tambah dan hapus amalan, tak lupa diupdate pula yang ada di memori internal. Memori internal yang dimaksud di atas adalah dalam bentuk SQLite. Namun kami tetap memakai SharedPreferences hanya pada cursor (seperti pada perpindahan halaman pada Mainpage) dan flag (boolean).

Untuk task yang selanjutnya ingin saya kerjakan yaitu "Memilih amalan pada pertama login" belum selesai karena ingin sekalian disesuaikan dengan SQLite yang Luthfi buat. Progres ini masih dalam tahap layouting dan pembuatan Class Activity baru beserta penyusunan recyclerview-nya.

Saya juga membantu Farhan Dzikri dalam mendesain dan mengarahkannya (mungkin karena saya memiliki background desain). Dia menanyakan tentang warna dan tampilan yang ingin dipakai pada Mainpage

Minggu, 20 Maret 2016

Weekly Report 21/3/2016 - Reyhan Razaby

Selama satu minggu terakhir saya mengerjakan task di sprint 1 saya. Yang sebelumnya hanya bisa tampil pada 1 tanggal, sekarang sudah bisa berganti halaman ke tanggal lainnya (tidak ada batasan ke tanggal berapapun). Selain itu data sudah bisa disimpan ke memori internal HP, namun belum bisa disimpan ke server karena masih bermasalah entah di servernya atau di jaringannya.

Selasa, 15 Maret 2016 saya mulai mencoba mendesain ulang class yang ada di dalamnya sehingga hasilnya terdapat class baru PageOfDay yang mengatur setiap halaman pada class Mainpage. Selain itu ada class LocalStorage  yang memanage penyimpanan ke memori internal HP. Ada class AmalanManager yang akan menyimpan seluruh amalan si user beserta informasi kategorinya. Dan terkahir class CalendarManager untuk mengolah penanggalan.

Rabu, 16 Maret 2016 saya mengimplementasikan class yang sudah saya desain ke dalam file java. Banyak kendala di sini karena saya masih banyak buta syntax dan belum beradaptasi dengan class Calendar.

Kamis, 17 Maret 2016, kami sekelompok mengerjakan bersama dari pukul 3 sore sampai 11 malam dan saya masih belum selesai mengimplementasi secara sempurna karena awalnya saya menyimpan object ke memori internal menggunakan Gson. Ternyata Gson tidak bisa menyimpan object yang kompleks sedangkan yang saya akan simpan sangat kompleks (HashMap dengan Key berupa object lain dan Value berupa ArrayList objek lain). Akhirnya saya menyimpan data berupa String ke SharedPreferences biasa (tanpa Gson).

Jumat, 18 Maret 2016 kami menginap di fasilkom sampai Sabtu pagi dan alhamdulillah progress saya sudah hampir selesai, tinggal menampilkan Calendar Dialog seperti gambar di bawah sebelah kiri ini.

Dan Minggu 20 Maret 2016 saya sudah selesai mengimplementasikan desain yang sudah saya buat pada selasa lalu.

Di bawah ini adalah tampilan aplikasi kami sementara.


File tersebut sudah saya push ke GIT

Selain itu saya bersama Farhan sudah merundingkan tentang standar guideline yang akan kami gunakan. Konsepnya adalah material design (dapat dilihat di sini untuk lebih jelas). Dan kami sudah mendapatkan icon dari pihak Badr itu sendiri. Di bawah ini adalah icon Evaluasi Ibadah untuk aplikasi kami.
Supaya matching, untuk warna dalam aplikasi kami mengambil dari warna icon tersebut. Yaitu #65cced, #222222 dan #505155

Minggu, 13 Maret 2016

Weekly Report 14/3/2016 - Reyhan Razaby

Saya sudah membuat mockup pada halaman Edit Mode menggunakan Balsamiq (dapat dilihat di sini)
Halaman ini muncul jika ditekannya ikon pensil (di sebelah atas) yang ada pada halaman utama (yang sudah dibuat oleh Hardi).
Di bawah ini saya tampilkan gambar halaman Edit Mode tersebut.

Halaman Edit Mode Jika ikon "ellipsis" amalan disentuh Jika pilihan "Edit amalan" disentuh

Jika pilihan "Archive" disentuh, maka layout amalan yang dipilih akan disembunyikan.

Jika tombol "plus" pada toolbar
disentuh
Jika pilihan "Tambah kategori"
disentuh

Jika pilihan "Tambah amalan" disentuh, maka akan muncul halaman "Tambah amalan" yang sudah dibuat oleh Luhfi.

Selain itu saya mulai membuat Mainpage yang sudah saya push ke Gitlab (bisa dilihat di sini)
Hasil sementara dapat dilihat pada gambar di bawah ini

Saya menggunakan ExpandableRecyclerView untuk membuat layout tersebut. Pertama saya menambahkan compile 'com.bignerdranch.android:expandablerecyclerview:1.0.3' pada dependencies sehingga menjadi seperti di bawah ini:
Data yang saya pakai juga masih sementara, yaitu dibuat secara manual di dalam ArrayList pada java, belum di simpan ke JSON maupun database.
Untuk membedakan amalan yang berjenis check dan isian, saya membuat variabel final di class Amalan seperti di bawah ini
Dan untuk kategori amalan yang tidak berisi amalannya, tetap akan ditampilkan teks dengan tulisan "Tidak ada amalan (kategori) pada hari ini". Kasus tersebut dihandle dengan cara tetap membuat suatu amalan ke dalam ArrayList of amalan, namun dengan nama null. Sehingga ketika layout amalan tersebut ingin di-bind, maka akan ada method khusus di dalam pengondisian seperti di bawah ini:
method "bindKosong" itulah yang akan menampilkan tulisan tersebut, sedangkan method "bind" akan menampilkan layout amalan seperti biasa.

Selain itu saya juga sudah membuat akun aplikasi Slack untuk berkomunikasi tentang teknis pembuatan aplikasi ini.

Di Slack ini, "code-job" adalah channel untuk membahas kodingan atau pemrograman pada java, "design-job" tentang tampilan atau branding, "general" tentang proyek ini secara umum (misal ERD, ganttchart, dll), dan channel "random" hanya untuk membahas topik di luar PPL (misalnya ngomongin artis, game, makanan, dll)

Minggu, 06 Maret 2016

Weekly Report 6/3/2016 - Reyhan Razaby

Kamis lalu, kelompok kami menentukan manday dan memasukkan task-task ke masing-masing sprint. Dan juga telah menentukan siapa saja PIC dari sprint 1. Sprint sisanya belum karena keterbatasan waktu. Untuk hasilnya dapat dilihat di sini

Kelompok kami juga sudah membuat ERD untuk memudahkan kami dalam membuat skema pada basisdata. ERD ini masih belum sempurna, karena para anggota kelompok kami sudah agak lupa tentang ilmu basisdata yang pernah kami dapatkan pada semester 4 lalu.

Selain itu, saya sendiri sudah megeksplorasi beberapa hal tentang pembuatan aplikasi android. Saya mencoba membuat aplikasi penghitung IP (seperti gambar di bawah). Guna saya membuat aplikasi ini supaya saya lebih cepat beradaptasi dengan Android Studio dan mengasah kemampuan layouting pada file xml dan menghubungkannya dengan proses logikanya pada file java.




Dan di bawah ini adalah beberapa kodingan dari aplikasi tersebut

Implementasi dari tombol "Hitung IP"


Implementasi perhitungan IP dari matkul yang diambil

Instance variable dari class MatkulSekarang




Minggu, 28 Februari 2016

Klaim (29/2/2016) - Reyhan Razaby

Nama : Reyhan Razaby
Posisi : Hipster
Project : Evaluasi Ibadah
Perusahaan : Badr Interactive

Berikut adalah progress yang saya kerjakan di minggu kedua:

1. Membuat User Story bersama tim

Pada hari Kamis, tanggal 25 Februari dari pukul 15.00 sampai adzan maghrib, tim kami membuat User Story dalam bentuk tabel di Google Sheet (bisa dilihat di sini). User Story ini berisikan tentang aktor apa saja yang terlibat dalam penggunaan aplikasi ini, fitur apa saja yang bisa digunakan oleh aktor tersebut, dan apa kegunaan dari fitur yang digunakan tersebut.


2. Membuat skenario aplikasi dan layout masing-masing halaman

Di tahap ini saya membuat alur aplikasi dari halaman ke halaman lainnya, baik melalui tombol, ikon maupun menu. Skenario ini nantinya akan jadi bahan untuk membuat wireframe di Balsamiq. Di bawah ini saya cantumkan hasilnya.


Skenario aplikasi Evaluasi Ibadah



3. Memahami cara kerja RecyclerView

RecyclerView adalah layout yang akan kami pakai di salah satu halaman utama pada aplikasi yang akan kami buat. Oleh karena itu, walaupun saya seorang hipster, saya tetap harus tau cara kerja layout ini agar mudah dalam berkomunikasi dengan hacker.

Yang terpenting untuk saya pahami adalah method onCreateViewHolder, yaitu untuk menampilkan halaman xml yang akan diiterasi. Di sini hanya memerlukan nama file .xml yang sudah disusun oleh hipster, misalnya iterate_view.xml.

Kemudian perlu dibuatnya sebuah class yang mengextend RecyclerView.ViewHolder untuk menyimpan objek-objek yang berada di file .xml yang akan diiterasikan dengan memanggil v.findViewById.

Selain itu ada method onBindViewHolder yang berfungsi untuk menampilkan data ke layout dengan cara memanggil id dari suatu objek yang telah di simpan di class yang mengextend RecyclerView.ViewHolder (yang sudah dijelaskan di paragraf sebelumnya). Dengan id tersebut, dapat memanggil method untuk menampilkan atau mengubah objek tersebut (misal method setText).




Minggu, 21 Februari 2016

Klaim (22/2/2016) - Reyhan Razaby

Nama : Reyhan Razaby
Posisi : Hipster
Project : Evaluasi Ibadah
Perusahaan : Badr Interactive





 Di bawah ini adalah progress minggu pertama yang saya lakukan.

1. Membuat mockup halaman Home dan Edit Mode

Saya membuat mockup ini dengan bantuan aplikasi Adobe Illustrator. Rencananya kelompok kami ingin menggunakan Balsamiq untuk membuat mockup tersebut. Namun karena kami perlu waktu untuk belajar dulu cara penggunaannya, dan karena saya sudah berpengalaman dalam menggunakan Adobe Illustrator, jadi untuk sementara saya menggunakan Adobe Illustrator dulu. 
Home Home (scrolled) Edit Mode

2. Menunjukkan Design di Atas ke Pihak Badr Interactive

Kami sudah menunjukkan hasil deisgn halaman di atas ke pihak Badr dan ternyata mereka setuju. Namun pihak Badr ingin warna dan brandingnya disesuaikan oleh designer dari Badr itu sendiri dan disamakan pula oleh dua tim lainnya (Tim A dan Tim B)



3. Layouting Home di .xml (kolaborasi dengan Luthfi Kurnia)

Tahapan ini belum selesai dan masih banyak perbaikan lagi karena belum sama dengan target desain seperti mockup di atas. Saya menggunakan Scrolling Activity dalam pembuatan halaman Home ini. Kendala saya sangat banyak di bagian ini karena masih belum familiar dengan Android Studio.

Hasil sementara Home