Selasa, 10 November 2020

Refleksi Sprint 2 Proyek Kelas

Pada Sprint 2 ini saya mencoba menerapkan konsep  ​Red, Green, Refactor​ dengan konsep ​clean code​.

Clean Code sendiri dapat diartikan kode program yang formatnya benar, disusun dengan baik dan rapi, dan mengikuti standard agar mudah dimengerti, mudah dibaca dan ditelusuri, proses pengembangan perangkat lunak dapat dilakukan secara tim dan bisa dalam jangka waktu panjang. Salah satu implementasi metode untuk clean code adalah dengan refactor. Refactoring (Red, Green, Refactor) ini bukan hanya memungkinkan kita untuk menggabungkan semua kode lama agar lulus tes, tetapi juga meminta kita untuk meluangkan waktu untuk memperbaiki desainnya sehingga pada akhirnya kode dapat mudah dimengerti, ditelusuri dan di kembangkan secara bersama-sama tim. Namun sebelum tahap refactoring kita harus melewati dahulu tahap Red dan green dimana pada tahap red kita akan membuat test terlebih dahulu gagal(red flag) karena implementasi code fiturnya memang belum dibuat. Setalah itu kemudian kita mengimplementasikan code fiturnya sampai akhirnya testnya berhasil maka fase ini di sebut GREEN. Setalah Fase red dan green barulah kita melakukan refactoring. Selain itu  test organisation diimplementasikan dengan cara membagi code berdasarkan user storynya masing-masing. File yang bercampur dipisah kedalam beberapa file lainnya sehingga lebih tertata dan mudah dibaca. Manfaat yang utama dalam penerapan test organisation adalah membuat kode kita sebersih mungkin(clean code) sehingga mudah dibaca, ditelusuri dan dipahami.​

Pada penerapan subscription email kita sebaiknya mencoba melakukan test terlebih dahulu dengan cara apakah ulr untuk subscription sudah benar, Pada bagian form juga diuji apakah form untuk mengisi email sudah sesuai dengan ketentuan yang ada. Kemudian cek ketika email berhasil di simpan dan email terdaftar sebagai subscriber apakah web memberikan pesan yang benar.

CSS juga file seperti javascript, image dan lain sebagainya yang berpengaruh pada tampilan perlu juga untuk kita test walaupun tidak semua karena terlalu banyak tapi beberapa kita test sehingga minimal kita tahu bahwa setting-an nya sudah benar dan terload sempurna.

Testing menekankan agar testing dilakukan setahap demi setahap tidak terburu-buru untuk membuatnya jadi sekaligus karena dikhawatirkan ketika semuanya dilakukan sekaligus akan menimbulkan permasalahan yang kita akan sulit pecahkan karna terlalu banyak dan mungkin juga ada bagian-bagian yang juga terlupakan. Maka kita membaginya kedalam tahap-tahap kecil dan dikerjakan satu tahap-satu tahap (one step at a time)

Dengan pengecekan sederhana terhadap fungsi css kita, kita bisa memastikan bahwa css kita terload dengan benar. Dalam kasus ini pengecekannya berupa benarkah gambar sbuscription kita sudah berada pada posisi dan terload sempurna. Pada tahapnnya kita melakukan step by step mulai dari menyusun testing dan implementasi satu demi satu sehingga semua test berjalan

Terakhir dengan konsep YAGNA (You ain’t gonna need it), penulis menghindari menulis code yang tidak perlu karna tergoda pemikiran bahwa mungkin fungsi ini dibutuhkan

Refleksi Sprint 1 Proyek Kelas

Pada Sprint 1 ini Saya mengerjakan fitur Subscription email dan sorting artikel dengan like tertinggi terlebih dahulu (urutan terfavorite). Untuk Subscription tidak terdapat kendala berarti namun untuk yang sorting like agak kebingungan karena fiturnya beririsan dengan tugas mahasiswa lain sehingga harus menunggu tugas mahasiswa tersebut beres. 

Pada Sprint 1 ini kita dituntut untuk mengimplementasikan "Do Nothing Until You Have a Test" dimana berlaku Statemen Red, Green, Refactor. Pertama-tama kita tulis tesnya, lalu kita jalankan dan memeriksa apakah gagal seperti yang diharapkan. Baru setelah itu kita melanjutkan dan membangun beberapa code sehingga testnya berhasil. Kemudian jika kode perlu dirapihkan atau ada perulangan code yang dituliskan maka kita melakukan Refactor. Untuk melakukan refactor kita harus memastikan bahwa test telah berhasil karena jika test masih gagal kemudian kita lakukan refactor akan sulit kita mendeteksi dimana letak error yang ada.

Kita menggunakan framework Djanggo untuk membuat modul-modul diatas. Django digunakan karena framework ini sangat populer di bahasa pemrograman Python. Django juga memiliki unit test yang memudahkan programer dalam menjalankan testing terhadap aplikasinya. Basic code untuk proyek sudah ada dalam repository http://gitlab.cs.ui.ac.id/

Dalam memulai Proyeknya kita terlebih dahulu mengclone repository yang ada di git. Sebelum mengintall kebutuhan yang diperlukan saya membuat virtualenvironmet agar lingkungan yang digunakan bersih dan tidak bentrok dengan proyek saya yang lainnya. Kemudian  sesuaikan environmet yang dibutuhkan dengan environtment lingkungan operating system dan database yang kita pakai terutama pada bagian username dan password postgree jika lingkungan kita sudah tidak memakai username dan password default postgre. 

Setelah bagian environment disesuaikan, tahapan selanjutnya adalah menginstall requirement yang dibutuhkan dan melakukan migration dengan cara:

pip3 install -r requirements.txt

python3 manage.py makemigrations

python3 manage.py migrate 

Setelahnya kita coba jalankan apakan server bisa berjalan dengan mengetikan python3 manage.py runserver. Pada lingkungan Sistem Operasi Windows ada sedikit kurang berjalan dan saya menyesuaikan dahulu dengan menginstall beberapa requirement yang tidak tertulis di file requirement.txt

Setelah server jalan kita tambahkan beberapa data awal dengan melakukan python3 manage.py loaddata */fixtures/initial.json. Setelahnya Server siap untuk melakukan testing dengan melakukan python3 manage.py test

Selasa, 10 Maret 2015

Python String dan Unicode



Halo  para Katro-ers, malam ini saya coba memulai tutorial Python pada blog ini. Mohon maaf jika terjadi banyak kesalahan dalam istilah maupun pengetikan, maklum karna penulis juga adalah orang yang katro dan belum kenal apa-apa dengan dunia programming :D.

Untuk yang ingin tau Daftar Isi Tutorial Python From Katro To A Pro ini, silahkan kunjungi daftar isi berikut:  >> KLIK DISINI <<

Kelas String tentunya adalah kelas yang paling sering dipakai. Untuk itu saya awali tutorial Python di blog ini dengan class String. Oh ya selain string biasa, method-method berikut juga bisa digunakan untuk class Unicode.

Perbedaan Tipe Data String dan Unicode 


teks_string = "Ini budi"
#Unicode adalah fungsi untuk mengubah string menjadi unicode
teks_unicode = unicode(teks_string)
#Untuk mengetahui type data, digunakan fungsi type() 
print "type dari teks_string = ", type(teks_string) 
print "value dari teks_string =", teks_string 
print "\n"
print "type dari teks_unicode =", type (teks_unicode)
print "value dari teks_unicode =", teks_unicode

Maka hasilnya adalah seperti berikut:
type dari teks_string =  <type 'str'>
value dari teks_string = Ini budi

type dari teks_unicode = <type 'unicode'>
value dari teks_unicode = Ini budi


Terlihat walau hasilnya print valuenya sama, namun ketika ditampilkan type-nya ternyata berbeda tipe data.


Convert Huruf Dalam String

ver1 = "kaRna kaMu beGiTu seMpuRna"
ver2 = ver1.replace("a", "o")
ver3 = ver1.replace("a","u")
ver4 = ver1.capitalize()
ver5 = ver1.lower()
ver6 = ver1.upper()
ver7 = ver1.swapcase()
#atau bisa juga menggunakan fungsi berikut
import string
ver8 = string.capwords(ver1)
kamus = string.maketrans("aie0", "4130")
ver9 = ver1.translate(kamus)

print "ver1 = ", ver1
print "ver2 = ", ver2
print "ver3 = ", ver3
print "ver4 = ", ver4
print "ver5 = ", ver5
print "ver6 = ", ver6
print "ver7 = ", ver7
print "ver8 = ", ver8
print "ver9 = ", ver9
Hasilnya :

