<?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:blogger='http://schemas.google.com/blogger/2008' 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-8300392417373395051</id><updated>2024-08-29T23:00:28.293+01:00</updated><category term="Guiões SO"/><category term="Guiões SD"/><category term="Brainfuck"/><category term="Haskell"/><category term="Bibliotecas"/><category term="Excepções"/><category term="Ferramentas"/><category term="Testes"/><title type='text'>I&#39;m compiling...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://imcompiling.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-6125568622775659008</id><published>2010-12-23T19:00:00.000+00:00</published><updated>2011-03-04T03:41:09.251+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>run :: BF -&amp;gt; IO ()</title><summary type="text">(continuando…)  A representação da máquina que usamos até aqui (um par com o índice onde está a cabeça, e a lista com as células) não é muito eficiente, porque é necessário percorrer a lista recursivamente para ler ou alterar o valor da célula actual.      Existe uma outra forma de representar a máquina que é muito mais eficiente. Basicamente, consiste em usar duas listas: uma para as células à </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/run-bf-io.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/6125568622775659008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/6125568622775659008'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/run-bf-io.html' title='run :: BF -&amp;gt; IO ()'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_HEHIv-I_ij0/TRK1b1G8_oI/AAAAAAAAAJs/WMIX31crcuk/s72-c/Avan%C3%A7ar%20para%20a%20direita%5B5%5D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-7023198621308027499</id><published>2010-12-23T02:02:00.000+00:00</published><updated>2011-03-04T03:40:48.304+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>run :: BF -&amp;gt;</title><summary type="text">(continuando…)  Falta o While!  Depois de ter funções que correm cada um dos diferentes comandos em BF, vamos agora juntar tudo até chegar à função run :: BF –&amp;gt; IO().      Em primeiro lugar vamos criar uma função que corre apenas um comando, mas suporta qualquer um deles. Basicamente queremos fazer pattern matching para chamar as pequenas funções que escrevemos atrás.  runOne :: BFCommand -&amp;gt</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/run-bf.html#comment-form' title='11 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/7023198621308027499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/7023198621308027499'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/run-bf.html' title='run :: BF -&amp;gt;'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-9130388471773011315</id><published>2010-12-23T00:16:00.001+00:00</published><updated>2011-03-04T03:39:48.198+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>run ::</title><summary type="text">Na sequência da série de posts sobre a escrita de instâncias de Show e de Read em Haskell, este post trata da implementação de um interpretador de brainfuck.      Este interpretador terá de efectuar tanto input como output, e por isso deverá usar o tipo de dados paramétrico IO. Este tipo de dados costuma causar confusão nos aprendizes de Haskell por várias razões, algumas das quais são:     input</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/run.html#comment-form' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/9130388471773011315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/9130388471773011315'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/run.html' title='run ::'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-8503656680045743507</id><published>2010-12-09T23:55:00.003+00:00</published><updated>2011-03-04T03:39:20.472+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>read :: Read a =&amp;gt; String –&amp;gt; a</title><summary type="text">(continuando…)  readsPrec usando readsPrec usando readsPrec  Bem, tal como fizemos com o Show, vamos começar por Read BFCommand, fazer tudo menos o While, fazer o Read BF à custa do Read BFCommand, e depois acabar a parte do While no Read BFCommand à custa do Read BF. Espero que isto não vos dê a volta a cabeça…      A função read consome o texto todo e devolve um valor. A função readsPrec no </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read-read-string_09.html#comment-form' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8503656680045743507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8503656680045743507'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read-read-string_09.html' title='read :: Read a =&amp;gt; String –&amp;gt; a'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-4189583422206988320</id><published>2010-12-09T22:16:00.001+00:00</published><updated>2011-03-04T03:38:44.766+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>read :: Read a =&amp;gt; String -&amp;gt;</title><summary type="text">(continuando…) Show foi fácil, então e Read? Agora que já instanciamos Show, vamos instanciar Read. Esta é mais complicada que Show, mas não é inacessível. Em primeiro lugar, vamos inspecionar a classe Read.
&amp;gt; :i Readclass Read a where    readsPrec :: Int -&amp;gt; ReadS a-- ... mais outras que não interessam ...-- ... montes e montes de instâncias ...
Temos de definir uma função que recebe um </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read-read-string.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4189583422206988320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4189583422206988320'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read-read-string.html' title='read :: Read a =&amp;gt; String -&amp;gt;'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-9081193526364383017</id><published>2010-12-09T21:47:00.001+00:00</published><updated>2011-03-04T03:38:25.112+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>read :: Read a =&amp;gt;</title><summary type="text">(continuando…)  show usando show usando show  Mas como é que obtemos as representações textuais das instruções?  Muito simples! Usamos a classe Show!      Mas para isso temos de instanciar Show para BFCommand, definindo show :: BFCommand –&amp;gt; String:  instance Show BFCommand where    show = undefined

