Tag-Archive for » Programming «

Thursday, May 14th, 2009 | Author: Riza

Code berikut adalah rutin program untuk melakukan search seluruh file dan subdirektori yang ada di dalam suatu drive atau direktori tertentu dan ditulis dalam bahasa pemrograman Delphi (object pascal). Searching dilakukan dengan teknik rekursi (recursion).

Continue reading

Saturday, February 07th, 2009 | Author: Riza

Style Windows Xp - Logo Windows XpSecara default, style Windows Xp tidak diimplementasikan secara otomatis ke aplikasi yang kita buat. Untungnya, Delphi versi 7 dan setelahnya telah menyediakan sebuah komponen khusus bernama XPManifest (TXPManifest). Sehingga hanya dengan menambahkan komponen ini ke salah satu form pada aplikasi yang dibuat, simsalabim! Begitu dijalankan, style aplikasi akan berubah menjadi style Windows Xp. Namun bagaimana jika masih menggunakan Delphi 6 seperti saya? Setelah mencari-cari akhirnya dapat juga cara mengimplementasikan style Windows Xp pada aplikasi yang dibuat tanpa menggunakan komponen tambahan. Langkahnya sebagai berikut:

Continue reading

Thursday, December 18th, 2008 | Author: Riza

RecursionRekursi atau recursion dalam matematika dan ilmu komputer diartikan sebagai fungsi yang dalam definisinya mengimplementasikan dirinya sendiri. Untuk lebih mudahnya, bisa dikatakan bahwa rekursi adalah fungsi yang memanggil dirinya sendiri.

Namun demikian, rekursi tidaklah hanya merupakan istilah eksak semata. Jika kita mau memperhatikan lagi dengan lebih teliti, ternyata ada banyak contoh rekursi di sekeliling kita. Rekursi dalam dunia nyata bisa terjadi salah satunya adalah jika kita meletakkan dua cermin secara berhadapan dan sejajar. Bayangan yang terjadi pada kedua cermin itulah rekursi. Contoh lain dari rekursi di dunia nyata adalah seperti yang diperlihatkan gambar-gambar di bagian akhir tulisan ini.

Dalam dunia matematika dan komputer, rekursi khususnya digunakan untuk menyelesaikan perhitungan yang rumit dan kompleks. Prinsip rekursi sebenarnya sederhana, yaitu memecah masalah menjadi masalah-masalah yang lebih kecil. Dengan memecah masalah menjadi bagian-bagian yang lebih kecil tersebut, masalah yang sangat kompleks dan rumit sekalipun akan lebih mudah untuk diselesaikan.

Continue reading

Wednesday, December 10th, 2008 | Author: Riza

Pascal's Triangle (Segitiga Pascal)Pemrograman visual yang termasuk dalam keluarga RAD (Rapid Application Development) ternyata bagaikan pedang bermata dua. Satu sisi memang memberikan kemudahan dan waktu development yang jauh lebih singkat dibanding pemrograman konvensional (non visual). Namun pada sisi yang lain justru seperti mengebiri kemampuan mencari algoritma programmer untuk memecahkan suatu masalah.

Walaupun ini pendapat pribadi yang tentu saja sangat subyektif, namun bagi programmer yang awalnya atau pernah berkecimpung dengan pemrograman non visual pasti berpendapat sama. Atau bisa jadi bukan karena pemrograman visual-nya. Tapi lebih karena faktor programmer itu sendiri yang malas mengasah kemampuan mencari algoritmanya. Atau mungkin karena kurikulum di kampus sekarang yang sudah tidak lagi mengajarkan mata kuliah tentang algoritma dengan mendalam. Padahal algoritma adalah sesuatu yang sangat esensial dalam dunia pemrograman. Programmer yang bagus pasti memiliki kemampuan yang bagus pula dalam mencari algoritma untuk memecahkan suatu masalah.

Continue reading

Sunday, December 07th, 2008 | Author: Riza

Setiap programmer pasti memiliki gayanya masing-masing dalam menulis program. Perbedaan gaya dalam menulis program (baca: programming style) ini bukanlah sesuatu yang salah tentu saja. Namun demikian, suatu programming style akan menjadi sesuatu yang bermasalah jika tidak mengikuti kaidah pemrograman yang baik dan benar.

Pradigma dalam menulis program sekarang sudah berubah. Suatu code program dikatakan bagus jika code program itu makin mudah dibaca (readable). Kalau kita telaah lebih jauh, ternyata 80% atau bahkan mungkin 90% dari siklus hidup sebuah software atau yang dikenal dengan Software Development Life Cycle dihabiskan untuk maintanance. Itulah sebabnya hasil dari proses software development harus mudah untuk dipelihara (maintainable). Dan syarat mutlak sebuah software maintainable tentu saja jika source code yang membangun software tersebut readable atau mudah dibaca. Semakin readable source code suatu program, jelas makin mudah source code tersebut dipahami sehingga makin mudah pula diperbaiki jika dikemudian hari ditemukan bug.

Untuk lebih jelasnya coba perhatikan contoh dalam C++ berikut.

Continue reading

Tuesday, November 25th, 2008 | Author: Riza

Jika jumlah record yang di-query oleh suatu website dari database sudah cukup banyak jumlahnya, misalnya lebih dari 100 record, sepertinya sangat tidak bagus untuk menampilkan semua record tersebut dalam satu halaman saja. Alasan utamanya adalah pemborosan bandwidth karena sebenarnya, pengunjung website tersebut tidak akan pernah melihat semua record yang ditampilkan dari record pertama sampai terakhir. Mereka paling banyak hanya membutuhkan 20 record pertama. Selebihnya? Hmm … anda sudah tau sendiri. Siapa yang peduli!? Alasan lain adalah untuk menampilkan record set dengan jumlah record yang besar, website membutuhkan waktu yang cukup panjang

