Memaparkan catatan dengan label lazarus. Papar semua catatan
Memaparkan catatan dengan label lazarus. Papar semua catatan

Rabu, 21 Mei 2014

#100: A.I

Pada tahun 2001 dulu, Stephen Spielberg ada mengeluarkan satu filem bertajuk A.I (Artificial Intelligence). Ambe obses betul dengan komputer jadi ambe memang minat dengan filem begini. Ambe berpendapat, adalah menjadi satu yang mustahil bagi programmer untuk mengaturcara menjadikan komputer atau robot boleh berfikir seperti manusia. Tapi ambe tersentap bila ambe melawati laman web promosi filem A.I (2001).

Di laman web promosi filem ini, terdapat satu ruang untuk berchat (seperti IRC). Ambe login dan memulakan perbualan. Ambe disambut oleh "seseorang" yang membalas setiap pertanyaan ambe. "Dia" berchat dengan bahasa inggeris, boleh mengingati nama ambe, dan memberi respon dengan sangat cepat bila di tanya. Ambe terfikir, takkan lah ada staff yang menjawab semua pertanyaan dari beribu-ribu pelawat laman web itu.

Ambe siasat lagi, rupanya "orang" yang sedang ambe chatting itu adalah chatbot. Chatbot ini menggunakan teknologi AIML (Artificial Intelligence Markup Language). Ambe langsung tak menyangka rupanya bukan bersama manusia ambe berchatting, tapi bersama chatbot artificial intelligence. Respons yang ambe dapat dari chatbot ini semuanya relevan dengan pertanyaan ambe. Seakan ia berfikir seperti manusia betul.

HAL 9000 from 2001:A Space Odyssey
It's "consciousness"
Ambe terus mengkaji dengan penuh minat tentang teknologi AIML yang digunakan oleh chatbot tadi. Bila ambe "menggali" lebih dalam teknologi AIML, ambe dapati ia hanyalah pengaturcaraan yang tidaklah rumit. Ia banyak berkisar tentang linguistic dan bukannya kepandaian buatan yang sebenar. Ia mungkin nampak "bijak" tapi ia bukan satu "consciousness" (seperti Samantha dari filem Her (2013)). AIML mengambil input dalam bentuk ayat dan menyemak input ayat tadi kemudian memberikan respon menggunakan list-list ayat yang telah diprogramkan secara rawak. AIML boleh mengset pemboleh ubat yang kita manusia akan melihat ini sebagai satu keupayaan untuk mengingati. Contohya, ayat "My name is Johari", dari segi linguistik, selepas ayat "My name is", ia mestilah disusuli dengan nama. AIML boleh menyemak ayat ini dan mengambil perkataan selepas ayat ini sebagai nama dan menyimpannya didalam pemboleh ubah contohnya "name". Ini adalah simple tapi bagi ambe ia adalah pengaturcaraan yang bijak.

Ambe ada menulis banyak kod AIML dalam bahasa melayu sewaktu di sekolah menengah dulu. Malangnya sekarang file-file kod AIML ambe tu telah hilang. Set kod AIML yang lebih lengkap boleh didapati di GoogleCode dan dengan set kod AIML ini, anda boleh menyentuh untuk bersembang dengannya mengenai banyak perkara contohnya dari politik hinggalah sejarah dunia.

Ambe juga ada meng"port"kan satu projek interpreter AIML bernama "PASCALice" yang asalnya diprogramkan dalam Borland Delphi 5, ambe portkan ia ke Lazarus iaitu satu alternatif IDE opensource untuk Borland Delphi 5. Project ambe ini ambe beri nama LAFE, acronym untuk Lazarus AIML Front-End. Anda boleh download project ambe ini di GoogleCode.

Lazarus AIML Front-End

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.