jump to navigation

[project] code::wrox – the controller! Juli 7, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

hari ini saya masih melek sampai jam 4…tanpa saya sadari saya mengerjakan banyak sekali project non-profitable dari saya yang bernama “code::wrox” ini.

hari ini saya membuat sebuah template parser, yang sedari kemarin belum saya wujudkan, bahkan saya sudah berhasil melalukan renderin component untuk  template tersebut. saya sadar, ada baiknya saya tetap mengedepankan keinginan user, dalam urusan penanganan kesalahan, dll. saya cukup membuat fungsi form yang sederhana, dan urusan verifikasi data, saya serahkan kepada masing-masing orang yang menggunakan code::wrox. dan ada baiknya, saya akan mencoba dulu pengalaman saya menggunakan code::wrox dalam membangun situs KMH.

dengan pengalaman itu, maka saya bisa mengambil titik apa yang masih perlu di kembangkan, dan apa yang tidak perlu! :)

namun bukan template parser yang cukup menguras otak saya, namun lebih ke pada Controller yang bertugas sebagai extends class yang bertugas untuk menyajikan antar muka kepada user.

controller sendiri memiliki sebuah fitur yang saya sebut…

“auto extends variable”

terjemahan sederhananya seperti ini…

jika kita memiliki sebuah class database, maka kita tidak perlu melakukan definisi terhadap database itu kembali. namun kita cukup menggunakan nama class itu untuk menggunakan database tersebut. oke contoh gampang!

ada sebuah class bernama cwxDatabase (ignore the cwx, karena prefix ini akan di hapus!)

pada controller untuk menggunakan class cwxDatabase, kita bisa saja menulis

$x = new cwxDatabase();
$x->connect();

dalam artian, kita membuat sebuah class database yang baru dan disimpan pada variable $x. namun dengan fitus “auto extends variable”, maka secara otomatis di buat sebuah variable bernama $database (menyesuaikan nama class). dan untuk menggunakannya pun anda cukup menulis:

$this->database->connect();

hemat code, dan mempermudah user!

menurut saya, cara ini akan enrich the user, lagipula saya lebih suka cara seperti ini, daripada saya melakukan pembuatan variable asal-asalan dan berlebihan. dan cara yang saya contek dari Code Igniter ini benar-benar membuat saya cukup berpikir malam ini…

entah karena saya memang sedang bingung, karena banyak hal yang belum terselesaikan, atau saya bingung karena saya tidak bisa tidur…atau saya bingung karena memang saya tidak tahun, atau mungkin saya bingung karena saya mulai merasakan kalau saya kehilangan dia…

oke, saya jadi ingat maliq…mari bernyanyi…

“diaaaaaa…seperti apa yang selalu ku nantikan aku inginkan
diaaaaa… melihatku apa adanya seakan kusempurna”

mungkin lagu itu harus di balik, dari “dia” menjadi “aku”, atau “saya!”…hehehehe….

see ya at another post! :) … wismilak! ;)

[project] code::wrox – released – prealpha Juli 6, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

akhirnya setelah melakukan coding beberapa hari, mencoba menghalau beberapa mata kuliah, dan sibuk mengerjakan code::wrox. bahkan lupa kalau sebenarnya dalam masa ujian, akhirnya kemarin code::wrox resmi bisa digunakan… :D … yay!

walaupun masih dalam tahap dasar, dan konsep yang masih “raw” di beberapa tempat, tapi setidaknya saya sudah berhasil mewujudkan beberapa titik dasar dari initial release code::wrox, yaitu :

  1. database
    as I told, bagian ini yang menguras banyak hal dan keringat. saya sendiri bahkan sampai melakukan code hingga 700 baris hanya untuk sebuah “active records”. namun tentu saja hal ini sangat menyenangkan apalagi melihat berhasilnya active records, dan sampai saat ini belum di temukan bug yang berarti.
  2. security
    bagian ini sebenarnya tambahan, tetapi ternyata sukses dan berhasil cukup baik. kegunaanya hanya untuk melakukan proteksi pada suatu page dengan sebuah static password. namun nantinya user bisa saja menambahkan password tersendiri untuk halaman.
    hal ini tentu saja setelah saya selesai membuat MODULE news.
  3. manager
    ini komponen yang paling penting menurut saya. dia mengatur keluar masuknya variable di dalam framework. dia yang mengatur GET, POST, dan SESSION dalam sebuah variable static yang mudah di gunakan. :D
  4. controller
    model dasar dari template. masih terlihat sederhana, dan belum kompleks-kompleks amat. tetapi tentu saja setidaknya saat ini si controller sudah bisa memberikan “UI” kepada user dari class yang dimilikinya. OOP Concept everywhere…hehehehe…
  5. loader
    yang ini salah satu core dari code::wrox, dan tentu saja komponen ini sudah selesai pada beberapa bagian. misalnya dalam hal load model, ataupun load library. hanya saja masih ada beberapa titik yang harus di benahi.

