<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3316969411334888734</id><updated>2011-11-27T20:05:09.566-05:00</updated><category term='google wave'/><category term='Netbeans'/><category term='IntelliJ'/><category term='ubuntu'/><category term='tools'/><category term='xmpp'/><category term='web services'/><category term='openfire'/><category term='mercurial'/><category term='IDE'/><category term='Eclipse'/><title type='text'>musings</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://technophilos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3316969411334888734/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://technophilos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>technophilos</name><uri>http://www.blogger.com/profile/11018960907840738073</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://2.bp.blogspot.com/_1aT_WzgA5YI/SgIAd-jah9I/AAAAAAAAaaQ/g2EjdAeNdX4/S220/Screenshot-6.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3316969411334888734.post-1860957660407510470</id><published>2009-08-12T20:58:00.036-04:00</published><updated>2009-08-19T16:54:53.025-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openfire'/><category scheme='http://www.blogger.com/atom/ns#' term='google wave'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Introduction to the google wave federation protocol - the short and sweet version</title><content type='html'>&lt;p&gt;
    In this post, we are going to install the google wave protocol reference 
    implementation, further explore its mechanisms, and most importantly, learn something new and exciting (I hope) and, not least of all, have fun in the process.
&lt;/p&gt;

&lt;p&gt;
    I did this on a linux machine, ubuntu 9.04. All the steps described herein should also be
    adaptable to whatever OS you happen to be using, easily.
&lt;/p&gt;

&lt;h1&gt;Required tools&lt;/h1&gt;
&lt;p&gt;To install java 6 on an ubuntu box, just type in the following command in your favorite shell.&lt;/p&gt;

&lt;pre class="brush:bash;"&gt;
sudo aptitude install sun-java6-jre sun-java6-fonts
&lt;/pre&gt;

&lt;p&gt;
    Mercurial is a distributed SCM and it is needed to pull the code base from the google
    code repository. To install mercurial, issue the following command:
&lt;/p&gt;

&lt;pre class="brush:bash;"&gt;
sudo aptitude install mercurial
&lt;/pre&gt;

&lt;p&gt;
    Ant is needed to build the code base that we are going to pull from the google code
    repository. To install ant, type the following command in your favorite shell:
&lt;/p&gt;
&lt;pre class="brush:bash;"&gt;
sudo aptitude install ant
&lt;/pre&gt;


&lt;h2&gt;Installing the openfire XMPP server&lt;/h2&gt;

&lt;p&gt;Now, we need to install the openfire XMPP server. First we need to download it with the following command, to get the *.deb file. Or the *.rpm if you are on a redhat linux based system.&lt;/p&gt;

&lt;pre class="brush:bash;"&gt;
wget http://www.igniterealtime.com/downloadServlet?filename=openfire/openfire_3.6.4_all.deb
&lt;/pre&gt;

&lt;p&gt;
    This will download the file into your current directory. Once that's done, you
    can, optionally, issue an "ls *.deb" command to insure that it is there. To install it, issue
&lt;/p&gt;
&lt;pre class="brush:bash;"&gt;
sudo dpkg -i openfire_3.6.4_all.deb
&lt;/pre&gt;

&lt;p&gt;
    One other option is to install it manually. Either way works fine. If you are using a different platform, you can get a distribution for your platform &lt;a href="http://www.igniterealtime.org/downloads/index.jsp"&gt;here&lt;/a&gt;. After downloading the proper version for your platform, follow the installation instructions.  Under the "openfire_version/documentation" directory, you should find the configuration instructions.
&lt;/p&gt;

&lt;h3&gt;Configuring Openfire&lt;/h3&gt;

&lt;p&gt;
    Switch to a web browser and type in the URL "http://localhost:9090". You should
    be redirected to the setup page. In the options, you can safely stick to the default
    values. Click the "save settings" button and restart openfire:
&lt;/p&gt;

&lt;pre class="brush:bash;"&gt;
sudo /ect/init.d/openfire restart
&lt;/pre&gt;

&lt;p&gt;
    Once the server restart, go back to the "http://localhost:9090". This time, you should
    be presented with a login screen. The username is "admin" and the password is one
    that you selected in the set-up screen.
&lt;/p&gt;

&lt;p&gt;
    Once you have logged into the server, on the secondary menu, select the "server settings"
    menu and on the left hand submenu, select "external components". We need to configure the google reference implementation, because it is precisely that-an external server component. From there, select "enabled" to allow external components to connect to this server and choose a shared secret. Click "save settings".
&lt;/p&gt;

&lt;p&gt;
    Once that is done, you should have another box show below that says "Allowed to connect",
    in the subdomain box enter "wave" and the shared secret, enter your shared secret, that you chose in the previous step. 
