Sunday, December 02, 2007

Domain Model Design :Siri 2

User Story : Siri 1

Aku akan cuba menjadi domain expert dan pada masa yang sama sebagai developer untuk menjayakan siri demo agile process ini. Maka segala user story yang ditulis adalah berdasarkan pemahaman aku sahaja tapi aku akan cuba sebaik mungkin menjadi domain expert.

Aku nak cuba pendekkan beberapa penerangan, so rancangan aku ialah dari user story aku akan terus buat simple domain model design. Cara aku nie short cut sedikit kerana jika mengikut process sebenar apabila mendapat senarai user story, team lead dengan developer/system analyst hendaklah berbincang dengan domain expert untuk dapatkan lebih maklumat berkaitan user story, ini adalah kerana user story hanya seperti check list antara domain expert dan developer team. Domain expert akan letakkan priority untuk setiap user story dan team akan berbincang dengan domain expert pemilihan user story yang akan dimasukkan kedalam iteration 1.

Aku rasa penerangan lebih lanjut berkaitan process tersebut aku biarkan dalam tulisan yang lain buat masa ini aku nak fokuskan kepada domain model design berdasarkan user story yang telah pun ditulis.

Sebagai User/Domain Expert/StakeHolder, aku boleh:
- Rekodkan maklumat user story, oleh itu aku boleh tahu detail user story yang aku rekodkan dan perlukan dalam project

Berdasarkan user story diatas context utama domain expert ialah merekodkan setiap user story kedalam sesuatu project. Jadi bila dianalisa terdapat 2 domain yang penting untuk merealisasikan context/tujuan tersebut iaitu:
- User
- UserStory
- Project

Untuk itu aku biasanya akan design seperti berikut:


Visual design diatas masih belum lengkap kerana relation antara domain-domain tersebut boleh dikategori sebagai kompleks.Perlu diingat relation bidirectioanal akan mengakibat relation domain mesti mengetahui antara satu sama lain. Jadi apabila design setiap relation memerlukan penelitian adakah perlu relation domain A ke domain B perlu saling kenal mengenali. Jika tidak perlu pastikan relation dalam satu hala (unidirectional). Aku akan bagi 2 solution unutk difikirkan solution mana yang lagi sesuai

Kerja baru

Esok aku akan berkerja ditempat baru sebagai Solution Architect, arghh terasa berat tanggungjawab yang aku ambil apabila terima tawaran berkerja di syarikat baru ini. Aku berharap aku boleh memenuhi tanggungjawab tersebut, dan sudah semestinya sokongan dari team members yang lain amat dihargai.

Aku juga berdoa perancangan aku untuk menjadikan team ini sebagai satu team yang mantap dalam agile process berjaya dan aku akui bukan satu kerja mudah untuk melaksanakan impian tersebut. Semoga Allah membantu aku Aminn!!

11.30 pm

Saturday, December 01, 2007

User Story : Siri 1

Siri pertama aku untuk demo agile teknik gabungan beberapa tools/lib dan process dalam software development.
Aku plan hendak guna style video tapi laptop kat rumah aku nie tak de microphone, kalau aku record pun tak de suara.

Pertama aku nak perkenalkan User Story, kemudian dari user story aku akan buat simple domain model dan kemudian buat unit test yang juga simple untuk melihat keberkesanan domain model tersebut dan buat refactor kepada domain model jika ada dan juga refactor semula unit test untuk kembangkan lagi kemungkinan-kemungkinan yang difikirkan sesuai. Tapi yang penting bermula dengan kecil dan yang mudah dan jgn sesekali terover design dan juga terover test tidak bagus untuk kesihatan developer :)

Aku plan untuk buat User Story Application XPProgramming dimana applikasi ini berkeupayaan untuk merekodkan user story. User story mempunyai pelbagai variasi untuk dibuat. Aku suka style BDD user story.
Start:
Sebagai User/DomainExpert/StakeHolder, aku boleh:
- Rekodkan maklumat user story, oleh itu aku boleh tahu detail user story yang aku rekodkan dan perlukan dalam sesuatu project


Sebagai Solution Architect, aku boleh:
- Rekodkan maklumat project yang akan di bina, oleh itu aku boleh perkenalkan overview tentang sesuatu project
- Boleh pilih project dan setkan berapa kali iteration untuk project, oleh itu aku boleh setkan masa mula dan expected masa tamat sesuatu project.
- Boleh pilih user story dan letakkan tugas pembinaan kepada developer yang dipilih.
- Boleh letakkan priority pada setiap user story.
- Boleh setkan point untuk setiap user story atau point untuk project.
- Boleh setkan untuk setiap iteration ada berapa minggu didalamnya.
- Boleh setkan unutk setiap iteration user story yang akan dimasukkan.


Sebagai Developer, aku boleh:
- Lihat rekod user story yang ditulis User, oleh itu aku boleh tahu senarai user story yang telah direkod oleh user.
- Lihat rekod user story yang diletakkan pada diri sendiri.
- Lihat rekod user story yang diletakkan pada developer lain.
- Boleh letakkan estimate masa untuk setiap user story yang diberi berdasarkan point.

Sejarah

Aku sengaja letak tajuk sejarah sebab tulisan ini ada kaitan dengan sejarah tetapi bukan sejarah Malaysia atau sesiapa ,tetapi serba sedikit cerita bagaimana aku terjebak dalam gejala agile methodology.

Aku memang peminat Domain Driven Design dan Test Driven Development dan aku memang practice kedua-dua cabang ilmu ini dalam software development sekarang ini. Memang niat aku dari dulu nak kongsi bersama, tetapi halangan masa dan lain-lain mengakibat niat untuk menulis dengan lebih mendalam perlaksanaan kedua-dua methodology ini belum tercapai.
Kenapa aku pilih Domain Driven Design? Permulaan perjalanan software development aku dalam Object Oriented bermula dari teknik yang dikenali sebagai Database Driven Design, segala maklumat yang disampaikan oleh pelanggan akan di terjermahkan kedalam bentuk Database Relational Design. Tapi bila semakin lama terlibat dalam analisis design dan apabila mula terlibat dengan beberapa project yang agak besar dan sebagai mana diketahui umum requirement biasanya selalu ada perubahan walaupun disaat akhir development. Kesakitan untuk membuat penukaran design amat terasa dengan penggunaan Database Driven Design. Penggunaan strored procedure seperti menjadi kepastian dalam software development aku ketika itu. Aku pernah terlibat dengan Aplikasi Pengeluaran ubat-ubatan farmasi dimana keseluruhan table berjumlah 130 dan bayangkan apabila jika logic ditulis didalam stored procedure, jika terdapat perubahan pada mana-mana bahagian business process, selalunya aku cadangkan untuk buat change request kerana untuk menyemak semula business logic mengguna Database Driven Design adalah amat mencabar. Aku mula mencari alternative lain yang memudahkan kerja aku, pada masa tersebut aku tak dengar lagi perkataan agile apatah lagi memahami process agile yang sebenar. Tapi pada masa tersebut walaupun aku mengguna Database Driven Design aku seboleh-bolehnya cuba untuk tarik keluar semaksima logic yang boleh digunakan dia dalam code, pada ketika itu aku dah mula memahami serba sedikit design pattern walaupun tidak mahir, pernah aku cuba masukkan beberapa design pattern yang mudah,tapi hampa kerana kekurangan ilmu.
Apabila didatangi masalah dan process development menjadi perlahan, aku cuba mencari maklumat berkaitan analisis pattern . Aku mula diperkenalkan dengan teknik Peter Coad iaitu UML In Color oleh brother Hamdi, aku juga mula mendapat maklumat berkaitan Hibernate/NHibernate. Setelah beberapa bulan mencuba NHibernate aku terasa development aku semakin laju sekarang tapi masih lagi kekurangan dari segi design/architecture. Alhamdulillah sekitar tahun 2004 aku terjumpa satu artikel berkaitan Domain Driven Design menerangkan kepentingan Domain Model design dan aku agak tertarik unutk mengetahui dengan lebih mendalam. Aku mula join group Domain Driven Design dan aku mula membeli buku Domain Driven Design. Pertama kali aku baca buku tersebut aku tidak faham sangat apa yang cuba disampaikan oleh penulis buku tersebut, kerana ianya agak baru benrbanding cara yang aku gunakan. Aku juga bertanya soalan didalam group tersebut dan aku cuba memahami beberapa pattern penting didalam buku tersebut dengan buat beberapa simple test project.

