Sun blogs from India

From the day I bought a laptop with windows vista 64 (in dec 2008), I
have been struggling to get a vpn client which works on it. Cisco
vpn3000 client does not support Vista 64 platform. There were few
options to vpn-connect my laptop:


1) Install another 64 bit OS (Open Solaris / Ubuntu / etc...) and run some vpn client from there.

2) Install Windows XP on VirtualBox (or any virtualization software), and run cisco vpn client from there.

3) Install Cygwin on Vista 64. Compile and run vpnc from there.


All these options works, but was painful to do it just to be able to
connect to vpn. Recently I heard about Shrew Soft VPN Client
(http://www.shrew.net/download/vpn) and gave it a shot. Amazing... It
works great on Windows Vista and Windows 7 64-bit platforms and it is
free. It supports importing .vpn and .pcf files (.pcf support is added
recently in 2.1.5 rc). I am very happy that finally some vpn client
woks on Windows 64-bit :).

I wanted to embed a font in my JavaFX application. Sure enough, the first Google result led to the answer (http://forums.sun.com/thread.jspa?threadID=5353505). But the result is not something that I liked. It worked programmatically, but visually I was disappointed:


Here is the same text using the same font in Photoshop.

I like the second one. The JavaFX rendering does not stay true to the intended look of the font, and for my eyes, has a smudgy look to it (then again, I am no fonts expert). If you are using such a font in many places in your application, this difference between the photoshop mockup and the actual application starts getting to your eyes.

Maybe I am missing some trick or maybe the font rendering is indeed like this on JavaFX. But if this is the way JavaFX renders fonts, I am a tad disappointed for now. Maybe things will improve in upcoming versions.

Buxfer Logo

This one is straight out of the "don't do this" examples. Buxfer is a website that helps you manage your finances. It was pretty good till Mint blew me away. So today, I decided to delete my account data on Buxfer, which is when I got this nugget (below):

Buxer question to delete account

Now what is the problem? Neither of the options is selected by default. One could argue that the choice is left to the user since this is an irreversible action. But then why is the submit button enabled? I promptly clicked it and got this:

error message

Woah! Now there is no way to go back to the previous screen! I have to go to the accounts page and again press delete, and must not forget to select a Yes or No option. Not good.

Have a look at this:

Blooper about the page title

I hope you caught sight of the page title. I did not know that interest rates for fixed deposits (CDs as they are called in USA) should be called 'Normalized Templates for Word 97'. :) It's a minor blooper but speaks of a lack of professionalism. Also, it's a no brainer that this page has been generated by exporting some word document to HTML. However, a look at the page's source (by pressing CTRL+U in Firefox) was even more astonishing:

page source

It's OpenOffice! I would have thought a bank like ICICI would have a pretty sophisticated way of generating and managing their web site content. Seems not.

The standard code used to display a dialog in NetBeans is:

DialogDescriptor dd = new DialogDescriptor(new UIPanel(), "UI Panel" ) ;
Dialog dlg = DialogDisplayer.getDefault().createDialog(dd);
dlg.setVisible(true);

This uses the DialogDescriptor and DialogDisplayer classes from the Dialogs API. You end up a dialog which looks like the image below.

Standard UI Panel

However, what if you want to display some notification messages to the user? NotificationLineSupport to the rescue. Just create a notification line (code highlighted below) and add your message.

DialogDescriptor dd = new DialogDescriptor(new UIPanel(), "UI Panel" ) ;
NotificationLineSupport supp = dd.createNotificationLineSupport();
Dialog dlg = DialogDisplayer.getDefault().createDialog(dd);
supp.setInformationMessage("Sample Information Message" ) ;
dlg.setVisible(true);

The result is a dialog like the one shown below:

UI Panel with notifications

You can show informational messages, error messages and warning messages. However, displaying an error or a warning message does not disable the OK button. For that you will have to call the setValid() method.

