google
yahoo
bing

Open Source


WEB 2.0 IS HOT RIGHT NOW! A lot of people are talking big about the new way of technology and building applications. It's hard to describe WEB 2.0 because it can mean so many different things to so many people. So, I'm going to steal a quote from the Wikipedia documentation on it:

The term Web 2.0 refers to a second generation of services available on the World Wide Web that lets people collaborate and share information online. In contrast to the first generation, Web 2.0 gives users an experience closer to desktop applications than the traditional static Web pages. Web 2.0 applications often use a combination of techniques devised in the late 1990s, including public web service APIs (dating from 1998), Ajax (1998), and web syndication (1997). They often allow for mass participation (web-based social software). The concept may include blogs and wikis.

So, me being the prototypical techie, I am always interested in new technologies... so I've gotten myself involved in Web 2.0... which involves a lot of AJAX. AJAX is new... and it can be a bit overwhelming at first (as I posted previously).

I bought a book to start off with (AJAX Hacks)... which was a good starting point. Lots of good examples to get started with AJAX and WEB 2.0. I read an interesting chapter that talked about an AJAX Framework called script.aculo.us. First thing I thought was weird name, still not sure how to say it to be honest :) . Then, I read how it's used to create some really, really neat (and useful) AJAX effects for applications. Even they state the obvious on their homepage:

script.aculo.us provides you with easy-to-use, compatible and, ultimately, totally cool JavaScript libraries to
make your web sites and web applications fly, Web 2.0 style.

Visit the site to read up more on it. There site can be a bit confusing, but basically it's a refreshing JavaScript library that is very easy to setup and use. Here are some key links to the site to assist if you want to looking into it more:

I think the best way to figure out this library is to dive in, setup up the files (very easy 5 step process) and play around with all the different method calls. If you need assistance, here is what I did to become familiar with the library. I created a JSP Page with the following code:

HTML:
  1. <title>Evolving Solutions Ajax Examples</title>
  2.  
  3. <script src="/evolve/javascripts/prototype.js" type="text/javascript"></script>
  4. <script src="/evolve/javascripts/scriptaculous.js" type="text/javascript"></script>
  5. <script src="/evolve/javascripts/custom/ade_functions.js" type="text/javascript"></script>
  6.  
  7. <div id="ade_test">
  8. <table width="500" border="1" cellpadding="0" cellspacing="0">
  9.     <tr>
  10.         <td valign="top">
  11.             <b>Text box:</b>
  12.         </td>
  13.         <td valign="top">
  14.             <input type="text" size="40" maxlength="100"  id="txBox" value="Type something here, it will stay...">
  15.         </td>
  16.     </tr>
  17. </table>
  18. <table width="500" border="0" cellpadding="0" cellspacing="0">
  19.     <tr>
  20.         <td valign="top">
  21.             <center><img src="anadeau_482_portrait.jpg"></center>
  22.         </td>
  23.     </tr>
  24. </table>
  25. </div>
  26.  
  27.  
  28. <table width="500" border="0" cellpadding="0" cellspacing="0">
  29.     <tr>
  30.         <td valign="top">
  31.             <input type="button" value="Appear" onclick="testFunction('appear');">&nbsp;
  32.             <input type="button" value="Fade Me" onclick="testFunction('fade');">&nbsp;
  33.             <input type="button" value="Fade Slow" onclick="testFunction('fadeslow');">&nbsp;
  34.             <input type="button" value="Puff Up" onclick="testFunction('puff');">&nbsp;
  35.             <input type="button" value="Drop Me" onclick="testFunction('dropme');">&nbsp;
  36.             <input type="button" value="Shake Me" onclick="testFunction('shake');">&nbsp;
  37.            
  38.             <BR><BR>
  39.            
  40.             <input type="button" value="Hilite" onclick="testFunction('hilite');">&nbsp;
  41.             <input type="button" value="Switch Off" onclick="testFunction('switchoff');">&nbsp;
  42.             <input type="button" value="Blind Up" onclick="testFunction('blindup');">&nbsp;
  43.             <input type="button" value="Blind Down" onclick="testFunction('blinddown');">&nbsp;
  44.             <input type="button" value="Slide Up" onclick="testFunction('slideup');">&nbsp;
  45.             <input type="button" value="Slide Down" onclick="testFunction('slidedown');">&nbsp;
  46.            
  47.             <BR>
  48.             <input type="button" value="Pulse" onclick="testFunction('pulse');">&nbsp;
  49.             <input type="button" value="Squish" onclick="testFunction('squish');">&nbsp;
  50.             <input type="button" value="Fold" onclick="testFunction('fold');">&nbsp;
  51.             <input type="button" value="Grow Top Left" onclick="testFunction('growtl');">&nbsp;
  52.             <input type="button" value="Grow Center" onclick="testFunction('growc');">&nbsp;
  53.             <input type="button" value="Shrink" onclick="testFunction('shrink');">&nbsp;
  54.         </td>
  55.     </tr>
  56. </table>
  57.  
  58. </BODY>
  59. </HTML>

