[JUG-Indonesia] Re: GWT: onFailure
Dear all, udah solve, ternyata ga bisa sembarangan panggil ke server lain, musti pake API yg disediakan: http://code.google.com/apis/gadgets/docs/remote-content.html Baru bbrp hari mainan nih gadget, gmail contextual gadget. Sama dgn gadget biasa, cmn ada fitur dan limitasi tambahan: http://code.google.com/apis/gmail/gadgets/contextual/ http://webos-goodies.jp/archives/how_to_make_a_gmail_contextual_gadget.html regards, Nasrul -- Menikmati Hidup Mempersembahkan yang Terbaik -Nashroulloh
[JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? makasih
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/27 Niksen Harjanto milis.java.ko...@gmail.com rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? benul, alias benar-benar betul. bisa juga gini: for (int x=0, y = table.getRowCount(); xy; x++) { // bla bla bla } biar tetep efisien dan scope dari variable tetep sekecil mungkin. makasih
Re: [JUG-Indonesia] Re: ZKoss Rich Internet Application Framework
mungkin email ini bisa memberikan pencerahan. zk saya pakai buat intranet :) *From:* Jean Yen jean...@zkoss.org *To:* zulhelmy *Sent:* Wed, January 27, 2010 2:49:19 PM *Subject:* Re: ask about zk 5 and license to zk calendar timeline Hi zulhelmy, Glad to know you are making good use of ZK and sorry about your feeling. First I'd like to give you some background about our licensing: ZK has been release under GPL since the very beginning, and ZK 3 Packages and extensions (such as ZK Calendar Timeline) were offered under the GPL/Commercial dual licensing model. Now in ZK 5, we've changed ZK 3 Standard Package to CE under LGPL, offering more freedom for both open source and commercial projects than the previous GPLed version. For ZK 5 PE and EE, they are availalbe under ZK Open Source License and Commercial License. If you were a GPL-compatible ZK 3 user, you can continue use ZK 5 PE and EE at no cost under ZK Open Source License. If you are interested in knowing more about our licensing, please visit: ZK License: http://www.zkoss.org/license/ ZK Extensions: http://www.zkoss.org/license/extension.dsp Now, back to your case, As mentioned above, if you have been and will continue use ZK in an open source project or a GPL-compatible project (such as an intranet application which will be only accessed by your employees in the office), I will pass you the ZOL agreement and assist you to make use of ZK 5 EE at no cost. On the other hand, if your application is not an open source or a GPL-compatible application, you will need a commercial license to use ZK PE, EE or some of the extensions. As mentioned on the website, we do provide various incentive programs to help you to take advantage of ZK. For example, by applying to a contributor's program, you can trade the license or discounts with your contribution (such as a small talk or a demo). We really appreciate that you promoted ZK in your company, and I beleive you have invested your time in the project. We are willing to help you continue making use of ZK, so please let me know whether ZOL sounds a solution to you, or provide us with your feedback. Based on your response, let's see how we can figure out a workable solution for both. Sincerely, Jean The ZK Team --- ZK -- No.1 Ajax on SourceForge.net http://sourceforge.net/ with more than 1,200,000 downloads. 2010/5/26 Tejo A Kusuma tejo...@gmail.com Kalo close or komersil, pastinya nggak bisa lah,,. cuman kalo buat seperti saya yang di pemerintahan gini dianggep non komersil ga ya ? itu yang bikin saya bingung, 2010/5/26 michael C mike_hells...@yahoo.com Saya baca baca tentang ZOL, menarik juga tuh, bisa menggunakan full version ZK PE. saya ngincer portlet and column layout component nya. batesannya apa aja ya, supaya bisa dapat menggunakan ZOL ini, di situs nya bilang suruh contact langsung ke potix nya Kalau pakai ZOL bukannya Project yg kita bikin juga harus berlisensi Open? kalau untuk project komersil/close source apakah masih bisa? -- -:::Zulhelmy:::- There is no secret ingredient. To make something special you just have to believe it's special
[JUG-Indonesia] [Help] sitemesh velocity spring dynamic menu
Mohon bantuannya dong, aku mo buat menu list di sisi kiri page tapi ngambilnya dari database (dynamic menu), aku dah buat decorator templatenya tapi bingung caranya untuk load menu itu ditemplatenya, ada yang pernah buat gak, klo ada mohon pencerahan nya :) nb: projectnya pake : sitemesh (decorator) velocity (template engine) spring mvc, spring security hibernate Regards, Naray Citra
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
On 5/27/2010 3:08 PM, Niksen Harjanto wrote: rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? Nggak benar. Kecuali lu sudah baca source code dari getRowCount. Bisa saja implementasi dari getRowCount menggunakan cache. Kalau implementasinya menggunakan cache maka overheadnya cuma method call overhead saja dan sangat kecil. Niksen sekedar nasihat. Pertanyaan kamu menunjukkan kamu terlalu terobsesi dengan kecepatan. Ini obsesi yang berbahaya. Percaya deh lama-lama kamu akan ketemu batunya dan menyesali obsesi kamu. Donald Knuth salah satu empu para programmer bilang begini: We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
[JUG-Indonesia] spring @component di validate class
Malam, mau nanya tentang spring nih..saya mau simpan sebuah form katakanlah form pendaftaran. Ketika mau disave saya buat sebuah class Validator buat ngecek apakah username sudah terdaftar atau belum. Dan untuk itu saya harus connect ke database untuk ngecek apakah sudah ada orang lain yang terdaftar dengan userid tertentu atau belum.. misalnya : FormValidator.java @Component public class FormValidator { @Autowired private UserService userService;-- ini buat dalamnya ada method buat ngecek ke db. .. } terus di controller saya ada panggil : @Controller public class FormController { @Autowired private FormValidator formValidator; } menurut rekan2, apakah boleh/bagus ga secara design kalau di controller kita taruh instance formValidator ?? sebelumnya di FormController saya tidak taruh instance autowired formValidator, tetapi pakai : new FormValidator().validate(x,y); tapi kalau pakai operator new, UserService di FormValidator tidak akan di inject oleh spring. Pertanyaan saya adalah kalau saya butuh validasi tapi perlu ke db dulu, best practicenya bagaimana ya ??
Re: [JUG-Indonesia] spring @component di validate class
public class FormValidator { private UserService userService; public FormValidator(UserService userService){ this.userService=userService; } } @Controller public class FormController { �...@autowired private UserService userService; new FormValidator(userService).validate(x); } -- regards
[JUG-Indonesia] Re: Tanya Map di JDK 1.5 ???
boleh cobain itu yang di loop pake collection yang sama? Iterator keyValuePairs1 = mp.getMap().entrySet().iterator(); Ini khan iteratornya diambil dari set entrySet for (int i = 0; i mp.getMap().size(); i++) boleh di test di 1.5 pake mp.getMap().entrySet().size() jadi kira2 begini: for (int i = 0; i mp.getMap().entrySet().size(); i++) just guessing aja yah, penasaran cari sumber permasalahannya. kasih tau yah kalo bisa. thanks - yohan chandra - --- In jug-indonesia@yahoogroups.com, ivan prasetia iphan_zeke_...@... wrote: hi all, mau tanya nih... potongan code: Iterator keyValuePairs1 = mp.getMap().entrySet().iterator(); for (int i = 0; i mp.getMap().size(); i++) { Map.Entry entry = (Map.Entry) keyValuePairs1.next(); waktu saya jalanin pakai JDK 1.5 terjadi exception nosuchelement.. eror di Map.Entry nya tetapi saya ganti JDK 1.6 berjalan mulus Kenapa yah ? mohon petunjuknya.. Thanks. Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Kalo di C banyak orang yang terjebak bikin looping begini for (int i=0;istrlen(mystring);i++) { ... } Bisa jadi O(N^2) karena strlen-nya O(N). Kalo di situ sih practicenya yang benar for (int i=0,n=strlen(mystring);in;i++) { ... } Kalau di Java, mestinya sih kalau container yang dipakai memang usernya banyakan looping, sudah didesain supaya fungsi size() / rowCount() / etc. nya optimal untuk pemakaian yang begitu, jadi gak perlu dikhawatirkan. Kalo mau lebih aman lagi pake iterator sekalian. My opinion: Ada bagusnya kalau dibiasakan coding practice yang baik, selama tidak mengganggu readability kan tidak ada ruginya. Tapi jangan overly obsessed juga, kalo datanya kecil, gak perlu dikit2 dioptimize, nanti malah buat bug dimana2, gak worthed optimizenya. Most of the implementation details macem pake getter atau pake akses ke field, private atau public lebih cepat diaksesnya? gak relevan untuk Java, siapa tau juga JVM versi berikutnya punya performance characteristic beda. Coding practice, misal: Banyak programmer yang kalau nulis comparison string dengan constant begini if (blah.equals(myString)) ... rather than if (myString.equals(blah)) ... Tanya kenapa... :-) -Kurniady 2010/5/27 Samuel Franklyn sfrank...@gmail.com On 5/27/2010 3:08 PM, Niksen Harjanto wrote: rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? Nggak benar. Kecuali lu sudah baca source code dari getRowCount. Bisa saja implementasi dari getRowCount menggunakan cache. Kalau implementasinya menggunakan cache maka overheadnya cuma method call overhead saja dan sangat kecil. Niksen sekedar nasihat. Pertanyaan kamu menunjukkan kamu terlalu terobsesi dengan kecepatan. Ini obsesi yang berbahaya. Percaya deh lama-lama kamu akan ketemu batunya dan menyesali obsesi kamu. Donald Knuth salah satu empu para programmer bilang begini: We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
ok thanks... On 5/27/10, Jecki jecki...@gmail.com wrote: 2010/5/27 Niksen Harjanto milis.java.ko...@gmail.com rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? benul, alias benar-benar betul. bisa juga gini: for (int x=0, y = table.getRowCount(); xy; x++) { // bla bla bla } biar tetep efisien dan scope dari variable tetep sekecil mungkin. makasih Buktikan Anda peduli pendidikan Indonesia. Dukung Kurikulum SMK berJava.. kirimkan surat resmi perusahaan dukungan ke moderator JUG. === 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] spring @component di validate class
menurut rekan2, apakah boleh/bagus ga secara design kalau di controller kita taruh instance formValidator ?? Memang kalo mau make bean-bean yg dikenalin sama si Spring yah kelas kita harus dikenalin dulu sama spring. Dengan @Component maka kita memberitahu kepada spring untuk menyertakan kelas itu sebagai bean pada applicationContext. Pertanyaan saya adalah kalau saya butuh validasi tapi perlu ke db dulu, best practicenya bagaimana ya ?? Taro validasinya di service biar service tar panggil dao buat konek ke database. Regards, Yudhi Karunia Surtan -- http://yudhikarunia.wordpress.com http://www.google.com/profiles/BrainMaster716. 2010/5/27 joshua sitopul joshua.sito...@gmail.com Malam, mau nanya tentang spring nih..saya mau simpan sebuah form katakanlah form pendaftaran. Ketika mau disave saya buat sebuah class Validator buat ngecek apakah username sudah terdaftar atau belum. Dan untuk itu saya harus connect ke database untuk ngecek apakah sudah ada orang lain yang terdaftar dengan userid tertentu atau belum.. misalnya : FormValidator.java @Component public class FormValidator { @Autowired private UserService userService;-- ini buat dalamnya ada method buat ngecek ke db. .. } terus di controller saya ada panggil : @Controller public class FormController { @Autowired private FormValidator formValidator; } menurut rekan2, apakah boleh/bagus ga secara design kalau di controller kita taruh instance formValidator ?? sebelumnya di FormController saya tidak taruh instance autowired formValidator, tetapi pakai : new FormValidator().validate(x,y); tapi kalau pakai operator new, UserService di FormValidator tidak akan di inject oleh spring. Pertanyaan saya adalah kalau saya butuh validasi tapi perlu ke db dulu, best practicenya bagaimana ya ??
RE: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Kalo menurut gue.. betul dan salah... Gimana membuktikan nya... Gini... JTable ituh bagian dari JDK... Compile ulang... Tambahin some debugging line di table.getRowCount... Jalanin for loop nya... Liat debugging line di table.getRowCount ituh jalan melulu ato enggak... G jamin Cuma jalan sekali... Waktu pertama kali masuk loop nya... G udah coba debug... Die kagak jalanin table.getRowCount terus2an tiap iteration... Sekali doang... Betul bahwa nomor 2 ituh baik... Tapi sebenernya 2-2 nya sama ajah... Oia... g nyoba nya pake list.getSize Males bikin qhole swing interface Adelwin Handoyo | Senior Consultant - Wholesale Bank Standard Chartered Bank 7, Changi Business Park Cresent, Level 3. Singapore (486028) T : (65) 659 61395 | E adelwin.adel...@sc.com From: jug-indonesia@yahoogroups.com [mailto:jug-indone...@yahoogroups.com] On Behalf Of Jecki Sent: Thursday, May 27, 2010 4:18 PM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For 2010/5/27 Niksen Harjanto milis.java.ko...@gmail.com mailto:milis.java.kodok%40gmail.com rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? benul, alias benar-benar betul. bisa juga gini: for (int x=0, y = table.getRowCount(); xy; x++) { // bla bla bla } biar tetep efisien dan scope dari variable tetep sekecil mungkin. makasih This email and any attachments are confidential and may also be privileged. If you are not the addressee, do not disclose, copy, circulate or in any other way use or rely on the information contained in this email or any attachments. If received in error, notify the sender immediately and delete this email and any attachments from your system. Emails cannot be guaranteed to be secure or error free as the message and any attachments could be intercepted, corrupted, lost, delayed, incomplete or amended. Standard Chartered PLC and its subsidiaries do not accept liability for damage caused by this email or any attachments and may monitor email traffic. Standard Chartered PLC is incorporated in England with limited liability under company number 966425 and has its registered office at 1 Aldermanbury Square, London, EC2V 7SB. Standard Chartered Bank (SCB) is incorporated in England with limited liability by Royal Charter 1853, under reference ZC18. The Principal Office of SCB is situated in England at 1 Aldermanbury Square, London EC2V 7SB. In the United Kingdom, SCB is authorised and regulated by the Financial Services Authority under FSA register number 114276. If you are receiving this email from SCB outside the UK, please click http://www.standardchartered.com/global/email_disclaimer.html to refer to the information on other jurisdictions.
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/27 Samuel Franklyn sfrank...@gmail.com On 5/27/2010 3:08 PM, Niksen Harjanto wrote: rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? Nggak benar. Kecuali lu sudah baca source code dari getRowCount. Bisa saja implementasi dari getRowCount menggunakan cache. Kalau implementasinya menggunakan cache maka overheadnya cuma method call overhead saja dan sangat kecil. Ga perlu baca source code dari getRowCount juga udah ketauan kalau cara pertama itu cenderung lebih lelet, walaupun mungkin sangat kecil sekali. Kecuali compiler melakukan optimization. Jelas sekali kalau kita tau ada expression yang mustinya bisa dijalankan sekali saja maka sebaiknya dipanggil sekali saja dan disimpan di variable. Kecuali kasusnya adalah table.getRowCount() itu berubah-ubah nilainya, kalau ini sih memang harus dipanggil tiap kali iterasi. Niksen sekedar nasihat. Pertanyaan kamu menunjukkan kamu terlalu terobsesi dengan kecepatan. Ini obsesi yang berbahaya. Percaya deh lama-lama kamu akan ketemu batunya dan menyesali obsesi kamu. Terobsesi memang ada sisi baik dan buruknya. Tapi belajar memahami apa yang baik dan tidak itu tidak ada salahnya. Lama-lama juga bosen sendiri optimize hal2 seperti ini. Atau kalau sudah jadi habit malah ga kepikiran sama sekali tau-tau codingnya udah optimized. Donald Knuth salah satu empu para programmer bilang begini: We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize Ga ada salah sama statement Donald Knuth. Maksud dia baik. Jangan optimize terlalu dini. Jangan over optimize sesuatu yang belum tentu tidak optimized. Tapi di sisi lain ada orang yang tipenya ga mau tau soal optimasi sama sekali. Coding maen hajar bleh, terus berlindung di balik statement Donald Knuth Premature optimization is the root of all evil. Sampai satu titik kita musti optimasi. Nah bingung deh kalo udah gini. Orang dulu bilang sedikit-sedikit lama-lama menjadi bukit. Kalo hanya ada 1 baris code yang tidak optimize seperti contoh di atas mungkin tidak terlalu banyak impact. Tapi kalau ada seribu baris seperti di atas, tersebar di ratusan source files, akhirnya mempengaruhi performance bukannya tambah repot. Intinya sih sebagai developer musti ngerti lah do's and don'ts programming dari berbagai aspek. Kalau tau hal2 kecil kaya gini bisa mempengaruhi performance (walaupun musti muncul beribu kali dulu baru berasa) ya lakukan dengan benar.
RE: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Actually for (xx : list) juga udah ada di java sih Hahahaha Dan sebenernya Optimization nya di compiler juga udah ok kok buat handle case2 macam gini... And true ituh... most often than not, your attempts to optimize your code actually makes it worse. For itu tadi tuh Cuma jalan di jdk5 sih setau gue... Kalo di jdk1.4 pake nya iterator... But then again... This is irrelevant kan... Table element kan bukan list... Heheheheh I mean.. bukan actually a list... tapi yah emang list of something... tapi bukan ListObject gituh... Soal optimization attempts... pake 80-20 rule... Buat apa exert effort 80% demi untuk serve 20% Mendingan exert effort 20% demi untuk serve 80% Hehehehe Get the idea? Don't worry too much about it. Adelwin Handoyo | Senior Consultant - Wholesale Bank Standard Chartered Bank 7, Changi Business Park Cresent, Level 3. Singapore (486028) T : (65) 659 61395 | E adelwin.adel...@sc.com From: jug-indonesia@yahoogroups.com [mailto:jug-indone...@yahoogroups.com] On Behalf Of Hendry Luk Sent: Thursday, May 27, 2010 6:20 PM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For Gak tau kalo di java.. tapi di .net cara 1 lebih efisien. First of all, kalo lu akses array/list pake cara 1, compiler gak bakal produce loop block yang terus2an manggil Count() di tiap iteration, melainkan bakal pake temporary variable, exactly the same kayak kalo lu tulis pake cara 2. Jadi lu gak gain anything dengan nulis pake cara 2. Second of all, lu mesti tau bahwa saat lu akses content dari array ato list, ada routine di runtime buat ngecek apakah lu berusaha ngakses index yang di luar array/list tersebut, in which case lu bakal dapet IndexOutOfBoundException. Kalo lu tulis pake cara 1, compiler lu bakal conclude bahwa code block lu dah safe, sehingga compiler bakal optimise the code dengan erase routine yang anticipates index-out-of-bound situation. Hasilnya, gak cuma lu dapet compiled code yang sama dengan cara 2, tapi juga code lu dioptimised dengan ngebuang routine2 yang gak applicable dengan situasi lu. Foreach syntax, for(xx: list), is even better. Again, gw gak tau di java, all those are true in .net. Tapi moral of this story adalah, jangan try too hard buat optimise your code dengan ngeja word-by-word pake smart fine-tuned instructions. Compiler dan jdk ditulis oleh very very smart people, dan sangat jarang lu bisa nulis java code yang outsmarts them. Most of the time optimisation attempt lu actually makes it worse. Modern language increasingly ngasih more and more syntatic sugars yang bikin code lu makin high-level dan declarative (e.g. syntax kayak for-each, closure, Linq, Parallel/PLinq, dynamic, auto-property, etc), tujuannya *bukan* semata2 buat bikin programmers write less. Melainkan, language abstraction ini plays an important role buat ngasih penulis compiler enough flexibility buat produce optimised solution dari code lu. Kalo lu bypass abstraction ini, dan lengsung terjun low-level nge-dikte code lu dengan specific instructions, lu justru gak ngasih compiler lu anymore room buat nyisipin any optimisation logic ke bytecode lu. 2010/5/27 Jecki jecki...@gmail.com mailto:jecki...@gmail.com 2010/5/27 Niksen Harjanto milis.java.ko...@gmail.com mailto:milis.java.kodok%40gmail.com rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? benul, alias benar-benar betul. bisa juga gini: for (int x=0, y = table.getRowCount(); xy; x++) { // bla bla bla } biar tetep efisien dan scope dari variable tetep sekecil mungkin. makasih This email and any attachments are confidential and may also be privileged. If you are not the addressee, do not disclose, copy, circulate or in any other way use or rely on the information contained in this email or any attachments. If received in error, notify the sender immediately and delete this email and any attachments from your system. Emails cannot be guaranteed to be secure or error free as the message and any attachments could be intercepted, corrupted, lost, delayed, incomplete or amended. Standard Chartered PLC and its subsidiaries do not accept liability for damage caused by this email or any attachments and may monitor email
Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ???
uda bisa jalan di jdk 1.5 memang kalau saya telusuri code saya terus memakai ini : for (Iterator it = mp.getMap(). entrySet. iterator( ); it.hasNext() akan tersisa element kosong yg element terakir. sebenarnya cuman mau bikin search map datanya berbentuk dynamic tree. setiap map saya kasih default sebagai flag. nah itu yg menyebabkan element terakir selalu kosong. thanks atas info2 nya :) Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290 --- Pada Kam, 27/5/10, viking leon vk_l...@yahoo.com menulis: Dari: viking leon vk_l...@yahoo.com Judul: Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ??? Kepada: jug-indonesia@yahoogroups.com Tanggal: Kamis, 27 Mei, 2010, 10:11 PM setuju memang praktek yang tidak bagus sama sekali tapi secara code wise doang seharusnya khan tetap jalan. - yohan - --- On Thu, 5/27/10, Nanda Firdausi nanda.firdausi@ gmail.com wrote: From: Nanda Firdausi nanda.firdausi@ gmail.com Subject: Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ??? To: jug-indonesia@ yahoogroups. com Date: Thursday, May 27, 2010, 11:16 AM Tetap saja jangan campur adukkan for 0-size dengan nextnya iterator. Praktek yang sungguh tidak baik. Kalau mau jalan di 1.4 coba ini: for (Iterator it = mp.getMap(). entrySet. iterator( ); it.hasNext() ; ) { Map.Entry entry = (Map.Entry) it.next(); // do what you want to do with entry} -- Nanda Firdausi Muhammad http://satukubik. com 2010/5/26 ivan prasetia iphan_zeke_boy@ yahoo.co. id bukan campur aduk codenya emang cmn potongan eheheheh... for (Map.Entry entry : mp.getMap(). entrySet( )) { // do what you want to do with entry} untuk code di atas uda generic... misal di implement di JDK di bawah 1.5 tidak bisa.. makanya saya buat yg model lama... anyway thanks info nya ... Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290 --- Pada Rab, 26/5/10, Nanda Firdausi nanda.firdausi@ gmail.com menulis: Dari: Nanda Firdausi nanda.firdausi@ gmail.com Judul: Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ??? Kepada: jug-indonesia@ yahoogroups. com Tanggal: Rabu, 26 Mei, 2010, 9:19 PM Saya ga tahu dimana salahnya. Tapi kode Anda campur aduk. Ada for 0 - size dicampur iterator. Kalau boleh saran coba kodenya diganti seperti ini: for (Map.Entry entry : mp.getMap(). entrySet( )) { // do what you want to do with entry} -- Nanda Firdausi Muhammad http://satukubik. com 2010/5/26 ivan prasetia iphan_zeke_boy@ yahoo.co. id hi all, mau tanya nih... potongan code: Iterator keyValuePairs1 = mp.getMap(). entrySet( ).iterator( ); for (int i = 0; i mp.getMap(). size(); i++) { Map.Entry entry = (Map.Entry) keyValuePairs1. next(); waktu saya jalanin pakai JDK 1.5 terjadi exception nosuchelement. . eror di Map.Entry nya tetapi saya ganti JDK 1.6 berjalan mulus Kenapa yah ? mohon petunjuknya. . Thanks. Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Buset ngapain lo sentuh2 source codenya win, kan bisa tempel breakpoint atau pake profiler yg include JDK. On 5/27/10, Adelwin, Adelwin adelwin.adel...@sc.com wrote: Kalo menurut gue.. betul dan salah... Gimana membuktikan nya... Gini... JTable ituh bagian dari JDK... Compile ulang... Tambahin some debugging line di table.getRowCount... Jalanin for loop nya... Liat debugging line di table.getRowCount ituh jalan melulu ato enggak... G jamin Cuma jalan sekali... Waktu pertama kali masuk loop nya... G udah coba debug... Die kagak jalanin table.getRowCount terus2an tiap iteration... Sekali doang... Betul bahwa nomor 2 ituh baik... Tapi sebenernya 2-2 nya sama ajah... Oia... g nyoba nya pake list.getSize Males bikin qhole swing interface Adelwin Handoyo | Senior Consultant - Wholesale Bank Standard Chartered Bank 7, Changi Business Park Cresent, Level 3. Singapore (486028) T : (65) 659 61395 | E adelwin.adel...@sc.com From: jug-indonesia@yahoogroups.com [mailto:jug-indone...@yahoogroups.com] On Behalf Of Jecki Sent: Thursday, May 27, 2010 4:18 PM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For 2010/5/27 Niksen Harjanto milis.java.ko...@gmail.com mailto:milis.java.kodok%40gmail.com rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? benul, alias benar-benar betul. bisa juga gini: for (int x=0, y = table.getRowCount(); xy; x++) { // bla bla bla } biar tetep efisien dan scope dari variable tetep sekecil mungkin. makasih This email and any attachments are confidential and may also be privileged. If you are not the addressee, do not disclose, copy, circulate or in any other way use or rely on the information contained in this email or any attachments. If received in error, notify the sender immediately and delete this email and any attachments from your system. Emails cannot be guaranteed to be secure or error free as the message and any attachments could be intercepted, corrupted, lost, delayed, incomplete or amended. Standard Chartered PLC and its subsidiaries do not accept liability for damage caused by this email or any attachments and may monitor email traffic. Standard Chartered PLC is incorporated in England with limited liability under company number 966425 and has its registered office at 1 Aldermanbury Square, London, EC2V 7SB. Standard Chartered Bank (SCB) is incorporated in England with limited liability by Royal Charter 1853, under reference ZC18. The Principal Office of SCB is situated in England at 1 Aldermanbury Square, London EC2V 7SB. In the United Kingdom, SCB is authorised and regulated by the Financial Services Authority under FSA register number 114276. If you are receiving this email from SCB outside the UK, please click http://www.standardchartered.com/global/email_disclaimer.html to refer to the information on other jurisdictions. -- salam hangat, Thomas Wiradikusuma Twitter: http://www.twitter.com/wiradikusuma Blog: http://www.jroller.com/wiradikusuma
Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ???
ok udah saya ganti dengan for (Iterator it = mp.getMap(). entrySet. iterator( ); it.hasNext() ; ) { Map.Entry entry = (Map.Entry) it.next(); // do what you want to do with entry} tetepi for (Iterator it = mp.getMap(). entrySet. iterator( ); it.hasNext() ; ) selalu menyisakan 1 element sisa berisi null tp udah saya atasi.. dan saya belum coba memakai JDK 1.5 ke bawah. tar kalau uda oke saya post lagi result nya thanks atas semua info2 nya... Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290 --- Pada Kam, 27/5/10, Nanda Firdausi nanda.firda...@gmail.com menulis: Dari: Nanda Firdausi nanda.firda...@gmail.com Judul: Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ??? Kepada: jug-indonesia@yahoogroups.com Tanggal: Kamis, 27 Mei, 2010, 11:16 AM Tetap saja jangan campur adukkan for 0-size dengan nextnya iterator. Praktek yang sungguh tidak baik. Kalau mau jalan di 1.4 coba ini: for (Iterator it = mp.getMap(). entrySet. iterator( ); it.hasNext() ; ) { Map.Entry entry = (Map.Entry) it.next(); // do what you want to do with entry} -- Nanda Firdausi Muhammad http://satukubik. com 2010/5/26 ivan prasetia iphan_zeke_boy@ yahoo.co. id bukan campur aduk codenya emang cmn potongan eheheheh... for (Map.Entry entry : mp.getMap(). entrySet( )) { // do what you want to do with entry} untuk code di atas uda generic... misal di implement di JDK di bawah 1.5 tidak bisa.. makanya saya buat yg model lama... anyway thanks info nya ... Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290 --- Pada Rab, 26/5/10, Nanda Firdausi nanda.firdausi@ gmail.com menulis: Dari: Nanda Firdausi nanda.firdausi@ gmail.com Judul: Re: [JUG-Indonesia] Tanya Map di JDK 1.5 ??? Kepada: jug-indonesia@ yahoogroups. com Tanggal: Rabu, 26 Mei, 2010, 9:19 PM Saya ga tahu dimana salahnya. Tapi kode Anda campur aduk. Ada for 0 - size dicampur iterator. Kalau boleh saran coba kodenya diganti seperti ini: for (Map.Entry entry : mp.getMap(). entrySet( )) { // do what you want to do with entry} -- Nanda Firdausi Muhammad http://satukubik. com 2010/5/26 ivan prasetia iphan_zeke_boy@ yahoo.co. id hi all, mau tanya nih... potongan code: Iterator keyValuePairs1 = mp.getMap(). entrySet( ).iterator( ); for (int i = 0; i mp.getMap(). size(); i++) { Map.Entry entry = (Map.Entry) keyValuePairs1. next(); waktu saya jalanin pakai JDK 1.5 terjadi exception nosuchelement. . eror di Map.Entry nya tetapi saya ganti JDK 1.6 berjalan mulus Kenapa yah ? mohon petunjuknya. . Thanks. Ivan Prasetia Java Developer PT Aprisma Indonesia Sequiz Plaza 12th floor Jl Jend Sudirman Kav 25 Jakarta 12290
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Setuju banget, lupakanlah hal2 kecil seperti ini. Saran nya lebih focus ke arah easy to maintaince dan easy to read. program banyak makan resource?, beli memory solusinya. program ingin lebih cepet?, upgrade server saja. Program ingin minimalize bug?, Itu priceless. Thx, Edwin Powered by Telkomsel BlackBerry® -Original Message- From: Samuel Franklyn sfrank...@gmail.com Sender: jug-indonesia@yahoogroups.com Date: Thu, 27 May 2010 17:49:33 To: jug-indonesia@yahoogroups.com Reply-To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For On 5/27/2010 3:08 PM, Niksen Harjanto wrote: rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? Nggak benar. Kecuali lu sudah baca source code dari getRowCount. Bisa saja implementasi dari getRowCount menggunakan cache. Kalau implementasinya menggunakan cache maka overheadnya cuma method call overhead saja dan sangat kecil. Niksen sekedar nasihat. Pertanyaan kamu menunjukkan kamu terlalu terobsesi dengan kecepatan. Ini obsesi yang berbahaya. Percaya deh lama-lama kamu akan ketemu batunya dan menyesali obsesi kamu. Donald Knuth salah satu empu para programmer bilang begini: We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/27 Andrian Kurniady andr...@kurniady.net Banyak programmer yang kalau nulis comparison string dengan constant begini if (blah.equals(myString)) ... rather than if (myString.equals(blah)) ... Tanya kenapa... :-) Haha, seringkali disebut Yoda Conditions: Using if(constant == variable) instead of if(variable == constant), like if(4 == foo). Because it's like saying if blue is the sky or if tall is the man. :D -- Arie Karhendana
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/27 Hendry Luk hendrym...@gmail.com Gak tau kalo di java.. tapi di .net cara 1 lebih efisien. First of all, kalo lu akses array/list pake cara 1, compiler gak bakal produce loop block yang terus2an manggil Count() di tiap iteration, melainkan bakal pake temporary variable, exactly the same kayak kalo lu tulis pake cara 2. Jadi lu gak gain anything dengan nulis pake cara 2. Gw gak ngerti .NET, tapi rasanya ada yang janggal sama statement ini. Bisa kasih reference? Kalau itu adalah array maka masih ada kemungkinan karena sifat array yang immutable dan merupakan language construct yang out of the shelf di-support oleh programming language, dalam arti sangat mungkin mendapat perlakuan khusus. Kalau itu adalah List maka kemungkinannya berkurang karena List itu hanya interface dan implementasinya bisa macem-macem. Berarti si compiler musti tau implementasi List apa yang lagi dipakai, kemudian analisa apakah misalnya list.size() dari implementasi tersebut tidak melakukan perubahan yang menyebabkan pemanggilan list.size() berikutnya berubah nilainya. Kalau compiler dengan seenaknya mengasumsi bahwa list.size() cukup dipanggil sekali dan mengubah logic program dari cara 1 ke cara 2 (seperti yang di-post oleh TS) betapa ngerinya itu karena optimization yang dilakukan malah mengubah logic program. Kalau sampai ini terjadi sih berarti This compiler optimization is root of all evil. Setau saya yang namanya block program: for (initial value:condition:incrementor) { } itu bagian condition akan dipanggil setiap kali perulangan loop terjadi. Bahkan kelebihan sekali. Coba contoh kode berikut: [code] public class App { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3, 4, 5}; for (int i = 0; i getSize(arr); i++) { // do nothing } } public static int getSize(int[] arr) { System.out.println(You've just called getSize(int[])); return arr.length; } } [/code] itu akan print You've just called getSize(int[]) sebanyak 6 kali, atau N+1. Kalau ada compiler yang mencoba optimasi dan nge-print You've just called getSize(int[]) sekali doang then that compiler is totally a crap. Compiler optimization should not change program's logic. Ya ya ini ga signifikan. Cuma dipanggil 6 kali dan mungkin bedanya cuma 2 CPU cycle tiap kali pemanggilan. But if you're processing in bulk this might you more time. Intinya ga cuma masalah performance tapi sebagai developer musti tau yang mana yang optimized. Ya memang kita bukan selevel tukang bikin compiler. Tapi tau cara2 optimasi primitif (primitif di sini maksudnya pake mata aja uda keliatan kalo yang satu lebih cepet dari yang laen) kan ga ada salahnya. Biarlah developer compiler yang mikirin optimasi yang njelimet dan perlu analisa yang lebih dalam. Second of all, lu mesti tau bahwa saat lu akses content dari array ato list, ada routine di runtime buat ngecek apakah lu berusaha ngakses index yang di luar array/list tersebut, in which case lu bakal dapet IndexOutOfBoundException. Kalo lu tulis pake cara 1, compiler lu bakal conclude bahwa code block lu dah safe, sehingga compiler bakal optimise the code dengan erase routine yang anticipates index-out-of-bound situation. Hasilnya, gak cuma lu dapet compiled code yang sama dengan cara 2, tapi juga code lu dioptimised dengan ngebuang routine2 yang gak applicable dengan situasi lu. Ya di java juga ada pengecekan IndexOutOfBoundException. Tapi bisa sertakan reference kalau pengecekan IndexOutOfBoundException akan di-skip kalau pake cara 1? Kalau untuk array sekali lagi sangat besar kemungkinannya compiler melakukan optimization seperti itu. Tapi kalau untuk List (yang implementasinya bisa macem-macem) koq rasa-rasanya kemungkinannya kecil ya? Foreach syntax, for(xx: list), is even better. Bisa jadi, terutama untuk tipe data array. Mungkin ada yang bisa berikan pembuktian di sini? Again, gw gak tau di java, all those are true in .net. Tapi moral of this story adalah, jangan try too hard buat optimise your code dengan ngeja word-by-word pake smart fine-tuned instructions. Compiler dan jdk ditulis oleh very very smart people, dan sangat jarang lu bisa nulis java code yang outsmarts them. Most of the time optimisation attempt lu actually makes it worse. Modern language increasingly ngasih more and more syntatic sugars yang bikin code lu makin high-level dan declarative (e.g. syntax kayak for-each, closure, Linq, Parallel/PLinq, dynamic, auto-property, etc), tujuannya *bukan* semata2 buat bikin programmers write less. Melainkan, language abstraction ini plays an important role buat ngasih penulis compiler enough flexibility buat produce optimised solution dari code lu. Agree. Kalo lu bypass abstraction ini, dan lengsung terjun low-level nge-dikte code lu dengan specific instructions, lu justru gak ngasih compiler lu
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/27 Andrian Kurniady andr...@kurniady.net Coding practice, misal: Banyak programmer yang kalau nulis comparison string dengan constant begini if (blah.equals(myString)) ... rather than if (myString.equals(blah)) ... Cuma mau komen soal ini. Kalau model pertama itu null-safe, model kedua tidak null-safe. Memang keliatan jelek sih (personal opinion). Tapi memang model pertama tidak akan melemparkan NPE. Kalau mau jadiin model 2 ya musti if (myString != null myString.equals(blah)) Nah dipilih deh yang mana yang anda suka. Kalau gw sendiri kadang pake model pertama (kalau ga pasti model 2 tidak null), kadang model 2 (kalau ud pasti myString ga bakalan null).
[JUG-Indonesia] Facebook dibuat dengan teknologi apa?
Dear Juggers... Ada yang tau gak Facebook itu di bangun dengan teknologi apa? teknologi Java kah? --- http://ayo.ngopi.org
Re: [JUG-Indonesia] Facebook dibuat dengan teknologi apa?
php dicompile dg hiphop backend cassandra dan erlang (chat) yang lain gak tahu .. tambahain silahkan 2010/5/28 Lukman Hakim elh4k...@gmail.com Dear Juggers... Ada yang tau gak Facebook itu di bangun dengan teknologi apa? teknologi Java kah? --- http://ayo.ngopi.org
Re: [JUG-Indonesia] Facebook dibuat dengan teknologi apa?
2010/5/28 Lukman Hakim elh4k...@gmail.com Dear Juggers... Ada yang tau gak Facebook itu di bangun dengan teknologi apa? teknologi Java kah? Untuk front end, pakai PHP (dan modifikasinya. Hiphop, anyone?). Tapi di belakang-belakang ada Java-Java nya: * Hadoop * Cassandra * Hive http://www.facebook.com/notes.php?id=9445547199style=1 -- Arie Karhendana
[JUG-Indonesia] is JavaFX = Java?
blog menarik http://marxsoftware.blogspot.com/2010/05/o-javafx-what-art-thou.html apakah JavaFX itu Java? mirip JavaScript *Is JavaFX Java?* JavaFX certainly has the four letters J-a-v-a in it, but so does JavaScript http://www.w3schools.com/js/default.asp (which is not Javahttp://java.sun.com/ at all). The JavaFX FAQ http://javafx.com/faq/ touts one of JavaFX's advantages being the ability to leverage Java developers' experience and one question/answer in the FAQ http://javafx.com/faq/#1.2 talks about running JavaFX applications on any device with a Java Runtime Environment. kalau JavaFX dibahas di JUG :) artinya JavaScript juga part of JUG :) hua hua ;) -- Frans Thamura Meruvian. Experiential Tempation of Java and Enterprise OpenSource Meruvian jTechnopreneur Program (S1) telah hadir, Dapatkan benefit bagi SMK yang melakukan mapping SKKD, dg program beasiswa dari Gunadarma Mobile: +6287885901958 Blog Profile: http://frans.thamura.info We provide services to migrate your apps to Java (web), in amazing fast and reliable.
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/28 Jecki jecki...@gmail.com: 2010/5/27 Samuel Franklyn sfrank...@gmail.com On 5/27/2010 3:08 PM, Niksen Harjanto wrote: rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? Nggak benar. Kecuali lu sudah baca source code dari getRowCount. Bisa saja implementasi dari getRowCount menggunakan cache. Kalau implementasinya menggunakan cache maka overheadnya cuma method call overhead saja dan sangat kecil. Ga perlu baca source code dari getRowCount juga udah ketauan kalau cara pertama itu cenderung lebih lelet, walaupun mungkin sangat kecil sekali. Kecuali compiler melakukan optimization. Betul lebih lambat akan tetapi lebih lambat berapa persen? Kalau cuma lebih lambat 0.1 % apakah worthed kita menambahkan baris code. Ingat tiap baris code artinya pertambahan effort untuk memelihara aplikasi. Jelas sekali kalau kita tau ada expression yang mustinya bisa dijalankan sekali saja maka sebaiknya dipanggil sekali saja dan disimpan di variable. Kecuali kasusnya adalah table.getRowCount() itu berubah-ubah nilainya, kalau ini sih memang harus dipanggil tiap kali iterasi. Niksen sekedar nasihat. Pertanyaan kamu menunjukkan kamu terlalu terobsesi dengan kecepatan. Ini obsesi yang berbahaya. Percaya deh lama-lama kamu akan ketemu batunya dan menyesali obsesi kamu. Terobsesi memang ada sisi baik dan buruknya. Tapi belajar memahami apa yang baik dan tidak itu tidak ada salahnya. Lama-lama juga bosen sendiri optimize hal2 seperti ini. Atau kalau sudah jadi habit malah ga kepikiran sama sekali tau-tau codingnya udah optimized. Memahami cara kerja library itu bagus. Tapi apa yang dilakukan oleh Niksen adalah micro optimization. Dari pengalaman gua micro optimization itu distract seseorang dari the bigger picture. Donald Knuth salah satu empu para programmer bilang begini: We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize Ga ada salah sama statement Donald Knuth. Maksud dia baik. Jangan optimize terlalu dini. Jangan over optimize sesuatu yang belum tentu tidak optimized. Tapi di sisi lain ada orang yang tipenya ga mau tau soal optimasi sama sekali. Coding maen hajar bleh, terus berlindung di balik statement Donald Knuth Premature optimization is the root of all evil. Sampai satu titik kita musti optimasi. Nah bingung deh kalo udah gini. Nggak pernah kejadian tuh sama gua. Pada saat gua butuh melakukan optimisasi biasanya itu cuma perlu dilakukan di 1 atau 2 titik saja. Itu karena gua fokus membuat aplikasi yang semodular mungkin. Kalau ada bagian aplikasi yang lambat maka itu akan terkonsentrasi di 1 atau 2 titik saja. Orang dulu bilang sedikit-sedikit lama-lama menjadi bukit. Kalo hanya ada 1 baris code yang tidak optimize seperti contoh di atas mungkin tidak terlalu banyak impact. Tapi kalau ada seribu baris seperti di atas, tersebar di ratusan source files, akhirnya mempengaruhi performance bukannya tambah repot. Ini juga pernyataan yang kelihatannya bagus akan tetapi tidak benar dalam praktek. Dalam praktek yang sudah saya tekuni selama belasan tahun maka saya temui yang namanya bottle neck itu tidak pernah tersebar diberbagai tempat. Seperti namanya bottle neck itu senantiasa terkonsentrasi di 1 atau 2 titik saja. Performance yang tinggi itu bagi saya adalah menghilangkan semua bottle neck dan memberikan kesan aplikasi responsif kepada user. Kalau dalam aplikasi tidak ada bottle neck maka begitu resource hardware atau network dinaikkan maka aplikasi akan langsung naik performancenya. Aplikasi yang senantiasa memberikan feed back ke user juga memberikan kesan lebih cepat padahal adanya code untuk feedback itu sebenarnya memperlambat kerja aplikasi. Intinya sih sebagai developer musti ngerti lah do's and don'ts programming dari berbagai aspek. Kalau tau hal2 kecil kaya gini bisa mempengaruhi performance (walaupun musti muncul beribu kali dulu baru berasa) ya lakukan dengan benar. Bedakan isu memahami cara kerja library dengan isu melakukan micro optimization di mana-mana. Memahami cara kerja libray bagus dan perlu. Melakukan micro opt dimana-mana itu nggak bagus.
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Btw jangan confuse compiler here as java/c# sebagai IL/bytecode compiler. Compiler disini mostly refers to JIT compiler 2010/5/28 Hendry Luk hendrym...@gmail.com Agak susah googlenya, tapi ini contoh yg gw dapet dari quick google: http://blogs.msdn.com/b/brada/archive/2005/04/23/411321.aspx In this case, itu adalah array. Tapi nothing is stopping them buat erase out-of-bound checking as long as lu pake pake framework classes mereka (List, ArrayList, Hashmap, Tables etc), ato even your own derived classes yang gak override default Count() behavior. Optimisation bisa at compile time maupun at runtime. Contoh laen adalah if-else block. Kalo method lu ada if-else dalam sebuah method berdasarkan parameter condition tertentu, compiler lu kadang bakal produce 2 (or more) separate methods, each one buat handle kondisi parameter tertentu (jika kondisi ini bisa diderive at compile/JIT time), jadi if-else block lu bakal completely dihapus. Hence, at runtime, if-else statement lu gak pernah diexecute sama sekali. Ini adalah the fundamental difference between managed code dan unmanaged. Di managed code, what you see isnt necessarily what you get. Intinya adalah, use framework classes the way they're intended to be used, instead of pake clever MacGyver tricks buat outsmart the framework, karna chances are, framework designer lu udah meng-optimise specifically for common usage pattern. Jadi ikutin ajah the recommended usage pattern, gak perlu think too hard buat optimise pake strange way. 2010/5/28 Jecki jecki...@gmail.com 2010/5/27 Hendry Luk hendrym...@gmail.com hendrymail%40gmail.com Gak tau kalo di java.. tapi di .net cara 1 lebih efisien. First of all, kalo lu akses array/list pake cara 1, compiler gak bakal produce loop block yang terus2an manggil Count() di tiap iteration, melainkan bakal pake temporary variable, exactly the same kayak kalo lu tulis pake cara 2. Jadi lu gak gain anything dengan nulis pake cara 2. Gw gak ngerti .NET, tapi rasanya ada yang janggal sama statement ini. Bisa kasih reference? Kalau itu adalah array maka masih ada kemungkinan karena sifat array yang immutable dan merupakan language construct yang out of the shelf di-support oleh programming language, dalam arti sangat mungkin mendapat perlakuan khusus. Kalau itu adalah List maka kemungkinannya berkurang karena List itu hanya interface dan implementasinya bisa macem-macem. Berarti si compiler musti tau implementasi List apa yang lagi dipakai, kemudian analisa apakah misalnya list.size() dari implementasi tersebut tidak melakukan perubahan yang menyebabkan pemanggilan list.size() berikutnya berubah nilainya. Kalau compiler dengan seenaknya mengasumsi bahwa list.size() cukup dipanggil sekali dan mengubah logic program dari cara 1 ke cara 2 (seperti yang di-post oleh TS) betapa ngerinya itu karena optimization yang dilakukan malah mengubah logic program. Kalau sampai ini terjadi sih berarti This compiler optimization is root of all evil. Setau saya yang namanya block program: for (initial value:condition:incrementor) { } itu bagian condition akan dipanggil setiap kali perulangan loop terjadi. Bahkan kelebihan sekali. Coba contoh kode berikut: [code] public class App { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3, 4, 5}; for (int i = 0; i getSize(arr); i++) { // do nothing } } public static int getSize(int[] arr) { System.out.println(You've just called getSize(int[])); return arr.length; } } [/code] itu akan print You've just called getSize(int[]) sebanyak 6 kali, atau N+1. Kalau ada compiler yang mencoba optimasi dan nge-print You've just called getSize(int[]) sekali doang then that compiler is totally a crap. Compiler optimization should not change program's logic. Ya ya ini ga signifikan. Cuma dipanggil 6 kali dan mungkin bedanya cuma 2 CPU cycle tiap kali pemanggilan. But if you're processing in bulk this might you more time. Intinya ga cuma masalah performance tapi sebagai developer musti tau yang mana yang optimized. Ya memang kita bukan selevel tukang bikin compiler. Tapi tau cara2 optimasi primitif (primitif di sini maksudnya pake mata aja uda keliatan kalo yang satu lebih cepet dari yang laen) kan ga ada salahnya. Biarlah developer compiler yang mikirin optimasi yang njelimet dan perlu analisa yang lebih dalam. Second of all, lu mesti tau bahwa saat lu akses content dari array ato list, ada routine di runtime buat ngecek apakah lu berusaha ngakses index yang di luar array/list tersebut, in which case lu bakal dapet IndexOutOfBoundException. Kalo lu tulis pake cara 1, compiler lu bakal conclude bahwa code block lu dah safe, sehingga compiler bakal optimise the code dengan erase routine yang anticipates index-out-of-bound situation. Hasilnya, gak cuma lu dapet compiled code yang sama dengan cara 2, tapi juga code lu dioptimised dengan ngebuang routine2 yang gak applicable dengan situasi lu.
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Oia g lupa.. G gak ngerti .net Tapi g ngerti java Hahaha Gini.. Kalo ada 2 thread... 1 thread evaluate the list.. Dan ada 1 thread lagi yang attempt to modify the list... Ntar pasti keluar exception G pernah nih... Attempting to modify a list which is currently being evaluated. Kalo gak salah gitu deh.. Dengan kata laen.. Seharusnya sih thread-safe G belom pernah baca code nya java-collection sih Adelwin Handoyo - adel...@gmail.com - Sent from my Mac From: Jecki Go jecki...@gmail.com Reply-To: JUG-Indonesia jug-indonesia@yahoogroups.com Date: Fri, 28 May 2010 11:01:02 +0800 To: JUG-Indonesia jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For 2010/5/27 Hendry Luk hendrym...@gmail.com Gak tau kalo di java.. tapi di .net cara 1 lebih efisien. First of all, kalo lu akses array/list pake cara 1, compiler gak bakal produce loop block yang terus2an manggil Count() di tiap iteration, melainkan bakal pake temporary variable, exactly the same kayak kalo lu tulis pake cara 2. Jadi lu gak gain anything dengan nulis pake cara 2. Gw gak ngerti .NET, tapi rasanya ada yang janggal sama statement ini. Bisa kasih reference? Kalau itu adalah array maka masih ada kemungkinan karena sifat array yang immutable dan merupakan language construct yang out of the shelf di-support oleh programming language, dalam arti sangat mungkin mendapat perlakuan khusus. Kalau itu adalah List maka kemungkinannya berkurang karena List itu hanya interface dan implementasinya bisa macem-macem. Berarti si compiler musti tau implementasi List apa yang lagi dipakai, kemudian analisa apakah misalnya list.size() dari implementasi tersebut tidak melakukan perubahan yang menyebabkan pemanggilan list.size() berikutnya berubah nilainya. Kalau compiler dengan seenaknya mengasumsi bahwa list.size() cukup dipanggil sekali dan mengubah logic program dari cara 1 ke cara 2 (seperti yang di-post oleh TS) betapa ngerinya itu karena optimization yang dilakukan malah mengubah logic program. Kalau sampai ini terjadi sih berarti This compiler optimization is root of all evil. Setau saya yang namanya block program: for (initial value:condition:incrementor) { } itu bagian condition akan dipanggil setiap kali perulangan loop terjadi. Bahkan kelebihan sekali. Coba contoh kode berikut: [code] public class App { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3, 4, 5}; for (int i = 0; i getSize(arr); i++) { // do nothing } } public static int getSize(int[] arr) { System.out.println(You've just called getSize(int[])); return arr.length; } } [/code] itu akan print You've just called getSize(int[]) sebanyak 6 kali, atau N+1. Kalau ada compiler yang mencoba optimasi dan nge-print You've just called getSize(int[]) sekali doang then that compiler is totally a crap. Compiler optimization should not change program's logic. Ya ya ini ga signifikan. Cuma dipanggil 6 kali dan mungkin bedanya cuma 2 CPU cycle tiap kali pemanggilan. But if you're processing in bulk this might you more time. Intinya ga cuma masalah performance tapi sebagai developer musti tau yang mana yang optimized. Ya memang kita bukan selevel tukang bikin compiler. Tapi tau cara2 optimasi primitif (primitif di sini maksudnya pake mata aja uda keliatan kalo yang satu lebih cepet dari yang laen) kan ga ada salahnya. Biarlah developer compiler yang mikirin optimasi yang njelimet dan perlu analisa yang lebih dalam. Second of all, lu mesti tau bahwa saat lu akses content dari array ato list, ada routine di runtime buat ngecek apakah lu berusaha ngakses index yang di luar array/list tersebut, in which case lu bakal dapet IndexOutOfBoundException. Kalo lu tulis pake cara 1, compiler lu bakal conclude bahwa code block lu dah safe, sehingga compiler bakal optimise the code dengan erase routine yang anticipates index-out-of-bound situation. Hasilnya, gak cuma lu dapet compiled code yang sama dengan cara 2, tapi juga code lu dioptimised dengan ngebuang routine2 yang gak applicable dengan situasi lu. Ya di java juga ada pengecekan IndexOutOfBoundException. Tapi bisa sertakan reference kalau pengecekan IndexOutOfBoundException akan di-skip kalau pake cara 1? Kalau untuk array sekali lagi sangat besar kemungkinannya compiler melakukan optimization seperti itu. Tapi kalau untuk List (yang implementasinya bisa macem-macem) koq rasa-rasanya kemungkinannya kecil ya? Foreach syntax, for(xx: list), is even better. Bisa jadi, terutama untuk tipe data array. Mungkin ada yang bisa berikan pembuktian di sini? Again, gw gak tau di java, all those are true in .net. Tapi moral of this story adalah, jangan try too hard buat optimise your code dengan ngeja word-by-word pake smart fine-tuned instructions. Compiler dan jdk ditulis oleh very very smart people, dan sangat jarang lu bisa nulis java code yang outsmarts them. Most of the time optimisation attempt lu actually makes it worse. Modern language increasingly ngasih more
Re: [JUG-Indonesia] Facebook dibuat dengan teknologi apa?
Setau sy pake PHP, di-enhance pake memchached. :) (CMIIW) From: Lukman Hakim elh4k...@gmail.com To: jug-indonesia@yahoogroups.com Sent: Fri, 28 May, 2010 11:15:27 Subject: [JUG-Indonesia] Facebook dibuat dengan teknologi apa? Dear Juggers... Ada yang tau gak Facebook itu di bangun dengan teknologi apa? teknologi Java kah? --- http://ayo.ngopi. org
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Hahahahha Yoda conditions... Bener sekali... Hahahahha Mungkin yang bikin character yoda ituh dulu juga programmer kali yah :p Hahahahhaah Adelwin Handoyo - adel...@gmail.com - Sent from my Mac From: Arie K arie.karhend...@gmail.com Reply-To: JUG-Indonesia jug-indonesia@yahoogroups.com Date: Fri, 28 May 2010 09:42:54 +0700 To: JUG-Indonesia jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For 2010/5/27 Andrian Kurniady andr...@kurniady.net Banyak programmer yang kalau nulis comparison string dengan constant begini if (blah.equals(myString)) ... rather than if (myString.equals(blah)) ... Tanya kenapa... :-) Haha, seringkali disebut Yoda Conditions: Using if(constant == variable) instead of if(variable == constant), like if(4 == foo). Because it's like saying if blue is the sky or if tall is the man. :D -- Arie Karhendana Buktikan Anda peduli pendidikan Indonesia. Dukung Kurikulum SMK berJava.. kirimkan surat resmi perusahaan dukungan ke moderator JUG. === 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] Pertanyaan Newbie Tentang Looping For
Agak susah googlenya, tapi ini contoh yg gw dapet dari quick google: http://blogs.msdn.com/b/brada/archive/2005/04/23/411321.aspx In this case, itu adalah array. Tapi nothing is stopping them buat erase out-of-bound checking as long as lu pake pake framework classes mereka (List, ArrayList, Hashmap, Tables etc), ato even your own derived classes yang gak override default Count() behavior. Optimisation bisa at compile time maupun at runtime. Contoh laen adalah if-else block. Kalo method lu ada if-else dalam sebuah method berdasarkan parameter condition tertentu, compiler lu kadang bakal produce 2 (or more) separate methods, each one buat handle kondisi parameter tertentu (jika kondisi ini bisa diderive at compile/JIT time), jadi if-else block lu bakal completely dihapus. Hence, at runtime, if-else statement lu gak pernah diexecute sama sekali. Ini adalah the fundamental difference between managed code dan unmanaged. Di managed code, what you see isnt necessarily what you get. Intinya adalah, use framework classes the way they're intended to be used, instead of pake clever MacGyver tricks buat outsmart the framework, karna chances are, framework designer lu udah meng-optimise specifically for common usage pattern. Jadi ikutin ajah the recommended usage pattern, gak perlu think too hard buat optimise pake strange way. 2010/5/28 Jecki jecki...@gmail.com 2010/5/27 Hendry Luk hendrym...@gmail.com hendrymail%40gmail.com Gak tau kalo di java.. tapi di .net cara 1 lebih efisien. First of all, kalo lu akses array/list pake cara 1, compiler gak bakal produce loop block yang terus2an manggil Count() di tiap iteration, melainkan bakal pake temporary variable, exactly the same kayak kalo lu tulis pake cara 2. Jadi lu gak gain anything dengan nulis pake cara 2. Gw gak ngerti .NET, tapi rasanya ada yang janggal sama statement ini. Bisa kasih reference? Kalau itu adalah array maka masih ada kemungkinan karena sifat array yang immutable dan merupakan language construct yang out of the shelf di-support oleh programming language, dalam arti sangat mungkin mendapat perlakuan khusus. Kalau itu adalah List maka kemungkinannya berkurang karena List itu hanya interface dan implementasinya bisa macem-macem. Berarti si compiler musti tau implementasi List apa yang lagi dipakai, kemudian analisa apakah misalnya list.size() dari implementasi tersebut tidak melakukan perubahan yang menyebabkan pemanggilan list.size() berikutnya berubah nilainya. Kalau compiler dengan seenaknya mengasumsi bahwa list.size() cukup dipanggil sekali dan mengubah logic program dari cara 1 ke cara 2 (seperti yang di-post oleh TS) betapa ngerinya itu karena optimization yang dilakukan malah mengubah logic program. Kalau sampai ini terjadi sih berarti This compiler optimization is root of all evil. Setau saya yang namanya block program: for (initial value:condition:incrementor) { } itu bagian condition akan dipanggil setiap kali perulangan loop terjadi. Bahkan kelebihan sekali. Coba contoh kode berikut: [code] public class App { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3, 4, 5}; for (int i = 0; i getSize(arr); i++) { // do nothing } } public static int getSize(int[] arr) { System.out.println(You've just called getSize(int[])); return arr.length; } } [/code] itu akan print You've just called getSize(int[]) sebanyak 6 kali, atau N+1. Kalau ada compiler yang mencoba optimasi dan nge-print You've just called getSize(int[]) sekali doang then that compiler is totally a crap. Compiler optimization should not change program's logic. Ya ya ini ga signifikan. Cuma dipanggil 6 kali dan mungkin bedanya cuma 2 CPU cycle tiap kali pemanggilan. But if you're processing in bulk this might you more time. Intinya ga cuma masalah performance tapi sebagai developer musti tau yang mana yang optimized. Ya memang kita bukan selevel tukang bikin compiler. Tapi tau cara2 optimasi primitif (primitif di sini maksudnya pake mata aja uda keliatan kalo yang satu lebih cepet dari yang laen) kan ga ada salahnya. Biarlah developer compiler yang mikirin optimasi yang njelimet dan perlu analisa yang lebih dalam. Second of all, lu mesti tau bahwa saat lu akses content dari array ato list, ada routine di runtime buat ngecek apakah lu berusaha ngakses index yang di luar array/list tersebut, in which case lu bakal dapet IndexOutOfBoundException. Kalo lu tulis pake cara 1, compiler lu bakal conclude bahwa code block lu dah safe, sehingga compiler bakal optimise the code dengan erase routine yang anticipates index-out-of-bound situation. Hasilnya, gak cuma lu dapet compiled code yang sama dengan cara 2, tapi juga code lu dioptimised dengan ngebuang routine2 yang gak applicable dengan situasi lu. Ya di java juga ada pengecekan IndexOutOfBoundException. Tapi bisa sertakan reference kalau pengecekan IndexOutOfBoundException akan di-skip kalau pake cara 1? Kalau untuk
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
Cepetan baca code nya sih ketimbang bikin program lalu debug Hahahhahahaha Adelwin Handoyo - adel...@gmail.com - Sent from my Mac From: Thomas Wiradikusuma (milis) wiradikusuma.mi...@gmail.com Reply-To: JUG-Indonesia jug-indonesia@yahoogroups.com Date: Fri, 28 May 2010 10:23:35 +0800 To: JUG-Indonesia jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For Buset ngapain lo sentuh2 source codenya win, kan bisa tempel breakpoint atau pake profiler yg include JDK. On 5/27/10, Adelwin, Adelwin adelwin.adel...@sc.com wrote: Kalo menurut gue.. betul dan salah... Gimana membuktikan nya... Gini... JTable ituh bagian dari JDK... Compile ulang... Tambahin some debugging line di table.getRowCount... Jalanin for loop nya... Liat debugging line di table.getRowCount ituh jalan melulu ato enggak... G jamin Cuma jalan sekali... Waktu pertama kali masuk loop nya... G udah coba debug... Die kagak jalanin table.getRowCount terus2an tiap iteration... Sekali doang... Betul bahwa nomor 2 ituh baik... Tapi sebenernya 2-2 nya sama ajah... Oia... g nyoba nya pake list.getSize Males bikin qhole swing interface Adelwin Handoyo | Senior Consultant - Wholesale Bank Standard Chartered Bank 7, Changi Business Park Cresent, Level 3. Singapore (486028) T : (65) 659 61395 | E adelwin.adel...@sc.com From: jug-indonesia@yahoogroups.com [mailto:jug-indone...@yahoogroups.com] On Behalf Of Jecki Sent: Thursday, May 27, 2010 4:18 PM To: jug-indonesia@yahoogroups.com Subject: Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For 2010/5/27 Niksen Harjanto milis.java.ko...@gmail.com mailto:milis.java.kodok%40gmail.com rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang lebih baik, alasan teknisnya kenapa? Mis saya punya JTable, mau dilooping untuk baca datanya. Cara 1 (cara yang simple) : int x; for (x=0; xtable.getRowCount(); x++) { bla bla bla } Cara 2 (IMHO lebih efisen) : int x; int y; y = table.getRowCount(); for (x=0; xy; x++) { bla bla bla } Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x table.getRowCount(). Soalnya di dalem function getRowCount pasti ada banyak statement untuk dapetin jumlah row, yang akan dieksekusi terus2an selama looping. Sedang no 2, function getRowCount() cuma dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan variable int. bener ga sih analisa gw? benul, alias benar-benar betul. bisa juga gini: for (int x=0, y = table.getRowCount(); xy; x++) { // bla bla bla } biar tetep efisien dan scope dari variable tetep sekecil mungkin. makasih This email and any attachments are confidential and may also be privileged. If you are not the addressee, do not disclose, copy, circulate or in any other way use or rely on the information contained in this email or any attachments. If received in error, notify the sender immediately and delete this email and any attachments from your system. Emails cannot be guaranteed to be secure or error free as the message and any attachments could be intercepted, corrupted, lost, delayed, incomplete or amended. Standard Chartered PLC and its subsidiaries do not accept liability for damage caused by this email or any attachments and may monitor email traffic. Standard Chartered PLC is incorporated in England with limited liability under company number 966425 and has its registered office at 1 Aldermanbury Square, London, EC2V 7SB. Standard Chartered Bank (SCB) is incorporated in England with limited liability by Royal Charter 1853, under reference ZC18. The Principal Office of SCB is situated in England at 1 Aldermanbury Square, London EC2V 7SB. In the United Kingdom, SCB is authorised and regulated by the Financial Services Authority under FSA register number 114276. If you are receiving this email from SCB outside the UK, please click http://www.standardchartered.com/global/email_disclaimer.html to refer to the information on other jurisdictions. -- salam hangat, Thomas Wiradikusuma Twitter: http://www.twitter.com/wiradikusuma Blog: http://www.jroller.com/wiradikusuma Buktikan Anda peduli pendidikan Indonesia. Dukung Kurikulum SMK berJava.. kirimkan surat resmi perusahaan dukungan ke moderator JUG. === 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] Pertanyaan Newbie Tentang Looping For
Okay it's valid for array case. But still I don't think it's valid for List. Secara JIT itu di level yang lebih rendah dari Application classes. Sewajarnya tidak ada pengecekan di level JIT yang kira2 seperti ini: if (listClassInUse.instanceOf(java.util.ArrayList)) { // let's optimize this code since it uses our own class } Meskipun hal ini bisa saja dilakukan, tapi koq rasanya aneh ya di layered application platform level yang lebih rendah mengasumsikan sesuatu yang ada di level atasnya. But anyway nice reading. Nice to know that compiler optimize to this level. 2010/5/28 Hendry Luk hendrym...@gmail.com Btw jangan confuse compiler here as java/c# sebagai IL/bytecode compiler. Compiler disini mostly refers to JIT compiler 2010/5/28 Hendry Luk hendrym...@gmail.com Agak susah googlenya, tapi ini contoh yg gw dapet dari quick google: http://blogs.msdn.com/b/brada/archive/2005/04/23/411321.aspx In this case, itu adalah array. Tapi nothing is stopping them buat erase out-of-bound checking as long as lu pake pake framework classes mereka (List, ArrayList, Hashmap, Tables etc), ato even your own derived classes yang gak override default Count() behavior. Optimisation bisa at compile time maupun at runtime. Contoh laen adalah if-else block. Kalo method lu ada if-else dalam sebuah method berdasarkan parameter condition tertentu, compiler lu kadang bakal produce 2 (or more) separate methods, each one buat handle kondisi parameter tertentu (jika kondisi ini bisa diderive at compile/JIT time), jadi if-else block lu bakal completely dihapus. Hence, at runtime, if-else statement lu gak pernah diexecute sama sekali. Ini adalah the fundamental difference between managed code dan unmanaged. Di managed code, what you see isnt necessarily what you get. Intinya adalah, use framework classes the way they're intended to be used, instead of pake clever MacGyver tricks buat outsmart the framework, karna chances are, framework designer lu udah meng-optimise specifically for common usage pattern. Jadi ikutin ajah the recommended usage pattern, gak perlu think too hard buat optimise pake strange way. 2010/5/28 Jecki jecki...@gmail.com 2010/5/27 Hendry Luk hendrym...@gmail.com Gak tau kalo di java.. tapi di .net cara 1 lebih efisien. First of all, kalo lu akses array/list pake cara 1, compiler gak bakal produce loop block yang terus2an manggil Count() di tiap iteration, melainkan bakal pake temporary variable, exactly the same kayak kalo lu tulis pake cara 2. Jadi lu gak gain anything dengan nulis pake cara 2. Gw gak ngerti .NET, tapi rasanya ada yang janggal sama statement ini. Bisa kasih reference? Kalau itu adalah array maka masih ada kemungkinan karena sifat array yang immutable dan merupakan language construct yang out of the shelf di-support oleh programming language, dalam arti sangat mungkin mendapat perlakuan khusus. Kalau itu adalah List maka kemungkinannya berkurang karena List itu hanya interface dan implementasinya bisa macem-macem. Berarti si compiler musti tau implementasi List apa yang lagi dipakai, kemudian analisa apakah misalnya list.size() dari implementasi tersebut tidak melakukan perubahan yang menyebabkan pemanggilan list.size() berikutnya berubah nilainya. Kalau compiler dengan seenaknya mengasumsi bahwa list.size() cukup dipanggil sekali dan mengubah logic program dari cara 1 ke cara 2 (seperti yang di-post oleh TS) betapa ngerinya itu karena optimization yang dilakukan malah mengubah logic program. Kalau sampai ini terjadi sih berarti This compiler optimization is root of all evil. Setau saya yang namanya block program: for (initial value:condition:incrementor) { } itu bagian condition akan dipanggil setiap kali perulangan loop terjadi. Bahkan kelebihan sekali. Coba contoh kode berikut: [code] public class App { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3, 4, 5}; for (int i = 0; i getSize(arr); i++) { // do nothing } } public static int getSize(int[] arr) { System.out.println(You've just called getSize(int[])); return arr.length; } } [/code] itu akan print You've just called getSize(int[]) sebanyak 6 kali, atau N+1. Kalau ada compiler yang mencoba optimasi dan nge-print You've just called getSize(int[]) sekali doang then that compiler is totally a crap. Compiler optimization should not change program's logic. Ya ya ini ga signifikan. Cuma dipanggil 6 kali dan mungkin bedanya cuma 2 CPU cycle tiap kali pemanggilan. But if you're processing in bulk this might you more time. Intinya ga cuma masalah performance tapi sebagai developer musti tau yang mana yang optimized. Ya memang kita bukan selevel tukang bikin compiler. Tapi tau cara2 optimasi primitif (primitif di sini maksudnya pake mata aja uda keliatan kalo yang satu lebih cepet dari yang laen) kan ga ada salahnya. Biarlah developer compiler yang mikirin optimasi yang njelimet dan perlu
Re: [JUG-Indonesia] Pertanyaan Newbie Tentang Looping For
2010/5/28 Samuel Franklyn sfrank...@gmail.com Ga perlu baca source code dari getRowCount juga udah ketauan kalau cara pertama itu cenderung lebih lelet, walaupun mungkin sangat kecil sekali. Kecuali compiler melakukan optimization. Betul lebih lambat akan tetapi lebih lambat berapa persen? Kalau cuma lebih lambat 0.1 % apakah worthed kita menambahkan baris code. Ingat tiap baris code artinya pertambahan effort untuk memelihara aplikasi. Penambahan code 1 baris macam deklarasi variable juga ga berpengaruh banyak sama effort untuk memelihara aplikasi. Setuju kalau optimization jangan sampai membuat aplikasi susah di-maintain. Kasus di atas kan sebenarnya simple, sekali liat langsung tau. Kemudian bisa disarikan jadi best practice. Setelah itu secara otomatis tiap kali tulis code ikutin best practice. Tentunya best practice itu musti yang gampang dilakukan. Jangan yang njelimet dan error-prone. Terobsesi memang ada sisi baik dan buruknya. Tapi belajar memahami apa yang baik dan tidak itu tidak ada salahnya. Lama-lama juga bosen sendiri optimize hal2 seperti ini. Atau kalau sudah jadi habit malah ga kepikiran sama sekali tau-tau codingnya udah optimized. Memahami cara kerja library itu bagus. Tapi apa yang dilakukan oleh Niksen adalah micro optimization. Dari pengalaman gua micro optimization itu distract seseorang dari the bigger picture. OK gw ga tau context-nya dia tanya pertanyaan ini. Apakah untuk optimize code yang sudah ada, yang sudah running well? Atau sekedar mau tau yang mana yang lebih cepat, dan syukur2 dia mau coding kaya gitu ke depannya. Kalau untuk optimize code yang sudah ada sih betul ini micro optimization yang effort-nya mungkin ga akan sebanding dengan peningkatan performance yang akan didapat. Bayangin misal program dia sekarang ada 100 file source. Kemudian harus ubah code yang pattern-nya seperti ini di ke 100 source files tersebut, tapi peningkatan performance cuma misalnya 1%. Ini sama sekali ga worth it. Beda kalau dia mau tau yang mana yang lebih cepat. Sekarang kan dia uda tau tuh cara kedua memang lebih cepat. Setelah itu kalau mau coding ya mustinya tau yang mana yang musti dipilih. Ga ada salah sama statement Donald Knuth. Maksud dia baik. Jangan optimize terlalu dini. Jangan over optimize sesuatu yang belum tentu tidak optimized. Tapi di sisi lain ada orang yang tipenya ga mau tau soal optimasi sama sekali. Coding maen hajar bleh, terus berlindung di balik statement Donald Knuth Premature optimization is the root of all evil. Sampai satu titik kita musti optimasi. Nah bingung deh kalo udah gini. Nggak pernah kejadian tuh sama gua. Pada saat gua butuh melakukan optimisasi biasanya itu cuma perlu dilakukan di 1 atau 2 titik saja. Itu karena gua fokus membuat aplikasi yang semodular mungkin. Kalau ada bagian aplikasi yang lambat maka itu akan terkonsentrasi di 1 atau 2 titik saja. Yah beda lah kalau udah se-level Samuel. Gw percaya banget ama kemampuan lu. Tapi banyak org di luar sana yang coding WORA mirip slogan Java, tapi Write Once Run (far, far, far) Away, alias tabrak lari. Nah buat orang kaya gini nih musti diajarin nulis code secara manusiawi. Orang dulu bilang sedikit-sedikit lama-lama menjadi bukit. Kalo hanya ada 1 baris code yang tidak optimize seperti contoh di atas mungkin tidak terlalu banyak impact. Tapi kalau ada seribu baris seperti di atas, tersebar di ratusan source files, akhirnya mempengaruhi performance bukannya tambah repot. Ini juga pernyataan yang kelihatannya bagus akan tetapi tidak benar dalam praktek. Dalam praktek yang sudah saya tekuni selama belasan tahun maka saya temui yang namanya bottle neck itu tidak pernah tersebar diberbagai tempat. Seperti namanya bottle neck itu senantiasa terkonsentrasi di 1 atau 2 titik saja. Performance yang tinggi itu bagi saya adalah menghilangkan semua bottle neck dan memberikan kesan aplikasi responsif kepada user. Kalau dalam aplikasi tidak ada bottle neck maka begitu resource hardware atau network dinaikkan maka aplikasi akan langsung naik performancenya. Aplikasi yang senantiasa memberikan feed back ke user juga memberikan kesan lebih cepat padahal adanya code untuk feedback itu sebenarnya memperlambat kerja aplikasi. Sekali lagi kasus micro optimization ga mungkin terjadi sama Samuel (please take that as a compliment) Intinya sih sebagai developer musti ngerti lah do's and don'ts programming dari berbagai aspek. Kalau tau hal2 kecil kaya gini bisa mempengaruhi performance (walaupun musti muncul beribu kali dulu baru berasa) ya lakukan dengan benar. Bedakan isu memahami cara kerja library dengan isu melakukan micro optimization di mana-mana. Memahami cara kerja libray bagus dan perlu. Melakukan micro opt dimana-mana itu nggak bagus. Setuju, tapi ada tambahan. Micro optimization kalau: - effort-nya kecil - tidak mempengaruhi kemudahan maintenance aplikasi - sangat mudah dilakukan sebaiknya dijadikan