Thursday, February 08, 2007

Manajer proyek harus tau jika bawahannya overload

Salah satu kemapuan yang harus dimiliki seorang manajer proyek (PM) adalah jeli melihat kondisi bawahan atau timnya. Kondisi anggota timnya yang overload bisa sangat memperngaruhi kinerja keseluruhan, oleh karena itu dia harus jeli melihat secara personal dari masing-masing anggota timnya. Kemampuan ini tidaklah mudah karena menyangkut psikologi manusia, seorang PM sering pula mengabaikan masalah overload ini.

Mengapa kadang sulit mengetahui seseorang overload atau tidak? Pertama adalah masalah kepedulian. PM sering tidak peduli dengan anggota timnya, yang dipikirkan PM hanyalah proyek yang selesai tepat waktu. Padahal nilai suatu proyek tidak bisa dilihat dari selesai tidaknya saja. Dalam dunia software, pekerjaan yang selesai tapi dengan kualitas yang buruk akan menjadi bom waktu bagi perusahaan. Klien menjadi tidak puas, biaya akan membengkak, tim bisa acak-acakan karena ada yang keluar dan anggota baru dan efek-efek lain yang merugikan perusahaan.

Secara psikologis, keadaan overload seorang programmer akan secara langsung mempengaruhi kualitas kerja dan otomatis mempengaruhi kualitas software yang dihasilkan. Tapi sayangnya banyak programmer yang tidak sadar dirinya overload. Programmer yang tidak sadar dirinya overload atau tidak mau mengakui dirinya overload, sayangnya sangat disukai oleh PM. Sebaiknya justru PM harus jeli melihat tipe programmer seperti ini.

Programmer atau anggota tim apapun posisinya harus dihindari dari overload. Lembur sekali dua kali dalam sebulan adalah hal yang wajar dan mungkin belum bisa dibilang overload, oleh karena itu PM juga harus punya kejelian kapan overload terjadi. Lembur hampir tiap hari yang terjadi dalam satu bulan pun bisa dikatakan tidak overload. Overload tergantung dari apa yang dikerjakan anggota tim atau individu bukan dilihat dari banyaknya kerja diluar batas waktu atau lembur.

Thursday, February 01, 2007

SMPP library untuk aplikasi anda

Jika anda perlu SMPP library (API) dibawah ini saya list beberapa library yang gratis dan mungkin open source untuk berbagai macam bahasa pemrograman:

Library untuk .NET
Library (modul) untuk Perl: Net-SMPP
Library (extension) untuk PHP: Net_SMPP
Library untuk JAVA:

Monday, January 29, 2007

Too many open files

Pernah menjalankan program java dan mendapatkan error "Too many open files" seperti dibawah ini?


java.io.IOException: Too many open files
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:145)
...

atau

java.net.SocketException: Too many open files
at com.sun.xml.rpc.client.http.HttpClientTransport.invoke(HttpClientTransport.java:140)
at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:96)


Mudahnya, hal tersebut terjadi karena program java ataupun sistem operasi mencapai batas jumlah soket atau file yang dapat dibukan pada saat bersamaan (concurrent).

Yang perlu dilakukan ketika mendapatkan error tersebut adalah, pastikan program yang anda buat selalu menutup file atau socket setelah tidak digunakan. Yang kedua, tambah maximum jumlah socket atau file yang bisa dibuka bersamaan pada sistem operasi yang anda gunakan.

Untuk Linux anda bisa check jumlah socket atau file yang dibuka bersamaan dengan program atau command lsof, misalnya untuk mengecek jumlah socket yang sedang dibuka berikan perintah 'lsof -i. Maximum jumlah socket atau file yang bisa dibuka secara bersamaan dapat dilihat dengan perintah 'ulimit -a'

Untuk mengubah setting maximum jumlah file tersebut, anda bisa mengedit file /etc/security/limits.conf atau dengan perintah berikut:

ulimit -n 2048

echo 2048 > /proc/sys/fs/file-max
echo 16384 > /proc/sys/fs/inode-max

Lebih jelas mengenai masalah ini, bisa dibaca di artikel "Resolve to many open files."

Thursday, January 25, 2007

MM7 schema binding dengan JAXB

MM7 schema binding dengan JAXB

Ini adalah pengalaman saya menggunakan JAXB untuk men-generate class source code untuk MM7.
MM7 merupakan spesifikasi untuk mengirimkan MMS ke MMSC menggunakan XML SOAP. MM7 biasanya digunakan untuk menghubungkan content provider dengan operator telco.
Contoh ini mungkin berguna bagi yang mulai mencoba menggunakan JAXB dan menemui kesulitas dengan error yang sama.

Untuk membuat source code dari schema file (xsd) dengan meggunakan JAXB, gunakan perintah xjc.bat atau xjc.sh
Pertama kali yang saya lakukan untuk melakukan binding XML schema ke java code adalah dengan perintah seperti berikut:


