Halaman

Rabu, 21 April 2010

FPDF Multicell: Printing automatic word wrap and border

Purpose: To print columnar style report with text descriptions lie in top area of a report.
Software: PHP + FPDF
Output:

In FPDF we use Cell method/function to print columnar data, while MultiCell is used for variable-length data to fit in a specified area.

MultiCell allows printing text with line breaks. Word or text wrapping can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other. Text can be aligned, centered or justified. The cell block can be framed and the background painted.

The example above shows a header - as what this article want to address - as a part of a Purchase Requisition form, while the same also apply for Billing or Application form, etc.

Here is a part of my class:


class PDF extends FPDF {
//my var declaration
//my public declaration

function BuatJudulObyekKerja($nomor) {
$nrowHeight=4;
$npageWidth=179;
$nwidthCol1=40;
$nwidthCol2=30;
$nwidthCol3=25;
$nColonWidth=2;

$this->SetFont('Helvetica','B',10);
$this->Cell(0, 0,'Nomor: '.$nomor,'',1,'C',0);
$this->Ln(3);
$this->SetFont('Helvetica','',8.5);
$this->Cell($npageWidth, $nrowHeight, '', 'LTR',0,'R',0);
$this->Cell($npageWidth, 2, '', '',1,'R',0);
$this->Cell($nwidthCol1, 1,'Description', 'L' ,0,'L');
$this->Cell(nColonWidth, 1,':', '' ,0,'L');

$this->SetXY(58,33);

$y=$this->GetY();
$this->MultiCell(137,$nrowHeight,$this->pan_namaobyek,'R','J');
$y1=$this->GetY();

$nrowPrinted=($y1-$y) /$nrowHeight;
$this->SetY($y);
for ($i=0; $i < $nrowPrinted; $i++) {

$this->Cell($nwidthCol1+11, $nrowHeight,'', 'L' ,1,'L');
}


$this->Cell($nwidthCol1, $nrowHeight,'Form','LT' ,0,'L');
$this->Cell($nColonWidth, $nrowHeight,':','T' ,0,'L');
$this->Cell($nwidthCol1,$nrowHeight, $this->kategori , 'T' ,0,'L');
$this->Cell($nwidthCol2, $nrowHeight,'','T',0,'L');
$this->Cell($nwidthCol3, $nrowHeight,'Doc.ID#', 'LT' ,0,'L');
$this->Cell($nColonWidth, $nrowHeight,':','T' ,0,'L');
$this->SetFont('Helvetica','B',8.5);
$this->Cell($nwidthCol1, $nrowHeight, $this->pan_pk , 'TR',1,'L');
$this->SetFont('Helvetica','',8.5);

$this->Cell($nwidthCol1, $nrowHeight,'Raised by','LT' ,0,'L');
$this->Cell($nColonWidth, $nrowHeight,':','T' ,0,'L');
$this->Cell($nwidthCol1,$nrowHeight, $this->usaha , 'T' ,0,'L');
$this->Cell($nwidthCol2, $nrowHeight,'','T',0,'L');
$this->Cell($nwidthCol3, $nrowHeight,'Reff.No', 'LT' ,0,'L');

$this->Cell($nColonWidth, $nrowHeight,':','T' ,0,'L');
$this->Cell($nwidthCol1, $nrowHeight, $this->pan_nosurat , 'TR',1,'L');
....
}

Sabtu, 17 April 2010

Delphi 7: frame.color property frame does not exist

I just open a Quick Report form of Delphi 7 but face error message that says "...frame.color: property frame does not exist...". I checked the installed package but there is no QR component there, except Rave report.

Delphi 7 does not automatically install Quick Report component, so I did this:
1. Choose Install Packages in Component menu
2. Click Add then select dclqrt70.bpl file from Delphi7\Bin directory
3. Click Open then click OK.

The problem solved.

Delphi 7 on Windows Vista

Borland Delphi 7 was released in 2002 and perhaps you may still use this software. If we run it on Windows Vista, an error raised with the following message "Unable to rename C:\Program Files\Borland\Delphi7\Delphi32.$$$ to Delphi32.dro".

I thought that was about security access/permission. With Administrator privilege, I did these:
1. Right click on C:\Program Files\Borland\Delphi7 directory, then click Properties.
2. On General tab, clear the Read-Only attribute then press Apply (all files including subdirectory).
3. On Security tab, Check or give Full Access to Users.
4. Click Apply.

That's all.

Kamis, 15 April 2010

Strategi dan Taktik

Dalam dunia bisnis, militer, atau bahkan untuk menyelesaikan studi, kita menerapkan apa yang dinamakan strategi. Sebelum membuat strategi, tentu kita harus mengetahui apa yang menjadi Tujuan (goals) maupun Sasaran (objectives). Inilah yang menjadi acuan penyusunan strategi.

Strategi
Oxford dictionary mengatakan Strategi adalah 1) rencana yang dirancang untuk mencapai tujuan jangka panjang tertentu; 2) seni perencanaan dan memimpin kegiatan militer dalam perang atau pertempuran.Strategi dalam bahasa Yunani yaitu strategia atau keahlian militer ‘generalship’. Sederhananya strategi adalah rencana tindakan yang dirancang untuk mencapai tujuan tertentu.