One of the most innovative usage of GTalk to date has been as an ice breaker when me and my wife were sitting, poring into our notebooks, ignoring each other, after a petty quarrel. I wasn't talking to her, and she wasn't talking to me. So, there, I opened up GTalk, sent her a "hi" and we started chatting on GTalk, sitting almost next to each other. And what do you know! A smile appeared on her highness' face in a matter of minutes.

I love technology :)

Ended up getting a brizzly invite and promptly got confused by the signup process. :) Yes, I am a lame chap but look at the screen shot below. I thought that I needed to provide only my invitation code and pick a user name since the email and password field were grayed out.

But on clicking the signup button, I got an error (see below):

Yes! I know it's not a valid e-mail address. But what kind of GUI takes focus away from a required field? Totally lame (and equally confusing).

Here's AT&T's Play Safe and Win contest form which got me confused.

What got me was the * next to the U-Verse details. I don't have U-Verse, and I normally associate * with mandatory information in forms. So I thought this form is not for me. What has happened is that the designer of this form has conveniently reversed the role of * to make it denote optional items. That goes dead opposite to convention and is confusing.

As you can see in this form, the U-Verse entry is the only one which is optional, so going with the convention of marking a * against every field in the form would have been a bit of a clutter. But, why not just label the optional field - "AT&T U-verse 9 Digit Account(optional)" and put a line on top of the form mentioning that all fields are mandatory unless otherwise mentioned?

