<?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-9746408</id><updated>2011-04-21T17:35:02.392-07:00</updated><title type='text'>John's Programming Log</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codelog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codelog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John</name><uri>http://www.blogger.com/profile/10602122271513232813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9746408.post-110445570674711670</id><published>2004-12-30T16:57:00.000-08:00</published><updated>2004-12-30T17:22:16.543-08:00</updated><title type='text'>And JavaScript wrath strikes again</title><content type='html'>Bom, eis que tentei começar as coisas pelo jeito 'sofisticado e elegante', ao invés de ir pelo simples. Explico-vos.&lt;br /&gt;&lt;br /&gt;Hoje foi dia de implementar o envio de informações do cliente ao servidor. Primeiramente preparei um mecanismo rudimentar, por enquanto, para enviar para o browser um top Widget (&lt;span style="font-family:courier new;"&gt;AppFace&lt;/span&gt;) como apresentação. OK. Então, ali teria um botão para enviar um evento para testar a sincronização. Aí começa o suplício.&lt;br /&gt;Inventei de usar um objeto &lt;span style="font-family:courier new;"&gt;XMLHttpRequest&lt;/span&gt; para fazer a requisição sem precisar de outro frame, e aí estava o problema: como eu escuto por eventos em outra porta, por precisar de um fluxo constante de dados vindo pelo stream original; o Mozilla não me permite conectar em outro 'servidor' (outra porta também) sem ter &lt;span style="font-family:courier new;"&gt;UniversalBrowserRead&lt;/span&gt;, o qual eu não tinha como obter. Tenta alteração aqui, tenta alteração ali, e nada. Realmente eu não tinha como usar o XMLHttpRequest. Porcaria. Desfaz alteração aqui, desfaz alteraçao ali. Volta pro começo.&lt;br /&gt;&lt;br /&gt;No fim, tudo que precisei fazer foi, por javascript (&lt;span style="font-family:courier new;"&gt;function sendEvent()&lt;/span&gt;), dar um &lt;span style="font-family:courier new;"&gt;submit()&lt;/span&gt; num form escondido no &lt;span style="font-family:courier new;"&gt;controlFrame&lt;/span&gt;, e, ao tratá-lo, enviar um HTTP 204 (no content). Tão mais simples... e funcionou tão bem...&lt;br /&gt;&lt;br /&gt;Ao fim, já temos um mecanismo que recebe direito eventos da apresentação e pode tratar eles, apesar de ainda não o fazer. Muito bom.&lt;br /&gt;&lt;br /&gt;Uma revisão das coisas a serem feitas nos indica:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;precisamos ainda poder delegar a um componente um evento recebido; isto será fácil;&lt;br /&gt;  &lt;/li&gt;   &lt;li&gt;precisamos definir direito e dar um lock temporário na API dos componentes gráficos. Se não a coisa pode ficar caótica, apesar de ainda estar bem no começo;&lt;/li&gt;   &lt;li&gt;dar jeito de fazer embedded browser funcionar para carregar a aplicação ele próprio;&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; Das coisas que estavam por fazer, já está definido:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;o nome do framwork é o criativíssimo PyWAF: Python Web-like Application Framework. Pelo menos é um nome que dá um acrônimo sonoro. PyWAF.&lt;/li&gt;   &lt;li&gt;a sincronização de eventos está ok;&lt;/li&gt; &lt;/ul&gt; Creio que o próximo passo é melhorar o set de componentes para eles conseguirem fazer algo prestável.&lt;br /&gt;&lt;br /&gt;Python é legal.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9746408-110445570674711670?l=codelog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelog.blogspot.com/feeds/110445570674711670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9746408&amp;postID=110445570674711670' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110445570674711670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110445570674711670'/><link rel='alternate' type='text/html' href='http://codelog.blogspot.com/2004/12/and-javascript-wrath-strikes-again.html' title='And JavaScript wrath strikes again'/><author><name>John</name><uri>http://www.blogger.com/profile/10602122271513232813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9746408.post-110428509718526718</id><published>2004-12-28T17:45:00.000-08:00</published><updated>2004-12-29T16:03:27.303-08:00</updated><title type='text'>News from the front</title><content type='html'>E mais um dia de desenvolvimento:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Já há um PyMozEmbedd funcionando, mas ele, por alguma razão que eu ainda não entendi, não completa uma conexão sequer quando chamado de dentro do mesmo processo que o resto da aplicação; entretanto, abre outras páginas e, rodando stand alone contra o servidor, funciona perfeitamente. Tenho que dar jeito nisto.&lt;/li&gt;   &lt;li&gt;Já envio um esqueleto HTML pro browser e já tem lugar pra encaixar algum comportamento.&lt;/li&gt; &lt;/ul&gt; &lt;ul&gt;   &lt;li&gt;Dei uma limpada na estrutura do código, separando ele em arquivos diferentes, conforme for pertinente. Nisto, também, todos os widgets foram para o seu módulo.&lt;/li&gt; &lt;/ul&gt; Partes importantes que eu preciso fazer agora são implementar um controle da aplicação em Javascript e fazer os Widgets fazerem algo de verdade. Vamos ver no que dá... eu estava me enrolando um pouco pra fazer uma função javascript submeter um form de outro frame: o Mozilla me informava que eu não tinha permissão para acessar o objeto. Provavelmente isto tem a ver com o fato que eu estava buscando cada frame por uma porta diferente e ele restringe o acesso às informações entre frames que vêm de servidores diferentes. Coisa bastante inteligente, na verdade.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9746408-110428509718526718?l=codelog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelog.blogspot.com/feeds/110428509718526718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9746408&amp;postID=110428509718526718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110428509718526718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110428509718526718'/><link rel='alternate' type='text/html' href='http://codelog.blogspot.com/2004/12/news-from-front.html' title='News from the front'/><author><name>John</name><uri>http://www.blogger.com/profile/10602122271513232813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9746408.post-110383456622790406</id><published>2004-12-23T13:40:00.000-08:00</published><updated>2004-12-23T14:26:47.360-08:00</updated><title type='text'>Notas aleatórias</title><content type='html'>Definitivamente não gostei do fato de &lt;span style="font-family:courier new;"&gt;BaseHTTPServer.py&lt;/span&gt; logar cada conexão por default. Vou ter que alterar algumas coisas no módulo. Inclusive a &lt;span style="font-family:courier new;"&gt;DEFAULT_ERROR_MESSAGE.&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9746408-110383456622790406?l=codelog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelog.blogspot.com/feeds/110383456622790406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9746408&amp;postID=110383456622790406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110383456622790406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110383456622790406'/><link rel='alternate' type='text/html' href='http://codelog.blogspot.com/2004/12/notas-aleatrias.html' title='Notas aleatórias'/><author><name>John</name><uri>http://www.blogger.com/profile/10602122271513232813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9746408.post-110382261381303291</id><published>2004-12-23T09:21:00.000-08:00</published><updated>2004-12-23T09:23:33.813-08:00</updated><title type='text'>Mais coisas a fazer</title><content type='html'>A sincronização de eventos está ok.&lt;br /&gt;Algumas coisas novas que ainda têm de ser feitas:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Encontrar um nome para o framework&lt;/li&gt;   &lt;li&gt;Definir uma api para implementação dos componentes de tela (Widgets)&lt;/li&gt;   &lt;li&gt;Definir uma api para composição de interface&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9746408-110382261381303291?l=codelog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelog.blogspot.com/feeds/110382261381303291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9746408&amp;postID=110382261381303291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110382261381303291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110382261381303291'/><link rel='alternate' type='text/html' href='http://codelog.blogspot.com/2004/12/mais-coisas-fazer.html' title='Mais coisas a fazer'/><author><name>John</name><uri>http://www.blogger.com/profile/10602122271513232813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9746408.post-110376791150731269</id><published>2004-12-22T17:26:00.000-08:00</published><updated>2004-12-23T09:21:00.983-08:00</updated><title type='text'>Initial Report</title><content type='html'>Então há um blog novamente.&lt;br /&gt;&lt;br /&gt;Mas não nos prendamos a detalhes e vamos ao que interessa.&lt;br /&gt;&lt;br /&gt;Há este projeto de um framework para desenvolvimento de aplicações executando localmente, mas com uma interface web. Interessante pra desenvolver alguma coisa usando web (browser) como meio, mas não tem em vista uma aplicação web propriamente dita. O que estou desenvolvendo cuida da comunicação entre o browser (cliente) e a aplicação (servidor) fazendo todo o trabalho de comunicação entre os dois pela rede. Para guiar o desenvolvimento e para criar situações de problemas reais, assim que possível começará a ser desenvolvida uma aplicação exemplo; a saber, um RSS aggregator.&lt;br /&gt;&lt;br /&gt;Comecei o desenvolvimento disso segunda feira, fazendo um esboço bem geral do que eu queria, do que eu precisaria fazer e de como eu poderia. Nisto decidi as linhas gerais da arquitetura e que seria útil ter um componente servidor http pronto, para que eu não precisasse escrever um eu mesmo. Comecei a tentar fazer em python, mas a linguagem é nova e só peguei o jeito com ela hoje, o que mostra que ela é bem fácil (mas isto também foge ao ponto, apesar de que vai ser de algum entrave pro desenvolvimento). Provavelmente isto vai ser só um protótipo e, após ter resolvido grande parte dos problemas de design do framework, vou reimplementar em Java.&lt;br /&gt;&lt;br /&gt;Até o momento já tem o servidor que vai mandar os dados pro browser e um servidor que escuta por eventos. Já dá pra ouvir de um lado e falar de outro. Estão em thread separadas. Há também um mecanismo rudimentar, não testado, de componentes.&lt;br /&gt;&lt;br /&gt;Os pontos importantes de se preparar logo é:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Conseguir sincronizar o envio de algum dado com a ocorrência de algum evento&lt;/li&gt;&lt;li&gt;Delegar a um componente registrado a função recebida pelo tratador de eventos&lt;br /&gt; &lt;/li&gt;  &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9746408-110376791150731269?l=codelog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codelog.blogspot.com/feeds/110376791150731269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9746408&amp;postID=110376791150731269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110376791150731269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9746408/posts/default/110376791150731269'/><link rel='alternate' type='text/html' href='http://codelog.blogspot.com/2004/12/initial-report.html' title='Initial Report'/><author><name>John</name><uri>http://www.blogger.com/profile/10602122271513232813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