dan setelah 5 komponen utama itu selesai, maka saya berani membuat sebuah web kecil, tanpa perlu berpikir dengan menggunakan code::wrox, and IT’S EASY! really!

mungkin karena saya yang menciptakan code::wrox, maka akan terlihat mudah bagi saya untuk membuat code::wrox, namun entah bagi orang lain…semoga saja, pengalaman menyenangkan saya dengan code::wrox bisa berpengaruh kepada orang lain…

nanti! ketika code::wrox benar-benar lahir! wismilak… :D

NB : untuk melihat initial release (pre-alpha) dari code::wrox, visit the link here

[project] code::wrox – Active Records! Juli 2, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

setelah meneliti CI, saya melihat model yang benar-benar menarik dan mudah untuk diimplementasikan, dan tentu saja mempermudah user untuk enrich their methode ketika mencoba untuk membuat aplikasi web nya. oleh karena itu saya mencoba mengambil beberapa hal yang di miliki CI, dan saya baru sadar, kalao dokumentasi dari CI adalah dokumentasi framework terbaik, tentu saja Prado adalah sebuah kebingungan, Yii masih penuh kesesatan, namun CI memberikan pengalaman yang cukup menyenangkan terhadap Framework!

dan akhirnya saya mengambil salah satu konsep CI yaitu Active Records. sebenarnya AR juga ada pada Frame Work yang lain, dengan konsep yang sama tentu saja. dan kali ini saya menggunakan prinsip CI dalam pembuatan active records.

dalam prakteknya Active Records bisa digunakan untuk melakukan Select, Insert, Update, ataupun Delete. jadi sebenarnya AR ini adalah kemudahan dari Statement dan Statement Manipulate dalam 1 class. interfaces dan methode yang sederhana juga digunakan dalam AR, dimana hanya sedikit sekali SQL hard code yang digunakan.

berikut adalah contoh dari Active Records di code::wrox

$x = new cwxDatabase('localhost','root','');
$x->connect('db_epic');

$stmt = $x->prepareActiveRecords();
$stmt->select('username,password,lastlogin');
$stmt->select_sum('banyak','total');
$stmt->distinct();
$stmt->from('user','test','hasil');
$stmt->join('pasukan_detail','user.userid = pasukan_detail.userid');
$stmt->join('pasukan','pasukan_detail.pasukanid = pasukan.pasukanid');
$stmt->where('username','=','billy');
$stmt->where_or('username','=','yperkasa');
$stmt->group_by('username, password, lastlogin');
$stmt->having('SUM(banyak)','>','10');
$stmt->order_by('username','DESC');
$stmt->get();
$hasil = $stmt->result('object');

nantinya hasil dapat di ambil dalam 2 bentuk, yaitu “object” ataupun “array”. ketika kita memanggil fungsi “get” untuk melakukan compile terhadap query. maka seluruh variable query kita dihapus. dan setelah kita mengambil hasilnya dengan fungsi “result”, maka object result akan dihapus dari class.

mungkin saya terlalu banyak berpikir dalam memory management, dan saya setidaknya ingin sekali menerapkan “cache” pada AR. namun sepertinya saya masih belum begitu mengerti konsep cache…kecuali ada penjelasan yang mumpuni untuk mengatasi kekurangan dalam otak saya… :D

dalam penggunaannya sendiri “$hasil” nanti dapat di tulis seperti berikut:

while($row = mysql_fetch_assoc($hasil)) {
          print_r($row);
}

atau yang lain…

akhirnya saya tidak bergerak ke class security, namun masih berkutat pada library DB Core…mungkin masih banyak potensi DB yang belum saya ambil! tapi saya rasa, setelah saya menyelesaikan AR ini (tinggal Insert, Update, dan Delete), maka saya akan lanjut ke library yang lain! :)

[project] code::wrox – authentication Juli 1, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

malam ini saya berusaha menyelesaikan 1 class dari code::wrox, mengingat besok adalah waktunya belajar untuk mempersiapkan diri tanggal 3 ujian Data Warehouse. so, saya mencoba mengerjakana class authentication untuk code::wrox malam ini, and luckily I did it! :)

sebenarnya library “auth” ini ada 2, ada class authentication, dan class security. dimana class security merupakan turunan dari class authentication. di-class security, kita bisa melakukan pengesetan level, mengeset page protected, atau private view, dll.

namun sayangnya, sepertinya untuk class security, saya tidak bisa kerjakan hari ini.

untuk authentication sendiri, menggunakan class database, dan class statement dari library dbcore dalam implementasinya.

untuk penggunaannya sendiri cukup sederhana…

$x = new cwxAuthentication();
$res = $x->getUserLogged();
if($user != '' && $password != '' && $res == false) {
$res = $x->authentication('user','username',$user,'password',md5($password));
}

