Memaparkan catatan dengan label free pascal. Papar semua catatan
Memaparkan catatan dengan label free pascal. Papar semua catatan

Selasa, 3 Januari 2012

#12: Coderama - A smarter way untuk buat benda remeh

Saya geleng kepala sendiri bila membaca semula source code yang saya tulis dahulu. Saya tak mempraktikkan code optimization dengan menggunakan sepenuhnya kebolehan programming language yang saya gunakan. Contohnya ini, saya telah buat satu event dimana bila double click diatas status bar didalam Coderama IDE, semua panel tepi dan bawah akan collapse dan memberikan view source code editor yang luas. Ini kod saya untuk menghilangkan dan memunculkan semula semua panel disekeliling source code editor:

procedure TForm1.onStatusbar1DBClick .. bla bla bla..
begin
    if panel1.visible=true then panel1.visible:=false else panel1.visible:=true;
    if panel2.visible=true then panel2.visible:=false else panel2.visible:=true;
    if panel3.visible=true then panel3.visible:=false else panel3.visible:=true;
end;

Apa boleh buat, saya bukan coder profesional atau amatur, saya masih newbie yg sedang seronok bereksperimen :P Hehehe. Apapun, saya tiba-tiba teringatkan tentang satu operator didalam Pascal. Dalam Pascal ada beberapa operator senang untuk memudahkan kerja-kerja pengkodan. Antaranya OR, NOT, AND dan beberapa lagi operator lain. Kalau mengikut kod saya diatas, if panel1.visible=true then panel1.visible:=false else panel1.visible:=true; bolehlah diterjemahkan sebagai "kalau panel1 sedang ada, hilangkan panel1 atau jika tidak (jika panel1 memang dah hilang) adakan panel1".

procedure TForm1.onStatusbar1DBClick .. bla bla bla..
begin
   panel1.visible:=not panel1.visible;
   panel2.visible:=not panel2.visible;
   panel3.visible:=not panel3.visible;
end;

Lihat bagaimana pula operator "not" dipraktikkan disini :)
Kalau ikut bahasa melayu, operator "not" bolehlah dicontohkan dengan perkataan "tidak". Benar bermaksud true. True adalah boolean. Jika perkataan "benar" berada sendirian, ia bermaksud benar. Akan tetapi kalau ada operator "Tidak" dihadapan boolean tadi, ia membawa maksud lain. "Tidak Benar" membawa maksud Salah/Palsu atau boolean "False". "Not True" sudah tentu bermaksud False. Bagaimana pula dengan "Tidak Tidak"? Ia bermaksud "Benar". Simple kan? :)
panel1.visible:=not panel1.visible; bermaksud, "visibility panel1 adalah bukan/sebalinya kepada visibiliti panel1". Simpler, smarter dan menampakkan jalan pintas yang baik dipraktikkan. Kalau anda seorang programmer, manfaatkanlah penggunaan operator atau apa-apa features yang ada didalam programming language yang anda gunakan kerana perkara remeh sebegini banyak memberi manfaat pada programmer sendiri. Terima kasih.

Isnin, 2 Januari 2012

#10: Coderama IDE, Formatting Error Messages function

Petang tadi saya telah menulis satu function untuk parsing Formatted Error Message mengikut GNU Coding Standards. Ia ditulis melalui pascal dan digunakan bersama komponen synedit. Saya ingin kongsikan disini source code parser untuk mengeluarkan line number dari error message yang telah diformat mengikut GNU Coding Standards.
function TForm1.linedebug(a:string):integer;
var linenumber,colnumber,messageseparator:integer;
  string1,parse2,parse3,ki,sourcefile,errmessage:string;
begin

  colnumber:=0;

  messageseparator:= pos(': ',a);
  errmessage:=copy(a,messageseparator,length(a));
  string1:= copy (a,0,pos(': ',a)-1);
  sourcefile:=copy(string1,0,pos(':',string1)-1);

  ki:=copy(string1,pos(':',string1)+1,length(string1));

  if pos(':',ki)<> 0 then
  begin
   parse2:=copy(ki,pos(':',ki)+1,length(ki)); 
   parse3:=copy(ki,0,pos(':',ki)-1);
  end else parse3:=ki;

   linedebug:=strtoint(parse3);
  except
       on Exception : EConvertError do
   linedebug:=-1;
  end;
end; 

Mengikut artikel "4.4 Formatting Error Messages" dari GNU Coding Standards, Error messages from compilers should look like this:

source-file-name:lineno: message

If you want to mention the column number, use one of these formats:

source-file-name:lineno:column: message
source-file-name:lineno.column: message 

Source code yang saya kongsikan diatas adalah compatible dengan error message jenis pertama yang disertakan dengan column iaitu contohnya "coderama.c:50:20: declaration expected" dimana ia akan parse line number sebagai 50 dan column number sebagai 20 dan "coderama.c:15: declaration expected", line number sebagai 15 dan column sebagai 0. Terima kaseh. Selamat bercoderama!

#9: Khoda & Coderama

Saya dalam satu proses development satu IDE untuk C programming language yang saya namakan Khoda. Ia satu IDE simple yang saya fikir untuk menjadikan ia satu IDE yang "self-contain" diamana, ia code editor, compiler, assembler dan linker dalam satu pakej. Saya fikir untuk menjadikan ia satu single application tanpa file sampingan yang memudahkan portabliliti IDE itu. Saya membayangkan kalau pengguna ingin mendevelop di satu platform yang belum mempunyai compiler, pengguna sudah tentu perlu install banyak file dan menggunakan banyak tools berlainan untuk menghasilkan satu application. Jadi saya fikir idea "self-contain" sudah tentu amat berguna disini.

Khoda di stage awal development.
Nama: Khoda keluar dari nama project yang menarik perhatian saya "CODA" iaitu satu aplikasi text editor untuk Mac OSX. Khoda, derived dari nama saya. :) Akan tetapi.. Saya mula fikir ia satu nama yang teruk. Lagipun saya ada terdengar perkataan Khoda dari filem The House of Sand and Fog dimana veteran iran Mr. Behrani telah melakukan nazar atas nama Lord Khoda. Saya ada cuba menanyakan pada rakan saya ttg nama "Khoda" akan tetapi tak ada maklum balas. Apapun, untuk mengelakkan masaalah dimasa depan, saya fikir untuk menukarnya pada "Coderama". Terima kasih google, sekarang amat senang untuk search satu term dan mudah untuk kita menganalisa resultnya. Saya tidak terjumpa apa-apa nama project bernama "Coderama" jadi saya fikir saya akan menukar nama project ini ke "Coderama" tak lama lagi.
Project ini ditulis melalui Lazarus dan saya fikir untuk melakukan object linking antara object pascal dan C. Harap ia berjaya dan saya fikir ia boleh berjaya melalui beberapa artikel yang saya baca mengenai code mixing. Walaubagaimanapun jikalau object linking ini tidak berjaya, saya mungkin tidak akan berjaya untuk mengeluarkan project ini versi "self-contain" dan project ini akan datang dengan beberapa file yang berasingan. Akan tetapi saya akan memastikan ia dalam bilangan yang minima untuk memastikan ia mudah dialihakan dari komputer ke komputer.