[JUG-Indonesia] Re: GWT: onFailure

2010-05-27 Terurut Topik Nashroulloh
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

2010-05-27 Terurut Topik Niksen Harjanto
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-05-27 Terurut Topik Jecki
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

2010-05-27 Terurut Topik zulhelmy
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

2010-05-27 Terurut Topik naray citra
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

2010-05-27 Terurut Topik Samuel Franklyn
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

2010-05-27 Terurut Topik joshua sitopul
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

2010-05-27 Terurut Topik Ifnu bima
 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 ???

2010-05-27 Terurut Topik vk_leon
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

2010-05-27 Terurut Topik Andrian Kurniady
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

2010-05-27 Terurut Topik Niksen Harjanto
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

2010-05-27 Terurut Topik Yudhi Karunia Surtan

 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

2010-05-27 Terurut Topik Adelwin, Adelwin
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-05-27 Terurut Topik Jecki
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

2010-05-27 Terurut Topik Adelwin, Adelwin
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 ???

2010-05-27 Terurut Topik ivan prasetia

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

2010-05-27 Terurut Topik Thomas Wiradikusuma (milis)
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 ???

2010-05-27 Terurut Topik ivan prasetia
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

2010-05-27 Terurut Topik bernadus . edwin
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-05-27 Terurut Topik Arie K
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-05-27 Terurut Topik Jecki
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-05-27 Terurut Topik Jecki
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?

2010-05-27 Terurut Topik Lukman Hakim
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-05-27 Terurut Topik Frans Thamura
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-05-27 Terurut Topik Arie K
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?

2010-05-27 Terurut Topik Frans Thamura
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-05-27 Terurut Topik Samuel Franklyn
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

2010-05-27 Terurut Topik Hendry Luk
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

2010-05-27 Terurut Topik Adelwin Handoyo
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?

2010-05-27 Terurut Topik Fahmi Jafar
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

2010-05-27 Terurut Topik Adelwin Handoyo
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

2010-05-27 Terurut Topik Hendry Luk
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

2010-05-27 Terurut Topik Adelwin Handoyo
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

2010-05-27 Terurut Topik Jecki
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-05-27 Terurut Topik Jecki
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