hanya terdapat fungsi authentication dimana dengan argumen authentication(‘tablename’,'userfield’,'username’,'passwordfield’,'password’);

nantinya fungsi ini akan menghasilkan nilai TRUE dan FALSE, serta menyimpan data kita di SESSION. saya ingin sekali membuat sebuah class SessionManager, sehingga ketika saya ingin rubah modenya untuk cookie, atau session, saya cukup melakukan edit pada class tersebut, namun untuk sementara saya rasa, saya akan berjalan pada penggunaan session dari PHP.

oke…Authentication done…next is class Security! :D

[project] code::wrox – database class upgrade! Juli 1, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

sambil mencoba mencari-cari referensi tentang pembuatan framework pada PHP yang berujung pada sebuah buku dari PACKT yang berjudul PHP 5 CMS Framework Development. saya dihinggapi sebuah kekecewaan, karena rupanya buku itu jauh dari bayangan saya…saya lebih menyukai pegangan seperti Advanced PHP5 dari SAMS, daripada buku ini untuk menahkodai saya dalam pembuatan Framework.

kenapa saya tidak suka?? mungkin tidak usah dibahas… ;)

namun dari hal itu, saya mencoba memikirkan tentang beberapa hal yang harusnya saya pikirkan ketika saya membuat sebuah class Statement, yang merupakan bagian dari DBCore di Code::Wrox, yaitu :

“cara insert, update, dan delete!”

sebuah pertanyaan sederhana…karena rupanya konsep Statement yang saya gunakan tadi begitu “user friendly” untuk urusan “select” pada database. namun rupanya masih memberatkan user, karena rupanya mereka perlu melakukan hardcode terhadap query yang ingin di insert. misalnya saja, saya ingin memasukan data :

user -> adi martha
password -> 12345

pada database db_test pada table user.

maka yang harus saya lakukan pada DB Core adalah (asumsi saya sudah melakukan load class terhadap db core)

$x = new cwxDatabase('localhost','root','');
$x->connect('db_test');
$stmt = $x->prepare("INSERT INTO user(user, password) VALUES('adi martha','12345')");
$stmt->execute();

masih terbilang sederhana memang…namun tetap saja menurut saya kurang “user friendly”. jadi saya memutuskan mengambil konsep PRADO (sekali lagi), dalam menghandle Insert, Update, dan Delete.

masalah muncul, karena ternyata class Statement bisa terdiri dari multi table, dan tentu saja menyulitkan saya untuk membuat sebuah upgrade kecil agar bisa melakukan insert, update, atau delete. karena pada dasarnya PRADO hanya melakukan load pada 1 table, yang di atur pada sebuah controller yang kita buat. pada bagian ini saya kurang menyukai “keluwesan” dari sebuah PRADO.

lalu akhirnya saya memutuskan untuk membuat sebuah class baru sebagai bagian dari DBCore, yaitu class StatementManipulate.

untuk itu di class Database saya menambah sebuah fungsi yaitu prepareManipulate.

seberapa mudah menggunakan class StatementManipulate?! let see. anggap saja kita sudah melakukan load terhadap class dbcore.

$x = new cwxDatabase('localhost','root','');
$x->connect('db_test');
$stmt = $x->prepareManipulate('user'); // memanipulasi tabel user
$stmt->setFields('user','adi martha');
$stmt->setFields('password','12345');
$stmt->insert(); // masukan data

lihat…bahkan tidak ada “hard code” SQL disana…begitu mudahnya, karena selain mengambil konsep prado, saya juga menggunakan konsep dan kebiasaan saya pada VB ketika memikirkan dan membuat class ini.

selain fungsi insert, dan setFields, terdapat juga fungsi setClause($key, $value), update(), dan delete(). jika kita menggunakan fungsi insert maka yang dilihat hanya fungsi setFields. jika kita menggunakan fungsi update maka yang dilihat adalah fungsi setFields dan setClause, sedangkan jika kita menggunakan fungsi delete maka yang dilihat hanya setClause.

any how…akhirnya class DBCore selesai dengan tuntas…dan sekarang saya sedang memikirkan class apa selanjutnya yang akan saya kerjakan. mungkin saya akan mengerjakan class Authentication. atau mungkin class-class lainnya, yang lebih mudah…apa?! saya sendiri tidak tahu… :D

[project] code::wrox – database class Juli 1, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

well, akhirnya setelah kemarin sukses dengan loader, dan mengerjakan class Database sedikit, akhirnya hari ini saya merombak total class database yang saya buat kemarin. karena setelah saya pikir-pikir dengan standard function seperti itu, maka class database sepertinya tidak diperlukan, karena toh, dengan gaya “biasa”, atau “hard code” pun kita masih bisa melakukannya dengan panjang line code, dan kemudahan yang sama. akhirnya saya memutuskan untuk mencoba menambah fitur dari class database yang dibuat.

