Memaparkan catatan dengan label coderama. Papar semua catatan
Memaparkan catatan dengan label coderama. 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.

#8: Lafe - A Lazarus AIML Front-End

Lamo dok update blog :) Dalam beberapa minggu ni saya banyak bereksplorasi dalam programming. Saya jumpa banyak perkara yang mungkin dah ketinggalan zaman, tapi saya tetap menghargai hasil kerja yang mungkin umurnya dah berbelas tahun. Antara yang paling menarik minat saya adalah project SQLite, TCC dan AIML.

AIML sebenarnya saya telah jumpa beberapa tahun lepas (sewaktu masih di sekolah menengah) dan pada waktu tu saya masih lagi baru dalam dunia programming. Saya menggunakan Borland Delphi IDE untuk compile project AIML bernama PASCAlice iaitu front-end Delphi untuk Artificial Intelligence Markup Language. Beberapa minggu lepas saya telah mencari semula project ini dan dengan pengganti open-source untuk Delphi IDE iaitu Lazarus, saya cuba mengconvertnya supaya ia compatible dengan Lazarus dan compilernya, Free Pascal. Hasilnya bagus. Saya telah berjaya untuk compile PASCAlice di Lazarus IDE v0.9.30 dan menghasilkan executable yang setakat ini boleh digunakan untuk windows. Untuk platform lain walaubagaimanapun masih belum dicuba. Disebabkan version saya of PASCAlice telah banyak diubahsuai dan interfacenya banyak lari, jadi saya fikir untuk fork-kan project PASCAlice menjadi Lafe (disebut seperti Cafe dengan "L" menggantikan "C"). Ini Lafe di http://code.google.com/p/lafe/:

Lazarus AIML Front-End
Saya release project ini dibawah GNU General Public License v2 dan source code boleh didownload terus dari laman google code Lafe. Saya mengalu-ngalukan penyertaan anda untuk menambahbaik lagi project ini dan melaporkan sebarang issue, bug-report atau cadangan. Saya juga mengalu-ngalukan programmer di luar sana yang menggunakan Lazarus di platform lain selain windows seperti Linux atau Mac OSX untuk membantu saya meng"port" project Lafe ini ke platform lain bagi memastikan semua pengguna komputer tidak ketinggalan mendapat manafaat dari praktis programming cross-platform. Terima kaseh.