Wednesday Sep 30, 2009

Improved communications between users and publishers - Builds #81 and #82 deployed

Yesterday, we deployed build #82 of the Sun Software Library into production, and two weeks ago, we deployed build #81 into production, enhancing the library functionality in the following areas:

  • New Artwork: We have some new artwork:
    Sun Software Library artwork
    Other sites that want to link to the Sun Software Library can use this artwork.

  • Request to be a Content Manager includes a message: One of the reasons we had to change our Terms & Conditions is to allow the users to better communicate with other users.  In this release, we have added the ability for a content management requests to include a message, enabling the user to tell the current content administrators why they are requesting access. ⁞ For small organizations, "where everybody knows your name", this may not seem like a useful feature, but for large organizations (e.g. think of companies the sun of Sun Microsystems), this is especially useful.

    Sun Software Library Content Management Request Message

    The next few releases will include more functionality, enabling users to communicate with one another via the library.

  • New Terms & Conditions: As mentioned earlier, we wanted to add new functionality in the Sun Software Library, enabling users to anonymously contact publishers (and vice versa).  If you log into the Sun Software Library, and have previously accepted the terms and conditions, you'll see this popup, informing you that new terms and conditions are in place:

    Sun Software Library Terms and Conditions have changed

    Click "Accept" to continue.

    We've added this language to the Privacy section (section 6).  You can view the entire terms and conditions at https://library.network.com/terms.html.
     “You acknowledge and agree that Site Offerings may enable You to
    allow to be contacted by Sun other Users, and may enable You to
    submit personally identifiable and other information to other
    Users.   You consent to such contact by other Users (unless Sun
    expressly gives You notice and an ability to opt-out from such
    contact), and to the unrestricted, non-exclusive use by such
    other Users of any such information You choose to submit to them,
    and You assume (and Sun disclaims) all liability and
    responsibility arising therefrom or related thereto.”
  • Internet Explorer support: IE is our most popular browser, some 55% of our users use it.  As such, we need to support it - all 3 versions of it (IE6, IE7, & IE8).  However, we do pay for that support, in terms of engineering time, both in testing, and in fixing bugs.  Primarily because of Firebug and our Mac desktops, Firefox continues to be our primary development and debug platform, with Safari being a close second.  We do fully test on Windows platforms, but find that what typically works on the other two browsers breaks on IE.  Recently, we've spent a significant amount of time debugging IE8, while maintaining functionality for previous versions of IE.

    It's hard to estimate what our actual cost is for supporting IE6, but it is relatively high.  As such, we support efforts to get users to migrate away from IE6.

  • We are 100% JSLint "The Good Parts" compliant: After we integrated JSLint with NetBeans, we got to work making sure our own Web UI (written in JavaScript) passed JSLint.  This took us a while, given the amount of JavaScript code that we have.  The first decision we had to make was what options we wanted to JSLint to enforce - we decided to leverage The Good Parts, written by Douglas Crockford.  Given that this is our entry in build.xml:
            <jslint4java haltOnFailure="${cqs.build.jslint.failonerror}" options="${cqs.build.jslint.options}">
              <formatter type="plain" />
              <filelist id="jslint.filelist" dir="${basedir}/web" files="${cqs.js.jslint.files}"/>
            </jslint4java>
    
    We then set this option in our project.properties file:
            cqs.build.jslint.options=white, onevar, browser, undef, nomen, eqeqeq, plusplus, bitwise, regexp, strict, newcap, immed
    
    After we cleansed our JavaScript code, we set our builds to fail if JSLint detects any errors:
            cqs.build.jslint.failonerror=true
    
    This approach has already paid a dividend: One of our developers wrote some code that worked perfectly on Firefox and Safari, but would have created issues on IE, due to IE's more stringent syntax checking.  Normally, we would have caught this error during our Quality cycles, but JSLint picked up the issue by causing our Continuous Integration build to break.  The issue was fixed in minutes at a relatively low cost, rather than in hours at a much greater cost at a later period in time.

    This incident alone has validated our investment in integrating code inspection tools into our Continuous Integration builds.

    And, no, our feelings weren't hurt!  Humbled, maybe, deflated our egos a bit, definitely, but not hurt.

  • Cobertura integration: In the spirit of integration of code inspection tools into our environment, we integrated Cobertura into our Continuous Integration system.  We've run Cobertura before, but always manually, on an as needed basis.  Now we always have an up to date code coverage report.  Combined with Hudson's Cobertura Plugin, we configured our builds to measure code coverage taking into account all of our automated testing: Web Services based functional tests, Selenium based Web UI tests, and jUnit based traditional unit tests.  This way, we can measure the effectiveness of our testing strategy in realtime.  We still have some work to do in this area, but at least we know where we stand:

    Sun Software Library Code Coverage

  • And as always, lots of bug fixes and minor enhancements here and there...