Semasa melayari group DDD, ada juga beberapa artikel menerangkan tentang combination TDD+DDD dan terdetik pada ketika itu aku tertarik untuk mengetahui apa itu TDD, aku start mendapat maklumat dari group XP Programing dan aku bertambah seronok dalam software development. Combination TDD+DDD=Agile.

Friday, November 30, 2007

Hari terakhir di IT Lab

Aku dah submit handover document yang perlu pada rushdan untuk dia take over software development work di IT Lab, emm semalam last demo aku pada CMS community team dan aku happy sebab dapat tunjukkan prototype CMS sebelum aku berhijrah ke tempat lain.

Sepanjang tempoh 1 tahun 2 bulan aku kat IT Lab macam-macam pengalaman menarik aku dapat disini, belajar menangani pelabagai ragam vendor yang cuba mempermainkan group kita org. Tak semua vendor yang berfikiran sebegitu , cuma sebahagian yang fikir mereka ini hebat terutama vender S*P dan apabila dibalas balik dengan fakta-fakta soft dev.. terdiam tergolek-golek mereka nak menepis serangan dari group kita orang.. hehe. Pada masa tu bos kita org..kita gelar guru Hamdi pakar OOAD, setiap pagi kita orang akan ada status update bermula seawal pukul 8pg.. yang kebiasaan nyer lewat aku le tapi lewat 10 min je selalunya, biasalah aku kat Shah Alam (alasan lemah nie..) bos aku lagi jauh, jalan Kebun 7.30 dia dah sampai.

Pada team-team member yang lain Kak Kartinah, manager yang best dan baik hati :) , guru Hafiz pakar Java, banyak agile skill dan teknik aku dapat belajar dari beliau. .Net team Rushdan , Java Team Fadhlan dan Faisal, Analyst team Yusnizam aka Bob dan Zehan, SAP Team Nani dan team-team lain yang terlibat dalam project PITTIS.

Selamat berjuang IT Lab, semoga dapat berjumpa lagi...

Tuesday, November 20, 2007

Project Structure dalam DDD


Sebelum ini aku mempunyai pelbagai versi domain model project structure berdasarkan pemahaman aku ketika itu, dan juga ada juga cara solution yang cuba-cuba. Cuma sekarang ini aku lebih tumpukan kepada style Domain Driven Design, maka domain model structure juga aku follow DDD, cuma dalam DDD group tak ada standard domain model structure.


Cara aku design ialah dengan groupkan domain model dalam Aggregate dimana nama folder akan follow nama Aggregate Root, untuk domain project diatas UML design adalah seperti berikut.

Cuma didalam domain model repository hanyalah interface bukannya concrete class. Implemantation repository boleh diletak di Infrastructure project atau DataAccess project. Cuma aku masih confuse tentang ApplicationService adakah app service juga mempunyai interface di domain model?

Friday, November 16, 2007

Test 3G Connection di rumah

Aha.. aku saja je nak test connection 3G Celcom nie kat rumah, boleh lah buat kerja unutk browse any information dan send email, sebelum nie kalau ada urgent aku kena tunggu pagi esok kat tempat kerja atau aku kena pergi Cyber Cafe. Alhamdulillah connection 3G kat area rumah aku nie nampak macam ok je. Sebelum nie aku pernah try guna Maxis broadband lagi teruk, nak buka web yang simple mcm google pun tak lepas, jadi aku pulangkan semula package tersebut.

Thursday, November 15, 2007

Agile Methodology

Aku dah lama tak update tentang cerita development, bukan sebab busy tapi tak de idea nak taip pasal apa. Aku insyAllah akan masuk company baru dalam masa 2 minggu, tapi sebelum join telah ada beberapa assigment yang kena aku kena buat untuk company tersebut dan Alhamdulillah 2 assigment besar telah berjaya disiapkan mengikut jadual.Assignment pertama ialah mengenai blue print (guideline) development process yang InsyAllah aku akan guna pakai dan juga assigment kedua ialah documentation berkaitan semua development policy yang perlu diikuti oleh team di sana. Sekarang ini untuk team application dah ada 4 termasuk aku, manakala untuk team multimedia/design dan ada 5 orang. Team application masih memerlukan 3 orang untuk buat beberapa project yang agak besar unutk 1 year punya project.

Aku berharap aku dapat gunakan ilmu-ilmu yang aku dapat semasa dalam team sekarang nie , terutama ilmu yang diturunkan oleh Guru Hamdi dan beberapa pengikut-pengikut agile di sini.

Friday, October 19, 2007

CMS UI prototype

Hari nie..kat department aku baru 3 org start kerje, aku dah tak de cuti , jadi kena lah masuk kerja awal, pagi tadi aku cuba design CMS User Interface prototype

Thursday, October 18, 2007

Happy Birthday Damia Bisyri

18/10/2005 tarikh lahir puteri ku yang sulong Damia Bisyri - makna nama(Kebijakan,Kebaikan,Yang Manis Mesra Dan Menggembirakan), hari nie 18/10/2007 genap umur dia 2 tahun, semoga hidupnya diredhai dan senantiasa dalam jagaan Allah. Dan harapan ku agar Damia Bisyri murah rezeki dan bahagia di dunia dan di akhirat Amin.

Thursday, October 11, 2007

Katakan

Selamat Hari Raya

Kepada semua pembaca blog ini, aku nak ambil kesempatan mengucapkan Selama AidilFitri Maaf Zahir & Batin. Aku start cuti esok dan masuk semula bekerja hari khamis minggu hadapan.

Friday, October 05, 2007

Berbuka Puasa dan Surat Perletakan Jawatan

Semalam aku, isteri dan anak-anak berbuka puasa di Istana Budaya bersama geng-geng office aku. Program nie untuk seorang rakan yang akan berhijrah ke company lain selepas raya. Puas hati juga lah dengan makanan yang disediakan tidaklah bnyk sangat tapi cukup berbaloi dengan kadar bayaran yang dikenakan, berbeza dengan hotel yang ada letak harga lebih dari RM 50. Memanglah dia orang letak makanan banyak sampai nak pilih makan yang maner satu pun tak tahu, pada masa tu semua makanan hendak rasa, tapi aku rasa mesti bila dah berbuka bnyk yang tak habis terbuang je makanan tu:)

