Sampah kalian !!!

October 27, 2009 urangbiase Leave a comment

Pagi ini aku membaca sebuah tulisan di salah satu situs news, judulnya “Kenaikan Gaji Korbankan Anggaran Gizi Buruk”. Isinya tentang kenaikan gaji di DepKeu, MA dan BPK. Sontak emosi ku naek..naek sekali..setinggi puncak Jayawijaya.

Sesuai titlenya, yang dikorbankan adalah anggaran gizi buruk. Woi hebat kali kalian ya, sudah enak-enak di “lahan basah”, kerja pun tak kunjung becus..sekarang kalian mengambil jatah rakyat miskin, rakyat jelata, anak-anak yang menderita busung lapar. Bukannya ber-terima kasih kepada rakyat dengan bekerja sebaik-baiknya, eh ini malah minta kenaikan gaji pulak!!. Masih kurang apa uang rakyat yang kalian makan selama ini??!!. Masih kurang “buncit” kah perut kalian tu woi?!!.

Semakin sedih Ibu pertiwi, menangis para pejoeang negara ini. Semakin hilang empati rakyat kecil kepada kalian. Hanya ada satu kata untuk kalian…SAMPAH!!!

Categories: SegalaRupa

Mencari semangat

October 12, 2009 urangbiase Leave a comment

Pagi ini ku coba mencari semangat, berbagai site di internet ku kunjungi…namun semangat itu tak kunjung ku temui. Teringat aku akan tim-ku dulu yang penuh semangat dan full dengan energi tak terbatas, the greatest team..OpenCAMS. Kami punya mars yang bikin semangat, yang kami ambil dari Mars Slanker. Salah seorang saudaraku pernah menuliskan mars tersebut didalam blognya, aku pun meluncur kesana.

Disini tempat cari senang
salah tempat kalau kau cari uang
disini orang-orang penuh kreatifitas
tempat orang-orang yang survive.

Disini bukan anak-anak malas
tempatnya para pekerja keras
disini bukan anak-anak manja
sedikit kerja banyak mintanya.

Bali, siap bekerja keras!!!

Kerja..kerja..ayo kita kerja !!!

Nah..kembali lagi semangatku pagi ini, trims sodaraku.

Categories: 1

Konfirmasi dialog popup di richfaces

September 9, 2009 urangbiase 3 comments

Kali ini saya mendapat tugas membuat konfirmasi dialog popup, yang menampilkan message tertentu..seperti “Are you sure..?” dilengkapi dengan tombol “Yes” atau “No”. Kebetulan teknologi web komponen yang dipakai kali ini adalah richfaces. Agar reusable, saya buat konfirmasi dialog popup tersebut sebagai komponen. Untuk itu dipakek lah teknologi facelets yang bisa bisa mendefine komponen dengan mudah. Dan kebetulan lagi, richfaces dan facelets tersebut sudah ada dan terkonfigurasi dalam JBoss Seam Framework, framework yang sedang saya gunakan sekarang. Untuk instalasi dan konfigurasi richfaces dan facelets, silahkan merujuk ke situs offi-sial-nya.