C:\USERS\ejlp>%JWSDP_HOME%\jaxb\bin\xjc.bat -nv -extension REL-5-MM7-1-2.xsd

REL-5-MM7-1-2.xsd adalah file XML schema MM7 dan %JWSDP_HOME% adalah environtment varibel dari Java Web Service Developer Pack terinstal.
Yang saya dapat dari perintah diatas adalah pesan error seperti dibawah ini:


Warning: JAVA_HOME environment variable is not set.
If build fails because sun.* classes could not be found
you will need to set the JAVA_HOME environment variable
to the installation directory of java.

parsing a schema...
[WARNING] warning: <anyAttribute> ignored
line 48 of
[WARNING] warning: <anyAttribute> ignored
line 56 of
[WARNING] warning: <anyAttribute> ignored
line 64 of
[WARNING] warning: "final" attribute of <complexType> is not supported
line 99 of
[WARNING] warning: <anyAttribute> ignored
line 117 of
[WARNING] warning: <anyAttribute> ignored
line 324 of REL-5-MM7-1-2.xsd
[ERROR] A class/interface with the same name "org.xmlsoap.schemas.soap.envelope.Envelope" is already in use.
Use a class customization to resolve this conflict.
line 42 of
[ERROR] (Relevant to above error) another "Envelope" is generated from here.
line 41 of
[ERROR] A class/interface with the same name "org.xmlsoap.schemas.soap.envelope.Body" is already in use.
Use a class customization to resolve this conflict.
line 60 of
[ERROR] (Relevant to above error) another "Body" is generated from here.
line 59 of
[ERROR] A class/interface with the same name "org.xmlsoap.schemas.soap.envelope.Fault" is already in use.
Use a class customization to resolve this conflict.
line 99 of
[ERROR] (Relevant to above error) another "Fault" is generated from here.
line 98 of
[ERROR] A class/interface with the same name "org.xmlsoap.schemas.soap.envelope.Header" is already in use.
Use a class customization to resolve this conflict.
line 52 of
[ERROR] (Relevant to above error) another "Header" is generated from here.
line 51 of
Failed to parse a schema.


Saya abaikan pesan warning, saya cuma concern pada pesan error yang saya kira membuat file source java tidak terbuat. Error tersebut terjadi karena ada konflik penamaan. JAXB akan membuat class dengan nama yang sama, dalam hal ini adalah Envelope, Body, Fault dan Header.

Setelah mencari informasi penyebab error tersebut maka saya mendapatkan solusi yaitu dengan membuat file binding.xjb yang merupakan konfigurasi binding yang harus dilakukan JAXB. Dalam file yang dibuat tersebut, saya buat agar setiap class yang akan di-generate dengan package org.xmlsoap.schemas.soap.envelope dari elemen bernama Fault akan diberinama SOAPFault bukan Fault, dan yang dari elemen Header akan diberinama SOAPHeader bukan Header, begitu juga dengan elemen Body dan Envelope.

Dibawah ini adalah isi dari file binding.xjb

   
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="http://schemas.xmlsoap.org/soap/envelope/" node="/xs:schema">

<jxb:schemaBindings>
<jxb:package name="org.xmlsoap.schemas.soap.envelope"/>
<jxb:nameXmlTransform>
<jxb:elementName suffix="Element"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>

<jxb:bindings node="//xs:element[@name='Fault']">
<jxb:class name="SOAPFault"/>
</jxb:bindings>

<jxb:bindings node="//xs:element[@name='Header']">
<jxb:class name="SOAPHeader"/>
</jxb:bindings>

<jxb:bindings node="//xs:element[@name='Body']">
<jxb:class name="SOAPBody"/>
</jxb:bindings>

<jxb:bindings node="//xs:element[@name='Envelope']">
<jxb:class name="SOAPEnvelope"/>
</jxb:bindings>

</jxb:bindings>

</jxb:bindings>

Setelah itu saya jalankan lagi perintah ditas tadi dengan menggunakan file konfigurasi binging bernama binding.xjb.
Dengan konfigurasi diatas, tidak terjadi lagi konfilik penamaan class.

C:\USERS\ejlp>%JWSDP_HOME%\jaxb\bin\xjc.bat -nv -extension REL-5-MM7-1-2.xsd -b binding.xjb

Thursday, November 30, 2006

Daily log menggunakan Log4J

Jika anda menggunakan Log4J andan menginginkan log file selalu berganti setiap hari, maka ada beberapa solusi yang bisa digunakan.

Pertama, menggunakan class org.apache.log4j.DailyRollingFileAppender sebagai appender. Class tersebut telah ada dalam library Log4J, jadi kita bisa langsung menggunakannya.

Atau menggunakan solusi dari http://minaret.biz/tips/datedFileAppender.html

Kedua solusi tersebut berbeda, jadi anda harus memilih mana yang paling sesuai dengan kebutuhan.

Followers