<HTML>
<HEAD>
<title>netbeans.org: NetBeans Weekly News Issue #197 - Apr 25, 2005</title>
<META NAME="description" CONTENT="Newsletter 2005-04-25">

<link rel="stylesheet" type="text/css" href="/netbeans.css">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">

<!-- ====================================================== -->
<!-- Please do not edit this file by hand, it is rebuilt    -->
<!-- automatically and your changes will be lost.  Contact  -->
<!-- webmaster for details.  Rebuilt at                     -->
<!-- #TIMESTAMP# 25-Apr 19:10 CEST                          -->
<!-- ====================================================== -->
</HEAD>
<BODY>

<h1>NetBeans Weekly News<br>Issue #197 - Apr 25, 2005</h1><hr>
NetBeans Weekly News, a newsletter for the NetBeans community<br>
Issue #197 - Apr 25, 2005<br>
URL: &lt;<a href='https://netbeans.org/community/news/newsletter/2005-04-25.html'>https://netbeans.org/community/news/newsletter/2005-04-25.html</a>&gt;<br>
Interested in becoming a newsletter editor?  We're always looking<br>
for editors to help out. Contact <a href='mailto:nbnews_contrib@netbeans.org'>nbnews_contrib@netbeans.org</a><br>
Please send news contributions to <a href='mailto:nbnews_contrib@netbeans.org'>nbnews_contrib@netbeans.org</a><br>
<hr><pre>NetBeans IDE 4.1 Release Candidate Download
Download either NetBeans IDE 4.1 Release Candidate or NetBeans IDE 4.1 RC
/ Sun Java System Application Server PE 8.1 Bundle:
    * &lt;<a href="https://netbeans.org/downloads/index.html">https://netbeans.org/downloads/index.html</a>&gt;
Work done on the 4.1 Release Candidate consists mainly of stabilization of
the core and on performance. We are asking for your help in testing the
release and providing your feedback. We are getting close to the final
release which is scheduled for mid-May. For more information on the
NetBeans 4.1 Release visit:
&lt;<a href="https://netbeans.org/community/releases/41/">https://netbeans.org/community/releases/41/</a>&gt;

NetBeans IDE 4.1 Mobility Release Candidate
The mobility pack release candidate build is now available on NetBeans.org.
    * &lt;<a href="http://services.netbeans.org/downloads/download.php?type=4.1rc1">http://services.netbeans.org/downloads/download.php?type=4.1rc1</a>&gt;
You must have NetBeans IDE 4.1 and the NetBeans Mobility Pack 4.1 installed
before you can start J2ME MIDP development. On the second screen from the
above link you can choose the mobility pack. A good place to get started is:
&lt;<a href="https://netbeans.org/kb/archive/index.html">https://netbeans.org/kb/archive/index.html</a>&gt;

Visual GC for NetBeans IDE
The NetBeans Profiler team has announced the availability of the first
release of module that integrates Visual GC tool with the NetBeans IDE.
Visual GC tool attaches to an instrumented HotSpot JVM and collects and
graphically displays garbage collection, class loader, and HotSpot compiler
performance data. To download the module, see screenshots or get more details,
open this URL:
&lt;<a href="http://profiler.netbeans.org/visualgc/index.html">http://profiler.netbeans.org/visualgc/index.html</a>&gt;

NetBeans Mobility Pack Chat Transcript: Create a MIDP Application
Using Drag 'n' Drop
The transcript of the web chat held on March 29, 2005 featuring Martin
Brehovsky, David Kaspar and Matt Volpi is now available online.
&lt;<a href="http://developers.sun.com/prodtech/javatools/mobility/community/chats/transcript032905.html">http://developers.sun.com/prodtech/javatools/mobility/community/chats/transcript032905.html</a>&gt;

RefactorIT 2.5 Update 7
Aqris Software has released version 2.5 Update 7 of RefactorIT.
Version 2.5 Update 7 integrates seamlessly with version 4.0+ of NetBeans and
it supports CVS mounted file-systems for all its transformations. RefactorIT
fully supports J2SE 5.0 and features numerous improvements on the ever so
popular graphical dependency analyzer.
&lt;<a href="http://www.refactorit.com/?id=5327">http://www.refactorit.com/?id=5327</a>&gt;

NetBeans Needs You - Please Vote!
The Java Developer's Journal, LinuxWorld Magazine, and the Web Services
Journal are holding their annual Readers' Choice awards. NetBeans has been
nominated in all three! Please take a few minutes and vote for your
favorite IDE! The voting period runs through July 31st. Cast your vote for
NetBeans in the following categories of the JDJ awards:
    * Best Java Debugging Tool (Page 8) - NetBeans
    * Best Java IDE Environment (Page 9) - NetBeans/Java Studio Enterprise
&lt;<a href="http://jdj.sys-con.com/general/readerschoice.htm">http://jdj.sys-con.com/general/readerschoice.htm</a>&gt;
Cast your vote for NetBeans at LinuxWorld Magazine awards. NetBeans has been
nominated in the following categories:
    * Best Linux Developer Tool (Page 3) - NetBeans/Java Studio Enterprise
    * Best Linux Programming Environment (Page 10) - NetBeans/Java Studio
      Enterprise
&lt;<a href="http://linux.sys-con.com/general/readerschoice.htm">http://linux.sys-con.com/general/readerschoice.htm</a>&gt;
Last but not least vote for NetBeans at the Web Services Journal:
    * Best Web Services IDE (Page 12) - NetBeans/Java Studio Enterprise
&lt;<a href="http://webservices.sys-con.com/general/readerschoice.htm">http://webservices.sys-con.com/general/readerschoice.htm</a>&gt;

NetBeans Software Day at JavaOne 2005 Conference
On Sunday afternoon, June 26, the day before the 2005 JavaOne Conference, the
NetBeans Software Team is hosting a free companion event. Come and learn from
the experts what's happening with NetBeans IDE. Distinguished speakers include
James Gosling, Tim Bray and more. All attendees will receive a complimentary
copy of the newly published NetBeans IDE Field Guide. You do not need to
attend JavaOne in order to come to NetBeans. Register today:
&lt;<a href="https://netbeans.org/community/articles/javaone/2005/nb-day.html">https://netbeans.org/community/articles/javaone/2005/nb-day.html</a>&gt; </pre><hr>This issue of NetBeans Weekly News was brought to you by Robert Demmer.<br>
The next editor will be Robert Demmer. (New volunteers are welcome!)<br>
Please send news contributions to <a href='mailto:nbnews_contrib@netbeans.org'>nbnews_contrib@netbeans.org</a></BODY>
</HTML>