Selasa, 06 Oktober 2009

Cara Memperkecil Executable File Lazarus

Ketika membuat aplikasi windows dengan lazarus secara default maka kita akan menemukan ukuran file executable yang sangat besar, sebagai contoh kemarin saya mencoba membuat sebuah aplikasi Kamus dengan lazarus menghasilkan file executable dengan ukuran 28 MB padahal kalo dibuat dengan Borland Delphi 7 ga bakal lebih dari 1,5 MB. Hal ini dikarenakan pada lazarus semua informasi debugging dimasukkan ke dalam executable berbeda dengan delphi yang disimpan pada file yang berbeda. Sehingga cara untuk memperkecil ukuran executable hasil kompilasi lazarus adalah dengan menghilangkan informasi debugging dari executablenya dengan program strip.exe kemudian bisa dilanjutkan dengan mengkompresi executable file itu dengan upx.exe.

Semua program yang dibutuhkan telah disertakan dalam file installer lazarus, di tempat saya lazarus 0.9.26.2 untuk Windows. Program strip.exe dan upx.exe terdapat dalam direktori free pascal compiler yang masuk di direktori lazarus, misalnya: c:\lazarus\fpc\2.2.2\bin\i386-win32.

Langkah-langkah yang bisa digunakan adalah sebagai berikut:

  1. Kompilasi aplikasi lazarus anda sampai berhasil dan menghasilkan file .exe, misal program1.exe.
  2. Hilangkan informasi debugging dengan program strip.exe.

    c:\lazarus\fpc\2.2.2\bin\i386-win32\strip --strip-all program1.exe

    Setelah informasi debugging dihilangkan biasanya ukuran executable sudah berkurang hampir 90%.
  3. Kompresi file executable dengan menggunakan upx.exe.

    c:\lazarus\fpc\2.2.2\bin\i386-win32\upx -9 program1.exe

    Kompresi file executable dengan upx biasanya bisa mengurangi ukuran executable sampai 60% tergantung dari file executablenya.

Sekian sedikit sharing dari saya selamat mencoba dan terus berkarya... hahahaha

Minggu, 26 Juli 2009

Lazarus, sebuah IDE Open Source yang menyerupai Delphi

Lazarus adalah sebuah visual IDE (Integrated Development Environment) yang cross platform dan menyerupai Delphi untuk para developer Pascal dan Object Pascal. Lazarus dibangun untuk dan didukung oleh Free Pascal Compiler. Mulai Maret 2008 Lazarus telah tersedia untuk beberapa distro Linux, Free BSD, Microsoft Windows dan Mac OS X.

Lazarus adalah software gratis seperti Free Pascal. Didistribusikan dengan GNU Lesser General Public License yang diubah. Perubahan memungkinkan lazarus untuk digunakan pada software prorietary.

Free Pascal adalah sebuah kompiler yang berjalan pada banyak sistem operasi. Didesain untuk mengkompilasi source code dalam bahasa Object Pascal sebuah penambahan dari bahasa pemrograman Pascal.

Berbeda dengan Java yang dirancang supaya write once, run anywhere, Lazarus dan Free Pascal dirancang supaya write once, compile everywhere. Karena kompiler yang sama tersedia untuk semua sistem operasi di atas sehingga tidak dibutuhkan coding ulang untuk menghasilkan produk untuk platform-platform yang berbeda, kecuali jika menggunakan fitur yang tergantung pada sistem operasi tertentu. Cross-compiling juga didukung.

Lazarus mulai versi 0.9.26.2 sudah sangat stabil dan bisa dibandingkan dengan Delphi 7.

Kelebihan Lazarus jika dibandingkan dengan Delphi adalah sebagai berikut:

  1. Open Source dan Gratis
  2. Multiplatform, mendukung Windows, Linux, Mac OS dan Pocket PC
  3. Bisa menghasilkan code 64-bit
  4. Dikembangkan oleh komunitas open source sehingga berkembang dengan sangat pesat