03/10/2007 tarikh aku hantar surat perletakan jawatan, dah lebih setahun aku berkerja dicompany P sebagai team lead .Net, seronok dengan perangai geng-geng yang lain, walau dalam team yang berbeza tapi dibawah satu department Emerging Technlogy (Nie bukan nama company). Aku akan join company M 4/12/2007 sebagai Solution Architect dan insyAllah segala tunjuk ajar rakan-rakan disini seperti bro Hafiz(Java Guru), bro Fadhlan (Hibernate & Webwork guru), bro Faisal(Jasper Report), bro Hamdi (3 bulan yang lepas berhijrah ke WPI - Agile & Java Guru), bro Rushdan (Mobile/Scanner Guru), bro Yusnizam (System Analyst), Kak Kartinah (manager aku :) dan Zehan (System Analyst) dan ader lagi sorang walau pun bukan dalm team aku tapi ada project yang dia terlibat secara dengan team aku bro Ikhwan (aka 1kHz).

Aku masih ada lagi project kat sini yang perlu completekan sebelum pergi ke company M, at least aku nak keluarkan 2 release CMS project nie.

Ada lagi satu aku nak share senarai buku-buku yang aku baca, ada yang habis dan ada yang tak habis dibaca lagi walaupun ader buku tersebut dah lebih setahun aku beli :)
Ada lagi beberapa buku yang aku pun dah tak ingat dalam rak kat rumah aku. Emm...















Thursday, October 04, 2007

Pengalaman menginterview software developer

Aku tidak ada banyak pengalaman dalam menginterview software developer, so kira aku barulah juga menceburi (disuruh) untuk menilai calon-calon software developer. Setakat ini ada 6 orang yang telah aku interview, sebelum nie aku yang selalu kena interview. Cuma bila candidate nie masuk dalam bilik interview, aku tak sampai hati nak tanya soalan-soalan yang maut :) walupun gaji yang diorang minta tu tinggi, sebab bagi aku sessi interview hanyalah sekadar untuk menilai tahap keyakinan seseorang bukan hendak menilai sangat tahap skill, jika hendak menilai tahap skill aku prefer sediakan kertas soalan dan diorang jawab. Ada beberapa peristiwa yang agak kelakar, ada satu soalan diajukan pada seorang calon tentang keupayaan beliau untuk long hour working, dgn yakin dia jawab dia tiada masalah cuma selepas pukul 8 malam dia mesti kena stop tak boleh teruskan hahaha, dia kena balik tidur... kita org pun gelak, salah sorang yang interview tu cakap..ya kita bukan tak bagi you tidur. Ada juga yang sengaja diprovoke soalan jika gaji yang diberi sama, tapi peluang ditempat baru dari segi experiance technology lebih so bagaimana berminat? Calon tersebut dari muka berseri, tiba-tiba senyap je.. kita org tgk pun nak tergelak, tahan je dalam hati.

Ok lah criteria yang aku prefer untuk work dalam team aku tak semestinya excellent programmer, tapi aku suka ikut style XP dimana , average programmer yang active communicate dalam team lebih berjaya dari excellent programmer tapi hanya duduk dalam pulau yang tersendiri.

Monday, October 01, 2007

Problem semasa test domain menggunakan Nhibernate

Masalah yang dihadapi ini tidak terlalu besar cuma agak melambatkan development process. Seperti biasa aku akan ada 3 jenis test didalam unit test project iaitu Integration Test antara layer dari presenter<->services<->domain<->persistence dan dalam test ini penggunaan libarary mock object seperti Rhino Mock,NMock adalah mesti.

Manakala test yang paling penting ialah test domain, dimana untuk setiap method dalam domain perlulah ditest sekurang-kurangnya sekali, dan untuk mendapatkan coverage code yang dah ditest dan code yang tak disentuh lagi boleh guna NCover dan NCoverExplorer.

Masalah aku ialah bila aku buat domain test aku dah define properties name yang aku nak guna dalam test, tapi bila aku generate domain untuk persistence, ActiveWriter akan generate properties untuk aku. So nak combine apa yang dah dibuat dgn apa yang digenerate agak leceh, walaupun aku boleh guna cara partial class tapi tak best sgt.

Al-Madinah SCORM Project
Minggu lepas balik kampung dengan family semua gerak pkl 11.00 malam dari shah alam sampai melaka pkl 3 pagi.. argh aku berhenti tidur kat R&R 2 kali, sekarang nie aku cepat mengantuk bila bawa kereta kat high way... samer gak kes balik dari melaka ke shah alam malam tadi.. tapi Alhamdulillah aku berhenti rehat 1 kali je kat Hentian Senawang. Aku agak busy walaupun balik kampung, aku kena tengok SCORM LMS , macam maner fungsi SCORM , apa dia SCORM etc.. Alhamdulillah malam minggu lepas aku tidur lepas sahur. cuba buat satu test code unutk membolehkan courseware talk dengan LMS menggunakan SCORM API. Berjaya memahami API SCORM dalam 20% :) okalah tu ekk..

Aku juga kena buat comparison antara 2 open source project dokeos dan claroline.NET, nak kena submit malam nie.

Friday, September 28, 2007

16 Ramadhan 1428 Hijrah

Alhamdulillah dah 16 hari kita berada dalam bulan Ramadhan yang penuh dengan keberkatan. Hari ini di Masjid Negara ada perhimpunan membantah sistem kehakiman negara yang sedang menuju kehancuran. Negaraku semakin kalut dengan pelbagai jenayah yang sedang berlaku ianya amat merisaukan. Tak tahulah aku apa pemimpin hari ini buat, ok lah cukup dengan sedikit cerita pasal kesakitan hati aku melihat sistem yang dijalankan oleh pemimpin hari ini.

Hari ini kesakitan hati aku terubat sikit kerana berjaya memasukan NHibernate.Linq kedalam project aku, emm seronok apabila dapat query menggunakan ORM NHibernate berserta LINQ query statement. bdiaz developer yang menghack untuk integrate NHibernate & LINQ , ada beberapa contoh dlm site tersebut boleh dijadikan tutorial untuk memahami dengan lebih mendalam.

Jadi dengan beberapa tool yang digunakan sekrang aku harap development time untuk aku semakin pendek dan cepat.

Update
Salah seorang member dalam yahoo group message aku, hendak cari MS SQL DBA yang tahu buat database replication sebagai part time DBA, aku bukan expert dengan DB so tak dapat membantu, kena cari rakan-rakan lain.. siapa budak geng kat tmnet yang boleh buat ek..emmm.. kena cari maklumat nie..

Ada sesorang forward kedalam email aku menarik petikan ini


Di dalam hidup manusia, yang penting ialah BERKAT.
Bila hidup kita berkat, diri ini akan selamat.
Apabila diri selamat, rumahtangga jadi sepakat.
Apabila rumahtangga jadi sepakat, masyarakat jadi muafakat.
Apabila masyarakat jadi muafakat,

negara kita menjadi kuat.



Apabila negara menjadi kuat,

negara luar jadi hormat. Apabila negara luar

jadi hormat, permusuhan pun tersekat.

Apabila permusuhan tersekat,
pembangunan pun meningkat. Apabila pembangunan pun meningkat,
kemajuan menjadi pesat.