Para já vamos deixar assim e acabar de definir show :: BF –&amp;gt; String.

Podemos então agora </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read-read.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/9081193526364383017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/9081193526364383017'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read-read.html' title='read :: Read a =&amp;gt;'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-389392404672673196</id><published>2010-12-09T20:07:00.001+00:00</published><updated>2011-03-04T03:38:02.187+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Brainfuck"/><category scheme="http://www.blogger.com/atom/ns#" term="Haskell"/><title type='text'>read ::</title><summary type="text">Ouvi dizer que havia dificuldades em perceber como se definem instâncias da classe Read em Haskell, apesar das explicações dos professores. Esta é a minha tentativa de iluminar algumas mentes sobre isso.  Parece que há um trabalho sobre uma linguagem de programação estranha, mas que acho muito interessante chamada brainfuck. Não vi o enunciado, mas ao que parece é necessário fazer pelo menos uma </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/389392404672673196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/389392404672673196'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/12/read.html' title='read ::'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-4286776590835894563</id><published>2010-01-22T16:10:00.003+00:00</published><updated>2011-03-04T03:37:37.999+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Sockets cliente/servidor</title><summary type="text">O que é um socket?  De uma forma muito simples e rápida (visto isto ser matéria que diz respeito a Comunicações por Computador), um socket é uma das pontas de um canal de comunicação entre duas máquinas.      Exercício 1: Servidor de eco  Para implementar o servidor de eco vamos usar a classe java.net.ServerSocket, que serve para receber conexões externas com o método accept. Este método devolve </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/01/sockets-clienteservidor.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4286776590835894563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4286776590835894563'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/01/sockets-clienteservidor.html' title='Sockets cliente/servidor'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-1398995040519902570</id><published>2010-01-08T18:09:00.001+00:00</published><updated>2011-03-04T03:37:08.927+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bibliotecas"/><category scheme="http://www.blogger.com/atom/ns#" term="Testes"/><title type='text'>Testes</title><summary type="text">Não tenho tido tempo para acabar a série sobre excepções ou para fazer um post sobre sockets (estou a tratar disso :). Aqui fica um post (a “pedido” de um colega) que já tinha preparado há uns tempos…    Como é que testam o vosso código?      Testes manuais     Monta-se um num instante com umas text boxes e um botão para executar um método em particular. Ou então faz-se algo semelhante na linha </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2010/01/testes.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/1398995040519902570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/1398995040519902570'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2010/01/testes.html' title='Testes'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_HEHIv-I_ij0/S0d0x-iz8oI/AAAAAAAAAH0/b1qWquvM8kw/s72-c/Screenshot%5B27%5D_thumb.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-211099875084386746</id><published>2009-12-08T16:53:00.002+00:00</published><updated>2011-03-04T03:36:38.953+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Excepções"/><title type='text'>Excepções, parte II (vários tipos de erros)</title><summary type="text">No último post falei de excepções e das instruções fornecidas por linguagens de alto-nível para as manipular. Neste vou falar das situações em que estas surgem e como devem ser tratadas.        Tipos de erro  Os erros que podem surgir numa aplicação podem ser divididos em quatro categorias, consoante com a sua causa: erros do programador, erros do utilizador, erros de ambiente e o que eu costumo </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/12/excepcoes-parte-ii-identificar-e-evitar.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/211099875084386746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/211099875084386746'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/12/excepcoes-parte-ii-identificar-e-evitar.html' title='Excepções, parte II (vários tipos de erros)'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-8161417351913385340</id><published>2009-12-02T06:34:00.001+00:00</published><updated>2011-03-04T03:36:19.434+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Excepções"/><title type='text'>Excepções, parte I (de códigos de erro a excepções)</title><summary type="text">Códigos de erro  Em C há muitas funções que devolvem valores especiais para indicar erros. Esta estratégia, embora simples, apresenta vários defeitos:     o tipo de dados de retorno não pode ser usado por completo;     o código que chama estas funções é bastante chato de escrever e difícil de ler (são necessário ifs por todo o lado);     é fácil esquecermo-nos de testar os valores de retorno;</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/12/excepcoes-parte-i-de-codigos-de-erro.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8161417351913385340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8161417351913385340'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/12/excepcoes-parte-i-de-codigos-de-erro.html' title='Excepções, parte I (de códigos de erro a excepções)'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-4273770343228455497</id><published>2009-12-01T01:16:00.001+00:00</published><updated>2011-03-04T03:35:47.926+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Usar locks explícitas, correctamente</title><summary type="text">Por vezes synchronized não serve e temos de usar locks explicitamente. No entanto, quando abandonamos a simplicidade de synchronized, também abandonamos as suas garantias de segurança e robustez.      Código frágil, aka vidro  Uma transformação ingénua de código com locks implícitas para locks explícitas seria desta forma:  // implícitasynchronized(obj) {    // região crítica}// explícita (não é </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/12/usar-locks-explicitas-correctamente.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4273770343228455497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4273770343228455497'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/12/usar-locks-explicitas-correctamente.html' title='Usar locks explícitas, correctamente'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-162964656254442466</id><published>2009-11-05T13:38:00.001+00:00</published><updated>2011-03-04T03:35:21.295+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Variáveis de condição (semáforo)</title><summary type="text">Por esta altura já devem dominar wait conditions. Por isso vou só elaborar rapidamente o que é um semáforo, e mostrar o código.      Um semáforo é uma primitiva de concurrência que protege um determinado número de recursos. As threads podem adquirir e libertar esses recursos. Embora isto pareça semelhante a locks, um semáforo é muito mais liberal (e flexível):     não existe o conceito de </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/11/variaveis-de-condicao-semaforo.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/162964656254442466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/162964656254442466'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/11/variaveis-de-condicao-semaforo.html' title='Variáveis de condição (semáforo)'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-8932876059845924704</id><published>2009-11-05T12:35:00.001+00:00</published><updated>2011-03-04T03:34:47.951+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Variáveis de condição (BoundedBuffer)</title><summary type="text">O enunciado deste exercício pede a implementação de um bounded buffer que funcione correctamente com múltiplas threads. Um bounded buffer como o próprio nome indica é um buffer de tamanho fixo. É necessário que depois de cheio as tentativas de adicionar novos dados ao buffer bloqueiem, e o mesmo para tentativas de retirar dados quando este estiver vazio.      Este tipo de estrutura pode ser usada</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/11/variaveis-de-condicao-boundedbuffer.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8932876059845924704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8932876059845924704'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/11/variaveis-de-condicao-boundedbuffer.html' title='Variáveis de condição (BoundedBuffer)'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_HEHIv-I_ij0/SvLGify_CkI/AAAAAAAAAGM/-2weYhhKWYc/s72-c/Rollingbuffer_thumb.png?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-2792013798306063150</id><published>2009-10-30T18:00:00.001+00:00</published><updated>2011-03-04T03:34:27.540+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Variáveis de condição (banco)</title><summary type="text">O primeiro exercício do terceiro guião pede para reimplementar a classe Banco de modo a bloquear as operações que conduzam a saldos negativos. Como o título é “Variáveis de Condição” o que realmente se pretende é que as operações que conduzam a saldos negativos bloqueiem até que seja possível efectuá-las e não que sejam proibidas, para resolvermos este problema com variáveis de condição em lugar </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/10/variaveis-de-condicao-banco.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/2792013798306063150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/2792013798306063150'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/10/variaveis-de-condicao-banco.html' title='Variáveis de condição (banco)'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-621304121503747773</id><published>2009-10-14T15:18:00.001+01:00</published><updated>2011-03-04T03:33:58.907+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Exclusão Mútua (deadlocks)</title><summary type="text">Agora é-nos pedido para reimplementar o banco com exclusão mútua ao nível das contas individuais.  O que significa isto?      Até agora no nosso banco ocorre apenas uma transacção de cada vez porque temos todos os métodos críticos marcados com synchronized. Isto significa que enquanto alguém está a efectuar uma transacção, ninguém pode mexer em nenhuma conta.  No entanto não existe problema </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/10/exclusao-mutua-deadlocks.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/621304121503747773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/621304121503747773'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/10/exclusao-mutua-deadlocks.html' title='Exclusão Mútua (deadlocks)'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-2023185178858416565</id><published>2009-10-14T15:17:00.001+01:00</published><updated>2011-03-04T03:32:59.171+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Exclusão Mútua</title><summary type="text">No último post encontrámos um problema que surge numa situação tão simples como incrementar um contador, simplesmente porque introduzimos paralelismo sem termos controlo sobre esse paralelismo.      Para resolver este problema temos de garantir que enquanto uma thread está a incrementar o contador, nenhuma das outras threads faz o mesmo. Por outras palavras (mais que mil?), queremos que as </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/10/exclusao-mutua.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/2023185178858416565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/2023185178858416565'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/10/exclusao-mutua.html' title='Exclusão Mútua'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_HEHIv-I_ij0/StXdXYo3kQI/AAAAAAAAAGE/gJ4lNcPkZNo/s72-c/Noracecondition_thumb1.png?imgmax=800" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-408076069002790219</id><published>2009-10-08T02:09:00.001+01:00</published><updated>2011-03-04T03:32:17.160+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SD"/><title type='text'>Criação de Threads</title><summary type="text">Teoria  Em cada instante na nossa máquina existem vários processos a correr em simultâneo. Não importa se temos um único processador/core ou mais que um processador/core. O sistema operativo faz com que os processos corram em simultâneo, ou melhor, com que os processos deêm a impressão de correr em simultâneo. Isto permite que eu escreva este post enquanto ouço música, entre outras coisas.      </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/10/criacao-de-threads.html#comment-form' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/408076069002790219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/408076069002790219'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/10/criacao-de-threads.html' title='Criação de Threads'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_HEHIv-I_ij0/Ss1Rqow7GNI/AAAAAAAAAF8/2DgJuB-BMZM/s72-c/Race%20condition_thumb%5B1%5D.png?imgmax=800" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-5590032885343516981</id><published>2009-06-29T11:11:00.001+01:00</published><updated>2011-03-04T03:30:43.683+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ferramentas"/><title type='text'>Mais Makefiles</title><summary type="text">Para aqueles que ainda não usam Makefiles (porque “dá muito trabalho”, porque “não sei fazer isso” ou porque “não vou perder tempo”) deixo aqui um template (mais ou menos) genérico para compilar pequenos programas em C.      Makefile  CONFIG=config.mkDEPS=deps.mkinclude $(CONFIG) SRC_FILES=$(wildcard *.c)HDR_FILES=$(wildcard *.h)OBJ_FILES=$(patsubst %.c,%.o,$(SRC_FILES))LDLIBS=$(patsubst %,-l%,$(</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/06/mais-makefiles.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/5590032885343516981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/5590032885343516981'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/06/mais-makefiles.html' title='Mais Makefiles'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-4020135398868157214</id><published>2009-06-27T15:19:00.001+01:00</published><updated>2011-03-04T03:30:08.831+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SO"/><title type='text'>Pipelines</title><summary type="text">…ou em brasileiro: canalizações :)  $ man 7 pipe