There are more improvements in store, keep the feedback coming!

Tuesday Aug 25, 2009

Improved advanced search and better context sensitive help - build #80 deployed

Yesterday, we deployed build #80 of the Sun Software Library into production, enhancing the library functionality in the following areas:

  • Additional search options: you can now limit or filter search results based on a tag.  For example, you can now search for all entries that have a particular keyword and are tagged with a particular tag.  To do this, when you open up the "more options" dropdown right under the main search area, you'll notice a new input field titled "Tag".  In this field, you can type in a tag name that you want to use to filter the search results.  This field is "auto-completing", if you type in the first few letters of a tag name, you can select the full tag name from the dropdown list.

    You can see this additional functionality in action:

    Sun Software Library Combined Keyword and Tag Search capbility

  • Improved context sensitive help: We have also improved our context sensitive help functionality in the add/edit popup.  Specifically, we've automated the functionality of copying the FAQ questions from our Sun Software Library help center to this panel, improving the overall quality of the context sensitive help available.  This is another example of how we strive to automate as many of the manual processes that we have, so that we can provide a better service at a reduced delivery cost.

    This image displays the help you get when you edit a publisher entry.

    Sun Software Library Context Sensitive Help

    This image shows the help that you get when you select the "tags" tab.

    Sun Software Library Context Sensitive Help

  • Bug fixes - as always, we fixed bugs.

There are more improvements in store, keep the feedback coming!


Thursday Jul 30, 2009

Context sensitive help for publishers - build #78 deployed

We recently deployed build #78 to the Sun Software Libray, the focus of this release was to improve the experience for publishers in a couple of different areas.

Here is what we added:

  • The primary feature is Context Sensitive Help while managing content.  This feature is easier to describe via a short screencast (less than 2 min), so please press the play button, below.
  • We also fixed numerous bugs associated with logos on the web site, for example, logos of multiple different dimensions are now handled properly.
Usage for the library continues to increase dramatically, we want to thank you for all of your support and kind words.  Please keep the feedback coming.

Thursday Jun 18, 2009

Recent Feedback about the Sun Software Library

