<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7739609142389674191</id><updated>2012-01-09T07:31:34.927-08:00</updated><category term='nokia'/><category term='e61'/><category term='django'/><category term='python'/><category term='web'/><category term='encoding unicode pagseguro uol'/><category term='symbian'/><category term='&quot;business intelligence&quot; &quot;qualidade da informação&quot; &quot;inteligência empresarial&quot;'/><title type='text'>David Kwast</title><subtitle type='html'>Blog de nível técnico sobre novas tecnologias. E um pouco de modelagem em argila também.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.kwast.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-6013622373871836031</id><published>2012-01-09T07:31:00.000-08:00</published><updated>2012-01-09T07:31:34.935-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;business intelligence&quot; &quot;qualidade da informação&quot; &quot;inteligência empresarial&quot;'/><title type='text'>A Qualidade da Informação e a Inteligência Empresarial</title><content type='html'>Diariamente, em nossa rotina de trabalho, geramos e consumimos informação. Esta informação pode ser transmitida através da fala, de papéis, de computadores e até por gestos.&lt;br /&gt;Cada meio de transmissão pode sofrer a ação de ruídos específicos, que se não controlados podem inviabilizar o registro da informação. Na fala, um tipo comum de ruído pode ser o barulho do ambiente. Já no papel, um pouco de sujeira em cima de uma letra ou número pode ser suficiente para invalidar todo um registro.&lt;br /&gt;Além de legível, cada registro precisa estar correto. Um registro com uma informação que não represente a realidade é o mesmo, ou até pior, que a sua ausência.&lt;br /&gt;A partir de um histórico de registros bem estruturado, é possível construir ou obter um sistema informatizado de &lt;a href="http://pt.wikipedia.org/wiki/Intelig%C3%AAncia_empresarial"&gt;Inteligência Empresarial&lt;/a&gt;, ou &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Business_intelligence"&gt;Business Intelligence&lt;/a&gt;&lt;/i&gt;. Cuja função é fornecer suporte à tomada de decisões estratégicas de uma empresa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-6013622373871836031?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/6013622373871836031/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=6013622373871836031' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/6013622373871836031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/6013622373871836031'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2012/01/qualidade-da-informacao-e-inteligencia.html' title='A Qualidade da Informação e a Inteligência Empresarial'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-4200289970452354562</id><published>2011-03-20T11:43:00.000-07:00</published><updated>2011-03-20T11:43:57.108-07:00</updated><title type='text'>CONTOUR GPS - Câmera de capacete com GPS</title><content type='html'>&lt;iframe width="907" height="360" src="http://contour.com/stories/fernao-dias-mg-spbrasil-cb1300f/embed?map=true" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-4200289970452354562?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='' href='http://contour.com/camera/contour_gps' length='0'/><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/4200289970452354562/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=4200289970452354562' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/4200289970452354562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/4200289970452354562'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2011/03/contour-gps-camera-de-capacete-com-gps.html' title='CONTOUR GPS - Câmera de capacete com GPS'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-1068629429292489818</id><published>2010-05-27T16:10:00.000-07:00</published><updated>2010-06-01T17:56:58.174-07:00</updated><title type='text'>Finalmente: PagSeguro suporta oficialmente Unicode UTF-8</title><content type='html'>Finalmente, depois de 2 meses do meu desabafo, o PagSeguro UOL decidiu suportar UTF-8 como encoding opcional para o POST em seu site.&lt;br /&gt;&lt;br /&gt;Mais detalhes da implementação no blog do PagSeguro:&lt;br /&gt;&lt;a href="http://blogpagseguro.com.br/2010/05/informativo-pagseguro-enconding/"&gt;http://blogpagseguro.com.br/2010/05/informativo-pagseguro-enconding/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-1068629429292489818?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/1068629429292489818/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=1068629429292489818' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/1068629429292489818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/1068629429292489818'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2010/05/agora-e-oficial-pagseguro-suporta.html' title='Finalmente: PagSeguro suporta oficialmente Unicode UTF-8'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-2531821383516398851</id><published>2010-03-15T09:37:00.000-07:00</published><updated>2010-06-01T17:56:14.372-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encoding unicode pagseguro uol'/><title type='text'>PagSeguro UOL e o clássico problema de encoding "padrão" latino</title><content type='html'>Para quem nunca ouviu falar no &lt;span style="font-weight: bold;"&gt;PagSeguro UOL&lt;/span&gt;, basta conhecer o &lt;span style="font-weight: bold;"&gt;MercadoPago&lt;/span&gt; do &lt;span style="font-weight: bold;"&gt;MercadoLivre&lt;/span&gt; ou o &lt;span style="font-weight: bold;"&gt;PayPal&lt;/span&gt;. Se você não conhece nenhum dos 3, sugiro que leia um pouco sobre sistemas de pagamento online.&lt;br /&gt;&lt;br /&gt;Como o &lt;span style="font-weight: bold;"&gt;PayPal&lt;/span&gt;, o &lt;span style="font-weight: bold;"&gt;PagSeguro UOL&lt;/span&gt; pode ser integrado em qualquer site. Basta seguir o &lt;a href="https://pagseguro.uol.com.br/desenvolvedor/guia_do_desenvolvedor.jhtml"&gt;Guia do Desenvolvedor&lt;/a&gt;. O problema é que o guia não fala nada sobre o encoding que o sistema do &lt;span style="font-weight: bold;"&gt;PagSeguro UOL&lt;/span&gt; trabalha. Procurando no &lt;span style="font-weight: bold;"&gt;Google&lt;/span&gt;, encontrei algumas dicas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.klaus.pro.br/2009/ler/encoding-no-post-para-o-pagseguro/index.html"&gt;http://blog.klaus.pro.br/2009/ler/encoding-no-post-para-o-pagseguro/index.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Estas dicas funcionaram até Dezembro de 2009, quando o sistema do &lt;span style="font-weight: bold;"&gt;PagSeguro UOL&lt;/span&gt; sofreu algumas alterações. Agora o sistema só aceita o "padrão"&lt;span style="font-weight: bold;"&gt; ISO-8859-1&lt;/span&gt; ou &lt;span style="font-weight: bold;"&gt;latin-1&lt;/span&gt;, ou seja, o "padrão" usado no Windows em Português. Nada do outro padrão chamado &lt;span style="font-weight: bold;"&gt;Unicode UTF-8&lt;/span&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogpagseguro.com.br/2009/12/ajustes-no-site-pagseguro-01122009/"&gt;http://blogpagseguro.com.br/2009/12/ajustes-no-site-pagseguro-01122009/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://pagseguro.uol.com.br/CarrinhoPagSeguro.aspx#rmcl"&gt;https://pagseguro.uol.com.br/CarrinhoPagSeguro.aspx#rmcl&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; Já reclamei 2 vezes. Só recebi respostas automáticas supondo que eu não entendi nada sobre a integração. As repostas foram nada mais que um Copy&amp;amp;Paste do Guia de Intregação. Será que é tão difícil alguém no &lt;span style="font-weight: bold;"&gt;PagSeguro UOL&lt;/span&gt; colocar de volta o código que converte todo o texto no encoding especificado no campo oculto "encoding"? Ou pelo menos suportar &lt;span style="font-weight: bold;"&gt;UTF-8&lt;/span&gt; de alguma forma.&lt;br /&gt;&lt;br /&gt;Hoje eu mandei um e-mail para o pagseguro (arroba) visie.com.br. Vamos ver o que me respondem. Chegando a resposta, publicarei aqui.&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;O problema foi resolvido dia 17 de Maio:&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://blog.kwast.net/2010/05/agora-e-oficial-pagseguro-suporta.html"&gt;http://blog.kwast.net/2010/05/agora-e-oficial-pagseguro-suporta.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogpagseguro.com.br/2010/05/informativo-pagseguro-enconding/"&gt;http://blogpagseguro.com.br/2010/05/informativo-pagseguro-enconding/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-2531821383516398851?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/2531821383516398851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=2531821383516398851' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/2531821383516398851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/2531821383516398851'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2010/03/pagseguro-uol-e-o-classico-problema-de.html' title='PagSeguro UOL e o clássico problema de encoding &quot;padrão&quot; latino'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-2765233619889606037</id><published>2009-05-03T08:42:00.000-07:00</published><updated>2009-05-03T12:08:02.623-07:00</updated><title type='text'>Modelagem em Argila, meu novo passatempo</title><content type='html'>Decidi começar um novo hobby: modelagem em argila. Eu descobri que gostava de modelar em argila na aula de artes da escola, porém esqueci disso durante a faculdade.&lt;br /&gt;Escolhi modelar um personagem de um jogo antigo de computador, o Purple Tentacle do jogo Maniac Mansion - Day Of The Tentacle (DOTT). A pose é do momento que o personagem ganha braços e decide dominar o mundo.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/0/04/Dott-screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 353px; height: 264px;" src="http://upload.wikimedia.org/wikipedia/en/0/04/Dott-screenshot.png" alt="" border="0" /&gt;&lt;/a&gt;Depois de umas 6 horas de pura dedicação, a modelagem ficou assim:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_YBBPlNb4wkY/Sf23FfiqvsI/AAAAAAAAEao/xfAKqnBqR-w/purple02.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 417px; height: 436px;" src="http://lh5.ggpht.com/_YBBPlNb4wkY/Sf23FfiqvsI/AAAAAAAAEao/xfAKqnBqR-w/purple02.jpg" alt="" border="0" /&gt;&lt;/a&gt;Ainda faltam alguns ajustes e quem sabe, uma pintura com as cores originais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-2765233619889606037?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/2765233619889606037/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=2765233619889606037' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/2765233619889606037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/2765233619889606037'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2009/05/modelagem-em-argila-meu-novo-passatempo.html' title='Modelagem em Argila, meu novo passatempo'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_YBBPlNb4wkY/Sf23FfiqvsI/AAAAAAAAEao/xfAKqnBqR-w/s72-c/purple02.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-1431043214173837169</id><published>2008-04-18T09:41:00.000-07:00</published><updated>2008-04-18T21:07:36.218-07:00</updated><title type='text'>Forum Internacional do Software Livre – Edição 9</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/david.kwast/SAjMzJ9ohzI/AAAAAAAABiE/HPOyLLLuH6o/IMG_1789.JPG?imgmax=576"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://lh5.ggpht.com/david.kwast/SAjMzJ9ohzI/AAAAAAAABiE/HPOyLLLuH6o/IMG_1789.JPG?imgmax=576" alt="" border="0" /&gt;&lt;/a&gt;Neste ano, o FISL está sendo hospedado na PUC-RS. O evento começou na quinta-feira e acaba sábado. As palestras, treinamentos e encontros de comunidades são distribuídas em 8 salas e começam 9 horas da manhã e terminam 9 horas da noite, cada um durando uma hora em média. Os nomes das salas são de pessoas notáveis na computação e software livre: Linus Torvards, Andrew Tanenbaum, Jon Maddog Hall, Richard Stallman, Guido Van Rossum, Marcelo Tosatti, Tim Berners Lee e Alan Turing.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/david.kwast/SAjOop9oisI/AAAAAAAABqI/N0ZrRnH5x5c/IMG_1848.JPG?imgmax=512"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://lh3.ggpht.com/david.kwast/SAjOop9oisI/AAAAAAAABqI/N0ZrRnH5x5c/IMG_1848.JPG?imgmax=512" alt="" border="0" /&gt;&lt;/a&gt;Muitas empresas e organizações possuem espaços para exposição, entre elas estão: Google, Sun, Intel, Globo.com, Banco do Brasil, Cobra Tecnologia, Linux Magazine, Comitê Gestor de Internet.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/david.kwast/SAjNC59oh7I/AAAAAAAABjI/ObIKoG7Xza4/IMG_1797.JPG?imgmax=512"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://lh4.ggpht.com/david.kwast/SAjNC59oh7I/AAAAAAAABjI/ObIKoG7Xza4/IMG_1797.JPG?imgmax=512" alt="" border="0" /&gt;&lt;/a&gt;Também há espaços para projetos e comunidades de assuntos relacionados ao software livre.  Como a associação Python Brasil, OpenSuse, Debian, PHP, JavaFree.org, entre outros.&lt;br /&gt;Não tenho muito mais a dizer sobre o dia 17, o avião atrasou 7 horas e passei a tarde mostrando Python e Django para um pessoal da IBM.&lt;br /&gt;&lt;br /&gt;Mais fotos em:&lt;br /&gt;&lt;a href="http://picasaweb.google.com/david.kwast/FISL9"&gt;http://picasaweb.google.com/david.kwast/FISL9&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Programação:&lt;br /&gt;&lt;a href="http://fisl.softwarelivre.org/9.0/papers/pub/"&gt;http://fisl.softwarelivre.org/9.0/papers/pub/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-1431043214173837169?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/1431043214173837169/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=1431043214173837169' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/1431043214173837169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/1431043214173837169'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2008/04/forum-internacional-do-software-livre.html' title='Forum Internacional do Software Livre – Edição 9'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/david.kwast/SAjMzJ9ohzI/AAAAAAAABiE/HPOyLLLuH6o/s72-c/IMG_1789.JPG?imgmax=576' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-6171137517227473058</id><published>2007-06-26T23:50:00.000-07:00</published><updated>2007-06-28T06:36:08.636-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Desenvolvimento Web com Django</title><content type='html'>Django é um framework&lt;span style="font-style: italic;"&gt; &lt;/span&gt;web para perfeccionistas com prazos, segundo seu próprio site (&lt;a href="http://www.djangoproject.com/"&gt;http://www.djangoproject.com/&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Ele é todo codificado em Python (&lt;a href="http://python.org/"&gt;python.org&lt;/a&gt;), ou seja, 100% multi-plataforma. E precisa de um dos principais bancos de dados SQL (MySQL, SQLite, PostgreSQL...) para manter persistência de dados. Para atender requisições da web, ele pode ser ligado ao &lt;span style="font-style: italic;"&gt;mod_python&lt;/span&gt; sobre o &lt;span style="font-style: italic;"&gt;Apache&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;fast-cgi&lt;/span&gt; ou outros. E claro, também conta com um servidor próprio para testes de desenvolvimento.&lt;br /&gt;&lt;br /&gt;Seu projeto teve o código aberto por volta de 2005, ao meu ver, isso mostra o quão novo e desconhecido ele é para a comunidade. Sua versão atual é a &lt;span style="font-weight: bold;"&gt;0.96&lt;/span&gt; e ainda não há uma previsão para a &lt;span style="font-weight: bold;"&gt;1.0&lt;/span&gt;. Porém 90% da API já está quase estável e não deverá sofrer muitas modificações.&lt;br /&gt;&lt;br /&gt;Agora irei explicar o modo &lt;span style="font-weight: bold;"&gt;MTV&lt;/span&gt;; &lt;span style="font-style: italic;"&gt;model &lt;/span&gt;- modelo, &lt;span style="font-style: italic;"&gt;template &lt;/span&gt;- molde e &lt;span style="font-style: italic;"&gt;view &lt;/span&gt;- visão.&lt;br /&gt;No &lt;span style="font-weight: bold;"&gt;projeto &lt;/span&gt;da modelagem, o banco de dados é modelado em classes filhas da classe &lt;span style="font-style: italic;"&gt;models&lt;/span&gt; do módulo &lt;span style="font-style: italic;"&gt;django&lt;/span&gt; instalado no Python. Veja um exemplo abaixo:&lt;br /&gt;&lt;pre class="literal-block"&gt;&lt;blockquote&gt;class Reporter(models.Model):&lt;br /&gt;full_name = models.CharField(maxlength=70)&lt;br /&gt;&lt;br /&gt;def __str__(self):&lt;br /&gt;  return self.full_name&lt;br /&gt;&lt;br /&gt;class Article(models.Model):&lt;br /&gt;pub_date = models.DateTimeField()&lt;br /&gt;headline = models.CharField(maxlength=200)&lt;br /&gt;article = models.TextField()&lt;br /&gt;reporter = models.ForeignKey(Reporter)&lt;br /&gt;&lt;br /&gt;def __str__(self):&lt;br /&gt;  return self.headline&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Cada classe será uma tabela no banco da dados, e a inclusão, remoção ou busca dos dados pode e deve ser feita através da API.&lt;pre class="literal-block"&gt;&lt;blockquote&gt;&gt;&gt;&gt; from mysite.models import Reporter, Article&lt;br /&gt;&lt;br /&gt;# No reporters are in the system yet.&lt;br /&gt;&gt;&gt;&gt; Reporter.objects.all()&lt;br /&gt;[]&lt;br /&gt;&lt;br /&gt;# Create a new Reporter.&lt;br /&gt;&gt;&gt;&gt; r = Reporter(full_name='John Smith')&lt;br /&gt;&lt;br /&gt;# Save the object into the database. You have to call save() explicitly.&lt;br /&gt;&gt;&gt;&gt; r.save()&lt;br /&gt;&lt;br /&gt;# Now it has an ID.&lt;br /&gt;&gt;&gt;&gt; r.id&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;# Now the new reporter is in the database.&lt;br /&gt;&gt;&gt;&gt; Reporter.objects.all()&lt;br /&gt;[John Smith]&lt;br /&gt;&lt;br /&gt;# Fields are represented as attributes on the Python object.&lt;br /&gt;&gt;&gt;&gt; r.full_name&lt;br /&gt;'John Smith'&lt;br /&gt;&lt;br /&gt;# Django provides a rich database lookup API.&lt;br /&gt;&gt;&gt;&gt; Reporter.objects.get(id=1)&lt;br /&gt;John Smith&lt;br /&gt;&gt;&gt;&gt; Reporter.objects.get(full_name__startswith='John')&lt;br /&gt;John Smith&lt;br /&gt;&gt;&gt;&gt; Reporter.objects.get(full_name__contains='mith')&lt;br /&gt;John Smith&lt;br /&gt;&gt;&gt;&gt; Reporter.objects.get(id=2)&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;...&lt;br /&gt;DoesNotExist: Reporter does not exist for {'id__exact': 2}&lt;br /&gt;&lt;br /&gt;# Create an article.&lt;br /&gt;&gt;&gt;&gt; from datetime import datetime&lt;br /&gt;&gt;&gt;&gt; a = Article(pub_date=datetime.now(), headline='Django is cool',&lt;br /&gt;...     article='Yeah.', reporter=r)&lt;br /&gt;&gt;&gt;&gt; a.save()&lt;br /&gt;&lt;br /&gt;# Now the article is in the database.&lt;br /&gt;&gt;&gt;&gt; Article.objects.all()&lt;br /&gt;[Django is cool]&lt;br /&gt;&lt;br /&gt;# Article objects get API access to related Reporter objects.&lt;br /&gt;&gt;&gt;&gt; r = a.reporter&lt;br /&gt;&gt;&gt;&gt; r.full_name&lt;br /&gt;'John Smith'&lt;br /&gt;&lt;br /&gt;# And vice versa: Reporter objects get API access to Article objects.&lt;br /&gt;&gt;&gt;&gt; r.article_set.all()&lt;br /&gt;[Django is cool]&lt;br /&gt;&lt;br /&gt;# The API follows relationships as far as you need, performing efficient&lt;br /&gt;# JOINs for you behind the scenes.&lt;br /&gt;# This finds all articles by a reporter whose name starts with "John".&lt;br /&gt;&gt;&gt;&gt; Article.objects.filter(reporter__full_name__startswith="John")&lt;br /&gt;[Django is cool]&lt;br /&gt;&lt;br /&gt;# Change an object by altering its attributes and calling save().&lt;br /&gt;&gt;&gt;&gt; r.full_name = 'Billy Goat'&lt;br /&gt;&gt;&gt;&gt; r.save()&lt;br /&gt;&lt;br /&gt;# Delete an object with delete().&lt;br /&gt;&gt;&gt;&gt; r.delete()&lt;/blockquote&gt;&lt;/pre&gt;No projeto da &lt;span style="font-weight: bold;"&gt;visão&lt;/span&gt;, é definido que informação deve aparecer em alguma página. Não confunda com como deve ser visto, essa função é do &lt;span style="font-weight: bold;"&gt;molde&lt;/span&gt;. Veja o exemplo abaixo:&lt;pre class="literal-block"&gt;&lt;blockquote&gt;def year_archive(request, year):&lt;br /&gt;a_list = Article.objects.filter(pub_date__year=year)&lt;br /&gt;return render_to_response('news/year_archive.html', {'year': year, 'article_list': a_list})&lt;/blockquote&gt;&lt;/pre&gt;Finalmente, no &lt;span style="font-weight: bold;"&gt;molde&lt;/span&gt;, é definido como essa informação retornada pela busca na segunda linha do exemplo acima deverá ser apresentada. Veja abaixo:&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="literal-block"&gt;{% extends "base.html" %}&lt;br /&gt;&lt;br /&gt;{% block title %}Articles for {{ year }}{% endblock %}&lt;br /&gt;&lt;br /&gt;{% block content %}&lt;br /&gt;&amp;lt;h1&amp;gt;Articles for {{ year }}&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;br /&gt;{% for article in article_list %}&lt;br /&gt;&amp;lt;p&amp;gt;{{ article.headline }}&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;By {{ article.reporter.full_name }}&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Published {{ article.pub_date|date:"F j, Y" }}&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;br /&gt;{% endfor %}&lt;br /&gt;{% endblock %}&lt;/pre&gt;&lt;/blockquote&gt;Olhando esse &lt;span style="font-weight: bold;"&gt;molde &lt;/span&gt;rapidamente, podemos perceber que sua linguagem é voltada aos &lt;span style="font-style: italic;"&gt;designers&lt;/span&gt;. Onde quem predomina é o HTML/CSS/JavaScript e o código "estranho" é o mais simplificado possível e de rápido entendimento para possibilitar uma rica integração com a &lt;span style="font-weight: bold;"&gt;visão&lt;/span&gt; definida por um programador.&lt;br /&gt;&lt;br /&gt;O Django também permite o mapeamento de URLs, onde em vez de um site dinâmico usar a URL &lt;span style="font-style: italic;"&gt;/produto.py?id=5&amp;view=detalhado&lt;/span&gt;, poderá fazer o mesmo com &lt;span style="font-style: italic;"&gt;/Produto/5/detalhes&lt;/span&gt; ou até mesmo &lt;span style="font-style: italic;"&gt;/Produtos/Carregador_AC_USB&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;A quem interessar, sugiro uma boa lida na documentação presente no site do django e qualquer coisa, mandar um e-mail para mim: david (ponto) kwast (em) gmail.&lt;br /&gt;&lt;br /&gt;Referências e links&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.djangoproject.com/"&gt;http://www.djangoproject.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.djangoproject.com/documentation/tutorial1/"&gt;http://www.djangoproject.com/documentation/tutorial1/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.djangobook.com/"&gt;http://www.djangobook.com/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-6171137517227473058?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/6171137517227473058/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=6171137517227473058' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/6171137517227473058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/6171137517227473058'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2007/06/desenvolvimento-web-com-django.html' title='Desenvolvimento Web com Django'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7739609142389674191.post-6612500634625938988</id><published>2007-05-31T21:29:00.000-07:00</published><updated>2007-06-28T07:49:41.512-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='e61'/><category scheme='http://www.blogger.com/atom/ns#' term='symbian'/><title type='text'>Python no Nokia e61 (pyS60)</title><content type='html'>Acabei de adquirir um Nokia e61 e pretendo começar a desenvolver uns programas em Python.&lt;br /&gt;Minha experiência nessa linguagem não é muita, mas já posso garantir que consigo fazer mais coisas que fazia com Java ou C++/QT.&lt;br /&gt;Confesso que achei muito legal essa idéia da Nokia de olhar pra outra linguagem para portáteis, e fiquei muito feliz por ter sido Python. E o motivo vou mostrar a seguir.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;pre style=""&gt;&lt;span  lang="EN-US" style="color:blue;"&gt;import&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; javax.microedition.midlet.*;&lt;br /&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="color:blue;"&gt;import&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; javax.microedition.lcdui.*;&lt;br /&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="color:blue;"&gt;public class&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; HelloJ2ME &lt;span style="color:blue;"&gt;extends&lt;/span&gt; MIDlet &lt;span style="color:blue;"&gt;implements&lt;/span&gt; CommandListener{&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;Display&lt;/span&gt; display;&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;TextField&lt;/span&gt; caixaDeTextoHello;&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;Command&lt;/span&gt; comandoDeSaida;&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;Form&lt;/span&gt; formularioPrincipal;&lt;br /&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; HelloJ2ME(){&lt;br /&gt;&lt;span style="color:green;"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;display = Display.getDisplay(this);&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;formularioPrincipal = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Form("HelloJ2ME");&lt;/span&gt;&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;comandoDeSaida = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Command("Exit", Command.SCREEN,1);&lt;/span&gt;&lt;span  lang="EN-US" style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt; &lt;/span&gt;caixaDeTextoHello = &lt;span style="color:blue;"&gt;new&lt;/span&gt; TextField("Text","Hello World!",15,TextField.ANY);&lt;/span&gt;&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;formularioPrincipal.addCommand(comandoDeSaida);&lt;/span&gt;&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;formularioPrincipal.append(caixaDeTextoHello);&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;formularioPrincipal.setCommandListener(this);}&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;public void startApp(){&lt;span style="color:green;"&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;display.setCurrent(formularioPrincipal);}&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;public void pauseApp()&lt;/span&gt;{}&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span  lang="EN-US" style="color:blue;"&gt;public void&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; destroyApp(&lt;span style="color:blue;"&gt;boolean&lt;/span&gt; incondicional)&lt;/span&gt;{&lt;span style="" lang="EN-US"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;public void&lt;/span&gt; commandAction(Command comando, Displayable s)&lt;/span&gt;{&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;if (comando == comandoDeSaida){&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;destroyApp(&lt;span style="color:blue;"&gt;false&lt;/span&gt;);&lt;span style="color:green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;notifyDestroyed();}}}&lt;/pre&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;O resultado: &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: left;"&gt;&lt;img src="http://www.wirelessbrasil.org/wirelessbr/colaboradores/corbera_martins/fig001.jpg" border="0" height="133" width="99" /&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;a href="http://www.wirelessbrasil.org/wirelessbr/colaboradores/corbera_martins/j2me_02.html"&gt;Referência&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p align="center"&gt;&lt;/p&gt;Tudo isso foi o primeiro exemplo de HelloWorld em J2ME que achei no Google, pelo tamanho acredito que existam outros menores.&lt;br /&gt;Agora vou colocar um do Python para Symbian.&lt;br /&gt;&lt;div class="codesnip-container"&gt; &lt;div class="codesnip"&gt;  &lt;div class="de1"&gt;&lt;span class="kw1"&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; appuifw&lt;/div&gt;  &lt;div class="de1"&gt;appuifw.&lt;span class="me1"&gt;app&lt;/span&gt;.&lt;span class="me1"&gt;title&lt;/span&gt; = u&lt;span class="st0"&gt;“Hello World”&lt;/span&gt;&lt;/div&gt;  &lt;div class="de1"&gt; &lt;/div&gt; appuifw.&lt;span class="me1"&gt;note&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;u&lt;span class="st0"&gt;“Hello World”&lt;/span&gt;, &lt;span class="st0"&gt;‘info’&lt;/span&gt;&lt;span class="br0"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;img id="image18" src="http://www.danilocesar.com/blog/wp-content/uploads/2006/01/Screenshot0005.jpg" alt="Phyton_hello_world" /&gt;&lt;br /&gt;&lt;a href="http://images.google.com/imgres?imgurl=http://www.danilocesar.com/blog/wp-content/uploads/2006/01/Screenshot0005.jpg&amp;imgrefurl=http://www.danilocesar.com/blog/2006/01/25/phyton-for-s60-programar-celulares-nunca-foi-tao-facil/&amp;amp;amp;amp;amp;h=208&amp;w=176&amp;amp;sz=40&amp;hl=en&amp;amp;start=1&amp;um=1&amp;amp;amp;amp;amp;tbnid=fECEBz9bAkPGXM:&amp;tbnh=105&amp;amp;tbnw=89&amp;amp;prev=/images%3Fq%3Dpys60%2Bhello%26svnum%3D100%26um%3D1%26hl%3Den%26client%3Dfirefox-a%26rls%3Dorg.mozilla:en-GB:official"&gt;Referência&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span class="br0"&gt;&lt;/span&gt; &lt;/div&gt; &lt;/div&gt;Entendeu meu ponto de vista? E tem mais duas outras vantagens (sempre falando do meu ponto de vista), o python é a versão 2.2.2 completa (a atual é 2.5.1, mas acreditem, não tem muita coisa q faça falta) e é possível instalar o intepretador, que no caso de aparelhos com teclado QWERTY, pode ajudar a passar o tempo para pessoas que preferem programar em vez de jogar no celular.&lt;br /&gt;Bom, por hoje é tudo, espero estar postando mais novidades e exemplos de código Python para celulares Nokia.&lt;br /&gt;&lt;br /&gt;abraços&lt;br /&gt;&lt;br /&gt;mais informações em&lt;br /&gt;&lt;a href="http://wiki.embeddedacademy.org/index.php/PyS60_Mini-course"&gt;http://wiki.embeddedacademy.org/index.php/PyS60_Mini-course&lt;/a&gt;&lt;br /&gt;e&lt;br /&gt;&lt;a href="http://wiki.opensource.nokia.com/projects/Python_for_S60"&gt;http://wiki.opensource.nokia.com/projects/Python_for_S60&lt;/a&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7739609142389674191-6612500634625938988?l=blog.kwast.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kwast.net/feeds/6612500634625938988/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7739609142389674191&amp;postID=6612500634625938988' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/6612500634625938988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7739609142389674191/posts/default/6612500634625938988'/><link rel='alternate' type='text/html' href='http://blog.kwast.net/2007/05/python-no-nokia-e61-pys60.html' title='Python no Nokia e61 (pyS60)'/><author><name>David Kwast</name><uri>http://www.blogger.com/profile/00722530786608289032</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-IwdZmXdc5M4/TYZMa9FRr6I/AAAAAAAAGaY/LV5OOvhLZyc/s220/P1000709.JPG'/></author><thr:total>2</thr:total></entry></feed>