&lt;/p&gt;

&lt;p&gt;At this point, you should have something that looks like this&lt;/p&gt;

    &lt;a href="http://picasaweb.google.ca/lh/photo/POUuXSDiGQj2jZYnhbElxg?authkey=Gv1sRgCKPI3b-mnoSU3wE&amp;feat=embedwebsite"&gt;
    &lt;img src="http://lh4.ggpht.com/_1aT_WzgA5YI/SoNHRoa6fjI/AAAAAAAAbN0/RJoUJPKtKEs/s400/05-external-components-02.png" /&gt;&lt;/a&gt;
&lt;p&gt;
  Then click the "save settings" button.
&lt;/p&gt;

&lt;p&gt;
    Once that is done, again in the left hand submenu, click the "security settings".
    In the "Server Connection Security", you can keep the default values as is, but make sure
    you enable "accept self signed certificates" and then click the "save the settings" button.
&lt;/p&gt;


&lt;h4&gt;Generating certificates&lt;/h4&gt;

&lt;p&gt;
    To generate the key and certificate, here is a little shell script to help quickly generate them.
&lt;/p&gt;

&lt;pre class="brush:bash;"&gt;
#!/bin/bash

NAME=$1

if ["$NAME" == '']
then
    echo "$0 &lt;certificate name&gt;" 1&amp;gt;&amp;amp;2
    exit 1
fi

openssl genrsa 1024 | openssl pkcs8 -topk8 -nocrypt -out $NAME.key
openssl req -new -x509 -nodes -sha1 -days 365 -key $NAME.key -out $NAME.cert
&lt;/pre&gt;

&lt;p&gt;
    To use this script, just invoke it with the name of your localhost machine as a parameter.
    If you don't know what your machine is called issue: "hostname" on the command line.
    At this point, configuration of the openfire XMPP server is complete.
&lt;/p&gt;

&lt;h5&gt;Getting the google wave protocol reference implementation&lt;/h5&gt;

&lt;p&gt;
    Earlier on, we installed mercurial. We are going to use it to fetch a copy of
    the reference implementation from the google code repository with the following command:
&lt;/p&gt;

&lt;pre class="brush:bash;"&gt;
hg clone https://wave-protocol.googlecode.com/hg wave-protocol
&lt;/pre&gt;

&lt;p&gt;
    Once that is done, go into the "wave-protocol" directory and run "ant". This will build
    everything and create a "$HOME/whereveryoupulledthewavesource/dist" directory with the jars that resulted from the build. There should be 2 jar files in there.
&lt;/p&gt;

&lt;p&gt;
    Now, go back one directory up and you should have 2 script files. One, run-server.sh
    is to launch the server and the other run-client.sh is to launch to client. Obvious enough!
&lt;/p&gt;

&lt;p&gt;
    Before launching the server, we need to modify to the run-server.sh file to

&lt;ul&gt;
    &lt;li&gt;comment out the echo statement&lt;/li&gt;
    &lt;li&gt;add the absolute paths to the key and certificate&lt;/li&gt;
    &lt;li&gt;add your hostname for CERTIFICATE_DOMAIN_NAME&lt;/li&gt;
    &lt;li&gt;and finally, add the shared secret, you configured earlier for openfire, for the XMPP_SERVER_SECRET&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    And now, we can run the run-server.sh script and it will launch the server. You should see
    server log info in shell (CLI-Command Line Interface). That is all for the server.
&lt;/p&gt;
&lt;p&gt;
    Okay, so now, before launching the client, open the run-client.sh file in your favorite editor and:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;comment out the echo statement&lt;/li&gt;
    &lt;li&gt;add your hostname to WAVE_SERVER_DOMAIN_NAME&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
    and now, you can invoke the script with a username (any name you choose) as a parameter. You should now see a 2 pane window. You can type "/help" to see all the commands that you can use.
&lt;/p&gt;