Apakah tujuan, problem maupun solusi yang hendak dicapai pasti tercapai dengan strategi yang sudah dibuat? Tentu bukan jaminan 100%, namun strategi itu adalah buah pemikiran yang diharapkan dapat mencapai hasil yang diharapkan.

Kita dapat saja memperluas pengertian tentang strategi sebagai Alternatif yang dipilih/diambil untuk membuat terrealisasinya tujuan. Kenapa alternatif? Mari kita bandingkan dengan Team sepak bola. Para Pelatih atau Manager akan menerapkan strategi yang mungkin tidak sama untuk setiap pertandingan. Strategi dibuat sesuai dengan kondisi yang mereka identifikasi dan mungkin juga terjadi perubahan strategi dalam permainan yang berdurasi 2 x 45 menit ini. Perubahan strategi ditetapkan oleh Pelatihnya.

Sekarang kita dapat melihat Strategi sebagai suatu seni dan ilmu tentang perencanaan dan pengelolaan sumber daya untuk digunakan paling efisien dan efektif dalam mewujudkan tujuan. Bandingkan dengan permainan Catur.

Taktik
Taktik adalah 1) tindakan atau strategi yang dijalankan untuk mencapai tujuan tertentu; 2) seni untuk menyusun angkatan bersenjata dalam peperangan dan mengorganisasikan pelaksanaannya. Asal kata taktik adalah taktike tekhne yaitu ‘art of tactics’, dari taktos yang berarti ‘ordered, arranged’.

Taktik adalah tindakan spesifik yang diambil untuk mengatasi situasi tertentu sebagai bagian dari dari rencana spesifik atau strategi. Contoh Taktik misalnya datang lebih awal ke suatu acara, bersuara keras, atau memakai warna tertentu. Praktek taktif kreatif dapat membawa perubahan positif. Taktik berkaitan dengan bagaimana strategi dijalankan, direncanakan dan kegiatan khusus (ad hoc) untuk suatu maksud dalam menangani tuntutan saat ini, dan untuk berpindah dari satu tonggak lainnya (milestone) dalam mewujudkan tujuan keseluruhan.

Jadi taktik -sebagai drilldown dari strategi- menentukan pencapaian tujuan yang sudah digariskan dalam strategi. Jika Strategi dipandang sebagai buah pikiran maka Taktik adalah aksi atas buah pikiran. Setiap rantai proses dalam organisasi akan mengekesekusi taktik yang mendukung strategi bisnis dan berkontribusi bagi pencapaian strategic objectives.

Prakteknya
Dalam organisasi, strategi ditetapkan oleh Top Manajemen atau Direksi, dan Taktik oleh Kepala Departemen untuk implementasi oleh karyawan.

Contoh #1:
Tujuan: Meningkatkan kompetensi karyawan
Strategi:
-Pelaksanaan diklat, benchmark, atau Company University
-Rekruitmen (fresh, profesional, expert) berdasarkan Job Analysis, Design, dan Specs