ver1 =  kaRna kaMu beGiTu seMpuRna
ver2 =  koRno koMu beGiTu seMpuRno
ver3 =  kuRnu kuMu beGiTu seMpuRnu
ver4 =  Karna kamu begitu sempurna
ver5 =  karna kamu begitu sempurna
ver6 =  KARNA KAMU BEGITU SEMPURNA
ver7 =  KArNA KAmU BEgItU SEmPUrNA
ver8 =  Karna Kamu Begitu Sempurna
ver9 =  k4Rn4 k4Mu b3G1Tu s3MpuRn4

Split & Rsplit

da
string_satu = "/Folder/Folder_dalam_folder/folder_dalam_folder_yang_didalamnya_ada_folder"
path = string_satu.split("/")
print "string_satu = ", string_satu
print "path = ", path
#Hasil dari fungsi split adalah sebuah list
print "Tipe data return dari split = ", type(path)
#Untuk mengetahui berapa banyak elemen dalam list gunakan fungsi len()
print "Banyak element dalam list = ", len(path)
#Untuk mengakses elemen list
print "Mengakses element list ke-3 =", path[3]

#another example
string_dua = "saya menjadi \napa yang saya mau \nudah sih gitu ajah"
print "\n"
print string_dua
#Hati-hati! jumlah variabel sebelum sama dengan harus sama dengan jumlah elemen hasil split
test,test_2,test_3 = string_dua.split("\n")

#print test_04
print "test =", test
print "test_2 =", test_2
print "test_3 =", test_3

string_tiga = "u'81514_The_Adventures_of_Tintin_The_Secret_of_the_Unicorn_UNION_SELECT_2011_BluRay720.mkv"
#memisahkan dengan pisahan "_" sebanyak dua "_" dimulai dari kiri
test_4 = string_tiga.split('_',2)
print "\n"
print "test_4 :", test_4
#memisahkan dengan pisahan "_" sebanyak dua "_" dimulai dari kanan
test_5 = string_tiga.rsplit('_',2)
print "test_5", test_5
Hasilnya :
string_satu =  /Folder/Folder_dalam_folder/folder_dalam_folder_yang_didalamnya_ada_folder
path =  ['', 'Folder', 'Folder_dalam_folder', 'folder_dalam_folder_yang_didalamnya_ada_folder']
Tipe data return dari split =  
Banyak element dalam list =  4
Mengakses element list ke-3 = folder_dalam_folder_yang_didalamnya_ada_folder


saya menjadi 
apa yang saya mau 
udah sih gitu ajah
test = saya menjadi 
test_2 = apa yang saya mau 
test_3 = udah sih gitu ajah


test_4 : ["u'81514", 'The', 'Adventures_of_Tintin_The_Secret_of_the_Unicorn_UNION_SELECT_2011_BluRay720.mkv']
test_5 ["u'81514_The_Adventures_of_Tintin_The_Secret_of_the_Unicorn_UNION_SELECT", '2011', 'BluRay720.mkv']

Oke Katro-ers karna malam sudah larut, mata sudah kerut, dan gak nahan buang kent** yg bunyinya dut-dut dan bikin orang yg denger jadi cemberut, untuk tutorial tentang string Part 1 ini saya cukupkan sekian. Coming Soon "Tutorial String Part2", see yaa!

Sabtu, 28 Februari 2015

Jangan berhenti berharap dan berdoa: -hikmah dr doa nabi Zakaria-


Jangan berhenti berharap dan berdoa:
-hikmah dr doa nabi Zakaria-

dr cermah ust Abdul Aziz Abdur Rauf, Lc. dengan tambahan dr pribadi.

Dikisahkan bahwa nabi Zakaria dimasa udzurny, usia lbh dr 100 thn, belum jg mempunyai keturunan. Nabi zakaria berdoa dengan menumpahkan semua kekurangannya termasuk kekurangan Istrinya yg divonis mandul. Dalam Al-Qur'an surat Maryam, doa Nabi Zakaria diabadikan.:

“Ya Tuhanku, sesungguhnya tulangku telah lemah dan kepalaku telah ditumbuhi uban, dan aku belum pernah kecewa dalam berdoa kepada Engkau, ya Tuhanku. Dan sesungguhnya aku khawatir terhadap mawaliku sepeninggalku, sedang istriku adalah seorang yang mandul, maka anugerahilah aku dari sisi Engkau seorang putra, yang akan mewarisi aku dan mewarisi sebahagian keluarga Ya’qub; dan jadikanlah ia, ya Tuhanku, seorang yang diridai”.[2]

