[JUG-Indonesia] Indonesia National Contest (INC 2008)

2008-05-03 Terurut Topik Felix Halim
Hallo Juggers,

Apakah diantara kalian ada yang mengikuti INC 2007 tahun lalu?

INC 2008 tahun ini sudah dekat lho:
- Elimination Round, 1 June 2008
- Final Round, 15 June 2008

Info tambahan tentang INC 2008 ada disini:

http://suhendry.net/blog/?p=82
http://competition.binus.ac.id/inc2008/


Bagi yang belum tahu soal2 seperti apa INC itu,
atau bagi yang ingin mengingat2 masa lalu INC 2007,
bisa lihat soal + pembahasan INC 2007 di:

http://felix-halim.net/story/inc07/index.php


Programming contest seperti ini makin populer dari tahun ke tahun.
Sampai-sampai Google pun membuat contest system sendiri!

http://code.google.com/codejam

Bedanya, tingkat kesulitannya jauh lebih susah :P


Ayo para Juggers tingkatkan kemampuan Problem Solving juga.
Spring, Hibernate, EJB terus kan bosen :P
Sekali-sekali adu nyali bagian algorithm + coding skills :)
Kalo udah juara, mau coding Java pake Spring ato EJB gak masalah,
dijamin lancar ;)

Yang masih mahasiswa bisa coba ikut INC 2008 tahun ini.
Lombanya bisa pake Java kok :D

Saya ingin lihat salah satu juara dari Juggers!

Go Go Juggers!

Felix Halim


[JUG-Indonesia] Maximum Java Heap size cuma sekitar < 2GB?

2008-05-14 Terurut Topik Felix Halim
Dengan komputer ber-memory 4 GB, tidak bisa menjalankan program Java
dengan setting -Xmx2g.
Error messagenya adalah:

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

OS yang saya pakai adalah Windows XP pro 32 bit.
Windows XP katanya gak bisa allocate consecutive memory block yang gede.
Lagipula 2GB direserve untuk OS, jadi kalo mau pake > 2GB harus edit
Boot.ini tambahin /3GB
Tapi udah dicoba tetep aja gak bisa, hanya maximum bisa sampai
-Xmx1400m  (sekitar situ)

Apakah ada yang bisa ngejalanin program Java dengan -Xmx3800m ?
Boleh tau pake OS apa? atau ada trik lainnya?

Thanks,

Felix Halim


Re: [JUG-Indonesia] Maximum Java Heap size cuma sekitar < 2GB?

2008-05-14 Terurut Topik Felix Halim
Ini ada yang udah ngumpulin info ttg Java Heap size. Cukup exhaustive:

http://mail-archives.apache.org/mod_mbox/ws-axis-user/200511.mbox/[EMAIL 
PROTECTED]

Tapi masa sih gak ada patch buat Win XP 32bit supaya bisa nembus batasan 2 GB...
Cape bener musti ganti OS 64bit..

Felix Halim

2008/5/14 Samuel Franklyn <[EMAIL PROTECTED]>:
>
> Felix Halim wrote:
>  > Dengan komputer ber-memory 4 GB, tidak bisa menjalankan program Java
>  > dengan setting -Xmx2g.
>  > Error messagenya adalah:
>  >
>  > Error occurred during initialization of VM
>  > Could not reserve enough space for object heap
>  > Could not create the Java virtual machine.
>  >
>  > OS yang saya pakai adalah Windows XP pro 32 bit.
>  > Windows XP katanya gak bisa allocate consecutive memory block yang gede.
>  > Lagipula 2GB direserve untuk OS, jadi kalo mau pake > 2GB harus edit
>  > Boot.ini tambahin /3GB
>  > Tapi udah dicoba tetep aja gak bisa, hanya maximum bisa sampai
>  > -Xmx1400m  (sekitar situ)
>  >
>  > Apakah ada yang bisa ngejalanin program Java dengan -Xmx3800m ?
>  > Boleh tau pake OS apa? atau ada trik lainnya?
>  >
>
>  Setahu saya harus pakai OS 64 bit. Bisa Windows 64 bit atau
>  Linux 64 bit.
>
>
>  
>
>  Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL 
> PROTECTED]
>
>  Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>
>  Yahoo! Groups Links
>
>
>
>


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-05-14 Terurut Topik Felix Halim
2008/5/14 Wilbert <[EMAIL PROTECTED]>:
> Aku baru aja kaget nih didaftarin dosenku untuk ikutan..

Wah.. perhatian sekali dosen kamu :)
Asik tuch punya dosen yang ambisius.
Lomba selalu memacu semangat belajar :D


> Wekeke.., ada yang mau ikutan lagi?
> Ya iseng2 aja nih.., ga tau bisa apa ngk, coz takut tabrakan dengan
> semester pendekku.. :)

Kan kompetisinya selalu hari minggu:

http://competition.binus.ac.id/inc2008/Registration/?page=Schedule

Bisa donk :D


BTW, soal2 nya beda loh sama yang diomongin di milis ini.
Lebih ke arah algorithms, coding speed + bug free, flawless, dan efficient!
Soal tahun lalu + pembahasannya lihat disini:

http://felix-halim.net/story/inc07/index.php

Kalo suka lomba INC ini, nanti bisa ikutan lagi lomba ACM ICPC
Regional Jakarta bulan Oktober :D
Kalo yang ACM ICPC ini nanti pesertanya bukan dari Indo doank,
universitas Asia lainnya bisa ikutan (seru).
Saat ini sih jagoan Asia itu univ2 China kayak Shanghai Jiaotong,
Tianjin, Zhongsan, Zhejiang, Tsinghua, Peking, Taiwan, Fudan.
Seru nih nanti ICPC Jakarta.. Jangan mao kalah ama univ2 China!

Felix Halim


Re: [JUG-Indonesia] [OOT] Tanya Algoritma Greedy

2008-05-14 Terurut Topik Felix Halim
2008/5/14 Slamet <[EMAIL PROTECTED]>:
>  Hi semua, sory klo sdikit menyimpang,
> saya mo tanya tentang Algoritma Greedy, seberapa optimalkah
> algoritma Greedy jika diimplementasikan untuk menghitung rute terpendek dan
> biaya termurah..?
> apakah ada yg pernah implementasikan contoh algoritma ini pake Java..?,
>  klo ada mungkin bs share ..:)..Thx semua

Wahh.. soal kayak gini ini nih yang masuk ke Programming Contest!
Ini kan mirip soal qualification INC 2007 tahun lalu :D

http://felix-halim.net/story/inc07/penyisihan-problem-e-taxi.php

Solusi Java nya ada disini:

http://felix-halim.net/story/inc07/penyisihan-writeup-e-taxi.php
(click yang TaxiAStar.java)

Disitu pake A* sih, itu exhaustive search (ada greedynya sih -> heuristic nya).
Bisa juga pake Dynamic Programming :D

Yang jelas kalo pake Greedy murni hasilnya gak bakal optimal.
Tapi seberapa optimal kah? itu tergantung input yang diberikan :)

Felix Halim


Re: [JUG-Indonesia] [OOT] Tanya Algoritma Greedy

2008-05-14 Terurut Topik Felix Halim
2008/5/15 Feris Thia <[EMAIL PROTECTED]>:
> Berarti pernah memecahkan masalah scheduling dong ya ?

Scheduling itu masuk kategori Constraint Programming dan known to be
NP Complete. Karena solusi exactnya (optimal) teralu lama, biasanya
ini disolve pake Local Search yang bisa nyari schedule yang "near"
optimal dengan waktu singkat.

Kalo soal ini masuk Programming Contest, maka instancenya harus kecil
supaya bisa di bruteforce untuk cari yang optimal.
Kalo instancenya besar, biasanya suruh nyari yang near optimal nanti
dicompare ama peserta lain punya (ini modelnya Maraton Match TopCoder
contest kayaknya).

Felix Halim


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-05-15 Terurut Topik Felix Halim
2008/5/15 Hardy Huang <[EMAIL PROTECTED]>:
>  Saya dulu pertama kali ikut INC juga karena disuruh dosen. Dulunya di
> Sumatera Utara, kampus kami yang pertama kali ikut. Saya generasi kedua
> pergi. Pulang cuma solve 2 soal. Ampun deh hahahaha
>  Padahal waktu solve soal pertama, waktunya sangat cepat. Jadi kampus kita
> sempat bertengger di posisi 5 besar. Tapi terus turun... dan pulang juara
> 18. Memang tantangannya berat sekali. Mesti belajar banyak2 deh. Yang jadi
> pertanyaan saya. Biasanya semakin pandai seseorang di algoritma malahan
> kemampuan programming aplikasi2 web dan desktop tidak begitu jago. Di lab
> tempat saya bekerja, dipenuhi oleh orang2 Phd yang kemampuan algoritmanya
> wow semua. Tapi kalau soal programming Java atau .Net. Semuanya so so saja,
> malahan tidak begitu peduli.

Untuk jadi PhD memang butuh pengetahuan dasar algoritma.
Di Qualifying Exam untuk PhD biasanya pertanyaannya tentang algoritma
dan butuh berpikir.
Seperti how to do this efficiently? can you propose better solution? etc...

Lain halnya dengan Java dan applikasinya.
Sebagai developer biasanya tidak memerlukan algoritma yang hebat untuk
develop applications.
Kebanyakan tools2nya sudah tersedia siap pakai dalam bentuk library.

Kalau kita telusuri, siapakah pembuat library tersebut?
Kebanyakan orang2 PhD yang membuat library tersebut (coba liat
utilities2 di core Java library).
Karena butuh research yang cukup lama untuk membuat tools yang
eficient, correct, clean, robust, etc.
Disinilah algoritma terpakai. Makanya Google, MS dkk butuh orang2 PhD
untuk bikinin library macem2 buat mereka.
Untuk inovasi tools2 baru mereka.

Kalau anda mau jadi seorang developer, maka algoritma tidak begitu penting.
Tapi kalau anda adalah seorang researcher, maka algoritma adalah
sesuatu yang mandatory (+ skills lainnya).

Felix Halim


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-05-15 Terurut Topik Felix Halim
2008/5/15 Wilbert <[EMAIL PROTECTED]>:
>  Ya begitulah... emang kenyataannya begitu koq..
> Tapi yang penting buatku sih JAVA... :D
> kita liat aja lah nanti.., i have to train harder than before.. :)

Boleh sih punya language kesukaan :)
Tapi jangan teralu fanatik juga, menurut saya sih kurang baik.
Java memang bisa dibilang general programming language yang sangat baik.

Tapi dalam programming contest biasanya orang lebih suka pake C/C++.
Karena C/C++ bisa tulis makro dan membuat coding lebih singkat (saves
coding time).
Dan most likely bisa tembus time-limit (dimana Java bisa 2 ato 3 kali
lebih lambat) untuk kasus tertentu.
Kalau Java kan untuk declare Map<> aja butuh puluhan karakter :P (blum
lagi akes nya butuh .get() .set() :P).

Jadi harus liat2 language yang lain juga untuk menghadapi suatu masalah.

Felix Halim


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-05-15 Terurut Topik Felix Halim
2008/5/15 Jecki Sumargo <[EMAIL PROTECTED]>:
>  sedikit OOT, jadi inget pernah baca di mana gitu ada orang yang
>  menyanggah XP dengan statementnya donald knuth bahwa dia itu jarang
>  sekali melakukan kesalahan dalam coding dan jarang sekali melakukan
>  kompilasi hanya untuk coba2 kira2 codingnya berhasil ato ga.
>  sepertinya orang yg berusaha memakai statement ini ga sadar diri
>  banding2in sama donald knuth hehe...

Recent interview ama Donald Knuth:

http://www.informit.com/articles/article.aspx?p=1193856

Disitu diceritain tuch.. ternyata Knuth run 2x bukan 1x.
Knuth gak setuju testing mockup gara2 running environmentnya bisa beda2.
Tapi itu kan jaman dulu...
kalo Java sih environmentnya (harusnya) sama dimana2,
jadi mockup (IMHO) boleh dilakukan :D.

Felix Halim


Re: [JUG-Indonesia] [OOT] Tanya Algoritma Greedy

2008-05-15 Terurut Topik Felix Halim
He eh, OOT nya kepanjangan kyny :D

2008/5/15 Feris Thia <[EMAIL PROTECTED]>:
> Wah... senang kembali mendengar istilah2 itu. Pernah tahu Anbulagan dong ?
> Dosen Binus yang dulu nantangin soal itu (CSP). Gue dulu pernah buat tapi
> tidak pernah optimal. iya itu NP complete dan perkembangan constraintnya
> eksponensial, benar ya ?