TETAPI AWAS, apabila pembangunan meningkat, kemajuan menjadi pesat,
kita lihat bangunan naik bertingkat-tingkat.

Ditengah-tengah itu, tempat maksiat tumbuh macam kulat. Apabila
tempat-tempat maksiat tumbuh macam kulat, KETIKA ITU manusia mula
mengubah tabiat. Apabila manusia telah mengubah tabiat,
ada yang jadi lalat ada yang jadi ulat.
Apabila manusia dah jadi ulat, sembahyang makin hari makin liat.
Apabila sembahyang jadi liat, orang baik ada yang bertukar jadi jahat.


Apabila orang baik bertukar jahat,

orang miskin pula nak kaya cepat.
Apabila orang miskin nak kaya cepat,

orang tua pula nak mati lambat.


Apabila orang tua nak mati lambat,

tak dapat minum madu telan jerla
minyak gamat.

Yang lelaki, budak budak muda pakai

seluar ketat. Semua nak tunjuk kuat.
Bila berjudi, percaya unsur kurafat.
Tapi hidup pula yang melarat.
Tali kasut dah tak berikat.
Rambut pun jarang sikat.

Yang perempuan, pakai mini sekerat.
Suka pakai baju ketat.
Suka sangat menunjukkan pusat.
Hingga tak pedulikan lagi batasan aurat.
Pakai pulak yang singkat-singkat.
Kadang-kadang ternampak benda 'bulat'.

Bila jadi macam ini, siapa lihat pasti tercegat.
Silap gaya jadi gawat, bohsia bohjan lagi hebat.
Duduk jauh berkirim surat .
Bila berjumpa, tangan berjabat.
Kemudian pakat lawan peluk siapa erat.
Masa tu, nafas naik sampai tersekat-sekat.
Usah peduli agama dan adat.
Usah takut Allah dan malaikat.
Yang penting apa kita nak buat?
Kita 'bukti' lah kita buat.
Akhirnya perut kempis dah jadi bulat.
Apabila perut kempis dah jadi bulat,

maka lahirlah
pula anak-anak yang tak cukup sifat.
Bila anak-anak tak cukup sifat, jam tu kita tengok bayi dibuang di
merata tempat.
MAKNANYA KETIKA ITU, IBLIS MULA MELOMPAT.
Dia kata apa? Habis manusia dah masuk jerat.
Habis manusia telah tersesat.
Inilah dia fenomena masyarakat.
Oleh itu wahai saudaraku dan para sahabat,
Marilah kita pakat mengingat,
Bahawa dunia hari ini makin singkat,
Esok atau lusa mungkin kiamat,
Sampai masa kita semua akan berangkat! .
Berangkat menuju ke negeri akhirat.

Di sana kita akan ditanya apa yang kita buat.
Masa tu, sindri mau ingat.

Umur mu banyak mana mu buat ibadat...?
Zaman muda mu, apa yang telah mu buat...?
Harta benda anta, dari mana anta dapat...?
Ilmu anta, adakah anta manafaat...?

Semoga ianya dapat mengingatkan kita supaya segera
meninggalkan maksiat dan memperbanyakkan ibadat.

(Petikan ucapan Ustaz Hj. Akil Hayy Rawa.
Sebarkanlah ini kepada ahli keluarga, saudara-mara, rakan-rakan dan
sahabat handai kita agar masyarakat
kita akan menjadi sebuah masyarakat yang bukan sahaja maju dari segi
duniawi malah ukhrawi. Insya-Allah...Allahhuakbar! Allahhuakbar!
Allahhuakbar!)



Thursday, September 27, 2007

Update

A'salam , aku dah lama tak dapat hendak mengupdate sebarang tulisan disini, aku akan join another company bulan 12 nie sebagai Solution Architect. Last week aku attend 2 kali sessi menginterview candidate yang insyAllah kalau dipilih akan join team aku.

Di sini masih ada lagi project ongoing yang perlu diselesaikan seperti Customer Management System.

Ada tools baru yang aku jumpa yang aku rase dpt memendekkan lagi process soft dev aku, aku dah rase menjadi semakin malas nak buat code heheh, adakah aku perlu beralih ke ruby?? emm munkin juga.. hahaha :)


Tools:
ActiveWriter

Thursday, September 13, 2007

Ramadhan

Selamat menyambut Ramadhan Al-Mubarak kepada semua yang singgah kedalam web ini :) Semoga ibadah puasa tahun ini lebih baik dari tahun-tahun sebelumnya.

Tuesday, September 04, 2007

Domain Model - Tips

Semalam aku ada update tentang bagaimana menganalisa domain dari property/attribute kepada menjadi konsep object dan akhirnya bila menbuat sekali lagi interaction object tersebut di design menjadi interface untk support pelbagai jenis kelakuan (method)

Tips
1. Mana-mana property dalam object bukannya terdiri dari simple text, ia sepatutnya dikeluarkan menjadi object yang lain dan bina hubungan antara object tersebut.

2. Hubungan antara object boleh menjadi konseptual object jika hubungan tersebut adalah kompleks

Sebagai contoh satu scenario dimana kita hendak bina sistem perkiraan harga kereta yang dijual oleh penjualkereta(salesman). Kita boleh je design seperti berikut:



Ok sekarang kita kaji hubungan salesman dan kereta, hubungan antara kedua-dua object ini dihubungankan dengan kaitan 'sale' iaitu salesman menjual kereta. Hubungan tersebut sebenarnya bukan hubungan yang simple dalam ertikata yang lain banyak perkara boleh didapati dalam hubungan tersebut. Maka hubungan 'sale' tadi boleh dijadikan konseptual object Sale

Monday, September 03, 2007

DDD and TDD Software Development Architecture Guideline

Cuti sempena hari kemerdekaan aku tak pergi maner, malas nak sibuk-sibuk sambut merdeka sebab dari banyak segi negaraku ni umpama negara yang benar-benar belum merdeka. Jadi aku buat initial draft untuk DDD dan TDD Software Development Architecture Guideline. Ada beberapa buku yang aku gunakan sebagai sumber seperti Domain Driven Design - Eric Evans, Apply Domain Driven Design and Pattern - Jimmy Nilsson dan beberapa web site lagi. Alhamdulillah semasa menulis draft ini nampak lagi jelas kaitan DDD dalam software development. Sebelum nie, aku baca buku bnyk juga yang aku skip, dan kenkadang maklumat tersebut penting dalam memahami software development process.

Aku dah cover beberapa point penting dalam initial draft seperti Crunching Knowledge dan Ubiquitos Language.

Update

Aku plan dah lama nak catat apa yang aku faham pasal domain, terdapat beberapa point penting semasa captured domain model bersama domain expert.

1. mana-mana property dalam object bukannya terdiri dari simple text, ia sepatutnya dikeluarkan menjadi object yang lain dan hubungankan relation antara object tersebut.

Sebagai contoh ambil scenario sistem register pendaftaran no kereta, pendaftaran no kereta boleh didapati dengan cara biasa iaitu ikut turutan, pendaftaran memilih no istimewa yang telah di paparkan oleh JPJ seperti 1111,2222 etc dan juga pendaftaran no pilihan sendiri yang kemungkinan bukan terdiri dari no istimewa yang telah di setkan oleh pihak JPJ.


Jadi jika difikirkan secara biasa no plate kereta akan menjadi property dlm class Kereta seperti contoh:



Tiada apa yang salah cuma number plat kereta berdasarkan scenario lebih dari sekadar property , number plat boleh menjadi konsep object dimana property tersebut dikeluarkan menjadi object Plat dan tambahkan association antara object tersebut.



Kemudian kita buat satu lagi analisa untuk memenuhi scenario, number plat kereta boleh di daftarkan dengan pelbagai cara seperti ikut turutan pendaftaran, booking no pilihan dengan sejumlah bayaran dan pilih number plat sendiri. Jadi design kena tukar supaya Plat akan menjadi interface IPlat dan untuk menampung cara-cara pendaftaran tadi kita akan buat 3 lagi object yang akan implement interface IPlate

Tuesday, August 28, 2007

DDD and TDD document guideline

Semalam ada satu soalan ditanya kepada aku oleh seseorang, aku bercerita pasal agile methodology.. aku bercerita tentang Test Driven Design tapi dia tanya kat aku..ada any documentation guideline yang aku gunakan dalam team aku?.. argh.. sememangnya aku tak de solid documentation bagaimana nak buat nak buat DDD dan TDD, kebanyakkan cara aku..ialah mentor, ertinya aku involve dengan developer, aku terlibat dalam design..aku bercerita,ini dia base code,ini dia layer yang terlibat follow cara mcm ini.

Tapi soalan tu membuat aku berfikir yang aku perlukan juga basic documentation menerangkan methodology yang digunakan. emmmm ya masa untuk buat initial draft :)

Update
Jumpa link menarik semasa browse dlm group DomainDrivenDesign
Improving Applications Design with a Rich Domain Model

Friday, August 24, 2007

technical cms meeting

2 hari penuh kena masuk technical meeting dengan group PP/NCR/AP , discussion kali ini ialah untuk integrate CMS dengan project PP, kenkadang kita pandang tinggi pada consultant-consultant yang datang, ialah yang join tu rambut dan kulit putih , speaking pun memang ambil masa agak le nak faham hehehehe tapi ialah bila dah 2 hari discuss so kita tahu le tahap technical knowledge dia orang hahaha.. simple UML sequence diagram pun salah macam maner nak nie.. arghh bila dah join meeting banyak le kerja lain tertangguh, aku rindu dengan code , aku rindu dengan unit test... dan aku rindu dengan wife dan anak-anak aku..

Group kami masih macam biasa happy dengan enviroment kerja sekarang, aku rasa team yang ada sekarang nie team yang paling seronok aku bekerja, mereka -mereka ini semua mempunyai kepakaran masing-masing, ada seorang tu memang expert dalam java, bagus dalam algorithm senior daripada aku dan seorang lagi dari group java juga very active mencuba perkara baru dalam java dan kini mengikut jejak langkah ex bos aku menulis code generator dan seorang lagi sabar dalam meniti langkah yang mecabar dalam dunia soft dev.. aku doakan dia menjadi seperti senior beliau manakala group .net dibawah team aku nie pun bagus juga, cepat tangkap apa yang diajar dan kalau tak faham rajin bertanya. Team SA rajin dan cekap mengesan bugs :)

Aku masih belum buat keputusan untuk join company yang lagi satu walaupun offer letter dan dibagi..ada kat rumah simpan..ada masa lagi 10 hari untuk aku fikirkan, aku dah melalui 2 kali disscussion.. last discussion dengan panel advisor unutk company tersebut, nice person dan pertanyaan straight to the point dan jawapan yang dia hendak dari aku pun jawapan yang padat..tak nak pusing-pusing hehehe ..

ada beberapa orang rakan yang aku tahu kemampuan dia orang untuk buat kerja, aku rekomenkan, nak cakap aku bagi syarat kat company tu untuk aku join..tak juga tapi aku just kata kalau dapat this team join sekali sekali di bawah group aku..lagi ok.. i know they can perform, company nie ada kena mengena dengan kuwait & arab saudi.

knowledge aku dalam beberapa technology masih kurang , masa nak mendalami pun dah semakin tidak mencukupi, aku plan nak beli buku hujung minggu nie..buku tentang unit test pattern dan linq.

Monday, August 20, 2007

Start project Baru - Customer Management System CMS

Sudah lebih kurang seminggu saya mula dengan project baru, so setiap ptg selama 3 jam unutk jangkamasa 2 bulan saya akan duduk dengan domain expert dan bersoal jawab tentang CMS Domain. Saya akan lukis domain diagram, buat sequence diagram dan ajukan soalan macam-macam sperti process flow, business logic, interface dan real operation implemantation yang dia orang harapkan nanti.

Project ini agak mencabar kerana domain yang dihasilkan setakat seminggu lebih saya join session tersebut sudah agak complex kerana terlibat dengan pelbagai calculation berkaitan mail process dan logistic. Dan saya berharap saya dapat hasilkan domain ynag flexible dan skrg ini saya dah start buat test pada beberpaa use case awal untuk prototype.

Hari nie tak sihat rase macam nak demam.

Saya dapat offer kerja di sebuah international company dan package yang diberi sgt menarik.. tapi disini saya tgh handle project yang juga menarik.. experiance yang sara rasa jarang saya akan dpt dlm domain mail & logistic ini.. masih lagi berfikir..

Tuesday, August 14, 2007

IIS compression untuk ASP.Net

Untuk project Pickup Scheduling System , saya banyak menggunakan ASP.Net ATLAS Ajax, masalah utama dengan Ajax ialah untuk first loading java script file yang dihasilkan agak besar, selalunya lebih dari 100KB dan dari segi performance ianya agak slow. Masalah ini saya hadapi apabila saya mula redesign semula PSS dari asp.net biasa kepada Ajax dan tujuan utama redesign semua ini ialah kerana ASP.net biasa juga jika tidak handle viewstate dengan betul boleh mengakibatkan page file yang dihasilkan juga besar. So selepas mencuba beberapa alternatif saya buat keputusan untuk menggunakan ATLAS Ajax. Dan apabile telah mengguakan beberapa Ajax Extender seperti Modal Extender dan Dynamic Populate saya persaan script size increase sehingga 200K per page, walaupun script ini hanya diload sekali dan booeh dicache tetapi say masih tidak berpuas hati kerana first load adalah amat penting untuk mendapat first impression yang baik dari pengguna.

Saya google dan mendapat beberapa cara hendak selesaikan masalah ini, iaitu dengan menggunakan IIS compression, selain dari itu anda juga boleh menggunakan HTTP Module compression. Saya nmeilih menggunakan IIS Compression kerana pada pendapat saya ianya lebih mudah untuk di configure.

Saya terjumpa satu artikel berkaitan IIS Compression di IIS Compression in IIS6.0 , tapi setelah mencuba masih lagi tidak berhasil untuk compress page asp.net.

Setelah menggunkan cara edit script tidak berhasil saya terjumpa satu tool untuk edit metabase.xml dlm ISS. Tool tersebut boleh didownload di
Internet Information Services (IIS) 6.0 Resource Kit Tools



Step seperti berikut
- Enable Compression in IIS - Click Properti pada WebSite Node dalam IIS dan pilih tab Service, Check dalam checkbox Compress application files dan Compress static files.

- Seperti gambar yang diberi edit HcScriptFileExtensions pada gzip dan deflate dan letakkan aspx,axd,asmx,cc,js , dan edit juga HcDynamicCompressionLevel kepada 9.