Terdengar seruan dari sisi Tuhan: “Hai Zakaria, sesungguhnya Kami memberi kabar gembira kepadamu akan (beroleh) seorang anak yang namanya Yahya, yang sebelumnya Kami belum pernah menciptakan orang yang serupa dengan namanya”.

Nabi Zakaria as menjawab: “Ya Tuhanku, bagaimana akan ada anak bagiku, padahal istriku adalah seorang yang mandul?”
Dijawab: “Demikianlah, hal itu adalah mudah bagi-Ku; dan sesungguhnya telah Aku ciptakan kamu sebelum itu, padahal kamu (di waktu itu) belum ada sama sekali”.

Hikmah yg bisa dipetik:
Seberat apapun rintangan, selebar apapun jurang penghalang, sebanyak apapun kekurangan, jangan berfikir untuk menyerah terus berdo'a hingga Allah mengabulkannya karna sering Allah menguji terlebih dahulu hambanya dan mengabulkan doanya di detik2 terakhir.

bukankah nabi Ibrahim tidak pernah mengetahui bahwa nabi Ismail akan digantikan kambing tatkala beliau sampai detik terakhir akan menyembelih anaknya.

di sebuah postingan group saya mendapati tulisan berikut:


⛵Nabi NUH belum tahu Banjir akan datang ketika ia membuat Kapal dan ditertawai Kaumnya.

🐏 Nabi IBRAHIM belum tahu akan tersedia Domba ketika Pisau nyaris memenggal Buah hatinya.

🎋Nabi MUSA belum tahu Laut terbelah saat dia diperintah memukulkan tongkatnya.

💝Yang Mereka Tahu adalah bahwa Mereka harus Patuh pada Perintah ALLAH dan tanpa berhenti Berharap
yang Terbaik...

💝Ternyata dibalik KETIDAKTAHUAN kita, ALLAH telah menyiapkan Kejutan !

💝SERINGKALI Allah Berkehendak didetik-detik terakhir dalam pengharapan dan ketaatan hamba2NYA.

💝Jangan kita berkecil hati saat spertinya belum ada jawaban doa...
Karena kadang Allah mencintai kita dengan cara-cara yang kita tidak duga dan kita tidak suka...

💝Allah memberikan apa yg kita butuhkan, bukan apa yg kita Inginkan...!!!

💝Lakukan bagianmu saja, dan biarkan Allah akan mengerjakan bagianNYA...

Tetaplah Percaya.
Tetaplah Berusaha dan jangan lupa Berdoa.
Tetaplah Setia.
Tetaplah mencoba meraih yg terbaik.
Semoga di ijabah oleh-Nya. Aamiin YRA

Rabu, 25 Februari 2015

TODO LIST in This Blog: Python Tutorial


Karna project di kantor menggunakan Python, mau tak mau membuat saya harus berkenalan dan berinteraksi dengan bahasa pemrograman Python. Untuk di Indonesia, tutorial python masih jauh lebih sedikit jika dibandingkan dengan tutorial sekelas Java, atau C++. Oleh karena itu, selain untuk dokumentasi pribadi agar tidak lupa,mudah-mudahan disela waktu luang bisa membagi tutorial mengenai fungsi-fungsi dan modul-modul python berikut :



1.   Fungsi String                                      |       Progress = 30%       |        Link = KLIK DISNI   |
2.   Fungsi Input, Output, dan read file
3.   Modul JSON
4.   Modul datetime, date, dan time
5.   Modul urllib, urllib2
6.   Modul regex(re)
7.   Modul ConfigParser
8.   Modul Os
9.   Modul Sys
10. Modul gtk, pygtk
11. modul mimetools
12. modul hashlib
13. modul logging
14. modul random
15. modul shutil
16. modul tempfile
17. modul threading
18. modul Crypto
19. modul struct
20. modul subprocess
21. modul errno
22. modul zipfile
23. modul tarfile
24. modul zlib
25. modul select
26. modul socket
27. modul itertools
28. modul mimetypes
29. modul pyudev
30. modul signal
31. modul stat
32. modul gobject
33. modul psutil
34. modul libs
35. modul cgi
36. modul disutils
37. modul glob
38. modul xmlrpclib
39. glade
40. database sqlite, mysql, postgree
41. SqlAlchemy
42. Framework Flask
43. Framework Django
44. Doxygen

