<div class="post">
    <div class="postMeta"><span class="date">No articles</span></div>
    <h2>Welcome to Bloog</h2>
    <div class="entry">
    <p>This is the default root page for Bloog, a simple RESTful blog/homepage on Google AppEngine, and
        shows what it looks like out of the box with no posts or pages.  You can see 
        <a href="http://www.billkatz.com">a Bloog with data here</a> or what Bloog likes like
        <a href="http://billkatz-test2.appspot.com">out of the box</a>.</p>
    <p>Bloog is open sourced under the MIT License.
       Source code can be found on the <a href="http://github.com/DocSavage/bloog">GitHub Bloog repository</a>.
       Git allows you to easily customize the base app while later merging changes from the main repository
       (see <a href="http://github.com/DocSavage/bloog/wikis">here</a>).</p>
    <p>If you are old school and prefer a tarball of code, 
        <a href="http://github.com/docsavage/bloog/tarball/master">click here</a>.</p>
    <p>Bloog includes the following features:</p>
    <ul>
        <li>A resource-oriented architecture, as described in the great book
            <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0596529260/writertopia-20">RESTful Web Services</a></li>
        <li>A <a href="http://www.drupal.org">Drupal</a> converter/uploader that queries a local MySQL database 
            and uploads the data to a Bloog through REST calls.</li>
        <li>A datastore deletion utility that can clear out your entities in your Bloog's datastore.</li>
        <li>Arbitrary URL aliases, which can be created by the drupal uploader, that provide redirection from legacy urls.
            There's also a programmatic aliasing function that can take a regex like <code>'node/(.*)'</code> and map it to legacy IDs
            stored with the blog entries.  (http://foo.com/node/4 is a typical Drupal url.)</li>
        <li>A <a href="http://developer.yahoo.com/yui">Yahoo UI</a> 
            AJAX front-end for posting and managing entries in a RESTful way.</li>
        <li>Easy code syntax highlighting for a number of programming languages.</li>
        <li>Sanitization of incoming HTML via Beautiful Soup parsing.</li>
        <li>Some modularization of look-and-feel so you can more easily
            modify the theme without yanking too much code apart (I hope).</li>
        <li>Dynamic per-article sidebars. (in progress)</li>
    </ul>
    <p>From an AppEngine developer's perspective, you may find the source code a reasonable starting framework
       on which you can build your own application.  Points of coding interest include:</p>
    <ul>
        <li>RESTful design using webapp.  Accepts http verbs via overloaded POSTs 
            using _method or X-HTTP-Method-Override headers.  Simple urls provide
            a uniform interface with standard verbs.</li>
        <li>Convention-over-configuration in organizing controller and view files.</li>
        <li>Authorization using python decorators and built-in Google authentication.</li>
        <li>Caching using the memcached API and also some timing caching using global variables.</li>
        <li>JSON serialization for db.Model.</li>
        <li>Sharded counters to decrease write contentions.</li>
        <li>Integrated python shell using one of Google's example apps.
            This provides a command-line console even when running on Google's App Engine cloud.</li>
        <li>Serialization of a python object into a datastore blob.</li>
        <li>An example of full-text searching using an extended version of the appengine.ext.search module.
            Extensions include ways of limiting indexed properties.</li>
    </ul>
    <p>If your login has administrative permission for this Bloog, you can add articles after 
        <a href="{{ login_url }}">login</a>.</p>
    </div>
</div>