pikiran saya tertuju kepada PRADO dan beberapa framework yang membagi core DB menjadi 2, yaitu 1 yang melakukan handle terhadap koneksi, dan 1 lagi yang melakukan handle terhadap Statement, atau result.

jadi saya berkaca pada konsep itu dan mencoba membuat class database dan class statement. yang nantinya akan di-link menggunakan class dbcore, untuk mempermudah dalam import class.

setelah class database, dan class statement selesai, saya berpikir tentang penggunaan “binding” yang tentu saja mempermudah programmer dalam menentukan variable di dalam query yang akan diexecute. saya sendiri sering menggunakan binding di prado. dan tentu saja fitur ini sungguh mempermudah saya dalam merancang query, tanpa perlu memikirkan tanda ‘ (petik) di dalam query.

akhirnya saya rubah database saya dan menyisipkan fitur “prepare” yang bertugas sebagai perantara untuk membuat sebuah statement yang baru, dan fungsi execute saya pindah ke binding, dimana nantinya binding ini akan melakukan format query.

dan setelah beberapa lama, akhirnya class database dan class statement hari ini selesai. saya sudah membuat sebuah class exception, untuk menghandle custom error. sayangnya saya masih bingung dalam implementnya. karena tentu saja saya masih begitu baru dalam hal php… :”> …

akhirnya saya menggunakan class Exception built dari PHP untuk sementara. :)

any how, cara menggunakan database class sangat sederhana. kurang lebih seperti ini.

// masukan define! ;)
include("library/define.php");

// test 2...connect ke database
// retrieve data via statement

// load si loader
include("library/codewrox/loader/loader.php");
// load class-class yang perlu misalnya coreexception!

// kita load class database
CWXImport("codewrox.db.dbcore");

$x = new cwxDatabase('localhost','root','');
$x->connect('db_epic');
$stmt = $x->prepare("SELECT nama, banyak FROM pasukan_detail PD JOIN pasukan P ON PD.pasukanid = P.pasukanID JOIN user U ON PD.userid = U.userid WHERE U.username = :1 OR U.username = :2");
$stmt->execute('billy','yperkasa');