Anda boleh lihat hasil menggunakan FireBug dalam browser FireFox.

Monday, August 13, 2007

Pickup Scheduling System Live today!!!

2 minggu sebelum ini saya agak busy dengan bug patch dan dateline untuk live Pickup Scheduling System, agak banyak pengalaman semasa dalam prosess untuk pindah ke production server.Tidak semua process jika berjalan di testing server akan berjalan lancar di production server. Checklist semasa hendak deploy ke production server adalah penting, sebarang langkah yang dibuat seperti server configuration , connection string dalam web config hendaklah dicatitkan dan semak semula list tersebut semasa hendak di deploy.

Saya fikir release awal small module selepas melalaui test di testing server bagus unutk mendapat signal awal problem yang berlaku di production server, jika anda mempunyai acces ke production server. Pengalaman apabila semua module complete di test di test server dan apabila hendak deploy di production tidak menjadi seprti yang diharapkan mengajar saya untuk cepat release application dan test juga di production server.

Wednesday, August 01, 2007

Abstract Domain Part 001

Kemahiran dalam merekabentuk domain yang mantap memerlukan usaha melakukan sendiri latihan dengan memodelkan problem tersebut. Cara sama seperti mana belajar matematik, iaitu kita kena rajin buat latihan dan mempunyai daya analisa yang tinggi, daya analisa yang tinggi datang InsyAllah jika anda sudah biasa dengan latihan-latihan memodelkan domain. InsyAllah semasa memodelkan domain anda akan nampak pattern-pattern analisa yang sama dengan masalah sebelumnya.

Dalam siri ini, insyAllah saya akan hasilkan beberapa abstract domain model . Abstract ertinya domain yang masih lagi bersifat "high level".

Domain Module Access Management:
Minggu lepas terdapat perbincangan antara saya dan rakan-rakan dan mereka minta analisa saya berkaitan bagaimana nak control user yang mempunyai roles supaya ada pelbagai access right terhadap module page yang dibina.

Sebagai contoh User A mempunyai 2 roles iaitu CustomerServices dan juga sebagai SeniorCourier. Untuk roles CustomerServices terdapat pelbagai access right boleh diberi kepada roles tersebut seperti FullAccess untuk Module A dan ReadOnly untuk Module B.

Contoh abstract domain seperti dibawah

Tuesday, July 31, 2007

Bagaimana nak test repository tanpa hit database?

Mock
Saya nak test repository object tapi tanpa perlu repository object tersebut melalui database bagaimana? Mock ?

Mock membolehkan saya test sesuatu object dengan beberapa expected return result. Sebagai contoh jika saya hendak find object User maka saya perlu dapatkan object User tersebut dari UserRepository, dan jika saya test UserRepository bersama dengan database, prosess test akan memakan masa yang agak lama kerana setiap test akan melalui prosess "Setup" dan "TearDown". Jadi apabila saya menggunakan mock object terhadap UserRepository, prosess interaction dengan database boleh diabaikan dan mock UserRepository boleh return expected result iaitu object User.

Dalam example code dibawah, saya hendak test ProspectServices dan didalm test tersebut saya perlu menggunakan ProspectRepository dan didalam real implementation ProspectRepository akan access DataAccessObject dan disini berlakunya communication dengan database. Untuk elakkan perkara itu berlaku maka saya akan mockkan ProspectRepository.

Selain dari itu saya juga bnyk menggunakan cara design by interface, dan cara ini sesuai digunakan dalam process test mock. Di mana kebanykkan code saya akan bermula dengan interface dan code implemantation hanya jika perlu.

Contoh code dibawah juga melibatkan 3 element penting interaction iaitu Presenter,Services dan Repository. Boleh dilihat bagaimana Presenter menggunakan Services untuk mendapatkan object Prospect dari Repository.


using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using Takaful.Core.Domain;
using Rhino.Mocks;
using Takaful.Core.Services;
using Takaful.Core.Repository;

namespace Services.TestStartProgramme
{
[TestFixture]
public class TestMockProspectServices
{
private MockRepository mock;
private Prospect prospect;

[SetUp]
public void InitSetup()
{
mock = new MockRepository();
prospect = new Prospect();
}

[TearDown]
public void TestCleanup()
{
mock.ReplayAll();
mock.VerifyAll();
}

[Test]
public void ShouldCreateProspect()
{

IProspectRepository iprospectRepository = mock.CreateMock<IProspectRepository>();

IProspectView view = mock.CreateMock<IProspectView>();

iprospectRepository.Save(prospect);

mock.ReplayAll();

ProspectServicesImpl services = new ProspectServicesImpl(iprospectRepository);

ProspectPresenterImpl presenter = new ProspectPresenterImpl(view, services);

presenter.SaveProspect(prospect);



}

[Test]
public void ShouldFindPropectById()
{

IProspectRepository iprospectRepository = mock.CreateMock<IProspectRepository>();

Expect.Call(iprospectRepository.GetDomainById("001")).Return(prospect);

ProspectServicesImpl psi = new ProspectServicesImpl(iprospectRepository);

mock.ReplayAll();

Assert.IsNotNull(psi.GetProspectById("001"));

}
}

public interface IProspectServices
{
void SaveProspect(Prospect prospect);
}

public class ProspectServicesImpl : IProspectServices
{
IProspectRepository iprospectRepository;

public ProspectServicesImpl(IProspectRepository iprospectRepository)
{
this.iprospectRepository = iprospectRepository;
}

public void SaveProspect(Prospect prospect)
{
iprospectRepository.Save(prospect);
}

public Prospect GetProspectById(string Id)
{
return iprospectRepository.GetDomainById(Id);
}
}

public interface IProspectPresenter
{

}

public interface IProspectView
{

}

public class ProspectPresenterImpl : IProspectPresenter
{
IProspectView pv;
IProspectServices ps;

public ProspectPresenterImpl(IProspectView pv, IProspectServices ps)
{
this.pv = pv;
this.ps = ps;
}

public void SaveProspect(Prospect prospect)
{
ps.SaveProspect(prospect);
}
}

public interface IProspectRepository : IRepository<Prospect, string>
{


}
}

Tuesday, July 03, 2007

NUnit, MbUnit, NCover dan NCoverExplorer

Hari nie saya nak tulis tentang testing tools yang saya guna, supaya saya tak lupa, sebab lepas meeting pagi tadi, ada group yang minta saya hasilkan test report dan report ini jarang saya buat then bila nak hasilkan report tersebut dah terlupa caranya.

Pada kebiasaan bila run test, saya hanya melihat result yang dihasilkan dan kemudian tambah lagi test case, tapi kali ini automated test melibatkan beberapa applikasi dan autamated ini ialah fokus pada Integration test diantara applikasi tersebut maka report sangat penting untuk ditunjukkan kepada business owner.

Ada 4 tools testing yang saya guna kan, dan bukan kesemua digunakan secara serentak tapi mengikut keadaan. Biasanya untuk normal case apabila saya buat TDD saya suka gunakan NUnit GUI untuk run test dan dapatkan result.



Manakala untuk dapatkan statistic code, berapa banyak code dalam unit test dah melalui test sequence saya menggunakan NCover dan NCoverExplorer.



Tak sempat nak habiskan cerita pasal tools nie.. nanti senang2 sambung semula.. aaaa

Friday, June 29, 2007

LINQ to SQL first try