Another sighting of slightly annoying UI behavior. This time, it's VirtualBox. I was trying out the Sun Storage 7000 series simulator (an awesome piece of work. Go download and play with it even if you don't care a dime about storage, it's engineering at it's best), and after screwing up the simulator to my heart's content, I wanted to delete it. Off I went to the media manager to delete about 16 disks that belonged to the virtual machine and that's when my head started aching. The task was to delete 16 disks. The list box allows you to just select one at a time. So, 16 delete actions instead of 1 :(. Once you select the disk to be deleted, the delete isn't triggered when you hit the delete key on your keyboard. You have to take the mouse all the way to the toolbar and click 'Remove'. Doing it once was OK but doing it 16 times is damn tedious.

Also, every time I hit the delete button, I get the message shown below.

The message is there for a purpose. The operation of removing the disk cannot be undone. So it serves as a place to double check. But imagine doing this 16 times :(. Also, as a power user of VirtualBox, I know what I am doing. Can there not be a way to turn this message off?

The scenario I mention about is pretty uncommon. Most VirtualBox users would have a disk or two to be deleted at a time, and that won't be as painful. Also, I haven't quite figured out why the disks can't be removed by the step that deletes the virtual machine. Why delete the hard disks separately? At least, why not ask the user if he wants to delete the hard disks associated with the virtual machine to be deleted.

[Update: Raised a bug (http://www.virtualbox.org/ticket/4828)  for this as per a suggestion in the comments.]

Here is an annoying example of how 'data' on the screen eats away 'information'. Browsing through JSch library's users mailing list archive is such a pain. When you click on the link, you are presented with this page.

Very nice. I can pick and choose to view mails from as far back as 2002! But are the recent mails (August 2009)? They are below this whole matrix.

What's more, even if you were to click on any month in the year/month matrix, you still are not shown the mail threads. You again get to see the huge matrix and some even more (un)interesting stats.

I don't think I am interested in seeing how many mails were exchanged on the second Wednesday of February 2004. I want to see the mail threads, and this statistics bloat comes in my way. Not good.

Any one who has not seen this? Pretty rare, I believe.

This is Firefox showing the user that it is in offline mode. Now, I would think a thousand times before tagging some UI in a software such as Firefox as a blooper, but this one is worthy of it, in my opinion. I recently read a fantastic book on usability - Designing from both sides of the screen, and right into the first chapter of the book, an important point is made about 'appreciating the user's physical effort' in using the software.

Look at this page shown by Firefox. What is the use of the 'Try Again' button if it is clicked without unchecking the 'Working Offline' menu item? Apparently, it does nothing, I found out by trial and error (another situation you want to avoid for the users of your software). I can't seem to understand why I must ferry my mouse half way across the screen and click once to open the File menu, and click again to uncheck the 'Work Offline' item and ferry my mouse back to the center of the screen and then click on 'Try Again'? Can't the 'Try Again' button just be smart enough to do the unchecking of the menu item for me?

I don't want to be overly critical in case I am missing some thing. Comments welcome.

Since I have been going after some low hanging fruits in fixing some Python support related issues in NetBeans, strictly over weekends (without the knowledge of my wife who prefers my MacBook Pro being 2000 miles away from me on weekends), I ran into an interesting issue where I had to display the NetBeans font chooser instead of a custom font chooser being used in the code. Unable to find the proper API (perhaps I am dumb), I waded into the NetBeans sources, and found the way out. Blogging about this here to save some poor soul some time when the need arises.

PropertyEditor pe = PropertyEditorManager.findEditor (Font.class);
DialogDescriptor dd = new DialogDescriptor (
    pe.getCustomEditor(),
    "Some Title"  // NOI18N
);

DialogDisplayer.getDefault ().createDialog (dd).setVisible (true);
if (dd.getValue () == DialogDescriptor.OK_OPTION) {
    font = (Font) pe.getValue ();
}

It just boils down to getting a property editor for Font and then wrapping the panel inside a dialog box using the NetBeans DialogDisplayer API.


A minor one today. This dialog box is pretty good, I just don't like it telling me again and again that it is importing an appliance in it's title. It's too much information in the title.

I would suggest keeping "Importing Appliance" as the title and putting the detailed path of the appliance into the content panel of the dialog box. Or atleast do away the repetitive "import" and "appliance" words in the title.


For the past few days, I have been pointing to various GUI bloopers that I have seen. Today's nugget comes from our own Solaris JDS screen to unlock a display. I am more than a 100% sure that this is a known issue, but I wanted to put the blooper here anyway.

Here's the screen that is displayed to me for about a second or two when I have typed in my password correctly and pressed Enter. 

When I saw this dialog box for the first time, my first reaction was, oh hell, perhaps the password was incorrect.

Look at this dialog box - there is so much wrong in there. First, the password text box is displayed as is. Now it may be that the text box is disabled, but to my eyes, it does not look so (even if it is, it shouldn't be there in the first place). Secondly, that poor little label telling us that the login was successful is a pauper on the screen when it should have been the king. And, the dialog box still tells me that the display is locked. Very confusing to me atleast.

I found another possible blooper. This time, it is the case of unclear feedback. It so happens that I wanted to follow CNN dot com live on twitter using Nambu. I got the following dialog box.

Fair enough. But after hitting Follow, I wasn't told anything. Apparently, the status bar at the bottom did show the status of the action:

Now it can be argued that this feedback is good enough. But I have the following problems with this feedback through the status bar:

  1. It is blending into the background. A green color or any other contrasting color should have made it clear to me. Alternatively, I have seen NetBeans employ a balloon to do similar things. It gives the user enough feedback when the action completed (image below).

  2. The "Done" message hardly conveys anything. What was done? A message like "Successfully following cnndotcomlive" or something similar would have been better.

This nugget comes from Shelfari. I never knew the 'sjdkasd' is a valid date. What a joy!

And that 'Next' button you see above works. No validation.

I came across another blooper today. A friend of mine wanted to apply for a job at Macy's and was asked to create an account and then login with that account to apply for the job online. Fair enough. What got her confused was the "@invalidemail" rhetoric in the text. Now, if Macy's wants one of the applicant's email or telephone number, there are better ways of achieving it than asking the user to enter the telephone number with an @invalidmail suffix. Some one was lazy while designing this web form, or perhaps someone thought that he/she was super smart in coming up with the @invalidmail suffix idea. This is not a good idea, it's a bad idea.



I have been reading a book 'GUI Bloopers' by Jeff Johnson. They say, you never remain the same after you have read a book, and I wholeheartedly agree. Numerous GUI bloopers, which were in front of me, unnoticed, have all of a sudden, started showing up.

I came across a couple of possible bloopers today in the twitter client - Tweetie. Please note the word - possible - in the last sentence.

Here's what Tweetie showed me when I started it:

So what is my problem with this dialog box? There is no title in the dialog. Is this a disaster? Not really. I can see the logo of Tweetie in the dialog, so I can associate this dialog with Tweetie, but, pray why break established conventions by having a blank title? Also, some one who might be new to Twitter/Tweetie can be a bit confused about which username and password needs to be entered. Minor issue, but an issue definitely IMO.

Compare that with Nambu, another Twitter client for Mac, which shows a much better interface:

This is so much better.

Another pain point for me is the 140 characters limit in twitter. While numerous debates rage on the positives and negatives of the 140 character limit itself, as a newbie twitter user, I frequently forget that there is a limit. Here's what Tweetie does to make users like me aware of the limit:

See that limit overflow indication on the top right corner of the window? Well, it so happens that I am frequently writing my twits in a hurry and am used to typing out whatever I have in mind and hitting 'Enter'. And yours truly missed the overflow indication more often than not. Again, comparing this with Nambu:

Now the limit overflow is crystal clear, isn't it?

More blooper expeditions to follow. Keep watching this space!

I happen to click this without thinking of this astonishing outcome :-) .. The perspective added by the dashboard gives the entire photo the required scale !!!

Calling all users/developers of XML Multiview, please vote to the issue and share your experiences and design inputs into the issue report.

To update the issue please click here.

For those who are new, XML Multiview is a nice feature in NetBeans that helps to create a fantastic and easy to use XML Editor based on any DTD or XSD. Many of the existing NetBeans modules such as Java EE use this API extensively. (for example, web.xml editor). Also this API is used in many NetBeans platform based application as well.

I am currently into new ventures that dive deep into the systems and hardware :)..

One funny thing that found out today is this : How to find out MAC address on Solaris. I was too, surprised to see why 'ifconfig -a' prints mac address only if run as root ... interesting..


This is the report from Vellore Institute of Technology, where last Sunday (1st March, 2009) a technical workshop was conducted on Java ME, Java FX and OpenSolaris.

One thing that made everyone of us curious about the college campus was the rail track right in between the campus as shown here.

We (a group of seven Sun Engineers) reached the campus one day before the event. The day started early which protected us from the direct contact of the radiant Sun. We divided the event into three parellel tracks - Java ME, Java FX and OpenSolaris and occupied the computer labs as per the plan. Myself, Varun and Amit covered Java ME, Glashfish and MySQL. Lawrence and Blesson covered Java FX and Gowtham and Nirmal covered OpenSolaris.

There was a tremendous interest towards Java ME in the students who where mostly in third year of their engineering course. I see many students already wrote few small Java ME programs and have them on their cellphones. The questions they asked showed that they were learning and writing programs since long time and gathered sufficient knowledge and skill.

My session was on Java ME with a demo. Slides here and I happen to get the "Hello Mobile World" program written (on NetBeans 6.5 IDE) , tested (using Nokia S60 emulator) and transfered to my cellphone and ran it live! Also, I was able to hook up the client-server tutorial on NetBeans Mobility learning trail.

This report do not contain photos from the event, since I forgot to carry the camera to the event :-)


The NetBeans platform development session went well.... I could cover most of the topics and could demonstrate a simple application to the audience. But due to the last minute issues related to projector compatibility with my laptop (Sony Vaio) I had to use a borrowed laptop and quickly setup my main demo program there. The main demo is being developed here : https://playfull.dev.java.net

On the second day I manned the 'Connected Developer' booth with Ashwin and John (http://kenai.com). Most of the visitors were students. Apart from the typical questions that I get all the time when I meet students (number one is 'How Sun Makes money out of opensource software' :-) ), there were many technical questions on NetBeans and project kenai. Few students were interested in VirtualBox, and I showed them a live demo of Virtual Box running on my laptop. On NetBeans, many students were asking about Server integration for web projects, frameworks such as Hibernate and struts, profiling a web application and questions like 'does NetBeans have a cool HTML editor just like the dreamweaver ? why NetBeans does not support SWT, whats the advantage of NetBeans over eclipse, how can I migrate NetBeans 3.x application into the latest one and where to look for help on this, can I do 'this' in JavaFX, how can I get started with JavaFX and few more questions that I cannot remember now...

Many students were intersted in writing plugins for NetBeans IDE, using VirtualBox, getting started with JavaFX, Project Kenai, Zimbly, OpenSolaris Project looking glass and some more ..

Overall it was a great experience to meet many students and ofcourse, my blog readers :-)..

snaps from the event... first my session on NetBeans platform development :

second the fun event in the evening to unwind...


Sun Tech days is happening as I write this blog entry.... James keynote is on ..

I am speaking @ Sun Tech days on NetBeans platform development on the 18th. Come, learn about the NetBeans platform and see yourself how it helps to build a Java desktop application in less time.

 

 

 

This week's NetBeans news-letter posted a new cool screen-cast on Hibernate support in NetBeans 6.5 IDE. The screen-cast available on www.netbeans.tv shows many features as part of the Hibernate support in the IDE, including, creation of Hibernate configuration file, running Hibernate reverse engineering to generate POJOs and finally using HQL Editor to create and execute HQL queries right from the IDE. 

Check out the screencast and the following tutorials posted on the Web Application Learning trail page and send us your feedback/comments.


NetBeans module development (many times) involves running two IDE instances at the same time : development IDE, where actual module code is written and the target IDE where the code is executed and verified. While fixing a recent issue, I had to make the target IDE run on J2SE 6.0 and was able to debug the code, while the development IDE still running on J2SE 5.0.

This is tricky since, the target IDE by default runs with the same J2SE version as of the development IDE, there's little manual work required. 

Here's what worked for me :

  1. Enable debugging for development IDE : Open main/nbbuild/netbeans/etc/netbeans.conf and append the following line to "netbeans_default_options".
    -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4444
  2. Attach the debugger : Start the target IDE outside the development IDE, you can use the platform specific launchers inside main/nbbuild/netbeans/bin folder. (For example, on Solaris use netbeans script.) Then load the sources (open relevant module project) in the development IDE and select 'Debug/Attach debugger" from main menu. Enter the port as 4444 (as set previously, this port number should be freely available on the system and should be accessible). Then we are ready to debug the code by putting breakpoints where required and examining the variables and call stack... For more info. on debugging using NetBeans IDE, look at this FAQ.
Coool ?


IEEE student branch of KLE college Belgaum, Karnataka are arranging a 3 day seminar called "Vaividhyam-08". I am speaking in this conference about Code For Freedom contest and NetBeans IDE. If you are in and around Belgaum, please come and join the fun :)

As you might have noticed, NetBeans is celebrating its 10th birthday. And to add to this event, NetBeans 6.5 IDE RC1 is out. (Download it from here). Its no surprise that it bears the event stamp on the splash image.

During debugging, if NetBeans sees several method calls on a single line, it allows you to choose for stepping into one of them. So cool !

Update : This feature is available in NetBeans 6.5 beta onwards.

Recently the OpenESB Community announced GlassfishESB. Interesting fact is DataMashup Service Engine part of the open-dm-ds project of Mural community is now available with GlassfishESB. You can  use  colleague Manishs' DataMashup Tutorial as a good starting point to play around.  Will blog more about this component and its features. Stay tuned for some cool stuff.


Mural is an Open Source Community which aims to build the Infrastructure for Master Data Management through its various sub-projects which cater to different aspects of the MDM Life Cycle.

Mural Logo

Before going any further let us be clear on what Master Data Management is all about.  Products, Customers, Partners ... forms the fundamental vectors of a Business Entity. Its extremely critical and fundamental for a business to be able to answer queries like

  • How many unique employees work for the Company?
  • Who are the Customers/Partners I am having relationships with and how are they related?
  • Complete visibility into the Products
  • For a Government, it manifests as Citizen services and complete visibility into Citizen information(Single Citizen View)
  • For a HealthCare Network, it manifests as a Single Patient View etc.
  • Master Data Management is a discipline backed by technology, tools and processes to provide answers to such queries. 
In subsequent entries, we will dive deeper into different aspects of MDM, benefits of OpenSource MDM etc.  







Ok, I have listened to the Java Posse bloopers episode a 100 times and laughed and laughed myself dry.

Now, since I moved to US, I have managed to lose my copy of the episode. And I searched east, west, north and south on the internet but couldn't find it. Anybody know where it can be found?

First day @ MPK17. Everything is so new, and it's a welcome change after three years at BLR03 :)

More posts to follow!

Look at this. Really hilarious! 

"When all you have is a hammer, everything looks like a nail"

 Ever been hit by this?

The Bangalore Open Java Users Group had it's user meet for June 2008 on the 27th at the Himalaya Conference Room at Sun India Engineering Center, Bangalore. The meet, though held on a week day, was well attended (in fact we had the best attendance till date). Not only that, the audience was enthusiastic and participating a lot by asking lots of questions and sharing their views. All and all, a great session - the best user meet I have attended till date. A special thanks to Amit Kumar Saha, the new JUG Leader, who did all the running around to make this meet a roaring success.

Talks:

JavaFX - Harish Singh (3i Infotech)
JDK6u10 - New and Noteworthy - Vaibhav Choudhary (Sun Microsystems)
From Journeyman to Master - Rohan Ranade (Sun Microsystems)

You can read about the proceedings at Mohammed's or Sreedhar Ambati's blogs.

Some snaps of the meet (courtesy Tirthankar):


I am a big Ubuntu fan, and always feel a bit sad when I have to upload my new and noteworthy screenshots next to the swanky and sleek screenshots of people on a Mac on the NetBeans wiki (look at the Spring framwork support section here).

However after some digging around I finally got a font combination that looks pretty neat to my eyes. Here's a screenshot with the default font in NetBeans 6.1 running on Ubuntu 8.04:

And here's after I changed the font to Bitstream Vera Sans Mono 12 pt:

The second one is much better for my eyes (atleast). Any other good combinations out there folks?

Font Settings:


Hibernate Song, very funny !

 

Zone Creation in Solaris 10 is very fast, simple and easy. Following is an example on creating a zone (Virtual OS) on your Solaris 10. This example shows the creation of 'testzone':



# zonecfg -z testzone

testzone: No such zone configured

Use 'create' to begin configuring a new zone.

zonecfg:testzone> create

zonecfg:testzone> set autoboot=true

zonecfg:testzone> set zonepath=/test/zones/testzone
zonecfg:testzone> add inherit-pkg-dir

zonecfg:testzone:inherit-pkg-dir> set dir=/opt

zonecfg:testzone:inherit-pkg-dir> end

zonecfg:testzone> info

zonename: testzone

zonepath: /test/zones/testzone

brand: native

autoboot: true

bootargs:

pool:

limitpriv:

scheduling-class:

ip-type: shared

inherit-pkg-dir:

        dir: /lib

inherit-pkg-dir:

        dir: /platform

inherit-pkg-dir:

        dir: /sbin

inherit-pkg-dir:

        dir: /usr

inherit-pkg-dir:

        dir: /opt

zonecfg:testzone> add net

zonecfg:testzone:net> set address=10.1.1.1

zonecfg:testzone:net> set physical=bge0

zonecfg:testzone:net> end

zonecfg:testzone> verify

zonecfg:testzone> commit

zonecfg:testzone> exit


 

We have added "/opt" directory as well, so that it will not be replicated for zones. This will make zone installation faster.

Now, List the zones:



# zoneadm list -cv

  ID NAME             STATUS         PATH                         

   0 global           running        /                            

   - testzone           configured     /test/zones/testzone

 

The newly created zone is now listed, and is in configured state. The configuration information is stored in an XML file within /etc/zones. The zone can’t be used, until it is “installed.”

Here is the step to install my testzone:



bash-3.00#  zoneadm -z testzone install

Preparing to install zone <testzone>.

Creating list of files to copy from the global zone.

Copying <2383> files to the zone.

Initializing zone product registry.

Determining zone package initialization order.

Preparing to initialize <1032> packages on the zone.

Initialized <1032> packages on zone.

Zone <testzone> is initialized.

Installation of <1> packages was skipped.

The file </test/zones/testzone/root/var/sadm/system/logs/install_log> contains a log of the zone installation.

 

It took less than 5 mins to install the testzone on my system. List the zones now:

 

bash-3.00# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   - testzone         installed  /test/zones/testzone           native   shared

 

You can see that zone status is installed. After installing zone, you have to boot it for the first time setup, and also answer boot-time questions. For this, log into the zone console from another terminal:

 

 zlogin -C testzone

 

This will let you into the zone console (no password req)

Now from the main terminal, boot the zone:

 

zoneadm -z testzone boot

 

On the console, the installation will ask set-up related questions. Answer them appropriately.

Check the Zone status:

 

bash-3.00# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   2 testzone         running    /test/zones/testzone           native   shared

 

The Zone is now started running, and is ready to use.

 

It was a long weekend here in India, and that provided me some time to add some shortcuts which will help users who author XML documents using NetBeans. I wrote a plugin which will add some context sensitive actions to the XML editor. I have just managed to add one action (Delete current attribute), but more are on the way. Actions planned are:

  • Jump to parent tag
  • Jump to next sibling tag
  • Jump to previous sibling tag
  • Jump to end tag (if at start tag)
  • Jump to start tag (if at end tag)
  • Jump to next attribute in a tag
  • Jump to previous attribute in a tag
  • Delete current tag (alongwith children)
  • Delete current attribute (alongwith it's value)
  • Delete value
  • Expand a short tag <a/> into the longer form <a></a>
  • Condense an empty tag <a></a> into it's shorter form <a/>

I am planning to upload the module on the Plugin portal soon. For now, here's a screen shot:

Before the action was selected:

After the action was selected (notice the name attribute is gone):


From www.netbeans.org ...

[

Blog about NetBeans
IDE 6.1 Beta
for...


10 chances to win a $500 American
Express Gift Certificate !


100 chances to win a cool NetBeans
T-Shirt !

Simply:


1. Download
the NetBeans
IDE 6.1 Beta (or later release) and try it out.


2. Blog about
it !


3. Submit
the URL to
your
blog.


4. Do it before
April 18, 2008 !

]

I started out writing this one as a response to some of the comments to my previous post. I guess I had too many thoughts and this warranted a separate post in itself. First and foremost, I wish to state that I value and respect everyone's opinion, for the matter that was discussed was very very subjective. However, as always, I will blurt out what I think in this blog.

I am not against people who learn new languages, and yes, I would never say that Java is just enough (though I love it immensely). But people mostly learn a language, use it a bit and then move on. For me it's like leaving the climb 200m from the summit of Mt. Everest, just because someone seemed to mention a new and difficult mountain to climb. For me, I will climb the new mountain, but let me get to the top of this one first, is my attitude. Many people try to look for new and better ways of doing things when learning a new programming language, but they haven't charted all the territory of the language that they know currently. It is this attitude that needs to be taken care of, in my personal opinion.

As a computer engineer, when my father asks me something about computers (esp. hardware) that I don't know, I feel ashamed somewhere. Sure, I specialize in software, but still I should have known everything about this field, is what I feel. At Sun, everyday offers me something new to learn about Java, something trivial which I should have known (which does my self respect no good, but keeps me honest), something not so trivial. What I gather in such experiences is invaluable if and when I move to a different platform. Don't we all master the art of quickly learning a new language, once we have learnt a couple of them? I think I am trying to learn an effective way of mastering a language/platform, and I do believe, having patience and a mind that constantly seeks out the unknown seems to be essential elements to achieve it.

I would also like to state that learning a language in and out does not guarantee success. Many people know the language, the working of the platform, but are a bit short of knowing about computer science fundamentals. For eg. I have never used a B-Tree at work, but I know what it is, and there might come a time, perhaps 20 years down the line, when my knowledge of a B-Tree and how it works, will lead me to write a significantly better program, and more importantly, make me feel good about myself. One must pay due respect to the science and not just the current state of practice.

I often see many fellow software engineers learning new programming languages every now and then, in the hope that they are increasing their "marketability". They seem to think that the more programming languages they know, the better. C, C++, Java, Javascript, Python, Perl, Ruby, Groovy, Scala, C#... the list goes on and on. These chaps are the first to get swayed by PR of companies marketing these languages (Microsoft for C# and .NET being a prime example). Hell, I talk as if I have been a saint, no, even I used to be in this - "Run to learn the latest language" club.

But over time, I have figured out that learning a language is never accomplished without using it in and out, in all sorts of ways, in all complexities, in various projects. What's the average length of a code example in a book? Roughly 100 lines. And what's the average size of code bases? 1000s and 1000s of lines. Unless you use the language to create something, you are not using the language at all. After all, a programming language is just a means to an end. It's a tool in your hand to create an application, a service, something concrete and tangible.

Having come over to the Java world 2.5 years back, I have this habit of looking back on the code that I had doled out when I was new, and compare it with the code that I churn today. I find such a huge difference. The code that I produced 2.5 years back, is down right laughable in some places. Being at Sun, I was able to work with some very very smart people and hone my skills as a programmer (there is still a huge scope for improvement, as my recent experiences in the NetBeans land have told me). The code reviews have taught me a lot and continue to. I have been fortunate enough to work with some real wizards of design and Java platform and I am always in awe of such people and their ability to assimilate complexity and I try always to study their approach to problem solving. It gives you lots of pearls of wisdom and improves you as a programmer.

Even after this, when I feel that I write much better code than I used to, there is still a long long way to go for me in the world of Java. I still don't know the little things which one gets to know when he is aware of the Java Language Specification. I still haven't really decompiled a Java class, and tried to understand the byte code. I still am baffled by the whole area of memory management. I haven't ever done a performance analysis or improved performance of code written by a different programmer. Never used NIO, still need to go slow when dealing with multi threading.... the list goes on and on. As Bharath Ravikumar (my former colleague at N1 SPS development team) rightly pointed out when I discussed this with him, it's a matter of spending time gathering these experiences. I should try and work on all sorts of things in Java, and when your day job cannot satisfy such a quest, it's best to turn to open source to satisfy your creative hunger.

You can make out the difference between someone who has just learnt the language and someone who has made better use of the time to work on projects in that language.

Now some readers may say that knowing just Java is not good enough, some languages are much better suited for certain applications. I totally agree. But, knowing a low level language (C), a middle level language (Java) and a dynamic language thoroughly, should be good enough for most, if not all, applications.

What do you think of the following picture ? Update : Its one of the front headlight of my new car! Did you see it?

 

The following picture is captured at Kolhapur (Mahalakshmi temple, to which we pay regular visits). The light posts have been hanging places for pigeons.

 

This picture below shows a regular visitor to our neighborhood, but it was very hard to capture like this before. Thank you Mr. Mongoose for the pose.

 

The following picture takes me back to my childhood. (ahh, the good old days) When I was 5 years old, I used to play in this garden. Its a nice place to play hide and seek with the attraction that we can go in and come out safely from the wild animals' mouth :)  

 

 

Thats reminds me that I need to submit my first photo project to nyip. This first photo project is about "action", "close up" and "nature vista". I need to submit one more photos for each for these topics. One unique thing about nyip's Professional Photography course is that, all the photo projects are evaluated by experienced and professional photographers. We get to read and hear from them about our project. (they sent out the recorded audio of the evaluator).