I thought I would anonymous share some of the feedback we've received recently regarding the Sun Software Library:

  • "Very good looking user interface, I mean the Sun Software Library webpage, congrats." and "Site is well laid out and easy to use." - these are the ones I'm most proud of, especially given all the flack we've received along the way regarding our Web UI.  This is somewhat ironic, since we initially designed the site to be purely a set of web services that others would use to build UIs - we never planned on building a real UI.  Our initial UI's were really just "reference implementations", which many mistook to be production quality Web UI's.  Funny how things evolve.  You can read a bit about our original ideas here.
  • "It would be cool if the user can access to an application live demo, obviously web based apps." - the publisher can always associate a screencast with the software demonstrating how the software works, this screencast would show up at the bottom of the software detail page.  But even better, we're working on a feature that would allow the publisher to upload a Virtual Machine Image (e.g. VMI in OVF format) that users can instantiate and use (either on their desktop, e.g. via Virtual Box, or on a public cloud).
  • "i am regular visitor of this site" - awesome, we like to hear that!
  • "in the morning i regularly checks this site." - so do I, but only after my coffee fixes (most days, one cup just doesn't do it).
  • "This site keeps me Updated."
  • "i can get all the news and technical stuff from here."
  • "I want to wirte a review to get a free T-shirt, but I found the web  did not work!I try serveral times.The System always  displays  a error mesg  saying "a inner error please try again the later" when i set my screen name. you know I can not write review unless i set my screen name." - looks like there is a bug in the section of our WebUI that enables setting the screen name.  We are working on a fix.  Until then, you can use this page to set your screen name: https://reg.sun.com/createscreenname.

Keep the feedback coming, folks, we always want to hear from people who are using the Sun Software Library.

Wednesday May 27, 2009

Sun Software Library Overview Screencast

Bob May on the Sun Software Library team put together this overview screencast, demonstrating how to search and publish using the Sun Software Libray.  It is very nice, and in less than 10 minutes, shows all the prominent features.

Of course, this screencast is also visible directly inside the Sun Software Library: https://library.network.com/app.jsp#resource/5236

Friday May 01, 2009

Home page upgrade, making logos easier, and more - build #71 deployed

Our latest version - build #71 - was deployed into production yesterday.  Here is what we added:

  • What's New: This new panel on the home page takes a subscription feed from our blog at http://blogs.sun.com/thelibrary  and displays the three most recent entries right on our home page.
    What's New and Featured
  • Featured: This new panel on the home page allows us to highlight specific publishers, software, or resources directly. Want to be listed here? Give us feedback.

  • Searching for a specific tag: We have a lot of tags in our system - approximately 3000 of them.  The vast majority do not make it into our tag clouds.  We now allow you to search for a specific tag, or set of tags, using the same mechanisms as keyword search.  This way, if you create a tag that is interesting to you, but doesn't make it into the other tag clouds, you can find it.  The output is a little different, however - we display tag search results in a custom tag cloud.

    Searching for Tags

    Please note that this feature is different than using a Tag to search for entries in the library, which has been in the system since the very beginning.

  • Logo Preview in add/edit panel to improve usability of logos: Previously, many entries in the library did not take advantage of our logo mechanism, we always wondered why, since after all, an entry with a logo looks better than an entry without a logo.  We always wondered why our users do not take advantage of this feature.  Other users tried to take advantage of this feature, but put in invalid URLs.

    Many principles in User Interface design teach that if the user does something wrong, the sooner you inform the user, the more usable your application becomes.  As such, we now display the logo preview directly in the panel that allows you to edit that particular field.  The response is in real time - if you type in an invalid URL for your logo, this is what you'll immediately see:

    Invalid Logo URL

    Type in a valid URL, however, and you'll get some instant gratification!  Ah, the sweet site of success ;-)

    Valid Logo URL

    The circled annotations above were created manually using an image editing tool - the app does not try to figure out what is wrong with the URL, that's a pretty hard problem to solve, we'll save that one for the next iteration. ;-)

  • Improved content management requests and authorization emails: The emails that we used to send whenever a user requested to be a content manager, or when that request was approved or denied, needed some improvement.  We paid some attention to them, and now they are significantly more user friendly.  Our application has direct URL's to many portions of the app, we take advantage of this by including a URL in the approval emails directly to the approval section of the application.  This is typical in traditional web applications, which have a URL for each page.  Our app is a RIA - which exists on a single HTML page, making this issue a bit more complex from an engineerign perspective.

  • Prettier URL: While we're not that vane, our old system used to include "CatalogQueryServer" as part of the URL structure.  CatalogQueryServer is the web context at which our application is deployed.  This used to leak through sometimes in our URL's, making them less user-friendly.  Specifically, our system used to redirect users from http://library.network.com  to https://library.network.com/CatalogQueryServer  (note the HTTP to HTTPS transition in the redirect), and the web context used to leak through the automated redirect.  We have fixed that.  So now we have a nice pretty compact URL structure.

As always, feedback (either positive, constructive, or what the weather is like where you) is always welcomed!

Thursday Apr 30, 2009

Tag search is now available

Try out the new tag search feature! Search for a tag with keywords by typing the keywords in the search area and selecting "Tags" from the "Scope" drop down list. The results will be shown as a tag cloud in the "Tag Search Results" tab. Click on any of the resulting tags to find items tagged with it.

With so many tags being added daily to the Sun Software Library, this is a great way to check out the specific ones you are interested in. Especially when they do not show up in the most used tag cloud or in the other available tag clouds: Industries, Locations, Solution areas and Sun Technologies. 

If you are adding a tag it might be good to first search for it, or variations of it, to see how it is being used in the library. Please keep in mind that tags with multiple words and spaces are allowed in the Sun Software Library.

We look forward to your feedback about this new feature.


Reporting inappropriate or incorrect content