Then inside the file referenced at the top of the JSP page named ade_functions.js, I added this simple method call to test all the different methods available:

JavaScript:
  1. function testFunction(affect_type) {
  2.  if(affect_type=="fade"){
  3.         Effect.Fade('ade_test');
  4.  }
  5.  else if(affect_type=="fadeslow"){
  6.        Effect.Fade('ade_test',{duration:5, from:1.0, to:0.0});
  7.  }
  8.  else if(affect_type=="puff"){
  9.        Effect.Puff('ade_test');
  10.  }
  11.  else if(affect_type=="dropme"){
  12.        Effect.DropOut('ade_test');
  13.  }
  14.  else if(affect_type=="appear"){
  15.        Effect.Appear('ade_test', { duration: 3.0 });
  16.  }
  17.  else if(affect_type=="shake"){
  18.        Effect.Shake('ade_test');
  19.  }
  20.  else if(affect_type=="hilite"){
  21.        new Effect.Highlight('txBox', {startcolor:'#ff99ff', endcolor:'#999999', duration: 3.0});
  22.  }
  23.  else if(affect_type=="switchoff"){
  24.        Effect.SwitchOff('ade_test');
  25.  }
  26.  else if(affect_type=="blindup"){
  27.        Effect.BlindUp('ade_test');
  28.  }
  29.  else if(affect_type=="blinddown"){
  30.        Effect.BlindDown('ade_test');
  31.  }
  32.  else if(affect_type=="slideup"){
  33.        Effect.SlideUp('ade_test');
  34.  }
  35.  else if(affect_type=="slidedown"){
  36.        Effect.SlideDown('ade_test');
  37.  }   
  38.  else if(affect_type=="pulse"){
  39.        Effect.Pulsate('ade_test');
  40.  } 
  41.  else if(affect_type=="squish"){
  42.        Effect.Squish('ade_test');
  43.  }
  44.  else if(affect_type=="fold"){
  45.        Effect.Fold('ade_test');
  46.  }
  47.  else if(affect_type=="growtl"){
  48.        new Effect.Grow('ade_test', {direction: 'top-left'});
  49.  }
  50.  else if(affect_type=="growc"){
  51.        new Effect.Grow('ade_test', {direction: 'center'});
  52.  }
  53.  else if(affect_type=="shrink"){
  54.        new Effect.Shrink('ade_test');
  55.  }
  56.  
  57. }

That was it really... once you have this setup you can load the page and click on all the buttons to see the different effects that script.aculo.us provides. I'm now using this library in a number of applications and clients really seem to enjoy the refreshing new look and features... nice work script.aculo.us!!!

Cheers,
Adrian

A Web Content Management System is a type of Content management system (CMS) software used for managing websites.

The software manages content (text, graphics, links, etc.) for distribution on a web server. Usually the software provides tools where users with little or no knowledge of programming languages and markup languages (such as HTML) can create and manage content with relative ease of use. Most systems use a database to hold content, and a presentation layer displays the content to regular website visitors based on a set of templates. Management of the software is typically done through a web browser, but some systems may be modified in other ways.

Ok, sounds simple right? Not always the case... or so it seems with OpenSource tools for providing these features to clients. Our company, Evolving Solutions has been building CMS systems for some time now and we've been looking for an OpenSource CMS solution that might help us and speed up development time... which in turn lets us get more work done and also charge our clients less! a win-win situation.

So, after many attempts at searching, I've found that most CMS systems are just way to confusing for everyday users... the users that are going to be updating their sites, everyday ;)