Langsung saja ke code nya y, daripada berpanjang lebar g jelas (talk is cheap, show me the code, Linus – 2000).

  • Buat satu page popup dialog konfirmasi. Kita beri nama confirmation.xhtml, kira-kira begini isinya:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    &ltui:component xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:ui="http://java.sun.com/jsf/facelets">
    
    <a4j:jsFunction name="#{submitName}" action="#{resolver.resolveMethodExpression(actionBean)}" reRender="#{listName}"/>
    
    <rich:modalPanel id="#{modalPanelId}" width="250" height="150">
       <f:facet name="header">#{messages['common.Confirmation']}</f:facet>
       <h:panelGrid>
          <h:panelGrid columns="2">
             <h:graphicImage value="/img/msginfo.png" />
             <h:outputText value="#{textMessage}" style="FONT-SIZE: large;" />
          </h:panelGrid>
          <h:panelGroup>
             <rich:spacer height="20px" />
    		 <input type="button"
    		 value="OK"
    		 onclick="#{rich:component(modalPanelId)}.hide();#{rich:component('wait')}.show();
                                 #{submitName}();return false;" />
    		 <input type="button" value="Cancel" onclick="#{rich:component(modalPanelId)}.hide();return false" />
          </h:panelGroup>
       </h:panelGrid>
    </rich:modalPanel>
    </ui:component>
                
  • Konfirmasi dialog akan menjalankan action tertentu jika jawaban dari user meng”iya”kan. Nah action tersebut kita jadikan parameter agar konfirmasi dialog yang kita pasang dapat memiliki action yang berbeda satu sama lain. Untuk keperluan ini maka kita buat backing bean Resolver. Resolver ini berfungsi me-resolve ekspresi EL berupa action atau method dari backing bean yang dijadikan parameter. Langkah berikutnya adalah membuat bean resolver tersebut. Berikut kodenya:
    /* Resolver.java */
    import org.jboss.seam.ScopeType;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;
    import org.jboss.seam.core.Expressions;
    import org.jboss.seam.core.Expressions.MethodExpression;
    
    @Name("resolver")
    @Scope(ScopeType.APPLICATION)
    public class Resolver {
    	public Object resolveMethodExpression(String elStr) {
    		MethodExpression resolvedEl = Expressions.instance().createMethodExpression("#{" + elStr + "}");
    		if (resolvedEl != null) {
    			resolvedEl.invoke();
    		}
    		return resolvedEl;
    	}
    }
           

    Resolver mempunyai scope “application” karena bean ini akan digunakan berulang kali selama konfirmasi popup dialog digunakan. Sebagai catatan, Resolver diatas spesifik ke seam, karena menggunakan method yang dimiliki oleh seam.

  • Berikutnya tinggal membuat file definisi taglib atas komponen konfirmasi popup dialog dan mendefinisikan file taglib tersebut dalam web.xml.
                <!--- confirmation-taglib.xml --->
                <?xml version="1.0"?>
    <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "facelet-taglib_1_0.dtd">
    <facelet-taglib>
       <namespace>http://urangbiase.wordpress.com/ui</namespace>
    	<tag>
    		<tag-name>confirm</tag-name>
    		<source>confirmation.xhtml</source>
    	</tag>
    </facelet-taglib>
           
                 <!--- web.xml --->
                 <context-param>
                     <param-name>facelets.LIBRARIES</param-name>
                     <param-value>/WEB-INF/confirmation-taglib.xml</param-value>
                 </context-param>
            
  • Selesai sudah komponen konfirmasi popup dialog yang kita buat. Berikutnya adalah implementasi dari komponen yang telah kita buat.

    <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
       -------------cutted text-----------8<
        xmlns:urang="http://urangbiase.wordpress.com/ui">
        -------------cutted text-----------8<
        <a4j:form>
    	&lturang:confirm actionBean="transportationList.removeSelected()" modalPanelId="removeSelectedTransportation"
    				   listName="transportationList" textMessage="Are you sure remove selected row?"
    				   submitName="submitRemoveSelectedTransportation"/>
        -------------cutted text-----------8<
        <a4j:commandLink id="comLinkRemoveSelected">
               <h:graphicImage value="/img/trash.gif" />
        </a4j:commandLink>
       <rich:componentControl attachTo="comLinkRemoveSelected"
               for="#{removeSelectedConfirmation}"
               event="onclick"
               operation="show"/>
       <rich:toolTip value="#{messages['common.RemoveSelected']}" for="comLinkRemoveSelected2"/>
       </a4j:form>
    </ui:composition>
    

    Dan inilah hasil tangkapan layar dari konfirmasi dialog popup.

    popupdialog

    Demikianlah, semoga bermanfaat. Kritik, saran dan THR amat dinantikan :) .

    PS: tulisan ini dibuat ketika belum dapat kucuran THR.

    Categories: NyanyianKode, seam

    Klausa equals String

    April 25, 2009 urangbiase Leave a comment

    Untuk membandingkan dua String, biasa nya saya menggunakan cara ini:

        String str = "SangPemimpi";
        if (str.equals("SangPemimpi")) {
            // do something
        }

    Cara itu sudah benar, namun ada best-practicenya:

        if ("SangPemimpi".equals(str)) {
            // do something
        }
    

    Dimana letak perbedaanya? Cara yang pertama sangat riskan, bisa terkena NPE (NullPointerException) jika variabel str bernilai null. Sedangkan cara kedua, meskipun str bernilai null tidak akan terjadi NPE.

    Sekian, semoga bermanfaat

    Categories: NyanyianKode

    Keris andalan Yang-kung Gogor

    April 21, 2009 urangbiase 4 comments

    Disaat sedang hanyut dan tenggelam dalam source code, sebuah sms masuk ke hpku. Ternyata sms tersebut dari istri tercinta yang isinya mengabarkan bahwa keris andalan Bapak sudah hampir selesai diperbaiki (diganti warangka dan gayamannya).  Kebetulan waktu selesainya pengerjaan keris tersebut berdekatan dengan waktu kepulanganku ke rumah mertua, tidak sabar hati untuk segera pulang.

    Setiba di rumah mertua, aku langsung melihat keris tersebut. Meskipun belum mengerti benar tentang seni keris, namun dari sudut pandang diriku sebagai orang awam keris tersebut sedap dan nikmat betul dipandang oleh mata..keindahan yang sulit dilukiskan dengan kata-kata. Karena tidak bisa melukiskan dengan kata-kata, akhirnya ku foto agar kita semua bisa menikmati keindahannya. Selamat menikmati salah satu warisan budaya Indonesia.

    keris00

    keris021

    keris05

    • Tangguh/era/period) : Surakarta/Paku Buwono VII
    • Dhapur : Nogo siluman megantoro luk 7
    • Pamor : Sanak
    • Warangka : Kayu kemuning dengan hiasan perak (ukiran Kotagede Yogyakarta) dan batu yakutz, dihiasi gading pada ujung warangka. Warangka dibuat oleh Sumadi, desa Semawung – Purworejo
    • Gayaman : Bali
    • Koleksi : Achmad Fauzi
    Categories: SegalaRupa Tags:

    Menambahkan service bisnis ADF-BC

    March 16, 2009 urangbiase Leave a comment

    Kawan, beberapa waktu yang lalu, aku mendapat “wejangan” dari seniorku tentang MVC di Oracle Application Development Framework (ADF). Karena aku orangnya perlupa, aku tuliskan di blog ini, syukur2 bisa bermanfaat bagi orang lain;).

    Oracle ADF itu dibagi tiga bagian; ADF Business Component, ADF Binding Container, ADF Faces.

    1. ADF Business Component (ADF-BC), adalah layer model. Layer model berhubungan dengan bisnis; EntityObject (EO) persisten data object dari database (table), ViewObject (VO) representasi dari data akses atau singkat cerita VO ini adalah query. EO dan VO bekerja sama untuk melakukan operasi baca-tulis. Dan yang terakhir adalah ApplicationModule (AM) yang menampung VO, EO. Melalui AM inilah kita dapat mengakses VO, EO ataupun service-service yang berkaitan dengan level bisnis.
    2. ADF Binding Container, bisa dikatakan bekerja di layer controller, menga-abstraksikan layer model yang digunakan. Sehingga controller (backing bean, pageDef) dapat dengan bebas menggunakan layer model tanpa peduli framework model apa yang digunakan.
    3. ADF Faces, berada di layer view. ADF Faces adalah extend/penambahan dari JavaServer Faces.

    Nah sekarang sudah agak keliatan “petanya”, jangan sekali-kali code bisnis ditaruh di controller. Kalau mau menambahkan/menyediakan proses bisnis, taruhlah pada tempatnya, di level model (AM). Sebenarnya AM (dan AMImpl) berisi dengan daftar (getter) service-service dan ViewObject yang dimilikinya, jadi sebaiknya code bisnis dipisah dari AM agar AM tidak kotor (dengan bloat code dari bisnis process).

    Buat satu class yang nantinya class tersebut berisi code bisnis yang akan kita tambahkan (selanjutnya class ini kita sebut service bisnis). Relasi antara class AMImpl dengan class service bisnis adalah “HAS-A”.
    Sebagai contoh, kita memiliki ParameterAMImpl sebagai class AMImpl dan CopyAgreement sebagai class bisnis. Pada class AM (ParameterAMImpl):

    /**
     * ParameterAMImpl.java
     */
    public class ParameterAMImpl extends ApplicationModuleImpl implements ParameterAM {
        private CopyAgreement copyAgreement;
    
        public ParameterAMImpl() {
            copyAgreement = new CopyAgreement(this);
        }
    
        -----cutted-text---8<
        public void copyAgreement(Number sourceAgrId, Number destAgrId,
                                  int type, Long tenantId) {
            copyAgreement.doCopyAgreement(sourceAgrId, destAgrId, type, tenantId);
        }
        -----cutted-text---8<
    }

    Pada class bisnis (CopyAgreement.java):

    /**
     * CopyAgreement.java
     */
     public class CopyAgreement {
        private ParameterAMImpl parameterAMImpl;
    
        public CopyAgreement(ParameterAMImpl parameterAMImpl) {
            this.parameterAMImpl = parameterAMImpl;
        }
    
        public void doCopyAgreement(Number sourceAgrId, Number destAgrId, int type,
                                  Long tenantId) {
            switch (type) {
            case GlobalConstants.COPY_AGREEMENT.DEALER_MAP:
                copyDealerMap(sourceAgrId, destAgrId, tenantId);
                break;
            -----cutted-text---8<
            }
        }
    -----cutted-text---8<
    }

    Nah, untuk menggunakan method action bisnis yang sudah didefinisikan di AM tersebut, si-client (controller) tinggal mendapatkan dari pageDefs, tidak lupa parameter-parameternya juga di-set. Sebagai contoh:

        public void returnCopyAgreement(ReturnEvent event) {
            Number sourceAgreementId = (Number)event.getReturnValue();
            if (sourceAgreementId == null)
                return;
    
            Long tmpDestAgrId = Long.parseLong(JSFUtil.getProcessObj("AgreementId").toString());
            Number destAgreementId = new Number(tmpDestAgrId);
    
            OperationBinding opBind = getBindings().getOperationBinding("copyAgreement");
            opBind.getParamsMap().put("sourceAgrId", sourceAgreementId);
            opBind.getParamsMap().put("destAgrId", destAgreementId);
            opBind.getParamsMap().put("type", GlobalConstants.COPY_AGREEMENT.UPLOAD_FILES);
            opBind.getParamsMap().put("tenantId", CommonUtils.getTenantId());
            opBind.execute();
            -----cutted-text---8<
        }

    Sekian kawan, semoga bermanfaat. Kritik dan sarannya amat dinantikan. Merdeka !!!.

    Categories: NyanyianKode

    Menjadi freelancer dunia maya

    February 16, 2009 urangbiase 3 comments

    Ada slot waktu kosong yang tersisa dalam satu minggu kerja, yakni sabtu dan minggu. Menyadari waktu cepat berlalu, Aku berfikir ada baiknya jika waktu luang ini dimanfaatkan untuk hal yang bermanfaat, seperti mencari tambahan uang saku..hehe.

    Atas saran beberapa kawan, akhirnya aku mendaftar dibeberapa situs freelancer IT; http://www.getafreelancer.com, http://www.scriptlance.com/. http://www.rentacoder.com/. Nah untuk transaksi pembayaran, aku mendaftar di paypal.

    Dengan keahlian yang tak seberapa ini, semoga aku bisa berkarya. Amiiin

    Categories: SegalaRupa

    Empat serangkai

    February 11, 2009 urangbiase 1 comment

    Kawan..menyambung tulisan tentang team ditempat kerjaku, ada beberapa orang yang belum aku ceritakan. Ke-empat orang ini adalah “guru” bagi diriku, khususnya selama aku berada dalam di-tim Open-CAMS. Banyak memberi pelajaran, wejangan-wejangan dan “jurus-jurus” sebagai bekal mengarungi rimba per-codingan. Kenapa ke-empat orang ini aku sebut empat serangkai? itu karena mereka ber-empat selalu pulang bareng dari kantor :D .

    Johar Shodiq
    Beliau ini adalah ProjectManager (PM) di-timku. Beliau tipikal pekerja keras, tak kenal lelah dan loyal dengan pekerjaan. lihat saja kawan..Beliau kerja sering hingga larut malam, rata-rata balik dari kantor jam 12 malam atau jam 1 dini-hari. Beliau tak segan-segan turun tangan langsung jika “anak-asuhan”nya ini mengalami kesulitan teknis (berhubungan dengan query SQL dan database), dan hal-hal ketebelece lainnya seperti; surat kontrak, hak-hak karyawan.
    Pada awalnya aku mengira Beliau adalah orang yang kaku, tidak nyantai. Pada hari minggu lalu (31/01/2009), Beliau dan kawan-kawan dari BaliCamp (termasuk aku) snorkling di blue lagoon, melepaskan kepenatan. Kami snorkling dan bermain ombak sepuas-puasnya, berteriak dan tertawa lepas menyongsong ombak yang datang, tak terkecuali Beliau. Dapat kau lihat kawan, perkiraanku diawal adalah salah besar, Beliau bisa berteriak “Tuh..tuh ombaknya dataaang” lalu tertawa kegirangan, ternyata dia juga manusia biasa kawan.
    Kawan…mulai Februari 2009 nanti Beliau tak lagi jadi PM-ku, karena beliau akan berkarya ditempat yang baru, tempat yang lebih baik lagi. Selamat jalan Pak Shodiq, senang bisa berkarya denganmu..semoga sukses..sampai jumpa di kesempatan dan waktu yang lebih baik.

    Rudi Adianto a.k.a Batman
    Beliau ini adalah superhero, panggilannya “Batman”..sakti mandraguna, punya segudang ilmu kanuragan. Beliau sering menyelamatkan kami-kami developer yang masi seumur jagung ini dari ketidaktahuan. Ku beri tau kau kawan…BungRudi ini tak segan-segan membagi jurus-jurus coding, coba saja kau tanya..kalau dia tau dia pasti jawab. BungRudi tidak sombong, baek hati dan suka menabung..oh iya dia juga tak segan-segan membagi Marlboro-nya. Tapi sayang kawan, sekarang dia juga akan berkarya ditempat lain. Sampai jumpa Bung..di lain waktu dan kesempatan yang lebih baik, jangan kau lupakan kami, apalagi kalau kau punya acara kenduri atau makan-makan.

    Deddy Arisanto Budiman
    Kalau kau datang ke CAMS, dan melihat orang yang paling enak diajak bicara dan diskusi, dialah Pak Deddy. Pria rendah hati ini sangat senang bercanda, ada-ada saja hal yang bisa dijadikan bahan canda-an. Pandai, sederhana, serius tapi santai, itulah Pak Deddy. Satu hal yang ku ingat tentang Beliau, kalau dia menjelaskan sesuatu…pasti kau mudah mencernanya..mengalir seperti air, jarang ku temui orang macam ini.

    Herwin
    Dalam team, Beliau ini yang paling semangat dalam bekerja..dari pagi hingga malam, on-fire terus. Bahkan di dalam perjalanan pulang dari kantorpun, Beliau masih sempat buka laptop dan membaca/mempelajari sesuatu. Di waktu senggangnya (atau disempat-sempatkan), Beliau berenang di kolam kantor..”biar lebih segar Mid”…begitu katanya.

    Begitulah kawan…sekalias mengenai empat serangkai di-tim ku.
    Sekian

    Categories: SegalaRupa Tags:

    Nasehat tentang nafsu

    January 30, 2009 urangbiase 2 comments

    Wahai anak muda..

    Ada sesuatu dalam dirimu yang harus kau waspadai…itu adalah hawa nafsumu.

    Nafsu itu bagai pedang bermata dua, bisa buruk maupun baik. Tergantung darimana kau menggunakannya.

    Gunakanlah dengan semestinya, pada waktu dan tempat yang tepat. Jangan kau biarkan ia menguasaimu, waspada terhadap semua bentuk kamuflase hawa nafsu.

    Guruku (Usman Fattah) pernah berkata; “Seorang pendekar adalah orang yang bisa mengendalikan dan menguasai nafsunya sendiri”.

    Pertempuran yang berat dan besar yang akan kau lalui seumur hidupmu adalah…pertempuran hati…pertempuran melawan hawa-nafsu. Jangan sampai kau kalah dan dikendalikan hawa-nafsumu.

    Sekian anak muda.

    Categories: SegalaRupa

    Dhedhek umur 3.5 bulan

    January 29, 2009 urangbiase Comments off

    Dhedhek 3.5 bulan

    Dhedhek 3.5 bulan

    Ini foto Dhedhek umur 3.5 bulan..Alhamdulillah ^^. Doa Ayah untuk Dhedhek; Semoga Bunda dan Dhedhek sehat tidak kurang suatu apapun, Semoga Dhedhek jadi anak yang berbakti kepada orang tua..berbudi-perkerti luhur. Semoga menjadi anak yang cerdas berotak Jerman, berhati Ka’bah dan berjiwa Indonesia..Semoga jadi insan yang berguna bagi keluarga, masyarakat, bangsa dan agama. Amiiin.

    Categories: Keluarga Tags: