<?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>bgola &#187; free software</title>
	<atom:link href="http://blog.brunogola.com.br/category/free-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.brunogola.com.br</link>
	<description>python, free software, hacking, free culture, bicycle commuting, geocaching</description>
	<lastBuildDate>Mon, 21 Jun 2010 20:14:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Django model history with django-reversion</title>
		<link>http://blog.brunogola.com.br/2009/10/django-model-history-with-django-reversion/</link>
		<comments>http://blog.brunogola.com.br/2009/10/django-model-history-with-django-reversion/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 18:06:04 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[hacking]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=110</guid>
		<description><![CDATA[I&#8217;m currently working on a django project and I needed to track all changes to a model and provide a log showing what has changed (like a wiki). I&#8217;ve found three extensions/libs that apparently could do the job for me (fullhistory, django-history and django-reversion) so I decided to test them, but because of the lack [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on a <a href="http://www.djangoproject.com/">django</a> project and I needed to track all changes to a model and provide a log showing what has changed (like a wiki).</p>
<p>I&#8217;ve found three extensions/libs that apparently could do the job for me (<a href="http://code.google.com/p/fullhistory/">fullhistory</a>, <a href="http://code.google.com/p/django-history/">django-history</a> and <a href="http://code.google.com/p/django-reversion/">django-reversion</a>) so I decided to test them, but because of the lack of structure/documentation of the other two I tried just the last one. </p>
<h2>django-reversion</h2>
<p> (<a href="http://code.google.com/p/django-reversion/">http://code.google.com/p/django-reversion/</a>)</p>
<p>It has a <a href="http://code.google.com/p/django-reversion/wiki/GettingStarted">good documentation</a>, integration with the admin and the most important for me a <em><a href="http://code.google.com/p/django-reversion/wiki/LowLevelAPI">low level api</a></em>, as I am not using the admin app for this project. </p>
<p>The installation went pretty well (<em>svn co <a href="http://django-reversion.googlecode.com/svn/tags/1.1.2/src/reversion">http://django-reversion.googlecode.com/svn/tags/1.1.2/src/reversion</a></em> to your PYTHONPATH, add the <em>reversion</em> app to your INSTALLED_APPS in <em>settings.py</em> and the usual <em>python manage.py syncdb</em>).</p>
<p>To track the changes of a model you must register it with the <em>reversion</em> framework (importing <em>reversion</em> and calling <em>reversion.register(YourModel)</em>).</p>
<p><em>Reversion</em> provides some ways for creating revisions of your model and the docs recommend that you choose one of them to use in your project. I chose the MiddleWare method because it seemed the better option for our project, but you should look the <a href="http://code.google.com/p/django-reversion/wiki/LowLevelAPI">reversion documentation</a> and decide which one is the best for you.</p>
<p>After registering the model and installing the MiddleWare no more changes are needed, whenever I save a model a new revision is created on the database. Another cool feature is the <em>follow</em> argument when registering a model. That way you can specify a ForeingKey/ManyToMany field to follow. This means that when you save the model a new revision is created with all &#8220;followed&#8221; fields in its current state. It&#8217;s very useful. See the docs for an example.</p>
<p>The only thing that&#8217;s not so clear for me is: what happens if I delete a field from a model that&#8217;s registered within reversion? Can you still restore its versions?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2009/10/django-model-history-with-django-reversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating a tweet gadget for Google Wave</title>
		<link>http://blog.brunogola.com.br/2009/10/creating-a-tweet-gadget-for-google-wave/</link>
		<comments>http://blog.brunogola.com.br/2009/10/creating-a-tweet-gadget-for-google-wave/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 18:56:07 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[Hacklab]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[google gadgets]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=118</guid>
		<description><![CDATA[This week bani sent me an invite for trying Google Wave. It&#8217;s a great tool and if it remains as open as Google says it will I think it can really change the way we communicate over the internets. I mean, it&#8217;s much more flexible than e-mail and it takes collaboration to another level. But, [...]]]></description>
			<content:encoded><![CDATA[<p>This week <a href="http://twitter.com/bani">bani</a> sent me an invite for trying <a href="http://wave.google.com">Google Wave</a>. It&#8217;s a great tool and if it remains as open as Google says it will I think it can really change the way we communicate over the <em>internets</em>. I mean, it&#8217;s much more flexible than e-mail and it takes collaboration to another level. But, as I said, <em>IMO</em> the &#8220;key for success&#8221; in this case is to stay open and to support the creation of other servers and implementations(as <a href="http://pygowave.net">PyGoWave</a> [which deserves a blog post]).</p>
<p>But enough of cheap talk, I&#8217;ll show you the code. </p>
<p>My first &#8220;useful&#8221; piece of code for <em>Wave</em> is a <em>Tweet Gadget</em>. It&#8217;s a simple <a href="http://code.google.com/apis/gadgets/">Google Gadget</a> that takes advantage of the <a href="http://code.google.com/apis/wave/extensions/gadgets/guide.html">Wave extensions</a> for interacting with the <em>Wave user</em>. What the gadget does is very simple, it takes a <em>tweet id</em> and using the <a href="http://apiwiki.twitter.com/">Twitter API</a> it places the tweet inside the Wave. It&#8217;s a simple way to quote a tweet.</p>
<p>I must say that the original idea is not mine, it&#8217;s <a href="http://isnomore.net">rbp</a>&#8216;s idea. We were chatting using Google Wave and he wanted to quote a tweet. That&#8217;s how we started looking ways of doing it.</p>
<h2>Stateless gadget</h2>
<p>I started writing a <a href="http://brunogola.com.br/tweet_stateless.xml">simple gadget</a> that using the <em>Google Gadgets API</em> makes a request using the Twitter API and shows the tweet in the wave. The problem of this first version was that it does not keep the state, so if you reload/rejoin the wave, you won&#8217;t see the tweet, but instead you will see the text box for entering the tweet id.</p>
<p>In this first version you can see how to make a JSON Async Request using the Google Gadgets API. It&#8217;s very simple, all you need to do is to set the parameter <em>gadgets.io.RequestParameters.CONTENT_TYPE</em> to <em>gadgets.io.ContentType.JSON</em> and then call <em>gadgets.io.makeRequest(url, callback, params)</em> where <em>callback</em> is a <em>function</em> that receives the JSON object.A very simple example:</p>
<p><code><br />
function myCallback(obj) {<br />
  jsondata = obj.data;<br />
  // access the attributes as jsondata['key']<br />
  // ...<br />
}<br />
function makesJSONRequest(url) {<br />
  params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;<br />
  gadgets.io.makeRequest(url, myCallback, params);<br />
}<br />
</code></p>
<h2>Adding state</h2>
<p>Until now the gadget is a simple <em>Google Gadget</em> as it does not use any feature of <em>Google Wave</em>. Also it&#8217;s not so useful because it can&#8217;t keep the tweet id when you leave the Wave. And worse, people will never see the tweet you quoted. One of the main differences between simple Google Gadgets and Wave Gadgets is their <a href="http://code.google.com/apis/wave/extensions/gadgets/guide.html#state">ability to keep, set and change <em>state</em></a>. By state I mean information. You can keep user preferences, a game score or a <em>tweet id</em> (or even a tweet).</p>
<p>I decided that the easiest way was to store the tweet as it will appear in the wave (with HTML entities and everything). The <a href="http://brunogola.com.br/tweet_state.xml">new version</a> will keep the tweet information when the user enters the tweet id, so everybody in the wave can see the quoted tweet. </p>
<p>You can see the <a href="http://brunogola.com.br/tweet_state.xml">Gadget code</a> to understand how state works in Google Wave, but what&#8217;s most important:</p>
<ul>
<li>use a callback (with wave.setStateCallback()) to be aware of state changes</li>
<li>wave.getState() returns an state <em>dict-like</em> object which you can set and get information from</li>
<li>use wave.getState().get(&#8216;key&#8217;) for getting an information</li>
<li>and wave.getState().submitDelta({&#8216;key1:&#8217; value1, &#8216;key2&#8242;: value2} for setting information</li>
</ul>
<p>And that&#8217;s it. It&#8217;s very simple, hope you enjoy it <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2009/10/creating-a-tweet-gadget-for-google-wave/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Transparência HackDay</title>
		<link>http://blog.brunogola.com.br/2009/10/transparencia-hackday/</link>
		<comments>http://blog.brunogola.com.br/2009/10/transparencia-hackday/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 15:19:21 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[Hacklab]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=104</guid>
		<description><![CDATA[&#8220;Two days for hacking the Brazilian politics&#8221; This weekend (October 3rd and 4th) will happen the first &#8220;Transparência HackDay&#8221; (&#8220;Transparency HackDay&#8221; in english), a free and open hacking event with focus on bringing together hackers, activists, managers and people with ideas to make government information/public data more accessible for everyone using and writing web tools. [...]]]></description>
			<content:encoded><![CDATA[<p><strong><em>&#8220;Two days for hacking the Brazilian politics&#8221;</em></strong></p>
<p>This weekend (<strong>October 3rd</strong> and <strong>4th</strong>) will happen the first &#8220;<em>Transparência HackDay</em>&#8221; (&#8220;<em>Transparency HackDay</em>&#8221; in english), a free and open hacking event with focus on bringing together hackers, activists, managers and people with ideas to make government information/public data more accessible for everyone using and writing web tools.</p>
<p>I&#8217;m attending and one of my ideas is to hack <strong>CET</strong> (<em>Companhia de Engenharia de Tráfego / Traffic Engineering Company</em>) data and make them available. The idea is to improve a crawler I wrote (in <strong>python</strong> <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) that downloads and stores data about the traffic in São Paulo every 30 minutes from the &#8220;traffic now&#8221; <strong>CET</strong> website (as they don&#8217;t store it [or at least don't provide anything]).</p>
<p>More information about the <strong>HackDay</strong> (in <em>portuguese</em>):<br />
<a href="http://www.slideshare.net/esferamobi/transparencia-hackday-proposta">http://www.slideshare.net/esferamobi/transparencia-hackday-proposta</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2009/10/transparencia-hackday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>São Paulo Python User Group &#8211; May Meeting</title>
		<link>http://blog.brunogola.com.br/2009/05/sao-paulo-python-user-group-may-meeting/</link>
		<comments>http://blog.brunogola.com.br/2009/05/sao-paulo-python-user-group-may-meeting/#comments</comments>
		<pubDate>Sat, 16 May 2009 13:29:01 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[Hacklab]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[fisl]]></category>
		<category><![CDATA[grupy-sp]]></category>
		<category><![CDATA[pythonbrasil]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=76</guid>
		<description><![CDATA[Every month the GruPy-SP members get together to discuss, chat and/or code. This month we will meet to watch/present some lightning talks and to talk about our participation at the Fórum Internacional de Software Livre (FISL 10). The meeting will be hold at the SP HackLab, May 23. More details (in pt-br): GruPy-SP wiki. See [...]]]></description>
			<content:encoded><![CDATA[<p>Every month the <a href="http://www.python.org.br/wiki/GrupySP">GruPy-SP</a> members get together to discuss, chat and/or code. </p>
<p>This month we will meet to watch/present some lightning talks and to talk about our participation at the Fórum Internacional de Software Livre (<a href="http://www.fisl.org.br/">FISL 10</a>). </p>
<p>The meeting will be hold at the SP HackLab, May 23. More details (in pt-br): <a href="http://www.python.org.br/wiki/GrupySP">GruPy-SP wiki</a>.</p>
<p>See you there <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2009/05/sao-paulo-python-user-group-may-meeting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CHDK: hacking my camera</title>
		<link>http://blog.brunogola.com.br/2008/12/chdk-hacking-my-camera/</link>
		<comments>http://blog.brunogola.com.br/2008/12/chdk-hacking-my-camera/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 18:14:27 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[chdk]]></category>
		<category><![CDATA[hacking]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=69</guid>
		<description><![CDATA[I have a Canon A-640 that I rarely use, partially because it&#8217;s flash is broken. Now I found a new use for it, a hackable device With CHDK (Canon Hack Development Kit) I can write my own scripts (in LUA or BASIC) to control the camera functions. It also enables new features and improve old [...]]]></description>
			<content:encoded><![CDATA[<p>I have a Canon A-640 that I rarely use, partially because it&#8217;s flash is broken. Now I found a new use for it, a hackable device <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>With <a href="http://chdk.wikia.com">CHDK</a> (Canon Hack Development Kit) I can write my own scripts (in LUA or BASIC) to control the camera functions. It also enables new features and improve old ones. Really nice free software project <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>And for hackers, it&#8217;s well documented (including the source-code). I&#8217;ll try it better and post some results here (with pictures and some code I hope <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2008/12/chdk-hacking-my-camera/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HP 2133 and Ubuntu</title>
		<link>http://blog.brunogola.com.br/2008/10/hp-2133-and-ubuntu/</link>
		<comments>http://blog.brunogola.com.br/2008/10/hp-2133-and-ubuntu/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 04:41:32 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[hp 2133]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[via]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=66</guid>
		<description><![CDATA[Last week I got a HP 2133 mini notebook for me to use on presentations, college, meetings, events, etc. It&#8217;s a very nice toy with 1Gb RAM, a 1.2 GHz VIA Processor, 120Gb of storage, Wifi and bluetooth. Well, it&#8217;s very handy and the keyboard is amazing&#8230; except for the key, that is a little [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I got a HP 2133 mini notebook for me to use on presentations, college, meetings, events, etc. It&#8217;s a very nice toy with 1Gb RAM, a 1.2 GHz VIA Processor, 120Gb of storage, Wifi and bluetooth. Well, it&#8217;s very handy and the keyboard is amazing&#8230; except for the <em><enter></em> key, that is a little smaller than the on in my &#8220;official&#8221; notebook, and I always try to press it in the wrong place <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>But&#8230; I&#8217;ve spent a lot of time to make it work with my Ubuntu. Why? Mainly because of the <em>freakin&#8217;</em> VIA proprietary video driver. So I decided to write here some tips about how to get Ubuntu working on the 2133 (after trying to configure the xorg.conf for 3 hours because I hadn&#8217;t made a backup of the one that was working <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>The problem I have is that the desktop is bigger than the screen. Oh, you say, it&#8217;s just the Virtual xorg.conf Option.</p>
<p><strong>IT&#8217;S NOT</strong>. Damn it!</p>
<p><em>Thanks</em> to VIA there is a driver option called PanelID. This option is &#8220;well documented&#8221; in the README file. </p>
<p>The first thing you need to do is to tell the driver that your PanelID is 17. Why? I really don&#8217;t know. PanelID 17 means, accordingly to the README,  that your display (or your Panel) resolution is 1024&#215;600. The problem is that I want my resolution to be 1280&#215;768 (which is supported by 2133). Anyway, using option &#8220;PanelID&#8221; 17 solves the problem partially, the desktop isn&#8217;t bigger than the screen anymore.</p>
<p>BUT&#8230; it thinks that your resolution is 1024&#215;600 (because of the PanelID option, probably), so try to imagine what a 1280&#215;768 desktop looks like in a 1024&#215;600 display (or panel, whatever). The result is that you can see 3/4 of your Desktop, but your pointer &#8220;sees&#8221; the &#8220;panel&#8221; borders (i mean, it can&#8217;t go any longer than the screen limits). </p>
<p>To solve this problem you need to tell the X server that you have a Virtual display of 1024&#215;600 (yes, you&#8217;re lying!!!) so it will arrange your 1280&#215;768 desktop inside this virtual display of 1024&#215;600. To do this you need to add the line</p>
<blockquote><p>Virtual 1024 600</p></blockquote>
<p>in the <em>Display</em> subsection of the <em>Screen</em> section.</p>
<p>Your xorg.conf will look like this (the relevant sections only):</p>
<blockquote><p>
    Section &#8220;Device&#8221;<br />
        Identifier      &#8220;via-P4M900 Device 0&#8243;<br />
        BoardName       &#8220;Chrome9 HC IGP&#8221;<br />
        BusID           &#8220;PCI:1:0:0&#8243;<br />
        Driver          &#8220;via&#8221;<br />
        Option          &#8220;Monitor-LCD&#8221;           &#8220;HP-2133 LCD&#8221;<br />
        Option          &#8220;PanelID&#8221;               &#8220;17&#8243;<br />
        Option          &#8220;NoDDCValue&#8221;<br />
EndSection<br />
&#8230;<br />
Section &#8220;Screen&#8221;<br />
        &#8230;<br />
        Subsection      &#8220;Display&#8221;<br />
            Depth       24<br />
            Modes       &#8220;1280&#215;768-60.0&#8243;<br />
            Virtual     1024 600<br />
        EndSubsection<br />
        &#8230;<br />
EndSection
</p></blockquote>
<p>If you have any trouble with the video (or anything) trying to install Ubuntu on the HP 2133 Mini, leave a comment and I promise I&#8217;ll <strong>TRY</strong> to help <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2008/10/hp-2133-and-ubuntu/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>DjangoCon day two</title>
		<link>http://blog.brunogola.com.br/2008/09/djangocon-day-two/</link>
		<comments>http://blog.brunogola.com.br/2008/09/djangocon-day-two/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 03:41:47 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[djangocon]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[grupy]]></category>
		<category><![CDATA[grupy-sp]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=60</guid>
		<description><![CDATA[Almost sleeping, but there&#8217;s still a bit of caffeine in my body to write this post. Some notes on day two: In São Paulo we had two lighting talks before the &#8220;official&#8221; conference. João (JS) talked about a little script he wrote that uses PyGame to display text from a .txt file in a presentation [...]]]></description>
			<content:encoded><![CDATA[<p>Almost sleeping, but there&#8217;s still a bit of caffeine in my body to write this post.</p>
<p>Some notes on day two:</p>
<ul>
<li>In São Paulo we had two lighting talks before the &#8220;official&#8221; conference. João (<em>JS</em>) talked about a little script he wrote that uses PyGame to display text from a .txt file in a presentation format. <a href="http://isnomore.net">Rbp</a> explained a bit about 2to3  (the Python 2.x [actually x <em>equals</em> 6] to Python 3 conversion tool) and showed some examples.</li>
<li>First talk. Mark Ramm had some <strong>good</strong> points. Specially, IMO, about making Django more <em>modular</em>, which means that each part of it doesn&#8217;t depend on other parts of the framework. As an example, you can choose to use the Django ORM without using <em>Django</em>. But, please, don&#8217;t make it a lot of little packages that you need to grab together to start using the framework. One of the nice things about Django is that it&#8217;s simple to start using it (install one package and then <em>django-admin.py startproject</em>)</li>
<li><em>Official</em> lighting talks. As always, a great moment on any Python conference. Lots of curious and interesting stuff (and other stuff not so interesting&#8230; or not interesting at all <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  [for me, obviously]). Funny moment: <strong>People, don&#8217;t use GMail over HTTP, there IS HTTPS support</strong> <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Schema evolution, three options: DMigration, <a href="http://south.aeracode.org/">South</a> and Django Evolution. There are a lot of doubts about each one and I think I need to test all of them to choose one (and hope that they start collaborating to each other and make something <em>really good</em>). But it&#8217;s great to see that there is people working on that.</li>
<li>Last talk was <em>Django&#8217;s Future</em> by, obviously, Jacob and Adrian. It was more like a chat between them. Some good ideas and discussions. Then they received questions/requests/suggestions from the public. Things like, <em>dropping old python versions support</em>, <em>python 3 support</em>, <em>documentation</em>, <em>debugging tools</em>, etc. I think that some suggestions/requests were <strong>really</strong> nice and  I hope that Django developers (and the community) take them seriously. This was a great opportunity for developers to receive feedback from the community (users).</li>
</ul>
<p>That&#8217;s it for 2008. Again, I&#8217;d like to thank Rodolpho and Google for making it possible to attend to DjangoCon from São Paulo. Congratulations to DjangoCon organizers and to the Django community!</p>
<p>And, of course, thanks GruPy-SP people <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
<p>Pictures: <a href="http://flickr.com/photos/rbp/sets/72157607173551965/">Rbp&#8217;s DjangoCon set @ Flickr</a></p>
<p><img src='http://farm4.static.flickr.com/3256/2838745148_66db951462.jpg?v=0' alt='DjangoCon @ Google (SP)' class='aligncenter' /></p>
<p>It was 11p.m. Almost sleeping in this blue big puff <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2008/09/djangocon-day-two/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DjangoCon first day</title>
		<link>http://blog.brunogola.com.br/2008/09/djangocon-first-day/</link>
		<comments>http://blog.brunogola.com.br/2008/09/djangocon-first-day/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 05:05:32 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[djangocon]]></category>
		<category><![CDATA[first day]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[são paulo]]></category>
		<category><![CDATA[talks]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=57</guid>
		<description><![CDATA[I&#8217;m attending to DjangoCon from São Paulo Google&#8217;s Office. Some notes on the first day of event: I expected more news from GvR on his talk about GAE (nothing really new). David Cramer talk about High Performance was kinda heavy (but good things learned) The history behind Django is hilarious (State of Django by Jacob [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m attending to <a href="http://djangocon.org/">DjangoCon</a> from São Paulo Google&#8217;s Office. </p>
<p>Some notes on the first day of event:</p>
<ul>
<li>I expected more news from <em>GvR</em> on his talk about GAE (nothing <strong>really</strong> new).</li>
<li><em>David Cramer</em> talk about High Performance was kinda <em>heavy</em> (but good things learned)</li>
<li>The history behind Django is hilarious (<em>State of Django by Jacob and Adrian</em>)</li>
<li>It seems Django is getting bigger (contributors) and better (features). Good!</li>
<li>Really good talk by Malcolm Tredinnick about the Django ORM</li>
<li>GeoDjango seems very interesting, but it&#8217;s not for me (at least now&#8230;)</li>
<li>Cal Henderson made good &#8220;feature requests&#8221; and &#8220;bug reports&#8221; live, the unreadable SQL generated by Django scares me a bit&#8230; but not that much</li>
</ul>
<p>In general it was great. I can&#8217;t wait for the lighting talks tomorrow (probably the best moment on any Python conference <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).</p>
<p>Oh, the snacks @ Google (Sao Paulo) are awesome!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2008/09/djangocon-first-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modifying Django NewForms-Admin views</title>
		<link>http://blog.brunogola.com.br/2008/09/modifying-django-newforms-admin-views/</link>
		<comments>http://blog.brunogola.com.br/2008/09/modifying-django-newforms-admin-views/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 12:22:31 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[add_view]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[customize]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[newforms]]></category>
		<category><![CDATA[newforms-admin]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=56</guid>
		<description><![CDATA[Playing with the new Django features, specially with the NewForms-Admin, I was looking for a way to change the add view behavior for some models. It&#8217;s really easy and obvious (it&#8217;s always easy and obvious with Python and Django). First, you&#8217;ll need the admin.py file in your app directory. from django.contrib import admin from myproject.myapp.models [...]]]></description>
			<content:encoded><![CDATA[<p>Playing with the new <a href="http://www.djangoproject.com/">Django</a> features, specially with the NewForms-Admin, I was looking for a way to change the <em>add</em> view behavior for some <em>models</em>.</p>
<p>It&#8217;s really easy and obvious (it&#8217;s always easy and obvious with Python and Django).</p>
<p>First, you&#8217;ll need the <em>admin.py</em> file in your app directory.</p>
<p><code><br />
from django.contrib import admin<br />
from myproject.myapp.models import MyModel</p>
<p>class MyModelAdmin(admin.ModelAdmin):<br />
    def add_view(self, request):<br />
        if request.method == 'POST':<br />
            # do whatever you want<br />
            # remember, POSTing means that someone entered data.<br />
        return admin.ModelAdmin.add_view(self, request)</p>
<p>admin.site.register(MyModel, MyModelAdmin)<br />
</code></p>
<p>The <em>add_view</em> method is called when you try to <em>add</em> an entry using the admin. There are other interesting methods you should look too, for customizing the admin behavior (change_view, delete_view, etc).</p>
<p>Another way to customize things is to write your own <em>ModelForm</em>, but it&#8217;s beyond the scope of this post <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2008/09/modifying-django-newforms-admin-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DjangoCon in São Paulo</title>
		<link>http://blog.brunogola.com.br/2008/09/djangocon-in-sao-paulo/</link>
		<comments>http://blog.brunogola.com.br/2008/09/djangocon-in-sao-paulo/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 17:13:18 +0000</pubDate>
		<dc:creator>Bruno Gola</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[djangocon]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://blog.brunogola.com.br/?p=54</guid>
		<description><![CDATA[I&#8217;m not crazy at all. (yet) Thanks to Google (I think specially to Rodolpho) DjangoCon will be transmitted to Google&#8217;s Office in São Paulo while the conference is held in Mountain View. Cool I&#8217;m definitively going! So, Saturday and Sunday (September 6th and 7th) @ Google&#8217;s Office, see you there!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not crazy at all. (yet)</p>
<p>Thanks to Google (I think specially to <a href="http://rodolpho.eckhardt.com.br/blog/">Rodolpho</a>) DjangoCon will be transmitted to Google&#8217;s Office in São Paulo while the conference is held in Mountain View. </p>
<p>Cool <img src='http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;m definitively going! So, Saturday and Sunday (September 6th and 7th) @ Google&#8217;s Office, see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.brunogola.com.br/2008/09/djangocon-in-sao-paulo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