I decided to look around again a couple weeks ago and I found MeshCMS I read about the OpenSource project on another site and decided to check it out. I wasn't really excited when I saw the project homepage... I honestly think that they could update it maybe and make it a little catchier since they say that the site is running off MeshCMS. Just my humble opinion.

Anyway, I didn't judge a book by it's cover and I decided to give it a shot. Here are a few key points to what I've found out so far:

  • I was pleasantly surprised at first how easy it was to setup... real easy... you just deploy it as a webapp if you are using Tomcat or any other Servlet Container and it's ready to rock! Refreshing start.

  • No database required for MeshCMS. It's all file driven (templates and JSP's), could be good, good be bad I guess, all depends on what you prefer. But eliminates one step of the setup (creating a DB)

  • All theme/template based. So basically you can set up a theme really easy, here's a quick glimpse if you are curious on simple it really is: http://www.meshcms.org/userguide/index.html#create_theme. Anyone familiar with JSP's and Tag Libraries will appreciate how easy it is to setup a Theme.

  • Extremely user friendly for the end user (which is most important!).

Now, someone looking for a more robust, permission based, blah blah type of Document/CMS system will not be interested in MeshCMS. It's definitely more for someone or some company looking to get a CMS system up and running smoothly and quickly. They even state it on their website:

MeshCMS has been thought as a quick tool to edit pages online, manage files and create some common components like menus, breadcrumbs, mail forms, image galleries and so on.

So, in conclusion, I haven't had a chance to dive in and really use MeshCMS for a production website yet (just being honest, hopefully will soon), but if you are in the market for an easy to use and easy to setup CMS System, I would recommend looking at the features and trying it out for yourself. It'll only take a few minutes and it'll be well worth it!

If anyone has used it or tried it out and has any suggestions or comments, please feel free to share!

Good luck, happy CMS'n!
Adrian

Has you ever looked for an easy way to add searching capabilities to your web site or application?

For some reason when I started looking a year ago I didn't have much luck. I was fairly familiar with an Apache Product named Lucene (probably one of my favorite product names ever... I just love how it sounds), but it really didn't seem to work well with web applications. It seems much more useful to search documents (word docs, text, pdf, etc) and index them for a search. A very useful tool for a company portal, but not for a website that is built with dynamic content or has jsp includes.

Then I stumbled across another Apache Project named Nutch (pretty neat name also).

Nutch is open source web-search software. It builds on Lucene Java, adding web-specifics, such as a crawler, a link-graph database, parsers for HTML and other document formats, etc.

In a nutshell, that means you can search your website or application with Lucene :) Probably may not be really useful for smaller sites, but some of our applications have around 100 pages of content so users always appreciate a search option. Nutch is still in the early stages but we have used it a few times and it seems very solid already. The crawling part can be a bit confusing if you have to setup CYGWIN on your Windows OS for the first time. But once that step is completed and you index a few sites it becomes pretty easy. As with most Open Source tools, the documentation is a bit tricky but give it a shot if you need to integrate search capabilities into your applications!

Here are a couple examples of sites that use Nutch:

OfficeGateway
More of a basic implementation for searching the website for information.
OfficeGateway.ca

Krugle
A more in depth implementation that searches thousands (guessing) of files when you enter a search criteria.
Krugle.com

Searching may not seem to important to some, but it seems to come up quite a bit in our projects... so I guess it might just be important after all! Check out Nutch if you need to find a solid search feature today!

Cheers,
Adrian

Have you ever had a co-worker/colleague/boss ask you "Hey, How hard would it be to have that report in PDF for our software system?"

If so, maybe you've felt like I used too... "Well... umm... I think it's possible... probably not to hard, but could be difficult... do we really need that?" (My business partner heard that one a few times) :)

That was my answer for awhile... until I discovered a great Open Source project named iText

iText is a very simple Java package that is very easy to install and use within your applications. We had a requirement to actually create a very dynamic web application that could create bookmarks and cards to hand out with pictures of people on them and text under the pictures... all lined up perfectly for different layouts... yada yada yada. We decided to go with iText to create PDF files to print the information that needed to be dynamically entered and captured since PDF's seem to print much better than trying to print directly from HTML pages.