fungsi-fungsi & modul-modul diatas adalah modul yang saat ini dipake dalam project yang sedang saya kerjakan, jadi sekalian ngasih tutorial sekalian saya belajar, hehe. Nah sambil nunggu saya meluangkan waktu dan  punya semangat nulis + gak males-malesan, untuk sementara monggo dibaca tutorial Python yang dibuat teman saya ini:




Monggo disedot, mudah-mudahan bermanfaat :) [/kyi]

Scroll & multi-touch pd touchpad LENOVO gak berfungsi? Ini Solusinya

 

Awal kisah bermula saat gw dipaksa beli laptop baru untuk mengimbangi kerjaan dikantor. Netbook Asus yang lama agak kewalahan kalau disuruh jalan bareng + nge-date sama neng Luna yang geulis. Seperti kebanyakan gadis geulis yang lain, neng Luna besutan eclipse ini pun boros dalam penggunakan resource. Alhasil netbook Asus-pun menjadi rezeki adik tercintah dan sebagai penggantinya gw beli laptop idaman gw, macbook, cuman karna duitnya pas-pas-an sementara mecbooknya mecbook rasa Asia dulu, Lenovo G40-70 :p .

Semua fungsi berjalan optimal di sistem operasi Windows namun semua itu berubah ketika negara Linux menyerang. Saat menggunakan Linux Ubuntu 14.04 beberapa fungsi menjadi disable. Fungsi yang paling kentara adalah fungsi touchpad yang nggak bisa scroll. Akhirnya setelah sebulan hidup berjuang tanpa fungsi scroll, tadi sore kesabaran gw habis. Akhirnya dapat juga cara mengaktifkan touchpad di linux Ubuntu.

Oh iya ini hanya berlaku untuk touchpad keluaran ELAN, untuk touchpad synaptic biasanya linux akan secara otomatis mengenali drivernya.  Oleh karena itu pastikan bahwa touchpad temen-temen adalah touchpad keluaran ELAN, caranya:

cat /proc/bus/input/devices

nanti akan muncul deretan device yang terinstal di laptop teman-teman. Pastikan ada nama

N: Name="ETPS/2 Elantech Touchpad"

atau sejenisnya. Pokoknya ada tulisan elan touchpadnya yang menandakan bahwa touchpad teman-teman keluaran dari ELAN

Kenapa touchpad ELAN tidak dikenali linux ubuntu dengan sempurna?, karna ada sedikit bug pada ubuntu, untuk itu silahkan download patch berikut:


(note: patch ini berhasil untuk kebanyakan produk lenovo, asus, dan acer. Jika tidak berhasil aye gak tanggung jawab yee, resiko tanggung ndiri, jangan ampe gugat ane ke pengadilan yee)
Buka terminal, dan ikuti langkah-langkah berikut:


1.     
cd ~/Downloads

2.     
sudo dkms ldtarball psmouse-elantech-x551c.tar.gz

3.     
sudo dkms install -m psmouse -v elantech-x551c

4.     
sudo rmmod psmouse

5.     
sudo modprobe psmouse



Oh iya jangan kaget kalau di langkah nomer empat, temen-temen gakan bisa menggerakan kursor lewat touchpadnya. Tapi tenang, setelah langkah nomor  lima temen-temen sudah bisa menggunakan touchpad teman-teman kembali beserta fungsi scroll horizontal & vertical plus bonus :

1.       tap dua kali dengan dua jari di touchpad = klik kanan
2.       tap dua kali dengan tiga jari = open switcher
3.       tap dua kali dengan empat jari = Open dash
4.       cubit kedalam dan keluar (pinch in & out) = Zoom in & Zoom out

Sayangnya patch ini masih menyisakan bug untuk laptop Lenovo punya saya yang berjenis G40-70. Jika ditekan tombol klik kanan tidak akan ada respon apapun. Solusinya: klik kanan dengan menggunakan cara nomor satu diatas yaitu tap dua kali dengan dua jari di touchpad.

Ada Patch untuk mengembalikan klik kanan yaitu menggunakan patch berikut:


namun patch tersebut kembali membuat scroll dan fungsi multi-touch kembali disable. Mudah-mudah di artikel berikutnya gw bisa fix-kan ini bug atau kalau temen-temen tau caranya mohon dishare disini ya!.