Oh saya di BiNus JWC bukan di anggrek ataupun syahdan, jadi gak kenal Anbulagan.
Betul, growth-nya exponential. Hanya solvable untuk instance kecil.

> Kalau menurut Felix untuk pemecahan CSP
> tetap harus pake heuristic atau algoritma "kira-kira" ya ?

Heuristic pada dasarnya adalah algoritma "kira-kira" juga.
Itulah yang terbaik saat ini: dengan Local Search.

http://en.wikipedia.org/wiki/Local_search_(optimization)

Local Search cuman nama, dibaliknya banyak trik aneh2nya (yang problem
specific).


> Salah satu pemecahan yang waktu itu disarankan adalah split resource dari
> kaki-kaki tree yang tidak terlalu dependent, dan itu adalah distributed
> computing. Kalau istilah keren sekarang itu cloud computing ya? Menurut
> Felix benar ga dan kalau boleh opininya dong tentang dc ini ?

Solusi Distributed Computing juga bisa dipakai.
Dulu ceritanya ada lomba "RSA DES Challenge" untuk memecahkan
encryption DES, RSA.

http://en.wikipedia.org/wiki/RSA_Secret-Key_Challenge

Pemenangnya adalah yang pake Distributed Computing itu.
Jadi masing2 komputer dibagi rata kerjaannya (ini kayak scaling horizontal).
Dan solusi ini dipakai dimana2 kok. Terutama di Google!


> Btw, Felix kenal dengan almarhum John Winoto ? Beliau salah satu organiser
> awal untuk tim ACM Binus.

Saya kenalnya Pak Thompson Susabda Ngoen dulu coach saya.
Sama Lego Haryanto alumni BiNus juga yang masuk World Final ACM ICPC 1997.


> And saya sudah jalaninin e-Taxi di Java neh... masih running, perkiraan
> waktu solvingnya untuk semua alternatif biasa sekitar berapa lama ya?

Input constraintnya kan gak gitu besar (n=100) jadi harusnya beberapa
detik juga dah kelar.


2008/5/15 Feris Thia <[EMAIL PROTECTED]>:
>  Ah... si Eko,
>
> Yang ketiknya kaya mau ngerubuhin gedung itu :P hahaha. Sodaranya Kunto -
> angkatan gw - juga jago banget. O iya, berarti kita "berseberangan" dong ya
> Lix ? Gw di bluejack lu di BNTRC :p Tapi gw mah bluejack kacangan lah...
> hehehe

Gak bersebrangan si.. musti naek mikrolet dulu baru nyampe :D
Gedung BiNus JWC ada di deket Senayan.

> Berarti Felix masih kenal Daniel Linuar, Willy Desaya dan teman-teman ya ?

Gak kenal juga :(  beda angkatan kyny (dan beda gedung).


> Dan soal akhirnya karir lebih mengarah ke bisnis ya karena memang tuntutan
> pasar lah, ga mungkin idealis melulu kecuali kerja di Google :p

Wah Google demen banget ama Programming Contest.
Dari situ Google narik bibit-bibit unggul nya!
Makanya kan Google setup programming contest sendiri:

http://code.google.com/codejam

Soal2nya mirip ACM ICPC :)
Algoritmanya dalem2 semua...


> Btw... kayanya thread ini lebih ke nostalgia kampus... ntar disampung japri
> aja kali ya. Mohon maaf untuk yang lainnya.

Gpp, sekali2.. supaya variasi ;)


> O iya, saya suka banget dengan website kamu. Para juggers terutama yang
> mumpung masih kuliah dan banyak waktu recommended lihat2 contoh algoritma di
> situsnya Felix dan coba solve problem dari sono. Percaya deh... banyak
> banget gunanya walau sudah masuk dunia practical. Sebagai konsultan teknis
> maupun di proses bisnis, pengalaman2 memecahkan algoritma  itu memberi sense
> solusi yang lebih peka dan terbukti membantu banget.

Wah thanks buat pujiannya, tapi jangan terpaku sama website saya.
Website TopCoder jauh lebih resourceful !
Disana pakar2nya ACM ICPC, Google Code Jam-ers berkumpul dan solving
problems tiap minggunya lewat SRM (Single Round Match).
Dan pembahasannya juga dikeluarin tiap minggunya.

http://www.topcoder.com/tc

Dibanding dengan website saya, TopCoder jauh lebih patut dilihat.

Felix Halim


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-05-15 Terurut Topik Felix Halim
2008/5/15 Hardy Huang <[EMAIL PROTECTED]>:
>  Eh untuk apa getter setter di lomba algoritma? IDE nya sih visual studio
>  2005 kalau tidak salah terakhir kali. Eclipse jg dapat untuk yg pake java.

Haha, maksudnya kalo di C++ kan gak perlu getter setters.
STL nya bisa hajar pake [] langsung:

map arr;
arr["felix"] = 100;
string s = arr["felix"];

Kalo di Java kan ribet:

Map arr = new HashMap();
arr.put("felix", 100);
String s = arr.get("felix");

Blum lagi kalo orangnya Java banget.
Semuanya dibikin getter setter... :D
Emang gak perlu getter setter di Programming Contest :)


Btw, dari UI keliatannya sudah pada ber-api2 untuk ngedaftar:

http://scele.cs.ui.ac.id/s1/mod/forum/discuss.php?d=9498

Ada yang bikin Fun Programming Club (FPC) buat latihan!
Gile.. semangat anak2 UI boleh juga.
Yang lain jangan mau kalah :)

Felix Halim


Re: [JUG-Indonesia] [OOT] Tanya Algoritma Greedy

2008-05-15 Terurut Topik Felix Halim
2008/5/15 Feris Thia <[EMAIL PROTECTED]>:
>
>  Ups.. ternyata banyak Bahasa Inggrisnya juga ya. Kok tadi sepertinya gue
> lihat Bahasa Indonesia ya :p hehehehe

Haha, berarti udah mahir Bahasa Inggris...
Sampe2 ngeliat Bahasa Inggris seperti Bahasa Indonesia :D

Sebenernya saya campur sih Bahasanya.
Tergantung audiencenya. Kalo INC yah buat apa pake Inggris?
Toh pesertanya anak indo semua dan lebih enak bisa pake bahasa gaul :P

Kalo untuk hal2 yang dibaca umum baru Inggris :D

Felix Halim


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-05-15 Terurut Topik Felix Halim
Text editor yang canggih2 menurut saya tidak dibutuhkan.
Asal bisa ngetik, save, ama text coloring aja udah sip.
Gak perlu auto complete auto compile dsb...

Compile dari command line saja (gak usah setting2 IDE nya lagi).
Dan inputnya pun ketik ke file, untuk nge testnya pake redirection lebih enak.
Itu best practice yang saya pakai selama kompetisi ACM ICPC.

Info dari Juri:
IDE yang dipake ada 3: devcpp, eclipse, textpad
OS nya windows.

Felix Halim


2008/5/15 ade_huh <[EMAIL PROTECTED]>:
> ini gak boleh pake IDE
> cuman pake texteditor seperti notepad
> klo saya denger buat tahun sekarang pake os linux, terus texteditornya
> pake vi/vim (kayanya)
>
> yg perlu diperhatikan juga memory dan time untuk running
> programnya(jadi algoritmanya juga gak boleh asal2an)jadi harus
> deperhatikan juga apakah menggunakan java /c;
>
> biasanya tuan rumahnya di binus yah? dan yg saya denger di binus untuk
> menghadapi  contest ini, ada pelatihan 3 kali dalam seminggu bagi
> mahasiswanya
>
>
> kalo di kampus saya 1x dalam seminggu
>
>
>
>
>
>
> --- In jug-indonesia@yahoogroups.com, Wilbert <[EMAIL PROTECTED]> wrote:
>>
>> Yoa, bener banget kk.. kalau untuk lomba kaya gini emang bagusnya
>> pakai C++ atau C...
>> Yah, ini boleh ga si pakai IDE?? kalau boleh sih santai aja..
>> masalah getter setter dan macem2 yang lain bisa diatur laaa..
>> hehehe... :P
>>
>> --
>> Wilbert : IT UKDW 2006
>> Java Blog : http://wilbertjava.wordpress.com
>> YM : inherit_c
>>
>
>
>
> 
>
> Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL 
> PROTECTED]
>
> Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>
> Yahoo! Groups Links
>
>
>
>


Re: [JUG-Indonesia] Tanya PriorityQueue

2008-05-27 Terurut Topik Felix Halim
2008/5/28 Slamet <[EMAIL PROTECTED]>:
> Hi semua, mau tanya tentang PriorityQueue, bedanya PriorityQueue dengan
> Array biasa apa ya...?,
> maksudku, klo saya mengolah data dengan menggunakan Array biasa misal untuk
> sorting, lifo, fifo dll,
> lalu PriorityQueue sebenarnya untuk apa ya...?. Thx semua

Priority Queue digunakan untuk mengambil/menaruh element terkecil
(atau terbesar -> tergantung method compareTo nya) dengan kompleksitas
O(log(N)) dimana N adalah jumlah element di dalam Priority Queue.

Kalau kamu menggunakan array, maka untuk mengambil element terkecil,
kamu butuh O(N)  dimana semua element di array kamu cek dan return
yang paling kecil. Untuk menaruh element di array bisa O(1).

Contoh:

Kamu punya array isinya sebanyak 1,000,000 element.
Kalau kamu ingin mengambil element terkecil, maka kamu butuh looping
1,000,000 kali untuk mencarinya.

Sedangkan kalo kamu pake PriorityQueue, dan didalamnya ada 1,000,000 element.
Maka untuk mengambil element terkecil hanya dibutuhkan maksimum
log(1,000,000) == 20 kali looping.

Jelas banget kan perbedaannya?

Felix Halim


Re: [JUG-Indonesia] Re: Tanya PriorityQueue

2008-05-27 Terurut Topik Felix Halim
Queue dan Stack (bahkan PriorityQueue) bisa dibuat menggunakan Array biasa.

Lalu kenapa Queue gak bisa get(2) seperti yang kamu mau?
Karena memang itu dilarang, bukannya tidak bisa.

Karena konsep dari Queue adalah "ambil element terdepan dari queue".
Mana boleh ngambil orang kedua terdepan?
Kalau boleh, maka itu bukan queue lagi namanya.

Stack juga sama, hanya boleh ambil/taruh elemen di top of stack.
Gak boleh ngambil elemen ke 2 dari top.
Karena itu sengaja di-hide, dan gak ada method get(2).

Kalo kamu mau bisa ambil element dimana saja, ya pakai Array saja beres :)

Queue dan Stack itu untuk "forcing" interfacenya dan memberikan jaminan bahwa
operasi yang mungkin hanya di front of queue (poll) dan back of queue
(push) dan top of stack.

Felix Halim


2008/5/28 imam baihaqi <[EMAIL PROTECTED]>:
>
> eh bukannya beda Array sama Queue sama Stack, meskipun di C, kan
> mereka cenderung ke teori ky tipe data, bukan bahasa-based, dimana2
> seharusnya sama aja, array tuh kan [1, 2, 3, 4] kita bisa ambil
> array[2] misalnya, kl stack hrs di pop() dl dua kali baru bisa ambil
> elemen yg kedua (dimulai dari 0, tentunya), dan emang ga ada command
> stack.get[2], yg ada pop() sama push(int x),
>
> kl queue aku lupa tp kl PriorityQueue: pq.poll() sama pq.offer(int x),
> ini liat contohnya loh, dan ga da juga kayaknya pq.get[2] misalnya. tp
> ini di java liat dari contoh.
>
> kl linked list emang gitu tujuannya, ga terbatasi LIFO/FIFO, bentuknya
> [][] -> [][] -> [][], ada lg circular, yg muter, tujuannya biar lebih
> leluasa ngambil yg mana aja, nyelip kemana aja, tapi tentu
> konsekwensinya lebih susah
>
> http://imam- baihaqi.blogspot .com/2008/ 05/lets-go- lazy.html
>
> --- In jug-indonesia@yahoogroups.com, Aris Kumara P <[EMAIL PROTECTED]> wrote:
> >
> > Priority Queue itu elemennya isinya prioritas waktu. Yang punya
> highest priority dapet urutan pertama. Contoh aplikasinya adalah
> bandwidth management.
> >
> > Baca : http://en.wikipedia.org/wiki/Priority_queue
> >
> > Kalo dalam bahasa C, either Queue ato Stack bisa berupa Array ato
> Linked List.
> >
> >  Regards,
> >
> > Aris Kumara Prabhawa
>
> >
> > Send instant messages to your online friends
> http://uk.messenger.yahoo.com
> >
>
>
>
> 
>
> Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL 
> PROTECTED]
>
> Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>
> Yahoo! Groups Links
>
>
>


[JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
Contoh code C/C++ untuk melakukan puts sebanyak 1 juta kali:

for (int i=0; i<100; i++)
puts("felix");


Contoh code Java untuk melakukan System.out.println sebanyak 1 juta kali:

for (int i=0; i<100; i++)
System.out.printlnfelix");


Ternyata, menggunakan puts hanya membutuhkan waktu 0.055 detik.
Sedangkan menggunakan System.out.println membutuhkan waktu 10 detik.

Ada yang tahu kenapa Java bisa selambat ini?



Cara improve di Java adalah dengan menggunakan StringBuffer sebelum di println:

StringBuffer sb = new StringBuffer();
for (int i=0; i<100; i++)
sb.append("felix\n");
System.out.println(sb.toString());

Ternyata runtimenya turun drastis dari 10 detik menjadi 1.351 detik.
StringBuilder lebih cepat sedikit daripada StringBuffer, sekitar 0.430 detik.
Tetapi tetap saja itu 0.430 itu 10x lebih lambat dari 0.055 detiknya
puts (oleh C/C++).


Dan tentu saja, menggunakan StringBuffer / StringBuilder bukan solusi yang baik,
karena dia menggunakan MEMORY besar sebagai buffer.

Sedangkan puts nya C/C++ tidak perlu menampung nya di buffer
(meski internalnya mungkin ada sedikit buffer, tapi itu insignificant).


Jadi puts nya C++ boleh dikatakan MENANG TELAK daripada solusi Java
dalam bentuk apapun.

Apakah ada cara supaya Java tidak kalah setelak ini?


Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 Feris Thia <[EMAIL PROTECTED]>:
> Code gue ini lulus ga ? => http://pastebin.com/m4f36f681

Yup code kamu keliatannya kencang :)

Solusi PrintWriter lebih cepat daripada StringBuilder, runtimenya 0.321 seconds.
Tetapi keliahatannya PrintWriter harus manage buffernya sendiri yah.

Saya coba BufferedWriter lebih cepat sedikit, runtimenya 0.246 seconds.

Kelihatannya sampai saat ini solusi tercepat adalah menggunakan BufferedWriter.
Codenya sebagai berikut:


BufferedWriter bw = new BufferedWriter(new 
OutputStreamWriter(System.out));
for (int i=0; i<100; i++)
bw.write("felix\n");


Internal buffernya saya tidak tahu sebesar apa, tapi harusnya cukup
memory efisien.

Runtime terbaiknya Java (sampai saat ini) masih lebih lamban 4.4 kali
daripada puts nya C/C++.
Tapi saya kira ini sudah cukup bagus.

Hal yang sama berlaku untuk baca input.
Menggunakan BufferedReader jauh lebih cepat dari pada langsung
menggunakan Scanner.

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 Jecki Sumargo <[EMAIL PROTECTED]>:
> Pertama, karena platform java itu managed environment maka pada saat
> startup banyak aspek yang disiapkan oleh JVM. Untuk detailnya sendiri
> saya tidak begitu jelas, tapi kira2 di gambaran saya dia harus siapkan
> table reference object, spawn thread baru untuk garbage collector
> (CMMIIW). Ini pastinya menjadi overhead setiap program java.

Betul, tapi 10 detik lebih lambat itu pasti ada apa2nya.
Dan terjadi pada hal yang trivial seperti System.out.println bukanlah
sesuatu yang bisa di-ignore begitu saja.


> Kedua, karena java bermain dengan bytecode maka perlu ada translasi
> dari bytecode untuk menjadi native code. Jelas saja ini berarti ada
> overhead untuk setiap eksekusi kode program. Untuk itu muncul optimasi
> Just In Time compiler, di mana JVM akan menganalisa code yang sering
> dieksekusi (misal: 1 kali eksekusi) dan melakukan optimasi, di
> antaranya dengan menyimpan native code dari bytecode tersebut sehingga
> tidak perlu ada overhead untuk translasi lagi. Untuk hal ini ada
> pilihan tuning yg bisa dilakukan.


Tuning apakah yang bisa digunakan untuk mempercepat I/O seperti problem diatas?



> IMO dalam hal ini java tidak bisa dibandingkan dengan C/C++. Target
> pengguna platformnya sendiri jelas berbeda. Java ditujukan untuk
> memudahkan pembuatan program yang agar programmer misalnya tidak perlu
> repot dengan memory management.


Betul, tetapi sejauh apakah Java bisa melambat karenanya?
Dan teknik apa sajakah yang bisa kita lakukan untuk mempercepatnya?
Itu yang sekarang lagi saya bahas :)


> Sedangkan C/C++ lebih untuk problem
> yang low level atau yang butuh keuntungan (kecepatan) dari native
> binary misalnya driver, DLL library, game programming, real time
> programming. Meskipun bisa saja kita melihat Java dipakai untuk game
> programming dan program enterprise dibuat dengan C/C++.

+1

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
Penggunaan 10 threads untuk output masing2 100,000 baris tidak lebih
cepat dari single thread.

Err.. tujuan saya ini untuk mencari tahu apa yang membuat puts begitu
cepat (4.4 kali dari System.out.println nya Java)
Java gak boleh maen licik pake multi-threading donk :P hehe.

Felix Halim


2008/6/2 Feris Thia <[EMAIL PROTECTED]>:
> Wow.. belum tidur?
>
> Sama dong... hehehe
>
> O iya, pakai thread boleh ga ? kalau boleh, ini ada code saya berikut.. coba
> gabungkan dengan code kamu.. mungkin bisa lebih kencang lagi ? ;)
>
> =
> package test.io;
>
> public class JajalIO {
> public static void main(String[] args) {
> for(int i=1;i<=10;i++)
> {
> ConsumeThread.getThread(10).start();
> }
>   }
> }
> =
> package test.io;
>
> import java.io.PrintWriter;
>
> public class ConsumeThread extends Thread {
> int mycounter;
> int batas;
> PrintWriter out;
>
> private ConsumeThread(int c)
> {
> out = new PrintWriter(System.out);
> batas = c;
> mycounter=0;
> }
>
> public void run()
> {
> while(mycounter mycounter++;
> out.write("Felix\n",0,6);
> if(mycounter==500) out.flush();
> }
> if(mycounter>(batas-500)) out.flush();
> }
>
> public static ConsumeThread getThread(int c)
> {
> return new ConsumeThread(c);
> }
> }
>
>
> 2008/6/1 Felix Halim <[EMAIL PROTECTED]>:
>>
>
>
>
> --
> Thanks & Best Regards,
>
> Feris
> PT. Putera Handal Indotama
> A Business Intelligence Company
> Jl. K.H. Moh Mansyur No. 11 B 8 - 12
> Jakarta - Indonesia
> Phone : +6221-30119353
> Fax : +6221-5513483
> Mobile : +628176-474-525
> http://business-intelligence.phi-integration.com
> http://blog.komputasiawan.com 


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 imam baihaqi <[EMAIL PROTECTED]>:
> kl pake printf gmn? ga pake puts, soalnya aku pikir sysout.println tuh
> identiknya sama printf bukan puts kl di c, kl di pascal identiknya
> sama println

Println harusnya identik dengan puts karena mereka berdua tidak
menggunakan "formatting".
Jadi secara logika, puts harusnya lebih kencang daripada printf karena
puts tidak perlu "formatting output".

Ketika saya coba ubah C/C++ code dari puts("felix") jadi
printf("felix\n"), code C/C++ melamban menjadi 0.220 secs!
Versi Java yang menggunakan BufferedWriter berjalan sekitar 0.263 secs.

Dengan demikian saya pikir System.out.println nya java menggunakan
printf nya C/C++, bukan puts.
Overheadnya sekitar 0.063 seconds untuk 1 juta kali operations.

Jadi, kalo mengasumsi Java menggunakan printf bukan puts (dalam
implementasi JVM nya).
Maka Java sekarang cuma 1.19 kali lebih lambat dari C/C++ (untuk 1
juta kali operations).

Hore, gap I/O di Java mulai mendekati C/C++.

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 sm96 <[EMAIL PROTECTED]>:
> ini bukan cara sebanding buat kalah-kalahan
> java dibikin bagus bisa, dibikin ancur juga bisa
> c/c++ juga demikian

Kenapa tidak sebanding? println dan puts secara logika equivalent kok.
Kenapa di Java begitu lambat?

Java lebih gampang hancur daripada C/C++ (dalam soal performance).

Contoh, tadi saya barusan nge-test C/C++ puts diganti jadi printf,
kecepatannya melamban dari 0.055 menjadi 0.220 secs.
Tetapi setelah saya nyalakan compiler optimization -O3,
code printf nya jadi kenceng lagi seperti code puts, yaitu 0.055.

Mungkin compiler optimization nya C/C++ bisa ubah printf menjadi puts
where applicable.


Sedangkan di Java, mana bisa compiler optimizationnya ngubah dari
System.out.println menjadi pake BufferedWriter ?

Jadi di Java performance optimizationnya saya kira masih perlu ditingkatkan.


2008/6/2 sm96 <[EMAIL PROTECTED]>:
> 2008/6/2 Sukma Agung Verdianto <[EMAIL PROTECTED]>:
> > Jadi penasaran... tadi coba pake
> >
> > - System.out.print("felix\n");
> > sama
> > - System.out. println("felix");
>
> berawal dari paradigma yg berbeda, tidak bisa asal diuji dengan sembarang 
> cara.

Jadi kamu menerima apa adanya bahwa Java lambat?
Jika tidak, coba tolong kasih "cara yang tidak sembarangan" untuk
menguji paradigma berbeda ini.
Diatas, kenapa kamu mengatakan kalo membandingkan:

System.out.print("felix\n")

dengan

System.out. println("felix")

adalah "cara yang sembarangan"?

(itu lho yang saya tangkep, kalau salah mohon di-koreksi).

Felix Halim


Re: [JUG-Indonesia] puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 Ilhamsyah Edwar <[EMAIL PROTECTED]>:
> Sudah coba pake parameter -server pada saat run?
> # java -server class

Saya coba command diatas keluarnya:

Error: no `server' JVM at `C:\PROGRA~1\Java\JRE16~2.0_0\bin\server\jvm.dll'.

Mungkin ini cocok untuk membuka thread baru untuk membahas:
apa keuntungan -server dibanding tidak pakai.


> Kalo mau lebih cepet lagi, coba pake IBM JDK (versi 1.4) deh. Bisa 2x
> lebih cepat daripada C++

Saya tidak punya IBM JDK, mungkin yang punya bisa coba test kalu sempat?


Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-01 Terurut Topik Felix Halim
2008/6/2 imam baihaqi <[EMAIL PROTECTED]>:
> kl gitu kayaknya lebih sesuai yg dibandingin puts itu sysout.print,
> bukan sysout.println, soalnya ga pake new line, mungkin bisa lebih
> cepet lagi.

System.out.print maupun System.out.println sangat tidak disarankan
untuk dipakai ngeprint berkali-kali (dalam jumlah banyak) ke STDOUT.

Pakailah BufferedWriter, itu solusi terbaik saat ini (yang
di-diskusikan di thread ini).
Entah apakah ada solusi yang lebih cepat dari BufferedWriter.

FYI, dalam BufferedWriter, tidak ada print atau println.
Yang ada adalah write().


> oiya se, sorry2 ga merhatiin postingan ini, ternyata dah dicoba ya
> pake sysout.print, iya nih kayaknya kl mbandingin dg puts, lebih tepat
> sama sysout.print bukan sysout.println,

System.out.print lebih cepat hampir 2x dari System.out.println.

Tetapi dua-duanya itu teralu lambat kalau dibandingkan dengan puts nya C/C++.
Boleh dibilang sudah murni kalah telak.

Jadi tidak perlu lagi dibandingkan puts nya C/C++ dengan System.out.print.
Tandingannya puts nya C/C++ sekarang adalah BufferedWriter.

System.out.print teralu lambat!

Berikut summary runtime nya untuk ngeprint "felix\n" 1 juta kali:

- puts("felix") (C/C++)  = 0.055 secs
- printf("felix\n") (C/C++) = 0.220 secs (setelah pake compiler
optimization -O3, menjadi 0.055 secs)
- System.out.print (Java) = 4.484 secs
- System.out.println (Java) = 9.046 secs
- 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 1.351 secs
- 1 juta kali append di StringBuilder + 1x System.out.println (Java) =
0.430 secs
- PrintWriter (Java) = 0.321 secs
- BufferedWriter (Java) = 0.263 secs