Como diz no manual um pipe é um canal de comunicação unidireccional entre dois processos. Um dos processos escreve (com write) numa ponta, o outro lê (com read) na outra.





O que temos de fazer para a nossa shell permitir este tipo de comunicação entre processos é o seguinte:


  processar a string do comando para detectar pedidos de pipes; 

</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/06/pipes.html#comment-form' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4020135398868157214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/4020135398868157214'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/06/pipes.html' title='Pipelines'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-8540466836219328444</id><published>2009-06-27T15:13:00.002+01:00</published><updated>2011-03-04T03:12:38.059+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SO"/><title type='text'>Redireccionar as standard streams</title><summary type="text">Para adicionar à shell a possibilidade de redireccionar o standard input e o standard output de e para ficheiros temos de usar a system call dup2:      $ man dup2  Esta system call faz com que o descritor passado no segundo parâmetro aponte para o mesmo ficheiro que o primeiro. Se o segundo descritor já estava aberto, este é fechado primeiro. Depois de chamar esta função tanto faz usar o primeiro</summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/06/redireccionar-as-standard-streams.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8540466836219328444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/8540466836219328444'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/06/redireccionar-as-standard-streams.html' title='Redireccionar as standard streams'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-3319569262125448134</id><published>2009-06-17T15:36:00.000+01:00</published><updated>2011-03-04T03:12:10.138+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SO"/><title type='text'>Sinais, parte II</title><summary type="text">Background/Foreground  Até aqui a nossa shell corre sempre os processos em foreground. Isto significa que a shell pára até cada processo terminar. Assim não podemos correr mais que um processo de cada vez.      Para isso temos de manter alguns processos em background. Isto significa apenas que a shell não espera por eles. Temos no entanto de manter uma lista destes processos. Vou recorrer a uma </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/06/sinais-parte-ii.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/3319569262125448134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/3319569262125448134'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/06/sinais-parte-ii.html' title='Sinais, parte II'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-6796823837993931946</id><published>2009-06-17T13:50:00.001+01:00</published><updated>2011-03-04T03:10:13.019+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Testes"/><title type='text'>Testes, exames, essas cenas</title><summary type="text">Queria pedir desculpa a todos aqueles que me pediram ajuda no domingo por não ter respondido a ninguém. Não tenho net em casa, e por isso só reparei nos comentários bastante tarde. Também tive teste de CG na segunda-feira e por isso só comecei a estudar para SO segunda à tarde. Ainda acabei o código dos guiões que me faltavam, mas só perto da meia-noite. Duvido muito que por essa altura tenham </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/06/testes-exames-essas-cenas.html#comment-form' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/6796823837993931946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/6796823837993931946'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/06/testes-exames-essas-cenas.html' title='Testes, exames, essas cenas'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-1029811494896832698</id><published>2009-05-25T09:27:00.001+01:00</published><updated>2011-03-04T03:06:49.729+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SO"/><title type='text'>Sinais, parte I</title><summary type="text">Um pequeno aparte  Bem, eu não gosto muito deste guião. A página do manual da system call signal que é apresentada no guião, começa assim:     The behavior of signal() varies across Unix versions, and has also varied historically across different versions of Linux. Avoid its use: use sigaction(2) instead.   Depois de ler isto é óbvio porque é que eu prefiro sigaction. Mas a sigaction é </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/05/sinais-parte-i.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/1029811494896832698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/1029811494896832698'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/05/sinais-parte-i.html' title='Sinais, parte I'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8300392417373395051.post-7677528294596495168</id><published>2009-05-25T09:24:00.001+01:00</published><updated>2011-03-04T03:05:37.163+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bibliotecas"/><category scheme="http://www.blogger.com/atom/ns#" term="Guiões SO"/><title type='text'>Execução de programas</title><summary type="text">A lista de system calls deste guião é deveras assustadora. Não contando com a system, são nada mais, nada menos que sete variantes da mesma função: exec.      A system é bastante simples. Recebe uma string com um comando para correr, executa-o e returna o seu código de saída. Experimentem executar isto:  #include &amp;lt;stdlib.h&amp;gt;int main(void){    int exit = system(&amp;quot;ls –l&amp;quot;);    return </summary><link rel='replies' type='text/html' href='http://imcompiling.blogspot.com/2009/05/execucao-de-programas.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/7677528294596495168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8300392417373395051/posts/default/7677528294596495168'/><link rel='alternate' type='text/html' href='http://imcompiling.blogspot.com/2009/05/execucao-de-programas.html' title='Execução de programas'/><author><name>Martinho Fernandes</name><uri>http://www.blogger.com/profile/10298505469149672373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-GI-l2npj3QY/TdmYyP3ExZI/AAAAAAAAAKk/pj73mRSvXhw/s1600/827dc607301e5e5700ed9ec2f681b46c.jpg%253Fsize%253D200'/></author><thr:total>4</thr:total></entry></feed>