while($row = $stmt->fetch_assoc()) {
print_r($row);
echo("
");
}

bisa di lihat, saya melakukan binding 2 variable yaitu :1, dan :2 dimana nantinya :1 akan diisi ‘billy’, dan :2 akan diisi ‘yperkasa’.

untuk menampilkan hasilnya saya menggunakan fungsi yang saya buat sendiri pada class statement. yaitu “fetch_assoc“, selain fetch_assoc, terdapat juga fungsi fetch_row, dan fetchall_assoc yang akan melakukan return data dalam bentuk array.

hasilnya sendiri berbentuk seperti berikut:

Array ( [nama] => UFO [banyak] => 3 )
Array ( [nama] => Alien type I [banyak] => 1 )
Array ( [nama] => Alien II [banyak] => 1 )
Array ( [nama] => Alien IV [banyak] => 3 )
Array ( [nama] => The Destructor [banyak] => 3 )
Array ( [nama] => Fortress [banyak] => 13 )
Array ( [nama] => Grizzly Tank [banyak] => 2 )
Array ( [nama] => Pegasus Tank [banyak] => 2 )

result ini di dapat setelah melewati beberapa error, dan debugging…mungkin masih banyak flaw. namun saya rasa, setidaknya saya ingin menjadikan base class ini selesai dulu semua. membangun sebuah project sederhana sekalian mencari flaw dari framework yang saya bangun ini…

wismilak… :D

slightly movement of Code Wrox : The Loader Juni 30, 2009

Posted by adi martha in a pint of milk, code::wrox, education and technology.
add a comment

setelah tadi pagi saya diguyur oleh sebuah pertanyaan yang benar-benar “kurang ajar”, siksaan kekal dari dosen-dosen Teknik Kompilasi, karena saya harus mengerjakan state dari 0-18 lebih dari 30 menit…dan itu menghabiskan waktu saya, karena total ujian kali ini hanya 100 menit, dan 4 soal yang tampil bukan soal yang biasa-biasa saja…soalnya sungguh-sungguh panjang!

oke, mari kita lupakan sejenak…sambil mencuci baju, dan mengawasi nya, kalau-kalau ternyata sudah waktunya memasukan pewangi pakaian. saya mencoba untuk melepas sedikit, ide saya yang saya kumpulkan tadi pagi, ketika saya sedang mencoba untuk membuka mata secara penuh.

jadi saya membuat “sebuah langkah awal” untuk code::wrox.

langkah awalnya tentu saja sebuah LOADER, yang bisa digunakan untuk menload library, dan class-class yang digunakan nantinya pada framework yang akan saya buat. loader bertugas untuk mengatur, melakukan management, dll, terhadap library yang akan digunakan. nantinya saya harus membuat sebuah loader untuk component, dan bagian untuk merender nya.

begini bentuk awal penggunaan dari Loader di code::wrox,

include("library/define.php");
include("library/codewrox/loader/loader.php");
// kita load class database
CWXImport("codewrox.db.database");
CWXImport("codewrox.auth.authentication"); // test lagi! ;)  ...
// gunakan class nya...
$x = new cwxDatabase;
$x->setTest("test aja!");
echo $x->getTest();
viewLoadClass();

dan ini yang kita dapat… :D

Result of code::wrox Loader Test

bisa di liat, kalau “test aja!” di dapat dari class database. dan bisa dilihat ada 2 class yang di load, yaitu class “cwxDatabase”, dan class “cwxAuthentication”… :D

selightly movement…tapi setidaknya ini memberikan sebuah harapan kepada saya untuk bisa mengerjakannya hingga tuntas! :D

the initial release of codename : ‘Code Wrox’! Juni 29, 2009

Posted by adi martha in a pint of milk, code::wrox.
add a comment

entah kenapa, saya sedari kemarin begitu “exciting” berpikir tentang hal yang begitu megah. tentu saja bukan pesta pernikahan ataupun hal-hal sejenis…namun lebih kepada filosofi tentang “programming” yang saya anut.

beberapa hari ini saya memikirkan tentang situs KMH yang akan saya buat, ketika saya sampai di Bali nanti. saya ingin sekali merancang situs yang benar-benar “ajaib” dan benar-benar user friendly, serta full of costumization! :D

saya sempat berpikir untuk menggunakan CI (Code Igniter) untuk melakukan development. sekalian belajar, begitu pikir saya…lagipula kalau saya menggunakan PRADO maka situs ini akan sangat-sangat-sangat berat sekali untuk di LOAD, karena FRAMEWORK PRADO yang kompleks!

namun saya kembali mencoba menantang visualisasi saya, dan mencoba untuk mencari…

“seberapa jauh sebenarnya saya sudah berjalan”

dan 2 hari ini saya mencoba merancang sebuah “skema” dasar tentang FRAMEWORK yang saya namain “codewrox!”

dan hari ini ketika harusnya saya memikirkan tentang Augmented Tree, dan Grammar…saya malah berkutat dalam PHP, dan menciptakan sebuah initial release…dari 2 buah “core class” yang nantinya akan membangun CODEWROX! saya menciptakan sebuah class component, dan sebuah turunannya berupa “textbox”.

jadi pada initial release pertama CodeWrox hal yang bisa dilakukannya adalah melakukan “render” terhadap sebuah textbox…dimana untuk melakukan render pada textbox, saya cukup menuliskan…

$x = new TEXTBOX;
$x->init();
$x->setName("test");
$x->setType("text");
$x->render();

secara otomatis nantinya akan muncul sebuah object TEXTBOX ketika saya melakukan preview!! wew…saya pikir akan begitu sulit, namun sepertinya terlihat begitu mudah…walaupun sebenarnya tidak akan mudah!

there’s a long road ahead untuk Code Wrox…dan initial birth ini membuat saya begitu excited…hingga saya bisa bernafas tanpa udara! :D

wismilak, and hope this Code Wrox finish at the end of the vacation! ;)

Network Communicate Process Mei 15, 2009

Posted by adi martha in a pint of milk, education and technology, my mind, my mind, body, and soul, virtual world.
add a comment

saya pernah berpikir ketika sedang jongkok, dan bengong…

A server, can received, process, and send a data…into the client. namun jika ternyata data yang ingin di tampilkan cukup banyak…can a server do that?!

mungkin sebuah big server, bisa dan reliable untuk melakukan itu…katakanlah, melakukan sorting terhadap 50 juta data, dimana sorting berdasarkan beberapa category complex, yang dimana nantinya, hasil sorting itu akan di tampilkan dalam bentuk PDF dengan jumlah halaman kurang lebih 20 juta halaman….

pretty large isn’t it?! lalu, saya pun bertanya…iseng saya kumat, dan gairah kurang kerjaan saya berkembang…

“bagaimana jika kita tidak memiliki dana untuk memiliki sebuah komputer server yang reliable? can we do it?!”

lalu, entah kenapa…saya terpikir tentang LAN (intranet), dimana sekarang memiliki kecepatan hingga 1GB/s. sebuah kecepatan transfer data yang benar-benar dasyat…dan cukup besar untuk mengakomodir kapasitas data yang berkembang saat ini…

saya berpikir, bagaimana jika “kita membuat JARINGAN YANG BISA BERPIKIR?”

pada dasarnya, network pasti memiliki kemampuan untuk melakukan communicate antar satu node network ke node lainnya…bagaimana jika kita menggunakan process itu untuk melakukan pengolahan data…

untuk memudahkannya…coba bayangkan SEMUT…

semut menggunakan pheromone untuk mengidentifikasi sesuatu, memberitahu sesuatu, dll. bisa saja pheromone yang ditinggalkan memiliki arti, “makanan”, “bahaya”, dll.