Jadi tandingannya puts (C/C++) adalah BufferedWriter.

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
2008/6/2 Jaimy Azle <[EMAIL PROTECTED]>:
> Bukannya System.out itu defaultnya sudah menggunakan BufferedWriter
> juga? letak permasalahannya, System.out.print melakukan flush buffer
> setiap kali selesai mempassing sebuah string, sementara contoh yang
> anda buat itu, flush buffer dilakukan secara otomatis, yaitu saat
> stream di close saat object di destroy.

Betul, flushing setiap kali dipanggil adalah hal yang buruk untuk kasus ini.
Makanya code oleh Feris Thia diatas flush() nya dipanggil manual
setiap 2000x iterations.
Sedangkan BufferedWriter flush() nya tergantung buffernya sudah penuh
atau belum.

Apakah anda yakin System.out menggunakan BufferedWriter? Tolong di cek lagi.
Saya lihat source code System.out nya di java.lang.System itu classnya
adalah PrintStream
bukan BufferedWriter (meskipun PrintStream menggunakan buffer juga).

BufferedWriter yang saya maksud adalah java.io.BufferedWriter
Bukan sekedar writer yang di buffer loh :P

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
RALAT!

Java NIO tidak secepat ini.
Saya lupa panggil close() :P

Ternyata setelah dipanggil close, menjadi 0.784 detik !!

Solusi Terbaik masih BufferedWriter !!!

Sorry False Alarm!

Felix Halim

2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
> 2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
>> Berikut summary runtime nya untuk ngeprint "felix\n" 1 juta kali:
>>
>> - puts("felix") (C/C++)  = 0.055 secs
>> - printf("felix\n") (C/C++) = 0.220 secs (setelah pake compiler
>> optimization -O3, menjadi 0.055 secs)
>> - System.out.print (Java) = 4.484 secs
>> - System.out.println (Java) = 9.046 secs
>> - 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 1.351 
>> secs
>> - 1 juta kali append di StringBuilder + 1x System.out.println (Java) =
>> 0.430 secs
>> - PrintWriter (Java) = 0.321 secs
>> - BufferedWriter (Java) = 0.263 secs
>>
>> Jadi tandingannya puts (C/C++) adalah BufferedWriter.
>
> Saya barusan mencoba dengan java.nio dan hasilnya 3.460 kali lebih cepat!
> Dengan java.nio, untuk nge print "felix\n" 1 juta kali runtimenya
> adalah 0.076 secs (semua di komputer yang sama).
>
> Code nya sebagai berikut:
>
>FileOutputStream fout = new FileOutputStream("speednio.out");
>FileChannel fc = fout.getChannel();
>ByteBuffer buffer = ByteBuffer.allocate(6);
>
>byte[] msg = "felix\n".getBytes();
>for (int i=0; i<100; i++){
>buffer.clear();
>for (int j=0; j<1; j++) buffer.put(msg);
>buffer.flip();
>fc.write(buffer);
>}
>
>
> Dengan demikian, perbedaan antara puts C/C++ dengan java.nio hampir
> tidak significant.
> Hanya 0.055 berbanding 0.076.
>
> Bahkan kalau di komputer lain, saya mendapatkan puts vs. java.nio
> adalah 0.054 banding 0.044.
> Disini java.nio lebih cepat 0.010 seconds!
> Jadi keunggulan masing-masing sudah tidak significant lagi!
>
> Hidup Java NIO !
>
> Untuk yang ingin tahu kenapa java.nio bisa secepat itu, bisa liat
> tutorial dari IBM:
>
> http://www.cs.brown.edu/courses/cs161/papers/j-nio-ltr.pdf
>
> Jawabannya adalah Java NIO memprocess I/O dalam "blocks" instead of "stream".
>
> Ternyata ada titik terang dalam hal I/O di Java :D
>
> Dengan demikian, Logger2 di Java harusnya pakai Java NIO juga.
> Setidaknya harus pakai BufferedWriter.
> Kalau masih liat Logger2 pakai System.out.println, tertawakan saja :P
>
> Felix Halim
>


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
FileOutputStream fout = new FileOutputStream("speednio.out");
FileChannel fc = fout.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(6000);

byte[] msg = "felix\n".getBytes();
for (int i=0; i<1000; i++){
buffer.clear();
for (int j=0; j<1000; j++) buffer.put(msg);
buffer.flip();
fc.write(buffer);
}

fout.close(); // kalau tidak dipanggil, maka curang

// Karena bisa saja di line ini si Java masih nulis nulis di background 
:P
// Kalo kita close, baru tahu penulisannya bener2 selesai semua

Yang puts di C/C++ juga musti di test ulang...
Karena bisa jadi puts() itu nulis ke buffer, lalu buffernya di flush
di background.
Kalau kita catet waktunya pas puts() return itu akan misleading pula.

Bentar saya benchmark ulang semua...

Felix Halim


2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
> RALAT!
>
> Java NIO tidak secepat ini.
> Saya lupa panggil close() :P
>
> Ternyata setelah dipanggil close, menjadi 0.784 detik !!
>
> Solusi Terbaik masih BufferedWriter !!!
>
> Sorry False Alarm!
>
> Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
> Berikut summary runtime nya untuk ngeprint "felix\n" 1 juta kali:
>
> - puts("felix") (C/C++)  = 0.055 secs
> - printf("felix\n") (C/C++) = 0.220 secs (setelah pake compiler
> optimization -O3, menjadi 0.055 secs)
> - System.out.print (Java) = 4.484 secs
> - System.out.println (Java) = 9.046 secs
> - 1 juta kali append di StringBuffer + 1x System.out.println (Java) = 1.351 
> secs
> - 1 juta kali append di StringBuilder + 1x System.out.println (Java) =
> 0.430 secs
> - PrintWriter (Java) = 0.321 secs
> - BufferedWriter (Java) = 0.263 secs
>
> Jadi tandingannya puts (C/C++) adalah BufferedWriter.

Saya barusan mencoba dengan java.nio dan hasilnya 3.460 kali lebih cepat!
Dengan java.nio, untuk nge print "felix\n" 1 juta kali runtimenya
adalah 0.076 secs (semua di komputer yang sama).

Code nya sebagai berikut:

FileOutputStream fout = new FileOutputStream("speednio.out");
FileChannel fc = fout.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(6);

byte[] msg = "felix\n".getBytes();
for (int i=0; i<100; i++){
buffer.clear();
for (int j=0; j<1; j++) buffer.put(msg);
buffer.flip();
fc.write(buffer);
}


Dengan demikian, perbedaan antara puts C/C++ dengan java.nio hampir
tidak significant.
Hanya 0.055 berbanding 0.076.

Bahkan kalau di komputer lain, saya mendapatkan puts vs. java.nio
adalah 0.054 banding 0.044.
Disini java.nio lebih cepat 0.010 seconds!
Jadi keunggulan masing-masing sudah tidak significant lagi!

Hidup Java NIO !

Untuk yang ingin tahu kenapa java.nio bisa secepat itu, bisa liat
tutorial dari IBM:

http://www.cs.brown.edu/courses/cs161/papers/j-nio-ltr.pdf

Jawabannya adalah Java NIO memprocess I/O dalam "blocks" instead of "stream".

Ternyata ada titik terang dalam hal I/O di Java :D

Dengan demikian, Logger2 di Java harusnya pakai Java NIO juga.
Setidaknya harus pakai BufferedWriter.
Kalau masih liat Logger2 pakai System.out.println, tertawakan saja :P

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
2008/6/2 Jaimy Azle <[EMAIL PROTECTED]>:
> On Monday, June 2, 2008, 2:31:26 PM, Felix Halim wrote:
>> Apakah anda yakin System.out menggunakan BufferedWriter? Tolong di cek lagi.
>> Saya lihat source code System.out nya di java.lang.System itu classnya
>> adalah PrintStream bukan BufferedWriter (meskipun PrintStream
>> menggunakan buffer juga).
>
> positive. kalau anda juga lihat source code-nya, hal itu bisa anda
> temukan di bagian initialisasi.
>
>  private void init(OutputStreamWriter osw) {
>this.charOut = osw;
>this.textOut = new BufferedWriter(osw);
>  }
>
> Jadi pada dasarnya sama saja, permasalahannya cuma ada di flushBuffer.


Saya tidak yakin 100% positive.



Kalau anda lihat source di java.lang.System, sepertinya System.out
tidak di-inisialisasi oleh PrintStream instance secara langsung:

public final static PrintStream out = nullPrintStream();

System.out ternyata di-init dengan null pada awalnya.
But HEY! itu kan "final" ? berarti System.out itu selamanya adalah null?
Tidak juga... kalau kita lihat lagi, ternyata System.out itu bakal di
init ditempat lain.
Lihat comment dari nullInputStream():

/**
 * The following two methods exist because in, out, and err must be
 * initialized to null.  The compiler, however, cannot be permitted to
 * inline access to them, since they are later set to more sensible values
 * by initializeSystemClass().
 */
private static InputStream nullInputStream() throws NullPointerException

Ternyata System.out itu di set oleh method initializeSystemClass() nantinya.

Kalau kita telusuri, ternyata ada baris:

setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));

Yang sepertinya bakal nge set System.out

Nah, disini object PrintStream dibuat, dan tentu saja (seperti yang
anda katakan)
constructor itu akan nge wrap lagi dengan BufferedWriter (saya setuju).

Tetapi, method setOut0 sepertinya adalah NATIVE code:

private static native void setOut0(PrintStream out);

Nah, disini yang saya ragu.
Entah apa yang dilakukan si Native code itu?
Apakah anda yakin BufferedWriter akan tetap dipakai?
Atau bakal direplace oleh Native code nantinya?

Observasi ke-2 adalah :

setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));

Length 128 itu apakah penyebabnya? 128 saya kira teralu kecil buffernya?
Sehingga flushnya juga kebanyakan nantinya...
Sekali lagi, ini kalau memang object ini tidak direplace oleh Native code.

Ada yang tahu apa yang dilakukan si native code terhadap object
PrintStream diatas?

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
Berikut adalah updated summary dari runtime untuk 1 juta kali print "felix\n".
Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang sama.

- C/C++ fputs("felix") = 0.055 secs
- C/C++ fprintf("felix\n") = 0.055 secs (gak beda pake -O3)
- Java System.out.print("felix\n") = 5.227 secs
- Java System.out.println("felix") = 9.774 secs
- Java 1 juta kali append di StringBuffer + 1x System.out.println
(Java) = 0.273 secs
- Java 1 juta kali append di StringBuilder + 1x System.out.println
(Java) = 0.220 secs
- Java PrintWriter = 0.218 secs
- Java BufferedWriter = 0.186 secs
- Java NIO = 0.857 secs


Java NIO dalam hal ini malah lebih lambat.
Mungkin saya masih blum bisa memakai Java NIO dengan benar...
Berikut code Java NIO nya (sama sih sama sebelumnya).
Saya sudah tune untuk loop i dan j, yang terbaik adalah 100 x 1.


FileOutputStream fout = new FileOutputStream("speednio.out");
FileChannel fc = fout.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(6);

byte[] msg = "felix\n".getBytes();
for (int i=0; i<100; i++){
buffer.clear();
for (int j=0; j<1; j++) buffer.put(msg);
buffer.flip();
fc.write(buffer);
}

fout.close();


Solusi terbaik masih BufferedWriter :D
Yang roughly 3-4 kali lebih lambat dari puts.

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-02 Terurut Topik Felix Halim
Berikut adalah updated summary dari runtime untuk 1 juta kali print "felix\n".
Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang sama.

- C/C++ fputs("felix") = 0.055 secs
- C/C++ fprintf("felix\n") = 0.055 secs (gak beda pake -O3)
- Java System.out.print("felix\n") = 5.227 secs
- Java System.out.println("felix") = 9.774 secs
- Java 1 juta kali append di StringBuffer + 1x System.out.println
(Java) = 0.273 secs
- Java 1 juta kali append di StringBuilder + 1x System.out.println
(Java) = 0.220 secs
- Java PrintWriter = 0.218 secs
- Java BufferedWriter = 0.186 secs
- Java NIO = 0.857 secs


Java NIO dalam hal ini malah lebih lambat.
Mungkin saya masih blum bisa memakai Java NIO dengan benar...
Berikut code Java NIO nya (sama sih sama sebelumnya).
Saya sudah tune untuk loop i dan j, yang terbaik adalah 100 x 1.


FileOutputStream fout = new FileOutputStream("speednio.out");
FileChannel fc = fout.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(6);

byte[] msg = "felix\n".getBytes();
for (int i=0; i<100; i++){
buffer.clear();
for (int j=0; j<1; j++) buffer.put(msg);
buffer.flip();
fc.write(buffer);
}