Strategi Human Resource Management adalah rencana organisasi untuk mengelola tenaga kerja, budaya, struktur, pelatihan dan pengembangan, serta menentukan bagaimana SDM dapat sesuai (fit) untuk perkembangan organisasi dimasa mendatang.

Taktik
- pelaksanaan lomba kreativitas dan inovasi serta aplikasinya
- pemberian award, misalnya mengumumkan karyawan dgn produktivitas terbaik periode ini
- improvement sistim kerja (bisnis proses)
- peningkatan know-how, know-why, infrastruktur dan teknologi
- menghindari ketergantungan terhadap individu
- mutasi, rotasi.

Contoh #2:
Tujuan: Meningkatkan Penjualan
Strategi: Penetrasi pasar, Bentuk Pasar baru
Taktik: Pasti Anda sering menemui Direct Marketing atau Advertising di TV...ya itu salah satu taktiknya.

http://www.edcollins.com/stratego/stratego-strategia.htm

Dalam membuat perencanaan, kita akan berpikir dalam big picture kemudian memecahnya (drill down) menjadi aktivitas-aktivitas. Perencanaan awal yang baik akan menghemat banyak waktu dan uang (resources) dan memberikan hasil yang diharapkan.

Jadi pada GOAL dan OBJECTIVE dinyatakan apa yang ingin dicapai, kemudian dalam STRATEGI dituangkan rencana untuk mencapai sasaran (strategic objectives), selanjutnya melalui TAKTIK ditetapkan tindakan efektif untuk merealisasikan rencana-rencana strategis. Taktik merupakan aktivitas atau praktek yang dapat dicoba/diuji atau diukur untuk menentukan efektitifasnya.

Is there any strategy in your strategic plan? Most entities would answer "Yes, we do!".

Jumat, 09 April 2010

Moto GP 2010: Jorge Lorenzo (My favourite)

Moto GP putaran 1 dijadwalkan berlangsung pada 11 April 2010 di sirkuit Doha/Losail, Qatar.

10 Team akan bertarung dan 17 pembalap siap berpacu, yaitu:
1. Ducati Marlboro Team: 1) Casey Stoner + 2) Nicky Hayden
2. Fiat Yamaha Team: 3) Valentino Rossi + 4) Jorge Lorenzo
3. Interwetten Honda MotoGP: 5) Hiroshi Aoyama
4. LCR Honda MotoGP: 6) Randy De Puniet
5. Monster Yamaha Tech 3: 7) Colin Edwards + 8) Ben Spies
6. Paginas Amarillas Aspar: 9) Hector Barbera
7. Pramac Racing Team: 10) Mika Kallio + 11) Aleix Espargaro
8. Repsol Honda Team: 12) Andrea Dovizioso + 13) Dani Pedrosa
9. Rizla Suzuki MotoGP: 14) Alvaro Bautista + 15) Loris Capirossi
10. San Carlo Honda Gresini: 16) Marco Melandri + 17) Marco Simoncelli


Pada musim 2009, Rossi sangat tangguh dan tampak dari hasil ini.

#CircuitRiderConstructor
1Comunitat Valenciana
Pedrosa, DaniHonda
2Sepang CircuitStoner, CaseyDucati
3Phillip IslandStoner, CaseyDucati
4EstorilLorenzo, JorgeYamaha
5MisanoRossi, ValentinoYamaha
6IndianapolisLorenzo, JorgeYamaha
7Automotodrom BrnoRossi, ValentinoYamaha
8Donington ParkDovizioso, AndreaHonda
9SachsenringRossi, ValentinoYamaha
10 Mazda RacewayPedrosa, DaniHonda
11AssenRossi, ValentinoYamaha
12Circuit de CatalunyaRossi, ValentinoYamaha
13MugelloStoner, CaseyDucati
14Le MansLorenzo, JorgeYamaha
15JerezRossi, ValentinoYamaha
16MotegiLorenzo, JorgeYamaha
17Losail CircuitStoner, CaseyDucati

Yaaa, Valentino Rossi memang hebat, akankah dia mampu mempertahankan gelar juara dunia yang disandangnya? Bagaimana dengan Stoner maupun Pedrosa? Mereka berdua pembalap yang hebat. Semoga saja problem pada pergelangan tangan tidak menganggunya, demikian pula dengan Pedrosa semoga tidak selip. Jika mereka dapat bertarung penuh pada setiap round, tentu ini tontonan yang seru.

