<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SolitaryGeek &#187; software</title>
	<atom:link href="http://solitarygeek.com/tag/software/feed" rel="self" type="application/rss+xml" />
	<link>http://solitarygeek.com</link>
	<description>Technical Productivity</description>
	<lastBuildDate>Mon, 28 Jun 2010 03:54:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Windows 7 RC Expiration</title>
		<link>http://solitarygeek.com/general/windows-7-rc-expiration</link>
		<comments>http://solitarygeek.com/general/windows-7-rc-expiration#comments</comments>
		<pubDate>Wed, 17 Feb 2010 02:01:59 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/?p=525</guid>
		<description><![CDATA[<p>I received a mail from Microsoft today morning about Windows 7 expiration. Here is the essence of the mail:</p>
<p>It’s time to upgrade from the Windows 7 Release Candidate</p>
<p>While most people who tested Windows 7 have now moved to the final version, some are still running the Release Candidate. If you haven’t moved yet, it’s time to <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/general/windows-7-rc-expiration">Windows 7 RC Expiration</a></span>]]></description>
			<content:encoded><![CDATA[<p>I received a mail from Microsoft today morning about Windows 7 expiration. Here is the essence of the mail:</p>
<p><em><strong>It’s time to upgrade from the Windows 7 Release Candidate</strong></em></p>
<p><em>While most people who tested Windows 7 have now moved to the final version, some are still running the Release Candidate. If you haven’t moved yet, it’s time to replace the RC.</em></p>
<p><em>Starting on March 1, 2010 your PC will begin shutting down every two hours. Your work will not be saved during the shutdown.</em></p>
<p><em>The Windows 7 RC will fully expire on June 1, 2010. Your PC running the Windows 7 RC will continue shutting down every two hours and your files won’t be saved during shutdown. In addition, your wallpaper will change to a solid black background with a persistent message on your desktop. You’ll also get periodic notifications that Windows isn’t genuine. That means your PC may no longer be able to obtain optional updates or downloads requiring genuine Windows validation.</em></p>
<p><em>To avoid interruption, please reinstall a prior version of Windows or move to Windows 7. In either case, you’ll need to do a custom (clean) install to replace the RC. As with any clean installation, you’ll need to back up your data then reinstall your applications and restore the data. For more details about replacing the RC, see the Knowledge Base article KB 971767. For more information, visit the Window 7 Forum.</em></p>
<p><em>Thanks again for helping us test Windows 7.</em></p>
<p><em>The Windows 7 Team</em></p>
<p>This sounds very unprofessional and disappointing. Why shutdown the operating system every 2 hours? Why change the wall paper to &#8220;a solid black background with a persistent message on your desktop&#8221;?. Why display &#8220;periodic notifications that Windows isn’t genuine&#8221;?. Did we cheat Microsoft by running Windows 7 RC? Why not just expire gracefully with some friendly reminders.</p>
<p>What do you think about this?</p>
<p>You can get more information about Windows 7 RC expiration from <a href="http://support.microsoft.com/kb/971767">Microsoft Knowledge Base</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/general/windows-7-rc-expiration/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing A Simple Pluggable Java Application</title>
		<link>http://solitarygeek.com/java/a-simple-pluggable-java-application</link>
		<comments>http://solitarygeek.com/java/a-simple-pluggable-java-application#comments</comments>
		<pubDate>Sun, 20 Sep 2009 15:23:12 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[pluggable]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/java/a-simple-pluggable-java-application/</guid>
		<description><![CDATA[<p>Most of the applications we use on daily basis are pluggable. Popular applications like Firefox, Eclipse, NetBeans, JEdit, Wordpress, Hudson are all pluggable. In fact, pluggability has played a major part in the success of most of these applications. Why not make the Java applications we develop pluggable as well? Yes, we get pluggability out of <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/java/a-simple-pluggable-java-application">Developing A Simple Pluggable Java Application</a></span>]]></description>
			<content:encoded><![CDATA[<p>Most of the applications we use on daily basis are pluggable. Popular applications like Firefox, Eclipse, NetBeans, JEdit, Wordpress, Hudson are all pluggable. In fact, pluggability has played a major part in the success of most of these applications. Why not make the Java applications we develop pluggable as well? Yes, we get pluggability out of the box, if our applications are based on a rich client platform like NetBeans or Eclipse. But for some reasons if you decide not to use those platforms, it doesn&#8217;t mean that they should not be pluggable. In this article, we will learn how to write a simple pluggable application that will load it&#8217;s plugins dynamically.</p>
<p><strong>The API<br />
</strong>First, let us define a plugin interface that should be implemented by all the plugins of our application. We are going to keep it very simple. Create a project called &#8220;plugin-api&#8221; in your favorite IDE and create the interface &#8220;ApplicationPlugin&#8221;.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/09/screenshot1-p2.png" alt="" /></p>
<pre class="brush: java;">

package com.pluggableapp.plugins.api;

public interface ApplicationPlugin
{
    String getName();
    void init();
}
</pre>
<p><span id="more-464"></span></p>
<p><strong>The Plugins</strong></p>
<p>Writing the plugins now is very easy. Our plugins need to implement the plugin interface and follow a simple convention to make it easy for our applications to find them later. Create a project called &#8220;plugin-a&#8221; and develop our first plugin.</p>
<pre class="brush: java;">

package com.pluggableapp.plugins;

import com.pluggableapp.plugins.api.ApplicationPlugin;
import java.util.logging.Logger;

public class PluginA implements ApplicationPlugin
{
    private static Logger logger = Logger.getLogger(PluginA.class.getName());

    public String getName()
    {
        return &quot;Plugin A&quot;;
    }

    public void init()
    {
        logger.info(getName() + &quot; initialized!&quot;);
    }
}
</pre>
<p>Now create a directory called &#8220;META-INF/services&#8221; inside the source directory and create a file with the name &#8220;com.pluggableapp.plugins.api.ApplicationPlugin&#8221; (This is the fully qualified name of the plugin interface). The file should contain the name of the actual plugin inside it. In our case, the text is &#8220;com.pluggableapp.plugins.PluginA&#8221;.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/09/screenshot4-p.png" alt="" /></p>
<p>Repeat these steps to create PluginB.</p>
<p><strong>The Application</strong></p>
<p>It&#8217;s time to create the application that will consume the plugins we created. First let us create a class to add the plugin jars to the classpath dynamically.</p>
<pre class="brush: java;">

package com.pluggableapp;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.logging.Logger;

public class ClasspathUtils
{

 private static Logger logger = Logger.getLogger(ClasspathUtils.class.getName());
 // Parameters
 private static final Class[] parameters = new Class[]
 {
     URL.class
 };

 /**
 * Adds the jars in the given directory to classpath
 * @param directory
 * @throws IOException
 */
 public static void addDirToClasspath(File directory) throws IOException
 {
     if (directory.exists())
     {
         File[] files = directory.listFiles();
         for (int i = 0; i &lt; files.length; i++)
         {
             File file = files[i];
             addURL(file.toURI().toURL());
         }
     }
     else
     {
         logger.warning(&quot;The directory \&quot;&quot; + directory + &quot;\&quot; does not exist!&quot;);
     }
}

 /**
 * Add URL to CLASSPATH
 * @param u URL
 * @throws IOException IOException
 */
 public static void addURL(URL u) throws IOException
 {
     URLClassLoader sysLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
     URL urls[] = sysLoader.getURLs();
     for (int i = 0; i &lt; urls.length; i++)
     {
         if (urls[i].toString().equalsIgnoreCase(u.toString()))
         {
             logger.info(&quot;URL &quot; + u + &quot; is already in the CLASSPATH&quot;);
             return;
         }
     }
     Class sysclass = URLClassLoader.class;
     try
     {
         Method method = sysclass.getDeclaredMethod(&quot;addURL&quot;, parameters);
         method.setAccessible(true);
         method.invoke(sysLoader, new Object[]
         {
             u
         });
     } catch (Throwable t)
     {
         t.printStackTrace();
         throw new IOException(&quot;Error, could not add URL to system classloader&quot;);
     }
  }
}
</pre>
<p>Now create an interface called &#8220;PluginService&#8221; to define the methods needed to load and initialize the plugins.</p>
<pre class="brush: java;">

package com.pluggableapp;

import com.pluggableapp.plugins.api.ApplicationPlugin;
import java.util.Iterator;

public interface PluginService
{
    Iterator&lt;ApplicationPlugin&gt; getPlugins();
    void initPlugins();
}
</pre>
<p>As of version 1.6, the Java runtime ships with a class called &#8220;ServiceLoader&#8221; to easily find and load plugins. Let us now write a implementation called &#8220;StandardPluginService&#8221; and make use of the facilities built into the java runtime.</p>
<pre class="brush: java;">

package com.pluggableapp;

import com.pluggableapp.PluginService;
import com.pluggableapp.plugins.api.ApplicationPlugin;
import java.util.Iterator;
import java.util.ServiceLoader;
import java.util.logging.Logger;

public class StandardPluginService implements PluginService
{
    private static StandardPluginService pluginService;
    private ServiceLoader&lt;ApplicationPlugin&gt; serviceLoader;
    private Logger logger = Logger.getLogger(getClass().getName());

    private StandardPluginService()
    {
        //load all the classes in the classpath that have implemented the interface
        serviceLoader = ServiceLoader.load(ApplicationPlugin.class);
    }

    public static StandardPluginService getInstance()
    {
        if(pluginService == null)
        {
            pluginService = new StandardPluginService();
        }
        return pluginService;
    }

    public Iterator&lt;ApplicationPlugin&gt; getPlugins()
    {
        return serviceLoader.iterator();
    }

    public void initPlugins()
    {
        Iterator&lt;ApplicationPlugin&gt; iterator = getPlugins();
        if(!iterator.hasNext())
        {
            logger.info(&quot;No plugins were found!&quot;);
        }
        while(iterator.hasNext())
        {
            ApplicationPlugin plugin = iterator.next();
            logger.info(&quot;Initializing the plugin &quot; + plugin.getName());
            plugin.init();
        }
    }
}
</pre>
<p>Feel free to write your own implementation if needed. For example you can easily write an implementation based on the NetBeans API.</p>
<p>Write a factory class named &#8220;PluginServiceFactory&#8221; to create &#8220;PluginService&#8221; objects.</p>
<pre class="brush: java;">

package com.pluggableapp;

import com.pluggableapp.*;
import com.pluggableapp.StandardPluginService;
import com.pluggableapp.PluginService;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PluginServiceFactory
{
    public static PluginService createPluginService()
    {
        addPluginJarsToClasspath();
        return StandardPluginService.getInstance();
    }

    private static void addPluginJarsToClasspath()
    {
        try
        {
            //add the plugin directory to classpath
            ClasspathUtils.addDirToClasspath(new File(&quot;plugins&quot;));
        } catch (IOException ex)
        {
            Logger.getLogger(PluginServiceFactory.class.getName()).log(
                Level.SEVERE, null, ex);
        }
    }
}
</pre>
<p>That&#8217;s it. All we need to do now is to write a class that will invoke the &#8220;PluginServiceFactory&#8221;.</p>
<pre class="brush: java;">

package com.pluggableapp;

import com.pluggableapp.plugins.api.ApplicationPlugin;
import java.util.Iterator;
import java.util.logging.Logger;

public class Main
{

    private static Logger logger = Logger.getLogger(Main.class.getName());

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args)
    {
        loadPlugins();
    }

    private static void loadPlugins()
    {
        PluginService pluginService = PluginServiceFactory.createPluginService();
        pluginService.initPlugins();
    }
}
</pre>
<p>Before we build and see the application in action, create a directory called &#8220;plugins&#8221; and put all plugin jars there.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/09/screenshot3-p1.png" alt="" /></p>
<p>And this is what you might see when you run our pluggable application.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/09/screenshot2-p1.png" alt="" /></p>
<p>Now feel free to create as many plugins you want to write and just drop them in the &#8220;plugins&#8221; directory and restart the &#8220;pluggable&#8221; application to see your &#8220;home grown&#8221; plugins in action!</p>
<p><strong>Resources</strong></p>
<p><a href="http://java.sun.com/developer/technicalArticles/javase/extensible/index.html">Creating Extensible Applications With the Java Platform</a> &#8211; <em>John O&#8217;Conner</em></p>
<p><a href="http://twit88.com/blog/2007/10/07/develop-a-java-plugin-framework/">Developing a Java Plugin Framework </a></p>
<p><a href="http://java.dzone.com/news/how-create-pluggable-photo-alb">How to Create a Pluggable Photo Album in Java</a> &#8211; <em>Geertjan</em></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=d7d85c06-7c20-8a72-ae33-ec6bc5f32317" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/java/a-simple-pluggable-java-application/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>What UML Tools do you use?</title>
		<link>http://solitarygeek.com/general/what-uml-tools-do-you-use</link>
		<comments>http://solitarygeek.com/general/what-uml-tools-do-you-use#comments</comments>
		<pubDate>Wed, 26 Aug 2009 13:30:58 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Polls]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[uml]]></category>
		<category><![CDATA[uml-tools]]></category>
		<category><![CDATA[umltools]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/?p=425</guid>
		<description><![CDATA[<p>Recently I read the article &#8220;Free UML tools&#8221; which explains about the various free UML tools available. That article made me think &#8220;What UML tool do people actually use?&#8221;. Over the years, I have used tools like Microsoft Visio, ArgoUML, NetBeans UML, StarUML and finally settled with JUDE. How about you? What UML tools do you <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/general/what-uml-tools-do-you-use">What UML Tools do you use?</a></span>]]></description>
			<content:encoded><![CDATA[<p>Recently I read the article &#8220;<a href="http://www.certpal.com/blogs/2009/08/free-uml-tools/">Free UML tools</a>&#8221; which explains about the various free UML tools available. That article made me think &#8220;What UML tool do people actually use?&#8221;. Over the years, I have used tools like Microsoft Visio, <a href="http://argouml.tigris.org/">ArgoUML</a>, <a href="http://www.netbeans.org/features/uml/">NetBeans UML</a>, <a href="http://staruml.sourceforge.net/">StarUML</a> and finally settled with <a href="http://jude.change-vision.com/jude-web/product/community.html">JUDE</a>. How about you? What UML tools do you use? Some of you might use more than one tool (at work, at home etc), so feel free to choose all the options applicable.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/general/what-uml-tools-do-you-use/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Five different uses of Java Applets</title>
		<link>http://solitarygeek.com/java/five-different-uses-of-java-applets</link>
		<comments>http://solitarygeek.com/java/five-different-uses-of-java-applets#comments</comments>
		<pubDate>Sat, 22 Aug 2009 09:54:42 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[applets]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/java/java-technology-tech-computers-software-applications-tools-applets/</guid>
		<description><![CDATA[<p>In a world where everyone is using technologies like Flash, Silverlight etc to present rich content, are Java Applets still used? Are they still relevant? The answer is &#8211; &#8220;Yes&#8221;. Apart from being used primarily for playing online games, Java Applets are still used in many different ways. Here I would like to highlight a few <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/java/five-different-uses-of-java-applets">Five different uses of Java Applets</a></span>]]></description>
			<content:encoded><![CDATA[<p>In a world where everyone is using technologies like Flash, Silverlight etc to present rich content, are Java Applets still used? Are they still relevant? The answer is &#8211; &#8220;Yes&#8221;. Apart from being used primarily for playing online games, Java Applets are still used in many different ways. Here I would like to highlight a few applications that put Applets to good use.</p>
<p><strong>1. Online Office Suite</strong><br />
<a href="http://thinkfree.com">ThinkFree</a> is a very popular and professional online office suite <a href="http://en.wikipedia.org/wiki/ThinkFree_Office">based on Java Applet and Ajax</a>.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot2-p1.png" alt="" /></p>
<p><strong>2. Virtualization</strong><br />
<a href="http://www-jpc.physics.ox.ac.uk/home_home.html">JPC</a> or <a href="http://www-jpc.physics.ox.ac.uk/home_home.html">Java PC Emulator</a> is a pure java based virtualization software that can be used to boot your virtual computers right inside the browser. Yes they run as &#8220;Java Applets&#8221; inside the browser.</p>
<p><strong>3. Remote Desktop Viewer</strong><br />
Products like <a href="http://www.tightvnc.com/">TightVNC</a> and <a href="http://www.uvnc.com/">UltraVNC</a> provide a java applet based client to view remote desktops.</p>
<p><strong>4. (Web) Operating System<br />
</strong><a href="http://icloud.com">iCloud</a>, is an web operating sytem that makes use of XML and Java Applet Technology (atleast for Firefox).</p>
<p><strong>5. File Upload</strong></p>
<p><a href="http://www.facebook.com">Facebook</a> uses a beautifully designed Java Applet to upload photos to facebook photo albums.<br />
<a href="http://net2ftp.com">net2ftp</a> is a web based ftp client that makes use of tiny Java Applet to &#8220;drag and drop&#8221; files from local computer to the browser and upload them to the remote ftp server.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot1-p.png" alt="" /></p>
<p>If you have come across any website that make use of Java Applets, please share your thoughts in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/java/five-different-uses-of-java-applets/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Poll: What is your favourite Subversion client?</title>
		<link>http://solitarygeek.com/polls/poll-what-is-your-favourite-subversion-client</link>
		<comments>http://solitarygeek.com/polls/poll-what-is-your-favourite-subversion-client#comments</comments>
		<pubDate>Sat, 15 Aug 2009 15:58:17 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Polls]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/?p=344</guid>
		<description><![CDATA[<p>Do you use Subversion as your version control system? Then, please share with us what is your favourite Subversion client.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/polls/poll-what-is-your-favourite-subversion-client">Poll: What is your favourite Subversion client?</a></span>]]></description>
			<content:encoded><![CDATA[<p>Do you use Subversion as your version control system? Then, please share with us what is your favourite Subversion client.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/polls/poll-what-is-your-favourite-subversion-client/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Subversion and RapidSVN</title>
		<link>http://solitarygeek.com/linux/subversion-and-rapidsvn</link>
		<comments>http://solitarygeek.com/linux/subversion-and-rapidsvn#comments</comments>
		<pubDate>Fri, 14 Aug 2009 17:07:09 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rapidsvn]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/linux/linux-subversion-rapidsvn-svn-ubuntu/</guid>
		<description><![CDATA[<p>Subversion is a very popular version control system. Though Subversion provides a very robust command line client, most of us prefer using a nice GUI front end. Windows users are really fortunate to have a powerful tool like TortoiseSVN which without any argument is simply the best front end for Subversion. Unfortunately, TortoiseSVN is available for <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/linux/subversion-and-rapidsvn">Subversion and RapidSVN</a></span>]]></description>
			<content:encoded><![CDATA[<p>Subversion is a very popular version control system. Though Subversion provides a very robust command line client, most of us prefer using a nice GUI front end. Windows users are really fortunate to have a powerful tool like TortoiseSVN which without any argument is simply the best front end for Subversion. Unfortunately, TortoiseSVN is available for just the Windows platform. Here I would like to highlight about RapidSVN, a cross-platform GUI front end for Subversion.</p>
<p>This tutorial is directed towards new users of Linux or people who migrated from Windows to Linux recently. If you are a Windows user, TortoiseSVN might be the best bet for you. Learn more about TortoiseSVN from the post &#8220;<a href="http://www.solitarygeek.com/version-control/extending-subversion-by-using-tortoisesvn/">Extending Subversion by using TortoiseSVN</a>&#8220;.</p>
<p><span id="more-329"></span></p>
<p><strong>Pre-requisites<br />
</strong>Subversion<br />
<strong><br />
Installation<br />
</strong>Installing RapidSVN in Ubuntu is a breeze,</p>
<pre lang="bash">sudo apt-get install rapidsvn</pre>
<p>Once installation is done, RapidSVN can be found under &#8220;Applications -&gt; Programming&#8221;. Or if you use a dock like <a href="http://do.davebsd.com/">GNOME-Do</a>, you can launch it by typing &#8220;rapidsvn&#8221;.</p>
<p>For other platforms, download the latest release from the <a href="http://www.rapidsvn.org/download/release/">RapidSVN</a> site.</p>
<p>[smartads]</p>
<p><strong>Adding a repository to RapidSVN<br />
</strong>Unlike TortoiseSVN which seamlessly integrates into Windows Explorer, RapidSVN allows you to manage the files from a dedicated user interface. RapidSVN will display details like status, author, revision number etc in separate columns.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/Screenshot1-p.png" alt="" /></p>
<p>To add a new repository to RapidSVN, right click &#8220;Bookmarks&#8221;, click &#8220;Add Existing Repository&#8221; and enter the repository url.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot20-p.png" alt="" /></p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot3-p1.png" alt="" /></p>
<p><strong>Checkout a working copy</strong><br />
To checkout a working copy from the repository, right click a repository, click &#8220;Checkout New Working Copy&#8221; and enter appropriate details.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot4-p.png" alt="" /></p>
<p>RapidSVN will display any unversioned files in your working copy, if any.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot5-p.png" alt="" /></p>
<p><strong>Adding files to working copy</strong><br />
Right click any unversioned file and then click &#8220;Add&#8221; to add them in your working copy. Click &#8220;Add recursive&#8221; if you want to add a folder with multiple sub folders inside it.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot7-p.png" alt="" /></p>
<p>RapidSVN will display appropriate status regarding the files that are added in your working copy but not yet committed to the repository.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot8-p.png" alt="" /></p>
<p><strong>Commiting changes</strong><br />
You can commit the added files, modified files by right clicking them and selecting &#8220;Commit&#8221;.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot9-p.png" alt="" /></p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot10-p.png" alt="" /></p>
<p>[smartads]<strong><br />
Updating working copy</strong><br />
Right click your working copy in the RapidSVN sidebar and click &#8220;Update&#8221; to update your working copy.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot11-p.png" alt="" /></p>
<p><strong>View history (Log)</strong><br />
To view the change history of a file, right click a file and select &#8220;Log&#8221;.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot12-p.png" alt="" /></p>
<p><strong>Reverting local changes</strong><br />
Right click a modified file and click &#8220;Revert&#8221; to revert the changes you made to your working copy.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot13-p.png" alt="" /></p>
<p><strong>Compare the changes made (Diff)</strong><br />
Unlike TortoiseSVN, RapidSVN does not provide built in support for &#8220;Diff&#8221;. However, you can instruct RapidSVN to use any externl diff tool to fill that gap. So this is what you will see when you attempt to run &#8220;Diff&#8221; on a file,</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot14.png" alt="" /></p>
<p>Fortunately, there are many excellent &#8220;Diff&#8221; tools available. I use &#8220;Meld&#8221; as the diff tool in Ubuntu Linux. &#8220;Meld&#8221; should be available in all major Linux distros. This is how you will install &#8220;Meld&#8221; in Ubuntu,</p>
<pre lang="bash">sudo apt-get install meld
</pre>
<p>Once you have your diff tool of choice installed, you need to tell RapidSVN to use the diff tool. In RapidSVN, click &#8220;View -&gt; Preferences&#8221; and then open the &#8220;Programs&#8221; tab. In the &#8220;Programs&#8221; tab, look for a section called &#8220;Diff Tool&#8221; and enter the command name there and save the changes.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot15.png" alt="" /></p>
<p>Now you can diff the changes made to a file by right clicking it and selecting &#8220;Diff&#8221; or &#8220;Diff to Head&#8221; or &#8220;Diff to Base&#8221;.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot16.png" alt="" /></p>
<p>Once you click &#8220;OK&#8221;, RapidSVN will invoke the respective Diff tool to display the differences.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot17-p.png" alt="" /></p>
<p><strong>Other Settings</strong><br />
If you want to open and edit files right from within RapidSVN, open &#8220;Edit -&gt; Preferences&#8221; and then enter the appropriate value in the &#8220;Standard Editor&#8221; section.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot18-p.png" alt="" /></p>
<p>If you want to explore your working copy from within RapidSVN, then configure the &#8220;Standard Explorer&#8221; section in &#8220;Preferences&#8221;.</p>
<p><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/08/screenshot19-p.png" alt="" /></p>
<p>Overall, RapidSVN is a solid Subversion client especially to linux users. What Subversion client do you use?</p>
<p><strong>SolitaryGeek Poll</strong></p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=b7261b0a-249c-8510-b5af-4f03347146b8" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/linux/subversion-and-rapidsvn/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hudson CI Server &#8211; A quick start guide</title>
		<link>http://solitarygeek.com/java/hudson-ci-server-a-step-by-step-guide-part-i</link>
		<comments>http://solitarygeek.com/java/hudson-ci-server-a-step-by-step-guide-part-i#comments</comments>
		<pubDate>Fri, 24 Jul 2009 14:53:26 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[continuous-integration]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/?p=120</guid>
		<description><![CDATA[<p>Introduction</p>
<p>  Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily &#8211; leading to multiple integrations per day.
- Martin Fowler</p>
<p> Hudson is a popular open-source continuous integration server used by many organizations like Redhat JBoss. Though there are many well known and <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/java/hudson-ci-server-a-step-by-step-guide-part-i">Hudson CI Server &#8211; A quick start guide</a></span>]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p><strong> </strong> Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily &#8211; leading to multiple integrations per day.<br />
- <a href="http://martinfowler.com/articles/continuousIntegration.html">Martin Fowler</a></p>
<p><span> </span><span><a href="https://hudson.dev.java.net/">Hudson</a></span><span> is a popular open-source continuous integration server used by many organizations like Redhat <a href="http://hudson.jboss.org/hudson/">JBoss</a>. Though there are many well known and well established open-source projects like <a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a>, <a href="http://continuum.apache.org/">Continnum</a></span><span> and some commercial offerings like <a href="http://www.atlassian.com/software/bamboo/">Bamboo</a>, what makes </span><span>Hudson special is it&#8217;s powerful yet easy to use web interface, it&#8217;s simplicity and it&#8217;s extensible architecture with many plugins.</span></p>
<p><span><span id="more-120"></span></span><span><br />
</span><span><strong>Objective</strong></span></p>
<p><span><strong> </strong>The objective of this tutorial is to setup, configure and learn to use <a href="https://hudson.dev.java.net/">Hudson</a> by building &#8220;<a href="http://commons.apache.org/io/">Apache Commons IO</a>&#8220;, a well known java project.<br />
<strong><br />
</strong></span><span><strong>Requirements<br />
</strong></span></p>
<ul>
<li><span><a href="https://hudson.dev.java.net/">Hudson</a></span></li>
<li><span>Subversion (or any other version control system like CVS, Mercurial, Git if you want to build your own project)<br />
</span></li>
<li><span>(Optional) <a href="http://tomcat.apache.org/">Tomcat</a> or <a href="https://glassfish.dev.java.net/">Glassfish</a></span></li>
<li><span>Apache Ant (or Maven)<br />
</span></li>
</ul>
<p><span><strong>Installation and Starting Hudson</strong></span></p>
<p><span>Installing Hudson is super easy. Just download the <a href="http://hudson-ci.org/latest/hudson.war">war</a> file, open your terminal/command-prompt and issue the command &#8220;java -jar hudson.war&#8221;. Now point your browser to <a href="http://localhost:8080">http://localhost:8080</a>. That was easy, right?</span></p>
<p><span>Hudson has an embedded servlet container called &#8220;<a href="http://winstone.sourceforge.net/">Winstone</a>&#8221; which works much like a standard servlet container like Tomcat by serving your JSP pages and servlets.</span></p>
<p><span>If you want Hudson to start on a different port, say 8180, issue the following command,<br />
&lt;code&gt; java -jar hudson.war &#8211;httpPort=8180 &lt;/code&gt;</span></p>
<p><span>Ofcourse you can deploy Hudson to Tomcat, Glassfish or any other supported servlet containers. The following guides can be useful in that case:<br />
</span></p>
<ul>
<li><span><a href="http://wiki.hudson-ci.org/display/HUDSON/Tomcat">Hudson and Tomcat</a></span></li>
<li><span><a href="https://hudson.dev.java.net/containers/glassfish.html">Hudson and Glassfish</a></span></li>
</ul>
<p><span>More container specific guides can be found from this <a href="http://wiki.hudson-ci.org/display/HUDSON/Containers">hudson wiki</a>.</span></p>
<p><span>Once you started Hudson or deployed it to a servlet container, this is what you might see in your browser when you start Hudson for the first time.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson1-p.png" alt="" /></span></p>
<p><span><strong>Hudson Home Directory</strong></span></p>
<p><span>All your Hudson jobs/settings are stored in the Hudson home directory. If you did not specify one, Hudson shall assume some defaults like &lt;code&gt; ~/.hudson &lt;/code&gt; in Linux or your respective home directory in Windows. It&#8217;s ok to go ahead with the defaults while you test drive Hudson but once you are done, I strongly recommend you to define a Hudson home directory of your choice, preferrably on a separate partition or drive. This will ensure that all your Hudson configuration/jobs are intact in case of any system crash.</span></p>
<p><span>Say, suppose your home directory is &#8220;/hudson&#8221; (in Linux), this is how you will define the Hudson home directory,</span></p>
<p><span>If you are using the embedded servlet container,<em> </em>start it by specifying the java system property &#8220;HUDSON_HOME&#8221;,<br />
&lt;code&gt; java -DHUDSON_HOME=/hudson -jar hudson.war &lt;/code&gt;</span></p>
<p><span>If you are using Tomcat, follow the explanations in <a href="http://wiki.hudson-ci.org/display/HUDSON/Tomcat">this wiki</a>. However, if you run Tomcat as a windows service, you need to do some tweaking to let Tomcat set this property. In that case, you will be better off if you start Tomcat using it&#8217;s batch file and set the property right there. (Or if you managed to run Tomcat as a Windows Service and still able to define the Hudson home correctly, why don&#8217;t you share your views with us?)</span></p>
<p><span>If you are using Glassfish, go to admin console and add the JVM option &lt;code&gt; -DHUDSON_HOME=/hudson&lt;/code&gt;. More detailed explanations can be found on <a href="http://wiki.hudson-ci.org/display/HUDSON/Glassfish">this wiki</a>.</span></p>
<p><span>Just remember that the idea is to define a system property &#8220;HUDSON_HOME&#8221; through any of the possible ways.</span></p>
<p><span>This is how the Hudson home directory shall look like.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson2-p.png" alt="" /></span></p>
<p><span><strong>Manage Hudson</strong></span></p>
<p><span><strong> </strong>Hudson provides an easy to use web interface to manage the configurations needed to administer a continuous integration server. Let us do some basic configurations to get Hudson ready.</span></p>
<p><span>Start Hudson and click the &#8220;Manage Hudson&#8221; link located on the left. </span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson3-p.png" alt="" /></span></p>
<p><span>Now click &#8220;Configure System&#8221;. Hudson will display a page where you can configure things like access control, JDK, Ant, Email Settings etc.<br />
</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson4-p.png" alt="" /></span></p>
<p><span><em><strong>Access Control</strong></em></span></p>
<p><span><em> </em>We will enable security to secure our Hudson setup. Otherwise anybody can go and meddle with your Hudson jobs. If you don&#8217;t want that to happen, check the &#8220;Enable Security&#8221; checkbox.</span></p>
<p><span><img class="alignnone size-full wp-image-128" title="hudson4a-3-p" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson4a-3-p.png" alt="hudson4a-3-p" width="498" height="76" /></span></p>
<p><span>[smartads]<br />
</span></p>
<p><span> </span></p>
<p><span>Once security is enabled, we need to tell Hudson the type of &#8220;Access Control&#8221; we want to use. Let us choose the Security Realm as &#8220;Hudson&#8217;s own user database&#8221; and leave the option &#8220;Enable users to signup&#8221; as checked. (If you do not check the &#8220;sign up&#8221; option here, Hudson is definitely going to whack you later!. ) Under the &#8220;Authorization&#8221; section, choose &#8220;Matrix-based Security&#8221;.</span></p>
<p><span><img class="alignnone size-full wp-image-129" title="hudson4a-4-p" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson4a-4-p.png" alt="hudson4a-4-p" width="382" height="330" /><br />
</span></p>
<p><span> </span></p>
<p><span>Now add an user called &#8220;administrator&#8221; and give the necessary privileges. ENSURE THAT YOU GIVE &#8220;ADMINISTER&#8221; PRIVILEGES TO THIS USER or else, you may not able to access the administrative console once security and access control are enabled. (Again, if you miss it, Hudson is gonna whack you!)</span></p>
<p><span><img class="alignnone size-full wp-image-130" title="hudson6-1-p" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson6-1-p.png" alt="hudson6-1-p" width="579" height="118" /><br />
</span></p>
<p><span> </span></p>
<p><span>Hudson will display an error symbol near the user we just added. That&#8217;s because the user does not exist  in the system. Do not bother, we will create the user a little later. Now go ahead and add users who might be accessing Hudson. Give appropriate access controls to the users and do not give full access to everyone. That will eventually create a system that is difficult to manage. </span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson7-p.png" alt="" /></span></p>
<p><span><strong><em>Configure JDK</em></strong></span></p>
<p><span>Done with security? Now we need to configure the JDK which Hudson shall use to build the jobs. Find out the section &#8220;JDK&#8221; in the same page. Click the &#8220;Add JDK&#8221; button and then enter the details of your JDK.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson9-p.png" alt="" /></span></p>
<p><span><em><strong>Configure Ant</strong></em></span></p>
<p><span><em> </em>We need to tell Hudson where Ant is located. Find out the section called &#8220;Ant&#8221;, click &#8220;Add Ant&#8221; and enter the respective details.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson10-p.png" alt="" /></span></p>
<p><span>(Follow the same procedure, if you want to configure Maven.)</span></p>
<p><span>That&#8217;s it! Hudson is now almost ready for prime time. Feel free to configure the Email Settings as well with the appropriate values. When you are done, press the &#8220;Save&#8221; button to save all the changes you have made.</span></p>
<p><span>Once you press the &#8220;Save&#8221; button, Hudson will redirect you to a login page.</span></p>
<p><span><em><strong>Manage Users</strong></em></span></p>
<p><span><em> </em>Click the &#8220;Signup&#8221; link at the top right corner of Hudson and register a new user called &#8220;administrator&#8221; (or whatever name you gave in the &#8220;Access Control&#8221; section).</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson13-p.png" alt="" /></span></p>
<p><span>Hudson will automatically login the user provided the user was already configured in the &#8220;Access Control&#8221; section. Once a new user (administrator) is registered in the system, Hudson will provide an option called &#8220;Manage Users&#8221; in the &#8220;Manage Hudson&#8221; page.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson15-p.png" alt="" /></span></p>
<p><span>You can now create other users from this page.</span></p>
<p><span><img class="alignnone size-full wp-image-125" title="hudson16-1-p" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson16-1-p.png" alt="hudson16-1-p" width="345" height="183" /><br />
</span></p>
<p><span>You will be using this page to manage all your Hudson users. Looks like we have covered quite a lot of information. It&#8217;s time now to create some jobs and see Hudson in action.</span></p>
<p><span><strong>Creating Job</strong></span></p>
<p><span><strong> </strong>That&#8217;s the core feature of Hudson. Hudson jobs can fetch the source code from a repository, execute your build scripts, run your tests, prepare javadoc, notify you in case of any failure, archive the build artifacts and much more. That&#8217;s where you can really see the power of Hudson. Enough talking, let us explore these Hudson features now by creating a job.</span></p>
<p><span>The Hudson job which we are going to create now is going to be very simple and is capable of doing the following:<br />
</span></p>
<ul>
<li><span>Checkout the source code of <a href="http://commons.apache.org/io/">apache commons-io</a> project using subversion<br />
</span></li>
<li><span>Run the build script (build.xml in case of Ant, pom.xml for Maven)</span></li>
<li><span>Archive the build output<br />
</span></li>
</ul>
<p><span>Create a job by clicking the link &#8220;New Job&#8221; on the left. Give a name for the job, select the option &#8220;Build a free-style software project&#8221; and then press &#8220;OK&#8221;.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson18-p.png" alt="" /></span></p>
<p><span><strong>Configure Job</strong><br />
</span></p>
<p><span> Hudson will create a new empty job for us which we need to configure.</span></p>
<p><span><img class="alignnone size-full wp-image-127" title="hudson19-1-p" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson19-1-p.png" alt="hudson19-1-p" width="496" height="253" /><br />
</span></p>
<p><span> </span></p>
<p><span>Let us configure the repository for this job first. Go to the section &#8220;Source Code Management&#8221;, choose the option &#8220;Subversion&#8221; and enter the repository url  as &#8220;<a href="http://svn.apache.org/repos/asf/commons/proper/io/trunk">http://svn.apache.org/repos/asf/commons/proper/io/trunk</a>&#8220;. Enter the &#8220;Local module directory&#8221; as  &#8220;.&#8221;</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson20-p.png" alt="" /></span></p>
<p><span>Look for the section called &#8220;Build&#8221;. Click the button &#8220;Add build step&#8221; and select &#8220;Invoke Ant&#8221;. Leave the rest to default. (Maven users, choose the appropriate action)</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson22-p1.png" alt="" /></span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson23-p.png" alt="" /><br />
Go to the section &#8220;Post-build Actions&#8221;. Select the checkbox &#8220;Archive the artifacts&#8221;. The apache commons-io build script shall create the jar in the directory named &#8220;target&#8221;. So enter the value &#8220;target/*.jar&#8221; in the text field titled &#8220;Files to archive&#8221;. Though this is not mandatory to build a job, I recommend you to do this as this will help the users of your continuous integration server to download the build outputs quickly.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson24-p.png" alt="" /></span></p>
<p><em><span> NOTE: Since we are building the apache-commons-io project we are entering the value &#8220;target/*.jar&#8221;. If for example, your build output directory is &#8220;dist&#8221;, then you should enter here as &#8220;dist/*.jar&#8221;.</span><br />
</em><span><br />
Press the &#8220;Save&#8221; button at the bottom. Our job is ready and just click link &#8220;Build Now&#8221; at the left to start building the job.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson25-p.png" alt="" /></span></p>
<p><span>Once the build is initiated, you can relax and watch the progress in the &#8220;Build History&#8221;.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson26-p.png" alt="" /></span></p>
<p><span>If you are restless and want to see exactly what is going on, just click the link (corresponding to the build number) in the &#8220;Build History&#8221;.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson27-p.png" alt="" /></span></p>
<p><span>Now click the link &#8220;Console Output&#8221;.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson28-p.png" alt="" /></span></p>
<p><span>Hudson will display you the console view where you can do all your research.</span></p>
<p><span><br />
</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson29-p.png" alt="" /></span></p>
<p><span>Now that the build is successful, you might want to have a look at the jar built by this job. You can find that under &#8220;Last Successful Artifacts&#8221;. </span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson30-p.png" alt="" /></span></p>
<p><span>You can also have a sneak preview about the builds from your Hudson home page.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson31-p.png" alt="" /></span></p>
<p><span>If in case some of your builds failed, Hudson will report that as well neatly along with displaying the build stability. </span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/hudson32-p.png" alt="" /></span></p>
<p><span>That&#8217;s it for now. But you can do a lot more like configuring Hudson to build this job every few minutes or just poll the repository once in a while and trigger the build whenever someone commits to the repository. Explore them under the job&#8217;s configuration page and enjoy. And did I mention that Hudson has a lot of good plugins already? Maybe I will try to cover those advanced concepts in my next post.</span></p>
<p><span>If you are using NetBeans as your IDE, then you have a got a lot of Hudson features integrated right into the NetBeans IDE. Check that out in my post <a href="http://www.solitarygeek.com/java/netbeans-6-7-a-quick-glance/">NetBeans 6.7 &#8211; A quick glance</a>.</span></p>
<p><span>Are you using Hudson? Are you planning to use Hudson? Why not leave a comment below and share your thoughts?<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/java/hudson-ci-server-a-step-by-step-guide-part-i/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Convert video files to mp3 in Ubuntu</title>
		<link>http://solitarygeek.com/linux/linux-ubuntu-video-converter-dat-converter</link>
		<comments>http://solitarygeek.com/linux/linux-ubuntu-video-converter-dat-converter#comments</comments>
		<pubDate>Sun, 12 Jul 2009 09:53:09 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[video-converter]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/general/linux-ubuntu-video-converter-dat-converter/</guid>
		<description><![CDATA[<p>In my previous post, I explained how to convert audio files from one format to another in Ubuntu. Ubuntu provides native support for this through Sound Converter which can be installed using a simple command. After trying Sound Converter, I was confident that there will be similar applications to convert video files. That made me to <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/linux/linux-ubuntu-video-converter-dat-converter">Convert video files to mp3 in Ubuntu</a></span>]]></description>
			<content:encoded><![CDATA[<p><span>In my <a href="http://www.solitarygeek.com/linux/convert-audio-files-in-ubuntu-with-sound-converter/">previous post</a>, </span><span>I explained how to convert audio files from one format to another in Ubuntu. Ubuntu provides native support for this through Sound Converter which can be installed using a simple command. After trying Sound Converter, I was confident that there will be similar applications to convert video files. That made me to install applications like WinFF, Avidemux.</span></p>
<p><span>My objective was to convert *.DAT files from a VCD into *.mp3. I decided to try WinFF first. The interface was pretty simple to use.</span></p>
<p><span><span id="more-62"></span></span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot12.png" alt="" /> </span></p>
<p><span>But when I pressed the &#8220;Convert&#8221; button, I got the following message,</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot22.png" alt="" /><br />
</span><br />
<span>WinFF reported that the encoder &#8216;libmp3lame&#8217; is unknown. I tried to install that via apt-get but could not find that in the repository as well. I tried to convert to other formats but in vain. I understand that I miss some libraries/encoders, but the help message was not very useful. The application could have suggested me to install the respective library like Sound Converter does for &#8220;mp3&#8243; support.</span></p>
<p>[smartads]</p>
<p><span>Since WinFF failed to get the job done for me, I tried Avidemux this time. When I started avidemux, I quickly realised that this not going to be an application which everyone can use effortlessly. Avidemux might be a great tool but unless it gets a decent user interface it&#8217;s not going to be used by many. But since I was determined to convert my video files, I proceeded ahead with Avidemux.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot32.png" alt="" /></span></p>
<p><span>When I tried to load the &#8220;DAT&#8221; file, Avidemux complained that it could not open that file.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot41.png" alt="" /></span></p>
<p><span>I searched the <a href="http://www.avidemux.org/admWiki/index.php?title=Main_Page">Avidemux wiki</a> but still couldn&#8217;t solve the problem. My search continued and in one forum I got a suggestion that I can rename the file to &#8220;mpg&#8221; and change the &#8220;video&#8221;, &#8220;audio&#8221; options to &#8220;MPEG-4 ASP (Xvid4)&#8221;, &#8220;MP3 Lame&#8221; respectively. But the result was same. Avidemux couldn&#8217;t open the file.</span></p>
<p><span>[smartads]<br />
</span></p>
<p><span>Then I realised that another user had the <a href="http://mintarticles.com/read/articles_about_software/best_linux_ubuntu_videoaudio_converter_format_factory_and_wine,1024/">same frustrations</a> like me and eventually opted to run the popular windows only tool FormatFactory on top of Wine. I decided to follow suit but I thought of trying out AnyVideoConverter on top of Wine. But AnyVideoConverter failed to start which left me with no options but to turn for FormatFactory.</span></p>
<p><span>I downloaded and installed FormatFactory using Wine and it started without any issues on my Ubuntu.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot51.png" alt="" /></span></p>
<p><span>Since I wanted to convert video files into &#8220;MP3&#8243; format, I clicked the &#8220;Audio&#8221; tab in the left pane and chose the option &#8220;All to MP3&#8243;. Then I was prompted to add the necessary files.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot61.png" alt="" /></span></p>
<p><span>Once I added the necessary files, all I had to do was to click &#8220;Start&#8221; button.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot71.png" alt="" /></span></p>
<p><span>After a few seconds, FormatFactory successfully converted the &#8220;DAT&#8221; files into &#8220;MP3&#8243; format.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot81.png" alt="" /></span></p>
<p><span>Thanks to FormatFactory and Wine, I was able to convert &#8220;DAT&#8221; files without booting into Windows. Many thanks to this <a href="http://mintarticles.com/read/articles_about_software/best_linux_ubuntu_videoaudio_converter_format_factory_and_wine,1024/">wonderful article</a> which was an eye opener for me.</span></p>
<p><span>I haven&#8217;t yet tried the FormatFactory|Wine combination to convert my videos into other format. Why don&#8217;t you try it and share your experience with us?<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/linux/linux-ubuntu-video-converter-dat-converter/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Convert audio files in Ubuntu with Sound Converter</title>
		<link>http://solitarygeek.com/linux/convert-audio-files-in-ubuntu-with-sound-converter</link>
		<comments>http://solitarygeek.com/linux/convert-audio-files-in-ubuntu-with-sound-converter#comments</comments>
		<pubDate>Sat, 11 Jul 2009 06:25:01 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[audio-converter]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/general/convert-audio-files-in-ubuntu-with-sound-converter/</guid>
		<description><![CDATA[<p>&#8220;Linux lacks good multimedia applications&#8220;. How many times have we heard this! This was my perception as well. Not that I do my living based on these tools but I do use them often at home. Atleast, many of us might be in a need to convert audio/video from one format to another and rip tracks <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/linux/convert-audio-files-in-ubuntu-with-sound-converter">Convert audio files in Ubuntu with Sound Converter</a></span>]]></description>
			<content:encoded><![CDATA[<p><span>&#8220;Linux lacks good multimedia applications</span>&#8220;. <span>How many times have we heard this! This was my perception as well. Not that I do my living based on these tools but I do use them often at home. Atleast, many of us might be in a need to convert audio/video from one format to another and rip tracks out of audio cds.</span></p>
<p><span>Traditionally I use softwares like <a href="http://www.any-video-converter.com/">Any Video Converter</a>, <a href="http://www.formatoz.com/index.html">Format Factory</a> to convert audio/video files but unfortunately they are available only on Windows and I had to boot into my old Windows XP in order to use them. I thought I had no other choice and also since those tools did the job for me, I was eventually using them whenever the need arises. Fortunately there are some good tools in linux as well.</span></p>
<p><span><span id="more-46"></span><br />
</span></p>
<p><span>My search for a good audio/video converter continued and even thought of using those popular windows tools on Ubuntu using Wine after reading the article, <a href="http://mintarticles.com/read/articles_about_software/best_linux_ubuntu_videoaudio_converter_format_factory_and_wine,1024/">Best Linux Ubuntu Video/Audio Converter: Format Factory and WINE</a>.</span></p>
<p><span>[smartads]<br />
</span></p>
<p><span>I was almost sold if not for this <a href="http://ubuntuforums.org/showthread.php?t=766683&amp;highlight=video+converter">comprehensive guide</a> from ubuntu forums. At the first look, the article might look a bit overwhelming, but it contains a wealth of information covering many aspects. I was primarily interested in just a audio converter and I all I had to do was execute this simple command</span></p>
<p><span><code><br />
sudo apt-get install soundconverter audacity oggconvert<br />
</code><br />
All these three are audio converting tools where audacity provides audio editing capabilities as well. You might also need sound-juicer to extract audio files from cd. Installing that is pretty straightforward:<br />
<code><br />
sudo apt-get install sound-juicer<br />
</code><br />
Converting files are only two steps away. Click &#8220;Add File&#8221; button to add the files you would like to convert. Once you have added the necessary files, click &#8220;Convert&#8221;.<br />
</span><span><br />
<img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot3.png" alt="" /></span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot4.png" alt="" /></span></p>
<p><span>By default, Sound Converter converts audio files to the opensource &#8220;ogg&#8221; format. If you want the default output to be &#8220;mp3&#8243;, </span><span>you need to first install some <a href="http://soundconverter.berlios.de/gstreamer-mp3-encoding-howto/">additional libraries</a>. Then you need to edit the preferences and change the output format &#8220;mp3&#8243; (under the section &#8220;Type of result&#8221;).</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/screenshot2.png" alt="" /></span></p>
<p><span>I am using Sound Converter quite regularly now and I am quite impressed with it. How about you? What tools do you use to convert audio files? It will be great if you can share your experiences as well.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/linux/convert-audio-files-in-ubuntu-with-sound-converter/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>NetBeans 6.7 &#8211; A quick glance</title>
		<link>http://solitarygeek.com/java/netbeans-6-7-a-quick-glance</link>
		<comments>http://solitarygeek.com/java/netbeans-6-7-a-quick-glance#comments</comments>
		<pubDate>Tue, 07 Jul 2009 15:30:58 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.solitarygeek.com/java/netbeans-netbeans-6-7/</guid>
		<description><![CDATA[<p>NetBeans 5.0 &#8211; Simplified Swing development
NetBeans 5.5 &#8211; Simplified Java EE development
NetBeans 6.0 &#8211; Made the NetBeans editor and other core infrastructure on par with competitors
NetBeans 6.5 &#8211; Looked beyond Java development by supporting languages like PHP
NetBeans 7.0 6.7 &#8211; Tries to make collaborative team development seamless.</p>
<p>I was quick to download the &#8220;All Java&#8221; pack of <span style="color:#777"> . . . &#8594; Read More: <a href="http://solitarygeek.com/java/netbeans-6-7-a-quick-glance">NetBeans 6.7 &#8211; A quick glance</a></span>]]></description>
			<content:encoded><![CDATA[<p><span>NetBeans 5.0 &#8211; Simplified Swing development<br />
NetBeans 5.5 &#8211; Simplified Java EE development<br />
NetBeans 6.0 &#8211; Made the NetBeans editor and other core infrastructure on par with competitors<br />
NetBeans 6.5 &#8211; Looked beyond Java development by supporting languages like PHP<br />
NetBeans <span style="text-decoration: line-through;">7.0</span> 6.7 &#8211; Tries to make collaborative team development seamless.</span></p>
<p><span>I was quick to download the &#8220;All Java&#8221; pack of <a href="http://www.netbeans.org/downloads/index.html">NetBeans</a> IDE for linux. Installation, as usual was pretty smooth on my Ubuntu 9.04. The installation didn&#8217;t give me much surprises and it was very much similar to version 6.5. I customized the installer to install Glassfish v2.1 and Tomcat 6.0.18 for me.</span></p>
<p><span><span id="more-36"></span><strong>Splash Screen</strong><br />
The splash screen has changed a bit and the startup was quick. But I wouldn&#8217;t comment about the startup speed at this point of time since I haven&#8217;t created/opened any projects in the IDE.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot1a.png" alt="" /></span></p>
<p><span><strong>Intuitive Start Page<br />
</strong>The start page has got the much needed face lift and is very attractive. The big and clean text reminded me about Eclipse which has got a really good start page. With this new start page, installing plugins is just one click away.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot2.png" alt="" /></span></p>
<p><span> </span><span>The start page also offers an intuitive way to activate/de-activate IDE features. Say suppose you don&#8217;t want certain IDE features, for example, Mobile development, it&#8217;s very easy to turn it off right from your start page. Good work!</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot3a.png" alt="" /></span></p>
<p><span><strong>Hudson Integration<br />
</strong>That&#8217;s my favourite feature in this release of NetBeans. <a href="http://hudson.dev.java.net">Hudson</a> is a great continuous integration server which helps you to automate your build process. And if your team uses Hudson, then this NetBeans feature might be very useful to you. As per my understanding, currently NetBeans supports only Hudson continuous integration server. If you are using other CI servers like CruiseControl, no great news for you in this release of NetBeans. <img src='http://solitarygeek.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </span></p>
<p><span>[smartads]<br />
</span></p>
<p><span>Open the &#8220;Services&#8221; window in the IDE and look for &#8220;Hudson Builders&#8221;. There you can add your existing hudson urls.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot5.png" alt="" /></span></p>
<p><span>With the hudson support, you can now manage the hudson jobs without opening a browser. You can even copy the build artifacts to your netbeans projects.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot6a.png" alt="" /></span></p>
<p><span>You can also watch the remote hudson build console at the comfort of your IDE.</span></p>
<p><span><strong>Issue Tracker Integration<br />
</strong>If you are doing any serious development, it&#8217;s most likely that you will be using some issue tracker. There are many popular issue trackers available like <a href="http://www.bugzilla.org/">Bugzilla</a>, <a href="http://trac.edgewall.org/">Trac</a>, <a href="http://www.atlassian.com/software/jira/">Jira</a> etc. NetBeans 6.7 provides out of the box support for Bugzilla but Jira support is available as well through a plugin.</span></p>
<p><span>I registered my mozilla issue tracker account in the IDE. Once an issue tracker is registered, you can find as well as add/modify issues.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot7.png" alt="" /></span></p>
<p><span>Finding issues from a bugzilla based issue tracking system is just a click away.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot8a.png" alt="" /></span></p>
<p><span>Reporting new issues is not a tough job either.</span></p>
<p><span><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot9a.png" alt="" /></span></p>
<p><span>I didn&#8217;t try the Jira integration yet. In future, I would love to see integration with more issue trackers like Trac.</span></p>
<p><span><strong>Error Reporting<br />
</strong>Another neat feature which I like in this release is the enhancements made to the exception reporter.<br />
In previous versions of NetBeans, the issue log file shall be uploaded to the netbeans server and you will be displayed a message in the browser regarding the status of the issue. Now that&#8217;s integrated into the IDE as well.</span></p>
<p><span><strong><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot10a.png" alt="" /></strong></span></p>
<p><span><strong></strong>You can view all the issues filed by you by clicking the button &#8220;Show my issues&#8221;. </span></p>
<p><span><strong><img style="max-width: 800px;" src="http://solitarygeek.com/blog/wp-content/uploads/2009/07/Screenshot11a.png" alt="" /><br />
</strong><br />
<strong>Others</strong></span></p>
<p><span><strong></strong>Other highlighed feature of NetBeans is &#8220;Project Kenai&#8221; integration. For those who are wondering what is this all about, &#8220;Project Kenai&#8221; is a place to host your open source projects much like sourceforge, google code, launchpad etc. But I couldn&#8217;t complete my testing on this NetBeans feature and as such I couldn&#8217;t write about this at this point of time. But to be frank, I&#8217;m not very excited about this feature. A sourceforge.net integration would have made me much happier but nevertheless it&#8217;s a great effort put forward by NetBeans team.</span></p>
<p><span>There are many other improvements in the areas of code completion, debugging, profiling, Maven support, Groovy support etc. You can get more details about that from the <a href="http://wiki.netbeans.org/NewAndNoteWorthyNB67">netbeans wiki</a>.</span></p>
<p><span><strong>Summary<br />
</strong>Overall, NetBeans 6.7 builds on the strong platform of 6.x series and takes team development one step further. Hudson integration is really very good and I believe Bugzilla integration is also pretty good. But there are not many new features in this release that can make a Java developer happy. Whatsoever, it&#8217;s a great effort from the NetBeans team and we must appreciate them for this solid work. So what about you? Have you tried NetBeans 6.7? How do you feel about it?</span></p>
<p><span><strong>New!</strong></span></p>
<p><span>Learn more about Hudson from the blog post <a href="http://www.solitarygeek.com/java/hudson-ci-server-a-step-by-step-guide-part-i/">Hudson CI Server &#8211; A step by step guide &#8211; Part I</a>.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://solitarygeek.com/java/netbeans-6-7-a-quick-glance/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