fout.close();


Solusi terbaik masih BufferedWriter :D
Yang roughly 3-4 kali lebih lambat dari puts.

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-04 Terurut Topik Felix Halim
2008/6/4 Samuel Franklyn <[EMAIL PROTECTED]>:
> Masukan gua sama dengan masukan Frans. Tapi mungkin akan gua
> perjelas sedikit. Micro benchmark itu tidak berguna.
> Benchmark yang kompleks macam TPC-C saja cuma sedikit berguna.

Kenapa tidak berguna? Kan bisa dijadikan panduan dalam coding?

Kalau tahu System.out.println lambatnya bisa sampai 10x lipat daripada
BufferedWriter dalam hal menulis ke STDOUT tentu akan berguna donk?


> Lalu benchmark macam apa yang berguna? Benchmark aplikasi
> anda sendiri. Kalau hari ini aplikasi anda kecepatannya 1
> lalu anda bisa optimasi sehingga kecepatannya 2 nah itu sudah
> cukup hebat. Aplikasi dunia nyata itu kompleks dan susah
> sekali di optimasi. Effort berbulan-bulan kadang cuma
> menaikkan performance 10-20%.

Benchmark project sendiri sudah merupakan keharusan kalau ingin
mengoptimize project sendiri.

Tapi "cara" meng-optimisasinya adalah dengan mengetahui banyak
micro-benchmark yang dilakukan orang2.
Lalu dicobakan ke project sendiri, lalu benchmark project sendiri
dengan yang sebelumnya.

Apakah ada cara lain selain melihat micro-benchmark yang lebih effektif?

Saya tetap berpendapat micro-benchmark sangat penting, meskipun
hasilnya tidak terlihat langsung di project besar.

Felix Halim


Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-04 Terurut Topik Felix Halim
Untuk meluruskan isi thread, saya mau cerita dikit kenapa thread ini exists.
Tanggal 1 Juni lalu itu berlangsung babak Penyisihan INC 2008.
Salah satu soal yang dikeluarkan adalah:

http://competition.binus.ac.id/inc2008/Registration/?page=Qual.pc

Para peserta bisa memilih membuat solusi menggunakan C/C++ ataupun Java.
Berikut adalah pembahasan solusi soal tersebut:

http://competition.binus.ac.id/inc2008/Registration/?page=Qual.c

Bagi yang menggunakan Java + System.out.println murni akan selalu dapat TLE
meskipun algoritma yang dipakai sudah benar dan tanpa bug.

Solusi yang algoritmanya sama percis,
Di C++ berjalan dalam kurang dari 1 detik,
Di Java berjalan > 10 detik.
Sedangkan time-limit dari soal adalah 5 detik.
Solusi Java tidak mungkin lolos, kecuali menggunakan BufferedWriter
atau sejenisnya.
Di soal ini, I/O adalah bottle-neck karena mostly I/O bound.
Agak kurang fair kan kalau disalahkan (dapet TLE) gara2 pake
System.out.println? (Bisa ngamuk pesertanya)

Karena masalah inilah saya ciptakan thread ini.
Bagaimana mempercepat I/O untuk Java? Apakah tidak ada yang lebih
cepat dari BufferedWriter?
Setelah menggunakan BufferedWriterpun solusi Java tetap 3-4 kali lebih lambat.


OK, anggap lah ini suatu project besar, lalu saya profile hasilnya
sebagai berikut:

1% Business Logic
99% Read/Write to file

(ini cuman kasarnya aja, gak pake profiler beneran)

Jadi sekarang urusan micro-benchmark ini adalah masalah utama dari project.

This is the chosen battle.

Dan tidak boleh ada trik psikologis apapun disini.
Juri hanya melihat "runtime" program-nya lebih dari 5 second ato tidak.
Gak peduli disana ada progress bar atau tidak :P


Jadi, untuk post berikutnya tolong di fokuskan ke arah BufferedWriter atau
pemakaian Java NIO yang benar untuk speedup I/O.

Thanks,


Felix Halim


Re: [JUG-Indonesia] [Challenge] String to double conversion

2008-06-04 Terurut Topik Felix Halim
2008/6/4 T Budi S <[EMAIL PROTECTED]>:
> Dear juggers,
>
> Mumpung lg hot2nya bahas thread puts vs System.out.println,
> gw ada 1 challenge utk optimize string to double conversion method
> dari class java.lang.Double:
>
>public static Double valueOf(double d)
>
> Kenapa gw butuh utk optimize ini? Krn di project yg sedang gw kerjakan
> skr, method valueOf memakan 90% ! process time dr keseluruhan process.

Kamu gunakan NetBeans Profiler untuk dapetin angka 90%?