If you find any inappropriate or incorrect content please let us know by sending an email to ndc_library_content_challenges@sun.com with the following information:

Subject:  Inappropriate/incorrect content

  • Your name
  • Location of the content, including the URL
  • Your correction

After receiving the email and examining the content, appropriate action will be taken within 2 business days.

We appreciate your help in keeping the Sun Software Library content current.

Tuesday Apr 21, 2009

Improving RIA / JavaScript startup performance in latest deployment - build #70

On Monday April 13th, 2009, we deployed build #69 of the Sun Software Library.  This blog entry details the additions we've made.  If you've been following this blog, you know that the Sun Software Library engineering team does a great job of deploying a new build every two weeks, but the blog entries typically trail the deployment a bit.  That's completely because the writer of this blog is a slacker.  No other excuse can be made.  All sorts of gimmicks were tried, apparently to no avail.

This release completes, for now, all of our startup performance improvements associated with our RIA.  As you know, the Sun Software Library user interface is written in JavaScript, and accesses the data in the library using Restful Web Services.  Our Web UI currently has:

  • 12,000 lines of JavaScript code written by us, in 17 different files
  • 2,000 lines of CSS code (I guess you can call CSS code, right?), in 4 different files
  • Oodles of images
  • Many 3rd party libraries (for example, we rely heavily on the Ext JS toolkit for web UI components)

When we initially deployed the application many many months ago, the browser had to download each and every one of these components separately, requiring approximately 20 seconds to load the entire application, and that was on a fast Internet link in relative network proximity to the web site.  Performance from distant parts of the world was atrocious, and that's putting it mildly.  We made things a bit better by building an "index.jsp" home page that loaded relatively quickly (e.g. approximately 8-10 seconds), then transitioned to the "app.jsp" main page (which took approximately 20 more seconds to load).

So we looked for tools to help us improve performance.  After all, we're not the only ones in the world writing RIA's in JavaScript.  But amazingly, we didn't find any tools that fit our way of doing work:  we're LAZY, and we're HUMAN!  Being lazy means we abhor labor intensive, manual processes since they are typically very error prone, whereas being human means we like using tools.  Since we couldn't find the right tools, we went about integrating/building various components.  We'll include details in a future blog entry.