setiap semut mengkoleksi data yang di koleksi oleh semut lain, dan meninggalkan data yang dikoleksinya pada pheromone, untuk di koleksi oleh orang lain.

pengambilan dan pengumpulan informasi ini sering disebut kemotaxis.

berbekal konsep sederhana itu, mari kita anggap sebuah PC kecil itu sebagai seekor semut, walaupun saya tahu, semut tidak berekor.

jadi kita membuat sebuah alur komunikasi kepada 5 komputer (5 semut), yang berkomunikasi via LAN/intranet (pheromone). setiap komputer bertugas untuk melakukan sebuah process, dan memberitahu komputer lain mengenai process yang sudah dikerjakannya, sebagai data koleksi dari komputer lain…

contoh gampangnya adalah “process sorting” seperti yang saya berikan contohnya barusan…

sorting ada banyak macamnya, dan salah satu yang paling terkenal adalah “Quick Sort”, karena menggunakan konsep “partial/partition sorting”, sehingga setiap partisi dikerjakan terpisah dan secara rekursif, sehingga mempercepat process search. bagaimana cara kerja Quick Sort? ada baiknya anda mencari terlebih dahulu di Internet, sebelum melanjutkan membaca methode yang dihasilkan dengan cara jongkok, dan stimulus bengong ini…

anggap diagram network komputer seperti berikut :

Star Scheme

Star Scheme

setiap komputer mampu berinteraksi satu sama lain…

ketika ingin melakukan sorting dengan menggunakan metode Network Comminucate Process, maka ketika ada data “input” misalnya saja sebuah dataset berukuran 50 juta rows.

maka Local Network melakukan perhitungan performance dan benchmark dari masing-masing komputer. floating point, I/O read and write, dll. untuk menentukan “pemimpin” dari NCP.

pemimpin ditentukan dari hasil benchmark terbaik. setelah itu maka lanjutkan pada process NCP, seperti berikut:

  1. pemimpin bertugas untuk melakukan partialisasi data, membagi data menjadi 2
  2. setelah data di bagi 2, maka pemimpin bertugas berkomunikasi dengan komputer lain, dan menentukan pemimpin selanjutnya.
    Split Data, and Choose The Next Leader

    Split Data, and Choose The Next Leader

    disana dapat dilihat, komputer leader melakukan Split Data dan memilih komputer selanjutnya sebagai Leader (garis merah), dan komputer di garis merah, setelah melakukan split data menunjukan leader (garis biru), dan mengirim sisa data. begitu seterusnya sampai seluruh data habis.

  3. pemimpin selanjutnya, kembali melakukna tugas 1…lalu di lanjutkan tugas 2…sampai semua komputer mendapatkan jatah yang “sama” dalam process sorting.
  4. setelah data selesai di bagi, maka process sorting akan dilakukan oleh 5 komputer. dan masing-masing, data yang disorting disimpan pada memory masing-masing Node.

    Sort on each Node

    Sort on each Node

  5. setelah selesai melakukan sorting, maka setiap Node memberitahukan (broadcast) di jaringan mengatakan…I’m READY! lalu pemimpin kembali mengecek…siapa yang memiliki data yang belom tersort paling banyak?! setelah dapat, maka komputer itu akan melakukan negoisasi dengan komputer yang telah selesai…

    The Finished one, Connect and ask Leader, to Negotiate with who?!

    The Finished one, Connect and ask Leader, to Negotiate with who?!

  6. komputer yang tersisa paling banyak, akan membagi (memotong) sisa datanya secara partial, dan dikirim kepada komputer yang sudah selesai.
  7. ketika data selesai di terima, maka komputer akan kembali melakukan sorting pada data-2 (data-1 sudah selesai di sorting).
  8. begitu seterusnya, sampai semua komputer mengatakan I’M READY, dan mengirimkan sinyal kepada  komputer LEADER!

    READY!!!

    READY!!!

  9. dan ketika semua status sudah READY, maka pemimpin akan mengirimkan sebuah sinyal, untuk melakukan partially merge data.
  10. jadi pemimpin memetakan seluruh benchmark, dan mengatur “formasi”, misalnya saja…komputer 1, dan komputer 3 menjadi group 1. dan komputer 2, komputer 4, serta komputer 5 menjadi group 2.
  11. masing-masing group menentukan pemimpinnya masing-masing.

    Partially Merge Data

    Partially Merge Data

  12. setelah pemimpin dipilih, maka pemimpin akan meminta “nilai” terkecil pada group.
  13. jika komputer pada group memiliki n-buah-data, maka nilai yang harus di cari adalah nilai yang paling kecil dari n-data tersebut.
  14. setelah itu pemimpin akan mengecek, dan memilih nomor yang paling kecil, untuk dimasukan ke dalam buffer memory, dan di tampung.
  15. setelah seluruh group selesai melakukan partial merge, kini ada 2 buah data merge (dari group 1 dan group 2)
  16. maka kembali komputer diurutkan secara benchmark (dari leader-1 sampai leader-n), lalu 2 data partially merge tersebut di tanyai nilai yang paling kecil, lalu disimpan pada komputer n sampai penuh, jika sudah penuh maka pindah ke n+1 (sehingga seluruh komputer memiliki pekerjaan/process load yang sama)
  17. jika data merge sudah habis 2-2 nya…maka nilai yang diterima dari user akan diberi (di Send) dari komputer Leader-1 (dari data nomor 1 sampai habis), lalu dilanjutkan leader-2, lalu leader-3, dst…sampai leader-n…sehingga process Send tidak memberatkan CPU…