> FYI, data yg dibaca sekitar 10 ribu (nantinya akan jadi ratusan ribu),
> setiap row terdiri dari 8 column, di mana setiap column-nya berisi
> data seperti ini:
>
> 13.4375:17.1875:22.5:22.8125:23.4375:3:5:4:3:3:3:5:5:3:4:4:5:3:2:6:2:5:3:6:4:2:5:6:3:5:3:2:7:6:5:2:3:6:5:5:2:4:6:4:6:5:3:4:5:3:3:3:5:6:5:2:2:6:7:5:1:3:4:7:6:4:2:1:5:4:3:3:4:5:6:3:1:6:3:5:1:4:2:3:3:3.5:3.75:3.75:4:3.75:3:3.25:5.25:5:5:2.75:2.75:5.25:4.25:5.25:1.5:4:3.75:5:4.75:3:5:3.75:3.5:4.25:2.25:3.5:6.25:4.5:5.25:2.75:2.75:4.75:6.25:4.75:2.75:2.5:3.25:4:4.5:2.75:4.25:5.5:3.75:4.25:2.5:4.25:4.5:4.25:5.25:3.75:2.75:3.5
>
> Waktu yg dibutuhkan utk meload semua data ini adalah 4547 ms.
>
> Kemudian saya mencoba utk menggantikan Double.valueOf method
> dgn method bikinan saya sendiri, & mendapatkan hasil 3718 ms.
>
> Code-nya adalah sbb:
>
> ==
> public class ConversionHelper
> {
>
>public static double stringToDouble(String s)
>...


Challenge +50 :

System.out.println(ConversionHelper.stringToDouble("-540384.3947"));

Overflow tuch...

Kalau menurut saya, String to Double nya Java sudah cukup kencang.

Untuk 1 juta kali conversion:
Versi C nya pake atof juga 100 msecs.
Versi Java nya saya coba 157 msecs.

Jadi tidak "significant" dan tidak perlu di improve menurut saya.
Malah ntar nge-bug iyah :P


Anyway, kalo tetep mau improve juga, coba kamu buang method pow() nya.
Itu jelas boros panggil function melulu, jadiin kayak gini aja:


public static double stringToDoubleFH(String s){
double ret = 0, div = 1;
int i = 0;

if (s.charAt(i)=='-'){
div = -1;
i++;
}

for (; i

Re: [JUG-Indonesia] Re: puts nya C/C++ vs. System.out.println nya Java (Result: Java kalah telak!)

2008-06-04 Terurut Topik Felix Halim
Setelah saya naikkan jumlah iterasinya jadi 10 juta kali, Java dan
C/C++ sudah tidak berbeda!

C/C++ puts : 2.518726 secs (system time)
Java BufferedWriter : 2.473039172 secs (system time)

Code untuk benchmarknya saya attach.
Silahkan dicoba sendiri.

Conclusionnya:

Pakailah BufferedWriter untuk tulis ke STDOUT jika ingin print
dalam jumlah banyak.

Setidaknya sekarang kita sudah boleh tenang memakai BufferedWriter.
Kecepatannya menyaingi puts nya C/C++ kok.

Thread ini sudah boleh ditutup :D
Thanks buat semua yang udah kasih masukkan.

Felix Halim


2008/6/2 Felix Halim <[EMAIL PROTECTED]>:
> Berikut adalah updated summary dari runtime untuk 1 juta kali print "felix\n".
> Komputer yang saya gunakan sekarang beda, tapi semua runs dicomputer yang 
> sama.
>
> - C/C++ fputs("felix") = 0.055 secs
> - C/C++ fprintf("felix\n") = 0.055 secs (gak beda pake -O3)
> - Java System.out.print("felix\n") = 5.227 secs
> - Java System.out.println("felix") = 9.774 secs
> - Java 1 juta kali append di StringBuffer + 1x System.out.println
> (Java) = 0.273 secs
> - Java 1 juta kali append di StringBuilder + 1x System.out.println
> (Java) = 0.220 secs
> - Java PrintWriter = 0.218 secs
> - Java BufferedWriter = 0.186 secs
> - Java NIO = 0.857 secs
>
>
> Java NIO dalam hal ini malah lebih lambat.
> Mungkin saya masih blum bisa memakai Java NIO dengan benar...
> Berikut code Java NIO nya (sama sih sama sebelumnya).
> Saya sudah tune untuk loop i dan j, yang terbaik adalah 100 x 1.
>
>
>FileOutputStream fout = new FileOutputStream("speednio.out");
>FileChannel fc = fout.getChannel();
>ByteBuffer buffer = ByteBuffer.allocate(6);
>
>byte[] msg = "felix\n".getBytes();
>for (int i=0; i<100; i++){
>buffer.clear();
>for (int j=0; j<1; j++) buffer.put(msg);
>buffer.flip();
>        fc.write(buffer);
>}
>
>fout.close();
>
>
> Solusi terbaik masih BufferedWriter :D
> Yang roughly 3-4 kali lebih lambat dari puts.
>
> Felix Halim
>


test.cpp
Description: Binary data


test.java
Description: Binary data


Re: [JUG-Indonesia] [Challenge] String to double conversion

2008-06-04 Terurut Topik Felix Halim
Untuk yang lain yang ingin melakukan micro-benchmark, kalau bisa
test-casesnya di-random.
Jangan hanya menggunakan single value seperti:  "-12.3456"
Hasilnya akan sangat bias dan tidak akurat.

Untuk T.Budi, saya bikinin testcases random nya.
Kamu bisa benchmark menggunakan itu, hasilnya harusnya lebih applicable.

Dan, berdasarkan pengalaman benchmark sebelumnya (puts vs. println),
Jumlah testcasesnya harus cukup besar sehingga runtimenya adalah hitungan
DETIK.
Kalau masih ukuran milliseconds masih blum bisa dianggap akurat! (masih bias
dengan overhead aneh2).

Saat ini hasilnya seperti ini:

Double.parseDouble  = 1.120404 secs
Double.valueOf  = 1.146029 secs
stringToDouble  = 0.502698 secs
stringToDoubleFH= 0.467788 secs

Double.valueOf itu consistently lebih lambat daripada toDouble bikinan
sendiri...
Entah kenapa itu... ada yang tahu?

Kalau menurut saya, mungkin saja ada pengecekan lain yang membuat
Double.valueOf lambat.
Entah pengecekan lain itu critical atau tidak (demi precision)?

Felix Halim


ToDouble.java
Description: Binary data


Re: [JUG-Indonesia] [Challenge] String to double conversion

2008-06-04 Terurut Topik Felix Halim
FYI, untuk nge run code barusan, harus set -Xmx256m otw bakal kena heap
space exception.

Trus, tentang kenapa Double.valueOf bisa lebih lambat itu mungkin karena
Double.valueOf lebih flexible:

Double.valueOf bisa terima input dalam berbagai macam format:

System.out.println(Double.valueOf("1e-2"));
System.out.println(Double.valueOf("1.282e-2"));
System.out.println(Double.valueOf("38282.11717e-7"));
System.out.println(Double.valueOf("38282.11717e7"));

System.out.println(Double.valueOf("238476239487623324234234.1231231231243324234234E-19"));

Gak heran jalannya lebih lambat, pasti banyak pengecekan di dalamnya.

Felix Halim

2008/6/4 Felix Halim <[EMAIL PROTECTED]>:

> Untuk yang lain yang ingin melakukan micro-benchmark, kalau bisa
> test-casesnya di-random.
> Jangan hanya menggunakan single value seperti:  "-12.3456"
> Hasilnya akan sangat bias dan tidak akurat.
>
> Untuk T.Budi, saya bikinin testcases random nya.
> Kamu bisa benchmark menggunakan itu, hasilnya harusnya lebih applicable.
>
> Dan, berdasarkan pengalaman benchmark sebelumnya (puts vs. println),
> Jumlah testcasesnya harus cukup besar sehingga runtimenya adalah hitungan
> DETIK.
> Kalau masih ukuran milliseconds masih blum bisa dianggap akurat! (masih
> bias dengan overhead aneh2).
>
> Saat ini hasilnya seperti ini:
>
> Double.parseDouble  = 1.120404 secs
> Double.valueOf  = 1.146029 secs
> stringToDouble  = 0.502698 secs
> stringToDoubleFH= 0.467788 secs
>
> Double.valueOf itu consistently lebih lambat daripada toDouble bikinan
> sendiri...
> Entah kenapa itu... ada yang tahu?
>
> Kalau menurut saya, mungkin saja ada pengecekan lain yang membuat
> Double.valueOf lambat.
> Entah pengecekan lain itu critical atau tidak (demi precision)?
>
> Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
Cara itu terkenal dengan nama Dynamic Programming.

Kalo tertarik bikin code2 menarik, itu ladangnya ada di Programming Contest.

Ini ada problem yang lebih menantang:

Diberikan array of integer A (0-based index).
Saya ingin mencari bilangan integer terkecil di array A dengan index
antara [i, j] (inclusive).
Jawabannya harus dalam O ( log N )

Jelas kalo looping dari i sampai j itu gak boleh karena itu O ( N ).
Ada yang bisa?

Kalau tertarik soal2 seperti itu, anda harusnya masuk Programming Contest.

FYI, Google suka orang2 yang tahu banyak algorithms ;)
Makanya Google ngadain "Google Code Jam" tiap tahun.

Milis yang membahas Programming Contest di indo itu:

http://groups.yahoo.com/group/indo-algo

Tapi sepi nih... disini malah seru :D, bener2 aneh...

Felix Halim


On Fri, Jun 6, 2008 at 4:57 PM, Jecki Sumargo <[EMAIL PROTECTED]> wrote:
> On Fri, Jun 6, 2008 at 3:16 PM, naray citra <[EMAIL PROTECTED]> wrote:
>> Gw dapet cuplikan kode menarik neh, untuk share aja, sapa tau ada yang butuh
>> :D
>> sumber : http://linkmingle.com/details/865
>>
>> There is an array A[N+1] of N integers. You have to compose an array
>> Output[N+1] such that Output[i] will be equal to the productof all the
>> elements of A[] except A[i].
>> Example:
>> INPUT:[4, 3, 2, 1, 2]
>> OUTPUT:[12, 16, 24, 48, 24]
>>
>> Solve it without division operator and in O(n) with out using division
>>
>> import java.util.Arrays;
>>
>> public class PArray {
>>
>> public int[] PSub(int[] inp){
>>  int[] out = new int[inp.length];
>>  out[0]=1;out[1]=inp[0];
>>  for (int i = 2; i >  out[i] = inp[i-1]*out[i-1];
>>  int P = 1;
>>  for(int i=inp.length-2;i>=0;i--){
>>  P*=inp[i+1];
>>  out[i]=out[i]*P;
>>  }
>>   return out;
>> }
>> public static void main(String[] args) {
>> PArray pArray = new PArray();
>> int in[] = new int[]{4,3,2,1,2};
>> System.out.println("INPUT:"+
>> Arrays.toString(in));
>> System.out.println("OUTPUT:"+
>> Arrays.toString(pArray.PSub(in)));
>> }
>> }
>>
>
> Wah ini hasilnya O(n) ato ga ya? Dilihat2 sepertinya ini O(n^2)
> soalnya ada inner loop yg jumlahnya mendekati n. CMIIW.
>
> Seru juga. Masih blom ketemu caranya nih :)
>
> 
>
> Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL 
> PROTECTED]
>
> Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>
> Yahoo! Groups Links
>
>
>
>


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/6 Feris Thia <[EMAIL PROTECTED]>:
> O(log N) artinya apa Felix ?
>
> Maksudnya dengan N = 10, looping harus cuma log 10 = 1 ?

Betul, tapi base dari log ini bisa berapapun karena base nya itu
dianggep constant.
Biasanya yang terpakai paling sering adalah log dengan basis 2.

Jadi untuk N = 1 juta, cuma perlu sekitar 20 steps sudah dapat.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/6 Felix Halim <[EMAIL PROTECTED]>:
> Diberikan array of integer A (0-based index).
> Saya ingin mencari bilangan integer terkecil di array A dengan index
> antara [i, j] (inclusive).
> Jawabannya harus dalam O ( log N )

FYI, datanya boleh di preprocess dulu.
Tapi preprocessnya gak boleh O(N^2).

Contoh: kalo datanya di sort dulu, itu boleh.
Berarti preprocessing timenya O(N log N).

Tapi ingat, setelah di sort, index awalnya jadi berantakan.
Jadi range [i, j] nya harus disesuaikan juga supaya tetap benar.


2008/6/6 sm96 <[EMAIL PROTECTED]>:
> Kalau nyari angka terkecil, harus O(log n), berarti pake cara yg sama seperti
> binary search

Solusinya jauh lebih kompleks daripada sekedar binary search.
Datanya harus di-preprocess dahulu untuk mendapatkan structure data tertentu.
Lalu baru bisa di query untuk angka terkecil antara index [i, j] inclusive.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/6 Danny <[EMAIL PROTECTED]>:
> Apakah data awalnya acak..?, misal A={5,2,4,1,3}, trus disuruh cari data
> terkecil.

Betul, A itu awalnya isinya acak.


> Klo datanya blh disort dulu, bukannya
> udah bs langsung ditemukan hasilnya, dengan mengambil
> index ke 0...?, dengan asumsi Big O dari sortingnya ga diperhitungkan.
>
> "... setelah di sort, index awalnya jadi berantakan.
> Jadi range [i, j] nya harus disesuaikan juga supaya tetap benar.."

Contoh A = [ 5, 7, 3, 4, 1, 8 ]

Artinya:
index ke 0 valuenya adalah 5
index ke 1 valuenya adalah 7
index ke 2 valuenya adalah 3
index ke 3 valuenya adalah 4
index ke 4 valuenya adalah 1
index ke 5 valuenya adalah 8

Kalau saya mau cari bilangan terkecil yang berada di index antara 0
sampai 3 (inclusive -> [0, 3]),
maka jawabannya adalah 3 (dengan index 2).

Kalau kamu sort dulu arraynya:

A = [ 1, 3, 4, 5, 7, 8 ]

Maka index 0 valuenya bukan lagi 5 tapi valuenya menjadi 1.
Maka index 1 valuenya bukan lagi 7 tapi valuenya menjadi 3.
dan seterusnya...
Inilah yang saya maksud berantakan.

Jadi kalau saya ingin mencari bilangan terkecil yang berada di index
antara 0 sampai 3, hasilnya akan salah.
Dalam hal ini, kamu akan bilang hasilnya adalah 1 (di index 0).

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/7 Hendry <[EMAIL PROTECTED]>:
> Kenapa tidak hanya sort data yang ada dr indeks 0 sampai 3 saja? SOL

Saya sudah tunggu pertanyaan ini :D

Kalau anda sort dari 0 sampai 3, maka tiap kali saya query [i, j] anda
akan melakukan sort.
Solusi anda adalah O ( N log N )

Itu lebih parah daripada linear scan dari i ke j, dan cari yang minimum O ( N ).

Yang saya mau adalah preprocess 1x, dengan complexity maximum O ( N log N )
Lalu untuk setiap query [ i, j ] bisa di jawab hanya dengan O ( log N ).

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/7 Hendry <[EMAIL PROTECTED]>:
> Kalau membaca soal berikut, asumsi saya, array of integer A tersebut
> adalah selalu data yang baru, dan kita diminta mencari bilangan
> integer terkecil. Kalau permintaan nya membuat algoritma ataupun
> function yang selalu ready menerima data baru, mem preprocess data,
> lalu the next step selalu menggunakan data yang sudah di preprocess,
> bukankah itu sudah mem bypass satu step algoritma dari soal tersebut?
> CMIIW

Array A itu fixed dengan jumlah element N.
Saya mempunyai banyak queries:
   cari bilangan terkecil antara index i dan index j (inclusive).

Jadi meskipun array A itu acak, tapi array A tidak pernah berubah.
Dan array A yang sama ini akan di query terus menerus.
Otomatis kita harus buat query ini efisien donk?
Nah, algo linearnya kan itu scan dari i ke j, cari yang minimum, lalu print.
Tapi algo itu O ( N ) jalannya.

Pertanyaanya, bisakah kita "preprocess" array A ini sedemikian sehingga
setiap query [i, j] bisa diprocess hanya dengan O ( log N ).

Tetapi one-time preprocessnya tidak boleh lebih dari O ( N log N ).

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/7 Hendry Luk <[EMAIL PROTECTED]>:
> :-O  Any algorighm yg based on array yg ngacak. apa ini even possible
> buat less than O(N)?

Tidak akan mungkin kalau tidak di-preprocess terlebih dahulu.
Karena untuk ngecek-data nya saja sudah O ( N ).

Preprocessnya itu digunakan untuk membuat array acak itu lebih "terstruktur".
Sehingga setiap query nya bisa di jawab dengan O ( log N ).

Preprocess nya itu hanya boleh 1x di awal.
Dan preprocessnya itu tidak boleh lebih dari O ( N log N ) steps.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-06 Terurut Topik Felix Halim
2008/6/7 Hendry <[EMAIL PROTECTED]>:
> soal ini kamu yang bikin? atau penjelasan berikut ini based on your 
> assumption?
> kalau kamu yang bikin, i got no further questions, tapi kalau hanya
> based on assumption, seperti nya arti dan maksud dari soal dan
> penjelasan yang diberikan berikut sudah berbeda.

Soal ini adalah soal classic (sudah ada dari jaman dahulu), jadi bukan
saya yang bikin.
Yang research solusinya juga banyak (banyak scientific paper ttg problem ini).

Hmm... saya tulis ulang deh problemnya, sepertinya kurang jelas:

Diberikan array of integer A yang isinya adalah bilangan integer acak
sebanyak N elements.
Saya ingin query bilangan integer terkecil dari array A yang index nya
antara i dan j (inclusive).
Index dari array adalah 0-based (index dimulai dari angka 0).

Untuk memprocess tiap query, harus tidak lebih dari O ( log N ) steps.
Tapi query ini bisa banyak kali (querynya bukan cuman satu kali).
Dan anda diperbolehkan untuk preprocess array A terlebih dahulu tapi
tidak lebih dari O ( N log N ) steps.

Semoga tidak ada keambiguan lagi.


2008/6/7 viking leon <[EMAIL PROTECTED]>:
> preprocessnya pake
> - merge sort = O(n log n)

Begitu kamu sort, array indexnya berantakan.

> selanjutnya search bilangan pake
> - binary search = O (log n)
> kalo mau ambil bilangan terkecil atau terbesar malah bisa constant time O(1)

Querynya adalah "cari bilangan terkecil antara index i dan index j di array A"
Kalau kamu sort, maka index i dan j nya sudah berantakan, maka
hasilnya akan salah.
Apakah masih blum jelas tentang hal ini?


2008/6/7 Hendry Luk <[EMAIL PROTECTED]>:
> napa gak preprocessnya langsung swap bilangan terkecil ke paling depan?
> O(n), lebih efisien drpd merge sort O(n log n).
>
> Selanjutnya... searchnya. array[0] ;)   O(1)
>
> Gw gak ngerti nih batasan preprocessingnya


Ok, contoh berikut mungkin akan lebih jelas:

A = [ 2, 4, 1, 3 ]

queryMin( 0, 3 ) = 1   // nilai terkecil di array A antara index 0..3
adalah 1 (dengan index 3)
queryMin( 1, 1 ) = 4   // nilai terkecil di array A antara index 1..1
adalah 4 (dengan index 1)
queryMin( 1, 2 ) = 1   // nilai terkecil di array A antara index 1..2
adalah 1 (dengan index 3)
queryMin( 0, 1 ) = 2   // nilai terkecil di array A antara index 0..1
adalah 2 (dengan index 0)
queryMin( 3, 3 ) = 3   // nilai terkecil di array A antara index 3..3
adalah 3 (dengan index 3)


Kalau kamu sort array A, maka indexnya semua akan berantakan, dan
hasilnya akan salah:

A = [ 1, 2, 3, 4 ]

queryMin( 0, 3 ) = 1   // nilai terkecil di array A antara index 0..3
adalah 1 (dengan index 3)  (ok ini benar)
queryMin( 1, 1 ) = 2   // nilai terkecil di array A antara index 1..1
adalah 2 (dengan index 1)  (ini SALAH)
queryMin( 1, 2 ) = 1   // nilai terkecil di array A antara index 1..2
adalah 2 (dengan index 1)  (ini SALAH)
queryMin( 0, 1 ) = 2   // nilai terkecil di array A antara index 0..1
adalah 1 (dengan index 0)  (ini SALAH)
queryMin( 3, 3 ) = 3   // nilai terkecil di array A antara index 3..3
adalah 4 (dengan index 3)  (ini SALAH)

