<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17012213</id><updated>2012-01-31T16:24:05.482-05:00</updated><category term='RCP'/><category term='Perl'/><category term='programming music'/><category term='Java'/><category term='NetBeans'/><category term='Linux'/><category term='Software Development'/><category term='Eclipse'/><category term='Selenium'/><category term='Recactoring'/><category term='Computer Programming'/><title type='text'>Wade Chandler's Programming Blog</title><subtitle type='html'>This is my blog for software programming and development. I am a professional software engineer. I am trying to create my own packages in my spare time. I also contribute to a few open-source applications including &lt;a href="http://www.netbeans.org"&gt;www.netbeans.org&lt;/a&gt; and &lt;a href="http://ireport.sourceforge.net/"&gt;iReport&lt;/a&gt;.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wade Chandler</name><uri>http://www.blogger.com/profile/14769496774355020270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-Oru31XGrzek/TguWoTkbypI/AAAAAAAAAAQ/kwK_bSyPv-8/s220/wadechandler_profile2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17012213.post-8423395470062571983</id><published>2012-01-18T07:22:00.004-05:00</published><updated>2012-01-18T07:26:48.467-05:00</updated><title type='text'>Tell Congress NO on SOPA and PIPA!</title><content type='html'>Tell both parties in Congress NO! This has to stop. We are constantly under assault. Sooner or later the only companies able to have a web site will be multi-billion dollar conglomerates and those related to the media, movies, music, or Government. This is insanity. With these type regulations, eBay and Amazon wouldn't exist, and other companies, such as mine, will be limited in our options online. It is a fact the Internet in its current form contributes hundreds of billions of dollars to the economy. Tell Congress THEY need to be worrying about things which create jobs instead of stifling voices, commerce, and freedom!&lt;br /&gt;&lt;br /&gt;Go to &lt;a href="https://www.google.com/landing/takeaction/"&gt;https://www.google.com/landing/takeaction/&lt;/a&gt; and sign the petition!&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-8423395470062571983?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://www.google.com/landing/takeaction/' title='Tell Congress NO on SOPA and PIPA!'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/8423395470062571983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=8423395470062571983' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8423395470062571983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8423395470062571983'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2012/01/tell-congress-no-on-sopa-and-pipa.html' title='Tell Congress NO on SOPA and PIPA!'/><author><name>Wade Chandler</name><uri>http://www.blogger.com/profile/14769496774355020270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-Oru31XGrzek/TguWoTkbypI/AAAAAAAAAAQ/kwK_bSyPv-8/s220/wadechandler_profile2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-5137812229307323273</id><published>2011-12-21T08:47:00.005-05:00</published><updated>2011-12-21T08:56:32.023-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Programming'/><title type='text'>lwp-request or GET and POST and self signed SSL certificates (HTTPS)</title><content type='html'>I was using the command line last night when I needed to hit one of my pages real quick. I didn't need the output all browser fancy, and I just needed a blurb of text, so I typed GET and the page address plus my credentials. I received an error from down in the bowels of Perl and the LWP::UserAgent library about my certificate not being verified.&lt;br /&gt;&lt;br /&gt;I looked around the Internet, and I saw different posts, but nothing told me exactly what to do. Different peoples solutions were vastly different. So, I looked for the documentation for the LWP libraries, and I found them. There I found the exact solution. The library can be affected by environment variables. The specific one is PERL_LWP_SSL_VERIFY_HOSTNAME. It is a boolean value or 0/1 in Perl. So on the command line I &lt;a href="http://search.cpan.org/perldoc?PERL_LWP_SSL_VERIFY_HOSTNAME" class="podlinkpod"&gt;&lt;/a&gt;simply ran:&lt;br /&gt;&lt;br /&gt;export PERL_LWP_SSL_VERIFY_HOSTNAME=0&lt;br /&gt;&lt;br /&gt;I then reran GET, and everything was good. So, if you run into this problem, then here is your fix. Simple and sweet.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-5137812229307323273?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/5137812229307323273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=5137812229307323273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5137812229307323273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5137812229307323273'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2011/12/lwp-request-or-get-and-post-and-self.html' title='lwp-request or GET and POST and self signed SSL certificates (HTTPS)'/><author><name>Wade Chandler</name><uri>http://www.blogger.com/profile/14769496774355020270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-Oru31XGrzek/TguWoTkbypI/AAAAAAAAAAQ/kwK_bSyPv-8/s220/wadechandler_profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-4198769427712405434</id><published>2011-04-13T10:41:00.018-05:00</published><updated>2011-04-13T14:04:43.902-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='RCP'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Automated Web Testing with Selenium and The NetBeans Rich Client Platform</title><content type='html'>I developed tooling for work I do for Scripps which helps me create Selenium based automated user tests more easily. These are not open source at this time, though that may be possible some day. I might use the ones I have created as an example to make some better for OSS since I have learned lessons along the way.&lt;br /&gt;&lt;br /&gt;This tooling has been built on the NetBeans Rich Client Platform, but too, will run right in the IDE. I show IDE examples in this post. It helps create Java projects for using Selenium for automated user testing. This ties in nicely with the IDE.&lt;br /&gt;&lt;br /&gt;There are different technologies supported in the tooling. There is a JavaScript runner or window which allows one to run JavaScript inside Selenium using runScript and getEval. Too, there is project support for Java and Groovy. I don't show the Groovy support here, but it is exactly the same as the Java examples less you will be using a Groovy file instead of a Java file, so you can derive how it works from that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;This is not the same as the tooling available in the current NetBeans auto update centers&lt;/span&gt;. I noticed it when I started this, and I don't see that it addresses things in the same manner which I do. I don't focus on the tests in this case as much as I focus on being able to test chunks of code as you are trying to develop the logic which will exercise your application.&lt;br /&gt;&lt;br /&gt;The reason I do this is because I do not just write tests. I create automation APIs which can be used to affect the system. This then allows tests to be created using those APIs. That limits the impact of application changes to the high level test scripts which use the APIs I create. Thus, if a change occurs in the application which can break the tests, then I change one file versus many.&lt;br /&gt;&lt;br /&gt;The above may be a topic of another post one day. I will now get on with showing the tooling.&lt;br /&gt;&lt;br /&gt;First, and not really shown here, I needed a way to proxy calls to a Selenium session. I created a library which implements certain aspects of Selenium to allow this to happen. This simply gets and sets the Selenium session ID so calls for a Selenium session may come from multiple places. In this case, the user serializes those things. You will see it references in code which follows.&lt;br /&gt;&lt;br /&gt;Next, I needed a way to manage Selenium server connections, and too I needed a simple way to kick off a Selenium server in the development environment. The "Selenium Manager" top component handles this for me. Certain aspects are configurable.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-EbeZjUnuJyU/TaXJ9qJOANI/AAAAAAAAAHQ/FP7R5l9Igbk/s1600/se_manager.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 372px; height: 400px;" src="http://4.bp.blogspot.com/-EbeZjUnuJyU/TaXJ9qJOANI/AAAAAAAAAHQ/FP7R5l9Igbk/s400/se_manager.png" alt="" id="BLOGGER_PHOTO_ID_5595100173199868114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-WrNzYiNaokk/TaXJz6Lm2_I/AAAAAAAAAG4/NLrm_MwIK1g/s1600/se_configure.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 177px;" src="http://1.bp.blogspot.com/-WrNzYiNaokk/TaXJz6Lm2_I/AAAAAAAAAG4/NLrm_MwIK1g/s400/se_configure.png" alt="" id="BLOGGER_PHOTO_ID_5595100005706161138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-9EzMlp3nzis/TaXJmkN8suI/AAAAAAAAAF4/3CgaxHWvqUk/s1600/connection_editor.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/-9EzMlp3nzis/TaXJmkN8suI/AAAAAAAAAF4/3CgaxHWvqUk/s400/connection_editor.png" alt="" id="BLOGGER_PHOTO_ID_5595099776472101602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You can also start and stop the in IDE Selenium server here. The output uses the NetBeans output window for this.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-yyJvPxXLvNM/TaXJ-ZBoicI/AAAAAAAAAHo/6B4ky-L2kMs/s1600/se_start_server.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://1.bp.blogspot.com/-yyJvPxXLvNM/TaXJ-ZBoicI/AAAAAAAAAHo/6B4ky-L2kMs/s400/se_start_server.png" alt="" id="BLOGGER_PHOTO_ID_5595100185784519106" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-Xrh-SYO1KAw/TaXJndKmsqI/AAAAAAAAAGY/j2CunHSHBC8/s1600/java_support_output.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Once you have configured connections, you can start and use them one at a time&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-uDJ9m1p2ulk/TaXJ9xhZvvI/AAAAAAAAAHg/5Kv2AsA4MwA/s1600/se_session_started.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 284px;" src="http://4.bp.blogspot.com/-uDJ9m1p2ulk/TaXJ9xhZvvI/AAAAAAAAAHg/5Kv2AsA4MwA/s400/se_session_started.png" alt="" id="BLOGGER_PHOTO_ID_5595100175180349170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Once a live session is available, the manager allows you to stop it or to copy the session ID using context menus&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-0KhliM3L_jE/TaXJ9zux1iI/AAAAAAAAAHY/xcLBRbu4spo/s1600/se_manager_session_started.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 331px; height: 400px;" src="http://4.bp.blogspot.com/-0KhliM3L_jE/TaXJ9zux1iI/AAAAAAAAAHY/xcLBRbu4spo/s400/se_manager_session_started.png" alt="" id="BLOGGER_PHOTO_ID_5595100175773324834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next, and most importantly, there is the ability to do productive things.&lt;br /&gt;&lt;br /&gt;There is a Selenium JavaScript runner. This is a special window where one can type in JavaScript, execute it, and see the response. Too, one can ask for the current HTML from the page based on the DOM and not the plain HTML sources before any JavaScript logic has applied changes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-hDUI248uR68/TaXJzS0_QmI/AAAAAAAAAGg/7KhKl-fEvF4/s1600/js_runner_google.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 385px; height: 400px;" src="http://4.bp.blogspot.com/-hDUI248uR68/TaXJzS0_QmI/AAAAAAAAAGg/7KhKl-fEvF4/s400/js_runner_google.png" alt="" id="BLOGGER_PHOTO_ID_5595099995142308450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Notice the syntax highlighting options in the output below. I suppose I could add the ability to view that as JSON too. This is an example of using the "Grab HTML" button&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-qxzST1grnTI/TaXzVM3HpyI/AAAAAAAAAHw/lNNxmlQ_sgw/s1600/grab_html.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 391px; height: 400px;" src="http://3.bp.blogspot.com/-qxzST1grnTI/TaXzVM3HpyI/AAAAAAAAAHw/lNNxmlQ_sgw/s400/grab_html.png" alt="" id="BLOGGER_PHOTO_ID_5595145657632925474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notice the part above dealing with ret=ret in the JavaScript image. This is due to the way this logic will be run directly in Selenium and the way it returns the last evaluation instead of having the caller use the return statement; this is a Selenium thing (see Selenium.getEval). That could have been worked around in the JavaScript runner if I had put the logic in a function and called it, but for the purposes of using this window that is a little overhead I don't need.&lt;br /&gt;&lt;br /&gt;Above, you may have noticed the use of jQuery. How did it get there? Right, there is a difference in the JavaScript used in your application, and that used in Selenium. You can see my other blog post for more information, but I injected jQuery into the current Selenium session using Selenium.addScript from some Java code.&lt;br /&gt;&lt;br /&gt;I will show you how that gets there in a bit.&lt;br /&gt;&lt;br /&gt;It should be obvious we are using the started session here, but just to be clear, before I can run this JavaScript, I had to start a Selenium session and drive the state of the browser manually to get to what I wanted to operate against. In this case not really as the session opened on the Google home page.&lt;br /&gt;&lt;br /&gt;Above, I mentioned injecting jQuery. Well, if you can inject jQuery, then you can inject your own JavaScript as well. You can take the logic you figure out in the JavaScript runner and move that into your own JavaScript files which you will inject.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-ny9RhWqCefw/TaXJm-9Cf5I/AAAAAAAAAGA/5wfS_D6P3Mc/s1600/examples_js.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 306px;" src="http://1.bp.blogspot.com/-ny9RhWqCefw/TaXJm-9Cf5I/AAAAAAAAAGA/5wfS_D6P3Mc/s400/examples_js.png" alt="" id="BLOGGER_PHOTO_ID_5595099783648935826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, you can create a regular Java project in the NetBeans IDE. Then, you can create a standard Java class. You can then click on a line in the Java file and bring up a context menu and ask the tooling to inject the required Selenium proxy logic to allow you to write code using the current session.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-9HKXGB81tAU/TaXJz9ExnVI/AAAAAAAAAHA/PfK8LZNtXxU/s1600/se_insert_selenium_session_proxy.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="http://4.bp.blogspot.com/-9HKXGB81tAU/TaXJz9ExnVI/AAAAAAAAAHA/PfK8LZNtXxU/s400/se_insert_selenium_session_proxy.png" alt="" id="BLOGGER_PHOTO_ID_5595100006482812242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This can be in a main method as above in which case it will be a local variable, or it can be at the class level. Repeated uses of the above action will just overwrite the previously injected code unless it is deleted; in that case it will be added back. This is needed if you stop the Selenium session and restart it. In this case you get a new session ID. Once you use the action, your class will look like this&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-9gbCtaFaxpE/TaXJzqtXdjI/AAAAAAAAAGo/xgCjCjfu2zU/s1600/se__after_insert_selenium_session_proxy_java_editor.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 261px;" src="http://1.bp.blogspot.com/-9gbCtaFaxpE/TaXJzqtXdjI/AAAAAAAAAGo/xgCjCjfu2zU/s400/se__after_insert_selenium_session_proxy_java_editor.png" alt="" id="BLOGGER_PHOTO_ID_5595100001552791090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Then you fill in some scratch pad type code to exercise some logic you will later add to an actual API. &lt;span style="font-weight: bold;"&gt;This may seem counter intuitive, but the point is to be able to drive the state of the application with the browser while you write some finite pieces of the whole which you know work&lt;/span&gt;. This greatly reduces the time to get the state in place and start the test etc. The develop test cycle becomes easier to manage.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-7lFTgq7KNHM/TaXJnN42heI/AAAAAAAAAGQ/uLK3aXH964A/s1600/java_support.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 361px;" src="http://2.bp.blogspot.com/-7lFTgq7KNHM/TaXJnN42heI/AAAAAAAAAGQ/uLK3aXH964A/s400/java_support.png" alt="" id="BLOGGER_PHOTO_ID_5595099787657905634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-Xrh-SYO1KAw/TaXJndKmsqI/AAAAAAAAAGY/j2CunHSHBC8/s1600/java_support_output.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://3.bp.blogspot.com/-Xrh-SYO1KAw/TaXJndKmsqI/AAAAAAAAAGY/j2CunHSHBC8/s400/java_support_output.png" alt="" id="BLOGGER_PHOTO_ID_5595099791758897826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So, how did our JavaScript and jQuery come to reside in the Selenium session? It was put there with another scratch pad Java class.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-ZxNza8BiMMA/TaXJmxHCrLI/AAAAAAAAAGI/JiuYcd03QyM/s1600/inject_scripts.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 316px;" src="http://1.bp.blogspot.com/-ZxNza8BiMMA/TaXJmxHCrLI/AAAAAAAAAGI/JiuYcd03QyM/s400/inject_scripts.png" alt="" id="BLOGGER_PHOTO_ID_5595099779932794034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The related libraries were added to my Java project automatically for me by the tooling too. This includes the proxy library which I first wrote about.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-ASsc5wsUvk8/TaXJz7W1x8I/AAAAAAAAAGw/Ojjx1DD5Jrw/s1600/se__after_insert_selenium_session_proxy_project_properties.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 285px;" src="http://4.bp.blogspot.com/-ASsc5wsUvk8/TaXJz7W1x8I/AAAAAAAAAGw/Ojjx1DD5Jrw/s400/se__after_insert_selenium_session_proxy_project_properties.png" alt="" id="BLOGGER_PHOTO_ID_5595100006021711810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm obviously trying to use a very simple example here. To get real work from these tools I have a full blown AUT API I have designed and developed for the project I'm testing. Too, I have developed the infrastructure needed to use the API including a set of tests and Ant build scripts.&lt;br /&gt;&lt;br /&gt;The individual tests I can run directly from the IDE as they are JUnit tests, and their core logic can be developed, along with the APIs, running against a live Selenium session. The Selenium JavaScript injection is done automatically by my base JUnit test along with other preliminary things.&lt;br /&gt;&lt;br /&gt;Hopefully at some point in the near future I will create an OSS version of this tooling. I don't have an ETA at this moment. But, I hope as I feel it could be useful for many.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-4198769427712405434?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/4198769427712405434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=4198769427712405434' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/4198769427712405434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/4198769427712405434'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2011/04/automated-web-testing-with-selenium-and.html' title='Automated Web Testing with Selenium and The NetBeans Rich Client Platform'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-EbeZjUnuJyU/TaXJ9qJOANI/AAAAAAAAAHQ/FP7R5l9Igbk/s72-c/se_manager.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-1521926116821726629</id><published>2011-04-11T14:45:00.004-05:00</published><updated>2011-04-12T08:02:07.290-05:00</updated><title type='text'>Using Selenium and jQuery for Automated User Testing</title><content type='html'>I am assuming you are familiar with both jQuery and Selenium. Too, I'll assume you want to use jQuery inside locators or in some way through Selenium to make locators easier using more utilities. So, I'll show  you how to do that as well as use your own custom JS files and logic through Selenium just the same by using Selenium.getEval.&lt;br /&gt;&lt;br /&gt;First, the below is made possible using the Selenium command or API call addScript. Next, we need a way to take our file or URL based resource and convert it easily into a string which is what addScript is expecting. I use this utility I have:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: arial; font-size: 12px; border: 1px dashed rgb(204, 204, 204); width: 99%; height: auto; overflow: auto; background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); padding: 0px; color: rgb(0, 0, 0); text-align: left; line-height: 20px;"&gt;&lt;code style="color: rgb(0, 0, 0); word-wrap: normal;"&gt; public static String inputStream2UTF8(InputStream in) throws IOException {&lt;br /&gt;    String ret = null;&lt;br /&gt;    BufferedInputStream bin = new BufferedInputStream(in);&lt;br /&gt;    InputStreamReader isr = new InputStreamReader(bin, "UTF-8");&lt;br /&gt;    StringBuilder sb = new StringBuilder();&lt;br /&gt;    int iread = -1;&lt;br /&gt;    while ((iread = isr.read()) != -1) {&lt;br /&gt;         sb.append((char) iread);&lt;br /&gt;    }&lt;br /&gt;    ret = sb.toString();&lt;br /&gt;    return ret;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next, I like having a more utilitarian method of injecting these resources into the current Selenium session. I use the following two methods together:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: arial; font-size: 12px; border: 1px dashed rgb(204, 204, 204); width: 99%; height: auto; overflow: auto; background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); padding: 0px; color: rgb(0, 0, 0); text-align: left; line-height: 20px;"&gt;&lt;code style="color: rgb(0, 0, 0); word-wrap: normal;"&gt;&lt;br /&gt;  /**&lt;br /&gt;  * Merges all these different resources into a single input stream, puts them&lt;br /&gt;  * into a single JS memory file, and injects this into Selenium using the given&lt;br /&gt;  * js element tag ID (jsTagID).&lt;br /&gt;  * @param resourceLocator class used to locate resources using cpResourcePaths&lt;br /&gt;  * @param cpResourcePaths resource paths relative to resourceLocator or fully qualified&lt;br /&gt;  * @param filePaths file system paths, these can be relative if used from a&lt;br /&gt;  *                  running directory, but generally should be full&lt;br /&gt;  * @param jsTagID the ID of the script element to inject into Selenium&lt;br /&gt;  * @param se the Selenium instance to inject into&lt;br /&gt;  */&lt;br /&gt; public static void injectJavaScriptResourcesTogether(Class resourceLocator,&lt;br /&gt;         String[] cpResourcePaths,&lt;br /&gt;         String[] filePaths,&lt;br /&gt;         String jsTagID,&lt;br /&gt;         Selenium se) {&lt;br /&gt;     ArrayList&lt;inputstream&gt; ins = new ArrayList&lt;inputstream&gt;();&lt;br /&gt;     try {&lt;br /&gt;&lt;br /&gt;         for(String cpResourcePath : cpResourcePaths){&lt;br /&gt;             InputStream in = resourceLocator.getResourceAsStream(cpResourcePath);&lt;br /&gt;             if (in != null) {&lt;br /&gt;                 ins.add(in);&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         for(String filePath : filePaths){&lt;br /&gt;             File f = new File(filePath).getAbsoluteFile().getCanonicalFile();&lt;br /&gt;             InputStream in = new FileInputStream(f);&lt;br /&gt;             ins.add(in);&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         SequenceInputStream sin = new SequenceInputStream(Collections.enumeration(ins));&lt;br /&gt;&lt;br /&gt;         String js = inputStream2UTF8(sin);&lt;br /&gt;&lt;br /&gt;         //don't swallow here...let the caller do that if&lt;br /&gt;         //they need to. API should not eat exceptions generally&lt;br /&gt;         se.addScript(js, jsTagID);&lt;br /&gt;&lt;br /&gt;     } catch (Throwable e) {&lt;br /&gt;         if (RuntimeException.class.isInstance(e)) {&lt;br /&gt;             throw RuntimeException.class.cast(e);&lt;br /&gt;         } else {&lt;br /&gt;             throw new RuntimeException(e);&lt;br /&gt;         }&lt;br /&gt;     } finally {&lt;br /&gt;         for (Closeable closer : ins) {&lt;br /&gt;             try {&lt;br /&gt;                 closer.close();&lt;br /&gt;             } catch (Throwable e) {&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void injectJavaScriptResource(Class resourceLocator,&lt;br /&gt;         String cpResourcePath,&lt;br /&gt;         String jsTagID,&lt;br /&gt;         Selenium se) {&lt;br /&gt;     ArrayList&lt;closeable&gt; closeables = new ArrayList&lt;closeable&gt;();&lt;br /&gt;     try {&lt;br /&gt;         InputStream in = resourceLocator.getResourceAsStream(cpResourcePath);&lt;br /&gt;         if (in != null) {&lt;br /&gt;             closeables.add(in);&lt;br /&gt;         }&lt;br /&gt;         String js = inputStream2UTF8(in);&lt;br /&gt;&lt;br /&gt;         //don't swallow here...let the caller do that if&lt;br /&gt;         //they need to. API should not eat exceptions generally&lt;br /&gt;         se.addScript(js, jsTagID);&lt;br /&gt;&lt;br /&gt;     } catch (Throwable e) {&lt;br /&gt;         if (RuntimeException.class.isInstance(e)) {&lt;br /&gt;             throw RuntimeException.class.cast(e);&lt;br /&gt;         } else {&lt;br /&gt;             throw new RuntimeException(e);&lt;br /&gt;         }&lt;br /&gt;     } finally {&lt;br /&gt;         for (Closeable closer : closeables) {&lt;br /&gt;             try {&lt;br /&gt;                 closer.close();&lt;br /&gt;             } catch (Throwable e) {&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;/closeable&gt;&lt;/closeable&gt;&lt;/inputstream&gt;&lt;/inputstream&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can see in the logic above that I attempt to locate the resources given to the methods in different ways. That is pretty straight forward, so I will let the code document itself.&lt;br /&gt;&lt;br /&gt;Next, I add JS files into my Java project in NetBeans in a Java package. I will access those things as classpath resources per the code above. I use the following code below from some of my other source code:&lt;br /&gt;&lt;pre style="font-family: arial; font-size: 12px; border: 1px dashed rgb(204, 204, 204); width: 99%; height: auto; overflow: auto; background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); padding: 0px; color: rgb(0, 0, 0); text-align: left; line-height: 20px;"&gt;&lt;code style="color: rgb(0, 0, 0); word-wrap: normal;"&gt;&lt;br /&gt;     public void injectSupportingJavaScript() {&lt;br /&gt;     ArrayList&lt;closeable&gt; closeables = new ArrayList&lt;closeable&gt;();&lt;br /&gt;     try {&lt;br /&gt;         String[] resources = new String[]{&lt;br /&gt;             "resources/jquery-1.4.4.min.js",&lt;br /&gt;             "resources/utils.js",&lt;br /&gt;             "resources/nav-utils.js",&lt;br /&gt;             "resources/image-dialog-utils.js",&lt;br /&gt;             "resources/asset-dialog-utils.js",&lt;br /&gt;             "resources/module-utils.js"&lt;br /&gt;         };&lt;br /&gt;     &lt;br /&gt;         try {&lt;br /&gt;             SEUtilities.injectJavaScriptResourcesTogether(getClass(),&lt;br /&gt;                     resources,&lt;br /&gt;                     new String[0],&lt;br /&gt;                     "ff-aut-javascript",&lt;br /&gt;                     se);&lt;br /&gt;         } catch (Throwable e) {&lt;br /&gt;             log.log(Level.WARNING, "Unable to inject required Java Script as a single stream. Will attempt to inject the required .js files individually and continue to run.", e);&lt;br /&gt;             try {&lt;br /&gt;                 for (int i = 0; i &amp;lt; resources.length; i++) {&lt;br /&gt;                     SEUtilities.injectJavaScriptResource(getClass(), resources[i], "ff-aut-javascript-" + i, se);&lt;br /&gt;                 }&lt;br /&gt;             } catch (Throwable e2) {&lt;br /&gt;                 StringBuilder emsg = new StringBuilder();&lt;br /&gt;                 emsg.append("Unable to inject required Java Script as individual streams. ");&lt;br /&gt;                 emsg.append("Will not be able to continue as the locators can not be used in testing. ");&lt;br /&gt;                 emsg.append("Selenium may need to be hacked a bit, or ");&lt;br /&gt;                 emsg.append("the Firefly AUT API .js files need to be further broken up. ");&lt;br /&gt;                 emsg.append("This is because Selenium HUB has issues with too large of requests. ");&lt;br /&gt;                 emsg.append("The API already tries to compensate for this, and this measure has failed ");&lt;br /&gt;                 emsg.append("which usually indicates a .js file injected into Selenium at test time has ");&lt;br /&gt;                 emsg.append("grown too large in size.");&lt;br /&gt;                 log.log(Level.SEVERE, emsg.toString(), e);&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;     } catch (Throwable e) {&lt;br /&gt;         if (RuntimeException.class.isInstance(e)) {&lt;br /&gt;             throw RuntimeException.class.cast(e);&lt;br /&gt;         } else {&lt;br /&gt;             throw new RuntimeException(e);&lt;br /&gt;         }&lt;br /&gt;     } finally {&lt;br /&gt;         for (Closeable closer : closeables) {&lt;br /&gt;             try {&lt;br /&gt;                 closer.close();&lt;br /&gt;             } catch (Throwable e) {&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;/closeable&gt;&lt;/closeable&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Notice the part about a single resource versus individual in the logic. I do this because there is an issue with Selenium Grid where it seems to use HTTP GET instead of POST in some cases where it should be using POST; at least this is my assumption per the error messages I received. This provides a decent fall back.&lt;br /&gt;&lt;br /&gt;In the above, your custom logic will obviously need to inject your own .js files and those will need to be relative to your own class. Once you do that, you can then create a Selenium locater using either pure jQuery inline or you can use your own JS functions to limit the JS logic you have to place in Java files.&lt;br /&gt;&lt;br /&gt;Too, using Selenium.getEval(String) you can execute JavaScript directly in the Selenium session. Sometimes you need to do this if your logic depends on some jQuery event listeners and the standard Selenium calls will not activate that logic correctly.&lt;br /&gt;&lt;br /&gt;The one caveat to using these things, due to JavaScript targeting, is &lt;span style="font-weight: bold;"&gt;always &lt;/span&gt;pass in window.document to jQuery or your own custom JavaScript functions. The reason is that Selenium will be running in a separate browser window from your application. window.document will point to the window where your applications DOM resides. If you have any question about that specifically let me know.&lt;br /&gt;&lt;br /&gt;Some locater example might be:&lt;br /&gt;"dom=your_js_function_doSomething(window.document);"&lt;br /&gt;&lt;br /&gt;For getEval it would simply be:&lt;br /&gt;"your_js_function_doSomething(window.document);"&lt;br /&gt;&lt;br /&gt;Remeber, the last evaluation or the return statement will be what Selenium returns to the calling logic. Too, you can use the throw statement in your JS to propagate better messages to the calling Java logic.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-1521926116821726629?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/1521926116821726629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=1521926116821726629' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/1521926116821726629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/1521926116821726629'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2011/04/using-selenium-and-jquery-for-automated.html' title='Using Selenium and jQuery for Automated User Testing'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-5038077150912800331</id><published>2011-03-31T16:22:00.003-05:00</published><updated>2011-03-31T16:37:45.334-05:00</updated><title type='text'>Multi-line HTML Tag Parsing with Regular Expressions and Java</title><content type='html'>I was looking at some regular expression related posts earlier today, and I noticed many of them showing something along the lines of:&lt;span style="font-family: monospace;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&amp;lt;&lt;span style="font-weight: bold;"&gt;a\\b[^&amp;gt;]*href=\"[^&amp;gt;]*&amp;gt;(.*?)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;The issue is in the&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;.*?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;That&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;may exclude line terminators. If you use&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[\\W\\w\\s]*&lt;/span&gt;&lt;span style="font-family: monospace;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&lt;br /&gt;&lt;br /&gt;in place of that. It will work around the line terminator issues. That is unless you are specifically looking for some specific tag without a line terminator.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-5038077150912800331?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/5038077150912800331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=5038077150912800331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5038077150912800331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5038077150912800331'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2011/03/multi-line-html-tag-parsing-with.html' title='Multi-line HTML Tag Parsing with Regular Expressions and Java'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-3871811927551574991</id><published>2011-02-04T14:05:00.003-05:00</published><updated>2011-02-04T14:32:45.900-05:00</updated><title type='text'>MochaHost: Was hoping they were going to be reliable Java hosting company; they are not even close</title><content type='html'>Recently I had the displeasure of trying out &lt;a href="http://www.mochahost.com"&gt;http://www.mochahost.com&lt;/a&gt;. I noticed their price points, and too they offer VPS for what seemed to be a great price. However, with hosting services, the ability to provision a new server in a timely manner, good customer service, infrastructure which just works, all matter. My experience was lacking in every way.&lt;br /&gt;&lt;br /&gt;First, provisioning the VPS took over a week. I used their online live chat, and too I emailed their support. After days I finally had some information. They said their billing system had a bug in it, and they didn't receive my order until later. OK, I can give someone that initially; wasn't warm and fuzzy, but I could deal.&lt;br /&gt;&lt;br /&gt;Next, I didn't know anything about their services, so I used a prepaid card to register, and only registered for a month. Thirty dollars US seems a great deal for a 1GB RAM bursting to 1.2-1.6GB VPS. But, I like to try things out in the safest way possible as you never know who is fronting a criminal or poorly managed or insecure business. No lock in and a safer card.&lt;br /&gt;&lt;br /&gt;I recommend small businesses adopting the prepaid card trick by the way, and too, never EVER sign up for something over a month on contract until you have tried it out. VERIFY!&lt;br /&gt;&lt;br /&gt;Well, they double billed me as soon as they got the server set up. The card declined. They turned off my service. This after they had a history of me writing their support and asking where the system I had already paid for was. Back to support I go.&lt;br /&gt;&lt;br /&gt;I write support, and I explain the situation, and I go ahead and copy and forward previous emails. They wrote back apologizing, and said they changed my invoice date etc. OK, server on, lets try it out.&lt;br /&gt;&lt;br /&gt;Well, they use WHM and cpanel. During the stint with the card, their automated processes have disabled those. Now, I can't manage things through those interfaces, and too, I'm paying a little extra for those programs; they force you to pay that extra amount on account creation; must have some panel with their VPS.&lt;br /&gt;&lt;br /&gt;I'm sitting wondering after all which has occurred why they didn't verify the system. Not looking good. So, I write them again. At this point most would have walked away I'm sure. But, I was wanting a beating.&lt;br /&gt;&lt;br /&gt;They tell me they have it fixed. I get into WHM, and there isn't much I can manage there. Too, cpanel isn't setup; I can't log into the system through it. I get some weird error.&lt;br /&gt;&lt;br /&gt;I mean, I am using a hosting service right? Kind of the point: I don't have to manage "everything".&lt;br /&gt;&lt;br /&gt;I write them and explain that I don't want WHM nor cpanel which they forced me to pay extra for and use at sign up. I tell them it seems it is just not working with their VPS configurations, and it doesn't; even email account configuration seems to not exist. I tell them I don't want to have it on the system at all, and that way I can try out their rest of their services and support without it, and that I use Linux all the time and would just rather the command line. I even tell them I could write about this experience one way or another, and the ball is in their court, but that I'm still willing to see what they have.&lt;br /&gt;&lt;br /&gt;I say a) I want the system freshly installed b) no WHM or cpanel or to at least know if that is a possibility c) explanation of whether the "unlimited" email accounts are to be on the VPS or through other hosted services they may have, and roughly that is about all I want less their promised 99.9% up time outside of my own coding or GlassFish 3 crashes if they occur.&lt;br /&gt;&lt;br /&gt;I get an email back asking me to detail what I expect. So, I go into the details again. Too, I ask them to review the history of my account, and why I am dissatisfied with their service. I even tell them they should be reviewing this case to help make their business better, because there is obviously something wrong. The whole time, outside of explaining this is something I've paid for, I'm deliberately polite.&lt;br /&gt;&lt;br /&gt;I get another email back telling me they can't do anything with my account until I take care of an outstanding balance! This being the double bill. I sent them a copy of my receipt, the transaction ID from the CC company, and asked for my money back.&lt;br /&gt;&lt;br /&gt;We'll see if that happens or not, but just be warned. MochaHost is not what you're looking for if you want anything remotely close to good service. At this point, service under par would be good. END RANT&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-3871811927551574991?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/3871811927551574991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=3871811927551574991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/3871811927551574991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/3871811927551574991'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2011/02/mochahost-was-hoping-they-were-going-to.html' title='MochaHost: Was hoping they were going to be reliable Java hosting company; they are not even close'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-4717187783517355850</id><published>2011-01-28T10:34:00.004-05:00</published><updated>2011-01-28T10:51:14.555-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Recactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Programming'/><title type='text'>Java, @Override, and refactoring</title><content type='html'>We have been making some changes to the user interface of a project of which I'm a member. This requires me to change some automated user testing APIs and interfaces to match the new reality.&lt;br /&gt;&lt;br /&gt;I don’t remember exactly who I was talking one day when they mentioned my use of the @Override annotation even when implementing interfaces. I told them the IDE added that, and I just left it at that. I couldn’t think of a great use case for that being there at the time, but since the IDE did it for me I figured there must be some point even in the case of interface implementation, so I left it in the code as it didn’t cause any issue and was correct logic.&lt;br /&gt;&lt;br /&gt;Now that I have begun to refactor and remove some methods which no longer make sense, I am finding the @Override annotations very useful because the IDE points out what is implemented as an @Override when it isn’t actually overriding anything from a super class or interface. This is a compile time error, and were I not using a fancier IDE, I would still be alerted to the problem when the project was compiled. Thus, the annotation has been a nice aid in this type of refactoring.&lt;br /&gt;&lt;br /&gt;This would also be the case of an actual method override in the case where the super method was not called from the override. In such a case, and without @Override, the logic would simply no longer be used, but would compile just fine. The call would be removed from calling code of the super class or interface for the obvious compiler reasons one would encounter, but if someone left that logic in the existing class by mistake, and someone thought it should be called because some other state depended on it without that class being rethought at the time of some major refactoring, then a serious issue has been introduced which could be hard to figure out.&lt;br /&gt;&lt;br /&gt;I wanted to share this with everyone as I believe it can help everyone if @Override is always used. If you have a different opinion or thoughts on the topic please share.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-4717187783517355850?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/4717187783517355850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=4717187783517355850' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/4717187783517355850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/4717187783517355850'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2011/01/java-override-and-refactoring.html' title='Java, @Override, and refactoring'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-2980746512647216237</id><published>2009-03-27T10:19:00.003-05:00</published><updated>2009-03-27T10:42:20.734-05:00</updated><title type='text'>The problem with standards; the chicken before the egg</title><content type='html'>I saw a headline. "Microsoft Calls for Open Cloud Standards".  I love standards. The problem is putting standards before there are enough really good examples to honestly have a good standard; chicken before the egg or the cart before the horse.&lt;br /&gt;&lt;br /&gt;I have actually changed my stance on this over the years. I used to be all about a standards body, and everyone getting together and hashing out the details. The problem in doing this before there are really good real world examples, more than a couple, is there are a lot of details we don't actually know about such needs, requirements, use cases, etc which simply are not feasible to just throw together or to try to formulate; our industry always assumes we know more about all of the above than we do.&lt;br /&gt;&lt;br /&gt;The needed information only comes with real application experience, and that will not come from developers in an office purely working on infrastructure who never have to use what they design in real implementations; I have seen it way to many times.&lt;br /&gt;&lt;br /&gt;There are two big things at work here. Yes, you must have the infrastructure and developers for that. Part of what comes from this is knowing what will work (think more about programming and low level details...not end user use cases), how the pieces fit together to provide different features of the system, and something which can be used; this is really iterative.&lt;br /&gt;&lt;br /&gt;Next, you have to have those building solutions with that system. It must be put through its paces. On top of that, those end developers will add their own features, provide feedback, and tell you what does and does not work. We are really just talking about agile processes, but seemingly this gets lost in drives for standards.&lt;br /&gt;&lt;br /&gt;Sure, we have many examples of grid computing and other very similar technologies. Too, there are clouds that have been available for a while now. Virtualization has been around for a good long while too.&lt;br /&gt;&lt;br /&gt;OK, I concede all of that ahead of time. But, too many standards bind a project to implement some very under used features, require resources to implement, and then change so much over time as to essentially cause some of the fuss and confusion they are trying to avoid before everyone involved, including the users, know the real details about that which is being standardized.&lt;br /&gt;&lt;br /&gt;Were innovators to do what they do and innovate. Then, only after a market has formed around multiple implementations of similar technologies, try to form a consensus on a standard. The standard would be more complete up front, and groups wouldn't have a hard time getting behind it or accepting it as input would be available from those with their noses to the grind stones to really give the standard the respect something we should call a &lt;span style="font-weight: bold;"&gt;standard&lt;/span&gt; deserves.&lt;br /&gt;&lt;br /&gt;That's it.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-2980746512647216237?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/2980746512647216237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=2980746512647216237' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/2980746512647216237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/2980746512647216237'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2009/03/problem-with-standards-chicken-before.html' title='The problem with standards; the chicken before the egg'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-9056763323580285505</id><published>2009-03-24T09:26:00.003-05:00</published><updated>2009-03-24T09:46:03.813-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming music'/><title type='text'>What happened to Chris Cornell??? Scream? I did.</title><content type='html'>OK, not so much about programming, but if you are like me you find yourself jamming along to something while you work. Today, I was clicking through my Napster account and saw a new album from Chris Cornell. It is called &lt;span style="font-style: italic;"&gt;Scream&lt;/span&gt;.  I had been wondering when we would see something else from him.&lt;br /&gt;&lt;br /&gt;I am a big Cornell fan, so it was a complete and utter shock to me this album was produced by Timberland; funny, I didn't actually know that until reading about it later, but thought it sounded similar. I completely hated it. I missed the guitar, chords, drums, and in it all I missed Chris Cornell.&lt;br /&gt;&lt;br /&gt;I get the desire to put a different spin on things you do, but not only did I not like it, it had nothing to do with the genre.  I must admit pop isn't near the top for me; I would put most pop below most classical, and below the bluegrass that I don't like. There is a lot of classical I like, but a lot I do not, and the bluegrass I don't like, is pretty bad; I go for more rock I believe just not too hard, but definitely a lot music from different genres that I love except for rap.&lt;br /&gt;&lt;br /&gt;So, when I say this, you have some context, I would put this entire album at the bottom of the pop genre, and right above rap, and I don't listen to rap, but if I had to pick listening to &lt;span style="font-style: italic;"&gt;Scream&lt;/span&gt; again I would maybe listen to some rap. I couldn't think nor program to this music, and quite possibly could not walk, chew gum, and listen to it at the same time; it is that annoying.&lt;br /&gt;&lt;br /&gt;I sure hope Chris finds his way back. The reviews of this thing hopefully are the kind he can. I can't imagine many of his real fans liking it, but I can't imagine them not giving him another chance. Surely we can all agree to chalk this one up to humorous trial and error no matter how painful it was.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-9056763323580285505?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/9056763323580285505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=9056763323580285505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/9056763323580285505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/9056763323580285505'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2009/03/what-happened-to-chris-cornell-scream-i.html' title='What happened to Chris Cornell??? Scream? I did.'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-852002799047236193</id><published>2008-11-03T15:10:00.002-05:00</published><updated>2008-12-10T20:34:25.494-05:00</updated><title type='text'>openSuSE 11, Sun VirtualBox, Windows XP, and OpenSolaris</title><content type='html'>I upgraded my laptop from openSuSE 10.3 to 11.0, and I must say that I really like it. It has many small improvements, but most importantly I have not had to decompile and compile my own ACPI DSDT, it actually hibernates correctly, and just works with the Toshiba hardware. See my &lt;a href="http://wadechandler.blogspot.com/2007/05/opensuse-102-fedora-core-5-kubuntu.html"&gt;10.3 post&lt;/a&gt; for my issues with this laptop.&lt;br /&gt;&lt;br /&gt;The one draw back was I went with KDE 4, and while it seems a really awesome desktop function wise, it's stability left a horrible taste in my mouth. So, I decided to give Gnome a try after all these years of being a big KDE fan. I really like Gnome 2.2, but I'm not sure if I'll keep using it or go back to KDE 3.x and wait on KDE 4 to catch up.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://wadechandler.blogspot.com/2007/05/opensuse-102-fedora-core-5-kubuntu.html"&gt;my previous setup&lt;/a&gt; I was using VMWare Workstation 6.0 (which I paid over a couple hundred dollars). I really liked it function wise, mostly. The main draw back is it wasn't really kept up to date to run on newer kernels shipped with Linux distros such as openSuSE and probably even Fedora. At least I couldn't find the updates, and I was having to resort to hacking the source code to get it to build against my kernel. So, I gave Sun's VirtualBox a try, and I must say that I've been very impressed with the overall performance and Linux distro updates, but there are a few things it needs to do better.&lt;br /&gt;&lt;br /&gt;VMWare Workstation will let me use multiple monitors just like X. In other words (see my screen shot) I literally have two separate screens which I may drag windows across. A single desktop with two monitors. Pretty common indeed. Well, VirtualBox doesn't support this. The best it can do is have a single window non-full screen stretched across my multiple monitors. Not so great (horrible actually). See my &lt;a href="http://wadechandler.blogspot.com/2007/05/opensuse-102-fedora-core-5-kubuntu.html"&gt;screen shots from the 10.3 and VMWare post&lt;/a&gt; to see what I mean; &lt;a href="http://1.bp.blogspot.com/_nhYhoq2dQSE/RmBxPkl8-EI/AAAAAAAAAAk/gSfyfMm5Au8/s1600-h/wade_opensuse_10.2_3.png"&gt;check out Vista&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;ALSA sound support is very choppy. I don't know what the deal is, but VMWare had this issue too though my other applications such as Firefox, Banshee, etc are fine. Right now, what VMWare couldn't do, I'm using OSS for sound, and this is a little better, but it gets choppy when I try to use something like Napster and play my music from Windows.&lt;br /&gt;&lt;br /&gt;Seems networking is easier in VMWare. This is probably due to custom network drivers which VirtualBox doesn't have, so VirtualBox can't easily, and independent of the network interfaces, setup standalone network interfaces. Now, it wasn't such a big deal to setup VirtualBox from a networking perspective, but I venture to say those newer to Linux or Unix will have a harder time getting VirtualBox working than VMWare if they need to go beyond NAT.&lt;br /&gt;&lt;br /&gt;In my setup my virtual machines have their own IP addresses. This way they act as true independent computers when I need them for testing etc, and this makes network shares and other necessities much easier to use. Anyways, I had to setup a bridge, disable NetworkManager, and do some things by hand versus using the GUI. Having to disable NetworkManager means using wireless networks will now be harder as I have to use the keyboard versus a UI, but as I've used Linux for years it is not that much harder for me.&lt;br /&gt;&lt;br /&gt;USB interfacing seems to be harder. I haven't gotten this setup yet, but I haven't really needed it yet, so I haven't done much digging. Regardless, it isn't working out of the box where as VMWare did. In VMWare I could just connect a USB device, connect it to the virutal machine with the UI, and I was using it without the need for any extra dependencies in the OS. Seems VirtualBox has some dependency I'm missing from my openSuSE installation.&lt;br /&gt;&lt;br /&gt;OK, screen shot time. In this screen shot, I'm running two monitors, one with 1440x900 resolution, and the other with 1680x1050. I can full screen a virtual machine on either monitor, and after I install the virtual box extensions into the guest operating systems they can resize their resolutions to fit the resolution of which ever monitor I happen to be running or the size of the Window in which they're running. At least this is true for Windows. In this screen shot, I'm updating Windows XP to service pack 3, installing OpenSolaris 2008.05, building a NetBeans 6.5 daily build, and browsing the openSuSE online store. Enjoy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nhYhoq2dQSE/SQ9knofEc2I/AAAAAAAAACk/kajkW-3oU6k/s1600-h/opensuse11_building_NB_installing_OS.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 134px;" src="http://4.bp.blogspot.com/_nhYhoq2dQSE/SQ9knofEc2I/AAAAAAAAACk/kajkW-3oU6k/s400/opensuse11_building_NB_installing_OS.png" alt="" id="BLOGGER_PHOTO_ID_5264537121464808290" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-852002799047236193?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/852002799047236193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=852002799047236193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/852002799047236193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/852002799047236193'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2008/11/opensuse-11-sun-virtualbox-windows-xp.html' title='openSuSE 11, Sun VirtualBox, Windows XP, and OpenSolaris'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nhYhoq2dQSE/SQ9knofEc2I/AAAAAAAAACk/kajkW-3oU6k/s72-c/opensuse11_building_NB_installing_OS.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-6057143328963026336</id><published>2008-07-16T10:44:00.002-05:00</published><updated>2008-12-10T20:34:26.149-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Make adding properties to classes in NetBeans a simpler task</title><content type='html'>NetBeans has a great feature called Code Templates. This is used to create shortcuts which may be typed in the editor then expanded into a template which the editor will ask the user to fill in the blanks. There are many useful ones which come configured upon installation within the NetBeans IDE, but one I have used for a long time, yet never written about except on the NetBeans mailing lists, is one to create properties more easily.&lt;br /&gt;&lt;br /&gt;These properties are plain properties un-bounded and not incorporating property change events, but none the less very useful, and it isn't much work to transform into your choice of other useful property creating templates. Without further delay, my code template is:&lt;br /&gt;&lt;blockquote&gt;private ${TYPE} ${VAR} = ${VAL};&lt;br /&gt;&lt;br /&gt;public ${TYPE} get${NAME}(){&lt;br /&gt;return ${VAR};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void set${NAME}(${TYPE} ${VAR}){&lt;br /&gt;this.${VAR} = ${VAR};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;${cursor}&lt;/blockquote&gt;Mine is named prop, so when I am in a Java file I type&lt;br /&gt;&lt;blockquote&gt;prop&lt;/blockquote&gt;then press the TAB button/key. The template is expanded and asks me to fill in the details. Below are some screen samples of this in action.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhYhoq2dQSE/SH4aawmev4I/AAAAAAAAABM/diuM1AKsnBE/s1600-h/NB_template1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_nhYhoq2dQSE/SH4aawmev4I/AAAAAAAAABM/diuM1AKsnBE/s400/NB_template1.png" alt="" id="BLOGGER_PHOTO_ID_5223641664821575554" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhYhoq2dQSE/SH4abEHlZRI/AAAAAAAAABU/CH3x4oSHr1w/s1600-h/NB_template2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_nhYhoq2dQSE/SH4abEHlZRI/AAAAAAAAABU/CH3x4oSHr1w/s400/NB_template2.png" alt="" id="BLOGGER_PHOTO_ID_5223641670060696850" border="0" /&gt;&lt;/a&gt;I simply press the TAB button to jump between the fields &lt;span style="font-style: italic;"&gt;TYPE&lt;/span&gt;,&lt;span style="font-style: italic;"&gt;VAR&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;VAL&lt;/span&gt;, enter the values, and when I have them all filled in press the ENTER button and my cursor is placed at the ${cursor} position or offset in the editor.&lt;br /&gt;&lt;br /&gt;The final result is a read-write property with the source code all laid out nicely&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhYhoq2dQSE/SH4bmxnHzwI/AAAAAAAAABc/g0BzsNcnoeI/s1600-h/NB_template3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_nhYhoq2dQSE/SH4bmxnHzwI/AAAAAAAAABc/g0BzsNcnoeI/s400/NB_template3.png" alt="" id="BLOGGER_PHOTO_ID_5223642970762759938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To expand the function of the template is easy enough. I have one which adds the logic for property change events. I have it named eprop in my IDE.&lt;br /&gt;&lt;blockquote&gt;private ${TYPE} ${VAR} = ${VAL};&lt;br /&gt;&lt;br /&gt;public ${TYPE} get${NAME}(){&lt;br /&gt; return ${VAR};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void set${NAME}(${TYPE} ${VAR}){&lt;br /&gt; ${TYPE} lold${VAR} = this.${VAR};&lt;br /&gt; this.${VAR} = ${VAR};&lt;br /&gt; pcs.firePropertyChange("${VAR}",lold${VAR},${VAR});&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;${cursor}&lt;/blockquote&gt;It assumes you have an instance of &lt;span style="font-style: italic;"&gt;java.beans.PropertyChangeSupport&lt;/span&gt; called pcs.&lt;br /&gt;&lt;br /&gt;I have another one named ewprop which stands for Wrap or Wrapper, and in this case another field is needed to handle wrapping primitive types to pass the call to firePropertyChange, and it also assumes a variable named pcs:&lt;br /&gt;&lt;blockquote&gt;private ${TYPE} ${VAR} = ${VAL};&lt;br /&gt;&lt;br /&gt;public ${TYPE} get${NAME}(){&lt;br /&gt; return ${VAR};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void set${NAME}(${TYPE} ${VAR}){&lt;br /&gt; ${TYPE} lold${VAR} = this.${VAR};&lt;br /&gt; this.${VAR} = ${VAR};&lt;br /&gt; pcs.firePropertyChange("${VAR}",new ${WTYPE}(lold${VAR}),new ${WTYPE}(${VAR}));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;${cursor}&lt;/blockquote&gt;That covers much of what one wants to do with beans.&lt;br /&gt;&lt;br /&gt;One thing still missing from the pre 6.0 or 5.5 days is the ability to easily manage JavaBean patterns. This involves things such as being able to rename a property and have the field and method names change at once. The ability to add JavaBean properties has been added back to the IDE at least, but these code templates I'm writing about are easier to use, or at least quicker, than the UI to add properties through the Java editor once you are used to using them, but maybe that can be remedied by adding a quick pop up menu for doing things with JavaBean patterns to the Java editor; if I have time this year that can be one of my community contributions :-D&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-6057143328963026336?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/6057143328963026336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=6057143328963026336' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/6057143328963026336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/6057143328963026336'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2008/07/make-adding-properties-to-classes-in.html' title='Make adding properties to classes in NetBeans a simpler task'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_nhYhoq2dQSE/SH4aawmev4I/AAAAAAAAABM/diuM1AKsnBE/s72-c/NB_template1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-8037068385044849735</id><published>2008-04-02T18:50:00.004-05:00</published><updated>2008-12-10T20:34:26.979-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Who says a RootPane always has to be at the top?</title><content type='html'>Some friends and I have started a project to extend functionality inside the NetBeans RCP (Rich Client Platform). We call it PlatformX, and it is located on the web at http://platformx.netbeans.org. We hope to have the repository public soon for others to use and contribute.&lt;br /&gt;&lt;br /&gt;One of the APIs I'm working on is called RootPaneTopComponent. For the uninitiated in NetBeans RCP, a TopComponent is a Swing component managed by the NetBeans platform. They may work as regular components or can also be used as dockable/undockable components which may be moved around in the application.&lt;br /&gt;&lt;br /&gt;A RootPaneTopComponent is a TopComponent which implements the RootPaneContainer interface. It allows one to use a glass pane, a menu and menu items, or a layered pane in more component based classes such as JFrame, JInternalFrame, and JApplet do for the more encompassing classes, so this new class in PlatformX allows the same thing yet at a lower level.&lt;br /&gt;&lt;br /&gt;I'll have more information as soon as possible about this class and its sister class CloneableRootPaneTopComponent when I get it finished and we are closer to having a more public release of our first Platformx APIs and repository access. Until now here are some simple screen shots.&lt;br /&gt;&lt;br /&gt;Imagine you have a dockable component you need disabled or the ability to cover with some user blocking message until another application state has been reached, and you do not want to block the entire window or a dialog. This is where component level glass panes come in handy:&lt;br /&gt;&lt;br /&gt;Now you see me:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhYhoq2dQSE/R_QgesjKLWI/AAAAAAAAAAs/-J0MR3s35Tw/s1600-h/glasspane1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_nhYhoq2dQSE/R_QgesjKLWI/AAAAAAAAAAs/-J0MR3s35Tw/s400/glasspane1.png" alt="" id="BLOGGER_PHOTO_ID_5184804782737075554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;now you don't:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhYhoq2dQSE/R_QgusjKLXI/AAAAAAAAAA0/wIKc3L8cZC0/s1600-h/glasspane2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_nhYhoq2dQSE/R_QgusjKLXI/AAAAAAAAAA0/wIKc3L8cZC0/s400/glasspane2.png" alt="" id="BLOGGER_PHOTO_ID_5184805057614982514" border="0" /&gt;&lt;/a&gt;and I'll leave it up to you to figure out ways you could use this in your applications today. I'm using it to block certain components which need the user to login to be able to use them.&lt;br /&gt;&lt;br /&gt;I mentioned the menu bar. I have also coded this particular class to allow north, south, east, and west components to be placed around it. This could be used for multiple things. I have chosen in this example to imagine some type of an editor which might have search functionality and maybe a notes editor which could show different notes for paragraphs or diagrams or any thing else one might think of:&lt;br /&gt;&lt;br /&gt;No notes showing:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhYhoq2dQSE/R_Qi0cjKLYI/AAAAAAAAAA8/Tx0Iic9hGL0/s1600-h/menu1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_nhYhoq2dQSE/R_Qi0cjKLYI/AAAAAAAAAA8/Tx0Iic9hGL0/s400/menu1.png" alt="" id="BLOGGER_PHOTO_ID_5184807355422485890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;and now they are:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nhYhoq2dQSE/R_QjDMjKLZI/AAAAAAAAABE/p1HBaOKu4IY/s1600-h/menu2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_nhYhoq2dQSE/R_QjDMjKLZI/AAAAAAAAABE/p1HBaOKu4IY/s400/menu2.png" alt="" id="BLOGGER_PHOTO_ID_5184807608825556370" border="0" /&gt;&lt;/a&gt;Anyways, this is just a simple example to show some of the capabilities of what I'm working on at the moment. This entry is to make it easier to show the others working on the project how it works right now more than anything, but it can be a preview as well :-D. Hopefully it, along with some other things, will be released soon. It's NetBeans, so of course it is open-source.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-8037068385044849735?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/8037068385044849735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=8037068385044849735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8037068385044849735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8037068385044849735'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2008/04/who-says-rootpane-always-has-to-be-at.html' title='Who says a RootPane always has to be at the top?'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nhYhoq2dQSE/R_QgesjKLWI/AAAAAAAAAAs/-J0MR3s35Tw/s72-c/glasspane1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-5167177291092278070</id><published>2007-12-18T23:10:00.001-05:00</published><updated>2008-04-03T08:19:26.862-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Central Lookup: Creating a central repository and lookup for an application context in a NetBeans RCP application</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;I have been working on a NetBeans RCP project where I needed a central place to register different interfaces and allow different views to operate on these regular POJOs one would use in a regular Swing application and to be able to listen to changes to them from the standpoint of some kind of an Application Context where different instances will come and go. A good example is a desktop application requiring a login. You will have user information and want to be able to track a global login or validation token.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;I create a simple class and API in a NetBeans module and called it CentralLookup. This is all the code for such a simple thing (please ignore the formatting of the code...maybe I can update it later, but it seems blogger isn't wanting to format it correctly when posted): &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;package org.netbeans.modules.centrallookup.api;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;import java.util.Collection;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;import org.openide.util.Lookup.Result;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;import org.openide.util.lookup.AbstractLookup;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;import org.openide.util.lookup.InstanceContent;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/**&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * Class used to house anything one might want to store&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * in a central lookup which can affect anything within&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * the application. It can be thought of as a central context&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * where any application data may be stored and watched.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; *&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * A singleton instance is created using @see getDefault().&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * This class is as thread safe as Lookup. Lookup appears to be safe.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * @author Wade Chandler&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; * @version 1.0&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; */&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;public class CentralLookup extends AbstractLookup {&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    private InstanceContent content = null;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    private static CentralLookup def = new CentralLookup();&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public CentralLookup(InstanceContent content) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        super(content);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        this.content = content;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;public CentralLookup() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        this(new InstanceContent());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;public void add(Object instance) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        content.add(instance);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;public void remove(Object instance) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        content.remove(instance);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public static CentralLookup getDefault(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        return def;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The nice thing about this code is that it is real simple. The strange thing for me is that there hasn't been something already implemented in the base RCP. It seems pretty common a thing. For instance, the normal global lookups deal with Actions, Services, and Nodes (which are part of the NetBeans data model), and that is fine until one needs to work with generic interfaces and classes from a global perspective. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Regardless, I can now write code to listen to changes in this global context or Lookup in this case. The code doesn't have to know about any implementation except for the code which does the injection, and the code in other places can just setup a result and a listener. The following illustrates this a bit, and of course it is just a sub-set of the code:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;final class CentralLookupTest1TopComponent extends TopComponent {&lt;br /&gt;&lt;br /&gt;private static CentralLookupTest1TopComponent instance;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;private Lookup.Result&lt;userinformation&gt; userInfoResult = null;&lt;br /&gt;&lt;/userinformation&gt;&lt;/span&gt;    private CentralLookupTest1TopComponent() {&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  &lt;br /&gt;   Lookup.Template&lt;userinformation&gt; template = new Lookup.Template(UserInformation.class);&lt;br /&gt;&lt;br /&gt;&lt;/userinformation&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;        CentralLookup cl = CentralLookup.getDefault();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;        userInfoResult = cl.lookup(template);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;        userInfoResult.addLookupListener(new UserInformationListener());&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;&lt;br /&gt;private javax.swing.JTextField name;&lt;br /&gt;private javax.swing.JTextField pwd;&lt;br /&gt;private javax.swing.JTextField token;&lt;br /&gt;private javax.swing.JTextField uid;&lt;br /&gt;&lt;br /&gt;private class SetterRunnable implements Runnable {&lt;br /&gt;   UserInformation ui = null;&lt;br /&gt;&lt;br /&gt;   public SetterRunnable(UserInformation ui) {&lt;br /&gt;       this.ui = ui;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void run() {&lt;br /&gt;       name.setText(ui.getName());&lt;br /&gt;       pwd.setText(ui.getPassword());&lt;br /&gt;       uid.setText(ui.getUserID());&lt;br /&gt;       token.setText(ui.getToken());&lt;br /&gt;   &lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    private class &lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;UserInformationListener implements LookupListener&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;public void resultChanged(LookupEvent evt)&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; {&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;       Object o = evt.getSource();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;            if (o != null) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;                Lookup.Result&lt;userinformation&gt; r = (Lookup.Result&lt;userinformation&gt;) o;&lt;br /&gt;           Collection infos = r.allInstances();&lt;br /&gt;&lt;/userinformation&gt;&lt;/userinformation&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                if (infos.isEmpty()) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                    EventQueue.invokeLater(new SetterRunnable(new DefaultUserInformation()));&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                } else {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;                    Iterator it = infos.iterator();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                    while (it.hasNext()) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;                        UserInformation info = it.next();&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;                   EventQueue.invokeLater(new SetterRunnable(info));&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                    }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;                }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;            }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Notice we have a result. The result has attached to it a listener. The listener knows about DefaultUserInformation and the UserInformation interface, and that is it. It then knows it needs to listen for instances of UserInformation and act accordingly. It doesn't know how it got there, but knows what it must do with it. We then have some other code in another class which will inject the instances into the CentralLookup based on some user input removing any previous: &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;private void buttonActionPerformed(java.awt.event.ActionEvent evt) {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    //ok we need to remove any user information from the central lookup&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    //and then we need to add this new one&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    CentralLookup cl = CentralLookup.getDefault();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    Collection infos = cl.lookupAll(UserInformation.class);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    if(!infos.isEmpty()){&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        Iterator it = infos.iterator();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        while(it.hasNext()){&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;            UserInformation info = it.next();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;            cl.remove(info);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    DefaultUserInformation info = new DefaultUserInformation();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    info.setName(name.getText());&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    info.setPassword(pwd.getText());&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    info.setUserID(uid.getText());&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    info.setToken(token.getText());&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    cl.add(info);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;You can get a good idea from here the possibilities. This is a rather simple example, but it certainly shows it working. This can be used for any other services which need to use regular POJOs and not much else. Why add more overhead of class wrappers etc when they are not needed for everything? Sometimes one just needs a dynamic application context which can breakup the application into a more modular framework of simple classes and interfaces without major restrictions.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;I have an AVI video formatted video of this in action. It is a very simple example, but it shows it working. The one piece of code doesn't know anything other than the fact that user information will appear magically in the CentralLookup in the form of the UserInformation interface.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2JKHasLlzMM"&gt;&lt;embed src="http://www.youtube.com/v/2JKHasLlzMM" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-5167177291092278070?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/5167177291092278070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=5167177291092278070' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5167177291092278070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5167177291092278070'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/12/central-lookup-creating-central.html' title='Central Lookup: Creating a central repository and lookup for an application context in a NetBeans RCP application'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-8488978376533450974</id><published>2007-08-09T11:06:00.000-05:00</published><updated>2007-08-10T07:10:17.896-05:00</updated><title type='text'>Have to say it: What Sun is doing with the JCK (Java Development Kit and runtime TCK/compatibility kit) license seems pretty dirty</title><content type='html'>The part which seems dirty is the way the license is obviously being extended to OpenJDK based projects to allow OpenJDK project contributors to be able to use the TCK without any encumbrances on their builds fields of use while keeping other, from scratch, open-source efforts from being able to do the same. The obvious part: if developers were not able to use the TCK, it would hurt the OpenJDK effort as contributors would not be able to distribute any builds and call them Java as they would not have passed the TCK. Passing the TCK is part of the rules for being able to implement the Java specifications, claim adherence, and distribute the end result.&lt;br /&gt;&lt;br /&gt;If the goal is to support open source Java and to be fair, then any open-source Java implementation regardless of the license would be able to use the TCK in the same manner. So, as a pretty open Sun supporter, I do not like what they are doing with the TCK at all, and it damages my view of them as a corporation as it specifically relates to honesty. I think if they are going to go about it this way they should at least have the honor and guts to say exactly what they mean and the reason for doing it instead of dancing around the issue by talking about license terms, not open-sourcing the TCK because they want to protected what it means to be "compatible" (which I totally understand), and not being able to please everyone. These reasons are pretty weak as a reason for the terms of the license only being given to OpenJDK based projects.&lt;br /&gt;&lt;br /&gt;The fact is they could just as easily let anyone use the TCK for free to certify any open-source implementation. The TCK does not have to be open sourced for this to happen. I think if the reason, which to me it can only be, is to protect corporation investments and only support those efforts which directly support their interests then they should just say it. Personally I don't think this is outside the bounds of what corporations try to do; I mean lets face it, they have to make money, but the JCP (&lt;a href="http://www.jcp.org/"&gt;http://www.jcp.org&lt;/a&gt;) member agreement and processes clearly state what can and can not exist in limiting anyones right to fully implement JCP specifications, and the scholarship TCK license itself does encumber ones ability to create clean and independent implementations of the Java specifications, and this is the only free license organizations or individuals creating open-source Java implementations can obtain unless they are based on Suns OpenJDK and also use the GPL license. This is against the agreement of the JCP as I have read it as it imposes restrictions beyond the ones stated in the agreement, and the agreement specifically states that no more restrictions beyond those listed within the agreement can exist which hinder anyones ability to create independent implementations of any JCP specification.&lt;br /&gt;&lt;br /&gt;So, Sun employees, don't take this personal. I happen to work with a few of you on different open-source projects, and you know who you are :-D, and I know you don't have anything to do with these decisions. The law department and which ever managers approved this however, this seems pretty darn dirty, at least what I have seen so far. Maybe someone has a good explanation, but for now I'm calling it what it looks like.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-8488978376533450974?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.javalobby.org/java/forums/t99969.html' title='Have to say it: What Sun is doing with the JCK (Java Development Kit and runtime TCK/compatibility kit) license seems pretty dirty'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/8488978376533450974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=8488978376533450974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8488978376533450974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8488978376533450974'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/08/have-to-say-it-what-sun-is-doing-with.html' title='Have to say it: What Sun is doing with the JCK (Java Development Kit and runtime TCK/compatibility kit) license seems pretty dirty'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-428703966717509076</id><published>2007-07-27T08:56:00.001-05:00</published><updated>2008-04-03T08:20:08.944-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>I have updated my "Java Text Copy Paste Module/Plugin"</title><content type='html'>The Java Text Copy Paste Module/Plugin now works in NetBeans 6.0. I tested it and am using it in 6.0. The module &lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt;helps copy and paste text from and to Java source code. This module works well with SQL or HTML or XML which needs to be embedded in Java source code or needs to be extracted from Java source code. Look for the "Java Text Copy and Paste" context menu inside Java source files. There are no default hot keys for the functionality. I suggest playing around with the different actions to get a feel for how they work. + signs are pre-pended at the beginning of lines of source to make hand editing of generated code easier.&lt;br /&gt;&lt;br /&gt;This module allows source code to be selected then formatted back into the text format it was before converted into Java source. It also allows one to select XML, HTML, or SQL in their favorite tool (as text) and then paste into the NetBeans Java editor where it is automatically formatted as Java source code. I find I use it all the time and comes in very handy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 1.1&lt;/b&gt; added a new way to copy the text from the editor which keeps newlines in the selected text yet removes any newlines fromJ the actual Java sources.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 1.2&lt;/b&gt; adds tested support for NetBeans 6.0 and corrects a bug which deals with concurrent access of the edited document. The bug has not shown any issues yet, but possibly could as concurrent access could have unknown results.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 1.3&lt;/b&gt; fixes an issue dealing with the context menu sorting and NetBeans 6.0.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-428703966717509076?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=2748' title='I have updated my &quot;Java Text Copy Paste Module/Plugin&quot;'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/428703966717509076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=428703966717509076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/428703966717509076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/428703966717509076'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/07/i-have-updated-my-java-text-copy-paste.html' title='I have updated my &quot;Java Text Copy Paste Module/Plugin&quot;'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-5509557879624202585</id><published>2007-07-24T23:19:00.001-05:00</published><updated>2008-04-03T08:20:42.971-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Sharing classes with modules and non-module based JARs in a NetBeans RCP Application</title><content type='html'>Sometimes, such as when using JPA or Hibernate from more than one module, it is necessary to share classes between any number of modules and non-module based libraries/JARs in a NetBeans RCP/Platform based application. The reason this solution is needed is because some libraries, and even at times modules, need to be able to see classes from other libraries and modules at runtime to use certain patterns and these classes and modules have a cyclic dependency because of the type of classes being used. JPA or Hibernate are perfect examples where the entity manager will reside in one library and needs to be able to create instances of classes from another library or module, which also references other JPA or Hibernate classes themselves, using annotations or XML descriptors. This usually happens dynamically at runtime in these type situations.&lt;br /&gt;&lt;br /&gt;In NetBeans the module system provides good separation. The problem is this can at times be too strict. To work around this issue you need to create a custom platform and then find the platform#/core directory under the platform directory and put the libraries and JARs in it. I will update this later to explain how to setup a custom platform.&lt;br /&gt;&lt;br /&gt;Once you have the libraries in the core directory they can be used by any module or other library at runtime. These JARs can be copied to the core folder at build time and before distribution using ANT, so it is a good idea to make this custom platform reside relative to your project. Another good reason to have them reside relative to the project is that these common JAR files will have to be referenced by your module projects. To reference these JARs from your module projects you will have to edit project.properties and add a property:&lt;br /&gt;cp.extra&lt;br /&gt;&lt;br /&gt;which is a colon delimited list of JAR files needed for the classes the particular module needs to reference. Once cp.extra is setup, any errors you may see in the Java editor, related to these classes, should disappear and you can actually compile your project.&lt;br /&gt;&lt;br /&gt;It is best to avoid doing this if possible as it removes the ability to use different versions of the same libraries by different modules while also removing the ability to auto-update these libraries, but when it is not possible to avoid such things then they are certainly needed. You wouldn't shoot yourself in the foot for spite, nor do I suspect you would not complete your project just because it best to not step outside the bounds of the regular module class loaders.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-5509557879624202585?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/5509557879624202585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=5509557879624202585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5509557879624202585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5509557879624202585'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/07/sharing-classes-with-modules-and-non.html' title='Sharing classes with modules and non-module based JARs in a NetBeans RCP Application'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-6562294765176020504</id><published>2007-07-09T13:32:00.001-05:00</published><updated>2007-07-09T13:46:20.366-05:00</updated><title type='text'>Eclipse 3.3 Europa SPAM, regular emails, and magazine articles related to simultaneous project releases</title><content type='html'>Not wanting to start a flame war, but I want to talk about this. I have been getting "alot" of SPAM from places like bzmedia and ZD (Ziff-Davis) about Eclipse 3.3 Europa. I have also been getting emails from my magazine subscriptions such as eWeek and SD Times. I have also seen articles in my different magazines about it.&lt;br /&gt;&lt;br /&gt;The main talking point in the articles and emails I'm referring focuses on the simultaneous release of 21 projects in the Eclipse IDE. These are the core Eclipse projects, so I'm not talking about 3rd party projects. This means the plug-ins/projects will all run with Eclipse 3.3, so you don't have plug-in Z supported in 3.3 yet X and Y are only supported up to 3.2.&lt;br /&gt;&lt;br /&gt;It is no secret I'm a member of the NetBeans community. I certainly don't try to hide the fact. Anyways, NetBeans has been doing this for years. JSP, Web, EE, Swing UI, Mobile developer, NetBeans RCP, etc have always been released together and work in the current version of the IDE. I think it is good that Eclipse is doing this now, but I also think the apparent amount of resources going into highlighting this fact, promoting it, and that it took this long for it to happen is funny.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-6562294765176020504?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/6562294765176020504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=6562294765176020504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/6562294765176020504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/6562294765176020504'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/07/eclipse-33-europa-spam-regular-emails.html' title='Eclipse 3.3 Europa SPAM, regular emails, and magazine articles related to simultaneous project releases'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-1463184115572803518</id><published>2007-06-23T18:01:00.000-05:00</published><updated>2007-06-23T18:05:53.188-05:00</updated><title type='text'>American Internet Connections</title><content type='html'>I'm driving back from the beach early so I can get back home and get some work done. It is a long drive, so I stopped for a Subway grilled chicken sandwich at a truck stop in the middle of the interstate with no large city near.&lt;br /&gt;&lt;br /&gt;I thought I would check email to try to wake up a bit before getting back on the road. Of course, for this, I will need an internet connection. I am happy to say I have one and I am writing this from an exit with nothing around but this one Shell fuel and truck station. The connection is great.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-1463184115572803518?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/1463184115572803518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=1463184115572803518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/1463184115572803518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/1463184115572803518'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/06/american-internet-connections.html' title='American Internet Connections'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-4271017328913683924</id><published>2007-05-22T00:24:00.000-05:00</published><updated>2007-05-22T01:27:38.618-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Tie that binds Sun, NetBeans and Java criticized</title><content type='html'>A friend told me about this article. I read it. I was immediately peeved:&lt;br /&gt;&lt;a href="http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci1255657,00.html"&gt;http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci1255657,00.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One paragraph from this article reads:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Roth argued that Sun Microsystems Inc. has tied the NetBeans IDE to Java in a way that takes unfair advantage of Sun's custodial relationship to the Java language and ignores the developers working with the Eclipse IDE. "I think what they're doing is morally reprehensible," he said.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Personally, I first want to see what it is Mr. Roth is exactly talking about. I am not a Sun employee, and I haven't seen anything in NetBeans I do not have access or which isn't being converted for me to access, and I certainly have not seen anything in Java which is specific to NetBeans other than IDE features.&lt;br /&gt;&lt;br /&gt;NetBeans is a Java IDE. Of course the IDE project is going to ignore Eclipse IDE users. They are not NetBeans users. It would be like us Americans going up and voting in Canadian elections and not paying Canadian taxes and getting Canadian benefits. What flipping sense would that make.&lt;br /&gt;&lt;br /&gt;If he is talking about features, then I'm not sure how there can exist multiple IDEs and them have the same exact feature sets. Otherwise, why even have more than one. I for one do not like Eclipse nor SWT; that does not mean others don't, but I believe I have the right to choose. I'm glad I have an alternative.&lt;br /&gt;&lt;br /&gt;There are many things like the mentioned paragraph in this article. I find many of them to be extreme contradictions of their own words. How can one have an autonomous project if it is exactly like another one (Eclipse)? NetBeans is not Java. NetBeans is not Eclipse. It is a Java IDE, so of course it supports Java features. Instead of telling Sun to contribute to Eclipse, these people could just as easily contribute to NetBeans as it is an open-source project.&lt;br /&gt;&lt;br /&gt;For instance:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Jason Bloomberg, senior analyst with ZapThink LLC., strongly supports the criticism, saying, "Bill Roth from BEA is right on the money."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OK, so what exactly are you talking about? It still eludes me. I have yet to see anyone quoted as saying what it is specifically Sun is doing to give NetBeans an unfair advantage...repeated...enough said on that front...waiting for answers.&lt;br /&gt;&lt;br /&gt;I'm a member of the NetBeans Dream Team. I have been around the NetBeans project for years, and I contribute as much as I can. I love the IDE, and around 4.0 I started playing with the Rich Client Platform; I help other users among other things and is why I'm part of the team. I have at times voiced my concerns in our community about community involvement and Sun.&lt;br /&gt;&lt;br /&gt;That doesn't mean I think Sun runs NetBeans as some kind of totalitarian project. I strongly believe differently. I have never been a Sun employee, and I have a good community relationship with many Sun folks, and it stays good even when in disagreement.&lt;br /&gt;&lt;br /&gt;Like any project I have seen, there are some who are easier to work with than others. It doesn't mean they are bad folks; they are simply people. Different people see things differently. Just like people, different projects are run differently and in turn behave differently. That should be no surprise to anyone involved in an open-source project.&lt;br /&gt;&lt;br /&gt;It seems to me the folks complaining are not complaining about Sun, Java, and NetBeans specifically though this is what they say. Their comments seem to allude they want Sun to contribute to Eclipse, have NetBeans go away, and that be it. To me it is about like asking SuSE developers to contribute to RedHat or Ubuntu or vice versa and the others go away.&lt;br /&gt;&lt;br /&gt;Those Linux projects all contribute to the Kernel just as all IDE and Java projects at times will contribute to patches and common APIs and tools for Java. That doesn't mean all projects for a technology should be merged into one. Different people love these products and projects. Eclipse users and developers: Imagine Eclipse going away and being stuck with NetBeans. NetBeans users and developers: Imagine NetBeans going away and being stuck with Eclipse.&lt;br /&gt;&lt;br /&gt;Obviously if Sun is working on a JSR they can add features to their IDE to gear up for supporting the API or specification. This is what BEA or any other company will be doing with their products if they are worth having investors or customers. I, as a user and community member, expect it. That doesn't mean an API was designed specifically for their projects, but it will always (for any company) play a part, and if any CEO or VP tries to tell you different, they are &lt;span style="font-weight: bold;"&gt;lying&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It seems we have a few classes of folks when it comes to issues like these. I call the ones I read here whiners. Some seem to be commercial entities and employees looking for anything FUD or sound bite related to make their own case, and others are those who seemingly don't know and understand the daily ongoings of open-source projects and the intermingling of commercial and community contributions.&lt;br /&gt;&lt;br /&gt;NetBeans is just as open-source as anything else. If there is a feature these guys want in Eclipse they can take the code and use it. Many people in the NetBeans community do every day for their own projects. If they just want Sun to contribute to their IDE instead of NetBeans, they should just say it in those terms, and they should be asking instead of telling Sun how &lt;span style="font-style: italic;"&gt;morally reprehensible&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;they are for support their own open-source community. Regardless, will all those quoted in the article contribute to NetBeans as they are asking Sun to do for Eclipse?&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-4271017328913683924?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci1255657,00.html' title='Tie that binds Sun, NetBeans and Java criticized'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/4271017328913683924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=4271017328913683924' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/4271017328913683924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/4271017328913683924'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/05/tie-that-binds-sun-netbeans-and-java.html' title='Tie that binds Sun, NetBeans and Java criticized'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-8194458060479108664</id><published>2007-05-20T19:01:00.000-05:00</published><updated>2008-12-10T20:34:27.767-05:00</updated><title type='text'>OpenSuSE 10.2, Fedora Core 5, Kubuntu Fiesty Fawn, Vista, XP, VMWare, Windows Development, Open-Source, Java, Computer Forensics, and Everything Else</title><content type='html'>In the screen shot below, the black space on the bottom of the left comes from the image having to be rectangular. My screen ends where the black begins on the left. The black on the right is where I have Windows resolution set smaller so I don't have scroll bars on the outside of my screen. I have a newer resolution I'll post more images of once I get them. I'll have to think of something cool to show you like developing Windows, Linux, and Java applications at the same time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nhYhoq2dQSE/RlEDEwgdpQI/AAAAAAAAAAM/g_KVv7uJ-Ec/s1600-h/wade_opensuse_10.2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_nhYhoq2dQSE/RlEDEwgdpQI/AAAAAAAAAAM/g_KVv7uJ-Ec/s320/wade_opensuse_10.2.png" alt="" id="BLOGGER_PHOTO_ID_5066834436043941122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My employer targets Microsoft platforms. I also have to create ISAPI Web Applications and Windows Desktop Software (using Windows APIs). However, I end up writing Java source more than anything as part of some of our contracts.&lt;br /&gt;&lt;br /&gt;Personally, I have always loved Linux and all the utilities and flexibility which comes with it; the entire operating system is built for computer work and application development/software engineering. The reality is no matter where I work, even for myself, I will run into Windows development, so, no matter what, I can never (in the foreseeable future) do away with Windows development and Windows.&lt;br /&gt;&lt;br /&gt;I do a lot of different computer related things in the software field. I have recently been working on becoming a certified computer examiner and getting into computer forensics. I have been using Linux a lot for forensics. Unix class systems such as Linux offer a lot for forensics as there are many ways in which to access data without mounting a drive and altering time stamps or data; one can even see exactly what much of the source code is doing if something comes into question. Windows makes this much harder.&lt;br /&gt;&lt;br /&gt;My development laptop's screen started acting weird, so I decided I needed to get another backup computer so I could fix it.  My current computer was my last backup. This time I went to Best Buy and bought a Toshiba Satellite P105-S6177.&lt;br /&gt;&lt;br /&gt;It has some decent (not awesome) hardware built in. However, it is not without issues. Even while running Vista, the operating system which came pre-installed, it could not hibernate without blue screening. I know it was blue screening because the error message in the log said it was, but the screen would just go black any time I tried to hibernate; the patch Vista found on the Microsoft web site did not remedy the issue. One certainly wonders why they pay 299.99 for an Ultimate Upgrade with noticeable issues such as this. I have used hibernate ever sense it became possible. It seems to save me a lot of time as I use it daily unless forced to reboot.&lt;br /&gt;&lt;br /&gt;After the computer seemed to be having a few issues with Vista, I decided to try a new method for development. I have used virtualization for different things such as testing on different versions of operating systems, and the company uses virtualization for web servers. I have not tried to use it, until now,  to run a mutli-OS desktop development environment.&lt;br /&gt;&lt;br /&gt;I have used dual and triple booting, but I wanted to be able to work on different projects in different contexts at the same time and on the same machine for multiple operating systems, and I have been wanting to see what it would be like to get to use Linux all day every day, setup a multi-monitor X system, and contribute more to a Linux distro.&lt;br /&gt;&lt;br /&gt;OpenSuSE 10.2 seemed promising and I have used 10.1 on another system for some time, so I ended up going with it. I downloaded CentOS 5 (which is Red Hat Enterprise for free), but it could not detect the graphics card and monitor. I even gave Kubuntu Fiesty Fawn a test drive, but I didn't like it as much as I like SuSE. I have used CentOS for different things and like it a lot, but I needed to get going as fast as possible and had hardware issues from the beginning, and I find the SuSE administration tools extremely useful. The YaST tools are not 100% perfect but what is.&lt;br /&gt;&lt;br /&gt;I have used Linux off and on since 1996. I had all kinds of cool features when consumers thought Windows 95 was cool. Through the years I have given different distributions a shot including different Debian based ones. Mostly I have been back and forth with Red Hat and SuSE, and I have always had a place in my heart for Slackware even though I don't use it any more (nothing personal...I'm not using Red Hat or Fedora at the moment either). I think mostly I love the word slack :-). I also use Helix and Knoppix for specialized tasks.&lt;br /&gt;&lt;br /&gt;I think it is important to make sure everyone knows this is not my first time with Linux as it wasn't like I just installed this from a CD or DVD and all was good without some manual labor. It took a week or so to get this computer just right.&lt;br /&gt;&lt;br /&gt;The issues:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dual Monitor Support:&lt;br /&gt;&lt;br /&gt;Sax2 setup the main screen fine. It could not setup dual monitor support correctly. Even cloned display was incorrect. I had to edit the xorg.conf file by hand. Once configured I noticed the support works better than the dual monitor support under Windows XP. I didn't even have to have extra software to have a taskbar on each screen.&lt;br /&gt;&lt;br /&gt;I had to read and figure out exactly how the X configuration files work. Once I spent the time to learn the files, I quickly learned I could use Sax2 to get the initial file created. Then, by reconfiguring for my specifics I could get it working correctly. I can use Xinerama which lets me drag from screen to screen or is one giant desktop, I can use the normal view which is an X server on each display, thus each has its own sepearte taskbar and I can not drag between the two, or I can use a cloned display which isn't very useful for anything except maybe a cash register, kiosk, dual developers on the same machine during a code review, or something similar to these.&lt;br /&gt;&lt;br /&gt;The big gotcha on my system is that the two screens are not the same size and resolution. They are even different aspects. One is a wide screen laptop display capable of 1280x800 and some higher resolutions and the other a LCD monitor capable of 1280x1024.&lt;br /&gt;&lt;br /&gt;I noticed to really test the X configuration I had to completely reboot, otherwise it didn't look as it should and I would keep changing the file with no good result. I'm not sure if this is some type of a bug in X or something to do with a buggy ACPI system in the Toshiba or some other firmware issue. The LCD monitor is a zero configuration monitor which I push a button and it auto configures the screen layout based on its input.&lt;br /&gt;&lt;br /&gt;The display related sections below show some of the things. Notice I have the one mode for the external monitor. This might not be so good for other external monitors, but it is the only resolution,I have found, which works well with this monitor (a Samsung SyncMaster 960BF).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sound Support:&lt;br /&gt;&lt;br /&gt;I had issues with sound. I also had some other issues with USB device removal and certain devices not working once they were plugged in again. I had a suspicion these were ACPI errors. I could disable ACPI:&lt;br /&gt;apm=off acpi=off noapic&lt;br /&gt;and things worked correctly except for anything ACPI specific and no dual core support on my dual core CPU.&lt;br /&gt;&lt;br /&gt;I had decompiled my DSDT and had looked it over. I noticed it had a determination for the OS, so I set the boot parameter acpi_os_name="Windows 2006" per the decompiled Intel DSL code. This had no affect. So, I thought maybe this was an issue with something else. I had seen talk about ICH7 and the Conexant codec. I saw another post where the individual had completely hard coded the DSDT setting of OSYS, and was replacing ALSA with a newer version. So, I started to work through his steps. Turns out the first step, hard coding the DSDT setting of OSYS the Windows 2006 value (0x07D6). was all I needed.&lt;br /&gt;&lt;br /&gt;In total:&lt;br /&gt;&lt;br /&gt;I downloaded and built the Intel ACPI tools and compiler iasl and added them to the PATH.&lt;br /&gt;&lt;br /&gt;I then extracted my DSDT to my project folder using (you have to have started with ACPI enabled even if with bugs):&lt;br /&gt;cat /proc/acpi/dsdt &gt; dsdt&lt;br /&gt;&lt;br /&gt;Next, I decompiled the code:&lt;br /&gt;iasl -d dsdt&lt;br /&gt;&lt;br /&gt;I then found the following code and changed it by commenting out the OS checks and hard coding the Windows 2006 value:&lt;br /&gt;    If (CondRefOf (_OSI, Local0))&lt;br /&gt;    {&lt;br /&gt;        /*If (_OSI ("Linux"))&lt;br /&gt;        {&lt;br /&gt;            Store (0x03E8, OSYS)&lt;br /&gt;        }&lt;br /&gt;        Else&lt;br /&gt;        {&lt;br /&gt;            Store (0x07D1, OSYS)&lt;br /&gt;            If (_OSI ("Windows 2001 SP2"))&lt;br /&gt;            {&lt;br /&gt;                Store (0x07D2, OSYS)&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            If (_OSI ("Windows 2001.1"))&lt;br /&gt;            {&lt;br /&gt;                Store (0x07D3, OSYS)&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            If (_OSI ("Windows 2001.1 SP1"))&lt;br /&gt;            {&lt;br /&gt;                Store (0x07D4, OSYS)&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            If (_OSI ("Windows 2006"))&lt;br /&gt;            {&lt;br /&gt;                Store (0x07D6, OSYS)&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            If (LAnd (MPEN, LEqual (OSYS, 0x07D1)))&lt;br /&gt;            {&lt;br /&gt;                TRAP (0x3D)&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        */&lt;br /&gt;       Store (0x07D6, OSYS)&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;Then, I compiled the code using:&lt;br /&gt;iasl -tc -f dsdt.dsl&lt;br /&gt;&lt;br /&gt;There will be errors and warnings, but the -f forces the dsdt.aml file to be created even though there are compiler errors. If you try to fix the errors you get from this code it will not work. I have already been down that path. Apparently the _T_0,_T_1,etc variable/storage names are required even though the Intel compiler says they are reserved words which I could find no documentation. I assumed they were just variable names, but this must not be the case for these particular storage identifiers with these names.&lt;br /&gt;&lt;br /&gt;Next, you need to be root:&lt;br /&gt;su -&lt;br /&gt;enter your password, and you'll be back at a prompt. Now cd back to your project directory.&lt;br /&gt;&lt;br /&gt;Next I copied this to the etc directory.&lt;br /&gt;cp dsdt.aml /etc/DSDT.aml&lt;br /&gt;&lt;br /&gt;I then started YaST. I then went to System|/etc/sysconfig Editor|System|Kernel|ACPI_DSDT. I set it to /etc/DSDT.aml. I clicked Finish.&lt;br /&gt;&lt;br /&gt;Next, we have to tell the Kernel where to find it (after setting the ACPI_DSDT in YaST SuSE now knows where the DSDT we want to use is):&lt;br /&gt;mkinitrd&lt;br /&gt;&lt;br /&gt;Then reboot your system. Either use the user interface (Restart) or type:&lt;br /&gt;reboot&lt;br /&gt;&lt;br /&gt;You should now be able to configure your sound card and it work. If the card is already configured, even if no sound was coming out previously, you should notice sound upon reboot. This was my experience.&lt;/li&gt;&lt;li&gt;IRQ Balancing:&lt;br /&gt;&lt;br /&gt;Looking in /proc/interrupts, I noticed that CPU 0 was the only CPU getting interrupts. The irqbalance start up script was not starting irqbalance even while telling it to manually on the command line. Looking in /etc/init.d/irq_balancer (the script which runs it), I noticed this code:&lt;br /&gt;start)&lt;br /&gt;echo -n "Starting irqbalance "&lt;br /&gt;if [ $PHYS -gt 1 ] || [ $PROC -gt 1 -a $PHYS -eq 0 ] ; then&lt;br /&gt;startproc $IRQBALANCE_BIN&lt;br /&gt;# Remember status and be verbose&lt;br /&gt;rc_status -v&lt;br /&gt;else&lt;br /&gt;rc_status -u&lt;br /&gt;fi&lt;br /&gt;;;&lt;br /&gt;&lt;br /&gt;where PHYS and PROC are set by:&lt;br /&gt;PHYS=$(grep '^physical id' /proc/cpuinfo | sort -u | wc -l)&lt;br /&gt;PROC=$(grep -c '^processor' /proc/cpuinfo)&lt;br /&gt;&lt;br /&gt;So, any system must have at least 1 CPU, so the test:&lt;br /&gt;$PHYS -eq 0&lt;br /&gt;will always fail, so I changed it to:&lt;br /&gt;$PHYS -eq 1&lt;br /&gt;&lt;br /&gt;and now irqbalance is actually started, and works correctly on a multi-core system versus only working on a true multi-processor system. The only bottle kneck now should be the CPU cache locking and serialization.&lt;/li&gt;&lt;li&gt;Installing and Configuring VMWare:&lt;br /&gt;&lt;br /&gt;The free version of VMWare I'm using doesn't work directly on SuSE. I had to make sure I had all the source packages for SuSE and dependencies for VMWare installed. Once I had the dependencies installed I had to run vmware-config.pl and allow it to build the modules for my kernel. Once I did this VMWare seemed to run fine.&lt;/li&gt;&lt;li&gt;VMWare Sound Issues:&lt;br /&gt;&lt;br /&gt;VMWare sound doesn't work exactly the best. Actually, without doing a couple things it would make VMWare lockup while it had input control, so while it was locked up I could not operate my system until it unlocked. I found a VMWare forum message which mentioned adding a serial port to the virtual machine and in the same message mentioned setting sound.smallBlockSize and sound.maxLength to some value other than the 512 default.&lt;br /&gt;&lt;br /&gt;I found on my system this required setting the values to 64 and also adding a serial port which output to a file. Anything else and I still had the issue, though if I had a real serial port on my system I'm sure hooking it up to the virtual machine would have had the same effect as the fake one. Sound still has some issues, but the performance is not hindered and doesn't lock up the virtual machine and it doesn't break up all the time. I tried to use 128, 32, 48, 256, etc, but 64 was the only one to work correctly.&lt;br /&gt;&lt;br /&gt;Some of my issues may come from using Napster. I have a paid Napster account, and it says it only runs on XP, and Napster crashes quite frequently on Vista. So, I can't be sure if the issues are all VMWare.&lt;/li&gt;&lt;/ol&gt;Now that I'm past the issues, everything seems to be fine. It is a really awesome environment, and I think everyone should have one. I can program just about anything I want. I figure if I ever upgrade to VMWare Desktop I can even install MacOS, but I have not confirmed this as being supported, but it would be cool to be able to developer for all these different OS using Linux and virtual machines. When and if Xen (Linux Virtualization) gets to the point it can support Windows and MacOS and others such as Solaris, I'll give it a shot, and hopefully, I'll have a reason to get an even bigger drive!&lt;br /&gt;&lt;br /&gt;If any of you go to setup a system like this let me know your experiences. It isn't the easiest thing the first time you run into new issues such as ACPI or try new things such as Xinerama with different monitors and resolution, but in the end, at least for me, it is worth it. Have fun!&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;Update 2007-05-24&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;I found out I had an issue with USB and VMWare as SuSE 10.2 and many other Linux distros no longer support usbfs. I downloaded the 30 day trial for VMWare Desktop 6, and it is amazing. It works so much better. I still have some sound issues, but everything else works so much better; even the display is faster. VMWare Tools is also a life saver. I definitely recommend this setup to others. I can even run Vista or XP as a large desktop which covers both my X terminals running in Xinerama. Good stuff! I'm going to purchase a commercial license for VMWare.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;Update 2007-06-01&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Multiple monitors and independent taskbars&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;I decided to post a new screen shot. I have setup my desktop with some new panels. KDE is amazingly configurable. You have to play around with it a bit. Once you figure it out, it is just awesome. I have, on both monitors, a similar taskbar, and each taskbar is independent yet shows the same windows. Check out the window floating between both monitors.&lt;br /&gt;&lt;br /&gt;Notice the same titles are showing on the bottom. I can easily drag between the monitors, yet I have both showing all processes. I also have different applets and panels in each taskbar panel. On the right I have a color picker, the weather, and even a world clock. On each I have a trash can which makes it easy to move files to the trash bin.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nhYhoq2dQSE/RmBpjUl8-CI/AAAAAAAAAAU/pMVi1xWCQZQ/s1600-h/wade_opensuse_10.2_1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_nhYhoq2dQSE/RmBpjUl8-CI/AAAAAAAAAAU/pMVi1xWCQZQ/s320/wade_opensuse_10.2_1.png" alt="" id="BLOGGER_PHOTO_ID_5071169235963410466" border="0" /&gt;&lt;/a&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Here is one I like: Linux and Vista side by side thanks to VMWare&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;The new VMWare Desktop does much more than the free version I was trying to use. For instance, I can full screen VMWare on a single monitor. I can then move my cursor freely between the two without pressing a key. I can also copy and paste from the virtual machine to my host operating system. In this case OpenSuSE 10.2. I can't drag a file or text across the boundary, but I can copy the file then paste it. I can do the same with similar data flavors as long as the target accepts the value.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhYhoq2dQSE/RmBvl0l8-DI/AAAAAAAAAAc/SVIuknlzXXY/s1600-h/wade_opensuse_10.2_2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_nhYhoq2dQSE/RmBvl0l8-DI/AAAAAAAAAAc/SVIuknlzXXY/s320/wade_opensuse_10.2_2.png" alt="" id="BLOGGER_PHOTO_ID_5071175875982850098" border="0" /&gt;&lt;/a&gt;finally, I can have VMWare allow the guest OS (Vista in this case) to use both monitors. This is so cool, and so flexible.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nhYhoq2dQSE/RmBxPkl8-EI/AAAAAAAAAAk/gSfyfMm5Au8/s1600-h/wade_opensuse_10.2_3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_nhYhoq2dQSE/RmBxPkl8-EI/AAAAAAAAAAk/gSfyfMm5Au8/s320/wade_opensuse_10.2_3.png" alt="" id="BLOGGER_PHOTO_ID_5071177692754016322" border="0" /&gt;&lt;/a&gt;Anyways, I finally figured out my sound issue was only with Napster. Windows Media Player itself works fine. I can jam out to WMA and MP3 files easily using Windows. I get the flexible programming world of Linux. It is really powerful.&lt;br /&gt;&lt;br /&gt;The only issue I now seem to have is that many Windows programmers seem to have crazy ideas about how to use file names. Seems they believe if they use &lt;span style="font-style: italic;"&gt;filename&lt;/span&gt; in one location they should use &lt;span style="font-style: italic;"&gt;FileName&lt;/span&gt; in another and &lt;span style="font-style: italic;"&gt;FILENAME&lt;/span&gt; in another. Well, let's just say, sharing file systems is hard with software developers inconsistencies. I need to figure out a good case-insensitive file system to use or I need to be able to tell Samba to do this for me, so expect at least one more update to this blog post.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;Update 2007-10-14&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;I finally have suspend/hibernate working correctly. Apparently it all had to do with the SuSE version of s2ram (suspend to ram) not knowing my machine (the actual hardware identifiers). I had to go into:&lt;br /&gt;/etc/pm/config&lt;br /&gt;&lt;br /&gt;and set:&lt;br /&gt;S2RAM_OPTS="-f"&lt;br /&gt;&lt;br /&gt;or "force" and this not only made suspend to ram from the applications menu work correctly, but apparently suspend to disk also requires suspend to ram to function properly. If suspend to ram fails then apparently suspend to disk doesn't just quit and leave the computer system running, it does something and then writes it to disk. You restart your computer, it will run for a few minutes, then it will just turn off completely without any warning forcing you to lose anything you were working on :-(.&lt;br /&gt;&lt;br /&gt;I am very pleased now. I can truly hibernate this hardware, and it seems to work correctly. Even the wireless NIC starts itself correctly without me having to turn it off and back on and even reconnects itself. Previously , when hibernate was working incorrectly, I would notice that s2disk apparently didn't store the hardware state correctly as the wireless NIC would always have to be turned off, with the physical switch, then turned back on after 10 seconds (and you did have to wait the 10 seconds...any less and it just wouldn't work at all) just to be able to connect to the internet or network. Previously that was all futile as the computer would shutdown after it had been running for a few minutes. Now all seems well, and it has made life so much nicer with this system.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-8194458060479108664?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8194458060479108664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/8194458060479108664'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/05/opensuse-102-fedora-core-5-kubuntu.html' title='OpenSuSE 10.2, Fedora Core 5, Kubuntu Fiesty Fawn, Vista, XP, VMWare, Windows Development, Open-Source, Java, Computer Forensics, and Everything Else'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nhYhoq2dQSE/RlEDEwgdpQI/AAAAAAAAAAM/g_KVv7uJ-Ec/s72-c/wade_opensuse_10.2.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-7578677144484133731</id><published>2007-03-19T10:20:00.000-05:00</published><updated>2007-05-22T01:30:59.925-05:00</updated><title type='text'>OSGi, JSR 291, and JSR 277 misinformation</title><content type='html'>The problem with the referenced eWeek article is the author apparently chose only quotes which try to promote OSGi as the end all be all to everyone and everything and attempt to bash JSR 277 and Sun Microsystems.  JSR 291 and 277 are not actually competing.  277 will actually make its way into standard Java, and will be part of the standard runtime used by the SE and EE platforms, where as 291 isn't a new specification.  It is another location which points one to OSGi.  It isn't a real specification of the JCP, so why is it even an actual JSR?  That doesn't seem to make much sense outside of commercial politics.&lt;br /&gt;&lt;br /&gt;291 can not even be contributed to by JCP members without first joining the OSGi Alliance (291 means OSGi in this case).  Individuals such as you the reader or myself can join the JCP for free.  Individuals can pay the OSGi Alliance $3,000 US.  This seems strange to me, considering IBM, the main OSGi Alliance member (Eclipse Funding),  was the &lt;a href="http://www.google.com/search?hl=en&amp;q=%2BIBM+%2Bcalls+%2Bopen+source+%2BJava&amp;amp;btnG=Google+Search"&gt;loudest critic&lt;/a&gt; of Sun Microsystems open-sourcing Java.  I believe the OSGi Alliance needs to take their own advice and move this initiative completely to the JCP.  I get Sun used to be an OSGi Alliance member, and I don't really get why this wasn't first run through the JCP, but it needs to be now.&lt;br /&gt;&lt;br /&gt;I agree with the sentiment of some, and I have been a proponent myself of modularizing the entire JRE/JDK, that a module system needs to remain a separate entity from the JRE/JDK itself.  This allows the module system to be separately upgraded without waiting for a new JDK release.  However, we need JVM level support for better partitioning of ClassLoaders and variable and static visibility.  This allows better optimizations and other language and technology hooks which can have greater benefits than a single layer approach.  Both ideas have their place.&lt;br /&gt;&lt;br /&gt;A good point of view is expressed by Glyn Normington (JSR 291 lead and JSR 277 member) in &lt;a href="http://underlap.blogspot.com/2007/03/state-of-java-modularity.html"&gt;this blog post&lt;/a&gt; with regard to both JSRs.  If you are reading through an RSS reader you may need to use:&lt;br /&gt;http://underlap.blogspot.com/2007/03/state-of-java-modularity.html&lt;br /&gt;&lt;br /&gt;If OSGi were to fall under the JCP process I could get more behind it.  Currently it is one more thing to be dependent which is not as easy to contribute to or influence by small startups or individuals.  I would feel the same way if the JCP process is changed to be more closed in the future.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-7578677144484133731?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.eweek.com/article2/0,1895,2100866,00.asp' title='OSGi, JSR 291, and JSR 277 misinformation'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/7578677144484133731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=7578677144484133731' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/7578677144484133731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/7578677144484133731'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/03/osgi-jsr-291-and-jsr-277-misinformation.html' title='OSGi, JSR 291, and JSR 277 misinformation'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-5368427950699860550</id><published>2007-03-07T00:34:00.001-05:00</published><updated>2008-04-03T08:22:28.488-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>I'm a Netbeans Dream Team member</title><content type='html'>I'm a member of a new Netbeans group called the &lt;a href="http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam"&gt;Dream Team&lt;/a&gt;.  We are all supporters of the open-source Netbeans project.  We work to promote and improve Netbeans.  See &lt;a href="http://www.netbeans.org/"&gt;www.netbeans.org&lt;/a&gt; which has a RCP package and a Java IDE.  To me it is the best Java development environment available with many out of the box features.  Best of all: it's free.  I also contribute patches and modules/plug-ins to the project.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-5368427950699860550?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam' title='I&apos;m a Netbeans Dream Team member'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/5368427950699860550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=5368427950699860550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5368427950699860550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5368427950699860550'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/03/im-netbeans-dream-team-member.html' title='I&apos;m a Netbeans Dream Team member'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-5920721453019356411</id><published>2007-03-07T00:23:00.001-05:00</published><updated>2008-04-03T08:23:11.413-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>New Netbeans Module for copying and pasting text formats to and from Java source code</title><content type='html'>I created this module when I finally became tired of having to un-format large SQL queries I did not have a copy of any where other than Java source code.  I ran into this large query from the past which used many many joins from this huge database.  I was hours into trying to figure out what I had missed in the un-format process because Oracle's error message was more confusing than looking at the SQL.  I finally decided it would be easier to write a Netbeans modules to just copy the formatted Java source code SQL String and paste it as un-formatted SQL into TOAD my SQL tool.  After an evening of hacking at the module I have something which works great.  It also does the reverse operation.  I have been using it for a month now and it works great.  I submitted it to the Netbeans contrib site hoping it might help someone else.  I'll upload it the new Netbeans Plug-in Portal site when it goes live.  Look for &lt;a href="http://plugins.netbeans.org/"&gt;http://plugins.netbeans.org/&lt;/a&gt; to go live soon.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-5920721453019356411?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://contrib.netbeans.org/files/documents/130/1291/JavaTextCopyPasteModule.zip' title='New Netbeans Module for copying and pasting text formats to and from Java source code'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/5920721453019356411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=5920721453019356411' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5920721453019356411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/5920721453019356411'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2007/03/new-netbeans-module-for-copying-and.html' title='New Netbeans Module for copying and pasting text formats to and from Java source code'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-115247987701162414</id><published>2006-07-09T16:08:00.000-05:00</published><updated>2006-07-09T22:40:11.403-05:00</updated><title type='text'>Internet Explorer Rant: 6.0 and loving Firefox more and more</title><content type='html'>I found today that Internet Explorer doesn't handle PNG files very well.  I suppose I should clarify.  Internet Explorer 6.0 and I am assuming previous versions display transparency incorrectly.  They also don't handle color mapped PNG-8 files well either.  I found the PNG-8 files look like Atari graphics (very blocky) where as in Firefox and even Windows Image Viewer they look correct.  I.E. does handle GIF and GIF with tranparency correctly or as one would expect. &lt;br /&gt;&lt;br /&gt;I love Firefox more and more every day.  It makes creating a web application so much easier, except for having to still support Internet Explorer which sticks us in the pre-PNG days.  For instance, if we could use transparency in PNGs correctly we could use high resolution icons/graphics with drop shadows and the like and not be locked into specific background colors thus making working with Cascading Style Sheets all the much easier.  Currently this is not possible because of Internet Explorer.  End Rant.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-115247987701162414?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/115247987701162414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=115247987701162414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/115247987701162414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/115247987701162414'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2006/07/internet-explorer-rant-60-and-loving.html' title='Internet Explorer Rant: 6.0 and loving Firefox more and more'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-114658717601955736</id><published>2006-05-02T11:22:00.000-05:00</published><updated>2006-05-02T11:26:16.030-05:00</updated><title type='text'>Interesting Borland C++ Builder 5.0 Bug.  Variables can't be named STATUS_PENDING</title><content type='html'>I have been working on an API for SC DHEC using Borland C++ Builder 5.0.  I came across a strange bug on my system where the compiler would error out on a variable named:&lt;br /&gt;STATUS_PENDING.  To get the file to compile I changed the static constant variable name to STATUS_PEND and everything compiled without issue.  It took two full days to figure out why this file was throwing compiler errors as it was not very specific and simply kept telling me I was missing a ')' or right parenthesis.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-114658717601955736?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/114658717601955736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=114658717601955736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/114658717601955736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/114658717601955736'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2006/05/interesting-borland-c-builder-50-bug.html' title='Interesting Borland C++ Builder 5.0 Bug.  Variables can&apos;t be named STATUS_PENDING'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-113890774757643059</id><published>2006-02-02T14:02:00.001-05:00</published><updated>2008-07-17T16:20:42.253-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Netbeans Modules Development Update</title><content type='html'>I have been working on a Library-&gt;Module Converter for the J2SE Library Manager in Netbeans 5.0.  I have it working well.  I wanted to add a feature to allow the module to install beans to the 'Form Editor' palette when started.  The module currently allows one to select a library and export this to a module which can then be used by both Netbeans Module Projects as a module dependency and as a J2SE library in a Standard Project type.  More on this later and I will be trying to add the module to NBExtras.org as well as placing it on contrib.netbeans.org once I get my 'Contributor Agreement' signed and faxed or mailed in.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-113890774757643059?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.netbeans.org' title='Netbeans Modules Development Update'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/113890774757643059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=113890774757643059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/113890774757643059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/113890774757643059'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2006/02/netbeans-modules-development-update.html' title='Netbeans Modules Development Update'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-112913152706639954</id><published>2005-10-12T10:32:00.000-05:00</published><updated>2005-10-12T10:38:47.066-05:00</updated><title type='text'>I'm currently working on a client for www.exchangenetwork.net using the Axis SOAP API</title><content type='html'>I'm working on a java web start client for the SC DHEC Node implementation.  I'm using standard Network Node services to implement other advanced features.  The only major issue I seem to be having right now is with response and request progresss watching/monitoring.&lt;br /&gt;&lt;br /&gt;I want to be able to display to the user how much of the percentage of a file upload or download has occurred.  The Axis SOAP API and server I'm currently using doesn't have a mechanism for this.  I'm some how going to have to plug-in this feature.  I'm currently trying to decide on the best way to handle this.  I have some options none of which are going to be very fast, so I think this may be a feature I'm just going to have to leave for the end.  Now if I can figure out how to make Axis cancel in the middle of a request/response.&lt;br /&gt;&lt;br /&gt;I love programming.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-112913152706639954?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ws.apache.org/axis/' title='I&apos;m currently working on a client for www.exchangenetwork.net using the Axis SOAP API'/><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/112913152706639954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=112913152706639954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/112913152706639954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/112913152706639954'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2005/10/im-currently-working-on-client-for.html' title='I&apos;m currently working on a client for www.exchangenetwork.net using the Axis SOAP API'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-112774229489768707</id><published>2005-09-26T08:43:00.000-05:00</published><updated>2006-02-14T11:30:01.623-05:00</updated><title type='text'>I bought a new digital camera</title><content type='html'>I finally broke down and bought a moderately nice digital camera.  I've been wanting to get one for some time, yet I just had not ever done it.  So, I'll post some nice pictures as I take them.  I'm not exactly sure how this relates to programming and engineering.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-112774229489768707?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/112774229489768707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=112774229489768707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/112774229489768707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/112774229489768707'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2005/09/i-bought-new-digital-camera.html' title='I bought a new digital camera'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17012213.post-112741354135279146</id><published>2005-09-22T12:36:00.000-05:00</published><updated>2006-07-09T22:56:35.480-05:00</updated><title type='text'>Current status</title><content type='html'>I'm currently working for &lt;a href="http://www.ddiofsc.com"&gt;Decision Dynamics, Inc.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Main projects which I'm involved&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Disease Management Coordination Network or DMCN &lt;a href="http://www.ddiofsc.com/product.php"&gt;More Info&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Exchange Network Node for South Carolina &lt;a href="http://www.exchangenetwork.net"&gt;More Info&lt;/a&gt;: I'm the sole developer and implementer of this project.  I created an API and implemented the &lt;a href="http://www.beanshell.org"&gt;Bean Shell&lt;/a&gt; to allow more dynamic data flows.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;DDI is based in Lexington, SC.  I have the privilege of working remotely from my home town Knoxville, TN.&lt;br /&gt;&lt;br /&gt;Previously I was employed by &lt;a href="http://www.redesetgrow.com"&gt;Red-e Set Grow, LLC&lt;/a&gt; in Winston Salem, NC.&lt;br /&gt;&lt;br /&gt;Child assessment projects I had the privilege of developing&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Learning Accomplishment Profile (all LAP products) &lt;a href="http://www.redesetgrow.com/product/index.html"&gt;More Info&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;LAP Palm/Handheld Applications &lt;a href="http://www.redesetgrow.com/products.html"&gt;More Info...see handheld LAP products&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Battelle Developmental Inventory, 2nd Edition (BDI-2) for Riverside Publishing (Palm version as well) &lt;a href="http://www.riverpub.com/products/bdi2/index.html"&gt;More Info&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;HighReach Learning Progress Reporting &amp;amp; Evaluation Program (HRL-PREP) &lt;a href="http://www.hrlprep.com/default.htm"&gt;More Info&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Child Observation Record (COR) &lt;a href="http://www.redesetgrow.com/products.html"&gt;More info...see all COR products&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Developing Skills Checklist (DSC) for CTB/Mcgraw-Hill.  Web based reporting and Palm child assessment software &lt;a href="http://www.ctb.com/products/product_summary.jsp?FOLDER%3C%3Efolder_id=1408474395213877&amp;ASSORTMENT%3C%3East_id=1408474395213825&amp;bmUID=1141768928373"&gt;More Info&lt;/a&gt; or &lt;a href="http://www.redesetgrow.com/products.html"&gt;here&lt;/a&gt; for Red-e Set Grow, LLC product information&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Red-e Set Grow has direct and indirect customers across the United States.&lt;div class="blogger-post-footer"&gt;Link to by RSS feed using http://wadechandler.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17012213-112741354135279146?l=wadechandler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wadechandler.blogspot.com/feeds/112741354135279146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17012213&amp;postID=112741354135279146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/112741354135279146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17012213/posts/default/112741354135279146'/><link rel='alternate' type='text/html' href='http://wadechandler.blogspot.com/2005/09/current-status.html' title='Current status'/><author><name>Wade Chandler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_nhYhoq2dQSE/S2X-AMFlDaI/AAAAAAAAADQ/kbKx6LXS30s/S220/wade_image.jpg'/></author><thr:total>0</thr:total></entry></feed>