Continue reading

Tuesday, February 19th, 2008 | Author: Riza

Ada beberapa cara yang bisa digunakan untuk membuat single instance application. Saya hanya mau membagi sedikit trik lama yang sering saya gunakan yaitu dengan memanfaatkan API dari windows. Fungsi yang saya gunakan adalah CreateFileMapping dengan sedikit memodifikasi isi dari file project. Cara menggunakannya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
 
uses Windows, … ;
 
const
  MAX_SIZE_HIGH = 0;
  MAX_SIZE_LOW = 32;
  { Bisa diganti dengan string apa saja yang akan menjadi Id
  dari aplikasi.}
  APP_IDENTIFIER = ‘th3-4ppl1c4t10nk3y’;
 
var
  hMap: THandle;
 
begin
  Application.Initialize;
 
  hMap := CreateFileMapping(0, nil, PAGE_READONLY, MAX_SIZE_HIGH,
  MAX_SIZE_LOW, APP_IDENTIFIER);
  if (hMap <> 0) and (GetLastError = ERROR_ALREADY_EXIST) then
 
  begin
    CloseHandle(hMap);
    Application.Terminate;
  end;
 
  …
 
  Application.Run;
end.

Semoga bermanfaat.

Monday, November 19th, 2007 | Author: Riza

Beberapa hari yang lalu aku bikin fungsi untuk mengambil MAC Address dari ethernet card. Fungsinya aku beri nama GetMacAddress(AEthNumber: Byte). Kembalian dari fungsi ini adalah string dari MAC address ethernet card ber-index AEthNumber. Kalau PC hanya mempunyai sebuah ethernet card, AEthNumber bisa diisi dengan 0 (nol). Fungsi GetMacAddress memanfaatkan unit NB30 bawaan delphi yang berisi beberapa record serta fungsi untuk mengambil informasi network device melalui NetBios.

Mumpung inget, tak dokumentasikan di sini. Sekalian share kali aja ada yang perlu. Code-nya seperti di bawah ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses NB30;
 
function GetMacAddress(AEthNumber: Byte): string;
var
  ncb: PNCB;
  errorCode: Char;
  adapter: PAdapterStatus;
begin
 
  New(ncb);
  { Inisiasi isi memory pada pointer ncb dengan char 0 };
  FillChar(ncb^, SizeOf(TNCB), 0);
  ncb^.ncb_command := Char(NCBRESET);
  ncb^.ncb_lana_num := Char(AEthNumber);
  errorCode := NetBios(ncb);
 
  { Reset kembali isi memory pointer nbc dengan char 0 };
  FillChar(ncb^, SizeOf(TNCB), 0);
  ncb^.ncb_command := Char(NCBASTAT);
  ncb^.ncb_lana_num := Char(AEthNumber);
  { Harus berisi 16 karakter }
 
  StrPCopy(ncb^.ncb_callname, '*         ');
 
  New(adapter);
  FillChar(adapter^, SizeOf(TAdapterStatus), 0);
  ncb^.ncb_buffer := Pointer(adapter);
  ncb^.ncb_length := SizeOf(TAdapterStatus);
 
  errorCode := NetBios(ncb);
  if (errorCode = Char(NRC_GOODRET)) or
  (errorCode = Char(NRC_INCOMP)) then
    Result := IntToHex(Ord(adapter^.adapter_address[0]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[1]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[2]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[3]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[4]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[5]), 2)
  else
    Result := '00-00-00-00-00-00';
 
  Dispose(ncb);
  Dispose(adapter);
end;

Begitu saja semoga bermanfaat. Kali aja ada yang mau ikutan nambahin.

Tuesday, October 23rd, 2007 | Author: Riza

Bagaimana cara membuat sebuah selector grayscale-bitmap?

Kita tahu, bitmap adalah citra yang dihasilkan dari kumpulan pixel berwarna. Warna dari pixel ini berupakan perpaduan dari warna merah (R), hijau (G), dan biru (B). Intensitas yang berbeda untuk masing-masing komponen warna, ketika dicampur akan menghasilkan warna baru yang berbeda juga.

Masing-masing komponen warna memiliki intensitas dari 0 (nol) sampai 255. Sehingga jumlah warna yang berbeda yang bisa dibuat dengan mencampur komponen warna (R, G, dan B) adalah 24bit, atau setara dengan:

Continue reading

Friday, October 12th, 2007 | Author: Riza

Setelah beberapa bulan terlibat dalam pengerjaan proyek game online (dari perancangan sampai development), akhirnya aku mendapatkan kenyataan bahwa hal paling awal yang musti dipikirkan benar adalah masalah Load Balancing. Terutama sekali untuk game online berjenis multi player, atau lebih dikenal dengan istilah MMOG atau Massive Multiple-player Online Game.

Mungkin timbuk pertanyaan. Seawal apakah? Jawabannya adalah seawal mungkin. Bahkan sebelum memulai fase desain high level untuk sistem, metoda/arsitektur load balancing mana yang akan digunakan harus sudah ditentukan. Mengabaikan desain load balancing dan langsung hajar masuk ke fase desain high level tidak akan menyebabkan game yang didevelop tidak bisa berfungsi. Tapi, seperti pengalamanku sendiri, load balancing akan menjadi momok dikemudian hari. Ujung-ujungnya high level sistem anda harus diubah total. Tau kan apa akibatnya mengubah high level proses jika aplikasi sudah jadi dibuat? Ditambah lagi, MMOG bukan hanya terdiri atas sebuah client dan sebuah server. Melainkan terdiri atas sebuah client dan banyak server. Ada game server, ada login server, ada world server, dan sebagainya.

Continue reading

Category: Game  | Tags: , , ,  | Leave a Comment