Kekurangan Lazarus jika dibandingkan dengan Delphi:

  1. Kurang stabil (versi 0.9.26 ke atas sudah sangat stabil).
  2. Untuk memasang komponen harus mengkompilasi ulang IDE.
  3. Dukungan komponen fihak ke-tiga yang dibuat perusahaan komersial yang berkualitas dan layak digunakan untuk produksi masih kurang, misal: belum tersedianya komponen2 SUIPack, TMS Advanced String Grid, Fast Report, dsb.
  4. Dukungan untuk sistem operasi Windows masih kalah, misalnya: belum bisa mengimpor COM dan ActiveX.
  5. Tidak bisa meletakkan kelas di dalam library.

Lazarus ke depan sangat berpotensi untuk digunakan dalam pembuatan software aplikasi yang cross-platform dan berkualitas. Bahkan saat ini sudah mulai banyak software aplikasi yang dibangun dengan Lazarus, untuk lebih jelasnya silahkan buka http://en.wikipedia.org/wiki/Lazarus_(software) atau investigasi langsung ke situs resmi Lazarus http://lazarus.freepascal.org.

Seperti Apakah Software Aplikasi Di Masa Depan?

Sebagai seseorang yang memiliki hobi dalam pembuatan software aplikasi kadang-kadang aku bertanya: seperti apakah software aplikasi masa depan itu? Oleh karena itu pada suatu hari aku mencari-cari di internet tentang masa depan software aplikasi. Di sana aku banyak menemukan hal-hal yang berkaitan dengan itu. Kebanyakan yang aku temukan adalah artikel-artikel tentang RIA (Rich Internet Application) dan cloud computing.

RIA