So where are we today?

  • A single "app.jsp" page that contains our entire application.
  • A single CSS invocation,  which is automatically generated with a unique file name containing a timestamp, so it can be cached by the browser but also updated in real time.
  • Two JavaScript invocations, one for Ext JS and one for our entire application, each of which have unique file names similar to above.
  • Most of our images are integrated in to a Sprite, automatically generated.  The only remaining images that are distinct come from the 3rd party libraries we are using.
  • All of our content has a "far future cache expiration date".  A browser with a primed cache only requires 8.3 KBytes of new content to render the application (that's the web services call to retrieve the "most viewed" and "recently updated" entries).

Net net, our entire application loads in approximately 2.5 seconds.  And since it is JavaScript based - once the application has started - only web services calls are made to retrieve data to display.  While there is still some work to do to improve performance even more, we're pretty satisfied with where we are.  The only caveat to the home page load time is that the logos for the various entries are not (yet) cached by our service, we retrieve logos from the 3rd party sites on each invocation.  This makes our page load time dependent on services other than our own.  We measured the page load time w/remote logo loading turned off, using yslow.

 So what else is new? 

Sun Software Library Home Page

Our home page now links to three key Sun organizations that we work with daily:

  • Sun Developer Network: Becoming an Sun Developer Network (SDN) member makes you part of a vibrant worldwide community of developers, and gives you access to cool stuff and exclusive offers.
  • Sun Partner Advantage program: The Sun Partner Advantage Program connects Independent Software Vendors (ISVs) to free or deeply discounted offerings as well as sales relationships, so they can deliver solutions/services to an expanded market.
  • Project Kenai: Sun's new foundation for its connected developer experience of tomorrow.  Freely host your open source projects and code as well as find and collaborate with developers of like mind and passion on this site.

Also, we fixed numerous bugs..  Nothing new here, we are always fixing bugs.

As always, feedback (either positive, constructive, or what the weather is like where you) is always welcomed!

Wednesday Apr 01, 2009

Sun Software Library build #69 deployed - finalizing our tag vocabulary & folksonomy

On Monday March 30th, 2009, we deployed build #69 of the Sun Software Library.  This blog entry details the additions we've made.

This release completes our work with Tag Clouds and Tag Controlled Vocabularies / Tag Folksonomies, which we started a few iterations back.  The approach we use is as follows:

  • We chose a set of tags that we display in our tag clouds.  While this list is fixed, we are open to any feedback to add or remove tags from those clouds.  A future release will allow personal tag clouds.
  • Any logged in user can tag entities in the library with those tags, causing them to be visible through the tag clouds.  This is the Tag Folksonomy aspect of the library.

This particular release enables users to quickly add tags that are in the tag clouds.  The new Web UI enables this as follows:

  • Clicking on the "add tag" displays the following (if the user is not logged on, they would be prompted to log in first, since only logged in users can add a tag):

    Add Tag

    Each of the dropdowns displayed corresponds to the list of tags in a particular tag cloud.  The user can select a tag from the list:

    Add Tag

    Then press the "add" button to actually add the tag:



    If the user wants to add a tag that is not in one of those lists, they can type it into the "other tag" field.  This field displays a list of matching tags corresponding to what is typed in.  The user is not limited to the list of tags displayed:



  • The editor can click on the "myLibrary" link on any of the Sun Software Library pages, click on "edit", then select the "Tags" tab, and add tags, as follows.  First the editor clicks on "myLibrary", then clicks on the "edit" button corresponding to the entry they want to edit:

    MyLibrary Add Tag

    The editor then selects the "Tags" tab:



    The editor then adds a tag, similar to the way tags are added in the detail page above:



    The editor can also add a custom tag:



    Finally, when the editor clicks the "add" button when the editor has selected the tags to add.  The tags selected are added to the tag list on the left side:



    Note that the tags are not actually published or saved until the "Publish" button is pressed:

That's pretty much it for this release..  We fixed a bunch of bugs, etc., but what else is new there?

Send us feedback!

Monday Mar 16, 2009

Sun Software Library build #68 deployed - browsing the library via Tag Clouds

"The Ides of March has come"
"Aye Caesar, but not gone"

On Monday March 16th, 2009, we deployed build #68 of the Sun Software Library.  This blog entry details the additions we've made.

This is the second of a series of releases that will significantly enhance the way we use tags to browse the data in the Sun Software Library.  In this release, we have introduced the concept of multiple Tag Clouds, each with a different vocabulary. 

Here are the new features in this release:

  • Multiple Tag Clouds: This is the major new feature in this release, it's been in development for a while.  This feature enables you to browse the data in the Sun Software Library in different ways.  To see it, click the "view tags" button on the home page.  This is what you will see:

    Sun Software Library Tag Clouds

    The "Most Used" tag cloud represents the tags that are most frequently used in the Sun Software Library, arranged alphabetically.  The number next to each tag name represents the number of entries in the Sun Software Library that are tagged with that tag.  The font size of the text is also relative to the number of times a tag is used (larger font equates to a tag being used more often).

    Clicking on the "Locations" tab, for example, displays a tag cloud of the various location tags in the Sun Software Library (shown below).  For a list of locations, we've standardized on the ISO list of countries.

    Sun Software Library Location Tag Cloud

    Similarly, the other tabs display other tag clouds.

    These tag clouds can also be browsed in the "skinny tag cloud" that is displayed next to the search results.  Simply pick the tag cloud you want to see from the dropdown menu.

    Sun Software Library Tag Clouds

  • API support for tag clouds: We added the following APIs in support of the tag cloud feature.

    GET https://library.network.com/CatalogQueryServer/api/tags?cloud_id=2 will retrieve the TagList for the "Industries" tag cloud.  The following tables maps between cloud_id and Tag Cloud name.

    Cloud ID
    Cloud Name
     2  Industries
     3  Locations
     4
     Solution Area
     5
     Sun Technologies

    If you want to see a list of tags in a particular Tag Cloud, run the following CURL command.  Of course, you are using Solaris, right?

    $ curl https://library.network.com/api/tags?cloud_id=2

    The output will be (the list below is truncated):

    {"TagList": {
      "items": [
        {"entity": {
          "updatedAt": "2008-08-28 03:15:36 GMT",
          "id": 6856,
          "resourceCount": 0,
          "totalCount": 373,
          "description": "Auto Created",
          "createdAt": "2008-08-28 03:15:36 GMT",
          "newsCount": 0,
          "name": "Financial Services-Banking",
          "publisherCount": 373,
          "softwareCount": 0
        }},
        {"entity": {
          "updatedAt": "2008-08-28 03:15:37 GMT",
          "id": 6857,
          "resourceCount": 2,
          "totalCount": 1706,
          "description": "Auto Created",
          "createdAt": "2008-08-28 03:15:37 GMT",
          "newsCount": 0,
          "name": "Financial Services",
          "publisherCount": 1702,
          "softwareCount": 2
        }},
    ...
      ],
      "itemsReturned": 111,
      "itemsFound": 111,
      "totalItems": 2581
    }}


    If you want to see just the Tag names, you can run the following command:

    $ curl -s https://library.network.com/api/tags?cloud_id=2 | grep '"name":'
  • Performance improvements: In our never ending mission to improve the performance of our Web UI, we continually take steps to improve performance.  This time around, we have automatically concatenated all of our CSS files into a single CSS file, improving page startup time.

And that's all for this particular iteration, folks!  Next application deploy will be in two weeks (assuming the additions we've made in the last two weeks pass our QA tests).