&lt;p&gt;
    For more info, have a look at the source code in the "wave-protocol/src" directory! For further reading, I highly recommend the following:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://code.google.com/p/wave-protocol/w/list"&gt;here&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.waveprotocol.org"&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy discovery!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3316969411334888734-1860957660407510470?l=technophilos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technophilos.blogspot.com/feeds/1860957660407510470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://technophilos.blogspot.com/2009/08/intro-to-google-wave-federation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3316969411334888734/posts/default/1860957660407510470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3316969411334888734/posts/default/1860957660407510470'/><link rel='alternate' type='text/html' href='http://technophilos.blogspot.com/2009/08/intro-to-google-wave-federation.html' title='Introduction to the google wave federation protocol - the short and sweet version'/><author><name>technophilos</name><uri>http://www.blogger.com/profile/11018960907840738073</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://2.bp.blogspot.com/_1aT_WzgA5YI/SgIAd-jah9I/AAAAAAAAaaQ/g2EjdAeNdX4/S220/Screenshot-6.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_1aT_WzgA5YI/SoNHRoa6fjI/AAAAAAAAbN0/RJoUJPKtKEs/s72-c/05-external-components-02.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3316969411334888734.post-6002440789508630795</id><published>2009-04-14T19:55:00.036-04:00</published><updated>2009-04-28T12:46:03.842-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='IntelliJ'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>Checking out IntelliJ IDEA 8.1</title><content type='html'>&lt;h1&gt;First impressions&lt;/h1&gt;
&lt;p&gt;
After installation, the first launch (after a first failed attempt...more on that below) took some time (about a 1 min and half) just to load everything and get going. I have no idea what it's loading or doing and why it takes so freaking long. To it's credit, my girlfriend takes, on average, an hour and a half to get ready before we leave to whatever function we are attending...But that's another story.
&lt;/p&gt;

&lt;h2&gt;User Interface&lt;/h2&gt;
&lt;p&gt;
The interface looks crowded. Since it is the first time that it gets fired up, I would except to see some kind of "start" or "welcome" page that would give some kind of orientation of what is where. If not, at least give an overview of what to expect. &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; does an excellent job at that. &lt;a href="http://www.netbeans.org/"&gt;Netbeans&lt;/a&gt; does that too. What's neat, in the case of Netbeans, the "start page" links to the &lt;a href="http://www.netbeans.org/kb/index.html"&gt;NetBeans portal&lt;/a&gt; which contains blogs, documentation, tutorials and more...on the web. If you are not connected, it will still pop-up. However, the "start page" can be disabled.
&lt;/p&gt;

&lt;h3&gt;Diving in...&lt;/h3&gt;
&lt;p&gt;
Okay, let's check it a little more, I select "start a project from scratch", and select a "&lt;a href="http://maven.apache.org/"&gt;maven&lt;/a&gt; type project". To my surprise, it does not detect the location of the default maven local repository (the $HOME/.m2 directory), nor does it ask to be supplied with a path to the repository. It just goes off and tries to download libraries from external repositories (on the web); despite the fact, that I haven't even defined any dependencies in the pom file, yet.
&lt;/p&gt;
&lt;p&gt;
Very odd...and annoying. This is the type of things that annoyed the hell out of me with &lt;a href="http://ant.apache.org/ivy"&gt;ivy&lt;/a&gt;. Ivy can't seem to work offline. This annoyance is not unlike that of Netbeans "scanning" for tasks on startup, even though I have no tasks defined, for any of the projects I have "open" in the IDE. In all fairness, Netbeans does not seems to try to go online, but it does lock up the IDE while it's "scanning" and I have to wait, for it to finish before I can start coding...It does take some time, a lot more than just a minute. It takes much less time with version 6.5. There is an "x" button next to the progress bar indicator. It leads to assume that one can use it to kill the "scan" process, but it doesn't do jack. This type of cognitive friction (when a UI element fails to do what you would expect it to do) is probably one of the most unpleasant. Note to jetbrains: "don't annoy your users.".
&lt;/p&gt;

&lt;p&gt;
Also when &lt;a href="http://www.jetbrains.com/idea/index.html"&gt;IntelliJ's&lt;/a&gt; editor starts up, it indicates that it is "parsing the libraries". I don't know what that means exactly, or why it is consuming some much cpu cycles in the process. This takes a little bit of time to complete. It does so every time the editor fires up. It is much more of a puzzle than a real annoyance.
&lt;/p&gt;

&lt;h4&gt;Other glitches&lt;/h4&gt;
&lt;p&gt;
It failed to show anything at the first run. I got stuck on a blank window, with a title of the window that seem to suggest that I am at the "accepting license page". Never mind, that I just did that 2 steps ago. Solution: kill the process from the console, wipe out the install directory, re-install and start over!
&lt;/p&gt;

&lt;p&gt;
Another puzzle, the IDE periodically prints on the console "Warning: The encoding 'UTF-8' is not supported by the Java runtime". I wonder what runtime it's referring to. On closing the IDE, the same warning is displayed again. One other unpleasant thing is that IntelliJ does not have an installer of any sort. It comes bundled in a tarball. Upon "untaring", a directory is creating, and one can find the idea.sh startup script in the /bin sub-directory. Sure, one can create a "shortcut launcher" anywhere (on the desktop or task bar are the most common). Same goes for Eclipse (for the packaging, installer and the startup script bit). Contrary to Netbeans which does have an installer and allows one to skip the "shortcut launcher" fiddling step.
&lt;/p&gt;