terlihat sederhana, namun pada kenyataannya…hal sederhana ini perlu dan sangat penting dalam pengumpulan KD (Knowledge Database), ketika ingin membangun sebuah situs, atau aplikasi penyedia solusi, seperti DSS, atau aplikasi lain…

dan satu lagi IDE GILA…untuk orang-orang kurang kerjaan seperti saya… ;)

Trust Metric Algorithm for Education Analysis Mei 6, 2009

Posted by adi martha in a pint of milk, education and technology, my mind, my mind, body, and soul.
add a comment

sambil berjalan ke kampus menaiki angkot, saya tidak berpikir tentang “ujian apa” yang akan saya lalui hari ini…tidak terpikirkan sama sekali, bagaimana cara mencari table dimensi, table fakta, apa itu data mart, bagaimana cara convert dari OLTP menjadi OLAP, atau hal-hal kecil lainnya…

namun saya berpikir tentang “beasiswa” yang di tawarkan oleh kakek saya, dimana saya di tugaskan untuk memberikan “nilai” yang saya dapatkan ketika saya belajar di Bina Nusantara.

lalu, tiba-tiba saya berpikir tentang…

bagaimana orang disana (Pemerintah Daerah) bisa mengetahui, siapa yang patut menerima beasiswa?!

  • apakah dengan melihat IPK yang kita dapatkan?!
  • apakah dengan melihat dimana kita kuliah?!
  • apakah dengan melihat akreditasi tempat kita kuliah?!
  • apakah dengan melihat hal-hal lain…misalnya orang dalam di dalam Pemerintahan?!

jika kita berpikir tentang “numeric value“, seperti IPK, atau akreditasi, mungkin saya kita bisa mendapatkan pelamar beasiswa terbaik yang ada…bisa saja dia memiliki IPK 3.8, dengan akreditasi kampus baik…minimal B misalnya…

namun apakah IPK 3.8 disini dan disana sama?! apakah akreditasi A disana dan disini sama?!

secara tidak langsung ada banyak faktor yang bisa mengaburkan dan membuat “numeric value” disini dan disana menjadi tidak standard…angka 1 di Universitas A mungkin akan berbeda dengan angka 1 di Universitas B.

lalu jika sebegitu “kabur”-nya, maka bagaimana cara menentukan calon terbaik untuk mendapatkan beasiswa?! tentu saja tanpa unsur KKN dan murni adalah “kandidat terbaik” yang bisa mendapatkan beasiswa!

jawabannya adalah “TRUST METRIC“. saya kenal ilmu ini baru beberapa hari yang lalu, ketika saya menonton sebuah episode Numb3rs, yang membahas tentang Trust metric, memang tidak banyak dan belum jelas, namun saya menjadi tertarik pada salah satu bidang ilmu psychology dan sosiology ini.

dan rupanya pada kasus ini kita bisa menggunakan metode Trust Metric + Game Theory untuk mendapatkan hasil yang optimum, sehingga penilaian antar kandidat menjadi seimbang.

disini saya cuma akan membahas Trust Metric saja. kita sebenarnya tidak sadar, bahwa kita sering berhadapan dengan Trust Metric, contoh sederhananya adalah:

RATING!

jika anda mengikuti forum, dan mengerti tentang Reputation Point, maka sebenarnya anda sudah terlibat dalam sebuah perhitungan Trust Metric sendiri. semakin tinggi rating, tentu saja orang akan semakin percaya dengan orang tersebut, namun terkadang Trust metric hanya bersifat linear, misalnya akibat orang itu pernah melakukan “transaksi”, atau “menolong” orang tersebut, maka secara tidak langsung nilai “trust metric” nya akan meningkat…namun tidak pada orang lain…karena pandangan “trust” pada satu orang dengan orang lain, terhadap suatu object akan berbeda…

begitu juga dengan universitas, dengan berbedanya pandangan dan pemahaman dalam pemberian nilai!

kenapa susah memberikan nilai pada Trust Metric?! contoh gampangnya adalah seperti ini…

Trust Metric Node

Trust Metric Node

