<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Esoteric Curio - BWPUG</title>
    <link>http://lethargy.org/~jesus/</link>
    <description>Theo's Contributions to Technological Surreality</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <pubDate>Tue, 29 Dec 2009 09:15:15 GMT</pubDate>

    <image>
        <url>http://lethargy.org/~jesus/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Esoteric Curio - BWPUG - Theo's Contributions to Technological Surreality</title>
        <link>http://lethargy.org/~jesus/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Asynchronous PostgreSQL Candy</title>
    <link>http://lethargy.org/~jesus/writes/asynchronous-postgresql-candy</link>
            <category>BWPUG</category>
            <category>Damaged Bits</category>
            <category>OpenSolaris</category>
            <category>PostgreSQL</category>
    
    <comments>http://lethargy.org/~jesus/writes/asynchronous-postgresql-candy#comments</comments>
    <wfw:comment>http://lethargy.org/~jesus/wfwcomment.php?cid=170</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://lethargy.org/~jesus/rss.php?version=2.0&amp;type=comments&amp;cid=170</wfw:commentRss>
    

    <author>nospam@example.com (Theo Schlossnagle)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve put the first (intended) use of the &lt;a href=&quot;http://labs.omniti.com/trac/pgsoltools/browser/trunk/contrib/pg_amqp&quot;&gt;pg_amqp&lt;/a&gt; setup to the test.  So far I&#039;m very pleased.  While none of the code for the usage is open source the real &quot;magic sauce&quot; is open and has had a few bug fixes and bits of robustness added since I last posted. I can, however, describe the use and let your imagination run while.&lt;/p&gt;

&lt;p&gt;The parts: &lt;a href=&quot;http://www.postgresql.org/&quot;&gt;PostgreSQL&lt;/a&gt;, &lt;a href=&quot;http://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt;, and a bit of Java around &lt;a href=&quot;http://lucene.apache.org&quot;&gt;Lucene&lt;/a&gt;.  Our java program actually uses &lt;a href=&quot;http://www.mortbay.org/jetty/&quot;&gt;jetty&lt;/a&gt; to expose a tiny servlet that accepts search queries and returns json results making AJAX-style searches easy and fast.&lt;/p&gt;

&lt;p&gt;The obvious question we all face in these sort of configurations is &quot;how do keep our search indexes up-to-date?&quot;  Usually, we relax constraints (wisely so) and determine exactly &quot;how up-to-date does out index needs to be.&quot;  If you can answer this question with a number sufficiently far from zero, you&#039;ve won.  In our situation, the user experience must be able to search and find the updated items in database via search immediately after insert or update (within a 100ms or so).&lt;/p&gt;

&lt;p&gt;Enter message queueing.  The first thing we do is make our Java process connect to RabbitMQ, bind a queue and consume.  The messages it consumes from the queue have instructions on the precise element that has changed which then causes an query against the database retrieving all the new data to be reindexed (in our case, it is much more than can be easily witnessed from a trigger on update) and updates the Lucene indexes.&lt;/p&gt;