Bens Spies, Aoyama dan Doviozo juga potensial. Seru saat menonton mereka bertarung.

Tetapi favorit saya untuk juara pada musim 2010 adalah Jorge Lorenzo menari. Alasannya, hanya dengan data visual sepanjang race 2009, saya boleh melihat kepiawaiaannya, keberanian, kegigihan, teknik tikungan, kemampuan motor dan fisiknya selama musim 2009. Ia adalah kandidat juara musim 2010.

Selamat bertarung buat mereka, dan buat kita selamat menonton dan ber-fans-ria, kita tunggu hasilnya pada 7 Nopember 2010.

Workshop Kepada Pemasok

Tanggal 5-7 April 2010, Bagian Pengadaan dan Timnya melaksanakan workshop kepada Vendor tentang Aturan (business rules) procurement dengan mekanisme Auction. Sasarannya adalah:

1. Pemasok tahu bagaimana proses e-Procurement berlangsung
2. Pemasok tahu What, How, When dari mekanisme e-Auction yang kami terapkan
3. Pemasok memahami Apa aktivitas/ tahapan yang harus mereka kerjakan (secara elektronik dan manual/konvensional)
4. Pemasok mengetahui kelengkapan dokumen yang harus dipenuhi untuk memenuhi aspek legal
5. Pemasok mengetahui e-Auction sebagai suatu service atau layanan kami yang baru dengan berpedoman pada PER-05/MBU/2008 tentang Prinsip Pengadaan yang Efisien, Efektif, Kompetitif, Transparan, Adil dan Wajar, Akuntabel.

Kegiatan workshop sekaligus sosialisasi ini dibuka oleh Bachtiar Damanik, dimonitor oleh Djat Sudardjat. Hari Prasetyo, Suhendra dan Saya melakukan peran fasilitator.

Pada periode ini ada 7 kelas workshop. Banyak pertanyaan dan masukan menarik, antara lain:

  • Apakah sistem ini aman dari para hacker atau sejenisnya?
  • Apakah Harga Penawaran yang disimpan di database, tidak bisa diketahui pihak tertentu?
  • Apakah hanya Harga sebagai faktor untuk menentukan Calon Pemenang. Bagaimana dengan Kualitas?
  • Apakah pemasok harus melakukan Negosiasi terhadap masing-masing item barang yang harganya masih diatas HPS seandainya Total Harga Penawaran sudah dibawah Total HPS?
  • Apakah Pemasok dapat membuat penawaran meskipun Klasifikasi Sub Bidang Pekerjaan yang mereka miliki tidak sesuai dengan Persyaratan Pengadaan?
  • Apakah pemasok dapat menawar untuk setiap kegiatan procurement?
  • Bagaimana jika saat delivery, barang yang dipasok direject?
  • Dipasar banyak ragam Kelas Barang, pemasok pakai harga yang mana?
  • Pemasok merasa terlalu banyak penggunaan meterai dan mohon ditinjau.
  • dan banyak lagi.
Tentu saja kami mendengar suara pemasok apalagi jika dikaitkan dengan Manajemen Rantai Pasokan (Supply Chain Management). Oh yah, SCM itu adalah tentang mengelola aliran informasi, material, servis dan uang dalam lintas setiap aktivitas, untuk memaksimalkan efektivitas suatu proses. Ini tentu berkaitan dengan memperkenalkan alat-alat baru atau merevisi teknik yang telah dikenal dengan baik, dan sederhananya dengan bertanya kepada diri kita sendiri: "Apakah ini hal yang tepat untuk dilakukan (Is this the right thing to do)" daripada pertanyaan "Apakah ini cara terbaik yang harus kita teruskan terhadap hal yang sama (Is this the best way we can continue to do the same thing)". Ini adalah proses berkesinambungan, bukan 'satu-kali' perbaikan.

Singkatnya, SCM yang berhasil mampu menekan cost pada sisi client dan supplier, dengan tetap menopang atau meningkatkan nilai tambah dan margin. Konsekuensinya, perusahaan yang memiliki supply chains yang efektif kebanyakan merupakan perusahaan yang sukses.

