<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8985698</id><updated>2011-11-26T17:39:53.387+08:00</updated><category term='SOLID'/><category term='Islam'/><category term='ERD'/><category term='SRP'/><category term='Domain Driven Design'/><category term='MVC'/><category term='DDDD'/><category term='Istiqamah'/><category term='Messaging'/><category term='Unit Test'/><category term='Model'/><category term='Command Query Separation'/><category term='UML'/><category term='Design'/><category term='Refactoring'/><category term='Aggregate'/><category term='Open Source'/><category term='AggregateRoot'/><category term='Life'/><category term='TDD'/><category term='General'/><category term='Politik'/><category term='Color Modeling'/><category term='kerja'/><category term='BDD'/><category term='ORM'/><category term='Conference'/><category term='NHibernate'/><category term='outsource'/><category term='DDD'/><category term='ASP.Net'/><category term='DCI'/><category term='Car'/><category term='Training'/><category term='Racing'/><category term='UI Design'/><category term='CQS'/><title type='text'>I Look , I See</title><subtitle type='html'>Islamic life,.Net developement,Domain Driven Design, Design Pattern,Test Driven Design ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default?start-index=101&amp;max-results=100'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>207</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8985698.post-4436551669534104678</id><published>2011-06-20T15:32:00.000+08:00</published><updated>2011-06-20T15:36:26.142+08:00</updated><title type='text'>Perang Mu'tah &amp; Air Mata Penyair Kesayangan Rasulullah Sallallahu 'Alayhi Wasallam</title><content type='html'>Agungnya pemandangan itu. Seorang pemimpin turun dan turut sama menggali parit bersama semua kaum muslimin. Baginda membahagikan para sahabatnya kepada kumpulan-kumpulan yang setiapnya dianggotai sepuluh orang bagi menggali parit. Peristiwa ini berlaku pada perang Khandaq apabila Rasulullah menerima strategi perang yang dicadangkan oleh Salman Al-Farisi radhiyallahu anhu.Seluruh muslimin bekerja penuh cergas meskipun dalam keadaan amat kelaparan. Mereka tidak mahu dikalahkan oleh rasa lapar yang mencengkam walaupun mereka terpaksa mengalas perut mereka dengan ketul-ketul batu. Ini kerana mereka merasa malu kepada Rasulullah SAW, kerana Baginda sendiri mengalas perut baginda dengan dua ketul batu sebagaimana yang diriwayatkan oleh Abu Talhah radhiyallahu anhu.&lt;br /&gt;يا رب لولا أنت ما اهتدينا&lt;br /&gt;Wahai Tuhanku, kalau bukan kerana MU nescaya kami tidak akan mendapat hidayah&lt;br /&gt;ولا تصدَّقنا ولا صلينا&lt;br /&gt;Tidaklah kami bersedekah dan tidak kami mengerjakan solat&lt;br /&gt;فأنزلن سكينة علينا&lt;br /&gt;Turunkanlah ketenangan ke atas kami&lt;br /&gt;وثبت الأقدام إن لاقينا&lt;br /&gt;Tetapkan kaki kami ketika musuh datang menggempur kami&lt;br /&gt;إن الذين قد بغوا علينا&lt;br /&gt;Mereka (musyrikin) telah melampaui batas terhadap kami&lt;br /&gt;إذا أرادوا فتنة أبينا&lt;br /&gt;Jika mereka ingin mengganggu, pasti akan kamitolak dan kami tentang&lt;br /&gt;Bibir Rasulullah yang kering kerana keletihan dan dek musim dingin yang menggigit hingga ke tulang, masih mampu melakar senyum sambil melantunkan bait-bait syair kegemaran Baginda. Syair yang pernah dikumandangkan oleh salah seorang penyair kesayangan Baginda SAW. Melihatkan wajah baginda yang sentiasa bersemangat, dan syair yang baginda perdengarkan, para sahabat seakan mendapat kekuatan. Tiada seorang pun yang mengeluh. Siapakah gerangannya sahabat agung itu? Yang syairnya menjadi dendangan bibir semulia-mulia manusia penghulu seluruh alam?&lt;br /&gt;Mari kita tinggalkan parit Khandaq dan melangkah ke pentas hidup insan hebat bernama Abdullah bin Rawahah.&lt;br /&gt;&lt;br /&gt;Pada musim haji tahun ke-12 kerasulan Baginda, beliau adalah antara 12 orang utusan suku-suku daripada Madinah (yang kemudian dikenal dengan nama Kaum Anshar.) yang membai'ah atau mengikat janji sumpah setia kepada RasulullahSAW untuk membela Baginda. Sumpah ini terkenal dengan nama Bai’ah Al-Aqabah al-Ula (Aqabah pertama). Merekalah pembawa dan penyebar ajaran IsIam pertama ke kota Madinah, dan bai’at merekalah yang membuka jalan bagi hijrah Nabi beserta pengikut beliau, yang kemudian, membawa kepada penyebaran Islam yang begitu pesat sebelum Rasulullah berhijrah ke Madinah.&lt;br /&gt;&lt;br /&gt;Pada tahun berikutnya, Rasululloh Shallallaahu ‘alaihi wa Sallam dibai’ah 73 orang Anshar dari penduduk Madinah pada Bai’atul ‘Aqabah Al-Thani (kedua), dimana Abdullah Ibnu Rawahah ini pun termasuk salah seorang utusan yang dibai’at itu.&lt;br /&gt;Kemudian sesudah Rasulullah Sallallaahu ‘alaihi wa Sallam bersama shahabatnya hijrah ke Madinah dan menetap di sana, maka Abdullah bin Rawahah jualah antara yang paling banyak berusaha membela agama Allah. Beliau mengawasi tipu muslihat Abdullah bin Ubay (pemimpin golongan munafik). Ketua munafiq itu menyusun pelbagai rencana menjatuhkan Rasulullah kerana dia telah terlepas satu peluang yang begitu diidamkannya. Sebenarnya dia telah dipersiapkan untuk diangkat menjadi raja sebelum Baginda berhijrah ke sana. Sebab itulah dia tak putus-putus berusaha menjatuhkan Islam dengan tidak menyia-nyiakan setiap kesempatan yang ada. Berkat kehebatan Abdullah bin Rawahah yang terus-menerus mengikuti gerak-gerik Abdullah bin Ubay dengan cermat, maka gagallah usahanya, dan maksud-maksud jahatnya terhadap Islam dapat dipatahkan.&lt;br /&gt;Pada zaman tersebut, bukan semua orang mendapat peluang menuntut ilmu. Tetapi Allah telah memilih Ibnu Rawahah untuk lahir di suatu lingkungan yang mahir degan kepandaian menulis dan membaca. Lantas dia membesar menjadi seorang penulis yang hebat. Ia juga seorang penyair yang fasih, untaian syair-syairnya meluncur dari lidahnya begitu indah didengar. Orang-orang Islam pun sering mengulang-ulangi syair-syairnya yang indah.&lt;br /&gt;&lt;br /&gt;Penyair Rawahah ini pernah dirundung kesedihan amat sangat sewaktu turun ayat 224 surah Al-Syu'ara' :&lt;br /&gt;“Dan para penyair, banyak pengikut mereka orang-orang sesat”&lt;br /&gt;Tetapi kedukaan hatinya dirawat oleh Rasulullah dengan senyuman. Baginda membacakan ayat yang waktu turun pula ayat lainnya : “Kecuali orang-orang(penyair) yang beriman dan beramal shaleh dan banyak ingat kepada Allah, dan menuntut bela sesudah mereka dianiaya”. (Q.S. Asy-syu’ara : 227)&lt;br /&gt;Semenjak ia memeluk Islam, dipergunakan bakat bersyairnya itu untuk kejayaan Islam. Di sebalik syair-syair yang dilontarkan, ditebarkannya roh-roh jihad, semangat persaudaraan serta cintakan Islam ke dalam diri para sahabat dan semua tentera muslimin di medan-medan perang. Dan RasulullohShallallaahu ‘alaihi wa Sallam amat menyukai dan menikmati syair-syairnya dan sering beliau diminta untuk lebih bersungguh-sungguh lagi membuat syair.&lt;br /&gt;&lt;br /&gt;Perang Mu'tah dan Tangisan Ibnu Rawahah&lt;br /&gt;فلما ودع عبد الله بن رواحة مع من ودع بكى فقيل له ما يبكيك يا ابن رواحة فقال "والله ما بي حب الدنيا وصبابة ولكن سمعت رسول الله صلى الله عليه وسلم يقرأ آية من كتاب الله يذكر فيها النار { وإن منكم إلا واردها كان على ربك حتما مقضيا } فلست أدري كيف لي بالصدر بعد الورود&lt;br /&gt;Apabila kaum muslimin mengucapkan selamat jalan kepada para tentera Mu'tah, tiba-tiba Abdullah bin Rawahah menangis. Maka ditanya; apa yang membuatmu menangis wahai Ibnu Rawahah? Maka jawab beliau:&lt;br /&gt;"Demi Allah aku menangis ini bukan kerana cintakan dunia atau pilu meninggalkan kalian, tapi kerana teringat aku pernah mendengar Rasulullah SAW membaca sepotong ayat Quran yang menyebut tentang neraka; "Tiada seorang pun di antara kamu kecuali akan mendatangi neraka,demikian itu satu ketetapan daripada Tuhanmu" (surah Maryam:71) Maka aku tidak tahu bagaimana aku akan melepasinya setelah mendatanginya."&lt;br /&gt;Maka jawab para muslimin; صحبكم الله ، ودفع عنكم ، وردكم إلينا صالحين " Semoga Allah mengiringimu dengan kesejahteraan, mempertahankan kamu dan mengembalikan kamu kepada kami sebagai golongan solihin"&lt;br /&gt;Tapi tahukah kita apa jawapan Ibnu Rawahah? Dengan air mata yang masih membasahi pipi, beliau bermadah;&lt;br /&gt;لكنني أسأل الرحمن مغفرة&lt;br /&gt;Tapi kupohon dari Allah Ar-Rahman keampunan&lt;br /&gt;وضربة ذات فرع تقذف الزبدا&lt;br /&gt;Dan pukulan yang bertubi-tubi&lt;br /&gt;&lt;br /&gt;أو طعنة بيدي حران مجهزة&lt;br /&gt;Dan tusukan di kota Harran itu telah tersedia&lt;br /&gt;بحربة تنفذ الأحشاء والكبــدا&lt;br /&gt;Dengan peperangan yang menembuskan tali perut dan hati&lt;br /&gt;حتى يقال إذا مروا على جدثي&lt;br /&gt;Hingga dikatakan apabila mereka melewati jasadku yang telah syahid itu&lt;br /&gt;يا أرشد الله من غاز وقد رشدا&lt;br /&gt;Dialah pejuang berani yang mendapat bimbingan Ilahi&lt;br /&gt;Bala tentara Islam pun maju bergerak ke medan perang Mu'tah. Sewaktu orang-orang Islam dari kejauhan telah dapat melihat musuh-musuh mereka, mereka terasa gerun melihat besarnya balatentara Romawi yang disebutkan sekitar 200,000 orang! Kerana menurut kenyataan barisan tentara mereka seakan tidak tahu di man hujungnya perbarisan mereka. Seolah-olah tidak terhitung banyaknya!&lt;br /&gt;&lt;br /&gt;Melihat jumlah mereka yang cuma 3000, tentera muslimin benar-benar terkesima. dan sebagian ada yang berkata: “Baiknya kita kirim utusan kepada Rasulullah Sallallaahu ‘alaihi wa Sallam, memberitakan jumlah musuh yang besar. Mungkin kita dapat bantuan tambahan pasukan, atau jika diperintahkan tetap maju maka kita patuhi”.&lt;br /&gt;Tetapi Ibnu Rawahah, bagaikan datangnya siang bangun berdiri di antara barisan pasukan-pasukannya lalu berucap dengan lantang. Satu ucapan yang menggegarkan dan tercatat harum dalam lipatan sejarah:&lt;br /&gt;يا قوم و الله إن الذي تكرهون للذي خرجتم له- تطلبو ا الشهادة&lt;br /&gt;“Wahai kaumku! Demi Allah apa yang tidak kamu sukai itulah sebenarnya yang kamu keluar kerananya iaitu kita memburu syahid&lt;br /&gt;و ما نقاتل الناس بعدد و لا قوة و لا كثرة&lt;br /&gt;sesungguhnya kita berperang menentang musuh kita bukan bersandar pada bilangan, kekuatan atau banyaknya jumlah!&lt;br /&gt;إنما نقاتلهم بهذا الدين الذي أكرمنا الله به&lt;br /&gt;Kita tidak memerangi memerangi mereka, melainkan berbekalkan agama kita ini, yang dengan memeluknya kita telah dimuliakan Allah!&lt;br /&gt;فانطلقوا فانما هي إحدى الحسنيين:&lt;br /&gt;Ayuh mara ke hadapan mengejar salah satu dari dua kebaikan yang pasti kita capai&lt;br /&gt;اما الظهور واما الشهادة&lt;br /&gt;Sama ada menang atau syahid !”&lt;br /&gt;Bergema suara kaum Muslimin yang sedikit bilangannya tetapi besar imannya itu menyatakan persetujuan. Mereka berteriak: “Sungguh, demi Allah, benar apa yang dikatakan oleh Ibnu Rawahah!”&lt;br /&gt;&lt;br /&gt;Pasukan berani mati itupun terus ke tujuannya, dengan bilangan yang jauh lebih sedikit menghadapi musuh yang berjumlah 200,000 yang berhasil dihimpun orang Romawi untuk menghadapi suatu peperangan dahsyat yang belum ada taranya. Kedua balatentara pun bertemu, lalu berkecamuklah pertempuran di antara keduanya.&lt;br /&gt;Pemimpin yang pertama Zaid bin Haritsah gugur sebagai syahid yang mulia, disusul oleh pemimpin yang kedua Ja’far bin Abi Thalib, hingga ia juga memperoleh syahidnya setelah kedua tangannya telah kudung mempertahankan bendera Islam, sehingga digelar zul janahain (yang mempunyai dua sayap) kerana Allah telah menggantikannya dengan dua sayap di syurga yang membolehkan beliau terbang ke mana saja yang beliau sukai. Dan sebahagian sahabat menggelarnya Jaa'far at-Toyyaar (yang terbang).&lt;br /&gt; &lt;br /&gt;Setelah itulah Abdullah ibn Rawahahmenyusul sebagai pemimpin bala tentera muslimin yang ketiga. Dikala itu ia menyambut panji perang dari tangan kanannya Ja’far, sementara peperangan sudah mencapai puncaknya. Hampir-hampirlah pasukan Islam yang kecil itu kucar-kacir diantara pasukan Romawi yang datang membanjir laksana air bah, yang berhasil dihimpun oleh Heraklius untuk maksud ini. Tetapi Abdullah mengembalikan semngat mereka dengan menggantikan tampuk kepimpinan tentera ketika saat genting itu. Beliau berseru :&lt;br /&gt;أقسمت يا نفس لتنزلن_ لتنزلنه أو لتكرهنه&lt;br /&gt;“Bukankah kau telah bersumpah wahai diri untuk maju ke medan perang walaupun kau membencinya&lt;br /&gt;إن أجلب الناس وشدوا الرنة_ ما لي أراك تكرهين الجنة&lt;br /&gt;Apabila manusia berhimpun untuk berperang dan teriakan serta jerit tangis kian memuncak.&lt;br /&gt;&lt;br /&gt;Tapi mengapa kulihat engkau seolah bencikan kematian dan menolak syurga?&lt;br /&gt;قد طال ما قد كنت مطمئنة_ هل أنت إلا نطفة في شنة&lt;br /&gt;Telah lama kau tinggal dalam suasana tenang&lt;br /&gt;Bukankah kau itu cuma setitis air mani yang hina?"&lt;br /&gt;Berangkat Menuju Redha NYA.&lt;br /&gt;&lt;br /&gt;Ia pun maju menyerbu orang-orang Romawi dengan tabah. Kalau tidaklah taqdir Allah Subhanahu wa Ta’ala yang menentukan, bahwa hari itu adalah saat janjinya akan ke syurga, niscaya ia akan terus menebas musuh dengan pedangnya, hingga dapat menewaskan sejumlah besar dari mereka.Tetapi waktu keberangkatan sudah tiba, yang memberitahukan awal perjalananya pulang ke hadirat Allah, maka naiklah ia sebagai syahid.&lt;br /&gt;Jasadnya jatuh terkapar, tapi roh perwira itu naik menghadap Zat Yang Maha Pengasih lagi Maha Tinggi, dan tercapailah impian yang didendangkan dalam syairnya selama ini:&lt;br /&gt;حتى يقولوا إذا مروا على جدثي أرشده الله من غاز وقد رشدا&lt;br /&gt;“Hingga dikatakan, iaitu bila mereka melewati mayatku: Wahai prajurit perang yang dipimpin Allah" Ya Allah. Benar, ia telah terpimpin!” “Benar dikau, ya Ibnu Rawahah! Anda memang prajurit yang telah dipimpin oleh Allah!”&lt;br /&gt;Selagi pertempuran sengit sedang berkecamuk di bumi Balqa’ di Syam, Rasululloh Sallallohu alaihi wa Sallam sedang duduk beserta para sahabat di Madinah berbicara dengan mereka. Tiba-tiba percakapan yang berjalan dengan tenang tenteram, Nabi terdiam, kedua matanya basah berkaca-kaca. Beliau mengangkatkan wajahnya dengan mengedipkan kedua matanya, untuk melepas air mata yang jatuh!&lt;br /&gt;Seraya memandang berkeliling ke wajah para sahabatnya dengan pandangan haru, beliau berkata: “Panji perang dipegang oleh Zaid bin Haritsah, ia bertempur bersamanya hingga ia gugur sebagai syahid. Kemudian diambil alih oleh Ja’far, dan ia bertempur pula bersamanya sampai syahid pula. Baginda berdiam sebentar, lain diteruskannya ucapannya: “Kemudian panji itu dipegang oleh Abdulah bin Rawahah dan ia bertempur bersama panji itu, sampai akhirnya ia·pun turut syahid."&lt;br /&gt;Di masa itu, seperti yang diceritakan dalam buku sirah ini, Raheeq Makhtum- Rasulullah berlinangan air mata, menyambung; "Selanjutnya disambut oleh salah satu pedang daripada pedang Allah (Khalid Al-Walid) sehingga Allah memberi kemenangan.”&lt;br /&gt;Kemudian Rasul diam lagi seketika, sementara mata beliau bercahaya, menyinarkan kegembiraan, ketenteraman dan kerinduan, lalu katanya pula : “Mereka bertiga diangkatkan ke tempatku ke syurga …”&lt;br /&gt;Subhanallah!&lt;br /&gt;Ibnu Rawahah telah berjaya!&lt;br /&gt; &lt;br /&gt;Oh ya, apakata kita semua baca tentang perang Mu'tah ini. Sangat penting untuk kita semua tahu. Cuba bayangkan kehebatan tentera Rasulullah 3000 vs. 200,000 hanya 12 tentera muslimin yang syahid! Tentera Rom pula dianggarkan mengalami kerugian nyawa yang besar. Cuba antum cari apakah taktik yang telah diguna pakai oleh saifullah al-maslul (pedang Allah yang terhunus-gelaran Khalid) sehingga tentera Rom tertipu dengan taktik perang itu dan berasa gerun lalu berundur???&lt;br /&gt;Masha Allah!&lt;br /&gt;Perang Mu'tah ini juga telah memberi kesan besar membawa kemasyhuran tentera Islam harum ke Rom dan seluruh arab. Impak besarnya termasuklah&lt;br /&gt;~kuasa Rom menjadi cuak dengan ancaman tentera Islam dan perang ini merupakan permulaan kepada pertarungan2 berdarah dengan Rom di masa2 seterusnya sehingga akhirnya membawa kepada kemenangan dan pembukaan Islam di negeri2 Rom&lt;br /&gt;~Qabilah-qabilah arab yang sebelum ini menjadi musuh ketat Islam telah mengubah pendirian dan ramai-ramai menganut agama Islam termasuk Bani Salim, Asyja', Ghatfaan, Zibyaan, Fazarah, dan lain-lain.&lt;br /&gt;Ini kerana sebelum ini mereka mempersendakan keberangkatan tentera Islam. Mereka mendakwa tentera muslimin ibarat menghantar ekspedisi membunuh diri kerana jumlah mereka yang kecil itu menentang ratusan ribu tentera Rom. Tambahan pula, kuasa Rom ketika itu adalah bangsa yang paling digeruni, kuasa gergasi (mungkin seperti Amerika hari ini). Tetapi sebaliknya tentera Islam kembali ke Madinah tanpa kerigian besar. Ini benar-benar membuktikan kehebatan Islam. Tetapi ini juga membuktikan mereka sememangnya dibantu dan disokong oleh Allah SWT !!!&lt;br /&gt;Membaca sirah benar-benar membuatkan saya kagum akan kehebatan para sahabat dari segi keimanan mereka yang tidak berbelah bagi. Mereka tidak pernah mempersoalkan tindakan Rasulullah Sallallahu Alayhi Wasallam. Tetapi keimanan mereka bulat. Tidak bersandar pada logik akal, tapi logik Allah. Kalau Allah kata jadi, maka jadi. Islam yang menang. Bagaimana imanku ya Allah ? (~.~) Masih banyak yang perlu diperbaiki untuk menyandang gelaran Syabab Muhammad !!!&lt;br /&gt;&lt;br /&gt;Rujukan:&lt;br /&gt;-Karakteristik Perihidup 60 sahabat Rasulullah SAW (Khalid Muhd Khalid)&lt;br /&gt;-Al-Raheeq Al-Makhtum- Sirah Rasulullah Sallalahu Alayhi wasallam (Syeikh Sofiy Ar-Rahman Al-Mubarakfuri)&lt;br /&gt;-Riwayat hidup Rasulullah Sallallahu alayhi wasallam (Abul Hasan Ali Al-Hasani An-Nadwi)&lt;br /&gt;نسأل الله ان نسير علي دربهم ونلتحق بركبهم في الجنة ان شاء الله&lt;br /&gt;الله ينور قلوينا وقلوبكم وقلوب جميع المسلمين بالعلم والدين والهدي واليقين ويرفع مقامنا ومقامكم ومقام جميع المسلمين في الفردوس الأعلي ويحشرنا ويحشركم بجوار النبي الأمين&lt;br /&gt;&lt;br /&gt;Kredit&lt;br /&gt;http://ibnufathani.blogspot.com/2011/05/perang-mutah-air-mata-penyair.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4436551669534104678?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4436551669534104678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4436551669534104678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4436551669534104678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4436551669534104678'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/06/perang-mutah-air-mata-penyair.html' title='Perang Mu&apos;tah &amp; Air Mata Penyair Kesayangan Rasulullah Sallallahu &apos;Alayhi Wasallam'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-9086911063616563059</id><published>2011-04-18T00:31:00.003+08:00</published><updated>2011-04-18T09:21:01.056+08:00</updated><title type='text'>Exercise</title><content type='html'>Salam&lt;br /&gt;&lt;br /&gt;Last week terdapat perbincangan yang panjang berkaitan domain design dan bagaimana cara untuk membolehkan sesuatu design itu fleksible untuk reusable.&lt;br /&gt;&lt;br /&gt;Sebelum nie terdapat banyak teknik untuk hasilkan design yang fleksible antaranya ialah dengan mengambil kehendak apa yang perlu diuji untuk dijadikan panduan untuk mancapai objektif. Cara ini dikenali sebagai Test Driven Design (TDD). Kemudian ada juga cara lain seperti Domain Driven Design (DDD) dan normal OOAD.&lt;br /&gt;&lt;br /&gt;Okay untuk exercise apa kata kalau kita cuba untuk selesaikan satu requirement yang sebegini.&lt;br /&gt;&lt;br /&gt;Satu company menyelia 2 jenis perkhidmatan, dimana setiap perkhidmatan memerlukan operator untuk merekodkan docket.&lt;br /&gt;&lt;br /&gt;Docket ini mengandungi maklumat satu atau lebih SubDocket dan SubDocket pula boleh mengandungi satu atau lebih DocketItem.&lt;br /&gt;&lt;br /&gt;Maklumat DocketItem pada perkhidmatan yang ditawarkan mempunyai persamaan pada sesetengah property dan mempunyai maklumat yang berlainan pada property yang lain dan dockeitem tersebut mempunyai relation ke product atau service mengikut jenis perkhidmatan. Selain dari itu docketitemB juga memerlukan pengiraan DiscountPercentage.&lt;br /&gt;&lt;br /&gt;Saya bagi contoh domain dalam image dibawah. Apa yang penting ialah bagaimana kita boleh menggunakan object yang sama untuk handle requirement sebegini. Dan kemudian kita akana tambah requirement baru dari masa kesemasa. Ada sesiapa yang hendak suggest atau mencuba?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-upGZJGToyxY/TauQAwMDZGI/AAAAAAAAAUQ/1FTLHSFJUSU/s1600/mockup_3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 161px;" src="http://4.bp.blogspot.com/-upGZJGToyxY/TauQAwMDZGI/AAAAAAAAAUQ/1FTLHSFJUSU/s400/mockup_3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5596725304547828834" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-9086911063616563059?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/9086911063616563059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=9086911063616563059' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/9086911063616563059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/9086911063616563059'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/04/exercise.html' title='Exercise'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-upGZJGToyxY/TauQAwMDZGI/AAAAAAAAAUQ/1FTLHSFJUSU/s72-c/mockup_3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-995362943859097017</id><published>2011-03-25T08:39:00.006+08:00</published><updated>2011-03-25T16:55:19.351+08:00</updated><title type='text'>vaccine framework example - preview 3 (create order)</title><content type='html'>Salam&lt;br /&gt;&lt;br /&gt;Adad beberapa minor changes dlm codebase vaccine framework, yang utama sekali ialah macam maner aku nak handle part read side iaitu reporting.Aku akan sentuh part nie nanti. Tetapi untuk sekarang nie aku nak tunjukkan bagaimana aku pecahkan relation Customer dari Order dan pecahkan relation OrderLine dari Product.&lt;br /&gt;&lt;br /&gt;Kalau tengok balik domain diagram yang sebelum nie, domain diagram ini adalah cara design yang kebiasaan dari kita akan buat apabila menggunakan cara n-tier, dimana dlm domain tersebut kita ubah, dalam domain tersebut juga kita baca latest state object tersebut untuk kita tunjukkan kepada client balik dan kebiasaan juga, process ini akan melibatkan kita map dengan class Data Transfer Object untuk reshape maklumat kepada UI screen di client.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-7bt7XBGvK-M/TYioPrnAs3I/AAAAAAAAARc/Q_VLHW6IG5w/s1600/mockup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 30px;" src="http://1.bp.blogspot.com/-7bt7XBGvK-M/TYioPrnAs3I/AAAAAAAAARc/Q_VLHW6IG5w/s400/mockup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5586900325110952818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Selepas tu aku cakap jika menggunakan DCI+CQSR+Event Sourcing, kita boleh pecahkan relation tadi dan letakkan reference tersebut berada dalam Role, dan relation ini bersifat sementara.Kenapa Role penting? Ini adalah kerana kita boleh share role diantara aggregateroot object yang lain dengan syarat aggregateroot object tersebut juga perlulah memenuhi contract Role yang didefine. Dan di dalam Role jugalah berlaku interaction antara object, sebagai contoh jika condition ini berlaku, execute object yang itu, etc.&lt;br /&gt;&lt;br /&gt;Berbalik pada demo code yang aku nak tunjuk, sebelum nie aku dah tunjukkan bagaimana nak create Customer, tetapi ada beberapa code penting aku terlupa nak cerita, menyebabkan terdapat beberapa kekeliruan.InsyAllah aku cuba terangkan dengan lebih lengkap dalam n3 kali ini.&lt;br /&gt;&lt;br /&gt;Untuk create Order bagi specific Customer, kita perlu lah juga ada Product, so process untuk create Product adalah lebih kurang macam mana nak create Customer.&lt;br /&gt;&lt;br /&gt;Jadi sekarang nie aku dah adalah list Customer dan aku juga dah ada list Product. UI dia ada seperti ini:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-xaOcY5ROdnU/TYvpmvM2a0I/AAAAAAAAASE/SLgcMr9-fPA/s1600/order1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://2.bp.blogspot.com/-xaOcY5ROdnU/TYvpmvM2a0I/AAAAAAAAASE/SLgcMr9-fPA/s400/order1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5587816614397897538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Langkah seterunya ialah aku define object Order, dan class code dia adalah seperti ini. Code dalam class Order sebenarnya dibina secara incremental tapi payah nak tunjuk satu-satu, so aku show complete class Order.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1711274.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Line 5 , menunjukkan Order mengandungi OrderLine dan object OrderLine nie ialah child object bagi Order. Line 52, ialah complete OrderLine, dan lihatlah berapa simple class tersebut.&lt;br /&gt;&lt;br /&gt;Line 11 dan 12 pula, kita perlu registerkan event handler yang akan execute apabila kita replay balik semula event2 tersebut.Ok buat masa nie, kita tingglkan sekejap class Order nie.&lt;br /&gt;&lt;br /&gt;Next, aku perlu define pula apa Command yang perlu dibuat untuk melakukan Order bagi Customer. So disini aku define Command - MakeNewOrderCommand&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1711297.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Code yang ini pun cukup straight forward, cuma aku define dictionar collection ialah bagi aku combinekan selection product dan juga berapa quantity.&lt;br /&gt;&lt;br /&gt;Seterusnya ialah dengan define Role, apa Role yang akan memainkan peranan dalam melakukan Order dan siapa AggregateRoot yang akan menjadi RolePlayer?&lt;br /&gt;&lt;br /&gt;Aku memilih Order object sebagai AggregateRoot dan juga menjadi RolePlayer untuk Role MakeNewOrderRole.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1711313.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ok jom kena tengok apa yang menarik didalam Role ini. Line 5, aku perlu mapkan apa command yang akan digunakan dalam Role ini.&lt;br /&gt;Beri perhatian pada Line 7.Pada Line 7 ini, aku akan load AggregateRoot Customer hanya dengan Id, apa yang berlaku dibelakang scene ialah, vaccine framework akan baca setiap event dalam eventsnapshot source untuk aggregateroot customer dan akan replay event-event tersebut.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1711336.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Okay lihat semula pada code Customer, sebelum ini kita dah registerkan Customer tersebut untuk terima 2 jenis event iaitu event NewCustomerCreatedEvent dan CashBalanceDecreasedEvent. Line 25, OnNewCustomerCreated ini lah vaccine framework akan trigger semula apabila direplay jika ada event NewCustomerCreatedEvent, dari situ kita dapat lihat bagaimana sesuatu AggregateRoot object dibina state2 object tersebut.&lt;br /&gt;&lt;br /&gt;Ambil masa dan kaji macam maner interaction between object berlaku didalam Role dan bagaimana juga Role ini nanti boleh dishare dengan AggregateRoot object yang lain sebagai RolePalyer. Kalau sekarang nie RolePlayer ialah Order, ada kemungkinan process Order ini tetapi aku nak menggunkan keatas AggregateRoot object yang lain seperti Sale etc? Cuma sekarang nie mengambil konsep "YAGNI", kita hanya concentrate pada objective yang hendak dicapai, jika ada keperluan untuk dishare pada masa tu kita akan buat minor refactor.&lt;br /&gt;&lt;br /&gt;Line 14 kita akan replay event untuk Product pula, process sama macam yang diterangkan, manakala Line 22,23,24 ketiga3 AggregateRoot akan memainkan peranan untuk execute method2 bagi menjayakan hasrat Role itu tadi.&lt;br /&gt;&lt;br /&gt;Okay Line 23, customer.DecreaseCashBalance(totalAmount), singkap balik code dalam Customer dimana method DecreaseCashBalance dan lihat apa yang berlaku.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void DecreaseCashBalance(decimal totalAmount)&lt;br /&gt;{&lt;br /&gt;            if (cashBalance &gt;= totalAmount)&lt;br /&gt;            {&lt;br /&gt;                cashBalance -= totalAmount;&lt;br /&gt;                var e = new CashBalanceDecreasedEvent { CashBalance = cashBalance };&lt;br /&gt;                Apply&lt;CashBalanceDecreasedEvent&gt;(e)&lt;br /&gt;                    .UpdateReport&lt;CustomerDetailReport&gt;(r =&gt; r.cashBalance = cashBalance);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                throw new Exception("Insufficent amount to deduct");&lt;br /&gt;            }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Okay yang ini pula ialah code di client&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private ActionResult MakeAnOrderComplete(CustomerOrderViewModel model)&lt;br /&gt;{&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                var cmd = new MakeNewOrderCommand { CustomerId = new Guid(Request.Params["CustomerId"]) };&lt;br /&gt;                foreach (var item in model.OrderItems)&lt;br /&gt;                {&lt;br /&gt;                    cmd.Quantities.Add(item.ProductId, item.Quantity);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                using (var s = UnitOfWork)&lt;br /&gt;                {&lt;br /&gt;                    var ctx = new ContextHandler&lt;Order, MakeNewOrderRole&gt;(repo);&lt;br /&gt;                    ctx.Bind(cmd)&lt;br /&gt;                       .Execute();&lt;br /&gt;                    s.Commit();&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                return MakeAnOrder();&lt;br /&gt;            }&lt;br /&gt;            catch(Exception err)&lt;br /&gt;            {&lt;br /&gt;                throw err;&lt;br /&gt;            }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ada beberapa, part yang aku belum sentuh, insyAllah dalam n3 yang lain, n3 nie pun dah agak panjang.&lt;br /&gt;&lt;br /&gt;https://github.com/ryzam/VaccineWeb-Preview - Code&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-995362943859097017?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/995362943859097017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=995362943859097017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/995362943859097017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/995362943859097017'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/03/vaccine-framework-example-preview-3.html' title='vaccine framework example - preview 3 (create order)'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-7bt7XBGvK-M/TYioPrnAs3I/AAAAAAAAARc/Q_VLHW6IG5w/s72-c/mockup.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8496807827553057656</id><published>2011-03-23T15:35:00.004+08:00</published><updated>2011-03-24T09:17:57.444+08:00</updated><title type='text'>vaccine framework example - preview 2 (create customer)</title><content type='html'>Salam kepada Datuk T :) sempena hari porno se1Malaysia&lt;br /&gt;&lt;br /&gt;Ok untuk meneruskan kerja &lt;strike&gt;jahat&lt;/strike&gt;, opps kerja baik dari entry &lt;a href="http://ryzam.blogspot.com/2011/03/vaccine-framework-example-preview-1.html"&gt;part 1&lt;/a&gt; , saya akan tunjukkan contoh dan bukti bagaimana hendak menggunakan vaccine framework dimana anda akan start dengan pengalaman baru cara DCI + CQRS + ES(Event Sourcing) di combinekan.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Demo nie dalam ASP.Net MVC3.  Aku create simple web solution dan didalam folder Models aku perlu create 6 folder iaiatu:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Commands&lt;/div&gt;&lt;div&gt;2. Domains&lt;/div&gt;&lt;div&gt;3. EventHandlers&lt;/div&gt;&lt;div&gt;4. Events&lt;/div&gt;&lt;div&gt;5. Reports&lt;/div&gt;&lt;div&gt;6. RoleHandlers&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Imej seperti dibawah ini.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Uh6scv--BH8/TYmoFio37KI/AAAAAAAAARs/E_nsd2W7s64/s1600/preview1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 287px; height: 358px;" src="http://1.bp.blogspot.com/-Uh6scv--BH8/TYmoFio37KI/AAAAAAAAARs/E_nsd2W7s64/s400/preview1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5587181625880865954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Create Customer class object&lt;/span&gt;&lt;br /&gt;Aku akan tulis first code iaitu customer class didalam folder Domains/Customers&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/1703064.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Perhatikan ada beberapa perkara penting aku perlu letak didalam class Customer. Pertama aku perlu extends AggregateRoot&lt;customer&gt;, ini adalah penting untuk framework execute function replay apabila load object dari storage. So convention ini juga menunjukkan Customer adalah AggregateRoot  dan aku juga perlu implement IRolePlayer untuk membolehkan Customer untuk host apa-apa role yang diberi semasa runtime execution selagi mengikut role contract, very flexible dan dynamic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Create command&lt;/span&gt;&lt;br /&gt;Berikutnya, aku perlu tulis command class untuk digunakan sebagai message dari client ke server seperti ini. Tiada yang istimewa cuma perlu di extends ke command. Command akan digunakan di client sebagai mapping user mental model yang mengandungi maklumat dan operation yang hendak dilakukan.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/1703092.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Create Role&lt;/span&gt;&lt;br /&gt;Selepas aku dah create domain(aggregateroot) dan juga command, seterusnya aku kena define Role. Role antara element yang penting/core dlm vaccine framework, dimana Role ini boleh sahaja dishare antara domain object yang lain dengan syarat domain object yang lain memenuhi contract RoleMethod. Contoh Role dalam demo app nie seperti berikut ini.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1706065.js'&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;Self ialah keyword yang akan map balik kepada AggregateRoot so dalam kes ini Self ialah Customer.Self akan ada method CreateNewCustomer(c.Name,c.CashBalance), then perhatikan balik dalam code Customer diatas, dimana dalam method tersebut, kita hanya akan hasilkan event apabila method tersebut berlaku. Event tersebut akan diletakkan dalam method Apply iaitu salah satu method dalm vaccine framework berfungsi untuk store event kedalam event source dan eventsnapshot source, selain dari itu reporting component juga berada dalam Apply method. Event yang dihasilkan dalam process CreateNewCustomer ialah NewCustomerCreatedEvent. Code NewCustomerCreatedEvent adalah seperti ini.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1706411.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Masukkan reporting&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Seterusnya, apabila event tadi terhasil, selain dari disimpan kedalam event source dan juga eventsnapshot source, bahagian report juga untuk read process akan juga berlaku. Aku perlu create bagaimana report yang aku ingin keluarkan, report boleh digunakan untuk view di screen. So aku tidak perlu lagi ada join table, sebalinya setiap view UI akan ada report masing-masing.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1706436.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;EventHandler yang mengawal samaada update atau create new report ialah seperti ini&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1706446.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Aku akan tunjuk, rupa eventsnapshot source dan customerreport datasource.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EventSnapshotSource&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-shab0Sub_kw/TYqa2C29x_I/AAAAAAAAAR0/Mer0Kz-tdKo/s1600/row1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 18px;" src="http://2.bp.blogspot.com/-shab0Sub_kw/TYqa2C29x_I/AAAAAAAAAR0/Mer0Kz-tdKo/s400/row1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5587448540977547250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CustomerDetailReport&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-jLgz--Hf7fI/TYqbieAlkcI/AAAAAAAAAR8/PYMXr9KTwXw/s1600/row2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 24px;" src="http://3.bp.blogspot.com/-jLgz--Hf7fI/TYqbieAlkcI/AAAAAAAAAR8/PYMXr9KTwXw/s400/row2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5587449304179904962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ringkasan&lt;br /&gt;&lt;br /&gt;Ini adalah preview simple bagaimana menggunakan vaccine framework. InsyAllah akan buat demo dengan scenario yang lagi complex selepas ini.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8496807827553057656?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8496807827553057656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8496807827553057656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8496807827553057656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8496807827553057656'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/03/vaccine-framework-example-preview-2.html' title='vaccine framework example - preview 2 (create customer)'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Uh6scv--BH8/TYmoFio37KI/AAAAAAAAARs/E_nsd2W7s64/s72-c/preview1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1744538110430419460</id><published>2011-03-22T20:59:00.004+08:00</published><updated>2011-03-23T10:07:34.517+08:00</updated><title type='text'>vaccine framework example - preview 1</title><content type='html'>Salam&lt;br /&gt;&lt;br /&gt;Ok, just nak tunjuk simple example macam maner vaccine framework berfungsi. So example yang paling mudah ialah classic example customer order product. Rules yang perlu ada ialah order mestilah tak lebih dari balance amount yang ada pada customer dan juga quantiti order product mestilah kurang atau sama dari available quantiti stock pada setiap product yang dipilih.&lt;br /&gt;&lt;br /&gt;So, langkah pertama macam maner kita nak design domain model dia? Kalau normal domain model design kita akan hasilkan design seperti ini&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-7bt7XBGvK-M/TYioPrnAs3I/AAAAAAAAARc/Q_VLHW6IG5w/s1600/mockup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 30px;" src="http://1.bp.blogspot.com/-7bt7XBGvK-M/TYioPrnAs3I/AAAAAAAAARc/Q_VLHW6IG5w/s400/mockup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5586900325110952818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Domain diatas digunakan untuk write dan read, so akan ada join table sana dan sini untuk hasilkan maklumat tertentu ke screen atau apa-apa bentuk reporting.&lt;br /&gt;&lt;br /&gt;Domain design menggunakan vaccine framework pula akan hasilkan design sebegini&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-tT6C879v42Q/TYiv5VMe_FI/AAAAAAAAARk/unCDp8n8ReA/s1600/mockup_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 143px;" src="http://2.bp.blogspot.com/-tT6C879v42Q/TYiv5VMe_FI/AAAAAAAAARk/unCDp8n8ReA/s400/mockup_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5586908737230011474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hasilnya tiada lagi reference order ke customer dan tiada lagi reference orderline ke product. So mana perginya reference ini. Kalau dilihat dalam image reference tu sekarang berada dalam makeorderrole tetapi ianya hanyalah short term reference, hanya berlaku apabila role tersebut digunakan. Maklumat reference disimpan didalam event untuk read model.&lt;br /&gt;&lt;br /&gt;Oleh kerana ini adalah preview untuk vaccine framework, so untuk detail pasal architecture akan dibincang di lain kali.&lt;br /&gt;&lt;br /&gt;Antara konsep yang penting dalam cqrs ialah messaging. Message terbahagi kepada 2 bahagian, command dan juga event.&lt;br /&gt;&lt;br /&gt;Command dimap kepada verb dan dalam bentuk "present tense" seperti RegisterNewCourse etc.&lt;br /&gt;&lt;br /&gt;Manakala event pula ialah sesuatu yang telah berlaku hasil dari process dari command. Name convention untk map ialah seperti berikut NewCourseRegistered ianya juga map kan verb dalam bentuk "past tense".&lt;br /&gt;&lt;br /&gt;Okay cukup serba sedikit pasal command dan event, berbalik semula kepada macam maner hendak hasilkan solution kepada user story yang kat atas berserta rules yang perlu dipenuhi. &lt;br /&gt;&lt;br /&gt;Apabila menggunakan vaccine framework, ada 3 object penting perlu di kenal pasti sebelum pergi ke step seterusnya. Pertama sekali kena kenal pasti &lt;br /&gt;&lt;br /&gt;1. RolePlayer - Object yang akan menggunakan Role didalam berkomunikasi dengan object2 yang lain.&lt;br /&gt;&lt;br /&gt;2. Command Message - Ialah intention/mental model dari user kepada system untuk buat sesuatu.&lt;br /&gt;&lt;br /&gt;3. RoleMethod - Fungsi role dan boleh dikongsi fungsi ini dengan RolePlayer yang lain yang ada contract Role yang sama.&lt;br /&gt;&lt;br /&gt;Habis preview 1 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1744538110430419460?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1744538110430419460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1744538110430419460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1744538110430419460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1744538110430419460'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/03/vaccine-framework-example-preview-1.html' title='vaccine framework example - preview 1'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-7bt7XBGvK-M/TYioPrnAs3I/AAAAAAAAARc/Q_VLHW6IG5w/s72-c/mockup.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8735031677393244914</id><published>2011-03-20T22:39:00.002+08:00</published><updated>2011-03-21T08:57:04.865+08:00</updated><title type='text'>DCI + CQRS = Vaccine Framework</title><content type='html'>Salam berapa Malaysia&lt;br /&gt;&lt;br /&gt;Ok last 2 weeks , aku agak busy developed simple framework , yang aku panggil vaccine framework, apa itu vaccine framework? Vaccine framework mengandungi beberapa combination pattern diantaranya ialah DCI dan DDD-CQRS. Selain dari itu vaccine framework tidak meyimpan current state domain object sebaliknya menyimpan event dalam 2 jenis event, normal event dan snapshot event.&lt;br /&gt;&lt;br /&gt;Read dan write totally diasingkan component2 nya. Tiada lagi reference antara aggregateroot ke aggregateroot yang lain sebaliknya reference ini berlaku secara sementara didalam role apabila command di execute. Jadi reference ini hanyalah berada di read domain dan dalam bentuk denormalized.&lt;br /&gt;&lt;br /&gt;Terdapat perbezaan ketara antara vaccine framework dengan cqrs framework yg lain seperti ncqrs (.net) dan axonframework (java). First sekali sudah tentu framework tersebut tidak support cara DCI working secara default dan framework2 tersebut semuanya derive current state object dengan replay event, walaupun framework tersebut ada process untuk derive dari snapshot tetapi ianya bukan secara default. Sama ada perlu letakkan configuration berapa bilangan event berlaku dan buat snapshot atau run another thread untuk buat snapshot dan store dlm sequence of event.&lt;br /&gt;&lt;br /&gt;Manakala dalam vaccine, setiap event of object akan disimpan hanya kepada 2 jenis table EventSource dan EventSourceSnapshot, dan main event yang akan direplay ialah di EventSnapshotSource. &lt;br /&gt;&lt;br /&gt;Keseluruhan application kita akan hanya ada 2 table di write component dan pelbagai table report di read component berdasarkan bagaimana kita nak show information ke user sama ada paparan ke screen atau format percetakan.&lt;br /&gt;&lt;br /&gt;InsyAllah, aku dah rewrite sikit mars application untuk POC, mcm maner vaccine framework ini bekerja. masih lagi baby framework, hopefully dapat support 1Malaysia hahahaha .. yeyeye&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8735031677393244914?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8735031677393244914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8735031677393244914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8735031677393244914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8735031677393244914'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/03/dci-cqrs-vaccine-framework.html' title='DCI + CQRS = Vaccine Framework'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-507115900800610387</id><published>2011-03-14T11:14:00.002+08:00</published><updated>2011-03-16T10:20:42.129+08:00</updated><title type='text'>CQRS - Part 2</title><content type='html'>Salam 1Malaysia&lt;br /&gt;&lt;br /&gt;Minggu lepas coretan pertama berkaitan CQRS dan serba sedikit pengenalan apa itu CQRS. Seperti yang diterangkan, asas paling utama dalam CQRS ialah membezakan process write dan read.&lt;br /&gt;&lt;br /&gt;So kenapa perlukan CQRS. CQRS hanyalah pilihan dalam architecture design, bagi developer yang inginkan scalability, performance dan maintainability boleh mencuba CQRS dimana terdapat pelbagai versi CQRS yang boleh dipilih untuk dibuat guideline.&lt;br /&gt;&lt;br /&gt;Sebelum diberi nama CQRS, architecture pattern ini dikenali sebagai CQS-DDD dan terdapat kekeliruan di antara CQS - Bertrand Meyer dan CQS-DDD dari DDD group. Walau objective kedua-dua pattern nie sama, dan tak dinafikan CQS-DDD menjadikan CQS - Bertrand Meyer sebagai asas pattern, tetapi CQS-DDD bergerak ke arah yang lebih besar iaitu architecture pattern.&lt;br /&gt;&lt;br /&gt;CQS - Bertrand Meyer punya definisi :-&lt;br /&gt;&lt;br /&gt;"every method should either be a command that performs an action, or a query that returns data to the caller, but not both"&lt;br /&gt;&lt;br /&gt;Jadi CQS- Betrand Meyer punya target pada masa itu ialah supaya satu class/method tidak akan buat2 perkara write dan read dlm class/method yang sama.&lt;br /&gt;&lt;br /&gt;CQRS juga mengambil prinsip yang sama, maka perkara pertama yang perlu dipastikan ialah design class/method yanag akan handle concrete kerja. Satau class akan buat command-(write) dan satu lagi class akan buat query-(read).&lt;br /&gt;&lt;br /&gt;Begitu juga halnya pada code existing, apa yang boleh dibuat ialah cuba refactor dan pecahkan function2 tersebut ke dalam kategori masing-masing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-507115900800610387?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/507115900800610387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=507115900800610387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/507115900800610387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/507115900800610387'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/03/cqrs-part-2.html' title='CQRS - Part 2'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7986691001168208385</id><published>2011-03-10T01:28:00.004+08:00</published><updated>2011-03-10T09:30:27.923+08:00</updated><title type='text'>CQRS</title><content type='html'>Salam 1Malaysia&lt;br /&gt;&lt;br /&gt;CQRS Architecture pattern, agak complex jika pertama kali membaca artikel atau mendengar mana-mana presentation berkaitan. &lt;br /&gt;&lt;br /&gt;Objektif utama ialah untuk membezakan antara (read) dan (write) domain object. Itu sahaja, cuma untuk mencapai objektif tersebut terdapat beberapa cara penyelesaian yang boleh diguna pakai.&lt;br /&gt;&lt;br /&gt;Penyelesaian yang paling umum ialah dengan membezakan proces (write domain object) dan proces (read domain object) menggunakan component yang berlainan.&lt;br /&gt;&lt;br /&gt;Ok sebelum itu image dibawah adalah contoh architecture design yang biasa digunakan&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-QnMVMbayHGg/TXgmcV17IBI/AAAAAAAAARU/eFT2miy3yEE/s1600/image.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-QnMVMbayHGg/TXgmcV17IBI/AAAAAAAAARU/eFT2miy3yEE/s400/image.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5582254006467239954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jika diperhatikan process write dan read mengunakan component yang sama dan melalui process yang sama dari client hingga ke server.&lt;br /&gt;&lt;br /&gt;Masalah utama ialah untuk ialah scalability dan performance. Umum mengetahui write process adalah lebih lama dari read process, tetapi apabila satu domain digunakan untuk read dan juiga write, ini akan memberikan penalti dari segi performance.&lt;br /&gt;&lt;br /&gt;Dari segi database, apabila write dilakukan, sql server akan lock row sehingga process write tadi selesai dan jika pada masa yang sama terdapat client yang ingin membaca data tersebut, client tersebut perlulah menunggu sehingga process tersebut selesai. Untuk sistem yang trafiknya adalah kecil, keadaan ini tidak mengganggu performance tetapi bagi trafik yang besar,peratusan kemungkinan sistem akan crash adalah besar.&lt;br /&gt;&lt;br /&gt;So untuk next coretan, insyAllah akan bawa contoh penyelesaian yang boleh digunakan.&lt;br /&gt;&lt;br /&gt;Salam 2Malaysia :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7986691001168208385?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7986691001168208385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7986691001168208385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7986691001168208385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7986691001168208385'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/03/cqrs.html' title='CQRS'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-QnMVMbayHGg/TXgmcV17IBI/AAAAAAAAARU/eFT2miy3yEE/s72-c/image.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5003278366444981432</id><published>2011-02-02T09:00:00.007+08:00</published><updated>2011-02-07T09:14:33.333+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='DCI'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><title type='text'>Rewrite NerdDinner + DCI + SisoDB</title><content type='html'>Salam -1Malaysia&lt;br /&gt;&lt;br /&gt;Antara cara untuk cepat memahami dan belajar sesuatu teknik dalam programming ialah dengan rewrite existing open source application kepada teknik baru yang hendak dikuasai.Cara sebegini agak berkesan kerana bahagian UI tidak perlu dibina, boleh menggunkan UI yang dah ada, apa yang penting ialah mengubah code dibahagian belakang (backend).&lt;br /&gt;&lt;br /&gt;Untuk itu aku akan tunjukkan cara macam maner aku rewrite + refactor existing nerddiner code kepada teknik DCI.InsyAllah aku akan bahagikan artikel nie kepada beberapa bahagian.&lt;br /&gt;&lt;br /&gt;Untuk mereka yang tak tahu apa itu NerdDinner, boleh baca kat sini &lt;a href="http://nerddinner.codeplex.com/"&gt;NerdDinner Codeplex&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First sekali aku perlu kenal pasti which part/code yang aku ingin rewrite.Jadi dalam nerddinner application bahagian yang aku kenal pasti pertama sekali ialah bahagian register sebagai user. NerdDinner menggunakan Membership provider which is pada aku provider yang okay bagi normal developer, tetapi tidak bagi experiance developer.&lt;br /&gt;&lt;br /&gt;Okay first sekali tengok dalam orginal code di controller&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1520182.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Pada line no 8, controller akan call Membership service untuk create User. Aku rewrite code di contoller dan mengantikan Membership service kepada DCI context.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1520191.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Code diatas ialah code di controller apabila ditukar untuk connect ke DCI context. Perhatikan pada line 13 iaitu RegisterAccountContext. RegisterAccountContext bertanggungjawab untuk run process mendaftarkan user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Project Solution&lt;/span&gt;&lt;br /&gt;Sebelum start dengan lebih detail, disini aku tunjukkan beberapa perubahan yang dilakukan tetapi tidak terlalu ekstrim, pada project solution aku tambah another 2 folder dalam project yang sama (Aku tak buat dlm project yang lain untuk tujuan demo ini). Dua folder yang baru ditambah ialah Contexts dan juga Domains folder didalam folder Model seperti ini :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/TUjBfksUF8I/AAAAAAAAAQw/EGvsIoKCxAg/s1600/nerddinnerdci1.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 271px; height: 400px;" src="http://1.bp.blogspot.com/_JKWF88m2xLU/TUjBfksUF8I/AAAAAAAAAQw/EGvsIoKCxAg/s400/nerddinnerdci1.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5568913687413266370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Domains&lt;/span&gt;&lt;br /&gt;Orginal nerddiner menggunakan Entity Framework Codegen, tetapi disini aku akan guna normal POCO plus SisoDB. Untuk mereka yang tidak tahu apa itu SisoDb boleh baca disini &lt;a href="http://www.sisodb.com/"&gt;SisoDb&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Untuk first domain aku akan buat ialah UserAccount. Aku akan tunjukkan sesimple yang boleh untuk rewrite aplikasi ini.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://www.pastie.org/1520317.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Interface IRolePlayer hanyalah marker interface, manakala IUserAccount ialah role interface, nanti akan diterangkan secara detail.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Context&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Context ialah object yang akan implement use case. Kebiasaannya nama context similar kepada nama use cases. Jadi disini aku akan create satu context yang dipanggil RegisterAccountContext. &lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/1520352.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Okay pada line 9, aku declare role interface, dimana role interface ini hanyalah available digunakan hanya dlm context register account.&lt;br /&gt;&lt;br /&gt;Pada line 30, role akan diinject dengan RoleMethod (RegisterAccountRole) class&lt;br /&gt;&lt;br /&gt;this.IUserAccount.PlayRole&lt;RegisterAccountRole&gt;()&lt;br /&gt;                 .Register(userName, passWord, email);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Business interaction akan berlaku didalam class RegisterAccountRole, lihat line 42.&lt;br /&gt;&lt;br /&gt;Okay rasa setakat ini untuk bahagian 1.&lt;br /&gt;&lt;br /&gt;Hantar email untuk sample complete code&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5003278366444981432?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5003278366444981432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5003278366444981432' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5003278366444981432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5003278366444981432'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/02/rewrite-nerddinner-dci-sisodb.html' title='Rewrite NerdDinner + DCI + SisoDB'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JKWF88m2xLU/TUjBfksUF8I/AAAAAAAAAQw/EGvsIoKCxAg/s72-c/nerddinnerdci1.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4274456804044217515</id><published>2011-02-01T20:31:00.002+08:00</published><updated>2011-02-01T21:14:29.411+08:00</updated><title type='text'>Pengundi Melayu kurang ilmu demand time pilihanraya</title><content type='html'>Pengundi melayu pada umumnya masih kurang ilmu nak demand undi time pilihanraya.. pilihanraya kat malaysia sebenarnya adalah perniagaan yang menguntungkan pada mereka yang arif&lt;br /&gt;&lt;br /&gt;sepatutnya time nie jika mereka benar2 nakkan undi..anda sepatutnya demand hak-hak dan apa-apa yang berkaitan keperluan hidup pada masa itu juga... pada penyokong pembangkang jgn hanya terlibat dalam kempen pembangkang , join sekali event bik mama yang tiada unsur maksiat lah.. so masa tu anda mintalah mereka tunai kan keperluan anda sebagai rakyat/pengundi jika mereka memerlukan undi anda.. serius...nie rahsia hidup senang bila pilihanraya.&lt;br /&gt;&lt;br /&gt;demand sikit, jika tak bagi..undi anda pergi ke pembangkang..ada berani??.. tapi oleh kerana sifat bertolak ansur dan lembut hati ada pada pengundi melayu menyebabkan mereka ditipu hidup2 macam sekarang nie, sampai bila perlu ditipu macam nie. walaupun anda memang karat biru, salah ke nak demand?? takut?? ..anda rugi.. walaupun anda dah tekad dlm hati nak mengundi dacing so kalau anda demand sikit adakah kemelayuan anda akan hilang?&lt;br /&gt;&lt;br /&gt;pada pembangkang pun satu, kalau kawasan tu memang dah agak pekat % &lt; 50 untuk menang ..mereka sepatutnya tak perlu bersusah payah berkempen mengeluarkan belanja yang banyak, sekadar buat satu kain rentang muka calon dah lah, lepas tu buat kempen kerumah sampaikan maklumat, bukan suruh undi pembangkang, tapi bagi tahu pengundi untuk demand hak mereka..&lt;br /&gt;&lt;br /&gt;Ubah sikit cara, dah memang tahu susah nak sampaikan maklumat kerakusan pihak berkuasa, nak cerita pasal rasuah kat orang kampung apa mereka nak peduli, kehidupan mereka tak terasa sangat. so cara lain ialah kempen mereka untuk dapatkan peruntukan&lt;br /&gt;&lt;br /&gt;guna psycho cara lain, keras jgn dilawan dgn keras, serap je..oleh kerana puak2 tu suka sgt buat project segera, so galakkan supaya lebih bnyk project segera, pada masa tu kena ajar pengundi untuk bersifat tamak dengan demand yang lebih2 sikit..pembangkang kena raikan apabila mereka tawarkan sesuatu pada pengundi...hadir press conference bila ada apa-apa project yang dibuat..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4274456804044217515?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4274456804044217515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4274456804044217515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4274456804044217515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4274456804044217515'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2011/02/pengundi-melayu-kurang-ilmu-demand-time.html' title='Pengundi Melayu kurang ilmu demand time pilihanraya'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2497176632185184542</id><published>2010-12-08T14:09:00.003+08:00</published><updated>2010-12-09T11:03:48.384+08:00</updated><title type='text'>Finding object role</title><content type='html'>Salam &lt;br /&gt;&lt;br /&gt;Aku baru je bagi light talk sambil makan tentang kepentingan role dalam team aku, tak tahu la dia org faham ke tak..sebab tak de slide presentation..tak de white board .. yang ada hanyalah lauk pauk :)&lt;br /&gt;&lt;br /&gt;Aku nampak keberkesanan apabila dah setkan dlm minda apabila modelkan design antara element penting ialah mendefina role yang terlibat dalam sesuatu context. Pengalaman yang cukup beharga ialah di fasa kedua consultation project aku.Easy for me to write unit test dan easy untuk patch bugs. Walau dalam agreement aku hanyalah consultant tetapi ntah macam maner aku juga terpaksa menjadi developer apabila, beberapa developer lain dapat offer yang lagi bagus.Dalam fasa kedua approach aku ialah Role menjadi first class citizen.Tiada context jika kita tak berupaya mencari Role.&lt;br /&gt;&lt;br /&gt;Imbasan sejarah. Aku tahu tentang penggunaan/kepentingan role dahulu sebelum Melaka diiktiraf sebagai negeri Maju iaitu sebelum 20/10/2010 jam 2010. Pada zaman tu Melaka belum ada lagi Eye on Melaka (Skrg nie dah bangkrap dan kena saman), aku pun masa tu programmer biasa naik motosikal 110cc je. Bila aku diperkenalkan dengan buku Java Color Modeling oleh Mr Hamdi &lt;- bukan lagenda kung fu tapi rasa boleh berkungfu hujah le kot :)&lt;br /&gt;&lt;br /&gt;Baca first time satu hapah pun aku tak faham..macam baca buka language makhluk asing. So bila benda yang macam nie kena cari penterjemahnya, so aku cari balik yang empunya buku tu Mr Hamdi, so tanya lah sikit lebih kurang sebab nak tanya lebih-lebih aku pun tak tahu nak tanya apa, so kebanyakkan peristiwa berlaku (moment-interval) dalam forum je. Aku join dalam forum color modeling, cuba beberapa model dan minta dia orang comment model aku.. nie 5/6 thn yang lepas, selepas beberapa lama mengodek-godel pasal color modeling dan ada kefahaman sedikit datang pula ajaran baru Domain Driven Design, aku tak ingat macam maner aku leh tahu pasal ajaran nie, so masa nie taraf dah naik sikit so ada kelebihan duit boleh le beli buku DDD.&lt;br /&gt;&lt;br /&gt;Setiap kali berubah ajaran, aku akan cuba sesuaikan ajaran lama dengan ajaran baru, dimana ada kelemahan yang dapat ditampung oleh ajaran baru dan fokuskan juga dimana kekuatan ajaran tersebut.So selama lebih kurang 4-5 thn nie bnyk teknik aku gabungkan dimana asas untuk modelkan domain dtg dari color modeling dicantikkan bentuknya dengan DDD.&lt;br /&gt;&lt;br /&gt;Tapi masa tu aku masih lagi kurang tumpukan Role sebaliknya Moment-Interval menjadi pilihan. Setelah jatuh dan bangun hasilkan beberapa project yang berscala sederhana ke besar aku dapati key dalam membina domain yang flexible ada di role dan ini terjadi apabila bertemu dengan ajaran DCI.&lt;br /&gt;&lt;br /&gt;Role dalam DCI berbeza dengan role dalam color modeling, Role name dia kemungkinan adalah sama cuma perbezaan nya role dalam DCI fully behaviour sahaja dan stateless manakala dalam color modeling role kemungkinan persisted dan bukan stateless.&lt;br /&gt;&lt;br /&gt;Aku diberi satu context untuk change status dari satu state ke state yang lain. Pada dasarnya aku boleh define lagi context tu.. as generic context atau concrete context. Kalau generic context ianya seperti menukar sesuatu state dari satu status ke status yang lain, dan jika concrete context ialah menukar status application form dari satu status ke status yang lain. Ada different context - context tersebut.&lt;br /&gt;&lt;br /&gt;Generic Context&lt;br /&gt;&lt;br /&gt;context ChangeStatus&lt;br /&gt;{&lt;br /&gt;    void Bind(I&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Thing-Role&lt;br /&gt;role IStatusChangeAble : PlayedBy&lt;ApplicationForm&gt;, PlayedBy&lt;RegistrationForm&gt;&lt;br /&gt;{&lt;br /&gt;   void ChangeStatus(self,fromStatus,toStatus);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Party-Role&lt;br /&gt;role IChangeStatus : PlayedBy&lt;Admission&gt;, PlayedBy&lt;AdmissionGroup&gt;&lt;br /&gt;{&lt;br /&gt;   void ChangeStatus(self,statusChangeAble);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Buat masa nie, nie je lah dulu, ada masa insyAllah aku sambung. Saper nak comment dipersilakan&lt;br /&gt;&lt;br /&gt;# contoh code dalam pastie.org&lt;br /&gt;&lt;br /&gt;http://www.pastie.org/1358380&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2497176632185184542?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2497176632185184542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2497176632185184542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2497176632185184542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2497176632185184542'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/12/finding-object-role.html' title='Finding object role'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1996182057543118900</id><published>2010-12-08T11:40:00.003+08:00</published><updated>2010-12-08T12:10:17.283+08:00</updated><title type='text'>Susahnya nak menulis</title><content type='html'>Salam&lt;br /&gt;&lt;br /&gt;Ini adalah nota developer yang tidak boleh digunakan di mana-mana mahkamah di Malaysia.&lt;br /&gt;&lt;br /&gt;Kenkadang bila anda menulis anda akan dapat lebih kefahaman, kerana menulis artikel/nota tentang pengalaman anda didalam menyelesaikan sesuatu masalah yang teknikal cukup payah. Pertama bahasa yang digunakan kalau boleh orang lain pun boleh faham, dan kedua penerangan pun begitu juga. Jadi ambil masa nak merealisasikan apa yang ada dlm kepala otak untuk diterjemahkan kepada susunan ayat yang santai. Dan ada ketika pada pertengahan tulisan anda akan dapati apa yang ada faham tu sebenarnya tak tepat. Adakala apa yang anda faham itu betul , tetapi tak tepat bila disampaikan dan adakala awal-awal lagi apa yang anda fahami tu tak betul dan for sure bila sampaikan tak betul juga hujahnya. Aku rasa ini berlaku bukan terhad pada bidang teknikal, pada mana-mana bidang pun mcm tu lebih2 lagi bidang politik hahaha.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1996182057543118900?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1996182057543118900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1996182057543118900' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1996182057543118900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1996182057543118900'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/12/susahnya-nak-menulis.html' title='Susahnya nak menulis'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5763901110566986733</id><published>2010-11-01T12:05:00.003+08:00</published><updated>2010-11-30T14:33:22.346+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color Modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='Domain Driven Design'/><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><category scheme='http://www.blogger.com/atom/ns#' term='DCI'/><title type='text'>Kenapa perlu elakkan Anemic Domain Model</title><content type='html'>Salam&lt;br /&gt;&lt;br /&gt;Aku sebelum ini percaya Anemic Domain Model tidak bagus jika ada dalam sesuatu domain model design/code dan aku masih lagi percaya cuma kini terdapat sedikit perbezaan dengan apa yang aku buat dalam sotware project terbaru. Ianya berkisar kepada "What System DOES" dan "What system IS". So anemic domain model nie hampir definasi apa yang dikenali "What system IS". Daripada Martin Fowler, symptom Anemic Domain Model ialah&lt;br /&gt;&lt;br /&gt;"The basic symptom of an Anemic Domain Model is that at first blush it looks like the real thing. There are objects, many named after the nouns in the domain space, and these objects are connected with the rich relationships and structure that true domain models have. The catch comes when you look at the behavior, and you realize that there is hardly any behavior on these objects, making them little more than bags of getters and setters. Indeed often these models come with design rules that say that you are not to put any domain logic in the the domain objects. Instead there are a set of service objects which capture all the domain logic. These services live on top of the domain model and use the domain model for data".&lt;br /&gt;&lt;br /&gt;Aku semakin slow dalam coding dan semakin slow juga nak faham code, so kalau code yang terlalu banyak tempat business algorithm dimana aku kena refer pada object A dan kemudian pergi ke object B, menjadikan aku kurang efficient so tak 1Malaysia lah cam nie. 1Malaysia pencapaian diutama so begitu jugalah halnya dalam code, code yang senang dibaca dan efficient sangat2 diperlukan, tapi ini semua abstract. Mungkin senang bagi developer Najib (bukan nama sebenar) tidak mudah untuk developer bernama Anwar (pun bukan nama sebenar). Cuma kita boleh ambil tahap pertengahan dimana indicator yang dirasakan setiap developer tu boleh memahami at least 60%-70% code yang awal apabila diberi code untuk dibaca.&lt;br /&gt;&lt;br /&gt;So aku sudah pun bermula dengan pecahkan object2 aku kepada 2 bahagian. Basic object ialah ada attribute dan ada behaviour. So sekarang object2 aku buat dah seakan kembali menjadi anemic domain model percayalah. Cuma perbezaan dengan symptom anemic domain model sebelum ini ialah object attribute dan behavior tidak akan bersatu dan sebaliknya object lain dikenali sebagai "services" yang akan memainkan peranan menGALAS tanggungjawab untuk melakukan perbuatan baik dan buruk (method/behaviour object ada buruk dan baik gak). So yang macam nie memang aku bangkang. Aku tak boleh terima sesorang yang ada maklumat tetapi yang akan buat kerja orang lain berdasarkan maklumat tersebut. Jadi apa yang aku perlukan ialah di masa design code aku dipecahkan tetapi pada masa runtime atau pada masa diperlukan aku boleh dapat behavior2 tersebut. Itulah bezanya "runtime". &lt;br /&gt;&lt;br /&gt;So aku boleh reuse behavior tu kepada mana-mana object yang perlu. Ambil contoh mudah&lt;br /&gt;&lt;br /&gt;Manusia (Person) ada Nama Rasmi dan Nama panggilan, so aku ada satu satu behaviour yang cantumkan nama rasmi dan nama panggilan untuk return string. Jadi behaviour tu aku boleh pakai re-use kembali pada mana-mana object yang mempunyai structure contract yang sama. Orang yang biasa dgn OOP maybe dah terbayang untuk membuat satu interface dan ada class yang implement tapi bagi aku yang macam nie susah. Aku inginkan cara yang lebih mudah dan fluent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Orang&lt;br /&gt;{&lt;br /&gt;   string Nama;&lt;br /&gt;   string Panggilan;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Kereta &lt;br /&gt;{&lt;br /&gt;   string Name&lt;br /&gt;   string Code&lt;br /&gt;   string Panggilan;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Maybe ada suggestion untuk buat interface dan setiap object tu implement interface, tapi bagi aku cara nie panjang macam code kat bawah ni.&lt;br /&gt;&lt;br /&gt;interface Cantum&lt;br /&gt;{&lt;br /&gt;  string CantumNamaPanggilan(string name,string panggilan);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Orang :Cantum&lt;br /&gt;{&lt;br /&gt;   string CantumNamaPanggilan(string name,string panggilan)&lt;br /&gt;  {&lt;br /&gt;    ///&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Kereta : Cantum&lt;br /&gt;{&lt;br /&gt;   string CantumNamaPanggilan(string name,string panggilan)&lt;br /&gt;  {&lt;br /&gt;    ///&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Dan mungkin ada yang suruh letak implementation dalam abstract class, cuma bagi aku limitation class hanya boleh extend pada satu abstract class, kalau ada bnyk behavior takan nak letak semua dalam abstract class tu. Ada cara lain tak yang aku tak nampak sebelum aku bagi cara yang aku cuba nak buat (belum diuji tahan peluru dan api :)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5763901110566986733?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5763901110566986733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5763901110566986733' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5763901110566986733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5763901110566986733'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/11/kenapa-perlu-elakkan-anemic-domain.html' title='Kenapa perlu elakkan Anemic Domain Model'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8482233641455456776</id><published>2010-10-31T23:49:00.004+08:00</published><updated>2010-11-01T00:22:16.103+08:00</updated><title type='text'>Domain design, reuse and readable code</title><content type='html'>Aku plan nak invite rakan-rakan developer/solution/programmer etc yang berminat untuk bincang berkaitan domain design, re-useable dan readable code. Harap dapat sambutan dari pelbagai camp sama ada .Net C#, Java, Groovy, Python, Ruby, PHP.&lt;br /&gt;&lt;br /&gt;Ok aku terangkan apa challenge project nie. Bina satu console application berdasarkan problem statement ini.&lt;br /&gt;&lt;br /&gt;"Bina aplikasi yang dapat manage sesuatu Project dimana setiap project tersebut boleh mempunyai banyak task dan completion date/time task tersebut bergantung pada task-task yang yang ada dibawahnya. Task boleh mempunyai banyak task yang lain (child) atau juga dikenali sebagai aktivity. Compute the earliest start of every &lt;br /&gt;activity given the start of the project. Setiap task ada estimation time"&lt;br /&gt;&lt;br /&gt;Criterianya ialah &lt;br /&gt;1. design yang flexible yang boleh digunakan, kemungkinan untuk any application yang hampir serupa processnya.&lt;br /&gt;&lt;br /&gt;2. LOC yang pendek, code mudah dibaca, jika boleh system analyst/tester boleh semak pada first level tanpa perlu tulis test code.&lt;br /&gt;&lt;br /&gt;3. Code yang boleh reuse&lt;br /&gt;&lt;br /&gt;Ada sesiapa yang ingin mencuba?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8482233641455456776?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8482233641455456776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8482233641455456776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8482233641455456776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8482233641455456776'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/10/domain-design-reuse-and-readable-code.html' title='Domain design, reuse and readable code'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7147829270587834343</id><published>2010-09-30T08:48:00.004+08:00</published><updated>2010-09-30T09:11:44.233+08:00</updated><title type='text'>Idea kelebihan/bakat atau kesungguhan</title><content type='html'>Kebelakangan ini aku sering terfikir mencari sesuatu "benda" yang aku boleh buat berdasarkan kemahiran ilmu teknologi yang diberikan Allah pada aku. Tapi masih buntu. So disekeliling kita hari ini penuh dengan teknologi sama ada datang dari barat atau datang dari kelompok masyarakat kita. Penghasilan teknologi pun datang dari secebis idea yang dikembangkan dan kemudian menjadi realiti .Aku pernah terdengar yang kebanyakkan manusia hanya mengguna 10% dari kebolehan otak/akal yang Allah bagi pada kita. Lagi 90% masih tersimpan di cell-cell otak yang belum dirangsang.&lt;br /&gt;&lt;br /&gt;Kalau kita dapat menggunakan atau meningkatkan penggunaan kelebihan tersebut kepada 20%, banyak idea yang kreatif boleh dibangunkan. Aku juga tak pasti adakah faktor bahasa mempengaruhi tahap idea seseorang? Orang yang kreatif yang banyak idea, otak kanan banyak memainkan peranan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7147829270587834343?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7147829270587834343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7147829270587834343' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7147829270587834343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7147829270587834343'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/09/idea-kelebihanbakat-atau-kesungguhan.html' title='Idea kelebihan/bakat atau kesungguhan'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-447125471049150627</id><published>2010-09-29T08:43:00.003+08:00</published><updated>2010-09-29T10:16:29.504+08:00</updated><title type='text'>Versi mudah mendapatkan NHibernate session</title><content type='html'>&lt;div&gt;Aku boleh dikategori sebagai developer yang percaya pada code mesti nampak mudah dari penglihatan dan mudah untuk ditulis dan kemudian mudah untuk difahami. Kenkadang aku terfikir kenapa perlu membina sesuatu yang komplex sekadar untuk nampak cantik dan tujuan tersebut boleh dicapai dengan cara lain walau tak se "stylish". Walau pun fungsi tersebut dibina didalam ertikata "framework", tetapi jika over engineered mengkibatkan framework tersebut susah untuk di extends untuk fungsi-fungsi yang lain. Aku ada rancangan nak tulis dalam entri yang lain berkaitan pendahaluan perenggan ini , kemungkinan bertajuk "Business logic algorithm tidak sepatutnya berselerak dimerata tempat dalam solution project anda", agak penjang rasanya tajuk tersebut. Ok anyway, kesinambungan dari itu aku nak cerita sedikit pasal pengawalan session didalam NHibernate dalam versi yang mudah.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;NHibernate session amat penting apabila kita hendak melakukan sesuatu aktiviti berkaitan data dan objek.Objek dan data adalah dua benda yang berlainan walau nampak seakan sama. Boleh google untuk tahu perbezaan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Untuk demo, aku akan tulis code yang akan digunakan didalam projek ASP.Net MVC. Ada 2 library penting yang diperlukan yang pertama library pakej NHibernate dan yang kedua library pakej FluentNHibernate. Tiada IoC dalam contoh ini, ini adalah bertujuan menunjukkan tanpa IoC, tujuan untuk mendapatkan NHibernate session tetap boleh dilakukan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sebaik anda berjaya create ASP.Net MVC Web solution, dan andaian bahawa semua library pakej tadi dah berjaya dimasukkan didalam solution tersebut, maka perkara yang pertama ialah dengan mengedit Global.asax.cs dan code akhirnya ialah seperti ini&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="'http://pastie.org/1187879.js'"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhatikan pada line 21, aku declare ISessionFactory dan kemudian pada line 42 aku panggil method CreateSessionFactory(), code ini berada didalam method Application_Start, dan untuk pengetahuan Application_Start ini akan hanya execute sekali ianya seperti Singleton pattern, ianya hanya akan execute semula jika IIS web server di "restart" dan oleh sebab itu penghasilan SessionFactory sesuai berada didalam method ini.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pada line 68, disini aku menggunakan FluentNHibernate untuk membina SessionFactory, dan pada line 72, kena tulis connection string dan maklumat tersebut di simpan didalam Web.config. Ini untuk memudahkan jika ada sebarang pertukaran, anda hanya perlu tukar di config file dan bukan didalam code. Lihat pula pada line 82, kita perlu setkan session tersebut digunakan dalam web process dan NHibernate ada mekanisma untuk simpan session yang akan digunakan dalam Http protokol.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Selanjutnya pada line 50, method Application_BeginRequest ini pula akan berfungsi hanya setiap kali terdapat page request dan ianya unik untuk setiap request. Dalam ertikata yang lain jika aku request dan pada masa yang sama terdapat sepuluh orang lain yang request aku akan dapat dapat session nhibernate yang berlainan dan unik tetapi SessionFactory yang sama. Pada line 54, kita perlu bind session kepada CurrentSessionContext dan berdasarkan configuration iaitu Web, maka NHibernate akan menggunakan web session mekanisma untuk simpan maklumat session yang telah di "open" maka apabila diperlukan pada component yang lain permintaan session tersebut akan di beri kepada peminta tersebut ialah session yang di simpan didalam web context.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhatikan pula pada line 57, method Application_EndRequest pula bertindak untuk tutup session dan membebaskan memory web context terhadap session seperti yang berlaku padal line 59.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Satu lagi method yang penting ialah GetCurrentSession yang terdapat pada line 45, method ini bertujuan untuk mendapatkan Session terkini yang berada dalam web context. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Penggunaan di Controller&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Aku akan tulis base controller untuk semua controller lain inherits base controller ini.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;script src='http://pastie.org/1187954.js'&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dan anda perlulah mempunyai domain, permulaan ini boleh tulis domain yang simple seperti ini&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="'http://pastie.org/1187934.js'"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Untuk perhatian anda, line 27 untuk code diatas ialah class mapping, sebelum ini mapping dalam Nhibernate boleh dibuat melalui xml mapping dan juga code attribute mapping, tetapi 2 cara ini agak susah dan leceh berbanding dengan cara fluentnhibernate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Code ini pula ialah code StudentController, lihat bagaimana mudah untuk menggunakan NHibernate Session&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="'http://pastie.org/1187939.js'"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So diharap sedikit penerangan dapat membuka minda dan boleh menjadi pengerak untuk anda menggunakan NHibernate untuk project-project yang lain. InsyAllah jika diberi keizinan Allah saya akan lanjutkan lagi demo/contoh penggunaan NHibernate untuk tahap yang lagi advance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-447125471049150627?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/447125471049150627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=447125471049150627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/447125471049150627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/447125471049150627'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/09/versi-mudah-mendapatkan-nhibernate.html' title='Versi mudah mendapatkan NHibernate session'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6037853041481751255</id><published>2010-09-21T08:40:00.002+08:00</published><updated>2010-09-21T09:00:46.474+08:00</updated><title type='text'>UI ke Business Process - 60% project lewat</title><content type='html'>UI masih lagi menjadi masalah utama kalau tidak pada developer lain tapi pada diri aku sendiri. Walau ada pelbagai framework yang dikategorikan sebagai Rapid Applicaton Development, tapi aku masih lagi mengambil masa yang lama untuk membolehkan UI code work dengan back end code dgn lancar.Nie bukan bermaksud UI design tetapi lebih kepada UI funcionality, bagaimana UI kawal state dan sebagainya. Kalau setakat untuk look and feel memang tidak dinafikan banyak UI framework yang lain hasilkan look and feel yang awesome. Itu dari sudut layout dan color. Dari sudut application developer, anda masih lagi perlu menyentuh UI code setidak-tidaknya untuk sesuatu event itu trigger dari tindakan user, seperti click button untuk hantar maklumat ke database. Cuma jika fully plain html form, rasanya kurang sedikit masalah-masalah ini.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kepopularan Ajax pun tidak banyak membantu, kenkadang lebih membebankan dgn ketiadaan IDE yang betul-betul WYSIWYG.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So apabila tiba pada level nak menghubungkan code-code ini ke business logic, pengalaman aku memang akan ada sedikit rintangan.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku tak berapa sure dari camp Ruby atau any Rails followers yang lain seperti grails etc. Masih lagi mencari UI framework yang seperti ASP.Net yang laju dari segi development dan laju dari segi performance loading.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dicussion/pandangan aku dari context enterprise/product bukan pet project suka-suka, but something yang anda boleh jual dan customer boleh terima dari segi penampilan dan juga dari segi core business process.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6037853041481751255?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6037853041481751255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6037853041481751255' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6037853041481751255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6037853041481751255'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/09/ui-ke-business-process-60-project-lewat.html' title='UI ke Business Process - 60% project lewat'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2293361406725230393</id><published>2010-09-20T09:20:00.004+08:00</published><updated>2010-09-20T09:43:12.257+08:00</updated><title type='text'>Update</title><content type='html'>Kebelakangan nie sifat malas nak update web page nie semakin menjadi-jadi, kenkangan kerja dan sebagainya menjadi halangan kuat dan kekurangan idea, maybe otak kanan aku tak digunakan sepenuhnya untuk lebih kreatif.., sudah lebih 2 bulan aku tak menulis dalam blog.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Minggu lepas selepas seminggu cuti hari raya, aku mula bekerja tanpa kawan rapat aku, dimana selama lebih kurang 3 tahun banyak membantu dalam melicinkan proses soft dev di tempat kerja, seorang yang aku respect dari segi knowledge dan juga komitmen. InsyAllah semoga perpindahan ketempat lain lebih bermakna dan keberkatan Allah sentiasa ada bersama.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Walau kerja banyak tapi, masih slow bila nak mula buat soft dev, ntah le..hujung minggu lepas aku plan nak buat something berkaitan programming, tak juga menjadi, aku lebih bnyk browse web site kereta, agaknya minat aku dah kearah bidang kerata.. hahahah, minggu lpeas juga aku hantar kereta elysion aku tukar minyak, fikirkan nak tukar minyak fully synthetic biasa, sekali dah pergi kat After 12 Motorsport, mata dah rambang tgk bnyk sgt acessories kereta, pusing punya pusing..technician kat situ cucuk jarum ..suruh aku tukar minyak engine Mugen, aku pun memang dah ada plan nak tukar minyak, cuma minyak nie mahal sikit. Belakang kedai lagi satu tgk bebrapa technician tgh tune VW Golf GTI, perghh..dia nyer bunyi engine.. mak oii. Fikir punya fikir last last aku setuju tukar minyak engine mugen tu. Then dah beberapa hari pakai, Alhamdulillah terasa lagi lancar bila memecut yang best bila RPM cecah 3.5.. ivtec dia open ...warghh..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Malam tadi, dapat video VW Scirocco dari youtube, nie lagi satu penyakit.. aku dah terpaku depan komputer 2 jam, layan semua video Scirocco TSI Turbo.., bila kau nak start buat programming??????????? :(&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2293361406725230393?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2293361406725230393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2293361406725230393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2293361406725230393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2293361406725230393'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/09/update.html' title='Update'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6552158049497730838</id><published>2010-07-07T11:35:00.002+08:00</published><updated>2010-07-07T11:38:48.671+08:00</updated><title type='text'>DNC &amp; DCI ?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JKWF88m2xLU/TDP2lhVka-I/AAAAAAAAAPA/rZQ_bhHa_Tk/s1600/DCI_DNC.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 339px;" src="http://4.bp.blogspot.com/_JKWF88m2xLU/TDP2lhVka-I/AAAAAAAAAPA/rZQ_bhHa_Tk/s400/DCI_DNC.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5491003495159196642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JKWF88m2xLU/TDP2IcpZvhI/AAAAAAAAAO4/vEwTN6crjmE/s1600/dncbare.gif.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 354px;" src="http://4.bp.blogspot.com/_JKWF88m2xLU/TDP2IcpZvhI/AAAAAAAAAO4/vEwTN6crjmE/s400/dncbare.gif.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5491002995683999250" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JKWF88m2xLU/TDP2IcpZvhI/AAAAAAAAAO4/vEwTN6crjmE/s1600/dncbare.gif.png"&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6552158049497730838?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6552158049497730838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6552158049497730838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6552158049497730838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6552158049497730838'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/07/dnc-dci.html' title='DNC &amp; DCI ?'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JKWF88m2xLU/TDP2lhVka-I/AAAAAAAAAPA/rZQ_bhHa_Tk/s72-c/DCI_DNC.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7889200298299658108</id><published>2010-05-31T02:50:00.002+08:00</published><updated>2010-05-31T03:41:41.937+08:00</updated><title type='text'>OCP dan Double Dispatch</title><content type='html'>Salam ILuvIslam&lt;br /&gt;&lt;br /&gt;Salah satu kerja yang aku kena buat ialah mencantikkan code. Aku nak shortcut terus kepada point. Code dibawah ada 2 version satu code yang tidak menggunakan OCP dan Double Dispatch, manakala yang satu lagi menggunakan cara yang aku mention.&lt;br /&gt;&lt;br /&gt;Sebelum tu aku malas sikit nak beri penerangan OCP (Open Close Principle) dan Double Dispatch boleh search je.. InsyAllah banyak penerangan yang bagus. Cuma akau nak terangkan ialah jika aku tak guna cara OCP dan double dispatch code aku akan menjadi bloated macam ikan kembung.&lt;br /&gt;&lt;br /&gt;Kali nie aku kena record transaction sama ada transaction tersebut ialah transaction cash atau cheque atau balance transfer atau atau atau. So atau atau atau lagi tu bermaksud ada kemungkinan lain penambahan jenis transaction. Setakat sebelum 1Malaysia bankrap ada 3 atau 4 transaction yang perlu di rekodkan.&lt;br /&gt;&lt;br /&gt;Oleh kerana ada pelbagai transaction, maka user kata mereka hendak tahu total setiap amount apabila transaction itu berlaku di branch dan juga total amount harian untuk setiap transaction. So dengan yakin dan bergaya aku tulis code macam kat bawah nie.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/984682.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/984688.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Masalah disedari apabila user bagi tahu 1Malaysia dah bankrap, so ada penambahan transaction yang perlu direkodkan, seperti transaction LPO etc.&lt;br /&gt;&lt;br /&gt;So jika dilihat pada code aku kena tambah AddReloadLPO(decimal amount). Ini bermakna aku kena buka file code yang diatas dan tambah, begitu juga pada code class BranchDailyReload aku kena tambah if else pada line 39 AddBranchDailyReload(...).&lt;br /&gt;&lt;br /&gt;So macam maner aku tak nak ada penambahan code apada existing class dan juga penambahan if else lagi. Caranya ialah dengan menggunakan OCP dan double dispatch.&lt;br /&gt;&lt;br /&gt;Aku refactor class jadi macam nie&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/984704.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Then aku kena tambah interface IReloadOCP dan class yang akan implement, sebagai contoh ReloadCash&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/984708.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Manakala class BranchDailyReload akan berubah menjadi simple macam nie, tiada lagi penggunaan if else, walaupun contoh BranchDailyReload tak follow OCP tetapi penggunaan function lebih explicit. Tiada masalah untuk refactor BranchDailyReload untuk buat fully OCP&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/984730.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Sesiapa ada lagi idea yang lagi okay, silakan.. nak kena submit kat lecturer :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7889200298299658108?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7889200298299658108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7889200298299658108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7889200298299658108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7889200298299658108'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/05/ocp-dan-double-dispatch.html' title='OCP dan Double Dispatch'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1453626711991466603</id><published>2010-05-27T11:47:00.003+08:00</published><updated>2010-05-27T12:02:57.187+08:00</updated><title type='text'>Data,Context and Interaction</title><content type='html'>Salam 1Malaysiaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;br /&gt;&lt;br /&gt;Minggu lepas semasa membaca mailing list Domain Driven Design, salah seorang ahli group DDD (http://www.jroller.com/rickard/), bercerita serba sedikit tentang DCI . Aku tertarik dengan penerangan beliau dan cuba explore lebih detail, tetapi masih lagi kabur. So aku decide untuk buat code nak compare cara dalam DCI dengan cara yang aku biasa buat.&lt;br /&gt;&lt;br /&gt;&lt;script src="'http://pastie.org/979349.js'"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1453626711991466603?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1453626711991466603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1453626711991466603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1453626711991466603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1453626711991466603'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/05/datacontext-and-interaction.html' title='Data,Context and Interaction'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6277276427965601082</id><published>2010-03-30T09:07:00.003+08:00</published><updated>2010-03-30T09:28:19.881+08:00</updated><title type='text'>Pilihan untuk kemahiran</title><content type='html'>&lt;div&gt;Pemilihan language,tools dan methodology/process  sama seperti cara untuk buat pilihan pembelian hartanah (rumah/bangunan/tanah), jika pilihan anda tepat dan kena pada masa, insyAllah berbaloi-baloi.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pemilihan dalam ertikata untuk anda betul-betul mahirkan diri dengan sesuatu yang dipilih, tetapi anda digalkkan untuk mengambil tahu secara asas saingan-saingan yang lain. Anda tidak pelulah terlalu ekstrim dengan sesuatu yang dipilih, tetapi perlulah mempunyai sikap terbuka dalam menerima kritikan terhadap sesuatu yang menjadi pilihan dalam kehidupan software developer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Memilih untuk mahir sesuatu perkara adalah lebih bagus dari tahu semua benda tapi tiada kemahiran. Memang anda digalakkan untuk sentiasa mempunyai sikap ingin tahu, tapi dari segala keperluan dalam software developement pilihlah 1,2 atau 3 perkara yang anda betul2 mahir - timur barat utara dan selatan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Untuk aku pula pada masa ini aku invest(masa dan tenaga) untuk mendapat skill dalam 3 perkara. Pemilihan aku ialah mahirkan Domain Driven Design, fahami NHibernate/FluentNhibernate dan juga C# .Net&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So bila aku buat target apa yang menjadi keutamaan aku dalam software development aku akan beri tumpuan kepada ketiga-tiga perkara diatas. Jika orang bertanya aku tentang T-SQL aku sekadar boleh beri pendapat tetapi bukan sebagai best practices begitu juga bila ditanya tentang testing framework/approach aku juga boleh bercerita permukaan tetapi tidak mendalam.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Maka pada aku keperluan untuk setkan target dan keutamaan apabila memilih pelbagai technology adalah sama seperti cara apabila hendak buat pembelian hartanah. Buat survey dan research supaya pilihan anda tepat.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6277276427965601082?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6277276427965601082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6277276427965601082' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6277276427965601082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6277276427965601082'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/pilihan-untuk-kemahiran.html' title='Pilihan untuk kemahiran'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5203413678001365072</id><published>2010-03-25T11:58:00.004+08:00</published><updated>2010-03-26T09:51:21.166+08:00</updated><title type='text'>Domain challange</title><content type='html'>Pagi nie aku dapat artikel update dari Jimmy Bogard tentang&lt;br /&gt;&lt;a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/03/24/strengthening-your-domain-encapsulating-operations.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+LosTechies+(LosTechies)&amp;amp;utm_content=Google+Reader&amp;amp;CommentPosted=true#commentmessage"&gt;Strengthening your domain: Encapsulating operations&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aku dah baca dan beri comment, guna nick amir (hentam ajelah). Memang menarik cara dia describe problem and cara dia solve dengan cara DDD. Aku cuma tak berapa setuju beberapa domain behavior yang dia design..so aku bagi suggestion aku.. Solution yang dia I bagseperti di bawah.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Customer = new Customer&lt;br /&gt;var fee = customer.ChargeFee(100m);&lt;br /&gt;fee.Amount.ShouldEqual(100m);&lt;br /&gt;customer.Fees.ShouldContain(fee);&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Solution aku lak dengan ialah method ChargeFee tu naming dia macam tak kena.&lt;br /&gt;Aku suggest buat macam nie:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Customer customer = new Customer();&lt;br /&gt;ShopOwner s = new ShopOwner();&lt;br /&gt;s.ChargeFeeTo(customer).Amount(100m);&lt;br /&gt;So bila customer tu nak buat bayar&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;customer.MadePayment(50m);&lt;br /&gt;Dia ada komen balik kata ChargeFeeTo(customer) tidak berapa kena sebab tanpa panggil method  Amount(), code boleh compile dan tiada error. Aku setuju konsep explicit design, insyAllah aku akan  ulas explicit design (keberkesanan).&lt;br /&gt;Aku suggest supaya amount tu diletakkan sebagai paramater seperti&lt;br /&gt;&lt;br /&gt;&lt;i&gt;s.ChargeFeeTo(customer,100m);  &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Selain dari itu untuk  domain yang lebih flexible kita boleh bina domain CustomerFeeCharges (moment interval) so code boleh dibina macam ini&lt;br /&gt;&lt;br /&gt;&lt;i&gt;s.ChargeForTo(new CustomerFeeCharges(customer,amount));&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5203413678001365072?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5203413678001365072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5203413678001365072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5203413678001365072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5203413678001365072'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/domain-challange.html' title='Domain challange'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3644130422809089286</id><published>2010-03-24T17:02:00.002+08:00</published><updated>2010-03-24T17:06:25.289+08:00</updated><title type='text'>First screencast bisu</title><content type='html'>Aku baru je habis buat simple screencast bisu.. hehe..tak de suara tentang basic setup NHibernate &amp;amp; FluentNHibernate. Ini experiment aku , insyAllah kalau ok ada sambungan. Length dia pendek sahaja.. aku cuba buat sesimple, padat dan sendat...&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;&lt;object id="stUEpUR0xPRFtZSVleWlheUVVW" width="425" height="344" type="application/x-shockwave-flash" data="http://www.screentoaster.com/swf/STPlayer.swf" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0"&gt;&lt;param name="movie" value="http://www.screentoaster.com/swf/STPlayer.swf"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;param name="flashvars" value="video=stUEpUR0xPRFtZSVleWlheUVVW"&gt;&lt;/object&gt;&lt;div style="width: 425px; text-align: right;"&gt;&lt;a href="http://www.screentoaster.com/"&gt;Free online screen recorder&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3644130422809089286?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3644130422809089286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3644130422809089286' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3644130422809089286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3644130422809089286'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/first-screencast-bisu.html' title='First screencast bisu'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5672222754684018057</id><published>2010-03-18T16:02:00.003+08:00</published><updated>2010-03-18T16:34:06.093+08:00</updated><title type='text'>Fluent Ubiquitous Domain</title><content type='html'>Aku tak de apa nak cerita banyak cuma nak bagi satu image untuk difikirkan dan dibincangkan , kalau ada yang nak berbincang silakan, kalau tak de anggap lah image itu contribution untuk 1Malaysia hehehe. Untuk design domain model selain dari skill analytics dan experiance, supporting cara untuk menjadikan domain itu lebih valueable ialah apabila anda boleh buat ayat dari domain model tersebut. Normal buka domain model asas nya ialah identify noun sebagai class, verb sebagai operation dan adjective sebagai attribute/property.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku tak sure sangatlah part tu secara detail, boleh search kat pakcik google nyer kedai. Cuma apa aku nak tekankan penggunaan nama class yang menggambarkan scenario. Sebab kalau ambil noun sahaja untuk class kenkadang tak berapa nak jelas betulke?... Aitt aku tanya balik soklan...&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JKWF88m2xLU/S6HlMOebvlI/AAAAAAAAAOc/UMqrDyKcFf8/s1600-h/domainstyle2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 140px;" src="http://3.bp.blogspot.com/_JKWF88m2xLU/S6HlMOebvlI/AAAAAAAAAOc/UMqrDyKcFf8/s400/domainstyle2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5449889022301945426" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5672222754684018057?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5672222754684018057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5672222754684018057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5672222754684018057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5672222754684018057'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/fluent-ubiquitous-domain.html' title='Fluent Ubiquitous Domain'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JKWF88m2xLU/S6HlMOebvlI/AAAAAAAAAOc/UMqrDyKcFf8/s72-c/domainstyle2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1789314650930606430</id><published>2010-03-17T13:58:00.002+08:00</published><updated>2010-03-17T14:10:55.587+08:00</updated><title type='text'>Adakah  perlu Query dikongsi??</title><content type='html'>Ni adalah persoalan yang timbul bila aku buat coding (soft dev). Aku tak jawapan yang concrete tapi buat masa nie aku  memilih query tidak perlu di kongsi, setiap client yang ingin data mempunyai query set yang masing-masing. Jika terdapat perubahan pada domain tidaklah terlalu sakit untuk ubah dari kongsi query tetapi bila requirement query untuk process A lari sikit dari requirement untuk process B, aku dapat rasakan lagi susah nak handle. Mungkin sebab aku ambil pendekatan query sepatutnya very lightweight process yang tanpa melibatkan terlalu banyak validation etc. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1789314650930606430?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1789314650930606430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1789314650930606430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1789314650930606430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1789314650930606430'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/adakah-perlu-query-dikongsi.html' title='Adakah  perlu Query dikongsi??'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1249086183818161846</id><published>2010-03-16T11:28:00.002+08:00</published><updated>2010-03-16T11:38:43.143+08:00</updated><title type='text'>Google public profile</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;Ini ialah akunyer link ke public google profile  - &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:Arial, sans-serif;"&gt;&lt;span class="gwt-InlineLabel username-row-label"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.google.com/profiles/&lt;/span&gt;&lt;/span&gt;&lt;span class="gwt-InlineLabel username-username" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;irwanazam , &lt;/span&gt;&lt;/span&gt;&lt;span class="gwt-InlineLabel username-username"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;artikel dalam &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;a href="http://ryzam.blogspot.com/"&gt;I Look, I See&lt;/a&gt; , juga akan dishare dalam Buzz . So ada n3 yang discussion dibuat disitu.&lt;/span&gt;&lt;/span&gt;&lt;a href="http://ryzam.blogspot.com/"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://ryzam.blogspot.com/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1249086183818161846?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1249086183818161846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1249086183818161846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1249086183818161846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1249086183818161846'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/google-public-profile.html' title='Google public profile'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6949033694163897007</id><published>2010-03-10T14:13:00.011+08:00</published><updated>2010-03-10T14:47:48.251+08:00</updated><title type='text'>Macam mana</title><content type='html'>Aku tak ade idea nak tulis apa, ada masa sikit sebelum nak sambung buat kerja, aku cuba bawa satu normal scenario dalam software development design.  Contoh aku diminta develop online POS (Point Of Sale) untuk pasaraya besar , jadi boleh bayangkan per day transaction memang dijangkakan banyak. Dan normal domain model design ialah seperti ini.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/S5c9PtnZf5I/AAAAAAAAAOE/8jgk_gTIiz0/s1600-h/domaincqrs.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 40px;" src="http://1.bp.blogspot.com/_JKWF88m2xLU/S5c9PtnZf5I/AAAAAAAAAOE/8jgk_gTIiz0/s400/domaincqrs.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5446889614480080786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok untuk create new order tiada masalah, kita hanya point order as agreegateroot dan yang lain semua dihandle ORM untuk persistence. So apabila sudah selesai, requirement lain ialah hendak list order record per day or per hour etc, seperti tertera dibwah nie. Ambil contoh customer nie berdaftar menjadi member (macam Jusco members card,Giant members card)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/S5c-IOyvW6I/AAAAAAAAAOM/pxepXy962x8/s1600-h/mockup.png"&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 400px; height: 124px; " src="http://1.bp.blogspot.com/_JKWF88m2xLU/S5c-IOyvW6I/AAAAAAAAAOM/pxepXy962x8/s400/mockup.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5446890585458695074" /&gt;&lt;/a&gt;&lt;br /&gt;So macam mana?,  Aku perlu query ke table order join ke customer join dengan orderitem join dengan product dan join dengan price dan result aku akan dapat list macam kat atas tu.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adakah cara macam tu efficient?.. mungkinlah kot sebab selama nie aku buat cam tu... Habis tu tak de cara lain?.. ntah le ada agaknya tapi nie yang biasa orang buat..so aku follow je&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kalau boleh buat macam nie&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JKWF88m2xLU/S5c_4Aik5xI/AAAAAAAAAOU/gTEiGpl9oPE/s1600-h/cqrs.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 183px;" src="http://2.bp.blogspot.com/_JKWF88m2xLU/S5c_4Aik5xI/AAAAAAAAAOU/gTEiGpl9oPE/s400/cqrs.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5446892505778153234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tak banyak kerje ke nak buat lagi satu domain view?.. habis tu kalau requirement berubah dia nak lagi satu column kat view tu macam maner?? kalau dia update order record tadi macam maner lak record kat view tadi...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Siapa boleh tolong bagi pendapat....&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6949033694163897007?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6949033694163897007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6949033694163897007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6949033694163897007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6949033694163897007'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/macam-mana.html' title='Macam mana'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JKWF88m2xLU/S5c9PtnZf5I/AAAAAAAAAOE/8jgk_gTIiz0/s72-c/domaincqrs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6889932012884229099</id><published>2010-03-10T00:25:00.003+08:00</published><updated>2010-03-10T01:14:12.259+08:00</updated><title type='text'>Technical Screencast</title><content type='html'>Salam,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku terfikir adakah mendapat sambutan jika terdapat screencast khusus yang dibina untuk market Malaysia, aku bukan tak berminat cerita pasal global, atau pun pasaran luar cuma aku lebih nak fokuskan khusus pada developer yang ada di Malaysia dimana presenter juga adalah Malaysian haaa tu barulah 1Malaysia. Kalau diperhatikan memang terdapat beberapa site yang provide screencast untuk software developement sama ada free atau berbayar. Kandungan screencast yang di siarkan juga memang menarik. Plan aku screencast yang aku nak buat nie berbayar, kerana ianya melibatkan masa dan juga tenaga. Kalau ada satu portal screencast dimana developer boleh provide kemahiran masing-masing dan dapat income dari situ sure menarik. Bagi aku boleh dimulakan dengan kategory developement dan selepas tu kembangkan pada administration linux, windows, unix etc..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cerita sikit-sikit je lah dulu....dah confirm betul2 baru boleh cerita lanjut..&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6889932012884229099?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6889932012884229099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6889932012884229099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6889932012884229099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6889932012884229099'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/03/technical-screencast.html' title='Technical Screencast'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3662030372462653544</id><published>2010-02-21T14:16:00.002+08:00</published><updated>2010-02-22T10:22:47.126+08:00</updated><title type='text'>Begini rupa Application Service aku dalam latest project</title><content type='html'>&lt;div&gt;Selepas baca tentang CQRS (Command Query Responsibility Segregation) pertengahan tahun lalu, aku mula berminat tentang apa sebenarnya CQRS. DDD developers banyak berbincang berkaitan CQRS hinggakan core pattern macam repository,services sudah berkurangan diperbincangankan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kalau dahulu ApplicationService aku rupanya macam nie:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void MakeDocketApproved(DocketId)&lt;/div&gt;&lt;div&gt;Docket GetDocket(DocketId)&lt;/div&gt;&lt;div&gt;DocketDto GetDocketWithCode(Code)&lt;/div&gt;&lt;div&gt;DocketDto GetApprovedDockets()&lt;/div&gt;&lt;div&gt;void ChangeDocketLocation(DocketId, NewLocation)&lt;/div&gt;&lt;div&gt;void CreateDocket(Docket)&lt;/div&gt;&lt;div&gt;void EditDocketDetails(DocketDetails)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tetapi sekarang apabila aku guna CQRS ApplicationService aku sekarang dipecahkan kepada 2 jenis service satu Command (write) dan satu lagi Query (read). CQRS secara umum adalah Architecture decision implementation, bagaimana kita mendesignkan infrastructure. DDD masih lagi penting dari segi kepentingan domain model sebagai tempat masalah di prosess. Jadi sesuatu software project boleh sahaja hanya menggunakan DDD tanpa CQRS dan CQRS juga boleh digunakan tanpa DDD.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apabila aku apply CQRS pada ApplicationService maka jadi seperti ini:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;DocketCommandService&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;void MakeDocketApproved(DocketApprovedCmd)&lt;/div&gt;&lt;div&gt;void ChangeDocketLocation(NewDocketLocationCmd)&lt;/div&gt;&lt;div&gt;void CreateDocket(NewDocketCmd)&lt;/div&gt;&lt;div&gt;void EditDocketDetails(DocketDetailsCmd)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;DocketQueryService&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Docket GetDocket(CustomerId)&lt;/div&gt;&lt;div&gt;DocketDto GetDocketWithCode(Code)&lt;/div&gt;&lt;div&gt;DocketDto GetApprovedDockets()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Jadi secara umum ini adalah CQRS dimana Command dan Query responsibility diasingkan dan kelebihan service command boleh diimplement dengan cara lain dan query service boleh diimplement dengan cara yang lebih simple. Command mungkin akan melalui kesemua layer yang biasa di buat seperti controller-&gt;app service-&gt; domain -&gt; dataaccess-&gt;DB. Dan sebolehnya biar controller,app service seminimun kerja yang dilakukan dan kerja tersebut perlulah fokus kepada apa yang perlu sahaja dilakukan. Domain perlu didesign semaximum yang boleh untuk cover business logic (Rich Domain) dan elakkan Anemic Domain. Konsep 80% - 20% boleh diguna pakai disini, 80% responsibility perlulah berada di domain manakala lagi 20% di kongsi di layer-layer yang lain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Manakala apabila query boleh sahaja dari controller-&gt;query service -&gt; DB, keep it simple.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3662030372462653544?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3662030372462653544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3662030372462653544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3662030372462653544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3662030372462653544'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/02/begini-rupa-application-service-aku.html' title='Begini rupa Application Service aku dalam latest project'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7937879646603587509</id><published>2010-02-17T11:48:00.002+08:00</published><updated>2010-02-17T12:38:22.818+08:00</updated><title type='text'>Update</title><content type='html'>2 minggu lepas, aku rase jemu dengan senario politik malaysia, sebab tu 2 tulisan aku sebelum ini tak de kena mengena dengan programing dan software development.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Project Mars dah rollout Nationwide hampir 2 minggu dan Alhamdulillah semua berjalan lancar, adalah juga beberapa bugs yang tidak berapa kritikal dijumpai. Cuma masa untuk aku review code dan refactor belum sempat. Aku cuti Chinese New Year tak sentuh komputer langsung, plan balik awal sehari kerumah dari kampung dapatlah juga membersihkan code-code dari anasir2 yang tak diingini tapi tak kesampaian, penat dan rasa malas nak fikir pasal programming selepas 3 hari bercuti kat kampung pun ada. Aku balik kampung awal, kerana makcik sebelah wife meninggal dunia, banyak gak lah urusan kat kampung.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku sekarang banyak meluangkan masa untuk belajar lagi mendalam tentang CQRS, target aku tahun nie supaya dapat implement full CQRS project dalam mana-mana project yang akan datang. Aku dah cuba dengan sikit2 konsep CQRS  dan nampak beberapa kelebihan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7937879646603587509?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7937879646603587509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7937879646603587509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7937879646603587509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7937879646603587509'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/02/update.html' title='Update'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7268272827888816071</id><published>2010-02-09T12:16:00.003+08:00</published><updated>2010-02-09T12:27:05.382+08:00</updated><title type='text'>Apabila Si Bodoh Memperbodahkan Juak-juak yang memang bodoh</title><content type='html'>Apabila yang ada kuasa itu otak nyer serupa keldai, jadilah pengikut pengikutnya seperti taik keldai.... dan yang memerhatikan kebodohan mereka juga akan terkena tempias kebodohan kerana pergi perhatikan orang bodoh itu nak buat apa.............adushhh aku pun sama kerana selalu perhatikan mereka, patutlah baunya tak tertahan dan jika selama bertahun2 tempias enzim-enzim kebodohan mereka juga akan merosakkan IQ aku...ini........tapi nak buat macam mana negaraku yang tercinta&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7268272827888816071?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7268272827888816071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7268272827888816071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7268272827888816071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7268272827888816071'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/02/apabila-si-bodoh-memperbodahkan-juak.html' title='Apabila Si Bodoh Memperbodahkan Juak-juak yang memang bodoh'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4077738308904301818</id><published>2010-02-09T09:09:00.002+08:00</published><updated>2010-02-09T09:32:28.076+08:00</updated><title type='text'>Politik: Menyesakkan nafas</title><content type='html'>Dunia politik di Malaysia nie memang melelahkan dan betul-betul buat otak jadi mereng. Dengan pelbagai jenis orang dan perwatakan yang tak konsisten, semuanya kerana apa, kerana nak sentiasa mengharap rakyat menyanjung mereka, tetapi perbuatan sesetangah ahli politik, peminat politik dan aktivis politik di Malaysia macam hampas kelapa, sama ada dari kerajaan dan juga pembangkang. Bosan dengan apa yang berlaku bukan sejak kebelakangan ini tapi sejak 10 tahun yang lepas.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kehidupan  mereka yang tidak mempedulikan apa yang berlaku di dunia politik memang tidak akan terasa sangat paling lebih pun bising sebab kenaikan minyak dan harga barang selebih dari itu meraka akan lupa apabila dihiburkan dengan siri Raja Lawak dan Mentor. Politik di Malayia pun ramai pelawak berbakat dalam pelbagai kategori, pelawak kategori seram, pelawak bodoh , pelawak lucah dan pelawak tua.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dah nama pun pelawak, tabiat suka menghiburkan orang dan akan mencari pelbagai cara nak menghiburkan rakyat dah menjadi darah daging mereka, sama ada lawak itu diterima sebagai sesuatu yang bagus, berisi atau lawak yuang sama macam apa yang manusia buang bila lepas makan mereka tak kisah, yang penting tabiat dan nafsu suka buat lawak dapat ditunjukkan. Itulah orang politik di Malaysia. Kosong sahaja.. tak lebih dari itu &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku yang mengikuti secara langsung dan tak langsung nie pun dah sama macam jadi bebal lak dengan semua isu yang ada di ucapkan pelawak-pelawak nie, saling tak tumpah tengok Raja Lawak Astro tu....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Semua benda dah jadi isu politik hinggakan isu tak ada isu pun jadi politik, bayangkan betapa hebat ahli politik Malaysia mencipta isu.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kau masuk parti nie aku masuk parti nie. kau keluar parti nie, aku keluar parti nie. Aku nak dialog nie, kau nak berdialog pasal tu, aku dah kata jgn cakap macam nie, kau kata nak gak cakap pasal tu... keputusan nya pi mai pi mai tang tu gak lee...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4077738308904301818?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4077738308904301818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4077738308904301818' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4077738308904301818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4077738308904301818'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/02/politik-menyesakkan-nafas.html' title='Politik: Menyesakkan nafas'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3550280555080321560</id><published>2010-01-04T16:33:00.003+08:00</published><updated>2010-01-04T16:43:41.811+08:00</updated><title type='text'>1st Day Pilot Project - Bukit Raja</title><content type='html'>Ada lagi beberapa jam nak close daily operation kat bukit raja, so far Alhamdulillah belum ada lagi kritikal issue dimana sytem terpaksa dihentikan. Oleh kerana sistem ini melibatkan transaksi duit so semua debit,credit, balance cukup penting. Tak senang duduk jugak le nak melayan persoalan yang timbul dari user.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next plan aku untuk review code dan memperkemaskan semula beberapa code yang agak terbabas dari dasar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;InsyAllah ada masa aku cerita tetang scenario driven yang cuba dipraktiskan dalam development kat sini menggunakan MSpec.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3550280555080321560?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3550280555080321560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3550280555080321560' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3550280555080321560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3550280555080321560'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/01/1st-pilot-project-bukit-raja.html' title='1st Day Pilot Project - Bukit Raja'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2006984057823164620</id><published>2010-01-03T22:56:00.003+08:00</published><updated>2010-01-04T10:37:03.031+08:00</updated><title type='text'>Pilot Project</title><content type='html'>Selepas 5 bulan terlibat dalam development MaRS project sebagai Solution Architect (consultant), insyAllah esok pilot project untuk satu site akan digunakan. Sebulan bergelumang dengan bug fixing, code review , query tuning cukup-cukup memenatkan dan beberapa project yang lain juga sedang berjalan. Aku agak tertekan dalam situasi sekarang ini, confidence level aku untuk code Mars untuk pergi live adalah ditahap 70%, dalam kenkangan team members yang lain agak fresh dalam pengalaman membangunkan enterprise system, aku terpaksa memikul tanggungjawab sebagai consultant merangkap developer, tester. Bulan lepas 2 org dalam team nie resigned, aku tak sure sebab aku orang luar,tapi momentum project nie agak terganggu kerana salah seorang yang berhenti tersebut ialah senior developer yang juga menjadi system analyst.&lt;br /&gt;&lt;br /&gt;Aku pada mula tekankan cara tulis code separation of concern tapi aku rasa dia orang masih tak dapt nak menjiwai kenapa perlukan cara tersebut, dan oleh kerana aku tak sempat nak review semua code orang , maka aku dapat rasakan akan ada code yang ditulis seakan &lt;a href="http://martinfowler.com/eaaCatalog/transactionScript.html"&gt;TransactionScript&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Code scenario test aku masih cover hanya 40% dari keseluruhan scenario penting. Aku berdoa, semoga pilot project berjalan lancar dan nationwide deployment pun success.&lt;br /&gt;&lt;br /&gt;Just untuk update, dari segi framework, tools dan approach yang aku guna dalam team ini.&lt;br /&gt;&lt;br /&gt;.Net Framework 3.5&lt;br /&gt;ASP.Net MVC 1&lt;br /&gt;NHibernate 2.1&lt;br /&gt;FluentNHibernate&lt;br /&gt;NHibernateLinq&lt;br /&gt;Coolite - ExtJS&lt;br /&gt;MSpec, NUnit&lt;br /&gt;IIS 7&lt;br /&gt;SQL Server 2005&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2006984057823164620?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2006984057823164620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2006984057823164620' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2006984057823164620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2006984057823164620'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2010/01/pilot-project.html' title='Pilot Project'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2014957526960403191</id><published>2009-11-09T17:53:00.002+08:00</published><updated>2009-11-09T17:54:53.944+08:00</updated><title type='text'>Design application - letakkan behaviour mencorakkan design anda dan bukan data</title><content type='html'>Kena ingat bila design yang penting bagaimana design tersebut menampung keperluan behaviour object2 tersebut dan jgn terlalu ambil berat bagaimana data itu di tunjukkan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2014957526960403191?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2014957526960403191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2014957526960403191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2014957526960403191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2014957526960403191'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/11/design-application-letakkan-behaviour.html' title='Design application - letakkan behaviour mencorakkan design anda dan bukan data'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2566441351946146560</id><published>2009-11-09T11:53:00.001+08:00</published><updated>2009-11-09T11:55:07.554+08:00</updated><title type='text'>Cuba kurangkan penggunaan Inheritance - Inheritance also anti pattern</title><content type='html'>Next target ialah untuk cuba design menggunakan composition/association dan elakkan terlebih guna Inheritence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2566441351946146560?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2566441351946146560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2566441351946146560' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2566441351946146560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2566441351946146560'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/11/cuba-kurangkan-penggunaan-inheritance.html' title='Cuba kurangkan penggunaan Inheritance - Inheritance also anti pattern'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2858056401504873166</id><published>2009-11-07T06:19:00.001+08:00</published><updated>2009-11-07T06:20:30.785+08:00</updated><title type='text'>Setter dan Getter anti pattern</title><content type='html'>Sekarang aku dapat merasakan kenapa public Setter dan Getter anti pattern...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2858056401504873166?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2858056401504873166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2858056401504873166' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2858056401504873166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2858056401504873166'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/11/setter-dan-getter-anti-pattern.html' title='Setter dan Getter anti pattern'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6084556377903864340</id><published>2009-11-05T14:31:00.002+08:00</published><updated>2009-11-05T14:45:10.063+08:00</updated><title type='text'>Berubah dari pemikiran CRUD ke DDD</title><content type='html'>Ada diffrent code sebegini?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;var teller = s.Get&lt;teller&gt;(tellerId);&lt;/div&gt;&lt;div&gt;teller.TotalCashInHand = TotalCashInHand - amountToTransfer&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;dan lagi satu&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;var teller = s.Get&lt;teller&gt;(tellerId)&lt;/div&gt;&lt;div&gt;teller.DeductCashAmountWhenAmountTransfer(amountToTransfer);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Code atas tu kita panggil car CRUD dan yang dibawah di panggil cara DDD;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6084556377903864340?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6084556377903864340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6084556377903864340' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6084556377903864340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6084556377903864340'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/11/berubah-dari-pemikiran-crud-ke-ddd.html' title='Berubah dari pemikiran CRUD ke DDD'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7305373737625140782</id><published>2009-11-05T09:42:00.002+08:00</published><updated>2009-11-05T10:04:53.070+08:00</updated><title type='text'>Menggunakan AggregateRoot collection untuk add entity/value object</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Persoalan yang timbul bagaimana penggunaan sebenar child collections dalam AggregateRoot (AR). Pemahaman aku sebelum ini terlalu ekstrim dimana child collection itu mesti digunakan sama ada untuk add dan juga fetch child item (lazy load). Pengalaman mengajar untuk lebih flexible dalam menentukan penggunaan child collections dalam AR.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Aku bawa satu contoh, didalam library/Book Store system ada satu features yang kita panggil "Lend Book". Bagaimana kita hendak model kan ini.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;BookStore 1--0..* AvailableBooks&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Didalam sebuah book store akan ada 0 atau lebih Books. Jika kita nak menambah collection buku didalam book store kita akan buat begini:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;var bookStore = s.get&lt;bookstore&gt;(bookStoreId);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;bookStore.AddNewBook(new Book{ .. });&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;So bagaimana pula jika kita hendak lend book dari book store?.  Oleh kerana book ialah entity dibawah AR book store maka segala aktiviti berkaitan buku sama ada command dan query pelulah melalui AR BookStore (It rules AR) . Jika dahulu aku akan buat begini:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;var bookStore = s.Get&lt;bookstore&gt;(bookStoreId);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;bookStore.Lend(bookId,customer);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Code didalam BookStore&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;public void Lend(Guid bookId,Customer customer)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;   var book = AvailableBooks.Where(c=&gt;c.Id == bookId).SingleOrDefault();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;   BookLendToCustomers.Add(new BookLend{ Book = book, Customer = customer});&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Ok code ini tiada masalah, malahan follow apa yang disuggest oleh DDD team, tetapi aku akan menghadapi performance problem jika dalam book store tersebut mempunyai 100000 buah buku. AvailableBooks collection akan load semua buku kedalam memori dan akan buat memory query untuk dapatkan buku tersebut berdasarkan bookId (bahasa bercampur-campur book/buku). &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Jadi cara aku skrg lebih flexible sama ada membenarkan query ke book entity atau inject domain event kedalam Book store.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Option 1 &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;var bookStore = s.Get&lt;bookstore&gt;(bookStoreId);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;var book = s.Get&lt;book&gt;(bookId);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;bookStore.Lend(book,customer);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Option 2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;var bookStore = s.Get&lt;bookstore&gt;(bookStoreId);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;bookStore.Lend(bookId,customer);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Code didalam book store&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;public void Lend(Guid bookId,Customer customer)&lt;br /&gt;{&lt;br /&gt; var event = new BookQueryEvent{ BookId = bookId}&lt;br /&gt; DomainEvent.Raise&lt;getavailablebookbyid&gt;(event);&lt;br /&gt;&lt;br /&gt; var book = event.Book;&lt;br /&gt; BookLendToCustomers.Add(new BookLend{ Book = book, Customer = customer});&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Code domain event akan diinject menggunakan any IoC library seperti castle,autofac,structuremap etc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Saper sudi share..pendapat&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7305373737625140782?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7305373737625140782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7305373737625140782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7305373737625140782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7305373737625140782'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/11/menggunakan-aggregateroot-collection.html' title='Menggunakan AggregateRoot collection untuk add entity/value object'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7686922898107536705</id><published>2009-10-22T10:26:00.003+08:00</published><updated>2009-10-22T10:31:27.036+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Command Query Separation'/><category scheme='http://www.blogger.com/atom/ns#' term='CQS'/><title type='text'>Real command scope dalam CQS</title><content type='html'>Minggu lepas aku submit code aku untuk group DDD buat review dan comment, dan Alhamdulillah ada banyak comment yang menarik yang dapat memperbetulkan kefahaman aku tentang CQS. Salah satu point yang aku dapat ialah apabila prosess command digunakan , hanya methodGet&lt;t&gt;( jika guna Nhibernate) sahaja yang diperlukan, tiada method query akan digunakan.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7686922898107536705?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7686922898107536705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7686922898107536705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7686922898107536705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7686922898107536705'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/10/real-command-scope-dalam-cqs.html' title='Real command scope dalam CQS'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2287461255977888130</id><published>2009-10-21T09:36:00.002+08:00</published><updated>2009-10-21T09:39:44.099+08:00</updated><title type='text'>Visual NHibernate &amp; NHibernate Mold</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Sculpture&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; is a .NET open source Model-Driven Development code generation framework ideal for creating and managing .NET Enterprise Applications."&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; color: rgb(239, 239, 239); -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;- &lt;a href="http://dawliasoft.com/Default.aspx"&gt;http://dawliasoft.com/Default.aspx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(81, 81, 81); font-family: arial; font-size: 12px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;h2 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font: normal normal normal 12px/normal arial; color: black; vertical-align: top; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;Visual designer and mapping tool for creating and editing NHibernate projects&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;- &lt;a href="http://www.slyce.com/"&gt;http://www.slyce.com/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2287461255977888130?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2287461255977888130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2287461255977888130' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2287461255977888130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2287461255977888130'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/10/visual-nhibernate-nhibernate-mold.html' title='Visual NHibernate &amp; NHibernate Mold'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8748040877474224456</id><published>2009-10-20T17:26:00.002+08:00</published><updated>2009-10-20T17:34:56.142+08:00</updated><title type='text'>Distributed Ajax Call</title><content type='html'>3 bulan tak update apa-apa kat sini, tersangatlah busy dan tersangat malas dan waluapun banyak yang nak share tentang pengalaman baru dalam develop distributed application tapi buntu nak start macam mana. Cuma yang aku rasa best ialah dapat selesaikan masalah Ajax call cross domain.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8748040877474224456?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8748040877474224456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8748040877474224456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8748040877474224456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8748040877474224456'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/10/distributed-ajax-call.html' title='Distributed Ajax Call'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-778017739831159075</id><published>2009-08-28T10:54:00.002+08:00</published><updated>2009-09-03T11:32:36.139+08:00</updated><title type='text'>DDD rules diguna hanya pada Command process</title><content type='html'>Apabila design domain model menggunakan Domain Driven Design pattern seperti Aggregate Root, Service , penggunaan pattern ini hanya valid pada process yang melinatkan command sahaja. Pattern ini pula dikenali sebagai CQS - Command Query Separation (Arhitecture Level). Jadi untuk list/search atau reporting rules DDD tersebut tidak diguna pakai. Anda free untuk search dari mana-mana entity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-778017739831159075?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/778017739831159075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=778017739831159075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/778017739831159075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/778017739831159075'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/08/ddd-rules-diguna-hanya-pada-command.html' title='DDD rules diguna hanya pada Command process'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6152422628382456943</id><published>2009-08-24T20:44:00.003+08:00</published><updated>2009-08-25T06:17:19.055+08:00</updated><title type='text'>Keperluan melakukan refactoring</title><content type='html'>Refactoring dikategorikan sebagai seni, sama juga dengan Domain Design, memerlukan kreativiti dan kesabaran untuk mendapat keputusan yang bagus.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kebiasaan Refactoring session boleh berlaku 3 -4 kali sebelum anda mendapat keputusan yang terbaik.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Refactoring yang selamat jika pada permulaan design dan conding, enviroment development sudah bermula dengan Test Driven Development (TDD).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Maka jika berlaku major perubahan pada code dan design, kita tidak perlu risau dependency dengan code/component lain insyAllah dengan cepat dapat di ketahui jika berlaku error.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6152422628382456943?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6152422628382456943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6152422628382456943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6152422628382456943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6152422628382456943'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/08/keperluan-melakukan-refactoring.html' title='Keperluan melakukan refactoring'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7028424080351308154</id><published>2009-08-11T01:54:00.002+08:00</published><updated>2009-08-11T02:04:08.374+08:00</updated><title type='text'>Message boleh jadi Command atau Event</title><content type='html'>Bila buat naming method menggunakan message sebagai parameter ada 2 jenis message yang boleh digunakan &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Message sebagai command&lt;/div&gt;&lt;div&gt;2. Message sebagai event&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;Message sebagai command&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Message sebagai command adalah seperti ini&lt;/div&gt;&lt;div&gt;public class Customer&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;  public void ApplyImprestAccount(new CreateNewImprestAccount());&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;CreateNewImprestAccount - ialah command, jika dibaca memang nampak akan maksud message tersebut.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold; "&gt;Message sebagai event&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Message sebagai event pula ialah kiata hendak memberitahu sesuatu dah berlaku dan apa sequence seterusnya.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;        public void UpdateRegistrationStatus(RegistrationStatus registrationStatus)&lt;/div&gt;&lt;div&gt;        {&lt;/div&gt;&lt;div&gt;            this.RegistrationStatus = registrationStatus;&lt;/div&gt;&lt;div&gt;            if(RegistrationStatus == RegistrationStatus.InActive)&lt;/div&gt;&lt;div&gt;            {&lt;/div&gt;&lt;div&gt;                DomainEvents.Raise&lt;mailinitiatorbecameinactive&gt;(new MailInitiatorBecameInActive&lt;/div&gt;&lt;div&gt;                {&lt;/div&gt;&lt;div&gt;                    LicenseCustomer = this.Customer,&lt;/div&gt;&lt;div&gt;                    MailInitiator = this&lt;/div&gt;&lt;div&gt;                });&lt;/div&gt;&lt;div&gt;            }&lt;/div&gt;&lt;div&gt;            &lt;/div&gt;&lt;div&gt;        }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hendakkan kepastian baca tentang CQS.Aku pun masih baru&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7028424080351308154?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7028424080351308154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7028424080351308154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7028424080351308154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7028424080351308154'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/08/message-boleh-jadi-command-atau-event.html' title='Message boleh jadi Command atau Event'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-871359764043224169</id><published>2009-08-10T17:06:00.002+08:00</published><updated>2009-08-10T17:36:25.572+08:00</updated><title type='text'>Naming Code yang mudah dibaca dan maintain</title><content type='html'>Macam mana nak buat naming method yang mudah dibaca dan apabila melihat naming tersebut terus boleh faham apa sebenarnya kerja yang akan dibuat oleh code tersebut. Kebaikan pada naming method yang difahami jelas maksud memudahkan untuk baca dan juga maintain.Code tersebut juag tidak perlu banyak comment.Selain dari itu jika berbincang dengan team developer yang lain naming menggambarkan situasi sebenar real world. Naming yang bagus ialah yang follow Ubiquitous Language semasa dicussion dengan subject matter expert didalam process design domain model.&lt;br /&gt;&lt;br /&gt;Contoh -&lt;br /&gt;&lt;br /&gt;1. Customer can request license with existing license as a parent license.&lt;br /&gt;2. Customer can request license as a new license&lt;br /&gt;&lt;br /&gt;Dulu code yang aku tulis ada seperti ini dibawah ini.&lt;br /&gt;&lt;br /&gt;public void RequestLicense(int number,string location,Guid parentLicenseId)&lt;br /&gt;{&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void RequestLicense(int number,string location)&lt;br /&gt;{&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Bila aku tengok balik code macam nie selepas 2 /3 bulan  aku susah nak dapat tahu maksud code tersebut jika dilihat hanya pada naming method.&lt;br /&gt;&lt;br /&gt;Aku baru sahaja bertukar cara naming code menggunakan konsep "Message". So secara basic naming code kemungkinan sama tetapi parameter akan berubah dari individual type kepada Message yang akan menggandungi parameter2 tersebut.&lt;br /&gt;&lt;br /&gt;public void RequestLicense(CreateNewLicenseWithExistingParentLicense msg)&lt;br /&gt;{&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void RequestLicense(CreateNewLicense msg)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-871359764043224169?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/871359764043224169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=871359764043224169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/871359764043224169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/871359764043224169'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/08/naming-code-yang-mudah-dibaca-dan.html' title='Naming Code yang mudah dibaca dan maintain'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5906311345233413623</id><published>2009-07-31T11:33:00.003+08:00</published><updated>2009-07-31T12:08:04.301+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>NHibernate - Training</title><content type='html'>Minggu lepas first time aku bagi training untuk company luar dan training tersebut di kelolakan oleh pihak Syarikat aku berkerja, maka aku tak perlu bercuti unutk buat consultation training. 6 orang developer datang selama 4 hari dari sebuah company. Tajuk yang aku pilih untuk train dia orang ialah Building Enterprise Application using NHiberante &amp;amp; Domain Driven Design.&lt;br /&gt;&lt;br /&gt;Kebanyakkan masa dalam training menjurus kepada hands on training. Hari pertama banyak aku sentuh tentang teori/konsep ORM/NHibernate. Aku juga bawa contoh penggunaan TDD dalam development dan aku buat example tanpa prepare so nak tunjukkan serba sedikit cara real start project from scratch. So bila run TDD tu nampak lah kebaikan sebab bila buat impromptu nampak lah apa yang aku expect code tak menghasilkannya kerana ada silap dalam code base tersebut.&lt;br /&gt;&lt;br /&gt;Nanti aku tulis lagi, dah masa bulan malas nak update...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5906311345233413623?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5906311345233413623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5906311345233413623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5906311345233413623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5906311345233413623'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/07/nhibernate-training.html' title='NHibernate - Training'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2454531949243355710</id><published>2009-07-29T01:48:00.003+08:00</published><updated>2009-07-30T15:10:16.990+08:00</updated><title type='text'>NHibernate - using list sebagai collection</title><content type='html'>Aku jarang guna list &amp;lt;list&amp;gt; sebagai collection untuk NHibernate. Biasanya aku guna bag &lt;bag&gt;configuration untuk collection. Bag is ordered collection&lt;br /&gt;Dalam NHibernate collection boleh di congifigure sebagai &amp;lt;set&amp;gt;, &amp;lt;list&amp;gt;, &amp;lt;map&amp;gt;, &amp;lt;bag&amp;gt;, &amp;lt;array&amp;gt;and &amp;lt;primitive-array&amp;gt;&lt;br /&gt;&lt;br /&gt;Cuma dalam situasi tertentu aku perlukan guna &amp;lt;list&amp;gt; untuk dapatkan index. Cuma jika &amp;lt;list&amp;gt; in diconfigurekan sekali dengan inverse=true index akan null. Jadi untuk guna kena letak inverse=false&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2454531949243355710?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2454531949243355710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2454531949243355710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2454531949243355710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2454531949243355710'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/07/nhibernate-using-list-sebagai.html' title='NHibernate - using list sebagai collection'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6503674071315686220</id><published>2009-07-26T08:56:00.002+08:00</published><updated>2009-07-26T09:21:38.000+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>API Flexibility or Dynamic</title><content type='html'>Pada pendapat aku API code hanya dibuat berdasarkan process dan bukan berdasarkan kemampuan design tersebut, ini adalah kerana untuk mengelakkan confuse walaupun ada comment pada code atau documentation. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Untuk lebih mudah faham jika dalam scenario tu dikehendaki 2 process dilakukan kerana turutan/aturan/sequence dari UI maka buatlah code yang support 2 process tersebut jangan buat code api yang boleh buat dalam kedua-dua process tersebt kedalam hanya 1 process, jika tidak diperlukan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6503674071315686220?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6503674071315686220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6503674071315686220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6503674071315686220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6503674071315686220'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/07/api-flexibility-or-dynamic.html' title='API Flexibility or Dynamic'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4734391655174150077</id><published>2009-07-15T20:33:00.003+08:00</published><updated>2009-07-25T06:49:05.395+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Update</title><content type='html'>Lately busy dengan macam-macam benda duniawi, then since last week nak online guna Celcom broadband kat area rumah aku nie ada masalah, adalah dlm 10 min dlm HSDPA connection lepas tu terus je drop ke GPRS, jadi banyak kerja aku terganggu. Sekarang nie aku cuba pula guna PIWimax so far nie first day dan nampak macam ok, tak tahu lah pulak bila org dah start ramai subscribe.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku pun sekarang dah kurang buat coding kat office, walaupun kerja banyak dan aku sepatutnya membantu teams members aku yang lain, cuma aku dah start macam kura-kura bila masuk bab programming hehehe.. lagi slow dari budak fresh grade.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aku rasa aku kekurangan fokus, bila aku nak buat programming tiba-tiba dapat call..kena check something, kena meeting, kena update something pada CIO ..etc (alasan je tu)... aku nak kena bercuti fikirkan pasal programming dan kerja, tapi waktu nie nak pergi bercuti pun time musim H1N1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Banyak juga update dalam software development dalam jangka masa sebulan nie. Nanti bila mode aku datang semula nak menulis aku akan update..insyAllah&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4734391655174150077?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4734391655174150077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4734391655174150077' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4734391655174150077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4734391655174150077'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/07/update.html' title='Update'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6935054471007045076</id><published>2009-06-13T00:22:00.003+08:00</published><updated>2009-06-13T01:49:01.326+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><category scheme='http://www.blogger.com/atom/ns#' term='DDDD'/><title type='text'>DDD : Messaging</title><content type='html'>Konsep messaging banyak digunakan dalam DDDD atau dikenali sebagai Distributed Domain Driven Design. Dalam .Net community setahu aku ada 2 transport application iaitu NServiceBus dan MassTransit. Cuma messaging approach boleh juga digunakan dalam cara Domain Driven Design yang biasa tanpa menggunakan any messaging transport.&lt;br /&gt;&lt;br /&gt;Aku tertarik dengan konsep messaging dari segi kekemasan code dan keupayaan code tersebut bila didesign ala messaging. Kalau mengikut DDDD, Domain akan reference/couple dengan messaging structure manakala jika follow DDD, service akan reference/couple dengan messaging structure.&lt;br /&gt;&lt;br /&gt;Dalam post kali nie aku nak bawa contoh bagaimana hendak guna DDD dengan messaging iaitu service reference messaging structure.&lt;br /&gt;&lt;br /&gt;Aku baru je nak mencuba, so kalau silap bagi tahu.Apa itu message? Kalau ditanya kepada aku apa itu message jawapannya ialah satu set yang mengandungi samaada arahan atau maklumat sesuatu Context. Sebagai contoh context Tunjuk jalan ke Masjid Shah Alam. Maka terdapat arahan dan maklumat yang perlu letakkan didalam message untuk di hantar kepada si penerima. Penerima boleh jadi rakan sekerja, pemandu teksi atau sesiapa yang faham message tersebut. Berdasarkan message tersebut si penerima akan response berdasarkan apa yang diminta dan supporting maklumat.&lt;br /&gt;&lt;br /&gt;Message : Tunjuk Jalan Ke Masjid Alam&lt;br /&gt;&lt;br /&gt;Arahan : Sila bagi arahan untuk Ke Masjid Shah Alam&lt;br /&gt;Maklumat 1 : Aku sekarang di lokasi seksyen 9 dan destinasi Masjid Shah Alam&lt;br /&gt;Maklumat 2 : Aku nak pergi menaiki kereta&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;namespace&lt;/span&gt; Direction.Services&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; interface IMessage&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; interface IServiceHandler&amp;lt;TMsg&amp;gt; where TMsg : IMessage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Handle(TMsg msg);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; TunjukJalanKeMasjidShahAlamMenggunakanKereta : IMessage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;string&lt;/span&gt; from { &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;set&lt;/span&gt;; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;get&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;string&lt;/span&gt; to { &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;set&lt;/span&gt;; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;get&lt;/span&gt;; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; TunjukJalanKeMasjidShahAlamBerjalanKaki : IMessage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;string&lt;/span&gt; from { &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;set&lt;/span&gt;; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;get&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;string&lt;/span&gt; to { &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;set&lt;/span&gt;; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;get&lt;/span&gt;; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; TunjukJalanKeMasjidShahAlamMenaikiBasikal : IMessage&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;string&lt;/span&gt; from { &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;set&lt;/span&gt;; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;get&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;string&lt;/span&gt; to { &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;set&lt;/span&gt;; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;get&lt;/span&gt;; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; DirectionService :&lt;br /&gt;        IServiceHandler&amp;lt;TunjukJalanKeMasjidShahAlamBerjalanKaki&amp;gt;,&lt;br /&gt;        IServiceHandler&amp;lt;TunjukJalanKeMasjidShahAlamMenggunakanKereta&amp;gt;&lt;br /&gt;       &lt;br /&gt;    {&lt;br /&gt;       &lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;#region&lt;/span&gt; IShowDirection Members&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Handle(TunjukJalanKeMasjidShahAlamBerjalanKaki msg)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Green; font-family: Courier New; font-size: 11px; background-color: White"&gt;//Send to Domain to calculate and show the possible way&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: Green; font-family: Courier New; font-size: 11px; background-color: White"&gt;//Direction.FindFrom(msg.from).FindTo(msg.to).With(Transportation.Leg);&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Handle(TunjukJalanKeMasjidShahAlamMenggunakanKereta msg)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Green; font-family: Courier New; font-size: 11px; background-color: White"&gt;//Send to Domain to calculate and show the possible way&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: Green; font-family: Courier New; font-size: 11px; background-color: White"&gt;//Direction.FindFrom(msg.from).FindTo(msg.to).With(Transportation.Car);&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Code diatas tidak di test dan hanyalah imiginasi sahaja untuk tatapan umum.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6935054471007045076?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6935054471007045076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6935054471007045076' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6935054471007045076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6935054471007045076'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/06/ddd-messaging.html' title='DDD : Messaging'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7513401668316797790</id><published>2009-06-12T23:05:00.004+08:00</published><updated>2009-06-13T00:09:55.796+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Aggregate'/><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><category scheme='http://www.blogger.com/atom/ns#' term='AggregateRoot'/><title type='text'>DDD : AggregateRoot rules</title><content type='html'>Salah satu pattern yang tersangat penting dalam Domain Driven Design ialah AggregateRoot. Dan ianya juga adalah pattern yang nampak mudah tapi susah untuk di pilih semasa didesign di dalam Domain Model.&lt;br /&gt;&lt;br /&gt;Apa definisi &lt;span style="font-weight: bold;"&gt;AggregateRoot&lt;/span&gt;? Kalau mengikut buku Domain Driven Design dan setelah membacanya aku boleh membuat kesimpulan pemahaman aku sendiri yang pada aku betul, iaitu AggregateRoot ialah anda mengroupkan beberapa entity atau value object kepada sesuatu object entity yang akan menjadi ketua dan object entity ini akan bertindak menjaga sebarang anasir-anasir baik dan jahat dari luar yang menganggu kelompok/komuniti. Ini bermakna jika ada permintaan dari pihak luar yang bukan penduduk dalam komuniti AggregateRoot tadi maka permintaan tersebut perlulah melalui ketua tadi dan si ketua yanag akan memanggil pengikutnya (&lt;span style="font-weight: bold;"&gt;Aggregate&lt;/span&gt;) untuk bertindak dan tindakan yang berlaku adalah diketahui oleh siketua. Ok ini bahasa mudah yang aku nak cerita, bahasa susah korang google lah sendiri.&lt;br /&gt;&lt;br /&gt;Kepentingan AggregateRoot jika di design dengan betul, akan mengurangkan keserabutan (complexity).&lt;br /&gt;&lt;br /&gt;Rule yang pertama aku follow, developer lain ada rules masing-masing mengikut pemahaman dia orang. Aku pun baru je faham tu pun kekadang salah pilih AggregateRoot. Lagi satu peringatan jika kesilapan memilih AggregateRoot boleh menjadikan design anda menjadi lebih komplex dan aku pernah merasa keperitan ini. Aku akan hanya pilih AggregateRoot bila perlu dan jika tidak perlu aku tak nak buat. Ianya bukan kemestian, cuma memastikan kekuatan design. Sebelum ini 2/3 bulan  sebelum ini pemilihan aggregate root macam kemestian tapi apabila dah terjerat baru kutahu langit itu tinggi. Walaupun dari segi turutan dalam design domain model priority AggregateRoot ialah ketiga penting setelah mengenal pasti entity/value object (1) dan relation association antara object(2). Ianya berada ketangga ketiga hitz sepanjang zaman volume 1 kompilasi, tapi kekuatan design banyak berkait rapat dengan AggregateRoot.&lt;br /&gt;&lt;br /&gt;Rule aku yang kedua, &lt;span style="font-weight: bold;"&gt;Aggregate&lt;/span&gt; ialah rakyat marhaen dibawah jajahan takluk &lt;span style="font-weight: bold;"&gt;AggregateRoot&lt;/span&gt;. Jika delete AggregateRoot, maka semua Aggregate akan turut sama terkorban dan mengorbankan diri (kes ikut ketua tanpa usul periksa U jump, I jump) mereka ini tidak nak menjadi anak yatim piatu. Dalam erti kata sebenar Aggregate ini tidak bernilai jika tidak bersama-sama AggregateRoot dan mesti ingat nilai ini adalah berdasarkan &lt;span style="font-weight: bold;"&gt;Context&lt;/span&gt;. Contoh nilai berdasarkan context ialah jika anda masuk kekedai Kereta sama ada baru atau terpakai (second hand) , tujuan anda ialah hendak membeli Kereta itu ialah Context, maka bayangan anda ialah sebiji kereta yang normal yang lengkap dengan body, engine, interial dan tayar. Apa perasaan anda jika hendak beli kereta tapi oleh kerana bodynya tidak dijual dan yang dijual hanyalah tayar apakah nilai tayar dalam context awal tadi. Salesman tu mungkin kena baling dengan tayar tu kot. Tapi sebaliknya jika anda dah ada sebuah kereta tapi tayar anda bocor dan perlu diganti, maka jika anda pergi ke kedai service kereta, mekanik tu akan ganti tayar anda bukan ganti kereta anda, disini tayar adalah lebih bernilai mengikut context tayar bocor.&lt;br /&gt;&lt;br /&gt;Rule yang ketiga, sebarang kerja yang dilakukan oleh aggregate , maka AggregateRoot perlu memantau agar perkara-perkara tidak senonoh tidak berlaku dalam jagaan dia. Ok ambil contoh Mursyidul Am PAS ialah AggregateRoot bagi Aggregate jemaah PAS, maka sebarang aktivi seperti Unity Goverment ke atau apa, beliau kena tahu dan tegur jika ada pelanggaran berlaku yang merugikan Islam dan Parti, Aggregate tidak boleh buat sesuka hati nak berdua-duaan dengan orang lain. Orang lain dari luar parti perlu berbincang dengan Mursyidul Am PAS kenapa perlu berdua-duaan untuk kebaikan ummah ke atau apa ke. So jika bukti keikhlasan maka Mursyidul Am PAS mugkin ada letak syarat jika anda ingin kawan dengan si Aggregate A dari Terengganu maka syaratnya Islam mestilah didahulukan dan lain-lain syaratnya. Pendekkan cerita katakan lah Mursyidul Am PAS setuju dan berkawanlah si orang luar tadi dengan Aggregate A, dia pun suruh lah bermacam-macam, suruh buat ini dan buat itu dan semasa perkerjaan tersebut dibuat semua informasi tersebut dipantau terus oleh Mursyidul Am PAS dan tiba-tiba dilihatnya orang luar itu suruh Aggregate A menari ronggeng, wah nie dah kes berat , berdasarkan syarat yang dipersetujui maka terdapat pelanggaran syarat maka perkerjaan Aggergate  tadi akan dihentikan dan timbul Pop Up Message "Tak Takut Allah ke hehehehe ". Maka tugas AggregateRoot tadi menjaga supaya tidak tercemar Agregate-Agregate yang berada dibawahnya.&lt;br /&gt;&lt;br /&gt;Kesimpulan 3 rules yang aku rasa paling hitz yang boleh dijadikan panduan memilih bakal AggregateRoot, walaupun ada rules lain tapi tidak sepenting rules2 ini. Cerita yang dibawa tiada kena mengena dengan yang hidup atau yang mati dan tiada kena mengena dengan isu sekarang.&lt;br /&gt;&lt;br /&gt;Selamat beraggregate root - jangan nak rongeng2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7513401668316797790?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7513401668316797790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7513401668316797790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7513401668316797790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7513401668316797790'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/06/ddd-aggregateroot-rules.html' title='DDD : AggregateRoot rules'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1562422892025178245</id><published>2009-06-10T23:30:00.003+08:00</published><updated>2009-06-10T23:47:03.220+08:00</updated><title type='text'>LHDN hantar surat minta hutang cukai lagi</title><content type='html'>Aku balik kampung semalam, ambil anak-anak aku yang bercuti kat kampung sempena cuti sekolah dan kerana ada majlis maka-makan sebelah family wife aku, semua adik-beradik wife aku pun balik, so aku pun dikehendaki balik ada surprise.. aku sampai melaka lepas maghrib dan memang surprise bila tengok 2 meja makan ada kat lama rumah, rupa-rupanya ada makan-makan ikan bakar nasi lemak dan yg lagi surprise ada hadiah untuk semua anak-anak dan menantu, Alhamdulillah. Aku sempat balik rumah jengok mak kesayangan aku, sempat melepas rinda pada mak. Kat meja ada beberapa surat atas nama aku, dari LHDN dia orang send surat minta hutang cehhh!!!.. taksiran 2008 walaupun dah ditolak PCB tapi masih tak cukup, so aku dikehendaki bayar lagi RM xxxx, kesilapan aku , ada beberapa resit masa beli buku aku tak simpan.&lt;br /&gt;&lt;br /&gt;Sepatutnya cukai nie dia bagi lah diskaun bagi yang tak sokong kerajaan hahahah..., aku kena selesaikan baki tu dalam tempoh 6 bulan..kalau tak jadi kes along kena kurung heheh..so tahun nie aku tengah kumpul semua resit bila beli buku... resit masuk toilet awam pun kalau boleh reduce cukai aku nak masukkan juga.&lt;br /&gt;&lt;br /&gt;Anak aku Muhammad 'Umar Hafiy dah botak sama macam rambut aku hehehe..sama handsome macam aku..hahaha.. plan aku nak bawa anak-anak jalan tak jadi..sekarang nie musim H1N1 risau gak nak bawak ke public area.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1562422892025178245?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1562422892025178245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1562422892025178245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1562422892025178245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1562422892025178245'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/06/lhdn-hantar-surat-minta-hutang-cukai.html' title='LHDN hantar surat minta hutang cukai lagi'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5786723064779611342</id><published>2009-06-07T22:49:00.003+08:00</published><updated>2009-06-07T22:59:53.680+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UI Design'/><title type='text'>UI Design - Field Layout</title><content type='html'>Aku memang hancur dalam bab design UI, dan aku memang tak suka involve coding dengan UI, maka aku tidak ada banyak pengalaman dari segi User Experience dan lain-lain yang berkaitan dengan UI. Cuma aku tertarik cara UI yang diperkenalkan dalam ruby campus application, bagi aku kemas dan simple.&lt;br /&gt;&lt;br /&gt;Boleh tengok example UI dia kat link nie http://www.opensourcerails.com/projects/15435-RubyCampus&lt;br /&gt;&lt;br /&gt;Aku ada juga cuba nak buat macam tu saja suka-suka tapi tak sure lah ok atau tak&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JKWF88m2xLU/SivVNvrqCbI/AAAAAAAAANg/pj7oPRaL3fk/s1600-h/rubycampus.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 183px;" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SivVNvrqCbI/AAAAAAAAANg/pj7oPRaL3fk/s320/rubycampus.png" alt="" id="BLOGGER_PHOTO_ID_5344599814919817650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Car design nie memang lain sikit dar kebiasaan tapi dari segi user adakah cara UI layout macam ini lagi ok? atau konsep 1 column memanjang kebawah macam 37signals punya cara design&lt;br /&gt;&lt;br /&gt;atau 2 column design seperti biasa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5786723064779611342?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5786723064779611342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5786723064779611342' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5786723064779611342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5786723064779611342'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/06/ui-design-field-layout.html' title='UI Design - Field Layout'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JKWF88m2xLU/SivVNvrqCbI/AAAAAAAAANg/pj7oPRaL3fk/s72-c/rubycampus.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1820426445403336561</id><published>2009-06-06T16:43:00.002+08:00</published><updated>2009-06-06T17:18:16.890+08:00</updated><title type='text'>Muktamar PAS 55</title><content type='html'>Aku jarang nak cerita sangat pasal politik dalam nie..sesekali je, cuma kali nie aku nak ulas sikit pasal Muktamar PAS 55, oleh kerana penganjuran kali nie dekat dengan rumah aku, maka aku dapat ikuti perkembangan dengan lebih kerap selain dari membaca online ulasan2 yang lain dan dah 2 malam berturut-turut aku pergi saner,tapi tak masuk dalam dewan, cuma melihat gerai-gerai dan dengar ceramah free yang dipasang di kedai-kedai. Aku terlibat dalam PAS secara tak langsung sejak dari sekolah, sebab aku tolong arwah bapa buat kerja-kerja amal untuk PAS, aku ingat lagi masa tu hujung tahun 80an aku dah bersekolah menengah tingkatan 3, maner le ada sangat orang PAS kat kampung aku, ada le 2-3 kerat yang aku tahu,yang lain semuanya biru karat.Arwah bapa aku pun aktif selepas bersara.Aku masih ingat masa tu ada ceramah kalau tak silap aku Mat Sabu penceramah dia, yang hadir cuma dalam 20 orang dicampur dengan beberapa batang pokok pisang. So siapa yang sokong PAS kat kampung aku tu kira alien (makhluk asing). &lt;br /&gt;&lt;br /&gt;Aku bukan ahli yang berjawatan cuma ahli biasa je sekarang dan tak de plan nak aktif sekadar membantu apa-apa yang perlu masa pilihanraya. Jadi sepanjang tempoh tersebut banyak peristiwa aku lihat dalam PAS, kemenangan, kekalahan dan pelbagai peristiwa suka dan duka.Selepas tahun 1990 apabila kemenangan PAS yang agak cemerlang di Kelantan dan perlantikan Tuan Guru Nik Aziz menjadi menteri besar, ada sedikit perubahan penerimaan di negeri-negeri macam negeri aku Melaka. Ada arus perubahan apabila mereka yang bukan berlatar belakang pendidikan agama tertarik dengan pembawaan PAS yang membawa Islam sebagai moto asas perjuangan. Pada masa itu ketrampilan, ketokohan Ustaz Fadhil Noor begitu jelas, dimana para Ulama dan Profesional saling lengkap melengkapi.Pada masa itu jelas akan perananan masing-masing dan proses tarbiyah yang dijalankan oleh pemimpin pada ketika itu membawa hasil yang digeruni musuh Tiada pihak yang sibuk nak jadi pemimpin sebaliknya takut apabila dipilih.&lt;br /&gt;&lt;br /&gt;Kadang-kadang Allah uji dengan kemenengan dan ahli jemaah lupa akan perkara tersebut dan masing-masing sekarang lebih sibuk kepada jawatan dan pertelingkahan seiapa yang lebih patut memimpin ulama ke atau professional. Musuh telah berjaya memasukkan jarum agar ahli-ahli PAS sibuk dengan melabelkan pihak ini dan pihak itu.&lt;br /&gt;&lt;br /&gt;Dua-dua pihak juga sama ada profesional dan ulama dalam PAS ada yang patut duduk diam jika tak boleh buat kerja dari memberi kenyataan bodoh yang kemudianya diambil sebagai peluru oleh pihak musuh. Kerja mengketegori sesetengah pihak tergolong dalam golongan tertentu sebenarnnya memberi kesan yang besar. Pemimpin PAS kena tahu itu. Jangan sibuk dengan Kerajaan Perpaduan sahaja, perpaduan dalam PAS kalau tak dijaga akan mengakibatkan usaha untuk bangun semula mendapat keyakinan rakyat marhaen 50 tahun lagi.&lt;br /&gt;&lt;br /&gt;Perkukuhkan proses tarbiyah, jika ulama sekalipun tapi tidak turun kepada professional untuk menerangkan adap dalam berjemaah dan asyik mengatakan bahawa mereka sahaja yang layak menjadi pemimpin, aku rasa orang tu tak layak bergelar ulama. Jika dia itu bagus, tidak perlu ada kuota insyAllah ramai perwakilan akan pilih.&lt;br /&gt;&lt;br /&gt;Aku masih lagi tak faham sesetengah pemikiran orang berjawatan dalam PAS yang tak nampak priority mana dahulu yang perlu diselesaikan dari sibuk nak berdialog dengan UBN. Keputusan dah ramai tahu so harap yang diberi amanah tu pikul tugas dengan sebaik-baiknya , jangan hampakan orang-orang yang menyanyangi kerja kebaikan ini.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1820426445403336561?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1820426445403336561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1820426445403336561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1820426445403336561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1820426445403336561'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/06/muktamar-pas-55.html' title='Muktamar PAS 55'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8605262709952728341</id><published>2009-06-02T18:02:00.002+08:00</published><updated>2009-06-02T18:34:42.829+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>Msc Malaysia Open Source Conference 2009</title><content type='html'>Agak terbatas waktu untuk aku update latest news etc. 2 hari aku hadiri seminar Msc Malaysia Open Source Conference 2009 di Berjaya Convention Center dengan tema Open to Change.&lt;br /&gt;&lt;br /&gt;Aku rasa nie pertama kali aku hadiri event besar untuk open source dan tiada beza dengan seminar yang biasa aku hadiri anjuran Microsoft, suma dalam MS Tech Ed, free gift tu lagi banyak, tanya soalan pun boleh dapat ipod/baju. Aku memang jarang nak bertanya soalan pada speaker cuma masa Presentation Adempier ERP aku bertanya soalan kenapa team beliau tidak menggunakan ORM yang strong lebih-lebih lagi app tersebut di develop dalam Java, so kebiasaanya Hibernate akan menjadi pilihan, tapi bila dia demo dan tunjukkan sedikit code java, aku nampak ada command SQL dalam code. Jawapannya dari awal project nie dah di develop sedemikian rupa dan line of code/features/module dah besar banyak dan untuk mereka port semua dataaccess function kepada Hibernate akan ambil masa yang lama dan Unit test mereka tidak sekuat untuk menahan gegaran refactoring.&lt;br /&gt;&lt;br /&gt;Lain-lain session yang aku masuk ialah OpenID/AOuth, Moodle Tips. Ada beberapa keynote dari Google team members. Makanan memang best A+, aku paling puas hati tentang makan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8605262709952728341?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8605262709952728341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8605262709952728341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8605262709952728341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8605262709952728341'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/06/msc-malaysia-open-source-conference.html' title='Msc Malaysia Open Source Conference 2009'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8406990219648992550</id><published>2009-05-27T05:38:00.003+08:00</published><updated>2009-05-27T06:00:36.409+08:00</updated><title type='text'>Bila anak demam</title><content type='html'>This week penat lain macam, ketiga-tiga anak aku demam serentak. Bermula dengan anak sulung aku, sehari selepas tu anak aku no 2 dan yang ke 3 pun kena demam. Deeni Husna anak aku yang no 2 susah nak makan ubat, jadi kena guna psychology sikit. Aku suruh dia lumba makan ubat dengan kakak dia..saper yang menang boleh dapat gula :) Risau tengok dia menggigil-gigil tak sedap badan, tapi Alhamdulillah doktor check kata demam biasa sahaja, tekak merah ada infection sikit. Kawasan rumah aku pun ada beberapa kes demam denggi.Time dia orang demam nie lagi banyak demand dia, especially Damia Bisyri, so yang lain tu pun ambil can lah follow leader, nak buku colorlah, nak pencil, nak tengok CD upin-ipin. Aku dan wife aku dah lama tak tengok TV nak masuk 2 bulan, setiap malam sebelum dia orang nak tidur, mesti dia orang nak tengok CD kartun, upin-ipin,madagascar,nemo, iqra so aku memang dah tak de masa nak tengok tv.&lt;br /&gt;&lt;br /&gt;Plan aku nak sambung tulis NHibernate Siri minggu nie tak jalan sangat, kalau sempat insyAllah aku sambung.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8406990219648992550?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8406990219648992550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8406990219648992550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8406990219648992550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8406990219648992550'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/bila-anak-demam.html' title='Bila anak demam'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-9092170615434331002</id><published>2009-05-24T07:47:00.004+08:00</published><updated>2009-05-24T08:26:25.766+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Command Query Separation'/><category scheme='http://www.blogger.com/atom/ns#' term='CQS'/><title type='text'>Command Query Separation : Cara berfikir design yang berbeza</title><content type='html'>Bila anda create Person dan persistence/simpan record kedalam mana-mana Persistence Storage (normally RDBMS) adakah sepantas kilat anda perlu view list record Person? Dan adakah anda ingin beberapa saat selepas anda masukkan record Person kedalam DB, anda mengharapkan orang lain yang search akan dapat record tersebut? Berapa penting business requirement ini kepada design anda?&lt;br /&gt;&lt;br /&gt;Ini adalah pertanyaan yang boleh ditanya apabila hendak design sesuatu system yang melibatkan creating dan reporting (search/view record).&lt;br /&gt;&lt;br /&gt;Command Query Separation membawa conceptual architecture yang agak berlainan tetapi bukan baru. Topik ini telah lama diperbincangkan cuma bukan mengguna nama Command Query Separation dan kebanyakkan adalah untuk working paper yang berkaitan dengan "Distributed Application". Martin Fowler ada artikel yang ada kena mengena dengan topik Command Query Separation , beliau menulis tentang &lt;a href="http://www.martinfowler.com/bliki/EagerReadDerivation.html"&gt;EagerReadDerivation&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-9092170615434331002?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/9092170615434331002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=9092170615434331002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/9092170615434331002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/9092170615434331002'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/command-query-separation-cara-berfikir.html' title='Command Query Separation : Cara berfikir design yang berbeza'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1762142784231736138</id><published>2009-05-23T06:37:00.003+08:00</published><updated>2009-05-23T07:13:22.930+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Command Query Separation'/><category scheme='http://www.blogger.com/atom/ns#' term='CQS'/><title type='text'>Command Query Separation</title><content type='html'>Aku agak lama juga untuk memahami idea CQS in dalam bentuk SOA. Ok sebelum itu, mungkin ada yang tak clear apa itu CQS.&lt;br /&gt;&lt;br /&gt;Ini berdasarkan Wiki:&lt;br /&gt;&lt;p style="font-style: italic;"&gt;&lt;b&gt;Command-query separation (CQS)&lt;/b&gt; is a principle of &lt;a href="http://en.wikipedia.org/wiki/Imperative_programming" title="Imperative programming"&gt;imperative&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Computer_programming" title="Computer programming"&gt;computer programming&lt;/a&gt;. It was devised by &lt;a href="http://en.wikipedia.org/wiki/Bertrand_Meyer" title="Bertrand Meyer"&gt;Bertrand Meyer&lt;/a&gt; as part of his pioneering work on the &lt;a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29" title="Eiffel (programming language)"&gt;Eiffel programming language&lt;/a&gt;.&lt;/p&gt; &lt;p style="font-style: italic;"&gt;It states that every &lt;a href="http://en.wikipedia.org/wiki/Method_%28computer_science%29" title="Method (computer science)"&gt;method&lt;/a&gt; should either be a command that performs an action, or a query that returns data to the caller, but not both. In other words, asking a question should not change the answer. More formally, methods should return a value only if they are &lt;a href="http://en.wikipedia.org/wiki/Referential_transparency_%28computer_science%29" title="Referential transparency (computer science)"&gt;referentially transparent&lt;/a&gt; and hence possess no &lt;a href="http://en.wikipedia.org/wiki/Side_effect_%28computer_science%29" title="Side effect (computer science)"&gt;side effects&lt;/a&gt;.&lt;/p&gt;Jadi CQS ini pada mulanya hanya principle yang diguna pakai dalam programming language sebagai guideline iaitu sesuatu method/function itu hanya boleh melakukan specific kerja samaada command atau query dan tidak boleh buat kedua-dua sekali. Principle ini ada kaitan juga jika dilihat kepada Single Responsibility Principle cuma SRP bercerita tentang class manakala CQS bercerita tentang function dan method.&lt;br /&gt;&lt;br /&gt;Contoh code yang break CQS ialah apabila kita bagi arahan supaya melakukan tambahan item kedalam box/container dan kemudian dengan function yang sama kita minta method/function tersebut retun value berapa item dah ditambah dalam box/container tersebut.. Jika ada code kita yang ditulis sebegitu maka mengikut rule CQS adalah salah."Tell vs Ask", bagi tahu object untuk buat apa atau minta object untuk pulangkan value.&lt;br /&gt;&lt;br /&gt;Ok , itu apa sebenarnya tersurat , cuma ada beberapa SOA expert yang memperluaskan konsep CQS ini kedalam architecture design system. Aku ambil masa yang lama nak feel CQS dan kegunaan dalam SOA, nak tahu sebab dan kelebihan apabila apply CQS dalam SOA enviroment design.&lt;br /&gt;&lt;br /&gt;Tidak habis disitu apabiila CQS hendak diguna pakai dalam SOA, keluar lagi satu term iaitu Messaging dalam CQS.Aku pun ambil masa beberapa hari juga hantar message dalam forum tanya soalan-soalan tentang CQS dan SOA. Aku ada hantar satu example minta dia orang comment cara pemahaman aku tentang CQS tapi totally apa yang aku buat tu salah..start dari itu kefahaman aku makin bertambah sedikit.&lt;br /&gt;&lt;br /&gt;Lagi satu point yang cuba dibawa ialah reporting function bukan sebenarnya tanggungjawab didalam domain, bagaimana untuk paging,sorting,orderby perlu diletak dibawah penguasaan context yang berlainan dari context domain. Jadi bagi orang-orang ini apabila berhadapan dengan domain context apa yang mereka fokuskan ialah "read type domain object" dalam ertikata mudah Create,Update,Delete (CUD). Manakala reporting context hanya ada Read (R).&lt;br /&gt;Reporting disini ialah bagaimana untuk display data pada client di presentation layer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1762142784231736138?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1762142784231736138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1762142784231736138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1762142784231736138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1762142784231736138'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/command-query-separation.html' title='Command Query Separation'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3238605847864278025</id><published>2009-05-22T09:34:00.004+08:00</published><updated>2009-05-23T04:57:41.305+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>NHibernate: Satu analisis perkembangan di Malaysia</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_JKWF88m2xLU/ShYBZDyq4jI/AAAAAAAAANY/O55G4V5Dc7M/s1600-h/NHLogoSmall.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5338455938320491058" style="width: 320px; height: 72px;" alt="" src="http://3.bp.blogspot.com/_JKWF88m2xLU/ShYBZDyq4jI/AAAAAAAAANY/O55G4V5Dc7M/s320/NHLogoSmall.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hibernate ialah Object Relational Mapper dimana project ini dimulakan oleh community Java lebih dari 6 tahun yang lepas. Sekarang ini Hibernate dibawah kelolaan JBoss group, kedua-dua pengasas awal mereka bekerja dengan JBoss sekrang ini.NHibernate pula ialah versi Hibernate yang di tulis semula dan dipadankan dengan teknologi .Net Framework (Microsoft). NHibernate core development sudah menjangkau usia 5 tahun bermula dari tahun 2004 dan sepanjang itu telah keluar banyak versi kepada pengguna. Latest versi ialah NHibernate 2.1 dan keupayaan NHibernate versi ini hampir sama dengan Hibernate 3.0&lt;br /&gt;&lt;br /&gt;Penerimaan konsep ORM dalam Java community lebih ketara berbanding didalam community .Net. Ini berdasarkan community Java telah lebih lama terlibat dan bermula dengan project-project sebegini. Project open source dalam Java community lebih ketara, cuma selepas beberapa tindakan dari community .Net yang ingin melihat perkembangan sihat dalam .Net software development dan dengan penglibatan Microsoft sendiri yang sekarang ini sudah mula boleh menerima open source sebagai cara baru memperlihatkan cara tindakan, cara berfikir yang berlainan dari kebiasaan yang diamalkan oleh developer-developer yang mendapat didikan terus dari amalan software development Microsoft. Pattern &amp;amp; Practice Microsoft sebelum ini, selalu dikritik oleh lead-lead developer yang memcabar bahawa cara tersebut tidak berapa sesuai dalam perkembangan software untuk enterprise era.&lt;br /&gt;&lt;br /&gt;Tertubuhnya community yang menggelarkan diri mereka sebagai ALT.Net ialah sebagai interpretasi mereka untuk memperkenalkan cara yang lebih bagus dari segi design, penggunaan tools, corak berfikir dalam ruang yang lebih bebas dan pengawalan life cycle software itu sendiri. NHibernate sendiri lebih mendapat tempat dalam community ini berbanding dengan Entity Framework atau Linq to SQL. Sudah semestinya mereka-mereka ini mempunyai pendapat kenapa mereka menolak product ORM Entity Framework yang diperkenalkan oleh Microsoft. sebab itu ialah EntityFramework tidak support POCO dan persistence ignorance. POCO ialah Plain Old CLR Object, iaitu simple basic class yang mengandungi setter/getter dan behavior. EntityFramework sebelum version 4.0 penggunaan entity perlulah di extend kepada persistence class dan di sinilah timbulnya masalah besar apabila hendak melakukan unit test.&lt;br /&gt;&lt;br /&gt;Perkembangan NHibernate di Malaysia sendiri cukup perlahan dan pada aku ini adalah kerana maklumat yang ada pada software developer dalam community .Net di Malaysia lebih tertumpu kepada core cara yang diperkenalkan oleh Microsoft. Mircosoft Malaysia sendiri dibawah department consulting services (Aku pernah berkerja sebagai contract developer 8 bulan) tiada pengetahuan tentang NHibernate dan seminar, training tiada langsung menyentuh tentang NHibernate. Forum-forum lain juga kurang bercerita tentang NHibernate apatah lagi bercerita tentang Unit Test, Domain Design dan Agile. Forum disini lebih terarah kepada basic programming atau "Getting Started". Aku tidak menafikan kepentingan forum yang membincangankan maklumat tersebut, tapi pada aku developer di Malaysia sendiri perlulah membuka mata dengan lebih luas dan mencari cara yang lebih efficien dalam software development. Aku tujukan pada developer yang menjadikan Microsoft sebagi platform. Developer dari community lain aku percaya mereka jika bercerita tentang software development lebih advance dari segi framework, cara dan lotaran kotak pemikiran mereka.&lt;br /&gt;&lt;br /&gt;Ada beberapa company di Malaysia yang telah pun menggunakan NHibernate didalam production code mereka, sebagai contoh Security Commision (SC), POS Malaysia,TMNet, Al-Madinah International University, IIUM (Research &amp;amp; Management). Company software development yang lain ada beberapa tapi project yang mereka handle aku tak berapa pasti. Hibernate mungkin lebih lagi wallahu'alam, mungkin member java boleh update.&lt;br /&gt;&lt;br /&gt;Aku berhasrat agar banyak lagi software company di Malaysia yang akan menggunakan NHibernate sebagai ORM mereka. Sebagai permulaan aku cuba menulis NHibernate Siri dalam usaha aku hendak memperkenalkan NHibernate, dan insyAllah kalau ada masa dan jika ada yang berminat aku rancang hendak adakan NHibernate training. Aku ada terfikir hendak berbincang dengan pihak management company aku untuk buat NHibernate Short Course tapi masih tersimpan dalam hati sahaja.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3238605847864278025?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3238605847864278025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3238605847864278025' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3238605847864278025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3238605847864278025'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/nhibernate-satu-analisis-perkembangan.html' title='NHibernate: Satu analisis perkembangan di Malaysia'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JKWF88m2xLU/ShYBZDyq4jI/AAAAAAAAANY/O55G4V5Dc7M/s72-c/NHLogoSmall.gif' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7411857950436659428</id><published>2009-05-17T01:04:00.001+08:00</published><updated>2009-05-17T01:05:43.941+08:00</updated><title type='text'>Andai ku tahu</title><content type='html'>Lirik dan lagu nie memang best..&lt;br /&gt;&lt;br /&gt;Andai kutahu&lt;br /&gt;Kapan tiba ajalku&lt;br /&gt;Ku akan memohon&lt;br /&gt;Tuhan tolong panjangkan umurku&lt;br /&gt;&lt;br /&gt;Andai kutahu&lt;br /&gt;Kapan tiba masaku&lt;br /&gt;Ku akan memohon&lt;br /&gt;Tuhan jangan Kau ambil nyawaku&lt;br /&gt;&lt;br /&gt;Aku takut&lt;br /&gt;Akan semua dosa dosaku&lt;br /&gt;Aku takut&lt;br /&gt;Dosa yang terus membayangiku&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Andai kutahu&lt;br /&gt;MalaikatMu kan menjemputku&lt;br /&gt;Izinkan aku&lt;br /&gt;Mengucap kata taubat padaMu&lt;br /&gt;&lt;br /&gt;Aku takut&lt;br /&gt;Akan semua dosa dosaku&lt;br /&gt;Aku takut&lt;br /&gt;Dosa yang terus membayangiku&lt;br /&gt;&lt;br /&gt;Ampuni aku&lt;br /&gt;Dari segala dosa dosaku&lt;br /&gt;Ampuni aku&lt;br /&gt;Menangisku bertaubat padaMu&lt;br /&gt;&lt;br /&gt;Aku manusia&lt;br /&gt;Yang takut neraka&lt;br /&gt;Namun aku juga&lt;br /&gt;Tak pantas di surga&lt;br /&gt;&lt;br /&gt;Andai kutahu&lt;br /&gt;Kapan tiba ajalku&lt;br /&gt;Izinkan aku&lt;br /&gt;Mengucap kata taubat padaMu&lt;br /&gt;&lt;br /&gt;Aku takut&lt;br /&gt;Akan semua dosa dosaku&lt;br /&gt;Aku takut&lt;br /&gt;Dosa yang terus membayangiku&lt;br /&gt;&lt;br /&gt;Ampuni aku&lt;br /&gt;Dari segala dosa dosaku&lt;br /&gt;Ampuni aku&lt;br /&gt;Menangisku bertaubat padaMu&lt;br /&gt;&lt;br /&gt;Haaa... Haaaa... Haaa... Haaaa... [2x]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7411857950436659428?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7411857950436659428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7411857950436659428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7411857950436659428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7411857950436659428'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/andai-ku-tahu.html' title='Andai ku tahu'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4059758704112872088</id><published>2009-05-15T14:19:00.002+08:00</published><updated>2009-05-15T14:32:07.300+08:00</updated><title type='text'>Silverlight</title><content type='html'>Sejak 2-3 hari kebelakangan nie, aku cari masa dalam sejam sebelah malam membaca tutorial tentang &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;. Aku boleh cakap aku tertarik dengan Galery Showcase dan Tutorial Video Series. Aku ada plan nak write Silverlight Application combine dengan ASP.Net MVC masih belum sampai lagi cita-cita tersebut. ASP.Net MVC functionality pun masih banyak yang aku tak tahu.&lt;br /&gt;&lt;br /&gt;InsyAllah aku nak sambung tutorial tentang NHibernate selepas ini. Aku rasa selain dari tambahan pemahaman detail tentang NHIbernate, ianya boleh jadikan sumber untuk aku bagi pada team members aku yang masih belum tahu pasal NHibernate atau pun team member yang baru join.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4059758704112872088?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4059758704112872088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4059758704112872088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4059758704112872088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4059758704112872088'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/silverlight.html' title='Silverlight'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6927866780238824284</id><published>2009-05-14T14:53:00.002+08:00</published><updated>2009-05-14T15:03:32.928+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Racing'/><category scheme='http://www.blogger.com/atom/ns#' term='Car'/><title type='text'>Kalau aku ada duit cash lebih, nie kereta yang aku nak beli</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_JKWF88m2xLU/SgvB6NOYO9I/AAAAAAAAANQ/rYC6nG5rFcQ/s1600-h/dreamcar.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 169px;" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SgvB6NOYO9I/AAAAAAAAANQ/rYC6nG5rFcQ/s320/dreamcar.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5335571389277027282" /&gt;&lt;/a&gt;&lt;br /&gt;Aku berangan je nie, tapi memang aku cukup minat dengan design kereta nie&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6927866780238824284?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6927866780238824284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6927866780238824284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6927866780238824284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6927866780238824284'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/kalau-aku-ada-duit-cash-lebih-nie.html' title='Kalau aku ada duit cash lebih, nie kereta yang aku nak beli'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JKWF88m2xLU/SgvB6NOYO9I/AAAAAAAAANQ/rYC6nG5rFcQ/s72-c/dreamcar.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2309546971235515786</id><published>2009-05-13T00:23:00.003+08:00</published><updated>2009-05-24T08:28:09.588+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>NHibernate Siri: Asas - Part 1 of N</title><content type='html'>Artikel aku yang lepas tentang NHibernate hanya menyentuh sedikit tentang NHibernate secara umum. Aku fokuskan kepada bagaimana hendak mula develop simple app dengan NHibernate.&lt;br /&gt;&lt;br /&gt;Kali ini aku nak masuk detail kepada asas NHibernate, tapi aku plan tak nak sentuh teori tentang ORM atau teori NHibernate itu sendiri. Aku nak start direct asas kepada NHibernate technical.&lt;br /&gt;&lt;br /&gt;Secara dasarnya element penting dalam NHibernate ialah Domain object, Domain Mapping dan juga Session.&lt;br /&gt;&lt;br /&gt;Untuk mula aku akan cadangkan project structure yang aku akan buat ialah seperti ini&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- NS.Domain&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- NS.Infrastructure&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- NS.Service&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- NS.Tests&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_JKWF88m2xLU/SgkFfKmQxnI/AAAAAAAAAM4/KLlBxIoumcQ/s1600-h/ns.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5334801266575984242" style="width: 283px; height: 183px;" alt="" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SgkFfKmQxnI/AAAAAAAAAM4/KLlBxIoumcQ/s320/ns.PNG" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Domain Object&lt;/span&gt;&lt;br /&gt;Domain object ialah normal class yang ada property (set,get) dan method. Disini letaknya business behaviour dan terpulang pada kita nak design domain object itu bentuknya bagaimana. Ia boleh menjadi complex atau menjadi simple mengikut context yang didefine semasa process sesi modeling. Untuk tutorial ini, aku akan define simple business object iaitu Product. Product class akan di create di dalam NS.Domain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_JKWF88m2xLU/SgkJPJOYe8I/AAAAAAAAANA/GTMH8BkZvdo/s1600-h/ns1.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5334805389375994818" style="width: 162px; height: 144px;" alt="" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SgkJPJOYe8I/AAAAAAAAANA/GTMH8BkZvdo/s320/ns1.PNG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;namespace&lt;/span&gt; NS.Domain&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; Product&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; Name { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; Description { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; decimal Price { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Selepas create domain class ini, next ialah mapping domain object ini untuk persistence ke dalam database. NHibernate akan gunakan mapping ini sebagai panduan untuk berinteraksi dengan persistence medium (Database).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Domain Mapping&lt;/strong&gt;&lt;br /&gt;Untuk mapping domain object ada beberapa cara untuk melakukannya, pada kebiasaan ialah dengan create xml file Product.hbm.xml&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"1.0"&lt;/span&gt; encoding=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"utf-8"&lt;/span&gt; ?&amp;gt;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"urn:nhibernate-mapping-2.2"&lt;/span&gt; assembly=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"FirstSolution"&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;namespace&lt;/span&gt;=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"FirstSolution.Domain"&lt;/span&gt;&amp;gt;   &lt;br /&gt;&amp;lt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Product"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;id name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Id"&lt;/span&gt;&amp;gt;     &lt;br /&gt;     &amp;lt;generator &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt;=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"guid"&lt;/span&gt; &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;/&lt;/span&gt;&amp;gt;   &lt;br /&gt;    &amp;lt;/id&amp;gt;   &lt;br /&gt; &amp;lt;property name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Name"&lt;/span&gt; &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;/&lt;/span&gt;&amp;gt;&lt;br /&gt; &amp;lt;property name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Description"&lt;/span&gt; &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;/&lt;/span&gt;&amp;gt;&lt;br /&gt; &amp;lt;property name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Price"&lt;/span&gt; &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;/&lt;/span&gt;&amp;gt; &lt;br /&gt;&amp;lt;/&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt;&amp;gt; &lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok, kali ini aku tidak akan menggunakan xml kerana agak susah untuk write markup sebaliknya aku akan guna fluent mapping dalam project FluentNHibernate. Sebelum itu ada satu lagi cara untuk mapping ialah menggunakan property attribute&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    [Class]&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; AACatalog&lt;br /&gt;   {&lt;br /&gt;       [Property]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; virtual &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; Version { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;       [ManyToOne(Name &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Batery"&lt;/span&gt;, Lazy &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; Laziness.Proxy, Cascade &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; CascadeStyle.None, OuterJoin=OuterJoinStrategy.False)]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; virtual Batery Batery { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;       [Bag(Name &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"BateryCatalogs"&lt;/span&gt;, Lazy &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;, Generic &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;, Inverse &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;, Cascade &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; CascadeStyle.AllDeleteOrphan)]&lt;br /&gt;       [Key(1, Column &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"AAId"&lt;/span&gt;)]&lt;br /&gt;       [OneToMany(2, Class &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"BateryCatalogs"&lt;/span&gt;, ClassType &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; typeof(BateryCatalogs))]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; virtual IList&amp;lt;BateryCatalog&amp;gt; BateryCatalogs&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;;&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Untuk domain class Product aku akan create ProductMap didalam NS.Domain dan aku letak didalam folder Mapping seperti ini. Pastikan juga letakkan reference FluentNhibernate.dll di reference project tree.Class ProductMap ialah seperti dibawah. Ada sedikit penambahan di class Product dimana aku tambah property untuk Id, secara umum unutk mapping pada persistence class yang simple kita banyak boleh gunakan default attribute pada nhibernate mapping, dimana nhibernate engine akan "infer" colum name, colum type etc. Sebagai conoth jika kita tak define nama colum nhibernate mapping akan ambil property name sebagai nama column&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; FluentNHibernate.AutoMap;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;namespace&lt;/span&gt; NS.Domain.Mapping&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; ProductMap : AutoMap&amp;lt;Product&amp;gt;&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; ProductMap()&lt;br /&gt;       {&lt;br /&gt;           Id(x &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; x.Id).GeneratedBy.GuidComb();&lt;br /&gt;           Map(x &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; x.Name);&lt;br /&gt;           Map(x &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; x.Description);&lt;br /&gt;           Map(x &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; x.Price).CustomSqlTypeIs(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"decimal"&lt;/span&gt;);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok selesai dengan mapping domain class, langkah seterusnya ialah untuk test business domain dengan run configuration dan table schema.Class dibawah ialah helper class yang akan digunakan didalam test.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; NHibernateInMemoryConfiguration&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;protected&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;static&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; DbFile &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"db"&lt;/span&gt;;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;protected&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;static&lt;/span&gt; ISessionFactory sf &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;null&lt;/span&gt;;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;protected&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;static&lt;/span&gt; Configuration config &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;static&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; InitializeConfiguration(&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; assemblyName)&lt;br /&gt;       {&lt;br /&gt;           sf &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; Fluently.Configure()&lt;br /&gt;               .Database(SQLiteConfiguration.Standard&lt;br /&gt;                   .UsingFile(DbFile)&lt;br /&gt;                   &lt;span style="color: Green;font-family:Courier New;font-size:11;color:White;"   &gt;//.ProxyFactoryFactory("NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle")&lt;br /&gt;&lt;/span&gt;                    .ShowSql())&lt;br /&gt;               .Mappings(m &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; m&lt;br /&gt;                   .FluentMappings&lt;br /&gt;                   .AddFromAssembly(Assembly.Load(assemblyName)))&lt;br /&gt;               .ExposeConfiguration(SetConfiguration)&lt;br /&gt;               .BuildSessionFactory();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;static&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; SetConfiguration(Configuration cfg)&lt;br /&gt;       {&lt;br /&gt;           config &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; cfg;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; CreateSchema()&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;if&lt;/span&gt; (File.Exists(DbFile))&lt;br /&gt;               File.Delete(DbFile);&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;new&lt;/span&gt; SchemaExport(config).Create(&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;, &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok selesai dengan class ini, masa unutk run test.Aku akan buat 2 class satu ialah base class iaitu RepositoryBaseTest.cs dan ProductTest.cs&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; RepositoryBaseTest : NHibernateInMemoryConfiguration&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;protected&lt;/span&gt; ISession session;&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;&lt;br /&gt;       [TestFixtureSetUp]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; ConfigurationInitialization()&lt;br /&gt;       {&lt;br /&gt;           InitializeConfiguration(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"NS.Domain"&lt;/span&gt;);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       [SetUp]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; Setup()&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;this&lt;/span&gt;.CreateSchema();&lt;br /&gt;       }&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    [TestFixture]&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; ProductTest:RepositoryBaseTest&lt;br /&gt;   {&lt;br /&gt;       [Test]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; Should_save_Product()&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt;(var s &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; sf.OpenSession())&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt;(var tx &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; s.BeginTransaction())&lt;br /&gt;           {&lt;br /&gt;               Product p &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;new&lt;/span&gt; Product { Name &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"A"&lt;/span&gt;, Description &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"B"&lt;/span&gt;, Price &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; Convert.ToDecimal(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"10.0"&lt;/span&gt;) };&lt;br /&gt;               s.Save(p);&lt;br /&gt;               tx.Commit();&lt;br /&gt;           }&lt;br /&gt;      &lt;br /&gt;       }&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_JKWF88m2xLU/SgqPrqIdxFI/AAAAAAAAANI/_fbbAkWZsQg/s1600-h/ns2.PNG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 56px;" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SgqPrqIdxFI/AAAAAAAAANI/_fbbAkWZsQg/s320/ns2.PNG" alt="" id="BLOGGER_PHOTO_ID_5335234688780715090" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2309546971235515786?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2309546971235515786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2309546971235515786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2309546971235515786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2309546971235515786'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/nhibernate-siri-asas.html' title='NHibernate Siri: Asas - Part 1 of N'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JKWF88m2xLU/SgkFfKmQxnI/AAAAAAAAAM4/KLlBxIoumcQ/s72-c/ns.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3469588896490122798</id><published>2009-05-12T11:19:00.003+08:00</published><updated>2009-05-12T11:31:48.949+08:00</updated><title type='text'>Sarapan pagi harga macam kat hotel</title><content type='html'>Aku terkejut pagi nie, cukup terkejut, semalam terkejut sebab MB haram Zambry tu tak layak jadi MB tapi terkejut suka/syukur. Pagi nie aku terkejut sebab harga sarapan nasi goreng pagi + telur mata dan teh o ais limau beharga RM 8.50. dah la masa tu cash kat tangan aku ada le sepuluh ringgit aja. Sebab tu masa nak ambil ayam berat je hati aku nak ambik, SubhanAllah.. aku tak jadi ambik, kalau tak sure RM 15 aku kena bayar, sure aku berhutang lagi 5 ringgit :) Masa dia cakap RM 8.50 tu, tergerak lah mulut aku nak tanya semula takut dia salah kira ke dia nampak telur mata tu macam ayam goreng, tapi aku tak terkata, aku ambil duit terus jalan.&lt;br /&gt;&lt;br /&gt;Aku budget biasanya makan pagi around kurang dari RM5 tu pun biasanya aku sarapan dengan anak aku sebelum hantar dia ke tadika, hari nie aku tak sarapan dengan dia, beli kan roti je kat dia so aku tak plan nak sarapan, bila nak parking kereta duit syiling aku tak cukup, so aku decide gi sarapan dulu.&lt;br /&gt;&lt;br /&gt;Aku agak je lah kos yang jadi sampai 8.50 ialah &lt;br /&gt;a) Nasi goreng pagi yang dah sejuk RM 4.00&lt;br /&gt;b) Telur mata RM 2.00&lt;br /&gt;c) Teh O ais limau 2.50&lt;br /&gt;&lt;br /&gt;Sekian yang masih terkejut&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3469588896490122798?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3469588896490122798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3469588896490122798' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3469588896490122798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3469588896490122798'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/sarapan-pagi-harga-macam-kat-hotel.html' title='Sarapan pagi harga macam kat hotel'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-899173917278997618</id><published>2009-05-09T17:54:00.002+08:00</published><updated>2009-05-09T19:18:11.575+08:00</updated><title type='text'>Offer</title><content type='html'>Alhamdulillah , walau ekonomi gawat aku masih lagi dapat 3 offer untuk join another company dan sudah tentu offer yang diberi pun agak lumayan. Cuma hati aku masih belum terbuka untuk kemana-mana masih lagi dan masih setia di company M. Setakat ini aku suka enviroment dan tugas yang aku pikul walau pun kenkadang datang keributan dari pelbagai arah, tapi insyAllah aku yakin dengan rezeki yang Allah telah tetapkan.&lt;br /&gt;&lt;br /&gt;Aku suka bekerja dengan team yang aku handle sekarang ini. Pihak top management insyAllah nampak macam ada perubahan. Consultation/freelance project pun aku dapat banyak juga offer tapi aku bukan boleh nak buat semua. Memang kalau ikutkan kata hati nak je ambik semua, tapi nanti aku yang merana, masa untuk family aku kena ada. Anak aku dah semakin membesar, persekitaran luar semakin mencabar, kalau aku busy sangat dengan kerja, terabai lak tanggungjawab aku dengan dia orang. Zaman Najib perintah lagi le haru, bodoh tahap gaban le..ishh geram aku. One Malaysia konon... part agama anak bagi ibubapa yanag memeluk Islam pun tak boleh nak handle dengan cara berhikmah nak create slogan One Malaysia. Mana pergi slogan Islam Hadhari? tu pun tak boleh nak jelaskan dengan clear.Ok terbabas sikit pasal politik, sakit hati tengok politik Malaysia akhir-akhirnie macam badut kena selsema BABI.&lt;br /&gt;&lt;br /&gt;So kalau ada yang aku rasa member2 boleh buat selalunya aku akan bagi fully kat dia orang untuk buat kecualilah memang aku diperlukan juga untuk monitor progress project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-899173917278997618?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/899173917278997618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=899173917278997618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/899173917278997618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/899173917278997618'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/offer.html' title='Offer'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3468573451692518524</id><published>2009-05-03T02:16:00.002+08:00</published><updated>2009-05-03T02:21:53.167+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kerja'/><category scheme='http://www.blogger.com/atom/ns#' term='outsource'/><title type='text'>4 individu C# freelance fulltime or outsourcing company</title><content type='html'>Aku hanya menyampaikan peluang pada sesiapa yang ada company atau tahu kawan-kawan dia punya company yang ada buat outsourcing untuk developer c#, salah sebuah company di KL memerlukan khidmat 4 orang C# developer fulltime selama 4 bulan. Seorang dibayar dalam range RM7K per month. Kalau ada individu yang berminat pun boleh juga. Hantar maklumat kepada aku then insyAllah aku forwardkan kepada company tu. Email kepada irwanazam@gmail.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3468573451692518524?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3468573451692518524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3468573451692518524' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3468573451692518524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3468573451692518524'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/4-individu-c-freelance-fulltime-or.html' title='4 individu C# freelance fulltime or outsourcing company'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5908157782550427712</id><published>2009-05-02T01:33:00.005+08:00</published><updated>2009-05-23T04:25:57.060+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>NHibernate Siri: Macam mana nak start</title><content type='html'>Aku dah beberapa kali nak tulis tentang Nibernate tapi selalu je tak habis siri tu. Dan kebanyakkan pengunjung yang datang direct dari google search masuk di sini adalah berkaitan NHibernate. Sebenarnya aku kena tulis supaya aku lebih faham dan tak lupa part basic dan untuk kemudian hari senang untuk tengok balik basic tentang NHibernate nie.&lt;br /&gt;&lt;br /&gt;Ok untuk bermula basic sekali ialah kena install NHibernate samaada download yang binary atau dari source file dan kemudian compile semula. Aku rasa untuk yang simple download je yang binary.&lt;br /&gt;&lt;br /&gt;1. Download NHibernate binary distribution&lt;br /&gt;&lt;a href="http://sourceforge.net/project/downloading.php?groupname=nhibernate&amp;amp;filename=NHibernate-2.0.1.GA-bin.zip&amp;amp;use_mirror=nchc"&gt;NHibernate&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Download NUnit&lt;br /&gt;&lt;a href="http://www.nunit.org/index.php?p=download"&gt;NUnit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Download FluentNHibernate&lt;br /&gt;&lt;a href="http://fluentnhibernate.org/downloads"&gt;FluentNHibernate&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ok ready&lt;/span&gt;&lt;br /&gt;Install kesemua component/libarary tersebut. Aku akan guna SQL Lite untuk testing persistence object. So tak perlu susah-susah nak setup database SQL Server etc. 3 perkara penting bila test persistence object ialah check save/update atau tidak dalam database, query return seperti dikehendaki dan cascade bila delete.&lt;br /&gt;&lt;br /&gt;Ok jika semua dah install ready untuk coding. Open Visual Studio atau Express Edition dan create InMemoryPersistenceTest.cs&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; InMemoryPersistenceTest&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; ISessionFactory sf &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;null&lt;/span&gt;;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;private&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;const&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; DbFile &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"firstProgram.db"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; InMemoryPersistenceTest(&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; assemblyName)&lt;br /&gt;       {&lt;br /&gt;           sf &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; Fluently.Configure()&lt;br /&gt;               .Database(SQLiteConfiguration.Standard.UsingFile(DbFile)&lt;br /&gt;               .ProxyFactoryFactory(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle"&lt;/span&gt;)&lt;br /&gt;               .ShowSql()&lt;br /&gt;               )&lt;br /&gt;&lt;br /&gt;               .Mappings(m &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; m&lt;br /&gt;                   .FluentMappings&lt;br /&gt;                   .AddFromAssembly(Assembly.Load(assemblyName)))&lt;br /&gt;               .ExposeConfiguration(BuildSchema)&lt;br /&gt;               .BuildSessionFactory();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; BuildSchema(Configuration cfg)&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;if&lt;/span&gt; (File.Exists(DbFile))&lt;br /&gt;               File.Delete(DbFile);&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;new&lt;/span&gt; SchemaExport(cfg)&lt;br /&gt;               .Create(&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;, &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;true&lt;/span&gt;);&lt;br /&gt;       }&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Aku guna FluentNHibernate untuk setting NHibernate configuration. Next step aku create file Person.cs&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;namespace&lt;/span&gt; NHibernateSeries1.Domain&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; Person&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; virtual Guid Id { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; virtual &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;string&lt;/span&gt; Name { &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;set&lt;/span&gt;; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;get&lt;/span&gt;; }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; PersonMap : AutoMap&amp;lt;Person&amp;gt;&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; PersonMap()&lt;br /&gt;       {&lt;br /&gt;           WithTable(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Person"&lt;/span&gt;);&lt;br /&gt;           Id(x &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; x.Id).GeneratedBy.Guid();&lt;br /&gt;           Map(x &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt;&amp;gt; x.Name);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok bila dah create domain untuk Person,perlu ada mapping, aku guna facility yang ditawarkan dalam FluentNhibernate untuk buat AutoMap. Masa untuk lakukan testing.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;namespace&lt;/span&gt; NHibernateSeries1&lt;br /&gt;{&lt;br /&gt;   [TestFixture]&lt;br /&gt;   &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;class&lt;/span&gt; PersonTest:BaseTest&lt;br /&gt;   {&lt;br /&gt;       Guid personId;&lt;br /&gt;       [Test]&lt;br /&gt;       &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;public&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;void&lt;/span&gt; SavePerson()&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; (var s &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; sf.OpenSession())&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; (var tx &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; s.BeginTransaction())&lt;br /&gt;           {&lt;br /&gt;               Person p &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;new&lt;/span&gt; Person { Name &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Azam"&lt;/span&gt; };&lt;br /&gt;               s.Save(p);&lt;br /&gt;               personId &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; p.Id;&lt;br /&gt;               tx.Commit();&lt;br /&gt;               s.Close();&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; (var s &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; sf.OpenSession())&lt;br /&gt;           &lt;span style="color: Blue;font-family:Courier New;font-size:11;color:White;"   &gt;using&lt;/span&gt; (var tx &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; s.BeginTransaction())&lt;br /&gt;           {&lt;br /&gt;               var p &lt;span style="color: Red;font-family:Courier New;font-size:11;color:White;"   &gt;=&lt;/span&gt; s.Get&amp;lt;Person&amp;gt;(personId);&lt;br /&gt;               Assert.AreEqual(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(237, 237, 237);font-family:Courier New;font-size:11;"  &gt;"Azam"&lt;/span&gt;,p.Name);&lt;br /&gt;               tx.Commit();&lt;br /&gt;           }&lt;br /&gt;          &lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Alhamdulillah cukup mudah tanpa setup database pun. Bila run insyAllah dapatlah warna PAS (hijau) ertinya berjaya hehehe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5908157782550427712?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5908157782550427712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5908157782550427712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5908157782550427712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5908157782550427712'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/05/nhibernate-siri-macam-mana-nak-start.html' title='NHibernate Siri: Macam mana nak start'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8289661360197055056</id><published>2009-04-30T02:11:00.003+08:00</published><updated>2009-04-30T02:50:38.402+08:00</updated><title type='text'>90% Application adalah CRUD process</title><content type='html'>Percaya tak bahawa 90% application/system adalah berkaitan simple CRUD (Create,Read,Update and Delete).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8289661360197055056?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8289661360197055056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8289661360197055056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8289661360197055056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8289661360197055056'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/90-application-adalah-crud-process.html' title='90% Application adalah CRUD process'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1992283130246171252</id><published>2009-04-30T00:50:00.001+08:00</published><updated>2009-04-30T11:46:21.907+08:00</updated><title type='text'>Simple Design</title><content type='html'>Aku masih tak dapat lari dari bila design memasukkan element mistik dalam design aku? Apa design ada element mistik dan seram?..(Terpengaruh dengan cerita seram yang kerap ditayangkan di TV). Tak lah sebenarnya apa yang aku nak cakapkan ialah bila design result akhirnya akan menjadi komplex kerana menjadi kebiasaan aku macam tu.&lt;br /&gt;&lt;br /&gt;Ntah kali keberapa aku pasang niat untuk cuba design menggunakan konsep KISS dan YAGNI, walau aku faham kedua-dua konsep nie, tapi bila masa aku design atau menulis code sering aku terlupa akan guideline ini. Design kalau terlalu syok sendiri akan menyusahkan orang lain aku cukup setuju pendapat ini. Salah seorang teammate aku pernah tegur, kenapa aku bila design fikirkan benda yang complex?.. Jawapannya ialah kerana aku adalah student graduated in Electrical Engineering yang dah terbiasa dengan complex formula hehehe boleh ke bagi reason macam tu?? Kaukan dah grade 11 thn lepas maner ingat lagi formula tu semua..tipu je tu..hehehe ....habis tu Mr H tu pun sama grade dalam EE kenapa dia design ok je?Sebab dia grade zaman tu IC memory baru berapa je/conductor/Circuit board layer baru ada selapis je zaman tu, zaman aku dah berlapis-lapis macam kuih lapis so nak kira current masuk dan current keluar sampai air liur yang terkeluar tau, tu belum nak kira voltage, yang tak betul pun ramai sebab salah calculate voltage.. pergh , so tu lah reason kuat yang aku boleh bagi untuk mempertahankan diri :)&lt;br /&gt;&lt;br /&gt;Teguran yang membina dan aku akui kebenaran tersebut...sebab itu bagus jika ada orang lain yang review code dan design kita, kita jangan mengharapkan orang akan setuju dengan design kita kerana kita tidak akan banyak belajar jika tiada kritikan kecuali memang Allah dah bagi ilmu laduni (ilmu yang dapat tanpa belajar dari mana-mana sumber, ilmu nie untuk semua bidang atau bidang agama sahaja?) kena tanya member-member yang expert bidang kerohanian.&lt;br /&gt;&lt;br /&gt;Jadi majulah simple domain design untuk kesihatan anda, rakan-rakan anda dan alam sekitar..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1992283130246171252?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1992283130246171252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1992283130246171252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1992283130246171252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1992283130246171252'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/simple-design.html' title='Simple Design'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1022215153576074464</id><published>2009-04-29T16:26:00.003+08:00</published><updated>2009-04-29T16:31:07.485+08:00</updated><title type='text'>Muhammad 'Umar Hafiy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/SfgP3_tDYjI/AAAAAAAAAMQ/r4Xi1xjXrgY/s1600-h/umarhafiy.jpg"&gt;&lt;img style="cursor: pointer; width: 174px; height: 203px;" src="http://1.bp.blogspot.com/_JKWF88m2xLU/SfgP3_tDYjI/AAAAAAAAAMQ/r4Xi1xjXrgY/s320/umarhafiy.jpg" alt="" id="BLOGGER_PHOTO_ID_5330027613660602930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yaya hero sudah datang sekali dia tarik dua-dua kakak dia tumbang daaa...... :)Tak boleh tengok kakak dia minum air yougurt sure nak... sampai habis dia minum manalah si kakak tu tak menangis..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1022215153576074464?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1022215153576074464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1022215153576074464' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1022215153576074464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1022215153576074464'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/muhammad-umar-hafiy.html' title='Muhammad &apos;Umar Hafiy'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JKWF88m2xLU/SfgP3_tDYjI/AAAAAAAAAMQ/r4Xi1xjXrgY/s72-c/umarhafiy.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3935044366210015073</id><published>2009-04-29T16:14:00.005+08:00</published><updated>2009-04-29T16:22:53.793+08:00</updated><title type='text'>Deeni Husna</title><content type='html'>&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_JKWF88m2xLU/SfgMlHE6uVI/AAAAAAAAAMA/MfJqhuAIja8/s1600-h/husna.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330023990687349074" style="width: 320px; height: 199px;" alt="" src="http://1.bp.blogspot.com/_JKWF88m2xLU/SfgMlHE6uVI/AAAAAAAAAMA/MfJqhuAIja8/s320/husna.JPG" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;Posing bila depan kamera&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgMk4PIdVI/AAAAAAAAAL4/jPDPmXibC6o/s1600-h/husna2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330023986703660370" style="width: 189px; height: 320px;" alt="" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgMk4PIdVI/AAAAAAAAAL4/jPDPmXibC6o/s320/husna2.JPG" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;Masa baru-baru pandai nak berjalan&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgNvz_0yoI/AAAAAAAAAMI/oif2IkFn6c4/s1600-h/husna3.jpg"&gt;&lt;img style="cursor: pointer; width: 225px; height: 320px;" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgNvz_0yoI/AAAAAAAAAMI/oif2IkFn6c4/s320/husna3.jpg" alt="" id="BLOGGER_PHOTO_ID_5330025274055903874" border="0" /&gt;&lt;/a&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Anak kedua aku Deeni Husna, independent, berani dan suka kacau kakak dan adik dia... dia lak suka nak pergi sekolah..:)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3935044366210015073?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3935044366210015073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3935044366210015073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3935044366210015073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3935044366210015073'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/deeni-husna.html' title='Deeni Husna'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JKWF88m2xLU/SfgMlHE6uVI/AAAAAAAAAMA/MfJqhuAIja8/s72-c/husna.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7561273766958621138</id><published>2009-04-29T15:42:00.005+08:00</published><updated>2009-04-29T16:01:38.169+08:00</updated><title type='text'>Damia Bisyri</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgGpBdTy9I/AAAAAAAAALw/e1ni4giyHJw/s1600-h/PA130002.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330017460828752850" style="WIDTH: 240px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgGpBdTy9I/AAAAAAAAALw/e1ni4giyHJw/s320/PA130002.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Masa pagi raya&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgGGla9h9I/AAAAAAAAALo/fV9PqPiqzEQ/s1600-h/P1010077.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330016869187160018" style="WIDTH: 240px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SfgGGla9h9I/AAAAAAAAALo/fV9PqPiqzEQ/s320/P1010077.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Dalam walker&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_JKWF88m2xLU/SfgFYOxJt4I/AAAAAAAAALg/gQFEW1fiKtk/s1600-h/PA150077.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5330016072832235394" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 240px" alt="" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SfgFYOxJt4I/AAAAAAAAALg/gQFEW1fiKtk/s320/PA150077.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Bergaya di sofa baru&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anak sulong aku, berumur hampir 4 tahun.  Banyak celoteh dan banyak sangat pertanyaan,suruh aku beli kereta baru yang ada gelungsor dan peti ais dan dalam peti ais tu ada air yogurt and vitagen anggur... Selalu tanya hari nie pergi sekolah ke tidak..kalau aku atau wife aku kata tak gi sekolah perasaan dia "Bahagianya Hidup".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7561273766958621138?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7561273766958621138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7561273766958621138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7561273766958621138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7561273766958621138'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/damia-bisyri.html' title='Damia Bisyri'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JKWF88m2xLU/SfgGpBdTy9I/AAAAAAAAALw/e1ni4giyHJw/s72-c/PA130002.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8396841126284354234</id><published>2009-04-24T14:23:00.004+08:00</published><updated>2009-04-27T07:37:28.884+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Peraturan TDD yang kedua</title><content type='html'>Peraturan pertama ada di &lt;a href="http://ryzam.blogspot.com/2009/04/peraturan-sekolah-tdd-yang-pertama.html"&gt;sini&lt;/a&gt;&lt;br /&gt;Setiap perbuatan akan dipertanggungjawabkan. Apabila object tersebut melakukan sesuatu tugas mesti ada kesan samaada perbuatan itu merupakan arahan(command) atau juga permintaan(query). Kejayaannya bila anda ada kawalan penuh dan anda memang sudah menjangkakan kesan yang terjadi dari perbuatan tersebut.&lt;br /&gt;&lt;br /&gt;Maka peraturannya ialah check semua kesan gegaran berapa skala richter.&lt;br /&gt;&lt;br /&gt;Kalau aku tolak kau dari bangunan nie ke bawah: Kesannya dengan izan Allah.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1. Kau mati&lt;br /&gt;2. Aku suka hati (kejam betul..)&lt;br /&gt;3. Harta kau aku yang punya&lt;br /&gt;4. Aku kena dakwa (bersalah atau tidak tengok cable aku macam mana..:)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Ini ialah kesan dan memang tu &lt;strong&gt;jangkaan&lt;/strong&gt; pada keadaan normal atau dipanggil Assert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8396841126284354234?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8396841126284354234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8396841126284354234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8396841126284354234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8396841126284354234'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/paraturan-tdd-yang-kedua.html' title='Peraturan TDD yang kedua'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4141133932557811729</id><published>2009-04-24T09:26:00.004+08:00</published><updated>2009-04-24T11:45:13.580+08:00</updated><title type='text'>Single Responsibility Principle berguna dalam design Interface</title><content type='html'>Ada satu lagi pattern/principal yang insyAllah dilain masa aku akan cerita iaitu Interface Segregation Principle. Cuma apa yang aku nak cerita ada sedikit kena mengena dengan Interface Segregation Principle tapi dari sudut Single Responsility Principle.&lt;br /&gt;&lt;br /&gt;Sebelum nie aku ada menulis &lt;a href="http://ryzam.blogspot.com/2009/04/transaformasi-kepada-single.html"&gt;Transformasi kepada Single Responsibility Principle&lt;/a&gt; dimana pada pendapat aku untuk mencapai konsep pattern tersebut groupkan tugas-tugas yang related/berkaitan kepada satu class. Cara yang sama boleh digunakan juga pada class yang baru kita asingkan.&lt;br /&gt;&lt;br /&gt;Konsep mengroupkan tugas yang berkaitan kedalam class yang lain diguna pakai juga kepada Interface.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4141133932557811729?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4141133932557811729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4141133932557811729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4141133932557811729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4141133932557811729'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/single-responsibility-principle-berguna.html' title='Single Responsibility Principle berguna dalam design Interface'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1768564590612058572</id><published>2009-04-24T08:40:00.003+08:00</published><updated>2009-04-24T09:03:44.258+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Islam'/><category scheme='http://www.blogger.com/atom/ns#' term='Istiqamah'/><title type='text'>Istiqamah dalam memboikot</title><content type='html'>Aku dan family aku dah lama tak makan-makan di McDonalds atau KFC, dah hampir 5 bulan kami sekeluarga pertahankan diri dari membeli makananan di kedua-dua company ini. Aku percaya pada konsep boikot walau satu product impactnya tetap ada kalau semua umat Islam ada matlamat yang sama. Cuma ntah macam mana semalam masa bawa anak-anak aku jalan, kami lalu di depan kedai KFC, agaknya baunya manarik kot, so anak aku kata kat aku.. "Abah nak makan KFC", aku bagi tahu dia untuk cari makan dikedai lain je.. anak aku baru berusia hampir 4 tahun, dia merengek nak makan ayam KFC gak. Aku tak sampai hatilak tengok dia dah menangis.. so wife aku kata jom cari yang drive thru je. Pada aku ada juga kejayaan dalam memboikot selama hampir 5 bulan, aku kena realistik dan cuba didik anak aku sedikit-sedikit, cuma yang pasti McDonalds anak-anak aku memang dah tak nak, sebab aku pernah bagi tahu tu orang jahat punya company:), KFC aku tak cakap cam tu pulak :).. salah ke aku cakap macam tu?&lt;br /&gt;&lt;br /&gt;Barang-barang keperluan lain yang boleh diganti dgn product Malaysia atau Muslim, kami cuba sikit-sikit, contohnya ubat gigi aku replace dengan ubat gigi mukmin junior dan yang kayu sugi, Nescafe aku dah stop terus beli, sebab tak berapa minat dan sebelum-sebelum nie kalau beli Nescafe memang boleh tahan lebih dari 3 bulan.&lt;br /&gt;&lt;br /&gt;Ada yang boleh direplace dengan product yang lebih kurang sama quality dan ada juga product yang orang Muslim belum keluarkan lagi, dan keperluan tu penting yang tidak dapat tidak kena terus membeli.&lt;br /&gt;&lt;br /&gt;Cuma satu kalau boleh teruskanlah memboikot apa-apa yang boleh. Satu product pun cukup memadai sebenarnya atleast ada juga sumbangan kearah kekuatan permintaan umat Islam dalam jual beli.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1768564590612058572?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1768564590612058572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1768564590612058572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1768564590612058572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1768564590612058572'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/istiqamah-dalam-memboikot.html' title='Istiqamah dalam memboikot'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6484024577232514342</id><published>2009-04-23T02:12:00.003+08:00</published><updated>2009-04-23T02:57:33.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit Test'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Aku mula menyukai AAA</title><content type='html'>AAA (Arrange-Act-Assert), baru je menceburkan diri dan membiasakan diri dengan cara AAA, tak pasti sejauh mana kebagusan dan resultnya nanti, masih awal untuk mengatakan cara ini yang terbaik, cuma lebih clear sedikit dari cara yang lama.&lt;br /&gt;&lt;br /&gt;AAA masih tergolong dalam golongan pemikiran BDD. Sebelum ini aku guna BDD cuma dengan different cara, dimana setiap method (When,Because,Act) akan diberi class sendiri dan apabila penggunaan terhadap sesuatu function berlaku akan adalah beberapa Assert yang terjadi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6484024577232514342?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6484024577232514342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6484024577232514342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6484024577232514342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6484024577232514342'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/aku-mula-menyukai-aaa.html' title='Aku mula menyukai AAA'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6074975471556572201</id><published>2009-04-23T01:40:00.003+08:00</published><updated>2009-04-23T02:58:09.557+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Islam'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Iman &amp; Hidayah</title><content type='html'>Baca entry dari 1kHz berkaitan &lt;a href="http://ikhwanhayat.net/post/Sampai-Hidayah.aspx"&gt;Hidayah&lt;/a&gt; , terasa mereka yang convert ke Islam kerana Allah nie iman dia orang lagi tinggi dari kita, ujian yang mereka hadapi memang berat yang kalau kita Islam sejak lahir mungkin tak mampu hendak hadapi.&lt;br /&gt;&lt;br /&gt;Perbezaan ketara antara orang yang diberi dengan orang yang mencari.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6074975471556572201?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6074975471556572201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6074975471556572201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6074975471556572201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6074975471556572201'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/iman-hidayah.html' title='Iman &amp; Hidayah'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8354609636200548214</id><published>2009-04-22T13:50:00.005+08:00</published><updated>2009-04-23T09:05:34.775+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SRP'/><category scheme='http://www.blogger.com/atom/ns#' term='Refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='SOLID'/><title type='text'>Transaformasi kepada Single Responsibility Principal</title><content type='html'>Post aku sebelum nie ada menyentuh tentang kepentingan pattern SRP dan OCP dalam mencorakkan design domain dan sewaktu coding. Tapi bila aku bercerita tentang kepentingan pattern jika tidak diterjemahkan kedalam code dan real implemantation agak payah hendak mendapat gambaran yang jelas dan kebaikan pattern tersebut. Aku ada berbincang dengan kawan seangkatan berkaitan kedua-dua pattern dan apa yang pasti SRP merupakan pattern yang agak tricky. Jadi aku cuba terangkan dengan layman word dan code.&lt;br /&gt;&lt;br /&gt;Aku tiada banyak idea nak bagi contoh dan aku pun tak pasti contoh yang aku bawa ini bagus atau tidak, ini juga menjadi kayu pengukur untuk aku mengetahui kefahaman aku dalam pattern2 ini.&lt;br /&gt;&lt;br /&gt;Apa dia SRP?..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Single Responsibility Principle&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mengikut tuan empunya diri yang memperkenalkan pattern ini, SRP ialah &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sesuatu class/object hanya ada satu sebab sahaja untuk diubah.&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Aku bawah contoh code dibawah :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; Report&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Print()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Green; font-family: Courier New; font-size: 11px; background-color: White"&gt;//&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; IList GetData()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;return&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; FormatReport()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Green; font-family: Courier New; font-size: 11px; background-color: White"&gt;//&lt;br /&gt;&lt;/span&gt;        }&lt;br /&gt;    }&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;Kenapa code ini melanggar principle SRP. Kalau dilihat code tersebut ada berapa kerja code Report itu boleh buat? Ada 3, iaitu dia boleh melakukan tugas &lt;span style="font-weight:bold;"&gt;Print()&lt;/span&gt;, tugas untuk Formatting &lt;span style="font-weight:bold;"&gt;FormatReport()&lt;/span&gt; dan tugas untuk mendapatkan data &lt;span style="font-weight:bold;"&gt;GetData()&lt;/span&gt;. Oleh kerana itu code tersebut ada 3 sebab utama jika kita hendak buat perubahan.&lt;br /&gt;&lt;br /&gt;Jadi adakah setiap class/object hanya boleh melakukan satu tugas sahaja bagi memenuhi SRP? Jawapannya sudah tentulah tidak. Kena faham maksud responsibility (tanggungjawab). Ok seorang bapa mempunyai banyak tanggungjawab, salah satu ialah menyara anak-anak. Jika beliau mempunyai 3 orang anak adakah perlu diwujudkan 3 class berkaitan saraan? Jawapan ialah tidak. Object saraan hanyalah satu tapi tugasnya boleh ada banyak selagi mana ianya berada dalam lingkungan makna saraan.&lt;br /&gt;&lt;br /&gt;Caranya ialah dengan groupkan mana-mana tugas yang related dengan responsibility class tersebut dan refactorkan.&lt;br /&gt;&lt;br /&gt;Contoh:&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; Bapa&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Bekerja()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanAnak1()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanAnak2()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanAnak3()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanIbuBapa()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;Jadi berdasarkan code diatas ini class bapa coupling direct dengan tugas-tugas tersebut, aku boleh bahagikan kepada 3 responsiblity disini seperti berikut. &lt;br /&gt;1. Bekerja&lt;br /&gt;2. Saraan Anak&lt;br /&gt;3. Saraan IbuBapa (Bapa/Ibu kepada bapa tersebut)&lt;br /&gt;&lt;br /&gt;Jadi bila refactor dia akan menjadi:&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; Bapa&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Tugas()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;new&lt;/span&gt; SaraanIbuBapa();&lt;br /&gt;            &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;new&lt;/span&gt; SaraanAnak();&lt;br /&gt;            &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;new&lt;/span&gt; Kerja();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; Kerja&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; Kerja()&lt;br /&gt;        {&lt;br /&gt;            Bekerja();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; Bekerja()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; SaraanAnak&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; SaraanAnak()&lt;br /&gt;        {&lt;br /&gt;            SaraanAnak1();&lt;br /&gt;            SaraanAnak2();&lt;br /&gt;            SaraanAnak3();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanAnak1()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanAnak2()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanAnak3()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;class&lt;/span&gt; SaraanIbuBapa&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; SaraanIbuBapa()&lt;br /&gt;        {&lt;br /&gt;            SaraanIbuBapaSendiri();&lt;br /&gt;            SaraanIbuBapaMertua();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanIbuBapaSendiri()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;public&lt;/span&gt; &lt;span style="color: Blue; font-family: Courier New; font-size: 11px; background-color: White"&gt;void&lt;/span&gt; SaraanIbuBapaMertua()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;    }&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;So dari class Bapa yang sarat dgn tugas kita dah menjadikan class Bapa untuk follow SRP. Ini adalah secara basic, class SaraanAnak sendiri adalah grouping tugas secara highlevel kemungkinan juga akan ada refactor di class tersebut tetap ada. Aku cuba buat sesimple yang boleh&lt;br /&gt;&lt;br /&gt;Cuba-cubalah memahami, ada yang nak bagi comment dipersilakan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8354609636200548214?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8354609636200548214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8354609636200548214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8354609636200548214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8354609636200548214'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/transaformasi-kepada-single.html' title='Transaformasi kepada Single Responsibility Principal'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5884536810078970759</id><published>2009-04-21T09:12:00.002+08:00</published><updated>2009-04-21T12:39:35.336+08:00</updated><title type='text'>2 pattern yang penting bila start design and coding</title><content type='html'>Ada dua pattern yang insyAllah boleh membantu mempertingkatkan kualiti code pada tahap dimana code tersebut mudah untuk di refactor kemudian hari.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;1. Single Responsibility Principal&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;2. Open Closed Principal&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Jika pemahaman yang mendalam untuk 2 pattern ini diberi perhatian insyAllah sudah cukup untuk refactor dan apabila perlu boleh ditambah dengan pattern-patern yang lain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5884536810078970759?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5884536810078970759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5884536810078970759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5884536810078970759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5884536810078970759'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/2-pattern-yang-penting-bila-start.html' title='2 pattern yang penting bila start design and coding'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4138475715398614599</id><published>2009-04-20T09:25:00.003+08:00</published><updated>2009-04-20T10:02:13.573+08:00</updated><title type='text'>Design API, kebebasan atau guideline</title><content type='html'>Soalan ini timbul selepas aku dalam process buat Repository API. Menjadi kebiasaan sekarang ini dalam repository aku ada support nhibernate linq, jadi ada method yang return IQueryable&lt;t&gt;.&lt;br /&gt;&lt;br /&gt;Bila aku expose method ini yang return IQueryable&lt;t&gt;, bermakna developer yang mengguna API ini mempunyai full control bagaimana ingin query ke database. Dari satu segi dia beri kebebasan pada developer untuk query dan tanpa menunggu developer yang terlibat dengan repository API untuk bagi specific query. Manakala dari sudut yang lain kebebasan tanpa control juga menyebabkan haru biru pada system.&lt;br /&gt;&lt;br /&gt;Ada apa-apa pendapat?.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4138475715398614599?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4138475715398614599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4138475715398614599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4138475715398614599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4138475715398614599'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/design-api-kebebasan-atau-guideline.html' title='Design API, kebebasan atau guideline'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8544523316081854026</id><published>2009-04-17T06:39:00.004+08:00</published><updated>2009-04-24T17:05:52.486+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Peraturan sekolah TDD yang pertama - check not null</title><content type='html'>Ini ialah sekolah TDD, peraturan pertama apabila buat test sematkan dalam otak, bahawa apabila menulis test yang pertama perkara penting ialah test not null value pada mana-mana object yang memangg tidak sepatutnya ada null value apabila berfungsi. Antara main bugs dalam software yang pertama sekali bila dapat message yang ini.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;"Object reference not set to an instance of reference"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Jadi rajin-rajin lah test &lt;span style="FONT-WEIGHT: bold; COLOR: rgb(255,0,0)"&gt;ShouldNotNull()&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8544523316081854026?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8544523316081854026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8544523316081854026' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8544523316081854026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8544523316081854026'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/peraturan-sekolah-tdd-yang-pertama.html' title='Peraturan sekolah TDD yang pertama - check not null'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6999118135668228768</id><published>2009-04-16T09:24:00.002+08:00</published><updated>2009-04-16T09:28:09.088+08:00</updated><title type='text'>Aku ada banyak masa?</title><content type='html'>Aku pun tak pasti cuma akhir-akhir nie aku macam bersemangat sahaja nak menulis, ialah dulu aku tak de kesempatan nak luahkan, nak share apa yang aku tahu dan tak ade juga kesempatan nak mengutarakan kemusykilan.&lt;br /&gt;&lt;br /&gt;Sibuk tetap sibuk, cuma aku rasa kalau aku tak menulis aku sibuk juga, cuma aku cuba ambil masa dalam 15 min untuk menulis apa-apa yang aku rasa baik dan bagus untuk aku (mungkin tidak untuk orang lain) Wallahu'alam..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6999118135668228768?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6999118135668228768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6999118135668228768' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6999118135668228768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6999118135668228768'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/aku-ada-banyak-masa.html' title='Aku ada banyak masa?'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1837880819646784031</id><published>2009-04-16T09:07:00.003+08:00</published><updated>2009-04-17T12:34:46.820+08:00</updated><title type='text'>Tanda-tanda rosak akhlak</title><content type='html'>Tanda-tanda &lt;strike&gt;rosak akhlak&lt;/strike&gt;, maaf bukan nak cerita pasal rosak akhlak, kalau nak tahu pasal akhlak seorang geek refer kat sini &lt;a href="http://ikhwanhayat.net/post/Akhlak-Seorang-Geek.aspx"&gt;"Akhlak seorang Geek" &lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Aku nak cerita tanda-tanda rosak design&lt;br /&gt;&lt;br /&gt;1. salah satunya ialah susah nak &lt;span style="FONT-WEIGHT: bold"&gt;refactor&lt;/span&gt;.&lt;br /&gt;2. keakraban dengan &lt;strong&gt;database design&lt;/strong&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1837880819646784031?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1837880819646784031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1837880819646784031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1837880819646784031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1837880819646784031'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/tanda-tanda-rosak-akhlak.html' title='Tanda-tanda rosak akhlak'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1905742339493216348</id><published>2009-04-15T09:17:00.004+08:00</published><updated>2009-04-15T09:39:10.907+08:00</updated><title type='text'>Pedih tapi ok sahaja</title><content type='html'>Aku walaupun dikritik sebagai bos yang tak boleh nak bawa perubahan kepada team dan cara pembawakan software development yang jumud dimana tidak ada perkembangan yang positif. Kesanya banyak yang merasa demotivated dan berhenti, insyAllah aku boleh terima kerana aku juga dalam prosess belajar walaupun aku dah involve dalam dunia IT hampir 12 tahun, tapi aku akui part management aku agak kurang memberangsangkan.Aku boleh terima sebab aku juga kritik orang dan tidak setuju dengan cara seseorang yang aku fikirkan tidak bijaksana. Aku ambil segala kritikan terbuka dan kritikan body language sebagai panduan untuk bina team yang lebih bagus insyAllah. Penolakan orang untuk berubah hanyalah persepsi kita kerana cara approach kita yang orang lain tidak boleh hendak terima. Kita tidak boleh ambil bulat-bulat apa yang dibaca dan cuba apply sebiji, kena perhati tahap mana knowledge seseorang.&lt;br /&gt;&lt;br /&gt;Aku pernah tulis dahulu lama sebelum aku jadi lead dalam company ini, keberkesanan dan berjaya sesuatu team bukan kerana expertnya seseorang dalam team tersebut tapi bagaimana dia boleh bekerja dengan orang yang tidak sama level dengan dia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1905742339493216348?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1905742339493216348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1905742339493216348' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1905742339493216348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1905742339493216348'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/pedih-tapi-ok-sahaja.html' title='Pedih tapi ok sahaja'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7353317842166006335</id><published>2009-04-14T12:36:00.007+08:00</published><updated>2009-04-14T17:28:06.038+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Model'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Mana satu idaman kalbu</title><content type='html'>Ini ialah basic design tapi kadang-kadang susah juga nak dapat yang betul. Aku bawa contoh seorang bapa mempunyai ramai anak. Bila bapa itu sudah sampai masa mengadap Allah , anak-anak didunia ini hanya boleh membantu dengan berdoa, anak masih hidup bapa dah pergi ke alam fana. Ok yang itu ialah cerita je..yang sebenar-benarnya aku nak design konsep parent child dalam domain model. Macam mana nak design macam inikah?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JKWF88m2xLU/SeRSGC93JxI/AAAAAAAAALY/9P9q7ysAaL8/s1600-h/parentchild3.png"&gt;&lt;img style="cursor: pointer; width: 322px; height: 82px;" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SeRSGC93JxI/AAAAAAAAALY/9P9q7ysAaL8/s400/parentchild3.png" alt="" id="BLOGGER_PHOTO_ID_5324470923287799570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;atau&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;B&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JKWF88m2xLU/SeQ8I_D26NI/AAAAAAAAALI/9mOOGWbEaSw/s1600-h/parentchild1.png"&gt;&lt;img style="cursor: pointer; width: 322px; height: 74px;" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SeQ8I_D26NI/AAAAAAAAALI/9mOOGWbEaSw/s400/parentchild1.png" alt="" id="BLOGGER_PHOTO_ID_5324446784523004114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;macam inikah?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;C&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/SeQ8ZW6tmbI/AAAAAAAAALQ/KMFY0qGUZQc/s1600-h/parentchild2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 58px;" src="http://1.bp.blogspot.com/_JKWF88m2xLU/SeQ8ZW6tmbI/AAAAAAAAALQ/KMFY0qGUZQc/s400/parentchild2.png" alt="" id="BLOGGER_PHOTO_ID_5324447065805003186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;&lt;br /&gt;atau ketiga-tiga betul???&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7353317842166006335?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7353317842166006335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7353317842166006335' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7353317842166006335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7353317842166006335'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/mana-satu-idaman-kalbu.html' title='Mana satu idaman kalbu'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JKWF88m2xLU/SeRSGC93JxI/AAAAAAAAALY/9P9q7ysAaL8/s72-c/parentchild3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-4707639283830802892</id><published>2009-04-12T03:06:00.003+08:00</published><updated>2009-04-12T03:42:08.764+08:00</updated><title type='text'>Kerja kosong</title><content type='html'>Aku cuma nak sampaikan ada kekosongan kerja sebagai "Analyst Programmer" untuk .Net dan PHP dekat company tempat aku pagi-pagi pergi kerja selepas hantar anak aku pergi tadika :) nak jadi guru tadika pun ada kalau tak silap aku, ada memo tampal depan pintu gate tadika sekolah anak aku tu, sila nyatakan hendak berkerja dengan sekolah tadika tersebut atau sebaliknya.&lt;br /&gt;&lt;br /&gt;Ok company yang sekarang nie bayar gaji bulanan pada aku selalunya 26 haribulan dan ada dalam bank, cuma company nie tak berapa glamour tapi Alhamdulillah aircond sejuk, kedai makan pun senang. Kerja dia sama je macam kerja kat tempat lain juga tak de apa-apa special, kena tulis code, kena masuk discussion, kelayakan kalau dah pernah bekerja kat mana-mana company IT dalam dunia nie dan terlibat dalam salah satu language seperti C# atau PHP atau Java maka secara automatik level satu nyer filtering lepas. Kelayakan yang lain ialah anda lepas kelayakan yang pertama. Untuk hantar resume anda sila hantar ke email budak nie irwan.azam@mediu.edu.my.&lt;br /&gt;&lt;br /&gt;Soalan interview dia senang je, antaranya: Kenapa agaknya anda berminat hendak join company nie??.. Contoh jawapan yang mungkin diberi&lt;br /&gt;- kawan saya kerja kat sini, nampak macam best,&lt;br /&gt;- saja hantar resume, ada orang call ntah saper tah, lagi pun hari yang disetkan interview nie saya free so saya datang jelah&lt;br /&gt;- mencari pengalaman dari tempat kerja lama (orang yang bagi jawapan nie selalunya menerima nasib ngeri, otak akan menjadi separa sedar dan akan mengalami penyesalan)&lt;br /&gt;- nak bekerja berdedikasi, nak berjaya macam encik, jadi bos nampak macam senang je..ada orang cakap encik rileks je kat ofiss ek :) ..kalau jawapan dia nak berjaya macam encik, aku rase belum habis interview confirm dah dapat tapi sambungan ayat selepas tu sure kena baling keluar.&lt;br /&gt;- nak gantikan tempat encik, encik nampak macam terror, teknology yang encik cerita tu pun saya tak pernah dengar, ada unsur mistik, penipuan dan kelakar saya memang cari kalau dapat bos yang macam tu ..emmmmmmmmm kalau jawapan nie susah sikit tu kecualilah yang tukang interview tu memang dah ada kerje lain sebagai cleaner ke..&lt;br /&gt;- saya dipaksa untuk datang interview .........dusshhhhhhhhhhhh!!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-4707639283830802892?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/4707639283830802892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=4707639283830802892' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4707639283830802892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/4707639283830802892'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/kerja-kosong.html' title='Kerja kosong'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5984978798586399603</id><published>2009-04-10T16:06:00.003+08:00</published><updated>2009-04-10T16:11:15.552+08:00</updated><title type='text'>Make Role Explicit</title><content type='html'>Aku baru je habis habis tengok presentation Udi Dahan berkaitan &lt;a href="http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan"&gt;Make Role Explicit&lt;/a&gt; .  Macam menarik untuk dicuba dalam design.  Setiap object perlulah clear apa yang boleh dibuat dan apa yang patut dibuat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5984978798586399603?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5984978798586399603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5984978798586399603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5984978798586399603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5984978798586399603'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/make-role-explicit.html' title='Make Role Explicit'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5083560363558526338</id><published>2009-04-10T06:42:00.002+08:00</published><updated>2009-04-10T06:46:29.463+08:00</updated><title type='text'>Open Source Business Process Management</title><content type='html'>Yang aku jumpa ada 3 salah satunya dihantar oleh CTO aku&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.intalio.com"&gt;Intalio&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.processmaker.com"&gt;ProcessMaker&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cuteflow.org"&gt;CuteFlow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aku tak biasa dengan BPM, budak baru belajar&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5083560363558526338?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5083560363558526338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5083560363558526338' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5083560363558526338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5083560363558526338'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/open-source-business-process-management.html' title='Open Source Business Process Management'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-7514552357286923574</id><published>2009-04-08T01:35:00.002+08:00</published><updated>2009-04-08T01:56:02.467+08:00</updated><title type='text'>Kepentingan Sequence Diagram yang diabaikan</title><content type='html'>Aku memang sering mengabaikan sequence diagram pada kebanyakkan project sebelum ini, bila dah terduduk dengan domain yang agak complex baru nak buat sequence diagram.&lt;br /&gt;&lt;br /&gt;Kenapa sequence diagram terabai ialah kerana aku tak berapa mahir nak design. Sedangkan kepentingan sequence diagram dalam masa pertapaan aku dengan master H di tekankan, tapi bila aku keluar dari pertapaan aku sembah derhaka (Ala macam DS Nizar buat lahhh ).&lt;br /&gt;&lt;br /&gt;Aku buka balik buku lama aku tentang sequence diagram didalam Applying UML and Patterns. Kegunaan sequence diagram ialah untuk verify domain design yang dibuat itu montap atau tidak itu antara perbualan aku dan &lt;a href="http://ikhwanhayat.net/"&gt;Mr 1kHz&lt;/a&gt; ketika kami sedang menjamu selera :) Selera makin bertambah bila dicampurkan dengan term-term ini kedalam lauk makanan tengah hari anda.Kalau tak percaya cubalah :)&lt;br /&gt;&lt;br /&gt;Kami juga bersedia untuk dipanggil makan tengahari pada sesiapa yang hendak nak merasa term-term ini dalam makanan...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-7514552357286923574?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/7514552357286923574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=7514552357286923574' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7514552357286923574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/7514552357286923574'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/kepentingan-sequence-diagram-yang.html' title='Kepentingan Sequence Diagram yang diabaikan'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-1700091709920103109</id><published>2009-04-07T23:52:00.003+08:00</published><updated>2009-04-08T00:20:09.483+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Politik'/><title type='text'>Apalah nasib BIJAN</title><content type='html'>Aku dan wife aku sambil tengok Astro Awani, sempat lagi menjengah ke beberapa blog bloggernetworks yang pro PR dan sesekali tersesat kedalam blogger BPN yang pro KERAjaan. Ada dua team masing-masing hebat update bahan dan mainkan psikologi menarik, menarik..cuma sesetengah team BPN bahasa agak lucah dan melampau. Dia orang nie tak sekolah agaknya kot. Memperbodohkan intelek seseorang dengan hujah yang jelik. Dalam era internet masing-masing ada hak nak berkata dan kena juga study effectnya jika gaya bahasa yang tidak beradap, kalau yang baca tu memang penyokong tegar, rasanya tak adelah ambil port sangat, cuma yang baca nie mereka-meraka yang berada atas pagar yang masih belum buat keputusan nak memilih siapa, but bila dah terbaca dalam blog tu dimana sumpah seranah penuh dalam artikel jadi pembaca boleh buat kesimpulan pemilik blog tersebut memang tiada sahsiah diri dan secara direct merke akan melihat parti mana yang disokong juga terkena tempiasnya.&lt;br /&gt;&lt;br /&gt;Pukul 8:00 malam aku dah dapat msg mengatakan PR menang 2 - 1, cuma bukan keputusan rasmi. Aku sesekali minat juga nak cerita pasal politik, cuma yang aku perasan bila Mahathir turut sama berkempen aku nampak ada tanda negatif dari kem pak lah. Kau bayangkanlah teruk paklah kena hina ngan Mahathir, penyokong-penyokong pak lah tak kan nak diam aja, mungkin dia orang akan buat silent protest..&lt;br /&gt;&lt;br /&gt;Ntahlah cuma bagi aku tunggu dan lihat je lah corak pemerintahan BIJAN nie sama ada dia kena queen control dengan wife dia atau ada lagi satu king control MAHATHIR akan remote control BIJAN.&lt;br /&gt;&lt;br /&gt;Bagi negeri aku MELAKA masih kurang sinar untuk PR bertapak WallahuA'lam, pekat sungguh darah dacing dia orang sampai ada yang cakap kalau letak tunggul mati pun kat kertas undi dacing sure dia orang akan pilih tunggul dari pilih manusia hehehe alahaiii orang Melaka.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-1700091709920103109?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/1700091709920103109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=1700091709920103109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1700091709920103109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/1700091709920103109'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/apalah-nasib-bijan.html' title='Apalah nasib BIJAN'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-2589644287117625241</id><published>2009-04-07T00:50:00.002+08:00</published><updated>2009-04-07T01:17:16.413+08:00</updated><title type='text'>Pengalaman buat presentation untuk Gov agensi</title><content type='html'>2 minggu lepas aku dikehendaki buat satu presentation tentang architecture dan cara software development yang aku dan remote team aku akan buat. Mereka yang hadir kebanyakkan ialah level penolong pengarah dan mempunyai pengalaman teknikal dalam beberapa project Goverment sebelum ini. Terdapat juga Pegawai Teknologi Maklumat lebih kurang 4 orang dalam bilik tu.&lt;br /&gt;&lt;br /&gt;Aku tiada pengalaman deal dengan agensi kerajaan sebelum ini dan aku tak tahu sangat protokol dan cara bekerja dia orang. 2 hari sebelum presentation tu adalah beberapa slide diagram yang aku sediakan dalam membantu aku unutk memberi penerangan dan untuk aku buat demo. Aku agak gemuruh juga ialah aku nie orang biasa-biasa je, nak beri presentation kat beberapa orang yang ada title Dr.&lt;br /&gt;&lt;br /&gt;Selepas Project Manager buka majlis dan perkenalkan diri aku sebagai Solution Architect untuk project, aku pun bagi salam dan start lah presentation aku.. 5 minit awal rasa macam tak de darah je..aku pun tak banyak cerita direct to technical part.&lt;br /&gt;&lt;br /&gt;Selepas dan masuk dalam 15 minit, aku tengok dia orang macam focus je (ada yg tertidur tu aku tak tahu lee hehehe), aku start confidence semula, macam-macam technical word yang latest dan terkini keluar dari mulut aku, ada yang aku tak plan nak cerita, bila dah syok dan banyak pulak pertanyaan dia orang aku pun rasa perghh...bestnyaa... term-term SOA, interconnected component, n-tier layering project solution, Test Driven Design, User Story, Automated Test, Dependency Injection, Object Relational Mapper semuanya aku cerita yang tak de dalam slide pun aku cerita, nie open source mulut :). Part yang aku rasa best dan mencabar ialah bila aku kena demo :) Ialah aku dah puas cerita ..kita orang tak guna stored procedure lah, view...bla bla bla, nak tukar database dari oracle ke mssql ke mysql ke firebird ke sqlite umpama menekan remote control untuk tukar channel je..&lt;br /&gt;&lt;br /&gt;First yang aku demo ialah we can run our application tanpa database..yehaaaaaaaaa!!!, lepas tu aku run kalau ada apa-apa perubahan aku tak sentuh pun database management console, ubah sahaja di domain dan tadaaaaaaaaaaaa!!!!!!! field baru bertambah, relation bertambah semunya dengan tekan enter sahaja. Kalau aku tak suka database tu aku boleh je tukar database lain tanpa tukar code.&lt;br /&gt;&lt;br /&gt;Aku demo sikit tentang BDD, aku bawa contoh BDD style Dan North narrator/story approach. Alih-alih aku dah present 2 jam lebih...masa yang diperuntukan ialah 1 jam je..:)&lt;br /&gt;&lt;br /&gt;Alhamdulillah, lepas nie aku jadi presenter je...:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-2589644287117625241?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/2589644287117625241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=2589644287117625241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2589644287117625241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/2589644287117625241'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/pengalaman-buat-presentation-untuk-gov.html' title='Pengalaman buat presentation untuk Gov agensi'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-6399045664784388586</id><published>2009-04-06T16:27:00.003+08:00</published><updated>2009-04-06T16:32:29.823+08:00</updated><title type='text'>Kenapa Active Record ku pandang sepi</title><content type='html'>Ntah kenapa bila aku tengok Active Record nyer pattern aku tak begitu tertarik walaupun ianya bagus, mudah,senang dan simple. Element-element sebegitulah yang diperlukan KISS cuma ntah perasaan ini tidak dapat nak ambil Active Record sebagai pemain utama dalam DataAccess layer. Siapa ada hujah menyakinkan aku untuk aku memberi tempat Active Record dalam DataAccess Layer?...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-6399045664784388586?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/6399045664784388586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=6399045664784388586' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6399045664784388586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/6399045664784388586'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/kenapa-active-record-ku-pandang-sepi.html' title='Kenapa Active Record ku pandang sepi'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5084445581276644080</id><published>2009-04-06T14:19:00.005+08:00</published><updated>2009-04-09T10:50:10.543+08:00</updated><title type='text'>Command Query Separation, Distributed Domain Drven Design</title><content type='html'>CQS, DDDD .................. best seronok bila baca tentang SOA (Service Oriented Architecture), kena faham betul-betul konsep event dan messaging.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-5084445581276644080?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/5084445581276644080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=5084445581276644080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5084445581276644080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/5084445581276644080'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/command-query-specification-distributed.html' title='Command Query Separation, Distributed Domain Drven Design'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-3805903719891253690</id><published>2009-04-06T11:40:00.006+08:00</published><updated>2009-04-07T01:23:26.292+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color Modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><category scheme='http://www.blogger.com/atom/ns#' term='ERD'/><title type='text'>Kenapa ERD tidak boleh express real world problem</title><content type='html'>Sebelum ini, lama dahulu semasa zaman muda-muda, sebagai programmer yang bersemangat waja apabila mendapat sahaja tugas untuk develop software/aplikasi tidak kisahlah yang besar atau yang kecil atau mewarisi aplikasi itu untuk dijaga dari senior programmer, maka perkara pertama bermain di benakku ialah bagaimana rupanya database design, berapa banyak table dan lain-lain yang sewaktu dengannya.&lt;br /&gt;&lt;br /&gt;Aku cukup suka bila semua relation dalam database lengkap dengan primary key, foreign key, constrains dan aku rasa bila database dah complete baru aku ready untuk buat coding. Dulu memang aku tak dapat nak bayangkan macam nak memulakan coding applikasi yang berkaitan dengan penyimpanan maklumat tanpa perlu memikirkan database design. Bila bercerita dengan customer aku akan bayangkan database design bila bercerita dengan team se unit pun bercakap pasal database design.&lt;br /&gt;&lt;br /&gt;Berbalik semula 7 tahun lepas aku kenal mamat H nie, olahan cerita beliau tentang software development approah mengusik akal fikiran ku. Aku terasa ajaran beliau berlainan tidak seperti yang biasa aku dan kawan-kawan aku buat dan fikirkan. Tentang konsep design pattern, pertama kali dengar :) ialah aku budak electrical yang banyak aku dengar semua berkaitan dengan electrical term. Jadi aku terus tumpukan perhatian pada setiap posting beliau dan aku juga kerap kali bertanya soalan. Oleh kerana begitu berminat dangan cara beliau aku pernah ambil beliau naik motor kapchai aku bawak datang ofis minta dan tunjukkan pada beliau apa yang aku buat, dia tegur aku jagan fikirkan pasal database design aku masih lagi tidak boleh lari dari terus terbayang akan si database design nie, penagangan database design aku rasa cukup kuat, dan aku pasti ramai yang ada perasaan tersebut walaupun dah capai umur baligh dalam programming :)&lt;br /&gt;&lt;br /&gt;Aku cuba lagi, dan aku diperkenalkan pula dengan Peter Coad teknik - Colour Modeling, selepas mengodek-godek cara tersebut barulah ada sinar FM sikit pada cara aku berfikir. Aku sudah boleh melupakan sedikit si database design. Aku join group color modelling dan banyak soalan bodoh aku tanya dalam group tu.. arghh buat apa aku nak malu, dia orang bukannya nampak muka aku masa aku tanya, dah lah english aku cukup makan nak tanya pasal design level enterprise lak tu.. hahahaha. Yang bagusnya ramai jugak lah response pada pertanyaan aku, aku oleh kerana excited sangat selepas siap je buat design class terus pergi Cyber Cafe dah malam dah masa tu tapi dia orang kan siang so dapatlah jawapan segera bila dia orang review example tersebut.. pergh seronok betul, betul, betul&lt;br /&gt;&lt;br /&gt;Selepas tu nie aku tak ingat macam mana aku boleh beli buku Domain Driven Design, sama ada mamat M bagi tahu aku atau pun aku terbaca dalam forum tersebut. Buku nie aku baca lebih dari sekali dan ambil masa untuk aku faham.&lt;br /&gt;&lt;br /&gt;Ok aku dan lari jauh dari tajuk yang aku nak cerita. Aku nak bagitahu pada mereka yang masih lagi berfikir tentang database design, cubalah ambil masa fikirkan cara alternatif sikit.&lt;br /&gt;&lt;br /&gt;Aku nak bawa contoh yang biasa-biasa aje, Customer membuat Order untuk membeli beberapa barang keperluan. Ok untuk simple case kita akan ada object Customer, Order dan OrderLine&lt;br /&gt;&lt;br /&gt;Kalau kita buat database design dia akan jadi macam nie kan&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JKWF88m2xLU/SdmDZQXLEXI/AAAAAAAAAK4/uiFU_zlm0mM/s1600-h/dbdesign.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 73px;" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SdmDZQXLEXI/AAAAAAAAAK4/uiFU_zlm0mM/s400/dbdesign.PNG" alt="" id="BLOGGER_PHOTO_ID_5321428904627081586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Relation antara Customer kepada Order adalah sama dengan relation antara Order dan OrderLine. Tapi kalau mengikut design sebenar mengikut comman senario ianya bukan begitu.&lt;br /&gt;&lt;br /&gt;Customer dan Order ialah unidirectional association, bermakna Customer tidak perlu tahu tentang Order, sebaliknya Order tahu akan Customer.&lt;br /&gt;&lt;br /&gt;Manakala untuk Order dan OrderLine relationnya pula bidirectional, bermakna Order mempunyai maklumat tentang OrderLine dan begitu juga sebaliknya OrderLine mempunyai maklumat tentang Order.&lt;br /&gt;&lt;br /&gt;Tapi relationnya tiada beza, bagaimana? satu unidirectional dan satu lagi bidirectional, jadi bagaimana. Perkara tersebut hanya boleh di terangkan dengan design domain model menggunakan UML. Berdasarkan design ini kita boleh terangkan OrderLine lifecycle dia dependecy kepada Order, kalau kita listkan semua maklumat OrderLine pun tiada guna kerana maklumat tersebut hanya berguna bila disekalikan dengan maklumat Order. Untuk Customer bukan tugas Customer untuk tahu semua maklumat Order, apa yang Customer perlu tahu jika diberi maklumat Customer sistem perlu bagi maklumat Order kesemua Order yang di lakukan oleh Customer tersebut.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/SdmGhvGL1SI/AAAAAAAAALA/Z2KunzN_0ww/s1600-h/domaindesign.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 62px;" src="http://1.bp.blogspot.com/_JKWF88m2xLU/SdmGhvGL1SI/AAAAAAAAALA/Z2KunzN_0ww/s400/domaindesign.png" alt="" id="BLOGGER_PHOTO_ID_5321432348851164450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Selamat mencuba dan Vote No to BIJAN&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-3805903719891253690?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/3805903719891253690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=3805903719891253690' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3805903719891253690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/3805903719891253690'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/kenapa-erd-tidak-boleh-express-real.html' title='Kenapa ERD tidak boleh express real world problem'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JKWF88m2xLU/SdmDZQXLEXI/AAAAAAAAAK4/uiFU_zlm0mM/s72-c/dbdesign.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-426549860255066145</id><published>2009-04-04T02:43:00.005+08:00</published><updated>2009-04-04T03:35:33.543+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Behaviour Driven Design</title><content type='html'>Aku sudah lama apabila menulis code test guna cara TDD, cuma baru-baru nie adalah dalam setahun yang lepas aku nampak TDD banyak sangat repeated test code, code smell etc. Dan lagi satu bila buat test tu tak berapa sangat nak clear apa yang code itu test dan akhir sekali banyak sekali test code aku yang terbengkalai kerana masa nak deliver semakin dekat jadi terus tumpukan kepada real code. Akhir-akhir ini aku tumpukan masa lebih sedikit tentang BDD dan aku tertarik untuk menjadi sebahagian dari community BDD.&lt;br /&gt;&lt;br /&gt;Bila dah involve dengan BDD, sudah tentu code test yang ditulis berlainan dari apa yang tedapat dalam TDD. Kenapa aku beria-ia sangat nak tukar ialah kerana bila aku buat BDD, test code aku boleh menajdi sebahagian dari "Executable Documentation". Aku kesian kat team aku  dahulu, oleh kerana ketidakmahiran aku dalam menulis documentation maka berlari-lari keluar mereka mencari rumah baru sedang aku masih dalam lamunan dengan memberi janji-janji manis bahawa aku mempunya standard yang tinggi dalam software development hehehehe.............&lt;br /&gt;&lt;br /&gt;Aku insaf seketika, memikirkan bagaimana bisa aku hendak cari penganti mereka-mereka yang hebat-hebat ini? Aku kalau diberi peluang..arghh jangan dikenang perkara yang lalu...&lt;br /&gt;&lt;br /&gt;Apa yang aku bernostalgia nie, anak-anak aku semua dah tidur, mata aku tidak mengantuk lagi. Aku sambung semula tentang BDD.&lt;br /&gt;&lt;br /&gt;Untuk aku code guna BDD aku boleh memilih 2 jalan alternatif, alternatif pertama dari kumpulan parti Dan North dan alternatif yang lagi satu ialah parti David Astel, kedua-dua mereka ini tak bertanding dimana-mana bukit dan batang seperti pilihanraya di Malaysia.&lt;br /&gt;&lt;br /&gt;Pada mulanya aku cuba undi cara &lt;a href="http://dannorth.net/introducing-bdd"&gt;Dan North&lt;/a&gt;, sebab dia menjanjikan bahawa rakyat yang buat business prosess dan rakyat marhaen seperti programmer akan dapat menikmati kenikmatan cara Narrator/Story. Tapi selepas diberi peluang memang benar kenikmatan bagi pihak business prosess tapi rakyat marhaen kurang mendapat pembelaan, sebagai ada satu perasaan memberontak kerana untuk mendapat gaji mereka, mereka dikehendaki menulis karangan seperti ini:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-style: italic;"&gt;Story: Deposit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Narrative:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    As a User&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    I want The bank account balance to increase by the amount deposited&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    So that I can deposit money&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Scenario 1: Money deposit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Given My bank account is empty&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        When I deposit 100 units&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Then The account balance should be 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Scenario 2: Negative amount deposit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        Given My bank account is empty&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        When I try to deposit a negative amount&lt;/span&gt;&lt;br /&gt;Then I get an exception - FAILED&lt;br /&gt;Then the user can not log in&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Selepas tu aku cuba pulak memilih parti baru menggunakan cara Context/Specification atau AAA (Arrange/Act/Assert). Buat masa nie aku rasa macam parti nie best sedikit dari parti Dan North dan sudah tentu parti &lt;a href="http://www.mykmu.net/"&gt;BIJAN&lt;/a&gt; tidak menarik minat aku langsung. Aku tunjukkan dulu cara bagaimana aku write BDD guna AAA style.&lt;br /&gt;&lt;br /&gt;Mula-mula aku create dahulu SpecificationContext.cs&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using NUnit.Framework;&lt;br /&gt;&lt;br /&gt;namespace Icms.Tests&lt;br /&gt;{&lt;br /&gt;public abstract class SpecificationContext&lt;br /&gt;{&lt;br /&gt; [TestFixtureSetUp]&lt;br /&gt; public void ContextSetup()&lt;br /&gt; {&lt;br /&gt;     Context();&lt;br /&gt;     Act();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [TestFixtureTearDown]&lt;br /&gt; public void ContextTearDown()&lt;br /&gt; {&lt;br /&gt;     Tear_Down();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public virtual void Context()&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public virtual void Act()&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public virtual void Tear_Down()&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Lepas tu aku create pulak SpecificationExtension.cs&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using NUnit.Framework;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Xml;&lt;br /&gt;&lt;br /&gt;namespace Icms.Tests&lt;br /&gt;{&lt;br /&gt;public static class SpecificationExtension&lt;br /&gt;{&lt;br /&gt;  public delegate void MethodThatThrows();&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeFalse(this bool condition)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsFalse(condition);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeTrue(this bool condition)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsTrue(condition);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static object ShouldEqual(this object actual, object expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.AreEqual(expected, actual);&lt;br /&gt;      return expected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static object ShouldNotEqual(this object actual, object expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.AreNotEqual(expected, actual);&lt;br /&gt;      return expected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeNull(this object anObject)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNull(anObject);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldNotBeNull(this object anObject)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNotNull(anObject);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static object ShouldBeTheSameAs(this object actual, object expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.AreSame(expected, actual);&lt;br /&gt;      return expected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static object ShouldNotBeTheSameAs(this object actual, object expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.AreNotSame(expected, actual);&lt;br /&gt;      return expected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeOfType(this object actual, Type expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsInstanceOfType(expected, actual);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldNotBeOfType(this object actual, Type expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNotInstanceOfType(expected, actual);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldContain(this IList actual, object expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.Contains(expected, actual);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldContain&lt;t&gt;(this IEnumerable&lt;t&gt; actual, T expected)&lt;br /&gt;  {&lt;br /&gt;      ShouldContain(actual, x =&gt; x.Equals(expected));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldContain&lt;t&gt;(this IEnumerable&lt;t&gt; actual, Func&lt;t,&gt; expected)&lt;br /&gt;  {&lt;br /&gt;      actual.Single(expected).ShouldNotEqual(default(T));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeEmpty&lt;t&gt;(this IEnumerable&lt;t&gt; actual)&lt;br /&gt;  {&lt;br /&gt;      actual.Count().ShouldEqual(0);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldHaveCount&lt;t&gt;(this IEnumerable&lt;t&gt; actual, int expected)&lt;br /&gt;  {&lt;br /&gt;      actual.Count().ShouldEqual(expected);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static IComparable ShouldBeGreaterThan(this IComparable arg1, IComparable arg2)&lt;br /&gt;  {&lt;br /&gt;      Assert.Greater(arg1, arg2);&lt;br /&gt;      return arg2;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static IComparable ShouldBeLessThan(this IComparable arg1, IComparable arg2)&lt;br /&gt;  {&lt;br /&gt;      Assert.Less(arg1, arg2);&lt;br /&gt;      return arg2;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeEmpty(this ICollection collection)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsEmpty(collection);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldBeEmpty(this string aString)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsEmpty(aString);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldNotBeEmpty(this ICollection collection)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNotEmpty(collection);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldNotBeEmpty(this string aString)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNotEmpty(aString);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldContain(this string actual, string expected)&lt;br /&gt;  {&lt;br /&gt;      StringAssert.Contains(expected, actual);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static string ShouldBeEqualIgnoringCase(this string actual, string expected)&lt;br /&gt;  {&lt;br /&gt;      StringAssert.AreEqualIgnoringCase(expected, actual);&lt;br /&gt;      return expected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldEndWith(this string actual, string expected)&lt;br /&gt;  {&lt;br /&gt;      StringAssert.EndsWith(expected, actual);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldStartWith(this string actual, string expected)&lt;br /&gt;  {&lt;br /&gt;      StringAssert.StartsWith(expected, actual);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldContainErrorMessage(this Exception exception, string expected)&lt;br /&gt;  {&lt;br /&gt;      StringAssert.Contains(expected, exception.Message);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static Exception ShouldBeThrownBy(this Type exceptionType, MethodThatThrows method)&lt;br /&gt;  {&lt;br /&gt;      Exception exception = null;&lt;br /&gt;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;          method();&lt;br /&gt;      }&lt;br /&gt;      catch (Exception e)&lt;br /&gt;      {&lt;br /&gt;          Assert.AreEqual(exceptionType, e.GetType());&lt;br /&gt;          exception = e;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (exception == null)&lt;br /&gt;      {&lt;br /&gt;          Assert.Fail(String.Format("Expected {0} to be thrown.", exceptionType.FullName));&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      return exception;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void ShouldEqualSqlDate(this DateTime actual, DateTime expected)&lt;br /&gt;  {&lt;br /&gt;      TimeSpan timeSpan = actual - expected;&lt;br /&gt;      Assert.Less(Math.Abs(timeSpan.TotalMilliseconds), 3);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static object AttributeShouldEqual(this XmlElement element, string attributeName, object expected)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNotNull(element, "The Element is null");&lt;br /&gt;&lt;br /&gt;      string actual = element.GetAttribute(attributeName);&lt;br /&gt;      Assert.AreEqual(expected, actual);&lt;br /&gt;      return expected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static XmlElement ShouldHaveChild(this XmlElement element, string xpath)&lt;br /&gt;  {&lt;br /&gt;      XmlElement child = element.SelectSingleNode(xpath) as XmlElement;&lt;br /&gt;      Assert.IsNotNull(child, "Should have a child element matching " + xpath);&lt;br /&gt;&lt;br /&gt;      return child;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static XmlElement DoesNotHaveAttribute(this XmlElement element, string attributeName)&lt;br /&gt;  {&lt;br /&gt;      Assert.IsNotNull(element, "The Element is null");&lt;br /&gt;      Assert.IsFalse(element.HasAttribute(attributeName), "Element should not have an attribute named " + attributeName);&lt;br /&gt;&lt;br /&gt;      return element;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t,&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/pre&gt;&lt;br /&gt;Ok dalam AAA style nie cara susun kedudukan file akan membina "Executable Documentation" yang boleh dimanfaatkan oleh banyak pihak. Contoh structure project dan apabila di run menggunakan NUnit&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JKWF88m2xLU/SdZjbykVJmI/AAAAAAAAAKo/3r-hHObQzvg/s1600-h/file.png"&gt;&lt;img style="cursor: pointer; width: 321px; height: 131px;" src="http://1.bp.blogspot.com/_JKWF88m2xLU/SdZjbykVJmI/AAAAAAAAAKo/3r-hHObQzvg/s400/file.png" alt="" id="BLOGGER_PHOTO_ID_5320549338866591330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NUnit Result&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JKWF88m2xLU/SdZkuwF75yI/AAAAAAAAAKw/ju3Oc6AE-K8/s1600-h/nunit.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 97px;" src="http://3.bp.blogspot.com/_JKWF88m2xLU/SdZkuwF75yI/AAAAAAAAAKw/ju3Oc6AE-K8/s400/nunit.png" alt="" id="BLOGGER_PHOTO_ID_5320550764131378978" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-426549860255066145?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/426549860255066145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=426549860255066145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/426549860255066145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/426549860255066145'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/behaviour-driven-design.html' title='Behaviour Driven Design'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JKWF88m2xLU/SdZjbykVJmI/AAAAAAAAAKo/3r-hHObQzvg/s72-c/file.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-787909064980593053</id><published>2009-04-04T01:52:00.001+08:00</published><updated>2009-04-04T01:54:29.209+08:00</updated><title type='text'>Natural Spec</title><content type='html'>Masa tengah coding guna BDD style cara Context/Specification aku terbaca tentang &lt;a href="http://www.navision-blog.de/2009/02/23/getting-started-with-naturalspec/"&gt;NaturalSpec&lt;/a&gt;&lt;br /&gt;Aku plan akan cuba bila ada masa, so tak dapat nak komen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-787909064980593053?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/787909064980593053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=787909064980593053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/787909064980593053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/787909064980593053'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/natural-spec.html' title='Natural Spec'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-8115512985402600497</id><published>2009-04-03T16:22:00.012+08:00</published><updated>2009-04-04T02:42:49.453+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SRP'/><category scheme='http://www.blogger.com/atom/ns#' term='Domain Driven Design'/><title type='text'>Single Responsibility Principle</title><content type='html'>Aku terbaca satu artikel &lt;a href="http://blog.briandicroce.com/2009/03/04/would-your-objects-praise-you/"&gt;Would Your Objects Praise You?&lt;/a&gt;&lt;br /&gt;cuma aku kurang setuju dengan apa yang mamat nie cakap. Ada benarnya tapi tak semuanya betul konsep tu.  Apa yang cuba disampaikan ialah konsep Single Responsibility Principal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The &lt;/span&gt;&lt;strong style="font-style: italic;"&gt;single responsibility principle&lt;/strong&gt;&lt;span style="font-style: italic;"&gt; states that every object should have a single responsibility, and that all its services should be narrowly aligned with that responsibility.  [&lt;/span&gt;&lt;a style="font-style: italic;" target="_blank" href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;Wikipedia&lt;/a&gt;&lt;span style="font-style: italic;"&gt;].&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ok, cara dan formula yang di gunakan cukup menarik dan bagus dan aku pun rasa sesuatu yang reasonable unutk digunakan apabila buat domain model anlysis. Formula yang cuba diketengahkan ialah&lt;br /&gt;&lt;br /&gt;&lt;strong style="font-style: italic;"&gt;Can a [&lt;em&gt;type&lt;/em&gt;] [&lt;em&gt;action in the infinitive&lt;/em&gt;] itself?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So dalam artikel tersebut , mamat nie ambil contoh sebuah kereta&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JKWF88m2xLU/SdXJ8yw9xxI/AAAAAAAAAJ4/HwuNszl7B-Y/s1600-h/car.png"&gt;&lt;img style="cursor: pointer; width: 187px; height: 215px;" src="http://4.bp.blogspot.com/_JKWF88m2xLU/SdXJ8yw9xxI/AAAAAAAAAJ4/HwuNszl7B-Y/s320/car.png" alt="" id="BLOGGER_PHOTO_ID_5320380581064591122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jadi berdasarkan method yang ada pada kereta tersebut kalau dilihat memang menyalahi SRP. Sebab class Car coupling dengan telalu banyak kerja yang perlu dilakukan. Cuba fikirkan sejenak apa tugas sebuah kereta. Jawapan dia abstract dan berlainan bagi setiap orang, sebab itu SRP nie kalau mengikut pencetus principle yang dekenali sebagai Pakcik Bob pattern yang simple tapi susah untuk dapat yang betul betul ngam.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The SRP is one of the simplest of the principle, and one of the hardest to get right. Conjoining&lt;/span&gt; &lt;span style="font-style: italic;"&gt;responsibilities is something that we do naturally. Finding and separating those&lt;/span&gt; &lt;span style="font-style: italic;"&gt;responsibilities from one another is much of what software design is really about"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Berbalik semula kepada persoalan kereta tadi. Mamat Brian nie cadangkan untuk dapatkan cara yang betul penggunaan SRP ialah dengan melakukan pertanyaan seperti berikut:&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;change gears&lt;/u&gt; by itself? &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;change a radio station&lt;/u&gt; by itself? &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;drive&lt;/u&gt; itself? &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;idle&lt;/u&gt; by itself? &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;park&lt;/u&gt; itself? &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;start&lt;/u&gt; itself? &lt;/li&gt;&lt;/ul&gt;Dan ini jawapan bagi soalan-soalan tersebut&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Unless you’re the lucky owner of the &lt;/span&gt;&lt;a style="font-style: italic;" target="_blank" href="http://en.wikipedia.org/wiki/Knight_Rider_%281982_TV_series%29"&gt;Knight Rider&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, you probably answered ‘NO’ to a few of these questions.  For every question or observation you have answered ‘NO’, you should more than likely refactor the class and move some of its responsibilities elsewhere.  But where exactly can you move these responsibilities?  Well, before we dive to some of these answers, let’s see if we can directly some of the original questions pertaining to our Car class:&lt;/span&gt; &lt;ul style="font-style: italic;"&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;change gears&lt;/u&gt; by itself? &lt;strong&gt;&lt;u&gt;ANSWER:&lt;/u&gt;&lt;/strong&gt; Sure, if it has an automatic transmission.  Otherwise, only the &lt;strong&gt;driver&lt;/strong&gt; can shift gears. &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;change a radio station&lt;/u&gt; by itself?  &lt;strong&gt;&lt;u&gt;ANSWER:&lt;/u&gt;&lt;/strong&gt; Nope, only the &lt;strong&gt;driver&lt;/strong&gt; (or the passenger) can change the radio station. &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;drive&lt;/u&gt; itself? &lt;strong&gt;&lt;u&gt;ANSWER:&lt;/u&gt;&lt;/strong&gt; Not unless it’s KITT!  Only a &lt;strong&gt;driver&lt;/strong&gt; can drive a car. &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;idle&lt;/u&gt; by itself? &lt;strong&gt;&lt;u&gt;ANSWER:&lt;/u&gt;&lt;/strong&gt; Sure it can. &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;park&lt;/u&gt; itself? &lt;strong&gt;&lt;u&gt;ANSWER:&lt;/u&gt;&lt;/strong&gt; Nope! Only a &lt;strong&gt;driver&lt;/strong&gt; can know how to park a car. &lt;/li&gt;&lt;li&gt;Can a &lt;strong&gt;car&lt;/strong&gt; &lt;u&gt;start&lt;/u&gt; itself? &lt;strong&gt;&lt;u&gt;ANSWER:&lt;/u&gt;&lt;/strong&gt; Uh, no.  Once again, only the &lt;strong&gt;driver&lt;/strong&gt; can start the car.&lt;/li&gt;&lt;/ul&gt;Nie pula jawapan aku. Ya memang betul kereta tak boleh change gear sendiri tapi kereta simpan maklumat tentang gear, jadi jika kereta tak boleh nak buat tugas change gear tapi kereta ada maklumat tentang gear jadi nak buat macam mana nie?.. Kalau tanya BIJAN dia jawab kita perlukan kereta yang ada ciri GLOKAL .. hahahah (iklan sebentar). So mamat Brian nie kata keluarkan tugas tersebut kepada seorang Driver (role). Aku tak setuju sangat. Nie contoh yang dia beri dan apa yang diberi sebenarnya valid dan boleh digunakan cuma jika diteliti dengan lebih detail pasti jawapan lain sedikit.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JKWF88m2xLU/SdXToyrvwNI/AAAAAAAAAKA/1-4WZUfu9hw/s1600-h/cardriver.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://2.bp.blogspot.com/_JKWF88m2xLU/SdXToyrvwNI/AAAAAAAAAKA/1-4WZUfu9hw/s320/cardriver.png" alt="" id="BLOGGER_PHOTO_ID_5320391232561594578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Disini kena faham konsep message to object. Persoalan Driver perlu ada atau tidak masih lagi abstract kepada Domain Expert dan juga untuk apa application ini dihasilkan. Kalau application nie dihasilkan untuk stimulate Video Game dimana dari screen hanya nampak kereta yang boleh dipandu maka class Driver tidak diperlukan sebaliknya class Driver itu digantikan dengan Application Service - CarService.&lt;br /&gt;&lt;br /&gt;Ini pula pada pendapat aku, yang dikategorikan sebagai programmer kampung. Untuk mengikut konsep SRP kita perlu pecahkan tugas-tugas tersebut kepada yang berhak, jangan tamak nak ambil tugas orang lain, nasib baik BIJAN tak tamak dia ambik sikit je. Dari class Car kita akan pecahkan kepada class Gear, class Radio, class Engine.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JKWF88m2xLU/SdXbKjJNrfI/AAAAAAAAAKg/fOdD5NqjXMM/s1600-h/car1.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_JKWF88m2xLU/SdXbKjJNrfI/AAAAAAAAAKg/fOdD5NqjXMM/s400/car1.PNG" alt="" id="BLOGGER_PHOTO_ID_5320399509087170034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;//Car.cs&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;AR-SA&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:10.0pt; 	margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin-top:0in; 	mso-para-margin-right:0in; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:blue;"   &gt;public&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Car&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Gear&lt;/span&gt; Gear { &lt;span style="color:blue;"&gt;set&lt;/span&gt;; &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Engine&lt;/span&gt; Engine { &lt;span style="color:blue;"&gt;set&lt;/span&gt;; &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Radio&lt;/span&gt; Radio { &lt;span style="color:blue;"&gt;set&lt;/span&gt;; &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Drive()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;//Engine.cs&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;AR-SA&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:10.0pt; 	margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin-top:0in; 	mso-para-margin-right:0in; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:blue;"   &gt;public&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Engine&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Start()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  //Gear.cs&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;AR-SA&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:10.0pt; 	margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin-top:0in; 	mso-para-margin-right:0in; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:blue;"   &gt;public&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Gear&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ChangeGear()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;  //Radio.cs&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;AR-SA&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:10.0pt; 	margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:Arial; 	mso-bidi-theme-font:minor-bidi;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin-top:0in; 	mso-para-margin-right:0in; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:blue;"   &gt;public&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Radio&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ChangeRadioStation()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;//CarService.cs&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:10;"  &gt;public class CarService&lt;br /&gt;  {&lt;br /&gt;      public Car Car { set; get; }&lt;br /&gt;&lt;br /&gt;      public void ChangeGear()&lt;br /&gt;      {&lt;br /&gt;          Car.Gear.ChangeGear();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public void ChangeRadioStation()&lt;br /&gt;      {&lt;br /&gt;          Car.Radio.ChangeRadioStation();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public void StartEngine()&lt;br /&gt;      {&lt;br /&gt;          Car.Engine.Start();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public void Drive()&lt;br /&gt;      {&lt;br /&gt;          Car.Drive();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8985698-8115512985402600497?l=ryzam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ryzam.blogspot.com/feeds/8115512985402600497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8985698&amp;postID=8115512985402600497' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8115512985402600497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8985698/posts/default/8115512985402600497'/><link rel='alternate' type='text/html' href='http://ryzam.blogspot.com/2009/04/single-responsible-principle.html' title='Single Responsibility Principle'/><author><name>ryzam</name><uri>http://www.blogger.com/profile/08948488698923418322</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JKWF88m2xLU/SdXJ8yw9xxI/AAAAAAAAAJ4/HwuNszl7B-Y/s72-c/car.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8985698.post-5646873923567089753</id><published>2009-04-03T12:21:00.002+08:00</published><updated>2009-04-03T12:38:27.070+08:00</updated><title type='text'>New PM</title><content type='html'>Emm macam mana?... ok ke tak ok.. dia reti buat programming tak?hahahah , criteria PM yang bagus tahu selok belok programming so penanda aras logik yang tinggi(ni cakap orang fanatik programming) sepatututnya PM dari mereka yang berjuang dalam OSS sebab mereka kena ikhlas membantu programmer dan rakyat jelata yang lain tanpa memikirkan fulus.  Bayangkan PM nie peminat dan pejuang OSS, sure takde kes komisyen yang melampau. Nie PM bukan Project Manager, aku tak berminat pasal PM tu, yang aku tengah fikirkan nun PM pinang sebatang BIJAN. Please someone buat code boleh reverse word BIJAN-&gt;_ _ _ _ _.&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CIRWAN%7E1.AZA%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;AR-SA&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" 
