<?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; Software</title>
	<atom:link href="http://percious.com/blog/archives/category/software/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>Sprint Organization: But can we do more?</title>
		<link>http://percious.com/blog/archives/62</link>
		<comments>http://percious.com/blog/archives/62#comments</comments>
		<pubDate>Wed, 14 Oct 2009 06:43:31 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[Turbogears]]></category>

		<guid isPermaLink="false">http://percious.com/blog/?p=62</guid>
		<description><![CDATA[ 
The ultimate sprint incentive would be for companies to put up a bounty to fix bugs, or otherwise provide support for an open source project.  This is the toughest thing to sell I think, but if Google can do it, why can’t other organizations?  I have seen this attempted in the past with mixed [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">The ultimate sprint incentive would be for companies to put up a bounty to fix bugs, or otherwise provide support for an open source project.  This is the toughest thing to sell I think, but if Google <a href="http://code.google.com/opensource/ghop/2007-8/"><span style="text-decoration: underline;">can</span></a> do <a href="http://code.google.com/soc/"><span style="text-decoration: underline;">it</span></a>, why can’t other organizations?  I have seen this attempted in the past with <a href="http://trac.turbogears.org/query?keywords=~develix&amp;order=priority"><span style="text-decoration: underline;">mixed</span></a> results.  I think it was a half baked idea, and that we can do better than that.  The challenge is metrics, and making sure that everyone gets their fair share.  I mean, at that point, sprinting becomes payment for work done, the sprinters are just hired guns for a weekend.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><img class="reflect alignright" src="http://farm2.static.flickr.com/1376/1254095605_11be07b3de.jpg" alt="Autograph by kugelfish." width="217" height="300" /><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">I think the challenge has been, and will always be metrics.  How do you measure the work and who did it, and how much is each thing done worth?  I think the sprint organizer is the greatest asset in this situation.  He usually has the best idea about what needs to be done, what has been done, and ultimately who did what quantity/quality of work.  So you can use him as your metric definer.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">My idea is this:  A sponsoring company provides the OSS organization with a certain amount of money, and what they would like to see achieved in an organized sprint.  This money is given to the organization as a donation regardless of the outcome of the sprint.  The donation may also be given to the organization with no stipulation of task, but the sprint organizer must choose a topic of interest in order to guide the sprint.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">The sprinters all agree to a set method for dissemination of funding provided by the sponsoring organization.  My suggestion would be to split all of the funding equally, but in a capitalist nation, it is hard to justify giving the same funding for a person who did a little work on a piece of documentation vs. someone who spent 40 hours putting together a full tutorial.  Another method would be to allow the sprint organizer to disseminate the funding as he sees fit, but the sprinters would have to agree to this before work is started.  The work would have to be completed by a certain deadline to obtain the funding, because project organizers do not have time to track down who did what 4 months after the fact, it’s just not practical.  Finishing a week after a weekend sprint seems reasonable to me.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">I am sure to see lots of comments about these ideas because when money gets involved, everyone gets uppity. (one of the great ideas behind OSS is that there is no money paid for the actual software)</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">So, there exists possibilities for setting up a sort of Round-up style sprint.  The goal is to provide sprinters incentive for providing bug fixes, or even to document a part of the code that is otherwise hard to get anyone to document.  I would love to open a discussion about this topic, as I see it as a completely different business model when it comes to software development.</span></p>
<p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px;"><img class="alignleft" src="http://www.ideachampions.com/weblogs/google-logo.jpg" alt="google-logo.jpg" width="270" height="108" /><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">But you have to ask yourself, “What’s in it for the company?”  Well, first I think you have to ask yourself why Google has been running programs where they pay for OSS development, no questions asked, for 5 years now.  But here are some insights while you ponder that.  The easiest reason to understand is that the sponsoring company has some bugs in OSS software they use that they need fixed, and a team of experts can fix them in a weekend, or their staff can submit bug fixes, go through the rigamarole of OSS contribution, and things get done in months.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">The next less obvious reason for a company to provide funding for a sprint is that they are using OSS software that could use a little help in the documentation department.  By paying for documentation, they are getting a cut-rate deal on the experts that usually created the software providing documentation for those things that may be crucial to their business’s success.  This also reduces their dependency on any one employee who may have in-depth knowledge on a particular software package.  By ensuring the OSS software that the company uses is well documented, the company ensures that the intellectual know-how for that piece of software remains with the project, not with the employee that may <a href="http://livepage.apple.com/"><span style="text-decoration: underline;">leave</span></a> at some later date.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">The last simple reason I can think for a company to sponsor OSS is for recruiting reasons.  Typically the people involved in the sprinting process are the ones that know the most about it.  It is also be a chance to evaluate an employees enthusiasm for work in general.  Those who are sprinters are more likely to work well with others and stay with projects for the long haul, in my experience.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">If software development is described as herding cats, gathering and directing sprinters is like herding <em>stray</em> cats.  I once had a stray cat visit me when I was in my potato-tuna days, and I gave it some of my tuna, because it looked in worse shape than was I.  And you know what, that cat always returned for the tuna.  Now, I’m not much of a cat person (current cat count: zero) but I think that if software developers are truly analogous to cats, they might show up at your door once, but it’s much easier to get them to come and visit regularly if you give them some tuna once in a while.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/62/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A TurboGears Weekend in review</title>
		<link>http://percious.com/blog/archives/70</link>
		<comments>http://percious.com/blog/archives/70#comments</comments>
		<pubDate>Mon, 12 Oct 2009 02:07:48 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Turbogears]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[WorkShop]]></category>

		<guid isPermaLink="false">http://percious.com/blog/?p=70</guid>
		<description><![CDATA[A few weeks ago the Front Range Pythoneers decided to organize an &#8220;Uncon&#8221; where people show up to discuss various topics on-the-spot.  This is the sort of event I really enjoy participating in, so I of course agreed to attend.  At the same time, I was approached by the guys from Developer Day to do [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago the <a href="http://www.meetup.com/frpythoneers/">Front Range Pythoneers</a> decided to organize an &#8220;Uncon&#8221; where people show up to discuss various topics on-the-spot.  This is the sort of event I really enjoy participating in, so I of course agreed to attend.  At the same time, I was approached by the guys from <a href="http://www.developer-day.com">Developer Day</a> to do a talk on TurboGears.  You can imagine the conundrum I faced, but thanks to the willingness of the DD organizers to be flexible, and some creative planning, I was able to participate in both.</p>
<p><img class="alignright" style="-webkit-user-select: none;" src="http://developer-day.com/images/events-nav-boulder.jpg" alt="" width="189" height="339" />Speaking at Developer Day was a new experience for me because I was talking to folks that were not necessarily versed in Python,never-mind TurboGears.  The conference appeared to be somewhat Rails heavy, but it was refreshing to see organizers reaching out to the greater web community to provide a well rounded conference.  The nice thing about speaking to a wider audience was that I was able to expound some of the history of the Python web, as well as describe TurboGears at a high level without worrying about boring the audience.  I was quite nervous speaking at first, because I have not done so in a few months, but seemed to settle into a groove by the time I showed an example of how easy it is to inject <a href="http://pypi.python.org/pypi/repoze.profile">repoze.profile</a> into a TG application and provide a cachegrind display to find any slowdowns in your app.  I hope that this example was able to express how versatile <a href="http://wsgi.org">WSGI</a> is.</p>
<p>I stayed the morning at DevDay and I am glad that I did.  Chad Fowler gave an address on what it means to remain passionate as a developer over the life of your career.  I think his idea that providing structure to your life definitely allows you to achieve amazing things.  His real-life examples were poignant and well received.  I&#8217;ll be checking out his<a href="http://oreilly.com/catalog/9781934356340"> book</a> soon.  The other talk that I found interesting was Jeremy Hinegardner&#8217;s talk which basically discussed the numerous non-relational persistence methods available.  I thought his method for showing examples of the different methods was great. For each one he had a simple succinct example that showed the  benefits for the given persistence framework.  He allowed the audience to choose from the frameworks he discussed in his talk.  Jeremy was an engaging speaker, and I would not hesitate to sit in on one of his talks in the future.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;">
<p><img class="reflect alignleft" src="http://farm4.static.flickr.com/3536/3823502097_6c5c85bacf.jpg" alt="Google in Boulder, CO by krossbow." width="300" height="225" />After a bit of DD-provided <a href="http://www.beaujos.com/">BeauJos</a>, I headed over to the UnCon.  They too were having pizza provided by Google.  Google Boulder was a great sized venue for the 40 people that attended.  It was exciting to see so many new faces in attendance.  It seemed to me that the &#8220;regulars&#8221; were doing a lot of demoing, while the new folks watched on, but there was also a lot of discussion that happened.  I showed how to use repoze.profile and runsnakerun to</p>
<p><img class="alignright" src="http://photos4.meetupstatic.com/photos/event/b/f/2/event_11163058.jpeg" alt="" width="360" height="252" />analyze the results.   Zooko immediately installed runsnakerun and tried it on his app.  It is always nice to have immediate gratification for having taught someone something, even more so when the person voluntarily tries what you think is &#8220;so cool.&#8221;  I got to show off some of the work I am doing for www.getmvp.com, since much of it is prototypical of the Extension Solution that I hope to provide with a combination of Pylons and TG.  Also on display was TW2.  It was great to show how simply one could express all MVC elements of a widget in one complete package.</p>
<p>Sunday I ran the first TurboGears WorkShop.  If you follow my blog, you may have read a few posts about how I think we can improve sprinting, but I&#8217;ve come to the realization that our less-than-stellar sprint performance is really due to a need for improvement in the organization at large.  I have decided to add a WorkShop Series to our tireless effort for improvement of TurboGears, both from a technical aspect, and one of the community.  I was up late on Wednesday creating a basic tutorial-type plan for Sunday, and I finished up with about 80 pages of documentation to provide workshop goers, basically by selecting items from the TurboGears <a href="http://www.turbogears.org/2.1/docs/index.html">documentation</a>.  My goal for the sprint was to provide sprinters with a working example of TG at the end of the day, with a little bit of work accomplished customizing the <a href="http://www.turbogears.org/2.1/docs/main/Extensions/Admin/index.html">Admin</a>.  I asked sprinters to bring their own databases, to utilize <a href="http://www.turbogears.org/2.1/docs/main/Utilities/sqlautocode.html">sqlautocode</a> as an example database for their new application, and while no one provided the class with one, we were still able to succeed with one that I provided as a backup.  5/6 people succeeded in this, and while there were some rough edges, I think I have an idea that is workable for a 3-6 hour WorkShop that will succeed with a little bit of polish.</p>
<p>I am still formulating the ideas for TurboGears workshops.  I have started to contact folks I know throughout the country, in order to provide venues for these workshops.  So far I have Boston, Dallas, San Fancisco, Atlanta, and Boulder (Denver) lined up.  I think with little effort, I could also add Ann Arbor, and probably Washington D.C.  The idea behind a workshop is that you arrive with a varying amount of knowledge in TG, and you leave with a greater knowledge than you arrived with.  You are encouraged to bring an existing project to hack upon, or to create a new one that we can play with.  I will provide a rough outline of what we might do in the tutorial, but if the group decides to go off in a different direction, that&#8217;s okay too.  If you are interested in participating in one of these WorkShops as a mentor, or providing venue space, accommodations, etc. I would love to hear from you.  Right now I am in the organization phase, expect a blog post announcing the official plan in the near future.</p>
<p>Thanks!  Without the efforts of a number of individuals this weekend would have been much less successful than it actually was.  I want to thank Ben Scofield for inviting me to talk at developer day, and for shuffling the schedule so I could participate in both conferences.  Greg Holling put in a great effort to organize the Uncon, and Google provided an awesome venue for us to use.  Three volunteers from Google Boulder provided their time, and even gave a tour of the facility to conference goers.  They weren&#8217;t even Python developers&#8230;  Jim Baker and Matt Boersma both showed up to provide access to Bivio so that we could have our first-ever TG WorkShop.  Lastly, I&#8217;d like to thank Bruce Eckel for making the trip down from the mountains to provide his unique perspective.</p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/70/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Sprint Organization: New Rules!</title>
		<link>http://percious.com/blog/archives/53</link>
		<comments>http://percious.com/blog/archives/53#comments</comments>
		<pubDate>Thu, 08 Oct 2009 03:11:46 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://percious.com/blog/?p=53</guid>
		<description><![CDATA[I’ve been thinking out how we can come up with new methods to make our sprinting time more productive.  In the first two segments, I went over what our current thinking about how a sprint should run and what is expected of organizers and sprinters alike.  We see that sprinting is somehow broken, because people [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">I’ve been thinking out how we can come up with new methods to make our sprinting time more productive.  In the first two segments, I went over wha<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><span style="font-family: Helvetica, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: normal; font-size: 12px;">t our current thinking about how a sprint should run and what is expected of organizers and sprinters alike.  We see that sprinting is somehow broken, because people lack motivation to sprint,</span></span></span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;"> except the folks that rise to the level of elders.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">All is lost with sprinting however.  I think that there are a few things that </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">we can do to make sprinting more productive.  The challenge is that you can’t just make rules and expect sprinters to respond.  You can</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">’t say, “don’t show up without knowing what you are doing,” or we will lose valuable input from the community, since only elders will show up at that point.  So, the new rules are for organizers, and the elders, not the would-be sprinters.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p><img class="reflect alignright" src="http://farm1.static.flickr.com/175/417525369_f59e8d1b30.jpg" alt="My First Day Teaching (2) by akeg." width="350" height="263" /></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">Organizers need to start offering <a href="http://www.meetup.com/frpythoneers/calendar/11298645/">free tutorials</a> for folks interested in the projects.  This accomplishes two things.  First, you give training to the people that are interested in your project without alienating them.  It would be easy to say “New Rule! You must have done the 20-minute-wiki tutorial to participate in the sprint.”  But this tactic does nothing to help the feeling that people have when they call something elitist.  While you might think it’s not elitist to have accomplished the 20-minute-wiki, someone else might struggle for hours with that task, especially if the documentation is not up to snuff.  These contributors still offer valuable insight, and you want them contributing to your project.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">The second reason free tutorials will help your project is that it gives you an opportunity to increase the popularity of your project.  The more people that are interested in your way of doing things, the more potential sprinters you have.  At the end of the tutorial, you can collect emails or instant message handles, even phone numbers if that is what it takes to grow a list of perspective sprinters.  If you are willing to be generous with your time, maybe 1 out of 10 tutorial goers will be willing to return the favor.  The tutorial would also allow you to open up a method for communication.  Consider setting up an IRC (Internet Relay Chat) channel for your sprint, or using your project’s IRC channel to disseminate information about the sprint.  This will show folks on IRC that you are not only doing a a tutorial (maybe you will get some online participation) but it will show tutorial goers that the channel exists for further assistance.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">The free tutorial is a great way to provide a service that costs nothing more than time for the organizer.  However, I don’t think this is the limit of what we can provide sprinters for their time.  What we need to do is provide some sort of incentive other than the good of human kind to sprinters.  The first thing is probably the easiest.  Start holding sprints on a friday, or any weekday for that matter.  This seems counterintuitive, right?  The fact is, most people don’t want to take a weekend day off because they are busy with other weekend stuff.  We all have families, clubs, interests outside of OSS software that we need to tend to.  Also, this provides a monetary benefit to the project without actually costing the project anything.  Many companies which use OSS software, and claim to support it will also be willing to let their employee take a day, or a 1/2 day to participate in a sprint.  The way you sell this idea is</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;"> to have the sprinters describe the hands-on and in-depth training they will be receiving in the care of the sprint.  This is no lie, the amount you can learn in an average sprinting day far exceeds the amount you receive on a regular basis.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p><img class="reflect alignright" src="http://farm3.static.flickr.com/2337/2173849201_e74e20891d.jpg" alt="Palm trees at the beach by Ed Yourdon." width="234" height="350" /></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">Hold sprints in a <a href="http://www.alohaonrails.com/">unique location</a>.  Lots of people like to ski.  For this reason zope/plone’s <a href="http://www.coactivate.org/projects/tahoe-snow-sprint-2010/project-home">snow sprint </a>is very popular.  I think the reason this sprint is made possible is that people need to take a break from the every day, and getting to a new an exciting place has merit, both from a coding perspective, and a mental aptitude one.  It so happens that I live in Colorado, which is one of the premier places in the US to ski.  If anyone is interested in organizing a sprint nearby, I urge them to speak up.  Also, I would be willing to provide a free tutorial on a weekday, so that hourly employees may be able to justify the cost of a trip to Colorado as an offset to the cost of free training.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">It seems to me that the scope of a sprint is essential to it’s success.  If the sprint is just to code <em>something</em>, it is much less likely to succeed than if you are to sprint on something in particular.  Having everyone making a concerted effort on one topic makes it easier for organizers to coordinate folks, because organization can focus on one thing, and therefore tasks can be created ahead of time instead of doing so when everyone shows up.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px;"><span style="letter-spacing: 0.0px;"> </span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">Lastly, I think we need to reach out to the community of users, and find out if users of your project can support the OSS efforts of the tools they use.  I think that the next logical step is to provide sponsorship for sprints themselves.  Perhaps the sprint sponsor can provide a place to stay, or airfare to bring some of the sprinters together.  Even providing a venue for the sprint, or beer and pizza is something, but it is hard to expect people to show up and spend their time and also their own money to be co-located with a bunch of other sprinters.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica;"><span style="letter-spacing: 0.0px;">This is part two of a four part series on sprinting:  The next [controversial] post is called Sprint Organization: But can we do more ?  This will talk about how we might convince third parties to participate in the concept of sprinting by asking them to donate monetarily.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/53/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>TG’s Killer Features:  SQLAlchemy. Obvious, no?</title>
		<link>http://percious.com/blog/archives/34</link>
		<comments>http://percious.com/blog/archives/34#comments</comments>
		<pubDate>Tue, 29 Sep 2009 04:39:11 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Turbogears]]></category>

		<guid isPermaLink="false">http://percious.com/blog/archives/34</guid>
		<description><![CDATA[So, as I stated in a previous entry, I’ve been using SQLAlchemy for more than three years now.  If you know anything about me, you’d find it amazing that I have contributed little more than a patch here or there.  Why is that?  I think that’s because every time I try to find something that [...]]]></description>
			<content:encoded><![CDATA[<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px">So, as I stated in a previous entry, I’ve been using SQLAlchemy for more than three years now.  If you know anything about me, you’d find it amazing that I have contributed little more than a patch here or there.  Why is that?  I think that’s because every time I try to find something that I need SQLAlchemy to do, it already does it.  I have spent so little time trying to make SQLAlchemy do what I want it to do, and so _much_ time getting work done with it.<span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px">
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px">Here is a good example.  One o<span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: 16px; line-height: 20px"><span class="Apple-style-span" style="font-family: Helvetica, 'Times New Roman', Times, serif; font-size: 14px; line-height: normal"><img class="alignright" src="http://percious.com/static/images/blog/beakers.jpg" alt="http://www.flickr.com/photos/27342383@N07/3430321620/" width="250" align="right" />f my clients is a </span></span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px">company developing sports management software by the name of <a href="http://www.getmvp.com"><span style="text-decoration: underline;">MVP</span></a>.  Although I work on their next-gen stuff, I was called on by them to promote the students on the older system to the next grade over in the summer time.  Their database system had well over 40 tables, requiring no less then 10 of them to have modification.  I fired up sa, reflected the changes, wrote the changes in python, with simple loops around what records I needed to change, an it was done.  In one hour’s time I had a happy client, and a school system with a functioning system.  Two things about this are amazing.  1.  At the time, I had practically zilch in the Postgres experience department.  2. I only needed to learn the schema of the tables I was modifying, and I could do this with introspection.  The fact that I was able to do this task in less than an hour was only made possible by my knowledge of SQLAlchemy’s table-based architecture.  I did not need to know the nuances of Postgres’ SQL language (I was more familiar with MySQL at the time), or a in-depth knowledge of the database schema.  I was able to pick and prod until the job was done, and it was painless.</p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">I really like the fact that SQLAlchemy’s approach to making an ORM is layered.  I can drop to whatever layer I need to to meet the requirements of my project.  SQL, table objects, and mapped objects all have their place in the grand scheme of things, and I have used them all to varying degrees. What SQLAlchemy achieves with this layering is the ability to adapt to existing projects, schemas, etc, and make considerably useful software, in a short amount of time.  By figuring out the nuances of different SQL dialects, it frees me up to focus on the task at hand, and provide products to my clients that work in a broad range of situations.</span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">But this post is supposed to be about TurboGears, right?  For me, SQLAlchemy is more than a tool I use for TurboGears projects, or even web applications, it’s something I can use any time I have to access a relational database.  It is the ultimate base for writing tools that help me get my job done.  That job might be providing a system to allow schools to schedule matches against each other, or enabling scientists to access their data directly using objects at a python prompt, instead of assembling arcane sql strings to gather data.  SQLAlchemy is such a good basis in fact, that it makes building tools to help do my job even easier.</span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p><img class="alignleft" src="http://percious.com/static/images/blog/migrate.jpg" alt="http://www.flickr.com/photos/giantrebus/2864731590/" width="200" align="left" /></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">I have had the opportunity to contribute to <a href="http://code.google.com/p/sqlalchemy-migrate/"><span style="text-decoration: underline;">sqlalchemy-migrate</span></a>.  If you don’t know anything about the project, consider this:  You have a production database you cannot break.  You have 5 minutes downtime to modify the schema, update records, etc.  You need to be able to back out the changes and bring the system back up if everything breaks.  Migrate lets you do all of this, and provides a versioning system to ensure that such a process moves smoothly.  I have used migrate with postgres, found some rough edges and fixed them.  SA’s table mapping makes this possible, migrate just adds a layer to make versioning and some table creation processes easier.  I only hope that someday some of the migrate code makes it’s way back into the SA codebase.</span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">I do lots of testing.  I made numerous schema changes today to one of my databases at <a href="http://www.nrel.gov"><span style="text-decoration: underline;">www.nrel.gov</span></a> in fact.  I test the database schema for</span></p>
<p><img class="alignright" src="http://percious.com/static/images/blog/boot.jpg" alt="http://www.flickr.com/photos/6x7/322551650/" width="300" align="right" /></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px"> matching against my definitions with some yet-to-be-released software.  There are about 3000 tests.  With tables numbering in the fifty-semod, I needed something to make data entry easier for my tests.  I wrote <a href="http://pypi.python.org/pypi/bootalchemy/0.1.5"><span style="text-decoration: underline;">bootalchemy</span></a> to do this.  You pass it some YAML, and the models module, and it performs all the entries for you.  It does a bit of introspection to determine dates, and it has reference pointing so you can inter-connect your objects within your yaml (using &amp; and * like my old friend C).  This has vastly decreased the amount of time it takes me to create new test data for new tests.  Again, this is possible only with the framework that SA provides me.</span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">Lately I have been interested in providing a broader base of scientists at NREL access to their data using python as a medium.  Scientists (especially physicists) are really good at conceptualizing data.  They use crazy tools like Matlab, and R and all sorts of proprietary tools to manipulate their data.  They aren’t afraid of a command prompt.  My idea is to give them something like <a href="http://www.sagemath.org/"><span style="text-decoration: underline;">Sage</span></a>, but with direct access to their data as mapped objects.  I also want to be able to show up at a scientist’s desk with laptop in tow, connect to one of their existing databases, and spit out a admin-style web interface based on TG in a few minutes.  These notions have driven me to contribute <a href="http://www.turbogears.org/2.1/docs/main/Utilities/sqlautocode.html"><span style="text-decoration: underline;">sqlautocode</span></a>.  At this point sqlautocode will spew out a page (or 7) of python code that provides you with Declarative Objects and an interactive prompt.  sqlautocde works as a library, so you can use saautocode’s output to directly in memory without generating any code at all.  All this is possible with SA, and I don’t know of anything else that can do all of this.</span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">I have focused on the technical here, but beyone that is a great team of individuals like Mike Bayer and Jason Kirtland who put in long hours and answer questions promptly on the mailing list.  I often wonder how these guys get any sleep.  The thing that excites me most about SA is that it will soon release version 0.6, which to me means that these guys have 4 more versions of increased functionality before they consider it “done.”  So, as you can see, there is more to SA than just the ORM it provides.  It’s framework gives you freedom to expand your horizons and get your job done, by focusing it’s task on the challenges that relational databases all have, so you don’t have to.  This is what makes SA a killer feature of TG.</span></p>
<p style="font: normal normal normal 14px/normal Helvetica; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"> </span></p>
<p style="font: normal normal normal 14px/normal Helvetica; margin: 0px"><span style="letter-spacing: 0px">The third segment in this series is: TG’s Killer Feature: The Admin (Yes, We do, and it rocks)</span></p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/34/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Best of Breed: TG is still the best choice for people who hate hitting the wall.</title>
		<link>http://percious.com/blog/archives/32</link>
		<comments>http://percious.com/blog/archives/32#comments</comments>
		<pubDate>Mon, 21 Sep 2009 14:22:19 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprox]]></category>
		<category><![CDATA[Turbogears]]></category>

		<guid isPermaLink="false">http://percious.com/blog/archives/32</guid>
		<description><![CDATA[We get a lot of refugees who come to TG from other frameworks where they got themselves to a place they could not get out of.  I have worked with some of these frameworks in the past.  Things are awesome in the beginning.  You work on some less complex stuff, maybe change a template around, [...]]]></description>
			<content:encoded><![CDATA[<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">We get a lot of refugees who come to TG from other frameworks where they got themselves to a place they could not get out of.  I have worked with some of these frameworks in the past.  Things are awesome in the beginning.  You work on some less complex stuff, maybe change a template around, or the theme for a site.  Then you have some technical detail you need changed and BAM!  You just hit the wall.  Now you are forced to dig, or suck it  up and go on IRC and ask noob question.  Many times I find myself getting shut down, told to RTFM, or whatever.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">With TG I never really felt the wall.  TW was a bit of a hump to get over, but seriously, things are so un-coupled in TG that using a technology you are already familiar with, or swapping out the standard stack is not something totally unheard of.  I for one do not like working with Genshi.  I’ll do it, and I support it for major OSS work I do, but really I prefer Mako.  Mako is fast, works in a non-xml way (which makes it great for writing form-emails for instance).  What this means is that TG has good support for Mako in the “standardized” parts like the admin.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">The thing is, we really did not have to add much to TG to allow it to work with Mako.  I think one of the ingenious things that TG supports is dotted template lookup.  What this does is allow you to pull data from any package, because the lookup occurs using pkg_resources.  Beautiful, now we have the ability to move templates into their own succinct packages.  Also, we support non-dotted template lookup for template languages like Jinja, and adding support for dotted lookup wouldn’t be too hard to do in the future.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">The new TGAdmin interface is another example where hitting the wall is just not something that happens.  TGAdmin is built on new technologies for TG2.0.  Namely RestController, Sprox, and lookup.  It creates a custom controller for each of your model classes, and therefore you have a good place to start from when you get going with your application.  This is great for demoing.  With SQLAutocode, <a href="http://www.sprox.org">Sprox</a>, and TGAdmin you can literally hook into your client’s database (MySQL, Postgres, sqlite or MSSQL) and generate web forms where you can have an infinitely scrolling tableview, edit, and create forms.  From there you have the ability to customize further, by hiding table/form fields, changing the look and feel of any component in the chain.  This is made possible by Sprox’s configuration interface.  You can also modify the controller code for each model by adding controller methods to your default controller in the admin’s config object.  All of this customization is outlined in a <a href="http://turbogears.org/2.0/docs/main/Extensions/Admin/index.html">tutorial</a>.  </span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">The great thing with the new TGAdmin is that since it is based on Sprox, you can re-use the knowledge of sprox externally to the admin, and also bring any existing knowledge you may have about ToscaWidgets to the table.  You can even use sprox outside of TurboGears for any other python web-based applications that you have that also use SQLAlchemy (read: Pylons).</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">To get back to the TurboGears discussion, a lot of folks don’t want everything that TG brings to the table.  Some folks need different auth/auth models,  have no use for a widget library, or even a relational database connection.  TG can serve you too, and it’s still fast.  Recently SourceForge moved over to TG for their main website.  This requires a connection to MongoDB on the back end (read: no SQLAlchemy), zero ToscaWidgets, and a different authentication method.  According to Mark Ramm, they had started with a different framework which lends itself to the Jinja2 templating engine.  As far as I know, Mark was able to meet all of these goals, and eliminate 9/10ths of the server load they had with their previous system, written in something non-python.  This just goes to show how flexible TG was to be able to meet all of these needs, and still provide a technically sufficient solution.  Maybe he will comment more about this in the future.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">Now, there are those folks out there who have decided to role their own.  And WSGI definitely supports, if not encourages this behavior.  But I just have to ask:  Who’s agenda are you really fulfilling?  Even if people like your code and you have a small following, are you helping to further the benefits of your projects, or your career in general?  Are you helping your customer in the long run if you leave the project, or leaving them with a dead-end piece of code?  Will they be able to find someone to replace you, should you decide to leave?</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">TG has an active community of folks who are willing and able to help get your contributions into the main code branch.  We have embraced mercurial, and use it’s abilities to offer a lessened barrier for those who want to contribute.  So, please, before you go make your own framework, see if you can help us make TG better, and your reward is that you now have a community of folks that will help maintain your work, even if you decide not to.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">Basically what I am saying here is that TG has an even learning curve.  Sure, as you get more involved, the problems will get harder, but you wont end up having to re-write half of the framework just to get it to do what you want.  And, if you do find something that needs work to meet your needs, you have options to participate in the development of TG.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">In 2008 TurboGears ran a sprint series to flesh out the 2.0 release.  We successfully released in Spring of 2009, thanks to the hard work and dedication of a number of folks who saw the process through.  This was a great opportunity for folks who wanted to be actively involved with a web framework to jump in.  It is very likely in the coming months that TG 2.1 will see the same sort of community out-reach as we prepare to move from a development cycle, to a release one.  So, look forward to that, find out how you can contribute, and by all means, give us feedback as to what you really want from a Best of Breed framework.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/32/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Best of Breed: TurboGears is alive and breathing.  We are even thriving.</title>
		<link>http://percious.com/blog/archives/30</link>
		<comments>http://percious.com/blog/archives/30#comments</comments>
		<pubDate>Tue, 15 Sep 2009 22:45:13 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprox]]></category>
		<category><![CDATA[Turbogears]]></category>

		<guid isPermaLink="false">http://percious.com/blog/archives/30</guid>
		<description><![CDATA[I think a lot of people wonder what&#8217;s happened to TurboGears.  Where is TG going?  Where has it gone?  In a recent mailing list post, we were blasted for our documentation, or lack there-of.  People seem sort of frustrated that they have a great tool in TG2.0, but have to spend so much time isolating [...]]]></description>
			<content:encoded><![CDATA[<p style="font: normal normal normal 12px/normal Times; margin: 0px"><span class="Apple-style-span" style="font-family: Verdana, 'Times New Roman', Times, serif; font-size: 14px">I think a lot of people wonder what&#8217;s happened to TurboGears.  Where is TG going?  Where has it gone?  In a recent mailing list <a href="http://groups.google.com/group/turbogears/browse_thread/thread/b97ee4faeb6acd53/b8451a1aa175665c?q="><span style="text-decoration: underline">post</span></a>, we were blasted for our documentation, or lack there-of.  People seem sort of frustrated that they have a great tool in TG2.0, but have to spend so much time isolating their own technical problems that they fail to see that there is considerable documentation in most areas, but that the docs have a few sore spots here and there.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">2008 was all about making TG2 _work_.  We’re past that now.  Most things pretty much work, some things work really well.  Other things need some attention.  Now that we’ve got the hard part of actually  designing a functioning framework, we can focus on documentation, and using that valuable framework we have written to push the envelope of what TG can do.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">One of the “things” we need provide to the user community is better documentation.  In the past few weeks I have seen more drive in our community to improve the docs than ever before.  Michael Pedersen has taken over responsibility for our documentation.  I cannot thank him enough for his work, both in reviewing, reorganizing, adding to, and fixing errors in our existing documentation.  His kind of no-sacrifices attitude towards the docs means that we won’t just have “something” up there, we will have what it takes for developers to create web applications using TurboGears.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">ToscaWidgets is a sore spot for a lot of folks.  I feel your pain.  Lot’s of folks say you don’t really need TW to do what it does because you are just creating HTML forms, what is so hard about that.  Well, I’ll tell you that I could not have written Sprox without it’s flexibility.  Here’s the good news: TW has been re-written from the ground up by Paul Johnston in the past few months.  I’ve been helping in this process, providing the tests that will make it more stable than the previous version, and making sure the codebase is not so complex a feeble mind like my own cannot comprehend it.  I spent some time benchmarking it, and making sure it’s as fast as it can be.   TW2 is 2x as fast as TW.  It approaches the speed of simpler frameworks that _only_ produce html (they don’t do resource injection, parameter cascading, etc.)</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">On other fronts, Jorge Vargas and I have been working on integrating MongoDB with Sprox.  This will become the “killer app” for sprox 0.7.  For me, this represents proof of concept for Sprox.  We have successfully integrated the basic workings of MongoDB into Sprox, which means I generalized in the right places enough for this to work.  The result is a TG Admin that will work for MongoDB or for SQLAlchemy equally.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">So yeah, there’s still a lot of activity on the TG front, and if you pop into IRC you can feel free to chat up at least one of the TG dev team at almost any hour.  Also, we are having a <a href="http://groups.google.com/group/turbogears-trunk/browse_thread/thread/8cc487894a9379d"><span style="text-decoration: underline">DocSprint</span></a> Sept. 25-27 (with a main emphasis on Sept. 26), in Boulder, CO and worldwide remotely.  We will be addressing the over 100 todo items that Michael has so graciously gathered for us.</span></p>
<p style="font: normal normal normal 14px/normal Verdana; min-height: 17px; margin: 0px"><span style="letter-spacing: 0px"></span></p>
<p style="font: normal normal normal 14px/normal Verdana; margin: 0px"><span style="letter-spacing: 0px">This is the first part in a 3 part serious on TurboGears.  The next part is entitled: “TG’s Job is hard.  Here’s why.” which will discuss various philosophical challenges with running a project like TurboGears.</span></p>
<p><font size="4" face="Verdana, 'Times New Roman', Times, serif" class="Apple-style-span"><span style="font-size: 14px" class="Apple-style-span"></span></font></p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/30/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Pycon 2009</title>
		<link>http://percious.com/blog/archives/27</link>
		<comments>http://percious.com/blog/archives/27#comments</comments>
		<pubDate>Wed, 04 Feb 2009 23:33:42 +0000</pubDate>
		<dc:creator>percious</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQLAlchemy]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[Sprox]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Turbogears]]></category>
		<category><![CDATA[grok]]></category>
		<category><![CDATA[nose]]></category>
		<category><![CDATA[nosetests]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[tg2]]></category>
		<category><![CDATA[toscawidgets]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://percious.com/blog/archives/27</guid>
		<description><![CDATA[
So, Pycon registration has been up for a few days, I will be speaking both on and off-podium (read: open space) and providing assistance to and presenting tutorials.  Here is a run down of what I am planning in case you wanted a little bit more in-depth information.
Tutorials:
Turbogears2 Beginner and Intermediate:
I will be assisting Mark [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://us.pycon.org/common/img/logo-sitemasthead.gif" height="120" width="328" /></p>
<p>So, Pycon registration has been up for a few days, I will be speaking both on and off-podium (read: open space) and providing assistance to and presenting tutorials.  Here is a run down of what I am planning in case you wanted a little bit more in-depth information.</p>
<p><em>Tutorials:</em></p>
<p><strong>Turbogears2 <a href="http://us.pycon.org/2009/tutorials/schedule/1AM5">Beginner</a> and <a href="http://us.pycon.org/2009/tutorials/schedule/1PM5">Intermediate</a></strong>:</p>
<p>I will be assisting <a href="http://compoundthinking.com/blog/">Mark Ramm</a> by giving individuals help installing and using the new TurboGears2 framework.  Mark is an experienced tutorial presenter, an expert in the technology, and in general a fun character to spend a few hours with.  When you leave his tutorials you should expect to have a working version of TG2 on your machine, along with an understanding of Model, View, and Controller paradigms.  Middleware, Forms, and REST will also be covered.  One note, if you are getting started with TG2, it&#8217;s best to have it installed and running if you plan to attend only the Intermediate Section.  We will not be going over installation in the second-half.</p>
<p><a href="http://us.pycon.org/2009/tutorials/schedule/2AM3"> </a><strong><a href="http://us.pycon.org/2009/tutorials/schedule/2AM3">Toscawidgets: Test Driven Modular Ajax</a>:</strong></p>
<p>I am presenting this tutorial which will describe how to use the valuable Toscawidgets package to create web content.  If you are currently use WSGI technology, and are interested in creating reusable, modular web content, this is a perfect way to get started.  I will show you how to configure TW middleware to work with pylons (which is applicable to other frameworks like repoze.bfg, paste, or even plone/Grok).  I will then describe how you might use this middleware to generate web forms.  The last few hours of class will be devoted to using the JavaScript utilities of TW to create an Ajaxified website, and test it using YUITest.</p>
<p><a href="http://us.pycon.org/2009/tutorials/schedule/2PM5"><strong>The Big F&#8217;ing Tutorial: Development Using the <tt class="docutils literal"><span class="pre">repoze.bfg</span></tt> Web Framework</strong></a></p>
<p>I will assist/present with <a href="http://blog.repoze.org/">Chris McDonough</a> about this up-and-coming framework who&#8217;s goals are to utilize bits of the zope 3 framework, wsgi, and new technologies to make a lighting-fast web server.  Those of you who are familiar with Zope technologies may be interested to find how nicely some of the familiar bits of zope are integrated with wsgi with repoze.bfg.</p>
<p><em> Presentations:</em><span style="display: inline-table" id="proposal_link_92"><span style="display: table-cell; padding-left: 5px"></span></span></p>
<p><strong><span style="display: inline-table" id="proposal_link_92"><span style="display: table-cell; padding-left: 5px">Using Sphinx and Doctests to provide Robust Documentation</span></span></strong></p>
<p>This is a 1/2 hour slot which describes how you can integrate tested documentation with your source code&#8230; with sanity!  I go over a quick install of <a href="http://sphinx.pocoo.org/">Sphinx</a>, and use some screencasts to demenstrate how to add, run, and display doctests using it.</p>
<p><strong>Open Space:<span style="display: table-cell; padding-left: 5px">Agile Development with<a href="http://www.sqlalchemy.org"> SQLAlchemy</a> and Python Testing Tools</span></strong></p>
<p>I really enjoy giving this talk, and even though it was not accepted as a formal talk, I will find a venue by way of Open Space to express my knowledge of Testing, SA, and Nose.  I have given this talk a few times now, and it&#8217;s fairly polished.  My presentation, while on some dry topics, won&#8217;t put you to sleep.  Carefully prepared screencasts and photograph-punctuated slides makes the 45 minutes breeze by.  Questioneers/Hecklers welcome!</p>
<p><em> Sprint Topics</em></p>
<p>I want to spend some time with the Dispatch of TG2, and probably push Sprox further a bit.  If you are just starting with TG, please feel free to contribute.  Sprinting is a great way to learn a lot from the experts in the domain.  We usually do a meet-greet-install the night before the sprints.  Oh, and I&#8217;ve been known to provide refreshments to all of our sprinting hordes (read: FREE BEER).</p>
<p>So, I hope to see all of you there!  If you see me in the hall, feel free to introduce yourself and tell me what you are using Python for!</p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/27/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<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>19</slash:comments>
		</item>
		<item>
		<title>Google Summer of Code Mentor Summit Recap</title>
		<link>http://percious.com/blog/archives/22</link>
		<comments>http://percious.com/blog/archives/22#comments</comments>
		<pubDate>Wed, 29 Oct 2008 19:23:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[Turbogears]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google summer of code]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[mentor summit]]></category>
		<category><![CDATA[mentorsummit]]></category>
		<category><![CDATA[mentorsummit08]]></category>

		<guid isPermaLink="false">http://www.percious.com/blog/?p=22</guid>
		<description><![CDATA[I spent last weekend in Sunnyvale, CA at the GSoC mentor summit.  This was a great opportunity to rub elbows with a number of experts in various OSS projects.  It was great to make connections with people in and out of the Python community.  First off, I just want to thank Google, and Leslie Hawthorne for having us. Google was [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://docs.turbogears.org/GSoC?action=AttachFile&amp;do=get&amp;target=gsoclogo_shadow_228x158.png" width="228" height="158" align="left" />I spent last weekend in Sunnyvale, CA at the GSoC mentor summit.  This was a great opportunity to rub elbows with a number of experts in various OSS projects.  It was great to make connections with people in and out of the Python community.  First off, I just want to thank Google, and Leslie Hawthorne for having us. Google was an excellent host, and I would jump at the chance to attend a Google-hosted event again.  Google is using GSoC to promote the open source community.  By providing funding for students to work for a summer on software instead of flipping burgers, they hope to save the world, one open source project at a time.  I have my own take on what Google&#8217;s true intentions are, but I don&#8217;t really want to discuss that in this blog entry.  That is to say, I don&#8217;t think Google&#8217;s intentions are in any way evil, but they are definitely self-serving.  In any event, it is remarkable the amount of time, energy, and money that goes into this project, which is at this time one of a kind.  Here&#8217;s hoping that other companies will consider the not-so-small buy in for sponsorship which could lead to even more OSS development.   
</p>
<p>As for the summit itself, there were lots of talks.  Since it was run like an open-space conference, it took a little while to work up some speed the first day, but I never found myself want of something to do.  I was not surprised that the talk on monetizing your OSS project was wildly successful.  I was surprised at how easy it was for sessions to get off on tangents, but it was interesting to see how people in similar fields were solving projects.  I attended a session on Scientific Computing (since I work for <a href="http://www.nrel.gov">NREL</a>) and it seemed that the biggest problem the room faced was packaging/deployment of software.  I appears this problem cross-cuts platforms, language, and even hardware barriers.  It also seems that you either have a choice to make: stick with old software that is stable, or upgrade to new stuff that almost always breaks other things.  Sound familiar?  I wonder how long it will be before everyone runs isolated virtual machine images for each of their projects&#8230; I bet some already are.  
</p>
<p>By day two I was pretty exhausted of participating in sessions, and I just wanted to hack with some like-minded folks.  It turned out that at least 8 people at the summit were hacking on making their application run on Python 2.6, so we all got together and shared the good vibe while we solved our individual problems.  The main barrier for TurboGears 2 running on Python 2.6 was ToscaWidgets and TurboJson.  First off, peak-rules needed some minor tweaking to get a few of the bugs fixed.  Thanks to Philip Eby for implementing my patch (in a slightly different way) and making it all work.  ToscaWidgets was also breaking with the SimpleJson trunk, but this turned out to be an implementation error, and I think I have it mostly sorted out.  
</p>
<p>Yesterday evening Mark and I finished up packaging the !first beta! of <a href="http://turbogears.org/2.0/docs/index.html">Turbogears2</a>.  I put a few custom eggs in the index from my GSoC hacking, and suddenly we have a Python 2.6 compatible release.  Also, of interesting note Gustavo Narea cranked out tgext.authorization which handles most of the security for TurboGears2.  Now I just need to get cranking and fix DBSprockets Primitives to work with <a href="http://rumdemo.toscawidgets.org/">Rum</a>, and then fix silverplate to support Rum also.  (Perhaps this is my way of telling people to move in the Rum direction).  
</p>
<p><img src="http://www.percious.com/static/images/blog/pyworks_08_Speaker_button.jpg" hspace="5" vspace="5" width="150" height="106" align="right" />Mark and I will be attending <a href="http://pyworks.mtacon.com/">PyWorks</a> in November, and doing a sprint then.  So, if you are in town, or interested in sprinting remotely, please don&#8217;t hesitate to sign up.  I will be speaking at PyWorks on using PasteScript, Virtualenv, SQLAlchemy, and Nosetests to create robust database applications. Do you think there is anything else I could cram in a 45 minute talk?  I will also be helping Mark out at his TG2 tutorial, so if you aren&#8217;t signed up for PyWorks, get crackin&#8217; !</p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/22/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Plonecon Recap</title>
		<link>http://percious.com/blog/archives/21</link>
		<comments>http://percious.com/blog/archives/21#comments</comments>
		<pubDate>Mon, 13 Oct 2008 17:14:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQLAlchemy]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[Turbogears]]></category>

		<guid isPermaLink="false">http://www.percious.com/blog/?p=21</guid>
		<description><![CDATA[Last week I attended Plonecon in Washington D.C.  We use Plone quite a bit at NREL, and I  wanted to come up to speed on the state of the art, and see if I could find some folks to collaborate with on the Scientific Data Management front.   I was not only surprised by the number [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I attended Plonecon in Washington D.C.  We use Plone quite a bit at NREL, and I  wanted to<img src="http://www.percious.com/static/images/blog/ploneconf-300.png" alt="ploneconf" align="right" height="225" width="300" /> come up to speed on the state of the art, and see if I could find some folks to collaborate with on the Scientific Data Management front.   I was not only surprised by the number of people in attendance, but also by the progress being made in forefront of Plone development.</p>
<p>Of course, one of the big news items was what is known in the community as the &#8220;Plone tax&#8221;, which is a reference to the 30+ seconds it takes to start Plone.  It was announced that this has been reduced to 6 seconds, which in my mind is still too much, but I am glad they are making progress in this area.  [edit] I believe the speedups were achieved in the trunk of plone, not for 3.2.   Plone 3.2 is supposed to be all eggs, which I think is a great benefit to the community.  I have already been using Plone in this manner with <a href="http://www.repoze.org">Repoze</a>, which packaged Plone as an egg a few months ago.</p>
<p>I was impressed by the changes to the user interface which were proposed by Alexander Limi in his talk on the future of Plone&#8217;s user experience.  It looks like portlet/viewlet terminology is being supplanted with the term &#8220;widget&#8221; which I think is more standard in the web design world. I think the new user interface is more intuitive, simplifying the page down to those components which will be most important, while still making available all of the functionality of Plone.</p>
<p>I was also impressed with Kapil Thangavelu&#8217;s content mirror.  While I don&#8217;t think his project which takes Plone content and injects it into an sql database will be immediately useful to me, I think it offers a nice path for someone who wants to convert their Zope/Plone site over to an relational-database based site.  It also provides a nice bridge for someone who wants to use existing relational database tools to mine data penned up within a zope database.</p>
<p>Coming from a TG background,  I was of course interested in Repoze.  Chris McDonough gave a compelling talk on repoze, specifically repoze.bfg and what is motivation was for creating yet another framework. We ran a BOF together, and had quite a bit of response.  I demo&#8217;d using Toscawidgets within Plone (running on repoze.plone).</p>
<p>Craig Swank and I also demo&#8217;d one of our repoze.plone application for a group of people interested in laboratory informatics systems.  I started up a google <a href="http://groups.google.com/group/plone-lims" title="Plone-lims Google Group">group</a> for this, and I sincerely hope that our small community can find a way to collaborate efforts in order to increase our productivity in a way only OSS can.</p>
]]></content:encoded>
			<wfw:commentRss>http://percious.com/blog/archives/21/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