"A company that fails to manage its supply chains at a strategic level is unlikely to meet its business objectives effectively."

Wah sampai lari ke SCM , oke deh senyumkenyitanyway, that's the broad picture we are willing to dan foto ini sekedar menggambarkan suasana dan seriusnya semua pihak untuk melakoni cara-cara baru....celebrate

Hari menunjukkan harga auction peserta. Ferry menunjukkan grafik. Suhendra mengamati tabel dan timestamp.

Kamis, 08 April 2010

Conditional Logging in Apache

Apache server records all incoming requests and all requests processed to a log file. This article will show how to conditionally records or prevents log entries into access log file.

The location and content of the access log are controlled by the CustomLog directive. To find Apache access log file location, we could grep httpd.conf file, for example:
#grep CustomLog /usr/local/etc/apache22/httpd.conf

CustomLog /var/log/httpd-accessviaproxy.log combined env=!is-forwarder
CustomLog /var/log/httpd-accessfwd.log fwd env=is-forwarder
CustomLog /var/log/httpd-accessviaproxy.log combined env=!gbrnolog
CustomLog /var/log/httpd-accessfwd.log fwd env=!gbrnolog

The CustomLog directive is used to log requests to the server. A log format is specified, and the logging can optionally be made conditional on request characteristics using environment variables. The syntax is:
CustomLog filepipe formatnickname [env=[!]environment-variable]

The first argument, which specifies the location to which the logs will be written, can take one of the following two types of values:file i.e A filename, relative to the ServerRoot; and pipe i.e The pipe character "", followed by the path to a program to receive the log information on its standard input.

The third argument is optional and controls whether or not to log a particular request based on the presence or absence of a particular variable in the server environment. If the specified environment variable is set for the request (or is not set, in the case of a 'env=!name' clause), then the request will be logged.

For example, the following two sets of directives have exactly the same effect:

# CustomLog with format nickname
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common


# CustomLog with explicit format string
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"


In the following example, we separate log file for accessing through a proxy and the other for external access of a web server.


<--IfModule log_config_module>
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" fwd

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
# If you do not specify an ErrorLog directive within a

# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a
# container, that host's errors will be logged there and not here.
ErrorLog /var/log/httpd-error.log
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" is-forwarder


#ignore these elements into logs.
# Here we exclude some files from our log
SetEnvIf Request_URI "(\.png\.gif\.jpg\.ico\.css)$" nologimage
#CustomLog /var/log/httpd-access.log common
CustomLog /var/log/httpd-accessviaproxy.log combined env=!is-forwarder
CustomLog /var/log/httpd-accessfwd.log fwd env=is-forwarder
CustomLog /var/log/httpd-accessviaproxy.log combined env=!nologimage
CustomLog /var/log/httpd-accessfwd.log fwd env=!nologimage
< /ifmodule>

When using conditional logging, the environment variable system sets a variable based on the request. The CustomLog directive accepts an environment condition that will be applied to the CustomLog configured.

If we would like to exclude our own IP address for example localhost, use this:

SetEnvIf Remote_Addr "127\.0\.0\.1" ignoreme

or to mark requests for the robots.txt file

SetEnvIf Request_URI "^/robots\.txt$" ignoreme
CustomLog "logs/access.log" common env=!ignoreme


The format of the access log is highly configurable. Here some of format string for LogFormat:
%a Remote IP-address
%A Local IP-address
%b Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a '-' rather than a 0 when no bytes are sent.
%B Size of response in bytes, excluding HTTP headers.
%h Remote host
%H The request protocol
%l Remote logname (from identd, if supplied). This will return a dash unless mod_ident is present and IdentityCheck is set On.
%r First line of request
%R The handler generating the response (if any).
%s Status. For requests that got internally redirected, this is the status of the *original* request --- %>s for the last.%u Remote user (from auth; may be bogus if return status (%s) is 401)
%U The URL path requested, not including any query string.
%t Time the request was received (standard english format)
%T The time taken to serve the request, in seconds.

By using conditional logging, we could ignore or prevent writing entry at our log file.

For detail:
http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html