Emm, saya dah lama tak tulis ADO.net dataaccess punya code dan saya akui saya banyak dah lupa macam maner nak guna SqlCommand, SqlConnection etc, pernah ada satu adhoc nyer project memerlukan saya buat connection ke database dan query simple data dan bayangkan saya terpaksa google dan pergi ke ADO.Net QuikStart unutk start buat SqlConnection dan cari mcm maner nak pangil connection string.

Ini adalah kerana kesemua project yang saya buat jika terlibat dengan database saya akan menggunakan NHibernate sebagai OR Mapper, jadi memang patut skill ADO.Net saya pupus macam tu sahaja, saya tak menyesal pun..hahaha :) mesti pengikut setia Microsoft ADO.Net yang menggunakan DataAccess Application Block pada semacam je.

Anyway hari nie ada kelainan sedikit, saya terbaca beberapa comment tentang LINQ to SQL tapi belum pernah tergerak hati lagi nak mencuba, ntah lepas habis run automated test dgn jaya, saya tergerak untuk godek-godek serba sedikit LINQ to SQL , mcam maner rupa nyer, LINQ itu sendiri memang saya faham apa ke bende nyer, tapi bila dah terlalu banyak codename dlm .Net nyer group saya pun jadi pening. Saya rasa ada bnyk lagi tech baru dlm .Net saya tak tahu mcm Jasper, Astoria dan beberapa project lain yang nama codename pun saya tak ingat.

Ok lah saya tunjukkan mcm maner saya start guna LINQ to SQL tapi nie shorcut je, saper minat try sendiri :)

- Create Orcas project
- Add LINQ to SQL File
- Create SQL Connection Database di DataConenction
- Lepas tu coding LINQ

Contoh mcm gambar ini







Code yang ditulis:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQToSQL
{
class Program
{
static void Main(string[] args)
{
NorthwindDataContext ndc = new NorthwindDataContext();
var prod = from p in ndc.Products
where p.Category.CategoryName == "Seafood"
select p;
foreach (Product p in prod)
{
Console.WriteLine(p.ProductName);
}
Console.ReadKey();

}
}
}


Ringkasan:
Emm masih tak boleh nak lawan NHibernate sebab, NHibernate kekuatannya ialah rich domain context dan LINQ to SQL masih lagi relational database driven context.

Simple MVC Test Konsep

Pagi nie, sementara tengah tunggu file dari another group untuk buat automated test, saya cuba try simple coding konsep mvc. Bila try simple coding mcm nie lebih menjadikan kita faham akan sesuatu pattern itu. Tapi saya tak sure adakah konsep yang saya fikirkan nie betul atau pun tidak.

Pattern MVC terdiri dari tiga element, Model, View dan Controller. Controller akan menjadi raja dalm kes MVC, Controller akan manipulate data dari Model dan akan panggil which View untuk process seterusnya.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace MVC
{
public class Program
{
public static void Main(string[] args)
{
IndexController ic = new IndexController();

ic.Index();
ic.Save();

Console.ReadKey();
}
}

public class IndexController
{
Hashtable ht = new Hashtable();

PersonView pv = new PersonView();

public void Index()
{
Person p = new Person();
p.Name = "Azam";

ht.Add("name", p.Name);

string indexHtml = pv.IndexHtml();

indexHtml = indexHtml.Replace("$name", ht["name"].ToString());

Console.WriteLine(indexHtml);

}

public void Save()
{
ht.Add("save", "Record Has Been Saved");
string indexHtml = pv.SaveHtml();
indexHtml = indexHtml.Replace("$save", ht["save"].ToString());

Console.WriteLine(indexHtml);
}
}

public class Person
{
public string Name;
}

public class PersonView
{
public string IndexHtml()
{
return "Name :$name";
}

public string SaveHtml()
{
return "Save :$save";
}
}
}

Output:

Name: Azam
Save: Record Hass Been Saved


Code diatas memang simple dan itu hanya lah 0.1% dari MVC yang real. :)

Thursday, June 28, 2007

Object Modeling, Tahap Advance ke ? Part 1

Ok tajuk kat atas tu saya ambil dari seseorang yang saya anggap Guru, saya banyak belajar dari beliau dan hingga sekarang masih lagi berguru :)

So artikel ini adalah berdasarkan Object Modeling yang telah disediakan oleh beliau di link ini TulisanInsan.

Saya minat nak try side by side TDD and Design Domain, so saya akan demo basic dari UML dan start buat simple test dan tambah lagi dan lagi dan lagi.. :)

Pada saya Pelanggan ada 2 konteks sama ada perlu dimasukkan dlm object atau ianya external object yang akan communicate melalui PelayanKaunter tapi tak begitu penting dlm sistem, mungkin juga pelanggan ini akan penting dalam sistem dan bukan menjadi external object jika maklumat pelanggan itu diperlukan atau ada apa-apa information dari pelanggan yang akan memainkan peranan dalam aplikasi tersebut. Jika kita banyangkan aplikasi ini adalah seperti KFC atau Mc Donalds, pelanggan tak berapa penting.. itu pendapat saya. Saya juga akan cuba menggunakan sebanyak mungkin Fluent Interface semasa buat TDD.

First saya akan bahagikan Test Suite saya kepada beberapa suite, unutk permulaan yang penting sya akan buat CreateTest suite. Test ini akan menumpukan test creation object.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Domain.KaunterMakanan;
using NUnit.Framework;

namespace KaunterMakanan.Test
{
[TestFixture]
public class CreateTest
{
[Test]
public void CreatePelayanKaunter()
{
PelayanKaunter pk = new PelayanKaunter();
Assert.IsNotNull(pk);
}

[Test]
public void CreatePesananMI()
{
PesananMI pmi = new PesananMI();
Assert.IsNotNull(pmi);
}

[Test]
public void PelayanCounterCanCreatePesanan()
{
PelayanKaunter pk = new PelayanKaunter();
pk.CreatePesanan(new PesananMI());

Assert.AreEqual(1, pk.PesananLists.Count);
}


}
}