Query pertama mungkin benar, tapi query ke dua dan seterusnya akan salah.
Karena indexnya setelah disort, bukan lagi index AWAL dari array A semula.
Sedangkan query yang diminta adalah index AWAL dari array A.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-08 Terurut Topik Felix Halim
2008/6/8 viking leon <[EMAIL PROTECTED]>:
> preprocess bikin:
> - binary search tree (left selalu lebih kecil dari parent, kanan selalu
> lebih gede dari parent)
> tapi yang disimpan dalam binary tree adalah indexnya bkan valuenya
>
> untuk array ini: [2,4,1,3]
> BST value-nya:
>   2
>/  \
> 1  4
>   /
>  3
> BST indexnya:
>   0
>/ \
>  21
>   /
> 3
> tuk bikin BST dari array yang sudah ada kira2: O(n)


Good answer!

BST nya bagus, tapi ada kekurangan.

Kalau input saya adalah

A = [ 1, 2, 3, 4, .., 100 ]

Maka BST kamu akan lempeng ke kanan :P
Pencarian Query nya akan jadi O ( N ) bukan O ( log N ) lagi.

> searchnya kira2 = O(log n)

Kalau konstruksi BST nya seperti diatas, maka statement itu tidak benar.
Bagaimana anda tweak BST nya supaya querynya guaranteed O ( log N ) ?

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-08 Terurut Topik Felix Halim
2008/6/9 Adelwin Handoyo <[EMAIL PROTECTED]>:
> kalo ide lu preprocess nya bikin BST wah itu terlalu lama..
> emang ntar mau serach nya jadi cepet banget..
> tapi emang apa guna nya di bikin search tree..

Preprocess O ( N ) itu termasuk optimal.
Karena untuk baca semua element saja sudah O ( N ).
Tidak ada preprocess yang bisa lebih kecil dari O ( N ).

> gue ada idea lebih bagus :p
> preprocess nya 1 langkah doang..
> yaitu mengalikan semua angka nya..

Sayang sekali, Ini juga O ( N ), bukan O ( 1 ).
Kalau angkanya ada 1 juta, kamu akan looping 1 juta.
Itulah yang dimaksud O ( N ).

Kalau O ( 1 ) artinya: kalau datanya 1 juta atau berapapun,
kamu cuma looping 1 kali.

O ( 1 ) adalah constant, tidak tergantung jumlah / besarnya input.


> lalu output array nya tinggal angka hasil preprocess di bagi dengan
> input[i] sendiri..

Angka hasil preprocess bisa 0 kalau salah satu element di A adalah 0.
Dan perlu diingat, hasil perkalian ini bisa lebih dari 1 juta digit.
Algoritma perkalian yang tercepat sekalipun akan lama memprocess 1
digit perkalian.


> yang perlu kita cari justru cara bagi nya.. karna gak bole pake
> operator 'division' itu sendiri.. jadi kita bikin sendiri
> nah sekarang pertanyaan nya.. ada yang bisa bantuin gue discover
> method pembagian tanpa operasi pembagian?

Apalagi permbagian, ini lebih lambat dari perkalian.

Kecuali kamu bisa membuat perkalian dan pembagian yang efficient,
cara ini tidak bisa dipakai.

FYI, operasi BigInteger itu sendiri pun adalah problem yang sangat populer.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-08 Terurut Topik Felix Halim
Di email sebelumnya, saya hanya mengkritik BST construction nya.
Sekarang saya kritik di algo searchnya.
Algo search kamu meskipun menggunakan balanced BST, tetap run in O( N ).

Berikut adalah algo kamu untuk search:

2008/6/9 viking leon <[EMAIL PROTECTED]>:
> search on left,
> kalo belum ktemu search on right
> kalo udah ktemu terus search on left
> (cari terus ke node left paling dalam yang
> bisa ditemukan note: node right engga usah disearch)

Algo ini berjalan seperti:
1. in-order Tree traversal biasa,
   dan akan berhenti jika menemukan suatu node yang mempunyai
   index antara index queryMin(i,j), ini O( N ).
2. lalu algonya dilanjutkan dengan traverse ke kiri
   dari node terakhir itu O( log N ).

Kalau ternyata index yang dicari ada di ujung paling kanan bawah,
maka kamu akan traverse the entire tree O( N ) sebelum algonya
berubah jadi algo ke-2 yang O( log N ).

Jadi dalam kasus A = [1, 2, 3, ..., 100]

kalau saya queryMin(99, 99)
maka kamu akan looping 1 juta kali.
Dan ini masih termasuk O( N ).

Dalam hal ini, AVL tree, B-Tree, RB-Tree, etc-Tree tidak akan menolong.

Bener gak? mohon koreksi kalau saya salah ngerti.

Tapi idenya sudah bagus, menggunakan BST.
Hanya perlu di-improve supaya worst-case nya dipastikan O( log N ).

BTW, saya senang ada yang suka algo di milis JUG :)

Felix Halim


2008/6/9 viking leon <[EMAIL PROTECTED]>:
> hehehe, maksudnya aku dapet tapi penjelasannya agak salah:
>
> kalau inputnya [1... 1] malah lebih bagus
>
> semakin lempeng ke kanan semakin bagus buat cari bilangan terkecil :-) ...
> karena pada dasarnya stelah ktemu struktur di kanan kita abaikan  contoh
> kalo cari query terkecil [1...1] ktemu 1, cari di kiri null, maka
> langsung stop dia alhasil O(1)
>
> kalau [1 ... 1] nah ini bakal jadi big problem, bener anda bilang bukan
> O(log n) lagi tapi bakal jadi O(n)
>
> tuk BST-nya supaya optimal (balanced on height)  saya ada ide pake self
> balancing BST entah mau pake AA tree, AVL tree, Red-Black Tree, dll 
> udah lupa semua algoritmanya tapi menurut aku pre-processnya bakal less
> equal O(n log n) ... which is meeting the requirement.
>
> regards,
> yohan
>
> --- On Mon, 6/9/08, Felix Halim <[EMAIL PROTECTED]> wrote:
>
> From: Felix Halim <[EMAIL PROTECTED]>
> Subject: Re: [JUG-Indonesia] Kode menarik
> To: jug-indonesia@yahoogroups.com
> Date: Monday, June 9, 2008, 2:40 AM
>
> 2008/6/8 viking leon <[EMAIL PROTECTED] com>:
>> preprocess bikin:
>> - binary search tree (left selalu lebih kecil dari parent, kanan selalu
>> lebih gede dari parent)
>> tapi yang disimpan dalam binary tree adalah indexnya bkan valuenya
>>
>> untuk array ini: [2,4,1,3]
>> BST value-nya:
>> 2
>> / \
>> 1 4
>> /
>> 3
>> BST indexnya:
>> 0
>> / \
>> 2 1
>> /
>> 3
>> tuk bikin BST dari array yang sudah ada kira2: O(n)
>
> Good answer!
>
> BST nya bagus, tapi ada kekurangan.
>
> Kalau input saya adalah
>
> A = [ 1, 2, 3, 4, .., 100 ]
>
> Maka BST kamu akan lempeng ke kanan :P
> Pencarian Query nya akan jadi O ( N ) bukan O ( log N ) lagi.
>
>> searchnya kira2 = O(log n)
>
> Kalau konstruksi BST nya seperti diatas, maka statement itu tidak benar.
> Bagaimana anda tweak BST nya supaya querynya guaranteed O ( log N ) ?
>
> Felix Halim
>
> 


Re: [JUG-Indonesia] Kode menarik

2008-06-09 Terurut Topik Felix Halim
2008/6/9 Eko Wibowo <[EMAIL PROTECTED]>:
> Hint :  pake pohon2an :D hehehehe S*** Tree
> btw kalo datanya ga berubah2, bisa lbh bagus lg, pre processing O(N log N)
> dan query O(1)

S*** Tree ?

Bukannya S** Tree ?

Anyway, pake BST juga bisa kok asal tau tricknya :P
S** Tree itu untuk soal lanjutan :P

Karena makin banyak yang nimbrung, saya jadi makin semangat.
Saya attach skeleton code nya, yang punya waktu luang silahkan coba coding :D


BTW, buat anak2 BINUS yang ikut pelatihan tidak boleh jawab :P
Juga gak boleh kasih hint aneh2.
6 hari lagi babak final INC 2008!
Kalo bisa jawab soal yang ini (sampe jadi codingnya), calon masuk 10
besar deh :D

Felix Halim


Minimum.java
Description: Binary data


Re: [JUG-Indonesia] Kode menarik

2008-06-09 Terurut Topik Felix Halim
2008/6/9 Adelwin Handoyo <[EMAIL PROTECTED]>:
> lh
> avl tree khan buat BST...

Betul, AVL adalah balanced BST.

> jadi search nya bisa minimum...

Search untuk maximum value atau minimum value di balanced BST memang
betul bisa O( log N ).
Tetapi constraint di soal saya itu ada 2:
- cari minimum value
- yang ber-index antara i sampai j inclusive

Jadi kalau anda mencari value yang minimum, belum tentu index dari
value tersebut berada di range i sampai j.
Sehingga anda harus mencari "lebih" dari sekedar minimum.

> jadi ya gak perlu traverse the entire tree laa

Coba perlihatkan cara anda mencari minimum value di BST yang mempunyai
index antara i dan j.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-09 Terurut Topik Felix Halim
2008/6/9 Eko Wibowo <[EMAIL PROTECTED]>:
> oh iya lix, kelebihan 1 * :P hehehehe bisa pk R** jg nih kl statis

Udah2, jangan kasih hint melulu... hus2...

Yang penting reasoning dibaliknya.
Meski pake S** Tree atawa R**, kalo cara pakenya salah yah akan
saya salahkan :P

Gak perlu tahu algo2 advanced kok, BST sudah cukup cepat.
Dengan preprocessing time O(N) dan query time O(log N) akan saya anggap benar.
Tetapi cara konstruksi BST dan cara query dari BST tersebut harus
dilakukan dengan benar.
Disitulah letak permasalahn sekaligus keindahannya ;)

Jadi sekarang tinggal dipikirkan bagaimana menggunakan BST supaya bisa
seperti itu :)
FYI, codenya singkat sekali kok, bisa di coding dalam 10 menit :D
Ini kan soal programming contest classic.

2008/6/9 Adelwin Handoyo <[EMAIL PROTECTED]>:
> gue inget kuliah jadi nya..
> ada metoda pembuatan BST yang menjamin tree nya jadi nya seimbang..
> jadi bisa nurunin step untuk search nya
> AVL tree yah namanya kalo gak salah..

Struktur data AVL tree memang akan membuat tree nya seimbang, sehingga
kedalamannya log N.
Tetapi kalau metode pencariannya adalah "traversing the entire tree",
yah sama juga boong :D

Untuk problem ini, tidak perlu menggunakan AVL tree.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-09 Terurut Topik Felix Halim
On 6/9/08, viking leon <[EMAIL PROTECTED]> wrote:
> engga tau boleh atau engga, biar bantu agar searchnya lebih cepet ... di
> BSTnya satu node consist of index, dan valuenya:

Boleh, silahkan dioprek-oprek BST nya.
Tambahin apapun terserah, saya hanya liat complexitasnya.

> selama belum ktemu nodenya, bisa dicompare valuenya dengan node skarang ...

Valuenya? yang saya query adalah index i sampai index j.
Saya tidak punya value apapun awalnya.
Maksud kamu menggunakan value root pada awalnya?

> kalo lebih kecil cari di kiri, kalo besar cari di kanan. dengan begini
> bisa bener2 search pake binary search dalam sebuah BST.
>
> misal mencari (3,3),
> parent v=2
> 3 > 2
> cari di kanan ktemu node 4

Darimana value 3 berasal?
(3,3) itu index i=3 sampai index j=3.
Bukan berarti value = 3.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-10 Terurut Topik Felix Halim
2008/6/10 Andrian Kurniady <[EMAIL PROTECTED]>:
> Ini namanya Range-Minimum Query (RMQ) kan? :D

Yah dibocorin... gak seru lagi deh... :P
Kalo udah tau keyword nya, udah bisa googling cari2 sendiri jawabannya.
Tapi selama blum tahu keywordnya akan mikir keras...
Kayaknya sekarang incentive mikirnya udah gak ada kalo dah tahu keywordnya.