anggap kita punya 4 Node (merah, biru, hijau, dan kuning), masing-masing node memiliki nilai kepercayaan kepada node lainnya, contohnya Node HIJAU memiliki kepercayaan sebesar 0.85 kepada Node KUNING, Node KUNING memiliki kepercayaan sebesar 0.5 kepada Node BIRU, dst.

NB : garis coklat itu berarti dari trust metric dari Kiri ke Kanan, dan garis hitam itu sebaliknya.

jadi kalau dibawa ke masalah yang tadi…maka IPK 3.8 pada Universitas Merah, akan sama nilainya dengan berapa pada Universitas Hijau??

IPK di Universitas Hijau

IPK di Universitas Hijau

bisa dilihat bahwa jika kita memiliki IPK 3.8 di Universitas Merah, maka kita setidaknya akan memiliki IPK sebesar 4.43 di Universitas Hijau.

nah yang menjadi masalah adalah. ketika sebuah NODE tidak memiliki value kepercayaan kepada NODE lain. contohnya berapa kepercayaan Node MERAH kepada Node KUNING???

untuk itu maka kita harus menggunakan Neural Network Algorithm dan mencari kemungkinan “Nilai” yang pas untuk koneksi antar node tersebut.

dan hal itu akan sulit dilakukan! kenapa?! karena kita tidak memiliki standard nilai yang sama, pada setiap node, dan disana kita dihadapkan pada sebuah solusi, tanpa “knowledge database” yang bisa digunakan sebagai pijakan.

bisa saja kita menggunakan “perbandingan”, misalnya:

Perhitungan T(H<K)

Perhitungan T(H

namun akankah hasil T(H<K) = 0.87 itu kompeten???

TIDAK!! sama sekali TIDAK!!

kenapa?? ingat kita tidak bisa melakukan perbandingan secara langsung, dikarenakan kita tidak mengetahui…berapa besar persentasi dari Kuning ke Merah? dan begitu juga sebaliknya (Merah ke Kuning), hal ini membuat bahwa sebenarnya yang bepengaruh disini adalah pandangan Hijau ke Merah, dan Hijau ke Kuning…serta mengabaikan pandangan Merah ke Kuning. yang dimana hasilnya akan menjadi berat sebelah dan tidak seimbang…sehingga solusi yang di dapat tidak menjadi solusi yang OPTIMUM!!!

ini yang menjadi permasalahan di Trust Metric sampai saat ini…

Trust Metric algorithm tidak memiliki “standard” yang sama. karena adanya perbedaan cara menilai “trust” antara satu object dengan object lain…dan pada masalah ini, dimana kita membahasa Universitas, maka mungkin variable yang bisa di jadikan pertimbangan adalah:

  1. Standard nilai dari Universitas tersebut (55 – 64 = D, 65 – 74 = C, 75 – 84 = B, 85 – 100 = A)
  2. Akreditasi Kampus (A, B, C)
  3. Wilayah Kampus (apakah berada di kota besar, kota kecil)
  4. Persaingan Antar Kampus (berapa banyak Kampus “sejenis”)
  5. Jumlah Kemenangan dalam sebuah Kejuaraan
  6. Standard Dosen yang mengajar (S1, S2, atau S3?)
  7. Sarana dan Prasarana (Komputer, Perpustakaan, dll)
  8. Kurikulum
  9. Manajerial
  10. dst…

setelah itu kita bisa menentukan faktor atau variable mana yang lebih menentukan, sama halnya seperti bermain tetris…

tentu saja saya lebih memilih menghilangkan 1 pile balok, dibandingkan membuat menutup lubang

disini Game Theory berperan, jadi diharapkan nilai faktor yang didapatkan adalah hasil optimum yang cocok dan bisa di terapkan pada seluruh Universitas…

intinya adalah

setiap nilai yang bisa kita hitung, belum tentu memiliki makna yang sama…dan seharusnya kita sudah mulai berpikir tentang hal ini mulai saat ini, karena pengaruhnya akan sangat besar…akan merubah cara pandang perusahaan dan universitas untuk menentukan standarisasi penerimaan pegawai, ataupun penerimaan mahasiswa. menciptakan lingkungan dan suasana yang lebih kompeten, dan merangsang tumbuhnya SDM yang benar-benar berkualitas.

saya tidak tahu kapan Indonesia, atau mungkin negara lain menggunakan metode ini di dalam menentukan suatu pilihan yang memiliki standard variable yang berbeda…saya sendiri tidak tahu kapan saya bisa menuntaskan algoritma Trust Metric ini…

should it be my tessis someday?! lol….

mungkin nanti akan saya bahas lagi…karena Trust Metric and Game Theory are fun!! ;)

saya ingat perkataan John Nash di a Beatifull Mind…

Adam Smith said…best will come if everyone in the group do the best for their self…incomplete…
best will come if everyone in the group do the best for their self and the group!

dan begitu juga trust metric…it wouldn’t “best” if it incomplete;)

mari kita menjadi seorang John Nash lain untuk meng-komplit-kan Trust Metric… :)