&lt;p&gt;The second updated we made is to PostgreSQL by installing pg_amqp.  On the tables whose changes should induce reindexing, we add a (or augment the existing) trigger to call: amqp.publish(&#039;amq.direct&#039;, &#039;searchstuff&#039;, E&#039;reindex\t&#039; || NEW.rowid).  Assuming we have a column called rowid, this will queue a message that looks like &quot;reindex&amp;lt;tab&amp;gt;328432&quot;&lt;/p&gt;

&lt;p&gt;The neat part is that if the update is rolled back in the database, the message is never sent.  Otherwise, we see the message from the our indexing and search app and viola.&lt;/p&gt;

&lt;p&gt;I think this technique is really useful for people that are currently leveraging Lucene-based systems to provide powerful search functionality yet keep their data safe and secure in PostgreSQL.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 27 Dec 2009 13:49:32 -0500</pubDate>
    <guid isPermaLink="false">http://lethargy.org/~jesus/writes/170</guid>
    
</item>
<item>
    <title>Make the web a faster place.  Pretty please.</title>
    <link>http://lethargy.org/~jesus/writes/make-the-web-a-faster-place-pretty-please</link>
            <category>BWPUG</category>
            <category>Damaged Bits</category>
            <category>OpenSolaris</category>
            <category>PostgreSQL</category>
    
    <comments>http://lethargy.org/~jesus/writes/make-the-web-a-faster-place-pretty-please#comments</comments>
    <wfw:comment>http://lethargy.org/~jesus/wfwcomment.php?cid=157</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://lethargy.org/~jesus/rss.php?version=2.0&amp;type=comments&amp;cid=157</wfw:commentRss>
    

    <author>nospam@example.com (Theo Schlossnagle)</author>
    <content:encoded>
    &lt;p&gt;Call to action!  Make the web a faster place!  Here&#039;s a short &lt;a href=&quot;http://omniti.com/seeds/yslow-to-yfast-in-45-minutes&quot;&gt;article on how I spent 45 minutes to improve user-perceived performance&lt;/a&gt; on &lt;a href=&quot;http://omniti.com/&quot;&gt;our website&lt;/a&gt;.  This is the low-hanging fruit of front-end web performance optimizations.&lt;/p&gt;

&lt;p&gt;Most of you who read my blog are scalability or performance nuts.  Most of you also cast the majority of your focus (like me) on the back-end infrastructure problems.  Don&#039;t ignore the front-end when just a tiny bit of work can remove a huge amount of suck.&lt;/p&gt;

&lt;p&gt;If everyone takes these steps, the web will be a more enjoyable place to visit.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 07 Jul 2009 10:36:59 -0400</pubDate>
    <guid isPermaLink="false">http://lethargy.org/~jesus/writes/157</guid>
    
</item>
<item>
    <title>Feb 2009 BWPUG Meeting: Stephen Frost, Column Level Permissions</title>
    <link>http://lethargy.org/~jesus/writes/feb-2009-bwpug-meeting-stephen-frost-column-level-permissions</link>
            <category>BWPUG</category>
    
    <comments>http://lethargy.org/~jesus/writes/feb-2009-bwpug-meeting-stephen-frost-column-level-permissions#comments</comments>
    <wfw:comment>http://lethargy.org/~jesus/wfwcomment.php?cid=142</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://lethargy.org/~jesus/rss.php?version=2.0&amp;type=comments&amp;cid=142</wfw:commentRss>
    

    <author>nospam@example.com (Theo Schlossnagle)</author>
    <content:encoded>
    &lt;p&gt;Robert Treat was kind enough to coordinate the next BWPUG meeting.  Here are his words, be there or be square!&lt;/p&gt;

&lt;p&gt;UPDATED: the date of the meeting is 2009-02-09.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Welcome back everyone!&lt;/p&gt;

&lt;p&gt;The last few months have been a busy time for everyone, but it&#039;s time to get 
focused again and get meeting again. To that end, for the BWPUG February 
meeting, we have lined up Stephen Frost to give a talk on Column Level 
Permissions in Postgres. Column level permissions are a new feature that 
Stephen authored which was recently committed into Postgres and will be 
available in the upcoming Postgres 8.4 release.&lt;/p&gt;

&lt;p&gt;Stephen Frost is a Principal with Noblis, Inc., a non-profit organization 
working in the public interest supporting local, state, and federal 
Government. His work includes system architecture, system design, 
programming, unix administration, database administration, and management of 
the Noblis Innovation and Collaboration Center Computing Resources. As a 
PostgreSQL contributor, Stephen implemented roles support in 8.1 to replace 
the existing user/group system, and SQL column-level privileges in 8.4. As a 
PostGIS contributor and committer, Stephen updated the TIGER Geocoder for 
TIGER/Line and will be introducing a new version which works with the 
TIGER/Shapefile data at PGCon 2009.&lt;/p&gt;

&lt;p&gt;Oh, and as a reminder, meetings are held at OmniTI world headquarters in 
Columbia, Maryland (http://omniti.com/is/here for details). We&#039;ll look to 
start around 6:30PM, and we&#039;ll have pizza and drinks available. We look 
forward to seeing everyone again.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Thu, 29 Jan 2009 12:42:15 -0500</pubDate>
    <guid isPermaLink="false">http://lethargy.org/~jesus/writes/142</guid>
    
</item>

</channel>
</rss>