Question for you: Did we get our vocabulary list right for each of the tag clouds?  Send us feedback!

Tuesday Feb 17, 2009

Build 65 & Build 66 deployed

Two weeks ago, we deployed build 65 into production, but for a variety of reasons, I never got a round to it to write a blog entry about the new features deployed then.

Earlier today, we deployed build 66.

So I'm giving myself a Round Toit... Round Toit

and I'm not going to stop drinking coffee until I finish this blog entry.

Here are the new features in these two releases:

  • Associating Software Versions and Software Platforms using Drag and Drop: The concept of Drag and Drop has existed in computer user interfaces for a long long time (the original Apple Macintosh, released in 1984, had it).  Why is it that browser based applications are lagging so far behind?

    Our software library supports multiple software versions associated with a given software entry (for example, Sun Microsystems recently released MySQL v5.1).  It also supports multiple software platforms associated with a given software entry (a software platform is the platform that the software runs on, for example, Solaris 10 SPARC or Java SE 6).  In addition, it also supports relationships between software versions and software platforms for a given software entry, for example, "here is the URL for MySQL v5.1 for Solaris 10 SPARC".

    We've struggled a bit with various UI techniques for allowing the user to specify the relationships between software versions and software platforms.  The natural instinct for many outside our group was to create complex forms for data entry, the usual argument being that typical web users aren't used to drag and drop functionality.  We resisted (after all, Google, Yahoo, and others are supporting drag and drop now), and came up with the approach presented in this video.  Let us know what you think.

  • Web UI performance improvements: We've spent a significant amount of engineering time over the last month or so improving the performance of our Web UI.  This blog entry summarizes the approaches we've used.  Over the next couple of weeks, I will write detailed blog entries that demonstrate how each of these approaches work.  As proof, we have reduced the startup time for our main application home page by over 75%.  We use yslow extensively (perhaps even religiously) to measure performance improvements.

    • Automated image sprite generation using SmartSprites: Using sprites instead of individual images improves the performance of web sites.  There is no magic here - the fewer the number of HTTP requests required to render a page, the faster that page is going to render (imagine that ;-).  We combined all of our icons into a single sprite:

      library.network.com sprites

      Most web designers manually create sprites from the various images used on their sites, using a labor intensive approach typically involving an image manipulation utility (e.g. Photoshop), and a pen (or pencil) and paper for scribbling down the coordinates of the location for each image in the sprite.  Then the web designers manually edit the css files and embed those coordinates.  They do this each time any of the images in the sprite changes.

      This wasn't going to work for us, however - for two reasons: we're LAZY, and we're HUMAN!  Being lazy means we abhor labor intensive, manual processes since they are typically very error prone, whereas being human means we like using tools.  We looked for a tool that:

      • Automatically combines several images into a single sprite image
      • Automatically changes CSS files to reflect the locations of the images in the sprite.
      • Can be run from the command line, so it can integrate into our ant based build system within Netbeans.

      We found SmartSprites, and are quite happy with it. A future blog entry will detail how we integrated SmartSprites into our build process.

    • Automated concatenation of JavaScript code using JSLex: Just as we have combined multiple images into a single image so we can reduce the number of downloads required to display our application, we also wanted to minimize the number of JavaScript files required to start our application.  Doing this manually, however, lead to software maintenance nightmares - we ended up manually merging lots of naturally discrete JavaScript files into a single file to optimize for download times, at the expense of code maintenance.  We figured there had to be a better way, and since we are lazy and human, we looked for an automated approach using a tool.

      We found JSLex, and are quite happy with it.  JSLex was initially implemented as an extension to Eclipse for automatically concatenating JavaScript files, but fortunately an ant-based version was released.  A future blog entry will detail how we integrated JSLex into our build process.

    • Compression of JavaScript code using YUI Compressor: JavaScript developers, like all software developers, naturally put a lot of white space and comments (hopefully) into source code.  This is to make the code easier to read, and more importantly, easier to maintain.  Computer hardware, however, typically doesn't care about the majority of white space and comments.  For compiled languages such as Java, this is not an issue since the compiler removes unnecessary aspects of the code.  With Javascript, however, download times are proportional to initial file sizes.  As such, in order to optimize the download time of our JavaScript based RIA, we needed to implement a JavaScript compression utility.

      We used the YUI Compressor to achieve this.  YUI Compressor integrated nicely into our automated build system, so this compression is done without impacting any of the developers.

    • HTTP Cache control directives for glassfish: We implemented cache control directories in Glassfish to avoid reloading static content.  We found http://blogs.sun.com/cwebster/entry/caching_static_resources_in_glassfish  to be very useful.

  • Automated Web UI testing using Selenium: With all the refactoring / automated JavaScript and css munging that we implemented, we were really concerned about implications to quality for our Web UI.  We were already testing our API's in an automated fashion (I'll describe how we do this in a future blog entry), but our Web UI testing was still manual.  In order to improve the quality of our Web UI testing, and to decrease the amount of time before test results are available, we automated our Web UI testing using Selenium.  I'll make a screencast of Selenium running to demonstrate how we do this, but for now, imagine your web browser automatically navigating your application and checking the results.  We've automated testing with Firefox (since it runs under Solaris, our preferred development environment), and are working on automating Internet Explorer testing.

  • Ratings and Reviews can now be entered on the same screen: We are always looking over the shoulder of our users - and that's how we learn how to make our application easier to build.  In this case, we have combined the rating process and review process into a single user action, by allowing our users to rate and review from the same web form.



  • Web Services changes: We have recently changed some of our web services, to make them more intuitive.  The changes were detailed in API Changes for Authentication and Batch Tagging.
    • Login/Logout URL changes
    • Login/Logout Parameter changes
    • Support for Batch Tagging

  • Sun Software Library Users Guide: We developed an end user guide.

  • Numerous bug fixes, including several related to login/session timeouts and syndication.