RIA adalah sejenis aplikasi web yang bisa berjalan tanpa browser, bisa berjalan pada semua sistem operasi, dan dalam banyak hal menyerupai aplikasi desktop tradisional (http://en.wikipedia.org/wiki/Rich_internet_application).

RIA sebenarnya bukanlah hal yang baru. Kita bisa melihat cikal bakal RIA di masa lalu seperti Macromedia Shockwave, Java applets dan format flash yang ada di mana-mana. Tetapi perkembangan terakhir pada teknologi web yang powerful seperti AJAX dan perkembangan dukungan standar pada browser-browser web telah melesatkan potensi yang bisa dijangkau dan kemampuan RIA.

Beberapa framework yang digunakan untuk membangun RIA antara lain: AIR (Adobe Integrated Runtime), Curl, Microsoft Silverlight dan Mozilla Prism.

AIR

AIR 1.0 adalah framework RIA yang dirilis Adobe pada 1 Maret 2008. Adobe sampai saat ini adalah pemain yang terbesar dan paling matang di wilayah RIA. Pada saat Adobe mengakuisisi Macromedia pada tahun 2006, dia juga mendapatkan teknologi warisan mulai dari Shockwave kemudian menjadi Flash sampai akhirnya menjadi Flex. Warisan pengalaman panjang ini dipadukan kedalam rilis terakhir AIR, sebuah platform RIA generasi baru yang memungkinkan untuk membangun aplikasi web yang tidak bergantung pada browser dan memiliki banyak kemampuan aplikasi desktop, termasuk kemampuan offline.

Curl

Curl adalah salah satu framework RIA yang lain. Sementara framework yang lain berfokus pada tampilan grafik dan interaktivitas, Curl yang merupakan pemain lama RIA yang berfokus pada bisnis dan developer untuk memberikan solusi dengan RIA. Curl adalah sebuah produk yang komplit dan matang, yang tampak dari sekumpulan fitur yang dimiliki curl.

Silverlight

Microsoft Silverlight 1.0 yang dirilis pada tahun 2007 bisa berjalan pada semua browser termasuk Firefox dan Safari, dan berjalan pada Windows dan Mac OS X, sebuah proyek open source sedang bekerja untuk membawa Silverlight ke Linux. Versi 2.0 yang dirilis pada Maret 2008 Silverlight berkembang lebih dari fokus awalnya pada animasi dan interaktivitas, dengan rilis yang baru kemampuan akses data telah ditambahkan ke dalam framework silverlight yang membuatnya mampu digunakan untuk membangun aplikasi bisnis.

Mozilla Prism

Platform RIA yang lain adalah Mozilla Prism yang dibuat oleh Mozilla yang juga pembuat dari browser Firefox. Prism adalah program sederhana yang powerfull yang memungkinkan mengambil sebuah aplikasi web dab mengubahnya menjadi aplikasi stand-alone dalam beberapa detik. Mozilla Prism adalah merupakan browser Firefox 3 yang dihilangkan beberapa bagiannya. Mozilla Prism bisa berjalan pada Windows, Mac OS X dan Linux.

Cloud Computing

Cloud computing adalah konsep di mana sumber daya tervirtualisasi dengan ukuran yang dinamis disediakan dalam bentuk servis lewat internet (http://en.wikipedia.org/wiki/Cloud_computing).

Konsep cloud computing secara umum mengkombinasikan hal-hal berikut:

  1. IaaS (Infrastructure as a Service): Hal ini meliputi grid untuk server yang tervirtualisasi, media penyimpanan dan jaringan.
  2. PaaS (Platform as a Service): Hal ini memfokuskan pada aplikasi dimana dalam hal ini memungkinkan developer untuk tidak memikirkan hardware dan tetap fokus pada pembangunan aplikasinya tanpa harus mengkhawatirkan sistem operasi, perbesaran infrastruktur, load balancing dan lainnya.
  3. SaaS (Software as a Service): Hal ini memfokuskan pada aplikasi dengan antarmuka berbasis web yang diakses melalui web service dan web 2.0.

Menurut Saya

Dari beberapa bahan yang saya temukan menurut saya RIA lebih potensial daripada SaaS yang ditawarkan oleh cloud computing. Saya lebih melihat pada ketidak seimbangan beban pemrosesan dan media penyimpanan, cloud computing menggunakan resource komputer yang terpusat pada server di internet dan membuang resource yang sangat besar dan terus berkembang yang ada pada perangkat komputer client. Sedangkan RIA relatif menggunakan semua resource komputer yang ada baik di server maupun diklien. Hal ini membuat cloud computing tidak akan didukung oleh para produsen hardware karena membuat komputer yang mereka buat tidak laku.

Sekian analisis dari saya...

Sabtu, 21 Februari 2009

Struktur Kendali dalam Bahasa Pascal

A. Proses Eksekusi Program

Pada dasarnya sebuah Program Pascal dieksekusi secara runtut dari mulai statement yang pertama kali dibaca dilanjutkan dengan statement yang dibaca berikutnya. Tetapi alur pemrosesan itu bisa diubah dengan menggunakan seleksi dan perulangan sehingga memungkinkan sebuah program menjalankan tugas yang lebih kompleks. Alur pemrosesan dimulai dari bagian utama program.

B. Compound statement

Compound statement adalah gabungan dari beberapa statement.

Syntax:

Begin
[statement];
[statement];
.
.
.
End

Compound statement bisa digunakan dalam seleksi dan perulangan untuk menjalankan beberapa statement daripada satu statement.

C. Seleksi

Pada sebuah seleksi alur program akan mengalir berdasarkan kondisi tertentu. Ada dua macam seleksi yang ada di Pascal yaitu If-Then dan Case-Of.

If-Then

Syntax:

If <tes kondisi> Then <statement>;

atau

If <tes kondisi> Then
<statement>
Else
<statement>;

Setiap <statement> bisa digantikan dengan sebuah compound statement.

Perubahan alur proses:

If <tes kondisi> Then berpindah ke sini jika tes kondisi true;
dilanjutkan ke sini;

If <tes kondisi> Then
berpindah ke sini jika tes kondisi benar
Else
berpindah ke sini jika tes kondisi salah;
dilanjutkan ke sini;

Contoh pemakaian:

Program IfThen(input,output);
Var
Umur: Real;
Begin
Write('Berapakah umur kamu?');
ReadLn(Umur);
If Umur < 5 Then
Begin
WriteLn('Anda masih balita');
WriteLn('Anda harus mengikuti imunisasi dasar lengkap');
End
Else
WriteLn('Anda bukan balita lagi');
WriteLn('Selesai.');
End.

Dalam contoh program diatas, kita mengambil input Umur berupa bilangan Real. Kemudian memasuki seleksi dengan tes kondisi Umur < 5, jika Umur < 5 maka statement di bawah ini yang dijalankan:

Begin
WriteLn('Anda masih balita');
WriteLn('Anda harus mengikuti imunisasi dasar lengkap');
End

Tetapi jika tidak maka yang akan dijalankan adalah statement berikut:

WriteLn('Anda bukan balita lagi');

Setelah selesai maka pemrosesan dilanjutkan ke statement berikutnya:

WriteLn('Selesai');

Case-Of

Syntax:

Case <nilai> Of
<nilai1>: [statement];
<nilai2>,<nilai3>..<nilai4>: [statement];
.
.
.
[Else [statement]
End;

Setiap [statement] bisa digantikan dengan compound statement.

Perubahan alur proses:

Case <nilai> Of
<nilai1>: ke sini jika nilai = nilai1;
<nilai2>,<nilai3>..<nilai4>: ke sini jika nilai = nilai2 atau nilai antara nilai3 dan nilai4;
.
.
.
[Else berpindah ke sini jika nilai tidak sama dengan semua nilai yang dicantumkan]
End;
dilanjutkan ke sini;

Contoh pemakaian:

Program CaseOf(input,output);
Var
NilaiMataKuliah: Char;
Begin
Write('Apakah nilai matakuliah struktur data anda? ');
ReadLn(NilaiMataKuliah);
Case NilaiMataKuliah Of
'A','a':
Begin
WriteLn('Nilai anda sangat bagus');
WriteLn('Hebaaat');
End;
'B','b': WriteLn('Bagus');
'C','c': WriteLn('Cukup');
'D','d': WriteLn('Nilai anda kurang');
'E','e':
Begin
WriteLn('Nilai anda sangat parah');
WriteLn('Belajar dunk untuk masadepan mu');
End;
Else
WriteLn('Nilai yang anda masukkan tidak valid');
End;
End.

Dalam contoh program di atas, kita mengambil input NilaiMataKuliah berupa sebuah karakter. Kemudian memasuki seleksi Case-Of dengan nilai yang dites NilaiMataKuliah. Jika NilaiMataKuliah sama dengan 'A' atau 'a' maka statement berikut yang dijalankan:

Begin
WriteLn('Nilai anda sangat bagus');
WriteLn('Hebaaat');
End;

Jika NilaiMataKuliah sama dengan 'B' atau 'b' maka statement berikut yang dijalankan:

WriteLn('Bagus');

Dan seterusnya, sampai jika NilaiMataKuliah tidak terdapata dalam daftar yang disebutkan maka statement berikut yang dijalankan:

WriteLn('Nilai yang anda masukkan tidak valid');

D. Perulangan

Pada perulangan sebuah statement atau compound statement akan dijalankan berulang-ulang selama kondisi tertentu masih terpenuhi. Beberapa macam perulangan dalam Pascal antara lain: For-Do, While-Do, Repeat-Until.

For-Do

Syntax:

For <variabel> := <nilai_min> To <nilai_max> Do [statement];

atau

For <variabel> := <nilai_max> DownTo <nilai_min> Do [statement];

Setiap [statement] bisa digantikan dengan compound statement.

Keterangan:

Statement akan dieksekusi dengan nilai variabel dari nilai_min sampai nilai_max. Jika menggunakan To maka dalam perulangan nilai variabel akan dimulai dari nilai_min dan bertambah sampai sama dengan nilai_max. Jika menggunakan DownTo maka di dalam perulangan nilai variabel akan dimulai dari nilai_max dan berkurang sampai sama dengan nilai_min. Tipe data String, Real, Pointer tidak diperbolehkan untuk variabel yang digunakan untuk For.

Contoh pemakaian:

Program DemoFor(output);
Var
I: Integer;
Begin
WriteLn('Naik:');
For I := 1 to 5 do WriteLn(I);
WriteLn;
WriteLn('Turun:');
For I := 5 downto 1 do WriteLn(I);
End.

Output dari contoh program:

Naik:
1
2
3
4
5

Turun:
5
4
3
2
1

While-Do

Syntax:

While <tes kondisi> Do [statement];

Setiap [statement] bisa digantikan dengan compound statement.

Keterangan:

Statement akan dieksekusi selama nilai tes kondisi benar.

Contoh pemakaian:

Program DemoWh(output);
Var
I: Integer;
Begin
I := 5;
While I >= 1 Do
Begin
WriteLn(I);
I := I - 1;
End;
End.

Output dari contoh program:

5
4
3
2
1

Repeat-Until

Syntax:

Repeat
[statement];
[statement];
.
.
.
Until <tes kondisi>;

Setiap [statement] bisa digantikan dengan compound statement.

Keterangan:

Statement-statement akan dieksekusi terus selama nilai tes kondisi benar.

Contoh pemakaian:

Program DemoRep(output);
Var
I: Integer;
Begin
I := 5;
Repeat
WriteLn(I);
I := I - 1;
Until I < 1;
End.

Output dari contoh program:

5
4
3
2
1

Rabu, 18 Februari 2009

Firebird, RDBMS yang powerful dan mudah didistribusikan

Firebird adalah sebuah RDMS yang menawarkan banyak fitur standar ANSI SQL yang berjalan di Linux, Windows dan beberapa varian Unix. Firebird menawarkan konkurensi yang bagus, performa yang tinggi dan bahasa yang powerful yang mendukung prosedur dan trigger.

Proyek Firebird adalah sebuah proyek non komersial dari programmer C dan C++, penasehat teknis, dan para suporter yang membangun dan mengembangkan RDBMS multi platform dengan berbasiskan source code yang dikeluarkan oleh Inprise Corp (sekarang bernama Borland Corp) pada 25 Juli 2000.

Firebird telah mendukung penuh penggunaan stored procedure dan trigger semenjak versi pertamanya. Bahasa yang digunakan untuk stored procedure dan trigger di Firebird disebut PSQL (Procedural SQL). Bahasa SQL firebird juga sangat fleksibel dengan dukungan penggunaan sub query dan derivatif tabel (mulai versi 2.0).

Firebird memenuhi standar ACID sehingga menjamin transaksi database ditangani dengan layak. Selain itu Firebird juga mendukung penggunaan referential integrity untuk menjaga integritas database dengan baik.

Meskipun fitur-fitur yang didukung firebird sangat bagus dan sangat banyak tetapi ukuran file installernya cukup kecil sehingga sangat mudah untuk dibundle dalam installer software. Selain ukuran installer yang kecil yaitu sekitar 4 MB, lama waktu yang dibutuhkan untuk instalasi pada satu komputer dengan prosesor Pentium 4 adalah kurang dari 5 menit, bandingkan dengan lama waktu instalasi Oracle yang bisa berhari2.

Firebird telah digunakan untuk produksi pada banyak software. Beberapa software di Indonesia yang menggunakan Firebird untuk database servernya adalah Zahir Accounting, Accurate Accounting, Sistem Informasi Manajemen Penduduk Kota Madya Yogyakarta, dan lain sebagainya. Zahir Accounting adalah pemenang INAICTA (Indonesian ICT Award) selama 3 kali berturut-turut.

Apakah anda masih tidak yakin dengan Firebird?

Selasa, 17 Februari 2009

Pengenalan Bahasa Pascal

A. Apakah Bahasa Pascal itu?

Bahasa Pascal didesain pertama kali oleh Niklaus Writh pada tahun 1968 dan dipublikasikan pada tahun 1970. Setelah itu bermunculan beberapa varian dari Bahasa Pascal. Salah satu yang paling terkenal adalah Bahasa Turbo Pascal dan Delphi yang semuanya dibuat oleh Anders Helsjenberg yang juga membuat bahasa C#. Turbo Pascal sering digunakan dalam pengajaran matakuliah pemrograman komputer khususnya tentang algorithma dan struktur data.

B. Hello World!

Berikut adalah contoh program sangat sederhana dengan Pascal:

Program Hello(output);
begin
Write('Hello World!');
end.

Berikut ini adalah contoh program dengan Pascal yang menggunakan variabel:

Program Luas(input,output);
var r,L: Real;
begin
Write('Berapakah jari-jari lingkaran ?'); ReadLn(r);
L := 22/7*r*r;
WriteLn('Luas lingkaran = ',A);
end.

C. Tipe data dalam Pascal

Tipe data menunjukkan sifat dan ciri khas dari variabel. Tipe data menentukan jangkauan data yang bisa disimpan dalam variabel dan operasi-operasi apa saja yang diperbolehkan untuk variabel itu.

Beberapa tipe data sederhana dalam Pascal:
1. Integer: bilangan bulat antara -32768 sampai 32767.
2. Real: bilangan pecahan antar 1E-38 to 1E+38.
3. Boolean: bisa True atau False saja.
4. Char: semua karakter ASCII.
5. Enumerasi: semua nama anggota yang didaftarkan.

Contoh deklarasi variabel untuk masing-masing tipe data:

var
I: Integer;
X: Real;
Ulang: Boolean;
Kar: Char;
Warna: (Coklat,Merah,Kuning,Hijau,Biru,Nila,Ungu);

D. Struktur Data dalam Pascal

Selain memiliki beberapa tipe data sederhana, Pascal juga memiliki beberapa pembentuk tipe baru:

1. Sub range dari tipe data ordinal (selain tipe data real)

Di dalam Pascal anda bisa membentuk sebuah tipe data yang memiliki jangkauan nilai yang merupakan bagian dari jangkauan nilai tipe data ordinal.

var
Anak: 1..15;
HurufKecil: 'a'..'z';
WarnaKayu: Coklat..Hijau;

2. Set

Sebagaimana layaknya sebuah himpunan, anda bisa melakukan penambahan, pengurangan, interseksi dari variabel set.

var
Him1: set of 1..10;
Him2: set of 'a'..'z';
Him3: set of Coklat..Hijau;

3. Alias

Di dalam pascal anda bisa membuat tipe data yang merupakan alias dari tipe data yang lain.

type
IntegerKu = Integer;
IntegerAdikKu = IntegerKu;

4. Array

Array menyimpan banyak data dalam satu nama dan tersimpan di memori secara berurutan (kontigu) dan memiliki tipe data yang sama.

var
NilaiSiswa: array[1..100] of Integer;

5. Record

Record menyimpan banyak data dalam satu nama dan tersimpan di memori secara berurutan (kontigu) dengan tipe data yang berbeda-beda.

type
Siswa = record
NIM: array[1..10] of Char;
Nama: array[1..40] of Char;
Alamat: array[1..80] of Char;
NamaWali: array[1..40] of Char;
end;

Pemakaian record selain untuk menyimpan data di memory juga sering digunakan untuk penyimpanan data di file. Sehingga mirip dengan sebuah tabel database.

E. Pointer

Pascal mendukung penggunaan pointer. Tipe data pointer tidak menyimpan data yang sebenarnya tetapi menyimpan alamat data di memori. Pointer bisa digunakan untuk mengakses data yang dialokasikan secara dinamis di memori.

Berikut sebuah contoh program yang memakai pointer:

Program MakePtr(input,output);

type
x = ^y;
y = record
a: Integer;
b: Char;
end;

var
pointertob: x;
contohb: y;

begin
(* Sebuah pointer yang menunjuk ke variabel yang lain *)
contohb.a := 12;
contohb.b := 'C';
pointertob := @contohb;
WriteLn('pointertob^.a = ',pointertob^.a);
WriteLn('pointertob^.b = ',pointertob^.b);

(* Sebuah pointer yang menunjuk ke alamat di memori yang dialokasikan *)
new(pointertob);
pointertob^.a := 10;
pointertob^.b := 'A';
WriteLn('pointertob^.a = ',pointertob^.a);
WriteLn('pointertob^.b = ',pointertob^.b);
dispose(pointertob);
end.

E. Struktur Kendali

Pascal adalah bahasa terstruktur, berarti kendali aliran terstruktur di dalam elemen-elemen stanar, yang idealnya tidak menggunakan perintah 'go to'.

while a <> b do writeln('Waiting');

if a > b then
writeln('Condition met')

else
writeln('Condition not met');


for i := 1 to 10 do writeln('Iteration: ', i:1);

repeat

a := a + 1;
until a = 10;

case i of
0: write('zero');
1: write('one');
2: write('two')
end;

F. Prosedur dan Fungsi

Pascal membagi program ke dalam prosedur dan fungsi.

program mine(output);

var
i : integer;

procedure print(var j: integer);

function next(k: integer): integer;
begin
next := k + 1
end;

begin
writeln('The total is: ', j);
j := next(j)
end;

begin
i := 1;
while i <= 10 do print(i);
end.

Prosedur dan fungsi bisa bersarang sampai level berapapun, konstruk program menjadi blok logis terluar.

Creating Linux Daemon or Windows Service with Lazarus

Daemon Application in Linux or Service Application in Windows is an application that running in the background, usually automatically starte...