<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xmlns:media="http://search.yahoo.com/mrss">
    <channel>
        <title>Paul&#39;s Vox</title>
        <link>http://paul.vox.com/library/posts/page/1/</link>
        <description></description>
        <language>en</language>
        <generator>Vox</generator>
        <lastBuildDate>Mon, 08 Jun 2009 13:19:45 -0700</lastBuildDate>
        <copyright>Copyright 2009</copyright>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>  
 
        <item>
            <title>Gopher on MTV</title>
            <link>http://paul.vox.com/library/post/gopher-on-mtv.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/gopher-on-mtv.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/gopher-on-mtv.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 08 Jun 2009 13:19:45 -0700</pubDate>         
            
            <description>    &lt;p&gt;I dug this little gem out of the archives. &amp;#160;Enjoy!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
    
    
    





        





&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00b8ea067b33dece01101613cfb8860b&quot; at:format=&quot;extra-large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-extra-large video-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item video-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://paul.vox.com/library/video/6a00b8ea067b33dece01101613cfb8860b.html&quot;&gt;&lt;img src=&quot;http://a0.vox.com/6a00b8ea067b33dece01101613cfb8860b-500pi&quot; alt=&quot;Gopher World Tour T-Shirt on MTV&quot; title=&quot;Gopher World Tour T-Shirt on MTV&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://paul.vox.com/library/video/6a00b8ea067b33dece01101613cfb8860b.html&quot; title=&quot;Gopher World Tour T-Shirt on MTV&quot;&gt;Gopher World Tour T-Shirt on MTV&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/gopher-on-mtv.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece01101613cfc1860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>    
        </item> 
 
        <item>
            <title>Email Clients Full Circle</title>
            <link>http://paul.vox.com/library/post/email-clients-full-circle.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/email-clients-full-circle.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/email-clients-full-circle.html?_c=feed-rss-full</guid> 
            <pubDate>Wed, 03 Jun 2009 11:23:33 -0700</pubDate>         
            
            <description>    &lt;p&gt;In the beginning I used elm to read my mail. &amp;#160;This was somewhat radical, especially as I worked with the team that created &lt;a href=&quot;http://en.wikipedia.org/wiki/POPmail&quot;&gt;POPMail&lt;/a&gt; for the mac and &lt;a href=&quot;http://en.wikipedia.org/wiki/Minnesota_Internet_Users_Essential_Tool&quot;&gt;Minuet&lt;/a&gt; for the PC, and everyone else moved to pine. &amp;#160;Then came &lt;a href=&quot;http://www.mutt.org/&quot;&gt;Mutt&lt;/a&gt; -- happy days -- I was able to slice and dice email with amazing speed.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A couple of years ago I converted over to Mail.app -- mostly because of the contacts and calendar integrations, and the fact that I could merge personal email and corp email accounts. &amp;#160;In the intervening time I had to move to comcast, which meant running my own imap server proved more difficult than it was worth, so I moved to Google Apps for Your Domain, all of a sudden my personal domain is running Gmail, and I discovered it has key bindings.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All of a sudden it&amp;#39;s mutt deja-vu. navigation with vi j/k keys? yes. &amp;#160;Single window view (inbox/message)? yes again. &amp;#160;Tagging messages? yes. &amp;#160;Blazingly fast? you bet. &amp;#160;The only thing I miss is keystroke filtering of messages.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That&amp;#39;s one reason why I see things like Google Wave working out so well, I might be late to the gmail party, but plenty of folks have been using this as their primary mode of communication for a long long time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/email-clients-full-circle.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece0110182fb447860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Tomcat and SSL Accelerators</title>
            <link>http://paul.vox.com/library/post/tomcat-and-ssl-accelerators.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/tomcat-and-ssl-accelerators.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/tomcat-and-ssl-accelerators.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 09 Apr 2009 12:24:21 -0700</pubDate>         
            
            <description>    &lt;p&gt;Using an SSL Accelerator like a Netscaler is really useful, you can offload a lot of work to a device that supports this in hardware and can use SSL session affinity to send requests to the same backend. &amp;#160;In the simplest setup the SSL Accelerator accepts the request and proxies it to your internal set of hosts running on port 80.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, code that generates redirects and URLs works poorly because the servletRequest.getScheme(), getSecure() and getServerPort() will return http/false/80 for SSL and non-SSL connections.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One way to solve this is listen on multiple ports. &amp;#160;Create a Connection on 80 and 443, but do not run SSL on either port. &amp;#160;Then for the 443 port you configure it with secure=&amp;quot;true&amp;quot; and scheme=&amp;quot;https&amp;quot;. &amp;#160;This is suboptimal however as then you have to manage yet another server pool in your load balancer and you end up sending twice the health checks. &amp;#160;Not so good.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You might try to solve this by using a ServletFilter. &amp;#160;You can use an &lt;em&gt;HttpServletRequestWrapper&lt;/em&gt; instance to change the scheme/port/and secure flag. &amp;#160;Sadly this doesn&amp;#39;t work, because of the way tomcat implements &lt;em&gt;HttpServletResponse&lt;/em&gt;, it uses the original request object to ascertain the scheme/secure flag/port. &amp;#160;Overriding these will allow application logic to see the updated values. &amp;#160;You get into trouble when you call encodeRedirectURL() or sendRedirect() with non-absolute URLs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lucky for us Tomcat supports a way to inject code into the connection handling phase via &lt;a href=&quot;http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html&quot;&gt;Valves&lt;/a&gt;. &amp;#160;A valve can query and alter the Catalina and Coyote request objects before the first filter is run. &amp;#160;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To make your Valve work you&amp;#39;ll need to configure your load balancer to send a special header when SSL is in use. &amp;#160;On the Netscaler this can be done by &lt;a href=&quot;http://support.citrix.com/article/CTX109881&quot;&gt;setting owa_support on&lt;/a&gt;. &amp;#160;With that enabled the http header &lt;em&gt;Front-End-Https: On&lt;/em&gt; is sent for requests that use SSL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once we have these pieces in place the Valve is fairly straightforward:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote class=&quot;webkit-indent-blockquote&quot; style=&quot;margin: 0 0 0 40px; border: none; padding: 0px;&quot;&gt;&lt;p&gt;import java.io.IOException;&lt;/p&gt;&lt;p&gt;import javax.servlet.ServletException;&lt;/p&gt;&lt;p&gt;import org.apache.catalina.connector.Request;&lt;br /&gt;import org.apache.catalina.connector.Response;&lt;br /&gt;import org.apache.catalina.valves.ValveBase;&lt;/p&gt;&lt;p&gt;public class NetscalerSSLValve extends ValveBase {&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160;@Override&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160;public void invoke(Request req, Response resp) throws IOException, ServletException {&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;if (&amp;quot;On&amp;quot;.equals(req.getHeader(&amp;quot;Front-End-Https&amp;quot;))) {&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;req.setSecure(true);&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;req.getCoyoteRequest().scheme().setString(&amp;quot;https&amp;quot;);&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;req.getCoyoteRequest().setServerPort(443);&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;if ( getNext() != null ) {&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;getNext().invoke(req, resp);&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160;}&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Compile this, stick it in the tomcat lib directory, add an entry in your server.xml and away you go.&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/tomcat-and-ssl-accelerators.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece011015f89ce2860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://paul.vox.com/tags/">java</category> 
            <category domain="http://paul.vox.com/tags/">tomcat</category> 
            <category domain="http://paul.vox.com/tags/">netscaler</category>   
        </item> 
 
        <item>
            <title>Google I/O Today</title>
            <link>http://paul.vox.com/library/post/google-io-today.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/google-io-today.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/google-io-today.html?_c=feed-rss-full</guid> 
            <pubDate>Wed, 28 May 2008 07:33:28 -0700</pubDate>         
            
            <description>    &lt;p&gt;Speaking at &amp;quot;Meet the Containers&amp;quot;, &amp;quot;Shindig 101&amp;quot; and &amp;quot;OpenSocial Fireside Chat&amp;quot;.&lt;/p&gt;&lt;p&gt;All at Moscone West, check it out!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://code.google.com/events/io/&quot;&gt;http://code.google.com/events/io/&lt;/a&gt;&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/google-io-today.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00fad68b46db0005?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://paul.vox.com/tags/">google</category> 
            <category domain="http://paul.vox.com/tags/">shindig</category> 
            <category domain="http://paul.vox.com/tags/">opensocial</category>   
        </item> 
 
        <item>
            <title>The Mysteries of Java Character Set Performance</title>
            <link>http://paul.vox.com/library/post/the-mysteries-of-java-character-set-performance.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/the-mysteries-of-java-character-set-performance.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/the-mysteries-of-java-character-set-performance.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 01 May 2008 01:22:08 -0700</pubDate>         
            
            <description>    &lt;blockquote class=&quot;webkit-indent-blockquote&quot; style=&quot;margin: 0 0 0 40px; border: none; padding: 0px;&quot;&gt;&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;&amp;quot;Two Characters Sets? &amp;#160;Seems like plenty!&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;So I&amp;#39;ve been pushing Java to it&amp;#39;s limits lately and finding some real nasty concurrency issues inside the JRE code itself. &amp;#160;Here&amp;#39;s one particulary ugly one -- we had 700 threads stuck here:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; java.lang.Thread.State: BLOCKED (on object monitor) &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at sun.nio.cs.FastCharsetProvider.charsetForName(FastCharsetProvider.java:118)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; - waiting to lock &amp;lt;0x00002aab4cdf91b8&amp;gt; (a sun.nio.cs.StandardCharsets)&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at java.nio.charset.Charset.lookup2(Charset.java:450)&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at java.nio.charset.Charset.lookup(Charset.java:438)&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at java.nio.charset.Charset.isSupported(Charset.java:480)&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at java.lang.StringCoding.lookupCharset(StringCoding.java:85)&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at java.lang.StringCoding.decode(StringCoding.java:165)&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; at java.lang.String.&amp;lt;init&amp;gt;(String.java:516)&amp;#160;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Digging deeper we find the lookupCharset is called all over the place. &amp;#160;The app in question is functions as a web proxy, so it&amp;#39;s constantly reading and writing data from web pages in a variety of character sets. &amp;#160;The method charsetForName() uses a synchronized data structure to lookup defined character sets. &amp;#160;(Yay serialized access....)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But wait, lookup and lookup2 provide us with a cache so we can avoid the big bad synchronized method.. &amp;#160;Sigh, here&amp;#39;s the implementation:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; private static Charset lookup(String charsetName) {&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (charsetName == null)&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; throw new IllegalArgumentException(&amp;quot;Null charset name&amp;quot;);&lt;/div&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Object[] a;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if ((a = cache1) != null &amp;amp;&amp;amp; charsetName.equals(a[0]))&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return (Charset)a[1];&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // We expect most programs to use one Charset repeatedly.&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // We convey a hint to this effect to the VM by putting the&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // level 1 cache miss code in a separate method.&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; return lookup2(charsetName);&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; }&lt;/div&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; private static Charset lookup2(String charsetName) {&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Object[] a;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if ((a = cache2) != null &amp;amp;&amp;amp; charsetName.equals(a[0])) {&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cache2 = cache1;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cache1 = a;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return (Charset)a[1];&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/div&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; Charset cs;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if ((cs = standardProvider.charsetForName(charsetName)) != null ||&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; (cs = lookupExtendedCharset(charsetName)) &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; != null ||&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; (cs = lookupViaProviders(charsetName)) &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;!= null)&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; {&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cache(charsetName, cs);&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return cs;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/div&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; /* Only need to check the name if we didn&amp;#39;t find a charset for it */&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; checkName(charsetName);&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; return null;&lt;/div&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes, a whopping 2-entry cache!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, the keys used are not canonical, so if my app asks for &amp;quot;UTF-8&amp;quot;, &amp;quot;utf-8&amp;quot;, and &amp;quot;ISO-8859-1&amp;quot; with regularity this 2 entry cache is worthless, every call ends up blocking in the evil thread-synchronized data structure.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Someone send them a copy of the ConcurrentHashMap doc. &amp;#160;please.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/rant&amp;gt; ....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/the-mysteries-of-java-character-set-performance.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00f48cf3bcae0003?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Social Graph Meat-up</title>
            <link>http://paul.vox.com/library/post/social-graph-meat-up.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/social-graph-meat-up.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/social-graph-meat-up.html?_c=feed-rss-full</guid> 
            <pubDate>Sat, 02 Feb 2008 22:24:05 -0800</pubDate>         
            
            <description>    &lt;p&gt;Dinner not for vegans at O&amp;#39;Reilly.
    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00b8ea067b33dece00e398d8e1700005&quot; at:format=&quot;extra-large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-extra-large photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://paul.vox.com/library/photo/6a00b8ea067b33dece00e398d8e1700005.html&quot;&gt;&lt;img src=&quot;http://a0.vox.com/6a00b8ea067b33dece00e398d8e1700005-500pi&quot; alt=&quot;Social Graph Meat-up&quot; title=&quot;Social Graph Meat-up&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://paul.vox.com/library/photo/6a00b8ea067b33dece00e398d8e1700005.html&quot; title=&quot;Social Graph Meat-up&quot;&gt;Social Graph Meat-up&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/social-graph-meat-up.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00e398d8e13f0003?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://paul.vox.com/tags/">mobile</category> 
            <category domain="http://paul.vox.com/tags/">sgfoo2008</category>    
        </item> 
 
        <item>
            <title>Opensocial Hackathon Results!</title>
            <link>http://paul.vox.com/library/post/opensocial-hackathon-results.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/opensocial-hackathon-results.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/opensocial-hackathon-results.html?_c=feed-rss-full</guid> 
            <pubDate>Wed, 16 Jan 2008 21:34:52 -0800</pubDate>         
            
            <description>    &lt;p&gt;Battleship running in hi5.&lt;br /&gt;
    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00b8ea067b33dece00e398d33adf0003&quot; at:format=&quot;extra-large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-extra-large photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://paul.vox.com/library/photo/6a00b8ea067b33dece00e398d33adf0003.html&quot;&gt;&lt;img src=&quot;http://a7.vox.com/6a00b8ea067b33dece00e398d33adf0003-500pi&quot; alt=&quot;Opensocial Hackathon Results!&quot; title=&quot;Opensocial Hackathon Results!&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://paul.vox.com/library/photo/6a00b8ea067b33dece00e398d33adf0003.html&quot; title=&quot;Opensocial Hackathon Results!&quot;&gt;Opensocial Hackathon Results!&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/opensocial-hackathon-results.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00e398d331090004?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://paul.vox.com/tags/">mobile</category>    
        </item> 
 
        <item>
            <title>Tired</title>
            <link>http://paul.vox.com/library/post/tired.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/tired.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/tired.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 20 Dec 2007 16:56:27 -0800</pubDate>         
            
            <description>    &lt;p&gt;Why am I so tired?&lt;/p&gt;&lt;p&gt;Been working hard to implement features decribed here..:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;amp;newsId=20071220006153&amp;amp;newsLang=en&quot;&gt;hi5 Launches New Music Applications By iLike and Qloud &lt;/a&gt;&lt;/p&gt;&lt;p&gt;No more music royalties for hi5.&amp;#160; Cost center is now a profit center...&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/tired.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00e398ca41730005?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Tired</title>
            <link>http://paul.vox.com/library/post/tired-1.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/tired-1.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/tired-1.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 20 Dec 2007 16:56:27 -0800</pubDate>         
            
            <description>    &lt;p&gt;Why am I so tired?&lt;/p&gt;&lt;p&gt;Been working hard to implement features decribed here..:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;amp;newsId=20071220006153&amp;amp;newsLang=en&quot;&gt;hi5 Launches New Music Applications By iLike and Qloud &lt;/a&gt;&lt;/p&gt;&lt;p&gt;No more music royalties for hi5.&amp;#160; Cost center is now a profit center...&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/tired-1.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00e398ca3cdb0004?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Bugathon!</title>
            <link>http://paul.vox.com/library/post/bugathon.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Paul)</author>
            <comments>http://paul.vox.com/library/post/bugathon.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://paul.vox.com/library/post/bugathon.html?_c=feed-rss-full</guid> 
            <pubDate>Fri, 16 Nov 2007 15:40:26 -0800</pubDate>         
            
            <description>    &lt;p&gt;&amp;#39;nuff said...
    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00b8ea067b33dece00e398d322600001&quot; at:format=&quot;extra-large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-extra-large photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://paul.vox.com/library/photo/6a00b8ea067b33dece00e398d322600001.html&quot;&gt;&lt;img src=&quot;http://a0.vox.com/6a00b8ea067b33dece00e398d322600001-500pi&quot; alt=&quot;Bugathon!&quot; title=&quot;Bugathon!&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://paul.vox.com/library/photo/6a00b8ea067b33dece00e398d322600001.html&quot; title=&quot;Bugathon!&quot;&gt;Bugathon!&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://paul.vox.com/library/post/bugathon.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00b8ea067b33dece00e398d322640001?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://paul.vox.com/tags/">mobile</category>    
        </item> 
    </channel>
</rss>