I don't have any more excuses to procrastinate, so expect a "what's new in build 67" blog entry in two weeks..  But of course, I'm lazy and human, so we'll just have to see what happens.. Now, if I could only figure out a way to automate writing these blog entries.. ;-)


Wednesday Jan 21, 2009

Build 64 deployed

As you can tell from other entries in this blog, the Sun Software Library team firmly believes in Agile methodologies.  This means many things to many people, of course.  A good summary of Agile principles is viewable at the Agile Manifesto site.  This principle is particularly relevant to this blog entry:

Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

Yesterday, we deployed "build 64" to our production environment.  Typically, we deploy a new application version to our production environment every two weeks, but given the holidays in December and various vacation schedules, it has been four weeks since our last push (dammit, Jim, we're human beings, not machines).  You can find out what version is deployed here (this page is auto-generated by our build system, so it is always accurate).  Here are the new features in this release:

  • Promoting Tag Reuse in the Web UI: One aspect of a good Web UI is to facilitate data entry.  In order to make Tag management more effective for the entire system, we have implemented "Tag Autocompletion".  We expect this feature will drive tag reuse, and help the community control "Tag Sprawl".  Wherever you need to type in a Tag name (e.g. when adding a tag to an entity in the Library), you are now presented with list of tags that are already in the system that you can to choose from.  Of course, you can also type in a unique tag name.

    You can add a tag directly in the detail page:

    Tag Auto Completion

    Or you can add a tag when you are editing an entity:

    Adding tags while editing an entity

  • Manage permissions more easily: Some the feedback that we've received along the way indicated that our permissions management interface could use some help.  So we've made it easier, by adding a permissions management button to both the detail page (visible only if you are logged in and have the right permissions for that entity), and the mylibrary page.

    This image shows the Manage Permissions button in the MyLibrary tab:



    Pressing this button brings up this dialog box, enabling the Editor to view who has access, and what kind of access, to this publisher:



    This image shows the manage permissions button in the detail page - pressing it causes the same User Permissions Management dialog box displayed above to come up:



  • Tag Search Web Service: One of the better kept secrets about the Sun Software Library is our software design approach.  We believe strongly in the Model-View-Controller pattern, where the UI is distinctly separated from the business logic and data model (this paper, written by our good friend and mentor Dr. Joseph Bergin at Pace University, describes this pattern well).  Our Web UI access the Controller exclusively through web services.  Our approach has enabled other Web UI's to be built that reflect the same data - BigAdmin and Zembly.

    The latest web service is for searching our list of tags.  This web service was needed to implement the Web UI features described above.  To experiment around with this web service, you can use curl or wget from the command line.  The first example queries for the first three matches for an exact keyword match for "Solaris".  The JSON based result set includes the usage statistics for that tag (e.g. 1813 software entries in the library are tagged with Solaris), as well as some information about the total number of tags in the system:

    $ curl 'https://library.network.com/api/tags?q=Solaris&start=0&count=3'
    {"TagList": {
      "items": [{"entity": {
        "updatedAt": "2008-08-28 03:18:32 GMT",
        "id": 7115,
        "resourceCount": 3,
        "totalCount": 1953,
        "description": "Auto Created",
        "createdAt": "2008-08-28 03:18:32 GMT",
        "newsCount": 0,
        "name": "Solaris",
        "publisherCount": 137,
        "softwareCount": 1813
      }}],
      "itemsReturned": 1,
      "itemsFound": 1,
      "totalItems": 3222
    }}

    This next example queries for the first three tags that are a partial keyword match for "Solaris".  The result set is a list of tags, with each entry containing information about the usage for that specific tag.  In addition, the last few lines of the response indicate that while only three entries were returned as requested, there were 22 tags out of the 3222 tags in the system that matched our criteria.

    $ curl 'https://library.network.com/api/tags?q=Solaris\*&start=0&count=3'
    {"TagList": {
      "items": [
        {"entity": {
          "updatedAt": "2008-08-28 03:15:30 GMT",
          "id": 6846,
          "resourceCount": 0,
          "totalCount": 7070,
          "description": "Auto Created",
          "createdAt": "2008-08-28 03:15:30 GMT",
          "newsCount": 0,
          "name": "Solaris 8",
          "publisherCount": 2658,
          "softwareCount": 4412
        }},
        {"entity": {
          "updatedAt": "2008-08-28 03:15:33 GMT",
          "id": 6850,
          "resourceCount": 0,
          "totalCount": 5859,
          "description": "Auto Created",
          "createdAt": "2008-08-28 03:15:33 GMT",
          "newsCount": 0,
          "name": "Solaris 9",
          "publisherCount": 2340,
          "softwareCount": 3519
        }},
        {"entity": {
          "updatedAt": "2008-08-28 03:15:33 GMT",
          "id": 6852,
          "resourceCount": 0,
          "totalCount": 15345,
          "description": "Auto Created",
          "createdAt": "2008-08-28 03:15:33 GMT",
          "newsCount": 0,
          "name": "Solaris 10",
          "publisherCount": 4467,
          "softwareCount": 10878
        }}
      ],
      "itemsReturned": 3,
      "itemsFound": 22,
      "totalItems": 3222
    }}


  • Documentation Updates: we've updated our documentation to include the API changes.
  • Bug Fixes: We've fixed 20 bugs/issues in this release.

And that's all for this particular iteration, folks!  Next application deploy will be in two weeks (assuming the additions we've made in the last two weeks pass our QA tests).  Comments and feedback always welcome.

About

Welcome to the Sun Software Library blog, where you will find interesting updates and tidbits about using the Sun Software Library.

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today