&lt;h5&gt;Look &amp;amp; Feel&lt;/h5&gt;
&lt;p&gt;
IntelliJ seems to lack native &lt;a href="http://www.gtk.org/"&gt;GTK&lt;/a&gt; support; at least on Ubuntu 8.10. On &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, its L&amp;amp;F looks a lot like the pre-JDK 6 versions default java L&amp;amp;F; as did Netbeans for all previous versions to version 6. Before version 6, the L&amp;amp;F integration used the default java L&amp;amp;F and it sucked. Even though it was possible to specify a different L&amp;amp;F in its config file. However, at the time (with previous version 5 and below), most other L&amp;amp;F still sucked, with the exception of &lt;a href="http://incors.com"&gt;incors.com&lt;/a&gt;'s Kunstoff L&amp;amp;F. Now NB6 has a much nicer L&amp;amp;F, thanks to better L&amp;amp;F in JDK 6. Eclipse has had a far better integration with the native GUI since the earliest versions.
&lt;/p&gt;

&lt;h6&gt;The help system&lt;/h6&gt;
&lt;p&gt;
The help system is nothing particularly special. In fact, it suspiciously looks like that of Netbeans; same layout, same icons, same fonts, same L&amp;amp;F. One exception for the scrollbars, they seem to have applied their specific look and feel only their. In this respect, Eclipse's help and documentation system is second to none.
&lt;/p&gt;

&lt;p&gt;
Sure, there exist worst IDEs out there...Most notably &lt;a href="http://www.oracle.com/technology/products/jdev/index.html"&gt; JDeveloper&lt;/a&gt;, fondly referred to, by some of my colleagues, as: "fucking Jdev sucks ass!". Although, to be fair, it is a lot much better now; since version 11, which incorporates some of the designs and technologies from &lt;a href="http://www.oracle.com/bea/index.html"&gt;BEA&lt;/a&gt;. 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Digression: Ah yes! Larry bought the &lt;a href="http://en.wikipedia.org/wiki/BEA_Systems"&gt;company&lt;/a&gt;!&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Here is a few of the, first glance, improvements: it does not look so fiendishly ugly (granted this is largely subjective), it's a bit faster (though, a lot faster would be better) and a bit less memory hungry than it predecessors.
&lt;/p&gt;

&lt;h6&gt;Conclusion&lt;/h6&gt;
&lt;p&gt;
IntelliJ boasts a impressive array of plugins. For instance, IntelliJ's plugin for &lt;a href="http://code.google.com/webtoolkit"&gt;GWT&lt;/a&gt; is pretty good. However, google recently released &lt;a href="http://code.google.com/eclipse"&gt;Eclipse plugins&lt;/a&gt; for GWT and &lt;a href="http://code.google.com/appengine"&gt;Google App Engine&lt;/a&gt; along with the "early look" of their support for &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;. Eclipse does also have a pretty impressive "eco-system" of plugins and so does Netbeans.
&lt;/p&gt;

&lt;p&gt;
All other things being equal, I do not see the compelling, extra value that IntelliJ provides for the money that Netbeans and Eclipse don't provide already, for free. The last two being free (as in open-source) does also weigh in their favor. IntelliJ offers free licenses to educational institutions and individual committers to open source projects. But it is not open-source. Over all, IntelliJ seems to be a feature rich tool. However, I just couldn't get pass the initial irritations with the tool.
&lt;/p&gt;

&lt;p&gt;
note: The 30 day trial version of IntelliJ was run on a Dell Dimension 3100 box, running ubuntu 8.10 (intrepid), with 3G of ram.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3316969411334888734-6002440789508630795?l=technophilos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://technophilos.blogspot.com/feeds/6002440789508630795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://technophilos.blogspot.com/2009/04/checking-out-intellij-idea-81.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3316969411334888734/posts/default/6002440789508630795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3316969411334888734/posts/default/6002440789508630795'/><link rel='alternate' type='text/html' href='http://technophilos.blogspot.com/2009/04/checking-out-intellij-idea-81.html' title='Checking out IntelliJ IDEA 8.1'/><author><name>technophilos</name><uri>http://www.blogger.com/profile/11018960907840738073</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://2.bp.blogspot.com/_1aT_WzgA5YI/SgIAd-jah9I/AAAAAAAAaaQ/g2EjdAeNdX4/S220/Screenshot-6.png'/></author><thr:total>0</thr:total></entry></feed>
