<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Loutilities</title>
	<atom:link href="http://loutilities.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://loutilities.wordpress.com</link>
	<description>The blog that aims at the largest possible balance of pleasure over pain</description>
	<lastBuildDate>Thu, 03 Nov 2011 23:05:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='loutilities.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Loutilities</title>
		<link>http://loutilities.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://loutilities.wordpress.com/osd.xml" title="Loutilities" />
	<atom:link rel='hub' href='http://loutilities.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Setting up GIT with Apache Smart HTTP/S and LDAP</title>
		<link>http://loutilities.wordpress.com/2011/08/12/setting-up-git-with-apache-smart-https-and-ldap/</link>
		<comments>http://loutilities.wordpress.com/2011/08/12/setting-up-git-with-apache-smart-https-and-ldap/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 19:48:32 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git-http-backend]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[smart http]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=223</guid>
		<description><![CDATA[I recently was put on a project to explore how we could use GIT over HTTP and integrate with our existing LDAP for authnz.  The reason for HTTP is that it is pretty easy to set-up and you can encrypt the content transfer with SSL.  Also, HTTP/S is firewall friendly.  The downside is that HTTP [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=223&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently was put on a project to explore how we could use GIT over HTTP and integrate with our existing LDAP for authnz.  The reason for HTTP is that it is pretty easy to set-up and you can encrypt the content transfer with SSL.  Also, HTTP/S is firewall friendly.  The downside is that HTTP is a &#8220;dumb&#8221; protocol. The information here consolidates some information I found on the web to accomplish this.  I am using RHEL 6, Apache 2.2, OpenLDAP and <a href="http://code.google.com/p/msysgit/">msysgit</a> for my GIT client on my Windows machine.</p>
<p>First off, HTTP wasn&#8217;t necessarily the fastest protocol to use with GIT until they added a mod called git-http-backend, or SMART-HTTP, as of GIT 1.6.6. This <a href="http://progit.org/2010/03/04/smart-http.html">article</a> from the Pro GIT author, <a href="http://twitter.com/chacon">@chacon</a>, details this and from my experience I cut my download times by two-thirds using this approach.  Moreover, github is also supporting <a href="https://github.com/blog/642-smart-http-support">this</a>.  Basically what you need to do is as follows:</p>
<ol>
<li>Confirm you have Apache 2.2 installed: rpm -q httpd (install it with yum otherwise)</li>
<li>Clone your GIT repo to Apache by doing the following (as per Pro GIT book):
<pre>$ cd /var/www/html/git (mkdir if necessary)
$ git clone  --bare /path/to/git_project gitproject.git
$ cd gitproject.git
$ mv  hooks/post- update.sample  hooks/post- update
$ chmod a+x  hooks/post- update<span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;"> </span></pre>
</li>
<li>Update your httpd.conf to include this:
<pre>SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/</pre>
</li>
<li>Add LDAP Authentication (in this case, any valid LDAP user will have access to the git location) as follows:
<pre>&lt;LocationMatch "^/git/.*/git-receive-pack$"&gt;
        SSLRequireSSL
        Order deny,allow
        Deny from All
        AuthName "GIT Repo"
        AuthType Basic
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative off
        AuthLDAPURL "ldap://ldap-server.company.com:389/ou=users,o=company?uid"
        Require valid-user
&lt;/LocationMatch&gt;</pre>
</li>
<li>Restart httpd: /etc/init.d/httpd restart</li>
</ol>
<p>For LDAP authorization, of course you may have several different repos running off the same host, all which require certain users or groups access to the given location. This <a href="http://httpd.apache.org/docs/2.2/mod/mod_ldap.html">site</a> explains this in detail, but here is an example I used so that I could bind a particular repo location to an LDAP group with SSL in place:</p>
<pre>&lt;LocationMatch "/git/gitproject*"&gt;
        SSLRequireSSL
        Order deny,allow
        Deny from All
        AuthName "GIT Repo"
        AuthType Basic
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative on
        LDAPTrustedGlobalCert CA_BASE64 /etc/pki/tls/http/rootCA.crt
        AuthLDAPURL "ldaps://ldap-server.company.com:636/ou=users,o=company?uid"
        AuthLDAPGroupAttribute member
        AuthLDAPGroupAttributeIsDN on
        Require ldap-group cn=my.group,ou=groups,o=company
        Satisfy any
&lt;/LocationMatch&gt;</pre>
<p>In this example, I&#8217;m binding project.git (use wildcard for LocationMatch in-case users forget to add .git extension) to any member in the LDAP group &#8220;my.group&#8221;. Note that you may need to define a different LDAP group attribute to match the field that will contain the DN of your users .  If you are not storing DN, then you can set AuthLDAPGroupAttributeIsDN to off.</p>
<p>The last step is <a href="http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html">enable SSL</a> on your Apache server.  We use self-signed CERTs internally so you&#8217;re going to have to add those certs to your GIT clients unless of course your using a well known root CA like Verisign.  To do that with msysgit, you open the $MYSYSGIT_INSTALL/bin/curl-ca-bundle.crt and add the base-64 encoded text of your keys to the end of this file.  Then run the following command from the GIT BASH:</p>
<pre>$ git config --global http.sslcainfo c:\\apps\\Git\\bin\\curl-ca-bundle.crt</pre>
<p>That&#8217;s pretty much it!  Now you can simply connect to your repo from msysgit with SSL (no SSH keys req&#8217;d) and LDAP authorization:</p>
<pre>$ git clone https://mygitserver.company.com/git/project.git
Cloning Project...
Username: [put user name that's in the LDAP group]
Password: [password]
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (17/17), done.</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=223&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/08/12/setting-up-git-with-apache-smart-https-and-ldap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>JackBe Presto Webinar &#8211; Enterprise App Store</title>
		<link>http://loutilities.wordpress.com/2011/07/26/jackbe-presto-webinar-enterprise-app-store/</link>
		<comments>http://loutilities.wordpress.com/2011/07/26/jackbe-presto-webinar-enterprise-app-store/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 19:04:39 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[jackbe]]></category>
		<category><![CDATA[mashup]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=217</guid>
		<description><![CDATA[The presentation includes Qualcomm&#8217;s vision behind the adoption of a dynamic Enterprise Information Delivery Architecture. Qualcomm discusses the internal and external forces driving demand for ‘live, fast’ information delivery through an Enterprise App Store. The demonstration includes how Qualcomm is creating a personalized portal experience, aptly named &#8220;My Places&#8221;, for users to have a self-service [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=217&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The presentation includes Qualcomm&#8217;s vision behind the adoption of a dynamic Enterprise Information Delivery Architecture. Qualcomm discusses the internal and external forces driving demand for ‘live, fast’ information delivery through an Enterprise App Store. The demonstration includes how Qualcomm is creating a personalized portal experience, aptly named &#8220;My Places&#8221;, for users to have a self-service means of aggregrating information into a personalized dashboard.</p>
<p><a href='http://www.jackbe.com/downloads/Qualcomm%20and%20JB%20Webinar%20FINAL.pdf'>Presentation Slides</a></p>
<p><a href='http://www.jackbe.com/news_events/events.php#QualcommWebinar'>Webinar Video Download</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=217&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/07/26/jackbe-presto-webinar-enterprise-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>Using the Ext JS 4 MVC architecture and a few gotchas</title>
		<link>http://loutilities.wordpress.com/2011/07/22/using-the-ext-js-4-mvc-architecture-and-a-few-gotchas/</link>
		<comments>http://loutilities.wordpress.com/2011/07/22/using-the-ext-js-4-mvc-architecture-and-a-few-gotchas/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 19:38:16 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA Development]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[sencha]]></category>
		<category><![CDATA[solr]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=211</guid>
		<description><![CDATA[Learn how to create a Solr search application front-end with Ext JS 4's new infinity grid and how to use their new MVC architecture to layout your application into an easily organized project.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=211&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently worked on a POC to integrate Solr search with the Ext JS 4 infinite scrolling grid. This allows you to scroll through 234k+ records without having the user page through the data; the scrolling does the data buffering automatically.  Other features include hit highlighting, wild card searching, resizing windows and word-wrapped columns.  However, the most interesting part to me was using the new <a href="http://www.sencha.com/blog/architecting-your-app-in-ext-js-4/">MVC approach</a> that Sencha introduced in this release to organize your project much like you would a Grails or Java Web project.  I&#8217;ll detail the approach I took to make that happen and point out some gotchas along the way.</p>
<p>First, let&#8217;s start from the model.  In the code below you can see I&#8217;ve defined a model and proxy which will be the piece that will pull the data.  There&#8217;s nothing too special here with the exception of the namespace I used to define the model, <em>ESearch.model.EPart</em>.  These are crucial that they are spelled correctly because they will be used later in other parts of the MVC.</p>
<pre style="background-color:white;border:1px inset;width:500px;height:200px;text-align:left;overflow:auto;padding:6px;">Ext.define('ESearch.model.EPart', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        {name:'id', type:'int'}, 'description', 'item_number', 'part_number'
    ],
    proxy: {
        // load using script tags for cross domain, if the data in on the same domain as
        // this page, an HttpProxy would be better
        type: 'jsonp',
        url: 'http://solrdev1/solr-eti/select/',
        callbackKey: 'json.wrf',
        limitParam: 'rows',
        extraParams: {
            q: '*',
            wt:'json',
            hl:'on',
            'hl.fl': 'description',
            'json.nl':'arrarr'
        },
        reader: {
            root: 'response.docs',
            totalProperty: 'response.numFound'
        },
        // sends single sort as multi parameter
        simpleSortMode: true
    }
});</pre>
<p>The next thing to consider is the store.  Arguably, this is not part of MVC per se, but it is used in conjunction with the model to define what type of store we want to use.  In this case, we want to use a buffered store of with a page size of 500.  You&#8217;ll also notice that in this code I create some listeners for beforeload and load so that I can allow sorting with Solr and to be able to do hit highlighting and query times.  You&#8217;ll also notice that I link the model to the store by using the namespace for the model parameter.  Let&#8217;s take a look:</p>
<pre style="background-color:white;border:1px inset;width:500px;height:400px;text-align:left;overflow:auto;padding:6px;">// default to wildcard search
var query = '*';

Ext.define('ESearch.store.EParts', {
    extend: 'Ext.data.Store',
    model: 'ESearch.model.EPart',
    pageSize: 200,
    remoteSort: true,
    autoLoad:false,
    // allow the grid to interact with the paging scroller by buffering
    buffered: true,
    listeners: {
        beforeload:{ fn: function(store, options) {
            if (options &amp;&amp; options.sorters) {
            var sorters = options.sorters;
            for (var i=0; i 1) {
                var queryParsed = query.replace(/\*/g,'').replace(/"/g, '').trim();
                var queries = queryParsed.split(' ');

                for (var i=0; i &lt; queries.length; i++) {
                    if (queries[i]) {
                        var q = escapeRegExChars(queries[i]);

                        // Check to highlight text only in grid-body
                        var node = Ext.get("grid-inf").dom.childNodes;
                        for (var j=0; j &lt; node.length;j++ ) {
                            if (node[j].className.contains("x-grid-body",true)) {
                                node = node[j];
                                break;
                            }
                        }

                        highlightText(node,
                                q + "+", 'HL', true);
                    }
                }
            }
            // temporary fix to address issue with scrollbars not resizing           
            var grid = Ext.getCmp('grid-inf');
            grid.resetScrollers();
          }
        }
    }
});</pre>
<p>Now that I have the data being consumed the way I want it the next step is to put it into an infinity scrolling grid.  Here&#8217;s the code to do that:</p>
<pre style="background-color:white;border:1px inset;width:500px;height:400px;text-align:left;overflow:auto;padding:6px;">Ext.define('ESearch.view.parts.List', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.partslist',
    store: 'EParts',
    initComponent: function() {

        var groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
            groupHeaderTpl: 'Group: {name} ({rows.length})',
            startCollapsed: false
        });

        var selectFeature = Ext.create('qcom.grid.SelectFeature');

        var config = {
            name: 'qparts-grid',
            id: 'grid-inf',
            verticalScrollerType: 'paginggridscroller',
            loadMask: true,
            invalidateScrollerOnRefresh: false,
            disableSelection: false,
            features: [groupingFeature,selectFeature],
            viewConfig: {
                trackOver: false
            },
            // grid columns
            columns:[{xtype: 'rownumberer',width: 45, sortable: false},{
                id: 'id-col',
                header: "ID",
                dataIndex: 'id',
                width:60
            },{
                id:"descr",
                header: "Description",
                dataIndex: 'description',
                width: 300,
                renderer: columnWrap
            },{
                id:"itemnum",
                header: "Item Numbers",
                dataIndex: 'item_number',
                width: 100
            },{
                id: "partnum",
                header: "Part Numbers",
                dataIndex: 'part_number',
                flex: 1,
                renderer: columnWrap
            }]
            ,selModel:{
           selType:'rowmodel'
          ,allowDeselect:true
          ,mode:'MULTI'
         },
            tbar:
                ['Search:',{
                     xtype: 'textfield',
                     name: 'searchField',
                     hideLabel: true,
                     width: 250,
                     emptyText: "Enter search terms separated by space",
                     listeners: {
                         change: {
                            fn: function adjustQuery(field) {
                                // temporary fix to address issue with scrollbars not resizing
                                this.store.resetData();

                                // Regex query and add wildcards where appropriate
                                if (field.value.length &gt;= 1) {
                                    var values = field.getValue().match(/[A-Za-z0-9_%\/\.\-\|]+|"[^"]+"/g),
                                        value =[];
                                    if (values &amp;&amp; values.length &gt; 1) {
                                        for ( var i=0; i &lt; values.length; i++ ) {
                                            if (values[i].indexOf("\"") &gt;= 0 ) {
                                                value.push(values[i].toLowerCase());
                                            }
                                            else {
                                                value.push("*" + values[i].toLowerCase() + "*");
                                            }
                                        }
                                        query = value.join(" ");
                                        if (Ext.isChrome) {
                                            console.log(query);
                                        }
                                    }
                                    else {
                                        if (field.getValue().indexOf("\"") &gt;= 0 ) {
                                            value.push(field.getValue().toLowerCase());
                                            query = value.join(" ");
                                        }
                                        else {
                                            // temporary fix because regex not picking up 1 char
                                            var temp = values ? values[0] : field.getValue();
                                            query = "*" + temp.toLowerCase() + "*";
                                        }
                                        if (Ext.isChrome) {
                                            console.log(query);
                                        }
                                    }
                                    this.store.load({
                                        params: {q:query}
                                    });
                                }
                            },
                            scope: this,
                            buffer: 500
                         }
                     }
                },
                {
                     xtype: 'tbfill'
                },{
                     xtype: 'displayfield',
                     name: 'totalText',
                     id: 'totalText',
                     hideLabel: true,
                     baseCls: 'x-toolbar-text',
                     style: 'text-align:right;',
                     width:180
                }
            ]
        };
        // apply config object
     Ext.apply(this, config);

     // call parent initComponent
     this.callParent(arguments);
    }
});</pre>
<p>So from the above code you see that I&#8217;m defining a Grid Panel and assigning an alias to it called &#8220;partslist&#8221; (more on that later), but one gotcha I found is that I could not use the full namespace for the store definition &#8212; I had to just simply call it &#8220;EParts&#8221;.  Finally, you&#8217;ll see me set-up the columns and create a top bar that will hold the search field.  I do a regex to process the search field to create a wildcard search and to preserve quotes.  I also set the buffer to 500 so they it will wait 500ms for keystrokes before firing the search again.</p>
<p>Now that we have the grid, we need to put it some where.  This is where I bring the window into the picture.  In the code below, I simply define my window size, where I want it in the browser, window capabilities like maximize, collapse and closable, and finally the items.  Notice for the items, I&#8217;m using the alias <em>partslist </em>from the previously defined grid as the xtype.  This allows me to insert a grid as I defined it before without having to instantiate it as a variable.  Let&#8217;s take a look:</p>
<pre style="background-color:white;border:1px inset;width:500px;height:200px;text-align:left;overflow:auto;padding:6px;">Ext.define( 'ESearch.view.Portal', {
    extend: 'Ext.window.Window',
    alias: 'widget.portal',
        width: 800,
        height:600,
        x: 150,
        y: 80,
        layout:'fit',
        border: false,
        closable: true,
        maximizable: true,
        collapsible: true,
        title: 'EParts Search',
        items: [{
            xtype: 'partslist',
            itemId:'myPartList'
        }]
});</pre>
<p>So to finish up the MVC portion, we need a controller.  In the code below you will see how we create the controller and then define the models, stores, views, and any references needed.  You&#8217;ll also see in the init function where I invoke the store for the initial load of data as well as an example of how we could listen for certain events and do something with that event.  Notice again, that the alias from the grid comes into play (<em>partslist</em>) so that we can capture button events from the grid.  This wasn&#8217;t completely implemented, but it gives an example how it might be implemented.</p>
<pre style="background-color:white;border:1px inset;width:500px;height:200px;text-align:left;overflow:auto;padding:6px;">Ext.define('ESearch.controller.Search', {
    extend: 'Ext.app.Controller',
    models:[
        'EPart'
    ],
    stores:[
        'EParts'
    ],
    views:[
        'parts.List'
    ],
    refs:[{
         ref:'PartsList',
         selector:'partslist'
    }],
    init:function(app) {
            var store = this.getEPartsStore();
            store.guaranteeRange(0, 199);
            this.control({
                   'partslist button':{
                    click:this.onButtonClick
               }
          });
    },
    onButtonClick: function(btn, e) {
        if (btn.operation === 'newSearch') {
            //TODO need to find a nice way to instantiate a new window
        }
    }
});</pre>
<p>The last little bit of code simply defines the application and sets some criteria as to what paths we should use and which pieces of Ext JS are required for this application to function.  One gotcha I noticed is that you must define the first part of your namespace as the the folder your app will fall under.  You&#8217;ll notice that I have mapped the path &#8220;app&#8221; to &#8220;ESearch&#8221; so thusly my directory structure for my application must follow something like this:</p>
<p><a href="http://loutilities.files.wordpress.com/2011/07/2011-06-24_1305.png"><img class="alignnone size-full wp-image-220" title="MVC Layout" src="http://loutilities.files.wordpress.com/2011/07/2011-06-24_1305.png?w=500" alt=""   /></a></p>
<p>&nbsp;</p>
<p>So for instance, ESearch.view.Portal, must live as a file called Portal.js under app/view and same for the other files you see there.  The App.js file that contains the following code will be under the &#8220;webapp&#8221; directory adjacent to &#8220;app&#8221; to maintain relative pathing.  All I do is create my viewport based on its namespace and fire .show() to kick the whole thing off.</p>
<pre style="background-color:white;border:1px inset;width:500px;height:200px;text-align:left;overflow:auto;padding:6px;">Ext.Loader.setConfig({enabled: true,
        paths: {
            'Ext.ux':'lib/extjs4/ux/',
            'ESearch': 'app'
        }
});
Ext.require([
    'Ext.grid.*',
    'Ext.data.*',
    'Ext.util.*',
    'ESearch.view.Portal',
    'Ext.grid.PagingScroller',
    'Ext.ux.grid.FiltersFeature',
    'Ext.grid.feature.Grouping',
    'Ext.grid.plugin.CellEditing',
    'Ext.state.CookieProvider'
]);

Ext.application({
     name:'ESearch',
     appFolder:'app',
     autoCreateViewport:false,
     controllers:['Search'],
     launch:function() {
     Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
     this.viewport = Ext.create('ESearch.view.Portal', {
              stateId:'esearchWindow'
     });
     window[this.name].app = this;

      this.viewport.show();

    }
});</pre>
<p>And finally, we have an HTML file that points to all the necessary JS files for this application to work, which is pretty standard stuff to bootstrap the application. However, with this approach, I only had to define the App.js file and not all the underlying JS files in the MVC portion. This is because the pathing we used in the previous section.</p>
<p>I hope this is useful for folks that would like to explore MVC in Ext JS 4 a little more.  I really find it useful because it helps break up a larger component much along the lines I&#8217;m used to.  In this way you could have multiple DEVs work on the same project pretty easily without walking over each other.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=211&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/07/22/using-the-ext-js-4-mvc-architecture-and-a-few-gotchas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>

		<media:content url="http://loutilities.files.wordpress.com/2011/07/2011-06-24_1305.png" medium="image">
			<media:title type="html">MVC Layout</media:title>
		</media:content>
	</item>
		<item>
		<title>Lucene Revolution &#8211; Anne Veling&#8217;s Amazing NYT Visualization</title>
		<link>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-anne-velings-amazing-nyt-visualization/</link>
		<comments>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-anne-velings-amazing-nyt-visualization/#comments</comments>
		<pubDate>Fri, 27 May 2011 00:00:59 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/2011/05/26/lucene-revolution-anne-velings-amazing-nyt-visualization/</guid>
		<description><![CDATA[@anneveling presented an amazing visualization of all NYT articles from the 1850&#8242;s through 2006. We had over 60k facets that he should how he optimized Solr to properly perform. It should be in the Apple Store in the coming months, so it will be great to play with that in the future. Great stuff!!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=210&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>@anneveling presented an amazing visualization of all NYT articles from the 1850&#8242;s through 2006.  We had over 60k facets that he should how he optimized Solr to properly perform.</p>
<p>It should be in the Apple Store in the coming months, so it will be great to play with that in the future.  Great stuff!!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=210&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-anne-velings-amazing-nyt-visualization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>Lucene Revolution &#8211; Solr Performance Innovations by Yonik Seeley</title>
		<link>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-solr-performance-innovations-by-yonik-seeley/</link>
		<comments>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-solr-performance-innovations-by-yonik-seeley/#comments</comments>
		<pubDate>Thu, 26 May 2011 22:28:00 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[solr]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=207</guid>
		<description><![CDATA[Yonik Seeley reports on many new enhancements for 3.1 and 4.0 with emphasis on performance improvements. TieredMergePolicy is the new default that ignores segment order when selecting best merge and it does not over merge. Finite State Transducer (FST) based terms index is much smaller in memory and much faster in terms. DocumentWriterPerThread (DWPT) prevents [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=207&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yonik Seeley reports on many new enhancements for 3.1 and 4.0 with emphasis on performance improvements.</p>
<p>TieredMergePolicy is the new default that ignores segment order when selecting best merge and it does not over merge. Finite State Transducer (FST) based terms index is much smaller in memory and much faster in terms.</p>
<p>DocumentWriterPerThread (DWPT) prevents the index from being blocked while the flushing new segments.  Only the largest DWT is flushed out concurrently while others continue to index.  This benefits performance by 250%+.</p>
<p>SolrCloud is the integration of ZooKeeper to make managing several Solr nodes in a cluster more efficiently. -DzkRun Java param will just run an internal ZK instance.</p>
<p>Distributed requests can be managed by Solr w/o load balancer/VIP.  Just use pipe to define the shard lists or you can query across all shards by adding distrib=true to the queryParams.</p>
<p>Extended Dismax parser (superset of dismax) does term proximity boosting and so much more! See ref. <a href="http://blog.sematext.com/2010/01/20/solr-digest-january-2010/">here</a>:</p>
<ul>
<li>Supports full Lucene query syntax in the absence of syntax errors</li>
<li>Supports “and”/”or” to mean “AND”/”OR” in Lucene syntax mode</li>
<li>When there are syntax errors, improved smart partial escaping of special characters is done to prevent them… in this mode, fielded queries, +/-, and phrase queries are still supported.</li>
<li>Improved proximity boosting via word bi-grams… this prevents the problem of needing 100% of the words in the document to get any boost, as well as having all of the words in a single field.</li>
<li>Advanced stopword handling… stopwords are not required in the mandatory part of the query but are still used (if indexed) in the proximity boosting part. If a query consists of all stopwords (e.g. to be or not to be) then all will be required.</li>
<li>Supports the “boost” parameter.. like the dismax bf param, but multiplies the function query instead of adding it in</li>
<li>Supports pure negative nested queries… so a query like +foo (-foo) will match all documents</li>
</ul>
<p>New faceting performance improvements included deep faceting.  Pivot faceting allows you to do nested faceting now and Range faceting allows you do what we did with dates now with numbers.</p>
<p>Spatial search is perfect for geo searches.  You can now sort by any arbitrary function query (like closest item).  Pseudo-fields in Solr 4 will allow you to return distance from the point of origin.</p>
<p>Pseudo-fields allows you to return other info along with the document stored fields (function queries, globs, aliasing, multiple fl values).  For future, inline highlighting will provide highlighting details right with the fields rather than having it returned separately&#8230;very nice!</p>
<p>Group by field and group by query also look very helpful.</p>
<p>Pseudo-Join will allow you to do a restriction on a particular source very easily and quickly with just a simple &#8220;fq&#8221; param.  Lots of good examples shown in the slides.</p>
<p>Auto-suggest has two implementation (TST or FST); the latter is slower to build, but faster and more compress.</p>
<p>You can now index with curl and a JSON array and query results can be returned as CSV.</p>
<p>Last but not least, the new browse GUI for SOLR looks very nice too&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/207/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=207&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-solr-performance-innovations-by-yonik-seeley/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>Lucene Revolution &#8211; Implementing Click Through Relevancy</title>
		<link>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-implementing-click-through-relevancy/</link>
		<comments>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-implementing-click-through-relevancy/#comments</comments>
		<pubDate>Thu, 26 May 2011 20:41:48 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[solr]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=200</guid>
		<description><![CDATA[First page counts the most as most people don&#8217;t go that or definitely not beyond page 3.  Three  ways to reflect relevance, indexing-time (text analysis, morphological analysis, synomyns), query-time (boost, dismax, synonyms, fx queries) or editorial ranking. How to trick the user to give you feedback on the search results?? They won&#8217;t really do this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=200&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>First page counts the most as most people don&#8217;t go that or definitely not beyond page 3.  Three  ways to reflect relevance, indexing-time (text analysis, morphological analysis, synomyns), query-time (boost, dismax, synonyms, fx queries) or editorial ranking.</p>
<p>How to trick the user to give you feedback on the search results?? They won&#8217;t really do this otherwise. What was searched, navigation click through and &#8220;like&#8221; buttons.  Query log and click-through events are key to do this analysis.  In order to do this properly, you must consider the click-through in context of what was searched before.</p>
<h4>Some Approaches</h4>
<p>You can label the clicked item with the query terms. This can create collaborative filtering or a recommendation system.  However this approach can be sparse or noisy.  Can change intent, hidden intent, or no intent at all.</p>
<p>NOTE: if you don&#8217;t collect query logs, you should start so today! This will help collect user profile population, query suggestions, most useful information, and general user interest over time.</p>
<p>You can do vector analysis between the query and label.  The distance between the vectors can you give you some scoring attribute to use for relevancy.</p>
<p>Undesired effects included unbounded positive feedback (dominated by popularity but no longer relvante). Post clicks, off-topic, noisy labels.  Click data should be sub-linear and temporal in nature (so old click counts should be discounted) and finally it should be sanitized and bounded as to how much effect on the score.</p>
<h4>How do you implement this?</h4>
<p>Doing this in Solr is not OOTB, but fairly simple to implement. Need a component for logging queries, logging click-throughs (you can use a small JS to report this&#8230;see Google/Yahoo!), a tool to correlate and aggregate the logs and a tool to manage the click through history.</p>
<p>Next step is to take these results and use them as boost values.  Use ExternalFileField to note the docid with the field and the boost. Another approach is via full-index to join source docs and click data by docid+reindex &#8211;not viable for large corpuses.  Incremental field updates will be available in the future and probably the best fit for this use case (check back in a year).  You can use ParallelReader to have a separate index for the click data and zip it with the main index&#8230;this approach is complicated/fragile!</p>
<p>Commercial solution from Lucid Imagination has a click scoring framework that can help.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/200/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=200&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/05/26/lucene-revolution-implementing-click-through-relevancy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>Lucene Revolution Keynote &#8211; Marc Kellenstein</title>
		<link>http://loutilities.wordpress.com/2011/05/25/lucene-revolution-keynote/</link>
		<comments>http://loutilities.wordpress.com/2011/05/25/lucene-revolution-keynote/#comments</comments>
		<pubDate>Wed, 25 May 2011 17:37:54 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[solr]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=184</guid>
		<description><![CDATA[This week I&#8217;m back in SF and this time I&#8217;m attending the Lucene Revolution conference.  The conference kicked off with Marc Kellenstein emphatically saying, &#8220;It is easier to search than to browse.&#8221;  Ain&#8217;t that the truth. Over the next few days I blog my notes from the sessions that I attend at the conference.  I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=184&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This week I&#8217;m back in SF and this time I&#8217;m attending the <a href="http://lucenerevolution.org/">Lucene Revolution</a> conference.  The conference kicked off with Marc Kellenstein emphatically saying, &#8220;It is easier to search than to browse.&#8221;  Ain&#8217;t that the truth.</p>
<p>Over the next few days I blog my notes from the sessions that I attend at the conference.  I hope they provide some insight for others and reminders for me!</p>
<h3>Keynote Notes</h3>
<p>Google was first to use spell checking against terms in the docs from the index rather than just a big dictionary.</p>
<p>Recall is the percent of relevant docs returned (50 available only 25 returned is 50%)</p>
<p>Precision is the percent returned that are relevant (100 returned, 25 relevant, 25% precise)</p>
<p>100% recall is easy but really are striving for 100% precision too, which is a lot harder to do.</p>
<p>Getting good recall</p>
<ul>
<li>Use spell checking, synonyms to match users&#8217; vocab</li>
<li>NLP</li>
<li>Normalize data</li>
<li>collect, index and search all data</li>
</ul>
<p>Getting good precision</p>
<ul>
<li>queries are too short (have users rank terms and use machine learning)</li>
<li>implicit relevance feedback is available but doubles search execution and no one really uses it although it should be considered</li>
<li>Watson or Google translate doesn&#8217;t use NLP but instead huge data set statistical analysis</li>
</ul>
<p>Some history</p>
<ul>
<li>Lucene created by Doug Cutting and Apache release in 2001, wide acceptance by 2005</li>
<li>Solr built in 2005 by Yonik Seeley for CNET; Apache release in 2006 and provide Lucene capabilities over http with faceting</li>
</ul>
<p>Strengths:</p>
<ul>
<li>Best segmented index (like Google)</li>
<li>Open Source</li>
<li>Great Community</li>
</ul>
<p>Basic premise is to use Lucene/Solr since it is the best and it&#8217;s free.  It continues to innovate and have strong community support.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/184/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=184&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/05/25/lucene-revolution-keynote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>2010 in review</title>
		<link>http://loutilities.wordpress.com/2011/01/02/2010-in-review/</link>
		<comments>http://loutilities.wordpress.com/2011/01/02/2010-in-review/#comments</comments>
		<pubDate>Sun, 02 Jan 2011 17:11:22 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=180</guid>
		<description><![CDATA[The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health: The Blog-Health-o-Meter™ reads This blog is on fire!. Crunchy numbers A helper monkey made this abstract painting, inspired by your stats. A Boeing 747-400 passenger jet can hold 416 passengers. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=180&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health:</p>
<p><img style="border:1px solid #ddd;background:#f5f5f5;padding:20px;" src="http://s0.wp.com/i/annual-recap/meter-healthy4.gif" alt="Healthy blog!" width="250" height="183" /></p>
<p>The <em>Blog-Health-o-Meter™</em> reads This blog is on fire!.</p>
<h2>Crunchy numbers</h2>
<div style="width:288px;float:right;border:1px solid #ddd;background:#fff;margin:0 0 1em 1em;padding:6px;">
<p><img src="http://s0.wp.com/i/annual-recap/abstract-stats-6.png" alt="Featured image" /></p>
<p><em>A helper monkey made this abstract painting, inspired by your stats.</em></p>
</div>
<p>A Boeing 747-400 passenger jet can hold 416 passengers.  This blog was viewed about <strong>2,500</strong> times in 2010.  That&#8217;s about 6 full 747s.</p>
<p>&nbsp;</p>
<p>In 2010, there were <strong>30</strong> new posts, growing the total archive of this blog to 36 posts. There was <strong>1</strong> picture uploaded, taking a total of 221kb.</p>
<p>The busiest day of the year was November 18th with <strong>244</strong> views. The most popular post that day was <a style="color:#08c;" href="http://loutilities.wordpress.com/2010/11/15/senchacon-day1-extjs-4-overview/">SenchaCon Day1: ExtJS 4 Overview</a>.</p>
<p>&nbsp;</p>
<h2>Where did they come from?</h2>
<p>The top referring sites in 2010 were <strong>twitter.com</strong>, <strong>sencha.com</strong>, <strong>en.wordpress.com</strong>, <strong>linkedin.com</strong>, and <strong>liferay.com</strong>.</p>
<p>Some visitors came searching, mostly for <strong>extjs 4</strong>, <strong>missing an @xmlrootelement annotation</strong>, <strong>extjs4</strong>, <strong>senchacon</strong>, and <strong>missing @xmlrootelement</strong>.</p>
<div style="clear:both;"></div>
<h2>Attractions in 2010</h2>
<p>These are the posts and pages that got the most views in 2010.</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">1</div>
<p><a style="margin-right:10px;" href="http://loutilities.wordpress.com/2010/11/15/senchacon-day1-extjs-4-overview/">SenchaCon Day1: ExtJS 4 Overview</a> <span style="color:#999;font-size:8pt;">November 2010</span><br />
2 comments</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">2</div>
<p><a style="margin-right:10px;" href="http://loutilities.wordpress.com/2009/07/23/jaxb-missing-xmlrootelement-exception/">JAXB Missing XmlRootElement Exception</a> <span style="color:#999;font-size:8pt;">July 2009</span></p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">3</div>
<p><a style="margin-right:10px;" href="http://loutilities.wordpress.com/2010/11/17/senchacon-day3-theming-senchatouch/">SenchaCon Day3: Theming SenchaTouch</a> <span style="color:#999;font-size:8pt;">November 2010</span><br />
2 comments</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">4</div>
<p><a style="margin-right:10px;" href="http://loutilities.wordpress.com/2010/09/08/development-strategies-for-liferay-6/">Development Strategies for Liferay 6</a> <span style="color:#999;font-size:8pt;">September 2010</span></p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">5</div>
<p><a style="margin-right:10px;" href="http://loutilities.wordpress.com/2010/09/09/103/">Day 2 &#8211; Liferay Roadmap 2011</a> <span style="color:#999;font-size:8pt;">September 2010</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/180/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=180&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2011/01/02/2010-in-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/meter-healthy4.gif" medium="image">
			<media:title type="html">Healthy blog!</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/abstract-stats-6.png" medium="image">
			<media:title type="html">Featured image</media:title>
		</media:content>
	</item>
		<item>
		<title>How to undeploy Liferay 6 EE Ext Plugin</title>
		<link>http://loutilities.wordpress.com/2010/12/06/how-to-undeploy-liferay-6-ee-ext-plugin/</link>
		<comments>http://loutilities.wordpress.com/2010/12/06/how-to-undeploy-liferay-6-ee-ext-plugin/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 01:14:02 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ext plugin]]></category>
		<category><![CDATA[liferay]]></category>
		<category><![CDATA[liferay 6]]></category>
		<category><![CDATA[redeploy]]></category>
		<category><![CDATA[undeploy]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=170</guid>
		<description><![CDATA[Liferay EE 6 has done away with the old EXT environment in previous versions and has moved to a more extensible plugin approach.  While I wholeheartedly endorse that approach, it is fraught with one small problem: redeployments.  The situation is this: you initially deploy your EXT plugin but then you make some changes and want [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=170&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Liferay EE 6 has done away with the old EXT environment in previous versions and has moved to a more extensible plugin approach.  While I wholeheartedly endorse that approach, it is fraught with one small problem: redeployments.  The situation is this: you initially deploy your EXT plugin but then you make some changes and want to redeploy.  Well your previous deployment&#8217;s jars are now in the class loader so you can&#8217;t just run &#8220;ant deploy&#8221; again to get your new changes on the server.</p>
<p>The solution: shutdown your server and run this script.  This script has been improved upon from this <a href="http://btnkumar.blogspot.com/2010/09/deploymentundeployment-with-ext-plugins.html">post</a> here to include portlets that you may have modified in your EXT.  I&#8217;ve also included a version for MAC/Linux users.</p>
<p>Windows Version:</p>
<pre style="border:1px inset;width:500px;height:200px;text-align:left;overflow:auto;padding:6px;">
@echo off
set app_name=%1
if "%app_name%" == "" goto end
set tomcat_home=C:\apps\liferay-portal-6.0-ee\tomcat-6.0.29

rmdir /S /Q %tomcat_home%\temp
rmdir /S /Q %tomcat_home%\webapps\%app_name%-ext
rmdir /S /Q %tomcat_home%\webapps\ROOT\html\portlet\ext
del /S /Q %tomcat_home%\lib\ext\ext-%app_name%-ext-service.jar
del /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-util-bridges.jar
del /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-util-taglib.jar
del /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-util-java.jar
del /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\lib\ext-%app_name%-ext-impl.jar
del /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\ext-%app_name%-ext.xml
del /S /Q %tomcat_home%\webapps\ROOT\WEB-INF\tiles-defs-ext.xml
del /S /Q %tomcat_home%\temp\liferay\com\liferay\portal\deploy\dependencies\ext-%app_name%-ext-util-bridges.jar
del /S /Q %tomcat_home%\temp\liferay\com\liferay\portal\deploy\dependencies\ext-%app_name%-ext-util-taglib.jar
del /S /Q %tomcat_home%\temp\liferay\com\liferay\portal\deploy\dependencies\ext-%app_name%-ext-util-java.jar
:end
</pre>
<p>Mac/Linux Version:</p>
<pre style="border:1px inset;width:500px;height:200px;text-align:left;overflow:auto;padding:6px;">
#!/bin/sh

if [ $# -ne 1 ]; then
 echo "Usage: clean-my-ext [ext-name]"
 exit 1
fi

tomcat_home="/local/mnt/apps/liferay/tomcat-6.0.29"
app_name="$1"

rm -rf $tomcat_home/temp
rm -rf $tomcat_home/webapps/$app_name-ext
rm -rf $tomcat_home/webapps/ROOT/html/portlet/ext
rm -f $tomcat_home/lib/ext/ext-$app_name-ext-service.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-bridges.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-taglib.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-java.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-impl.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/ext-$app_name-ext.xml
rm -f $tomcat_home/webapps/ROOT/WEB-INF/tiles-defs-ext.xml
rm -f $tomcat_home/temp/liferay/com/liferay/portal/deploy/dependencies/ext-$app_name-ext-util-bridges.jar
rm -f $tomcat_home/temp/liferay/com/liferay/portal/deploy/dependencies/ext-$app_name-ext-util-taglib.jar
rm -f $tomcat_home/temp/liferay/com/liferay/portal/deploy/dependencies/ext-$app_name-ext-util-java.jar
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=170&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2010/12/06/how-to-undeploy-liferay-6-ee-ext-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
		<item>
		<title>SenchaCon Day3: Debugging SenchaTouch</title>
		<link>http://loutilities.wordpress.com/2010/11/17/senchacon-day3-debugging-senchatouch/</link>
		<comments>http://loutilities.wordpress.com/2010/11/17/senchacon-day3-debugging-senchatouch/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 20:06:03 +0000</pubDate>
		<dc:creator>loutilities</dc:creator>
				<category><![CDATA[RIA Development]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[sencha]]></category>
		<category><![CDATA[senchacon]]></category>
		<category><![CDATA[senchatouch]]></category>

		<guid isPermaLink="false">http://loutilities.wordpress.com/?p=163</guid>
		<description><![CDATA[Evan Trimboli and Tommy Maintz give this talk. Common JS Gotchas: No compiler so all errors at runtime.  Be sure you check case and check spelling. Declare variables in the appropriate scope by declaring vars at the top of a function to avoid accidental local vars.  Careful using reserved words like &#8220;class&#8221;. Truthiness &#38; Equality: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=163&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Evan Trimboli and Tommy Maintz give this talk.</p>
<p>Common JS Gotchas:</p>
<ul>
<li>No compiler so all errors at runtime.  Be sure you check case and check spelling. Declare variables in the appropriate scope by declaring vars at the top of a function to avoid accidental local vars.  Careful using reserved words like &#8220;class&#8221;.</li>
<li>Truthiness &amp; Equality: in JS there&#8217;s multiple ways things can be true/false rather than explicit.  Type coercion not performed by &#8220;===&#8221;.  Note: null/undefined are different (e.g., undefined means it doesn&#8217;t exist).</li>
<li>Closure you have to check for variable binding (outside the closure) and variable shadowing (response is an example in an ajax call).</li>
<li>No block scope only function scope (e.g., a variable in an IF block is global to the function)</li>
<li>Prototypal inheritance</li>
<li>Higher Order Functions can be passed to functions and be variables.</li>
</ul>
<h3>Tools to Debug</h3>
<p>Chrome Debugger</p>
<ul>
<li>Elements screen to look at position in DOM, see styles and their precedence. You can search for DOM ids and modify styles dynamically.</li>
<li>Scripts screen allows you to debug and view local and global variables. You can look at the call stack and set conditional breakpoints.</li>
<li>Resources screen shows size and time it took to load various artifacts that come over HTTP or XHR.</li>
<li>Console screen allows interactive commands and use log(), warn() and error() to log to the console</li>
</ul>
<p>JSLint</p>
<ul>
<li>Code Quality Tool to check for undefined or inadvertently declared global vars, required blocking, unreachable code, trailing commas and much more.</li>
</ul>
<p>RemoteJS</p>
<ul>
<li>Made by Webkit staff on Sencha team to help debug Android devices (on Github and <a href="http://http://www.sencha.com/blog/2010/11/05/remote-javascript-debugging-on-android/" target="_blank">blog</a>).</li>
</ul>
<h3>Sencha Touch Specifics</h3>
<p>On Data</p>
<ul>
<li>Is the URL correct?? Did the request complete?? Is data valid??</li>
<li>Does the model align with the Component (from JSON for example).</li>
</ul>
<p>Event Driven Model</p>
<ul>
<li>Use appropriate callbacks</li>
<li>Remember that things are typically async</li>
</ul>
<p>Overnesting</p>
<ul>
<li>Panels with no layout</li>
<li>Specify layouts instead (be sure to specify layouts for Panel and use &#8220;fit&#8221;).  Use the DOM view in the Chrome debugger to see if elements have the correct height (common mistake is that they&#8217;ll be zero).</li>
</ul>
<p>Dynamic Layouts</p>
<ul>
<li>Remember doLayout and doComponent to reset layout after changes to the component</li>
</ul>
<p>What is &#8220;this&#8221;</p>
<ul>
<li>Log console.log(this) to be sure you&#8217;re dealing with the right object especially in callbacks and handlers.  You may not be in the right context.</li>
<li>All callbacks allow you to specify scope</li>
</ul>
<p>Event Handling</p>
<ul>
<li>Use capture and observe to check events.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/loutilities.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/loutilities.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/loutilities.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/loutilities.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/loutilities.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/loutilities.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/loutilities.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/loutilities.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=loutilities.wordpress.com&amp;blog=7985409&amp;post=163&amp;subd=loutilities&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://loutilities.wordpress.com/2010/11/17/senchacon-day3-debugging-senchatouch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9cc9dfcd5a25c8cf316b3cd43a53a57e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">loutilities</media:title>
		</media:content>
	</item>
	</channel>
</rss>