You may have similar requirements for a project, if so I strongly recommend checking out iText. All you have to do to set it up is download the jar file and include it in your classpath. Then the next step I would recommend is visiting the Examples page and going through most or all of the code examples to get comfortable with the code and how it works! Nothing helps understand a product more than solid examples and there are plenty of them there.

Another very helpful link is that to the actual API for iText. Once you become more familiar with how the package works, you'll want to dive into the API for even more information and methods.

iText seems like a very solid Project that's been around for awhile. The mailing list is supported very nicely with a number of users currently subscribed. I've also included a link here to a number of books that might help even more if you really want to learn how to create dynamic PDF's within your applications. Click here to view books from Amazon.

As a developer I think this is very important package to look into. I think just about every application we develop could use some sort of PDF creation for reports, calendars and even bookmarks!

Thanks for dropping in, keep on developing in the open source world!!!

Adrian

RSS Feeds... making big news these days! Most will know what they are but if not here is a quick explanation of what they consist of:


RSS is a family of web feed formats, specified in XML and used for Web syndication. RSS is used by (among other things) news Web sites, weblogs and podcasting. The abbreviation is variously used to refer to the following standards:

  • Really Simple Syndication (RSS 2.0)
  • Rich Site Summary (RSS 0.91, RSS 1.0)
  • RDF Site Summary (RSS 0.9 and 1.0)

We've been talking a lot lately at our company about RSS Feeds. Our product OfficeGateway has an RSS Reader for users and it's becoming quite popular. Everyday, the first thing I do (as a user of OfficeGateway) is login and read my favorite feeds from many different news sites, blogs, etc. We are always looking for better/easier ways to integrate new technology with our software products and I was able to find another great JSP Tag Library. The name of it is RSS Utilities and it was developed by By Rodrigo Oliveira of Sun. Thanks Rodrigo, you did a great job.