> BTW Lix, itu punya lu kayaknya bukan Binary Search Tree (
> http://en.wikipedia.org/wiki/Binary_search_tree ) deh, itu Binary Tree
> biasa soalnya elemennya nggak sorted kan...?

Karena udah bocor sama si Kurniady, yah gw jawabin deh...
Range-Index nya yang gw BST in, bukan valuenya.
Jadi pas query, gw cari leftmost index sama rightmost index (log N).
Kalo diantaranya dia akan langsung return memonya.

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-10 Terurut Topik Felix Halim
Berikut code BST yang run hanya dalam O ( log N ).
Dengan pre-processing time O ( N ).

Bayangkan anda adalah Google.
Yang mempunyai 1 juta data dalam suatu array.
Karena pengguna google itu banyak, maka yang query data ke Google akan
sangat banyak.
Masing2 query itu ingin mengetahui value terkecil dari index i sampai j.

Di code saya, preprocessing timenya less than 1 second.
Dan bisa menjawab 1 juta queries dalam 5 detik.
Karena saya hanya perlu log( 1 juta ) = 20 kali looping untuk masing2 query.

Untuk yang lain, especially Kurniady.
Coba improve code yang saya attach supaya bisa menjawab 1 juta queries
dalam 1 detik.
Katanya kan ada tuch algo O ( 1 ) nya untuk query :D

Itu tantangan berikutnya :D

Bagi yang ingin mempelajari code BST nya, silahkan tanya kalau tidak dimengerti.

Felix Halim


Minimum.java
Description: Binary data


Re: [JUG-Indonesia] Kode menarik

2008-06-10 Terurut Topik Felix Halim
2008/6/10 Andrian Kurniady <[EMAIL PROTECTED]>:
> Pake RMQ yang O(log N) bisa dapet segini :
>
> Preprocess Time: 0.372
> 100 Queries Time: 0.372
> TOTAL Time: 0.744

Inilah sang jawara :D

He eh, kalo pake bottom-up + plain-array DP bisa lebih kenceng
daripada pake rekursi + tree structure.


> Pake RMQ yang O(1) dapet nya segituan juga.
> [Spoiler] http://andrian.kurniady.net/Minimum.java [/Spoiler]
> Bener gak? :-D

Congats!!!  Sodara2, perkenalkan Andrian Kurniady, master DP + calon
juara INC 2008 :D

Sepertinya pertanyaan saya sudah setop sampai disini, karena udah gak
ada yang lebih kenceng dari O( 1 ) query time :P

Yang versi O(log N) nya bisa dibuat tergantung "lebar" sehingga kalau
j-i+1 nya kecil, versi O( log N ) nya bisa finish hanya dalam beberapa
steps, sehingga tidak jauh beda dengan versi O( 1 ) nya.  However
versi O( 1 ) nya guaranteed hanya butuh 1 step untuk "lebar" apapun.

Soal gini2an cocoknya jadi "interview" questions nich. Karena di
kuliah biasanya cuman diajarin dasar dari tree data structure dan itu
tergantung kreativitas programmer untuk menggunakannya secara
efficient. Untuk yang RMQ versi O( 1 ) nya biasanya terlalu susah
untuk orang awam, karena butuh pengetahuan tentang Dynamic Programming
yang kuat. Tapi kelihatannya bukan masalah bagi seorang Andrian
Kurniady :P

Menarik kan? Mau soal lagi? :D

Felix Halim


Re: [JUG-Indonesia] Kode menarik

2008-06-11 Terurut Topik Felix Halim
2008/6/11 Feris Thia <[EMAIL PROTECTED]>:
> Untuk pemakaian algoritma yang eksekusinya optimal seperti ini memang memori
> harus besar untuk preprocessnya ya ? Belum baca teorinya sih, tapi pas
> eksekusi code dari Felix dan Andrian saya harus menambah heap size nya :p

Bisa dihitung kok pemakaian memorynya:

public static final int[] A = new int[N];
public static final int[][] B = new int[22][N];
public static final int[] lvmat = new int[110];
public static final int[] duapang = new int[30];

Space nya sekitar O ( N log N ).
Sekitar 96 MB. ( 24 * 1 juta * 4 byte = 96 MB )


Kalau pake BST, spacenya sekitar O ( N ).
Sekitar 40 MB. (setiap node ada 5 values dan total ada 2N nodes, jadi
10N space = 10 * 1 juta * 4 byte = 40 MB)

Blum saya test pake profiler sih bener apa kaga.
Secara teori harusnya sekitar situ plus minus temporary variables + call stack.


2008/6/11 Kong Putra <[EMAIL PROTECTED]>:
> Sekedar info.., dari hasil googling... :)
>
> http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor

Tidak perlu baca artikel itu pun harusnya bisa kok solve soal RMQ ini.
Kalau dilihat sekelebatan, sepertinya solusi O( 1 ) nya si Andrian
Kurniady tidak ada di artikel tersebut :P
Bener gak kur? coba di cek deh...

Felix Halim


[JUG-Indonesia] Connect to Oracle : The Network Adapter could not establish the connection

2009-04-06 Terurut Topik Felix Halim
Hallo Juggers,

Saya baru saja download dan install Oracle 11.1.0.6.0
Lalu masuk ke SQL*Plus dengan login "/ as sysdba" dan buat user:

create user abc identified by def;
grant all privileges to abc;

Dan bisa connect sebagai user abc:

connect abc;

Dan bisa juga buat table:

  create table employee (
id varchar2(5),
name varchar2(30),
  primary key (id));


Nah, seharusnya saya bisa connect dari plain Java file ini donk:

import java.sql.*;
class Conn {
public static void main (String args []) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "abc", "def"
);

Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from employee");
while (rset.next()) System.out.println (rset.getString(1));
// Print col 1
stmt.close();
}
}


Masalahnya adalah, jar files untuk driver new
oracle.jdbc.driver.OracleDriver itu ada di jar mana yah?

apakah nama jarnya classes12.jar? ojdbc5.jar? ojdbc6_g.jar?
ojdbc14.jar? ojdbc14dms.jar?

Semuanya punya OracleDriver itu, dan semuanya gak bisa connect.

Hasilnya adalah:


Exception in thread "main" java.sql.SQLException: Io exception: The
Network Adapter could not establish the connection
at 
oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:133)
at 
oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:115)
at 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:221)
at 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:293)
at 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:646)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:454)
at 
oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:493)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:198)
at 
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:493)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Conn.main(Conn.java:6)



Ada yang punya pengalaman dengan ini?

Thanks,

Felix Halim


Re: [JUG-Indonesia] Connect to Oracle : The Network Adapter could not establish the connection

2009-04-08 Terurut Topik Felix Halim
Ternyata masalahnya di IP address...
Padahal connect ke local machine.
IP nya harus pasang 176.bla.bla.bla baru bisa.
Kalo pasang "localhost" atau "127.0.0.1" dia gak mao.
Aneh banget oracle...  bikin pusing aja.

Felix Halim

On Tue, Apr 7, 2009 at 7:02 PM, Awaluddin Hamid  wrote:
> Felix Halim wrote:
>>
>> apakah nama jarnya classes12.jar? ojdbc5.jar? ojdbc6_g.jar?
>> ojdbc14.jar? ojdbc14dms.jar?
>>
>> .
>>
>
> Sepengetahuan saya sih yg classes12 itu untuk Oracle yg support Java 1.2
> (Oracle 8 & 9(?)), sedang yg ojdbc14 untuk Oracle yg support Java 1.4
> (Oracle 10), yg lainnya gak tahu. Oracle 11 sendiri belum pernah nyoba.
>
>
>> Exception in thread "main" java.sql.SQLException: Io exception: The
>> Network Adapter could not establish the connection
>>
>>
>> .
>>
>>
>
> Coba cek, apakah file tnsnames-nya sudah di-setting dengan benar. Karena
> kalo connect "/ as sysdba" itu bisa jadi adalah konek internal dan gak
> perlu setting tnsnames (yg ini jika via client).
>
> CMIIW,
> AH
>
>
>
>
>
>
>
>
>
>
>
>
> 
>
> Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke 
> jug-indonesia-unsubscr...@yahoogroups.com.
>
> Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>
> Yahoo! Groups Links
>
>
>
>


Re: [JUG-Indonesia] Re: Indonesia National Contest (INC 2008)

2008-07-04 Terurut Topik Felix Halim
Mau membangkitkan thread yang lama :)

INC 2008 sudah berakhir tanggal 15 Juni lalu, saya baru selesai
membuat pembahasannya beberapa hari lalu. Untuk Wilbert dan yang lain
bisa belajar dari pembahasan INC 2008 di website saya maupun website
Suhendry Effendy:

http://felix-halim.net/story/inc08/index.php

dan

http://www.suhendry.net/blog/?p=96


Target kompetisi berikutnya adalah Google Code Jam 2008:

http://code.google.com/codejam/

Tinggal 12 hari lagi! Sudah siapkah anda? :D

Di milis ini siapa saja yang rencana ikut Google Code Jam 2008?
Saya pasti ikut :)

Felix Halim


2008/5/16 Wilbert <[EMAIL PROTECTED]>:
> Thank you om Frans... :)
> I'll do my best lah.., soalnya ini pertama kali dalam hidup gw
> ikutan lomba... wakakaka!! parah banget yah?!
>
> Ok2.., ntar pakai notepad++ aja dah cukup kayanya..
> Thanks banget kk Felix.. :)
>
> --
> Wilbert : IT UKDW 2006
> Java Blog : http://wilbertjava.wordpress.com
> YM : inherit_c 


Re: [JUG-Indonesia] [ask]split string d J2ME??

2008-08-12 Terurut Topik Felix Halim
import java.util.*;

public class Split {
public static void main(String[] args){
String s = "[EMAIL PROTECTED]@[EMAIL PROTECTED]@[EMAIL 
PROTECTED]";

String[] ss = s.split("@#|[EMAIL PROTECTED]"); // pake regex aja

for (String x : ss) System.out.println(x);
}
}

Felix Halim

On Mon, Aug 11, 2008 at 7:02 PM, Surya <[EMAIL PROTECTED]> wrote:
> wadu bingung juga sekali liat d j2me nggak ad fungsi split dari
> library standardny.
>
> ak puny kasus gni :
>
> String list = "";
>
> list += btAdd + "@#" + nm + "@#" + dt + "[EMAIL PROTECTED]";
>
> aku mo split berdasarkan sparator "@#" dan "[EMAIL PROTECTED]".
> kendalanya pasti pas split "[EMAIL PROTECTED]" index ke 2 ny pst null;
>
> code yg ak pakai buat split:
>
> public void setToListHistoryPrivate(String lg) throws
> RecordStoreException {
>listPrivateHistory = new ListPrivateHistory(parent);
>String[] listSplit2;
>String[] listSplit1 = split1(lg);
>for (int i = 0; i < listSplit1.length; i++) {
>listSplit2 = split2(listSplit1[i]);
>listPrivateHistory.addItem(listSplit2[0], listSplit2[1],
> listSplit2[2]);
>}
>}
>
> private String[] split1(String original) {
>Vector nodes = new Vector();
>String separator = "[EMAIL PROTECTED]";
>
>// Parse nodes into vector
>int index = original.indexOf(separator);
>while (index >= 0) {
>nodes.addElement(original.substring(0, index));
>original = original.substring(index + separator.length());
>index = original.indexOf(separator);
>}
>// Get the last node
>nodes.addElement(original);
>
>// Create splitted string array
>String[] result = new String[nodes.size()];
>if (nodes.size() > 0) {
>for (int loop = 0; loop < nodes.size(); loop++) {
>result[loop] = (String) nodes.elementAt(loop);
>System.out.println(result[loop]);
>}
>
>}
>
>return result;
>}
>
> private String[] split2(String original) {
>Vector nodes = new Vector();
>String separator = "@#";
>
>// Parse nodes into vector
>int index = original.indexOf(separator);
>while (index >= 0) {
>nodes.addElement(original.substring(0, index));
>original = original.substring(index + separator.length());
>index = original.indexOf(separator);
>}
>// Get the last node
>nodes.addElement(original);
>
>// Create splitted string array
>String[] result = new String[nodes.size()];
>if (nodes.size() > 0) {
>for (int loop = 0; loop < nodes.size(); loop++) {
>result[loop] = (String) nodes.elementAt(loop);
>System.out.println(result[loop]);
>}
>
>}
>
>return result;
>}
>
> mohon bantuannya...
> penasaran soalny
>
>
> 
>
> Kalau mau keluar dari mailing list ini, caranya kirim sebuah email ke [EMAIL 
> PROTECTED]
>
> Jangan lupa, website JUG Indonesia adalah http://www.jug.or.id
>
> Yahoo! Groups Links
>
>
>
>