Code diatas hanyalah test suite dimana belum ada domain lagi dibuat.So bila run code diatas memang akan menjadi fail. So kita perlu ada object PelayanKaunter dan PesananMI

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.KaunterMakanan
{
public class PelayanKaunter
{
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.KaunterMakanan
{
public class PesananMI
{
}
}


So next kita run semula code kita dan 2 dari 3 Test Suite akan hijau manakala Test Suite PelayanCounterCanCreatePesanan still merah, ini adalah kerana kita masih lagi tidak mempunyai method CreatePesanan didalam object PelayanKaunter. Next kita akan refactor code PelayanKaunter dengan tambah method CreatePesanan() dan berdasarkan usecase En Hamdi PelayanKaunter boleh create many PesananMI.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.KaunterMakanan
{
public class PelayanKaunter
{


protected List<PesananMI> pesananLists = new List<PesananMI>();

public List<PesananMI> PesananLists
{
set { pesananLists = value; }
get { return pesananLists; }
}

public void CreatePesanan(PesananMI pesananMI)
{
pesananLists.Add(pesananMI);

}
}
}


bersambung

Friday, June 22, 2007

Update



*Gambar team, selepas makan kat Muzium Kesenian Islam

Saya sebenarnya menulis bukan sebab nak mengajar sesiapa atau nak tunjuk pandai,sebab saya sendiri tak pandai dan tak reti nak mengajar, cuma saya rasa untuk saya lebih faham.. saya perlu luahkan apa yang saya faham, sebab saya tak de murid maka saya luahkan dlm bentuk penulisan..dan saya tak ambik sesiapa jadi murid saya dlm bidang soft dev .. sebab saya categori org yang masih menuntut ilmu. Saya tak plan sgt tentang bahasa apa hendak tulis, sebab tu tatabahasa saya agak berterabur, saya bukan org sastera .. :)

Saya dah lama tak update pasal kerja, kerja kat company P, ok menarik.. enviroment pun agak tenang didalam team cuma ada bebrapa cubaan serangan dari luar, yang tak berapa suka kot melihat team ini memperkenalkan a few technolgy dlm soft dev. Saya masih lagi lead .Net team tapi saya memilih jalan alternatif.. :) .. walau org melihat kalau developer dari camp microsoft , mesti berfikir cara development soft akan follow cara yang di perkenalkan microsoft "pattern and best pratices from microsoft", saya agak terbuka dalam aliran soft dev, saya juga agak terbuka dlm memilih technology, saya tak memperkecilkan tech yang di develop oleh group lain *Java,Ruby etc, pada saya jika product mereka bagus ..saya akui dan jika berkesempatan saya juga berminat hendak mepelajari jika pun tidak secara direct tapi teknik penghasilan technolgy tersebut. Latar belakang saya juga dari java, jadi keinginan untuk ambil tahu perkembangan Java masih lagi ader.

Dalam handle .Net team di sini saya lebih memilih menggunakan agile process, dimana buat sedikit dan deliver kepada client kemudian ubah dan tambah lagi. Client tak semestinya client dalam ertikata apa yang kita faham.. dalam dev soft client saya boleh terdiri dari programmer yang perlukan code dan design saya dan juga dari QA unutk jalankan test dan dari pihak management sendiri.So bila saya develop sesuatu, lagi cepat saya bagi programmer untuk test dan extend code tersebut dan juga QA untuk test lagi cepat dan berkualiti code tersebut.

TDD dan DDD merupakan dua cara yang saya praktikan untuk buat agile, terdapat beberapa tools untuk menyokong process ini.Saya selesa dengan cara ini.

Emm .. apa lagi..nak update.. kerje lain:).. walau ader terfikir tapi bukan dlm jangka masa terdekat.

Thursday, June 21, 2007

Anounymous Method

Anonymous Method new features dlm .Net 2.0, baru je nak cuba faham kan apa adavantage guna anonymous method. Perkara utama dlm anonymous method ialah ianya boleh buat inline method dan memudahkan untuk baca dan maitainbility code.

Anonymous method menggunakan delegate. Dan di dalam .Net 2.0 untuk declare delegate cukup mudah -contoh:


public delegate void Print();

atau

public delegate string GetPrintValue();

atau

public delegate void PrintValueWithParameter(string param);


Kebaikan delegate ialah execution method boleh ditangguhkan sehingga dikehendaki oleh client. Contoh dibawah ialah bagaimana untuk guna Anonymous Method

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace Delagate1
{

public class Program
{
public delegate void PrintLine();

public static void Main(string[] args)
{
PrintLine pl = delegate() { Console.WriteLine("Print Line"); };

pl();

Console.ReadKey();

}
}
}



Code dibawah ini dikenali sebagai Anonymous Method

 PrintLine pl = delegate() { Console.WriteLine("Print Line"); };



Saya bawa contoh dlm real life sebegini. Katakan anda sebagai bos sebuah company mencuci bangunan, anda ambil pekerja dan beri latihan , sebuah company lain hendak bersihkan bangunan dan ingin menggunkan khidmat company anda. So kat sini perkerja tadi boleh dijadikan anoymous method untuk buat kerja mencuci dan juga apa method lain yang follow contract delegate dan anda wakilkan pekerja tersebut unutk bersihkan company yang ingin buat cucian.. :) ..waktu ini,idea ini saja yang terlintas kat kepala otak.. :) so mcm maner bentuk code.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace Delagate1
{

public class Program
{
public delegate void PrintLine();

public static void Main(string[] args)
{
PrintLine pl = delegate() { Console.WriteLine("Print Line"); };

pl();

CompanyCuci cc = new CompanyCuci();
Delagate1.CompanyCuci.ICuciLantai cl = cc.DapatkanPencuci();

CompanyYangNakCuci cnc = new CompanyYangNakCuci();
cnc.NakBersihkanLantai(cl);

Console.ReadKey();

}
}

interface ICuciLantai
{
void CuciSemua();

}

class CompanyCuci
{
public delegate CaraCuci ICuciLantai();

public ICuciLantai DapatkanPencuci()
{
return delegate()
{
Console.WriteLine("Start Mencuci");
return new CaraCuci();
};
}
}

class CaraCuci : ICuciLantai
{
#region ICuciLantai Members

public void CuciSemua()
{
Console.WriteLine("Sedang Mencuci");
}

#endregion
}

class CompanyYangNakCuci
{
public void NakBersihkanLantai(Delagate1.CompanyCuci.ICuciLantai cl)
{
cl().CuciSemua();
}
}
}

Ouput:
Start Mencuci
Sedang Mencuci

Tuesday, June 12, 2007

SQL Server 2005 Compact Edition

Semasa develop Autometed Test (AT) untuk scanner simulator, saya decide menggunakan SQL Server 2005 Compact Edition menggantikan SQL Server CE yang digunakan didalam Scanner Symbol MC3000, dan mengikut design AT, unutk menjalankan scanner, ianya perlu di mulakan dari AT dan Web Services menjadi medium antara AT dan Scanner Simulator. Apabila saya excute unit test, saya dapat error "SQL Server Compact Edition is not intended for ASP.NET development".

Saya google dan find beberapa info, dimana SQL Server COmpact Edition memang tak support ASP.Net by default, tetapi ada work around. Ok ini adalah kerana SQL Compact Edition tidak optomized untuk serve sebagai database untuk web site/web services dan juga tidak support untuk multi user connection. Ia di gunakan sebagai embedded database didalam aplikasi. So workaround yang boleh dibuat ialah jika hendak menggunakan Compact Edition bersama Web Services,ianya hanya unutk synchronization ataupun single user dan code untuk tukar behavior SQL Server Compact seperti berikut:

AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true)


Letak code nie before jalankan aplikasi.

Wednesday, June 06, 2007

New C# Orcas Language

Hari ni, saya berkesempatan untuk write simple code menggunakan new C# language dalam Orcas. Salah satu language features baru ialah Query Syntax

Query Syntax ialah cara mudah untuk filter any information dalam memory collection. Ianya menggunakan LINQ query operator. Contoh dibawah

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Linq;
using System.Data.Linq;
using System.Linq;
namespace ExtensionMethod
{
public class Program
{

public static void Main(string[] args)
{
List<People> pe = ListPeople();
IEnumerable<People> p = pe.Where(p1=>p1.Name.Equals("Azam"));
foreach (People pp in p)
{
Console.WriteLine(pp.Name);

}

Console.ReadLine();
}

public static List<People> ListPeople()
{
List<People> p = new List<People>
{
new People {Name="Azam",Address="Melaka"},
new People {Name="Kamal",Address="Wilayah"}
};
return p;
}
}

public class People
{
public string Name { set; get; }
public string Address { set; get; }
}

}