It's basically the same as implementing the Mailer Tag Library that I posted about earlier. 3 simple steps to get rss feeds reading into your applications:

  • Step 1: Include the following code in your web.xml file.
    XML:
    1. <taglib>
    2.         <taglib-uri>/WEB-INF/rssutils.tld</taglib-uri>
    3.         <taglib-location>/WEB-INF/rssutils.tld</taglib-location>
    4. </taglib>

  • Step 2: Include this single line at the top of your JSP page.
    CODE:
    1. <%@ taglib uri="/WEB-INF/rssutils.tld" prefix="rss" %>

  • Step 3: Include the call on your JSP page where you would like to read in the feed.
    CODE:
    1. <rss:feed
    2. url="http://servlet.java.sun.com/syndication/rss_java_highlights-XYZCompany-10.xml"
    3. feedId="example1"/>
    4. <b>Image: </b><rss:channelImage feedId="example1" asLink="true"/><br>
    5. <b>Title: </b><rss:channelTitle feedId="example1"/><br>
    6. <b>Link: </b><rss:channelLink feedId="example1" asLink="true"/><br>
    7. <b>Description: </b><rss:channelDescription feedId="example1"/><br>
    8. <ul>
    9.   <li><rss:itemTitle feedId="example1" index="0"/><br>
    10.       <rss:itemDescription feedId="example1" index="0"/><br><br>
    11.   <li><rss:itemTitle feedId="example1" index="1"/><br>
    12.       <rss:itemDescription feedId="example1" index="1"/><br>
    13. </ul>

  • After you have the 3 steps completed (and the jar file included in your classpath) that's it! Start reading in Feeds from anywhere. Very easy to integrate with applications. The tag library has a number of useful properties that can be set to customize your feeds.

    Here is a link if you would like to view the tutorial from Sun and I've also included a link here to a resource if anyone is interested in investigating RSS Feeds further!

    RSS Feed Resource

    Best of luck with RSS feeds, it's definitely going to be a big part of the future on the Internet!

    And oh yeah! If anyone would like to include my blog in their RSS feeds, please feel free. Here is the link http://www.evolvingsolutions.ca/devwing/?feed=rss2

    Thanks,
    Adrian

    PS: Thanks goes out to Amit Gupta for his WordPress plugin for including code within your Posts (as seen above). Anyone interested in looking at his plugin (iG:Syntax Hiliter - seemed to work better than most for me) feel free to visit his blog and download it here.

    Anyone that has researched Open Source Portal Servers will recognize tonights post on Liferay Portal Server.

    About 2 years ago our company started researching Portal Software and at first we found that most of it was very expensive and not very friendly to work with.  We were trying to find a portal server to develop our business idea... which later became know as OfficeGateway.

    We had an idea to build an online collaboration tool for Small and Medium sized businesses.  A place for shared calendars... document sharing... CRM... etc.  As mentioned above we spent sometime researching a few commercial portal servers - won't mention any names here :) ... and late one night we stumbled upon Liferay.  We tested it out that night (over a couple beverages)... and found that it was very easy to download and setup, it actually came bundled with Tomcat so it took about 10 minutes to get it up and running.  We were amazed to see when we logged in that the user interface was actually quite easy to follow and there were a number of pre-configured "portlets" available to use with the product.  Oh, and probably the biggest point about the software is that it's ABSOLUTELY FREE TO USE AND IT'S OPEN SOURCE!

    We decided to check out a couple other portal servers, but we always seemed to come back to Liferay.  So, we moved ahead with Liferay Portal Server and began developing/integrating out own Portlets within it.  After a couple of months of tweaking here and there, we had our Business Collaboration Portal ready... OfficeGateway was launched!  Please visit OfficeGateway to find out more about the product if you are interested in using it with your company and/or reselling it.

    More on Liferay: to steal a quote from their site that I think sums up why developers should look into it as a possible portal solution:

    Companies routinely choose Liferay Portal for its out-of-the-box functionality, compatibility across all major application servers and database platforms, scalability, and the relentless innovation of its development team.

    I think that sentence couldn't sum it up better.  Feel free to visit their site for a demo.  The software has come a long way since day 1.  The interface has improved immensely (the look and feel and number of themes, etc), I believe the API has been improved with each version and it also has AJAX integrated into it now.  Take a look at the demo, you won't be disappointed.  There is a lot of other information on their site as well, and also a nice story on OfficeGateway and some other case studies on the site.  Check them out to learn more on how Liferay Portal Server has been integrated over the years!  If anyone is interested or has any questions regarding Liferay don't hesitate to post a comment or contact me directly.

    Cheers,

    Adrian

    Simple post tonight: A product that could possibly save you and your development teams life. SourceJammer is the name, get to know it. Our team was looking for a Source Code Version Control system (sharing files, checkin-checkout files, etc) for months and for some reason there just isn't much out there -- Or at least what we could find. We tried setting up some but had a lot of difficulty in getting them up and running. Then we came across SourceJammer (www.sourcejammer.org). For a Java Development team, this product is a dream come true (and it's OPEN SOURCE also!). It's basically a Java Webapp that can run on any Application Server (ie: Tomcat). It can be setup fairly easy also and there is a small client application that users have to install on their machines to connect to it. Once setup, it's easy to backup, version, share files within your development team.

    Thank you SourceJammer -- thank you Rob MacGrogan and your team! Rob MacGrogan is the lead and primary developer of SourceJammer. He came up with the original idea, wrote most of the code, did most of the maintenance, has served as team lead, and has basically kept the project going.

    -- Adrian

    Hello Everyone,

    I was sitting back today as I setup my new blog trying to think about what to write about first. Thought about recommending some sites that have links to open source projects. Not real exciting. I'll probably talk about many of them listed in the future so that would kinda defeat the purpose of the blog also. Then I realized the perfect opening post... must talk about Word Press!

    Word Press is the blogging software application that this blog is installed on. It was recommended by a friend a few weeks ago and he said it was "very easy to setup". He wasn't joking. It honestly took about 5 minutes to setup! It's written in PHP and the instructions are very easy to set it up. You basically need a database (MySQL recommended) and a webserver that can host PHP applications. Basically it's very easy to setup 1 or multiple blogs off the same system/database. I won't explain too much more about, but feel free to visit their site: http://www.wordpress.com/ a must read for anyone interested in setting up a blog and they actually will even host your own domain if you aren't capable of setting one up on your own. For people interested in reading more of the technical jargon or downloading the application you'll want to visit the following link: http://www.wordpress.org Much information on how to install, plugins, support, examples, etc.

    Word Press makes blogging easy and exciting. It's open source, so you can use it for free with no obligations. Thank you Word Press, and we'll see you in the blogging world!

    --Adrian