<?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/"
	>

<channel>
	<title>percious.com &#187; tgext</title>
	<atom:link href="http://percious.com/blog/archives/tag/tgext/feed" rel="self" type="application/rss+xml" />
	<link>http://percious.com/blog</link>
	<description>pythonic musings of a mountaineer</description>
	<lastBuildDate>Fri, 19 Nov 2010 22:50:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Coding Binge</title>
		<link>http://percious.com/blog/archives/18</link>
		<comments>http://percious.com/blog/archives/18#comments</comments>
		<pubDate>Tue, 27 Jan 2009 23:20:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQLAlchemy]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[Sprox]]></category>
		<category><![CDATA[Turbogears]]></category>
		<category><![CDATA[TwTools]]></category>
		<category><![CDATA[tgext]]></category>

		<guid isPermaLink="false">http://percious.com/blog/archives/18</guid>
		<description><![CDATA[            var so = new SWFObject(\\'http://showmedo.com/static/flv/flvplayer.swf\\',\\'mpl\\',\\'636\\',\\'496\\',\\'7\\');        so.addParam("allowfullscreen","true");        so.addVariable("enablejs","true");  so.addVariable("file","http://videos3.showmedo.com/ShowMeDos/pythonOzsvaldWingIDEIntro.flv");    so.addVariable("image","http://videos3.showmedo.com/ShowMeDos/screenshots/pythonOzsvaldWingIDEIntro.jpg");    so.write(\\'player\\');    
I haven&#8217;t written to the blog in a while.  [...]]]></description>
			<content:encoded><![CDATA[<p>    <script type="text/javascript">        var so = new SWFObject(\\'http://showmedo.com/static/flv/flvplayer.swf\\',\\'mpl\\',\\'636\\',\\'496\\',\\'7\\');        so.addParam("allowfullscreen","true");        so.addVariable("enablejs","true");  so.addVariable("file","http://videos3.showmedo.com/ShowMeDos/pythonOzsvaldWingIDEIntro.flv");    so.addVariable("image","http://videos3.showmedo.com/ShowMeDos/screenshots/pythonOzsvaldWingIDEIntro.jpg");    so.write(\\'player\\');    </script></p>
<p>I haven&#8217;t written to the blog in a while.  Quite frankly, I&#8217;ve been busy.  In the last 30 days, I have released 3 software new packages, updated 1, deprecated 1, participated in a sprint that lasted a virtual 2 weeks, closed countless tickets, and pushed forward TG2 functionality.</p>
<p>TG2b4 was released last Saturday.  This was mostly a bug-fix release, but b3 is where the new functionality really came into the scene.  TG2b3 is the first build to include <a href="http://sprox.org">Sprox</a>, a new library for schema-generated widget generation.  Sprox is the offspring of DBSprockets.  I decided I liked the declarative part of DBSprockets so much I wanted to spin it off as it&#8217;s own entity.  Sprox looses DBSprocket&#8217;s table-based dependency, utilizing the mapping provided by SQLAlchemy.  I realized that much of DBSprocket&#8217;s code was doing precisely what SQLSoup was designed to do, and decided to focus my efforts on making and extremely configurable widget base.  The result was a considerable removal of the cruft that was associated with DBSprockets.  Sprox releases with an excellent documentation base provided by Sphinx.</p>
<p>There has been a bit of resistance to Sprox, people were/are confused/upset about my providing yet more options for schema based widget generation.  The fact is I have yet to find anything that performs as well as Sprox from a developer/speed standpoint, and I needed to provide our TurboGears user base with a better way to administrate their site, and also allow them to use that tool component-wise in their system.  I think this method for developing widgets is well done in other frameworks, and we need a solid answer to this problem.  <a href="http://sprox.org">Sprox</a> is just that.</p>
<p>The next step was to re-work Catwalk to use Sprox.  This took a little effort, and I put in RESTful URLs while I was at it, but struggled with making the URLs work within TG2&#8217;s dispatch system.  The result was as close to REST as you can get without conforming to a set <a href="http://microformats.org/wiki/rest/urls">standard</a>.</p>
<p>The result of hacking REST into Catwalk got me thinking, and I decided to implement content-type dispatch as well as RESTful dipatch in TG2.  I went back for another round on Catwalk, and converted it over to the standard.</p>
<p>I&#8217;ve also been toying around with <a href="http://www.dojotoolkit.org">Dojo</a> at NREL.  I&#8217;m pretty much done with ExtJS due to licensing issues, a not-so-hot codebase, and weak support from IRC.  It&#8217;s bad when you go on to ask a question on the channel as a 6 month-user of a software project and end up spending all your time answering everyone else&#8217;s questions (as the most experienced person in the room).  Something must be said for an organization that does not push paid consulting as a primary focus on their website&#8230;  #dojo has been an exceptional resource for getting my work done.  Those guys know their software, and lend a great hand to help you with it.</p>
<p>Back to the topic at hand&#8230; I was able to shoe-horn Dojo into Sprox with little effort, and implemented DojoCatwalk, which worked, but was ultimately not what I wanted.  What I really wanted was configurability.  I started work on tgext.admin, which was supposed to provide enough functionality to replace tgcrud, a command to auto-create crud in your own TG application.  To support <a href="http://http://www.turbogears.org/2.0/docs/main/Extensions/Admin/index.html?highlight=configuration">tgext.admin</a>, I created a new package called tgext.crud, which provided a <a href="http://code.google.com/p/tgtools/source/browse/projects/tgext.crud/trunk/tgext/crud/controller.py">CrudRestController</a>, which is a simple way of providing crud for any object in your model.  AdminController combines this functionality with that of Mark&#8217;s <a href="http://www.turbogears.org/2.0/docs/main/Controllers.html?highlight=lookup">lookup</a> code to provide a fast, configurable set of tables/forms/etc for all objects in your model.  AdminController takes a declarative AdminConfig as input which provides a consistent way to create your administrative toolset.  Did I mention it does Dojo tables with ajax loading?  Yeah.</p>
<p>I&#8217;m not done with this binge yet.  Catwalk is going to mutate one more time before I&#8217;m through with it.  It is going to become a default-configured AdminController specifically designed to work within the context of a quickstarted TG2 application.  I had one blocker ticket which was solved last weekend, so it&#8217;s time to get Catwalk good and finished.</p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/18/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

