<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planeta Lisp-br</title>
	<link rel="self" href="http://planeta.lisp-br.org/atom.xml"/>
	<link href="http://planeta.lisp-br.org"/>
	<id>http://planeta.lisp-br.org/atom.xml</id>
	<updated>2009-01-06T01:00:27+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry xml:lang="en">
		<title type="html">Blog under siege</title>
		<link href="http://www.ventonegro.org/2008/12/blog-under-siege/"/>
		<id>http://www.ventonegro.org/?p=74</id>
		<updated>2008-12-17T17:36:14+00:00</updated>
		<content type="html">&lt;p&gt;I know it is a pain for who is commenting, but I had to add the reCAPTCHA Wordpress plug-in to this blog. The spam count was already in the 300s, and increasing fast. Trackback spam is still high.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Lua Programming Gems out!</title>
		<link href="http://www.ventonegro.org/2008/12/lua-programming-gems-out/"/>
		<id>http://www.ventonegro.org/?p=71</id>
		<updated>2008-12-14T22:08:22+00:00</updated>
		<content type="html">&lt;p&gt;Hot from the presses, the book is finally here. The table of contents, the front matter and the free chapter 2 are in the &lt;a href=&quot;http://www.lua.org/gems/&quot; title=&quot;Lua Programming Gems&quot;&gt;book homepage&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Lisp Joke</title>
		<link href="http://blog.lucindo.com.br/2008/12/13/lisp-joke/"/>
		<id>http://blog.lucindo.com.br/2008/12/13/lisp-joke/</id>
		<updated>2008-12-13T17:42:27+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img src=&quot;http://jonex.info/dump/yolisp.jpg&quot; alt=&quot;joke&quot; /&gt;
&lt;/p&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Will code for money</title>
		<link href="http://www.ventonegro.org/2008/12/will-code-for-money/"/>
		<id>http://www.ventonegro.org/?p=66</id>
		<updated>2008-12-09T19:08:05+00:00</updated>
		<content type="html">&lt;p&gt;Thanks to the Financial World Crisis, my employer wants to relocate me to a place where it will spend less money paying me and with less infra-structure. As I do not intend to relocate, I therefore offer my good coding skills for money. Remember that Brazillian paying rates are lower than European and American ones! &lt;img src=&quot;http://www.ventonegro.org/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; The link to my resume is at the side.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Americanas: &quot;inconsistências&quot;</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/12/americanas-inconsistncias.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-4093919153245304662</id>
		<updated>2008-12-09T06:50:40+00:00</updated>
		<content type="html">Há umas semanas tentei comprar um notebook das &lt;a href=&quot;http://www.americanas.com.br&quot;&gt;Americanas&lt;/a&gt;.  Um dia após eu ter feito o pedido, recebo um e-mail pedindo para enviar dados a serem avaliados pela instituição financeira responsável pelo meu cartão de crédito. No mesmo dia respondi o e-mail com as informações solicitadas (com as mesmas informações que usei em compras feitas nas Americanas anteriormente).&lt;br /&gt;&lt;br /&gt;Dois dias depois recebo um e-mail indicando que as informações haviam sido recebidas e que a análise demoraria até 36h.  Depois de mais dois dias recebo um e-mail informando que o pedido havia sido suspenso devido a &lt;i&gt;inconsistência de informações na sua compra e também à ausência de contato nossa Central de Atendimento&lt;/i&gt;. Ressalto que respondi todas as requisições de contato e pedidos de informações que a mim chegaram.&lt;br /&gt;&lt;br /&gt;Via e-mail, tentei obter informações sobre a razão da suspensão do pedido, mas não obtive resposta.&lt;br /&gt;&lt;br /&gt;Hoje fui ver a fatura do meu cartão de crédito e percebi que o valor da parcela da compra havia sido debitado. É claro, ficou a dúvida: se as informações eram inconsistentes para efetuar a compra, &lt;b&gt;por que não eram inconsistentes para fazer a cobrança&lt;/b&gt;?&lt;br /&gt;&lt;br /&gt;Tentei fazer esta pergunta para o atendimento online das Americanas, via chat.  A conversa está abaixo (fui fazendo a captura das telas conforme a conversa se desenvolvia, pois temia que o texto fosse desaparecer quando o atentente desejasse -- o que de fato aconteceu).&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_ade5bioRWEE/ST6CkQnnqzI/AAAAAAAAABs/fnPWc1hrZIA/s1600-h/1.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_ade5bioRWEE/ST6CkQnnqzI/AAAAAAAAABs/fnPWc1hrZIA/s400/1.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277799372772846386&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/ST6FFkdv6AI/AAAAAAAAACk/QEePDU0O47w/s1600-h/2.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/ST6FFkdv6AI/AAAAAAAAACk/QEePDU0O47w/s400/2.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277802144059090946&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_ade5bioRWEE/ST6C7XsV4HI/AAAAAAAAAB8/CYHeR0oGkig/s1600-h/3.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_ade5bioRWEE/ST6C7XsV4HI/AAAAAAAAAB8/CYHeR0oGkig/s400/3.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277799769808691314&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_ade5bioRWEE/ST6DCd6Zi_I/AAAAAAAAACE/X7uHt7E3LgI/s1600-h/4.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_ade5bioRWEE/ST6DCd6Zi_I/AAAAAAAAACE/X7uHt7E3LgI/s400/4.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277799891737349106&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/ST6DJJBNWLI/AAAAAAAAACM/JtufAJgBpzo/s1600-h/5.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/ST6DJJBNWLI/AAAAAAAAACM/JtufAJgBpzo/s400/5.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277800006387849394&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_ade5bioRWEE/ST6DPwzAcfI/AAAAAAAAACU/Fou8P7H4rZQ/s1600-h/6.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_ade5bioRWEE/ST6DPwzAcfI/AAAAAAAAACU/Fou8P7H4rZQ/s400/6.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277800120144916978&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/ST6DWQNkodI/AAAAAAAAACc/Im8VIlDshrQ/s1600-h/7.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/ST6DWQNkodI/AAAAAAAAACc/Im8VIlDshrQ/s400/7.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5277800231657054674&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Não consegui capturar a última tela, pois o atendente &quot;desligou&quot;.&lt;br /&gt;&lt;br /&gt;Fica o conselho: &lt;b&gt;cautela ao comprar das Americanas&lt;/b&gt;.</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Interpretador de COW em Chicken Scheme</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/12/interpretador-de-cow-em-chicken-scheme.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-4827006919143302945</id>
		<updated>2008-12-05T05:53:09+00:00</updated>
		<content type="html">Dando seqüência à série &lt;i&gt;implementações de interpretadores de linguagens que não servem para nada&lt;/i&gt; (iniciada com um &lt;a href=&quot;http://call-with-hopeless-continuation.blogspot.com/2008/07/interpretador-de-assembly-em-scheme.html&quot;&gt;interpretador de assembly&lt;/a&gt;), a seguir está a implementação de um interpretador para a &lt;a href=&quot;http://www.bigzaphod.org/cow/&quot;&gt;linguagem COW&lt;/a&gt; em &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; Scheme.&lt;br /&gt;&lt;br /&gt;Da página da linguagem:&lt;br /&gt;&lt;br /&gt; &lt;cite&gt;The COW programming language was designed with the bovine in mind. Given that cows have somewhat limited vocabulary skills, it seemed natural to incorporate only the words they know into the language. As a result, all instructions are some variation on &quot;moo&quot; which just so happens to be the only word they really understand.&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;Abaixo estão o código da implementação e um programa exemplo:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;(use srfi-1)&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;*memory*&lt;/font&gt;&lt;/b&gt; (make-vector 1 0))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;*program*&lt;/font&gt;&lt;/b&gt; #f)&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;*ip*&lt;/font&gt;&lt;/b&gt; 0) &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; instruction pointer&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;*mp*&lt;/font&gt;&lt;/b&gt; 0) &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; memory pointer&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;*register*&lt;/font&gt;&lt;/b&gt; #f)&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;instructions&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;  '((&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;moo&amp;quot;&lt;/font&gt;&lt;/b&gt; . 0) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;mOo&amp;quot;&lt;/font&gt;&lt;/b&gt; . 1) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;moO&amp;quot;&lt;/font&gt;&lt;/b&gt; . 2) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;mOO&amp;quot;&lt;/font&gt;&lt;/b&gt; . 3) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;Moo&amp;quot;&lt;/font&gt;&lt;/b&gt; . 4)&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;MOo&amp;quot;&lt;/font&gt;&lt;/b&gt; . 5) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;MoO&amp;quot;&lt;/font&gt;&lt;/b&gt; . 6) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;MOO&amp;quot;&lt;/font&gt;&lt;/b&gt; . 7) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;OOO&amp;quot;&lt;/font&gt;&lt;/b&gt; . 8) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;MMM&amp;quot;&lt;/font&gt;&lt;/b&gt; . 9)&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;OOM&amp;quot;&lt;/font&gt;&lt;/b&gt; . 10) (&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;oom&amp;quot;&lt;/font&gt;&lt;/b&gt; . 11)))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;sanitize-code&lt;/font&gt;&lt;/b&gt; code)&lt;br /&gt;  &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; removes non-cow instructions and returns a list containing valid cow code&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;  (map string-&amp;gt;symbol&lt;br /&gt;       (filter (cut alist-ref &amp;lt;&amp;gt; instructions equal?)&lt;br /&gt;               (flatten (map string-split code)))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;get-address&lt;/font&gt;&lt;/b&gt; snippet from to)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((scope 0)&lt;br /&gt;        (address #f))&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; loop ((code snippet))&lt;br /&gt;      (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;and&lt;/font&gt;&lt;/b&gt; (null? code) (not address))&lt;br /&gt;          (terminate)&lt;br /&gt;          (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let*&lt;/font&gt;&lt;/b&gt; ((current-instr (car code))&lt;br /&gt;                 (instr (cdr current-instr))&lt;br /&gt;                 (pos (car current-instr)))&lt;br /&gt;            (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;cond&lt;/font&gt;&lt;/b&gt; ((eq? instr from)&lt;br /&gt;                   (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; scope (add1 scope))&lt;br /&gt;                   (loop (cdr code)))&lt;br /&gt;                  ((&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;and&lt;/font&gt;&lt;/b&gt; (not (zero? scope)) (eq? instr to))&lt;br /&gt;                   (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; scope (sub1 scope))&lt;br /&gt;                   (loop (cdr code)))&lt;br /&gt;                  ((&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;and&lt;/font&gt;&lt;/b&gt; (zero? scope) (eq? instr to)) pos)&lt;br /&gt;                  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;else&lt;/font&gt;&lt;/b&gt; (loop (cdr code)))))))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;MOO-address&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (get-address (reverse (take *program* (sub1 *ip*))) 'moo 'MOO))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;moo-address&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (get-address (drop *program* (+ 2 *ip*)) 'MOO 'moo))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;mem-get&lt;/font&gt;&lt;/b&gt;) (vector-ref *memory* *mp*))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;maybe-resize-mem!&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((vlen (vector-length *memory*)))&lt;br /&gt;    (when (&amp;gt;= (add1 *mp*) vlen)&lt;br /&gt;      (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *memory* (vector-resize *memory* (add1 vlen) 0)))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;mem-set!&lt;/font&gt;&lt;/b&gt; val)&lt;br /&gt;  (maybe-resize-mem!)&lt;br /&gt;  (vector-set! *memory* *mp* val))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;terminate&lt;/font&gt;&lt;/b&gt; #!optional (exit-code 0))&lt;br /&gt;  (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;Terminating.&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (exit exit-code))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;moo-interpreter&lt;/font&gt;&lt;/b&gt; file)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let*&lt;/font&gt;&lt;/b&gt; ((sane-code (sanitize-code (read-lines file)))&lt;br /&gt;         (program-len (length sane-code))&lt;br /&gt;         (debug? (getenv &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;COWDEBUG&amp;quot;&lt;/font&gt;&lt;/b&gt;)))&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *program* (map cons (iota program-len) sane-code))&lt;br /&gt;    (when debug? (display &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;prog&amp;gt; &amp;quot;&lt;/font&gt;&lt;/b&gt;) (pp *program*))&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; loop ()&lt;br /&gt;      (when debug?&lt;br /&gt;        (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;-----------------------------------&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;        (print *program*)&lt;br /&gt;        (display &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;mem&amp;gt; &amp;quot;&lt;/font&gt;&lt;/b&gt;) (pp *memory*)&lt;br /&gt;        (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;*mp*&amp;gt; &amp;quot;&lt;/font&gt;&lt;/b&gt; *mp*)&lt;br /&gt;        (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;*ip*&amp;gt; &amp;quot;&lt;/font&gt;&lt;/b&gt; *ip*)&lt;br /&gt;        (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;*register*&amp;gt;  &amp;quot;&lt;/font&gt;&lt;/b&gt; *register*))&lt;br /&gt;      (when (&amp;gt; *ip* program-len) (terminate))&lt;br /&gt;        (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (null? *program*)&lt;br /&gt;            (terminate)&lt;br /&gt;            (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let*&lt;/font&gt;&lt;/b&gt; ((current-instr (alist-ref *ip* *program*))&lt;br /&gt;                   &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; special-instr =&amp;gt; instructions that modify *ip*&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;                   (special-instrs '(MOO mOO moo))&lt;br /&gt;                   (special-instr? (memq current-instr special-instrs)))&lt;br /&gt;              (when (eq? current-instr 'mOO)&lt;br /&gt;                (unless (memq (mem-get) (map cdr instructions))&lt;br /&gt;                  (terminate))&lt;br /&gt;                (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; current-instr (alist-ref (mem-get) *program*))&lt;br /&gt;                (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; special-instr? (memq current-instr special-instrs)))&lt;br /&gt;              (when debug?&lt;br /&gt;                (display &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;current-instr&amp;gt; &amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;                (display (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; special-instr? &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;(*) &amp;quot;&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/b&gt;))&lt;br /&gt;                (pp  current-instr))&lt;br /&gt;              (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;case&lt;/font&gt;&lt;/b&gt; current-instr&lt;br /&gt;                ((moo) (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *ip* (MOO-address)))&lt;br /&gt;                ((mOo) (maybe-resize-mem!) (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *mp* (sub1 *mp*)))&lt;br /&gt;                ((moO) (maybe-resize-mem!) (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *mp* (add1 *mp*)))&lt;br /&gt;                ((Moo) (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (zero? (mem-get))&lt;br /&gt;                           (mem-set! (string-&amp;gt;number (-&amp;gt;string (read-line))))&lt;br /&gt;                           (print (integer-&amp;gt;char (mem-get)))))&lt;br /&gt;                ((MOo) (mem-set! (sub1 (mem-get))))&lt;br /&gt;                ((MoO) (mem-set! (add1 (mem-get))))&lt;br /&gt;                ((MOO) (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (zero? (mem-get))&lt;br /&gt;                           (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *ip* (add1 (moo-address)))&lt;br /&gt;                           (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *ip* (add1 *ip*))))&lt;br /&gt;                ((OOO) (mem-set! 0))&lt;br /&gt;                ((MMM) (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; *register*&lt;br /&gt;                           (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;begin&lt;/font&gt;&lt;/b&gt; (mem-set! *register*)&lt;br /&gt;                                  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *register* #f))&lt;br /&gt;                           (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *register* (mem-get))))&lt;br /&gt;                ((OOM) (print (mem-get)))&lt;br /&gt;                ((oom) (mem-set! (string-&amp;gt;number (read-line)))))&lt;br /&gt;              (unless special-instr? (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *ip* (add1 *ip*)))))&lt;br /&gt;        (loop))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;usage&lt;/font&gt;&lt;/b&gt; #!optional (exit-code 0))&lt;br /&gt;  (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;Usage: &amp;quot;&lt;/font&gt;&lt;/b&gt; (program-name) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot; &amp;lt;input file&amp;gt;&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (exit exit-code))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((args (command-line-arguments)))&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (null? args)&lt;br /&gt;      (usage 1)&lt;br /&gt;      (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((file (car args)))&lt;br /&gt;        (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (file-exists? (car args))&lt;br /&gt;            (moo-interpreter file)&lt;br /&gt;            (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;begin&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;              (print file &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;: not found.&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;              (exit 1))))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Obs.: se a variável &lt;code&gt;COWDEBUG&lt;/code&gt; estiver definida no ambiente, o interpretador exibe informações para depuração.&lt;br /&gt;&lt;br /&gt;Aqui está a implementação de um gerador da &lt;a href=&quot;http://en.wikipedia.org/wiki/Fibonacci_number&quot;&gt;série de Fibonacci&lt;/a&gt; em COW (um dos exemplos disponibilizados no site da linguagem):&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;MoO&lt;br /&gt;moO&lt;br /&gt;MoO&lt;br /&gt;mOo&lt;br /&gt;[[ main loop ]]&lt;br /&gt;MOO&lt;br /&gt;[[ print first number ]]&lt;br /&gt;OOM&lt;br /&gt;[[ temp copy of first number ]]&lt;br /&gt;MMM&lt;br /&gt;moO&lt;br /&gt;moO&lt;br /&gt;MMM&lt;br /&gt;mOo&lt;br /&gt;mOo&lt;br /&gt;[[ store second number off in the first position now ]]&lt;br /&gt;moO&lt;br /&gt;MMM&lt;br /&gt;mOo&lt;br /&gt;MMM&lt;br /&gt;[[ move back to temp number ]]&lt;br /&gt;moO&lt;br /&gt;moO&lt;br /&gt;[[ use temp to add to first and store in second in loop ]]&lt;br /&gt;MOO&lt;br /&gt;MOo&lt;br /&gt;mOo&lt;br /&gt;MoO&lt;br /&gt;moO&lt;br /&gt;moo&lt;br /&gt;mOo&lt;br /&gt;mOo&lt;br /&gt;moo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Executando este exemplo com o interpretador, temos:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ csi -s cow.scm fib.cow&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;5&lt;br /&gt;8&lt;br /&gt;13&lt;br /&gt;21&lt;br /&gt;34&lt;br /&gt;55&lt;br /&gt;89&lt;br /&gt;144&lt;br /&gt;233&lt;br /&gt;377&lt;br /&gt;610&lt;br /&gt;987&lt;br /&gt;1597&lt;br /&gt;2584&lt;br /&gt;4181&lt;br /&gt;6765&lt;br /&gt;10946&lt;br /&gt;17711&lt;br /&gt;28657&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Algum voluntário para implementar as &lt;a href=&quot;http://www.bigzaphod.org/cow/ddx/ddx.txt&quot;&gt;Distributed Digestion eXtentions&lt;/a&gt;? &lt;code&gt;:-)&lt;/code&gt;</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Equivalent of and-let*?</title>
		<link href="http://www.ventonegro.org/2008/12/equivalent-of-and-let/"/>
		<id>http://www.ventonegro.org/?p=64</id>
		<updated>2008-12-02T17:33:47+00:00</updated>
		<content type="html">&lt;p&gt;By this point I believe it&amp;#8217;s clear that I am a big fan of &lt;a href=&quot;http://www.schemers.org/&quot; title=&quot;An improper list of Scheme resources&quot;&gt;Scheme&lt;/a&gt;. Lately I have seen a sharp rise of interest in Ruby in some virtual places I attend (#lisp-br, twitter, IM with coworkers etc.). I am sure Ruby is a fine language, even in spite of several complaints I hear from some of its users. After all, it has symbols, metaprogramming, blocks (a sort of closures), &lt;em&gt;lambdas&lt;/em&gt; and more! I&amp;#8217;d really take the time to learn it, if it wasn&amp;#8217;t for &lt;a href=&quot;http://www.paulgraham.com/quotes.html&quot; title=&quot;Lisp Quotes&quot;&gt;Matz himself&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Some may say Ruby is a bad rip-off of Lisp or Smalltalk, and I admit that. But it is nicer to ordinary people.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now &lt;em&gt;that&lt;/em&gt; is a demotivator. But Ruby must be evolving, and that quote may be outdated. So I have thought of a question to the Ruby-lovers, that may help me make up my mind to take the time to learn it. One of the best Scheme macros is, in my opinion, &lt;tt&gt;and-let*&lt;/tt&gt;, from the &lt;a href=&quot;http://srfi.schemers.org/srfi-2/srfi-2.html&quot; title=&quot;AND-LET*: an AND with local bindings, a guarded LET* special form&quot;&gt;SRFI-2&lt;/a&gt;. How would one write the following in Ruby, a procedure that I wrote a couple of nights ago?&lt;/p&gt;
&lt;pre&gt;
;; Tries to get session from current request
(define (get-session request)
  (and-let* ((cookies (request-cookies request))
             (p (assoc &quot;session_id&quot; cookies))
             (sid-str (cdr p))
             (sid (string-&gt;number sid-str))
             ((integer? sid))
             ((exact? sid))
             (sp (assq sid *sessions*)))
    (cdr sp)))
&lt;/pre&gt;
&lt;p&gt;In the &lt;tt&gt;and-let*&lt;/tt&gt; macro, the clauses are evaluated and the variables are bound sequentially, creating new scopes for the next expressions. If any of the forms evaluates to &lt;tt&gt;#f&lt;/tt&gt; (false in Scheme), the computation is aborted, no other expressions are evaluated, and the whole form evaluates to &lt;tt&gt;#f&lt;/tt&gt;. How would I write this in concise Ruby?&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Paul Graham’s strategy</title>
		<link href="http://www.ventonegro.org/2008/12/paul-grahams-strategy/"/>
		<id>http://www.ventonegro.org/?p=57</id>
		<updated>2008-12-02T17:05:55+00:00</updated>
		<content type="html">&lt;p&gt;I have disappeared for a while, but my excuse is that I have been coding furiously. I intend to write a lot more in the not-so-far-away future. In the meanwhile, a quick post.&lt;/p&gt;
&lt;p&gt;From time to time I read another Paul Graham essay, usually when they are cited in some &lt;a href=&quot;http://reddit.org&quot; title=&quot;Reddit&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;http://www.slashdot.org/&quot; title=&quot;Slashdot&quot;&gt;Slashdot&lt;/a&gt; thread. He really writes well, and although I do not agree with everything he says, I must say I agree with most of it. &amp;#8220;&lt;a href=&quot;http://paulgraham.com/avg.html&quot; title=&quot;Beating the averages&quot;&gt;Beating the averages&lt;/a&gt;&amp;#8221; was very influential on some important decisions I have made, and for a lot of other people as well.&lt;/p&gt;
&lt;p&gt;Today I found an essay called &amp;#8220;&lt;a href=&quot;http://paulgraham.com/newthings.html&quot; title=&quot;Six Principles for Making New Things&quot;&gt;Six Principles for Making New Things&lt;/a&gt;&amp;#8220;, in which he describes his &lt;em&gt;modus operandi&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here it is: I like to find (a) simple solutions (b) to overlooked problems (c) that actually need to be solved, and (d) deliver them as informally as possible, (e) starting with a very crude version 1, then (f) iterating rapidly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree 100% with him here. There are a lot of overlooked problems out there, in search of solutions, that just seem &amp;#8220;simple&amp;#8221; enough. But they need to be solved and, when someone does it, everybody else wish &lt;strong&gt;they&lt;/strong&gt; had thought of it. But they were there, all the time. Moreover, the initial solution does not need to be perfect, as long as it solves an immediate need well enough and &lt;em&gt;the solution can be iterated rapidly&lt;/em&gt;, which is a very, very important point. When someone creates a market, there is soon afterwards a rush of new competitors. Coming up with a simple solution which does not evolve quickly is the recipe to lose to another faster, more dynamic, more focused team.&lt;/p&gt;
&lt;p&gt;I already had something like Graham&amp;#8217;s Six Principles in the back of my mind for a while. It was good to see them written by someone who has made millions of dollars selling (Lisp!) software.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como tomar decisões</title>
		<link href="http://blog.lucindo.com.br/2008/11/22/como-tomar-decisoes/"/>
		<id>http://blog.lucindo.com.br/2008/11/22/como-tomar-decisoes/</id>
		<updated>2008-11-22T02:47:42+00:00</updated>
		<content type="html">&lt;p&gt;Agora pouco, no IM:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;trajber&lt;/strong&gt;: vou pedir ajuda ao meu querido PC&lt;br /&gt;
&lt;strong&gt;trajber&lt;/strong&gt;: mauro@trajber:~$ python&lt;br /&gt;
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)&lt;br /&gt;
[GCC 4.3.2] on linux2&lt;br /&gt;
Type &amp;#8220;help&amp;#8221;, &amp;#8220;copyright&amp;#8221;, &amp;#8220;credits&amp;#8221; or &amp;#8220;license&amp;#8221; for more information.&lt;br /&gt;
&gt;&gt;&gt; import random&lt;br /&gt;
&gt;&gt;&gt; print random.randint(0,1)&lt;br /&gt;
&lt;strong&gt;trajber&lt;/strong&gt;: 0 = ignorar&lt;br /&gt;
&lt;strong&gt;trajber&lt;/strong&gt;: 1 = comer&lt;br /&gt;
&lt;strong&gt;trajber&lt;/strong&gt;: ok ?&lt;br /&gt;
&lt;strong&gt;trajber&lt;/strong&gt;: 0&lt;br /&gt;
&gt;&gt;&gt;&lt;br /&gt;
&lt;strong&gt;trajber&lt;/strong&gt;: foi justo&amp;#8230;&lt;/p&gt;
&lt;p&gt;Outro também fez algo parecido: &lt;a href=&quot;http://twitter.com/igorrs/status/896944758&quot;&gt;http://twitter.com/igorrs/status/896944758&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Scheme na Apple?</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/11/scheme-na-apple.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-7032765682159394632</id>
		<updated>2008-11-19T06:18:19+00:00</updated>
		<content type="html">Estava dando uma olhada em uma &lt;a href=&quot;http://www.usenix.org/events/lisa08/tech/hubbard_talk.pdf&quot;&gt;apresentação sobre o MacOSX&lt;/a&gt; que o &lt;a href=&quot;http://japao.drebes.org/&quot;&gt;Drebes&lt;/a&gt; divulgou em uma lista de discussão e me deparei com a seguinte tela:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_ade5bioRWEE/SSQfk5MTqfI/AAAAAAAAABk/fgDPm5mMbGM/s1600-h/hubbard.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_ade5bioRWEE/SSQfk5MTqfI/AAAAAAAAABk/fgDPm5mMbGM/s400/hubbard.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5270372182618515954&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Com uma rápida pesquisada, encontrei o seguinte &lt;a href=&quot;http://www.usefulsecurity.com/2007/11/apple-sandboxes-part-1/&quot;&gt;texto&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;&lt;br /&gt;While there is no documentation of the format of the policy file, there are several examples available in /usr/share/sandbox which give clues to what a policy can do. These policies seem to use a &lt;b&gt;Scheme-like syntax&lt;/b&gt; and provide abilities to restrict file access (based on pathname), restrict interprocess communication (IPC) such as shared memory, restrict network access, restrict signals, restrict many process-related actions, restrict sysctls, and more.&lt;br /&gt;&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;Interessante.</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Book Meme</title>
		<link href="http://blog.lucindo.com.br/2008/11/13/book-meme/"/>
		<id>http://blog.lucindo.com.br/2008/11/13/book-meme/</id>
		<updated>2008-11-14T00:34:00+00:00</updated>
		<content type="html">&lt;blockquote&gt;&lt;p&gt;Time is always critical because somebody might beat you to the punch&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.foundersatwork.com/&quot;&gt;Founders at Work&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Jessica_Livingston&quot;&gt;Jessica Livingston&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grab the nearest book.&lt;/li&gt;
&lt;li&gt;Open it to page 56.&lt;/li&gt;
&lt;li&gt;Find the fifth sentence.&lt;/li&gt;
&lt;li&gt;Post the text of the sentence in your journal along with these # instructions.&lt;/li&gt;
&lt;li&gt;Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Chicken LiveCD na LatinoWare 2008</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/10/chicken-livecd-na-latinoware-2008.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-161131117797411493</id>
		<updated>2008-10-28T11:34:49+00:00</updated>
		<content type="html">&lt;a href=&quot;http://3.bp.blogspot.com/_ade5bioRWEE/SQdbD_beW4I/AAAAAAAAABU/xsarsIi8S3k/s1600-h/livecd.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_ade5bioRWEE/SQdbD_beW4I/AAAAAAAAABU/xsarsIi8S3k/s320/livecd.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5262274813730118530&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Como não será possível levar a &lt;a href=&quot;http://qdp.ucpel.tche.br&quot;&gt;torradeira&lt;/a&gt; para a Latinoware 2008, levarei alguns &lt;a href=&quot;http://chicken.wiki.br/livecd&quot;&gt;LiveCDs&lt;/a&gt; de &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; para os interessados.  Serão poucas unidades (~20). Faça sua reserva na seção de comentários. :-)</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">Aprendendo Scala</title>
		<link href="http://lispbr.blogspot.com/2008/10/aprendendo-scala.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-6074463774882152671</id>
		<updated>2008-10-23T18:55:45+00:00</updated>
		<content type="html">Estou aprendendo a &lt;a href=&quot;http://www.scala-lang.org/&quot;&gt;linguagem de programação Scala&lt;/a&gt;, que é uma linguagem de programação funcional estaticamente tipada que gera código para a JVM e para .NET.&lt;br /&gt;&lt;br /&gt;Scala é bastante elegante, com várias novidades no tratamento da tipagem que tornam a linguagem muito menos verborrágica que o java. A sintaxe para criar closures é particularmente elegante: x =&gt; expr&lt;br /&gt;&lt;br /&gt;Porém, já descobri algumas coisas que eu estou sentindo falta:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Multiple values return: Em scala é possível retornar uma n-tupla, mas não é a mesma coisa, não é possível ignorar os valores secundários da função como no lisp, e especialmente, não existe a construção multiple-values-bind.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Geração dinâmica de classes. É impressionante como é difícil fazer ORM em uma linguagem estática. Não existe nada no hibernate que permita fazer uma introspeção no banco e gerar o código da classes automaticamente, como o rails e o cakephp fazem. É preciso fazer uso de um gerador de código estático como o salto-db (ugle).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Update:&lt;/i&gt; É possível fazer multiple-value-bind em scala:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;val (a,b) = (1,2)&lt;br /&gt;a: Int = 1&lt;br /&gt;b: Int = 2&lt;br /&gt;&lt;/pre&gt;</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Chicken LiveCD 0.4</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/10/chicken-livecd-04.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-6552662593556379437</id>
		<updated>2008-10-22T04:59:11+00:00</updated>
		<content type="html">A versão 0.4 do &lt;a href=&quot;http://chicken.wiki.br/livecd&quot;&gt;Chicken LiveCD&lt;/a&gt; está disponível em &lt;a href=&quot;http://g3pd.ufpel.tche.br/chicken/livecd/&quot;&gt;http://g3pd.ufpel.tche.br/chicken/livecd/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Esta versão contém:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://chicken.wiki.br/releases&quot;&gt;Chicken 3.4.0&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;mais de 300 &lt;a href=&quot;http://chicken.wiki.br/eggs&quot;&gt;eggs&lt;/a&gt; instalados&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.gnu.org/software/emacs&quot;&gt;Emacs&lt;/a&gt; + &lt;a href=&quot;http://www.neilvandyke.org/quack/&quot;&gt;Quack&lt;/a&gt; + &lt;a href=&quot;http://synthcode.com/emacs/&quot;&gt;scheme-complete&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://chicken.wiki.br/releases&quot;&gt;Manual em PDF&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;várias ferramentas e bibliotecas para desenvolvimento com Chicken&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Esta versão do LiveCD é baseada no &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;.  Usei o &lt;a href=&quot;http://reconstructor.aperantis.com/&quot;&gt;Reconstructor&lt;/a&gt; para remasterizar o CD.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/SP8TRqROU-I/AAAAAAAAABM/fYfxcp6IRDQ/s1600-h/3.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/SP8TRqROU-I/AAAAAAAAABM/fYfxcp6IRDQ/s320/3.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5259944083917263842&quot; /&gt;&lt;/a&gt;</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Lisp in Latinoware 2008</title>
		<link href="http://www.ventonegro.org/2008/10/lisp-in-latinoware-2008/"/>
		<id>http://www.ventonegro.org/?p=54</id>
		<updated>2008-10-20T13:31:21+00:00</updated>
		<content type="html">&lt;p&gt;There will be presentations about Lisp in the &lt;a href=&quot;http://2008.latinoware.org/&quot; title=&quot;Latinoware 2008&quot;&gt;V Latin America Conference on Free Software&lt;/a&gt;, via &lt;a href=&quot;http://call-with-hopeless-continuation.blogspot.com/2008/10/lisp-na-latinoware-2008.html&quot; title=&quot;call/hc&quot;&gt;call-with-hopeless-continuation&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Correctly answer a simple skill testing question</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/10/correctly-answer-simple-skill-testing.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-146956148375471343</id>
		<updated>2008-10-20T12:17:38+00:00</updated>
		<content type="html">Ainda não decidi se devo chorar ou dar risada:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/SPzXmRdaxqI/AAAAAAAAABE/JzHOccU05zY/s1600-h/scheme-workshop.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_ade5bioRWEE/SPzXmRdaxqI/AAAAAAAAABE/JzHOccU05zY/s400/scheme-workshop.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5259315517383689890&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Há uma &lt;a href=&quot;http://groups.google.com/group/plt-scheme/browse_thread/thread/efe7a75333c6328/f64a0fd4f117ff14?pli=1&quot;&gt;thread na lista de discussão da implementação PLT&lt;/a&gt; com a discussão gerada por uma &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=%22scheme+is+simple%22+programming&quot;&gt;&lt;b&gt;simples questão&lt;/b&gt;&lt;/a&gt;.</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Lisp na LatinoWare 2008!</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/10/lisp-na-latinoware-2008.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-4334806054595402741</id>
		<updated>2008-10-17T14:09:49+00:00</updated>
		<content type="html">A &lt;a href=&quot;http://2008.latinoware.org&quot;&gt;LatinoWare 2008&lt;/a&gt;, V Conferência Latino-Americana de Software Livre, que ocorrerá de 30 de outubro a 1&lt;sup&gt;o&lt;/sup&gt;. de novembro em Foz do Iguaçu, PR, contará com três apresentações especificamente sobre Lisp!  Serão 3 horas consecutivas sobre parênteses no dia 31/10/2008:&lt;br /&gt;&lt;br /&gt;&lt;table border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td&gt;15h-16h&lt;/td&gt;&lt;td&gt;Usando Common Lisp no Dia-a-dia&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://kroger.lisp-br.org/index-en.html&quot;&gt;Pedro Ribeiro Kroger Junior&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16h-17h&lt;/td&gt;&lt;td&gt;Chicken - Uma Implementação de Scheme para Aplicações Práticas&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://paginas.ucpel.tche.br/~mario&quot;&gt;Mario Domenech Goulart&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17h-18h&lt;/td&gt;&lt;td&gt;CL-Weblocks - Programando Aplicações Web com Blocos&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://vilson.void.cc&quot;&gt;Vilson Vieira da Silva Junior&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;A programação completa do evento está em &lt;a href=&quot;http://lapsi.latinoware.org/index.php?page=grade.GradeEvento&amp;amp;id=1&quot;&gt;http://lapsi.latinoware.org/index.php?page=grade.GradeEvento&amp;amp;id=1&lt;/a&gt;.</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Meroon for Gambit-C</title>
		<link href="http://www.ventonegro.org/2008/10/meroon-for-gambit-c/"/>
		<id>http://www.ventonegro.org/?p=46</id>
		<updated>2008-10-14T03:21:35+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/Meroon.html&quot; title=&quot;Meroon&quot;&gt;Meroon&lt;/a&gt; is a Scheme object system by &lt;a href=&quot;http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/Queinnec.html&quot; title=&quot;Christian Queinnec&quot;&gt;Christian Queinnec&lt;/a&gt;. It is portable, fast, CLOS-like and reflexive. The Meroon home page cites versions for several popular Scheme systems, including &lt;a href=&quot;http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page&quot; title=&quot;Gambit-C&quot;&gt;Gambit-C&lt;/a&gt;. But the links to the Gambit-C version are broken. Doing a bit of research, that actually involved some guessing, I found the &lt;a href=&quot;http://www.math.purdue.edu/~lucier/meroon.tar.gz&quot; title=&quot;Meroon&quot;&gt;Meroon Gambit-C port&lt;/a&gt; in &lt;a href=&quot;http://www.math.purdue.edu/~lucier/&quot; title=&quot;Bradley Lucier&quot;&gt;Bradley Lucier&amp;#8217;s home page&lt;/a&gt;. Instructions to build this Meroon port can be found in &lt;a href=&quot;https://webmail.iro.umontreal.ca/pipermail/gambit-list/2006-February/000619.html&quot; title=&quot;Gambit and Meroon&quot;&gt;this thread&lt;/a&gt; in the Gambit-C mailing list.&lt;/p&gt;
&lt;p&gt;I am not a heavy user of &lt;a href=&quot;http://en.wikipedia.org/wiki/Object-oriented_programming&quot; title=&quot;Object-oriented programming&quot;&gt;object orientation&lt;/a&gt;, but I can certainly see its value where it is worth. In the &lt;a href=&quot;http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html&quot; title=&quot;Lisp in Small Pieces&quot;&gt;LiSP book&lt;/a&gt;, for instance, a beautiful interpreter and a compiler are written in OO-style, in chapter 3 and 10, respectively. Another example is writing a scene graph for a Computer Graphics application, it almost begs to be written object-oriented.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Javascript (Ajax) e HTML em Lisp</title>
		<link href="http://blog.lucindo.com.br/2008/10/12/javascript-ajax-e-html-em-lisp/"/>
		<id>http://blog.lucindo.com.br/2008/10/12/javascript-ajax-e-html-em-lisp/</id>
		<updated>2008-10-12T18:56:49+00:00</updated>
		<content type="html">&lt;p&gt;Para testar algumas coisas refiz hoje o código do post &lt;a href=&quot;http://blog.lucindo.com.br/2007/09/15/common-lisp-e-ajax/&quot;&gt;Common Lisp e Ajax&lt;/a&gt;. Desta vez estou usando o &lt;a href=&quot;http://blog.lucindo.com.br/2008/06/01/ht-ajax-e-jquery/&quot;&gt;patch&lt;/a&gt; para o &lt;a href=&quot;http://www.cliki.net/HT-AJAX&quot;&gt;HT-AJAX&lt;/a&gt; com suporte e &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;. Além disso, para gerar código JavaScript  uso &lt;a href=&quot;http://common-lisp.net/project/parenscript/&quot;&gt;Parenscript&lt;/a&gt;. Assim todo HTML e JS é produzido por s-exps:&lt;/p&gt;
&lt;pre&gt;
(&lt;font color=&quot;#a020f0&quot;&gt;eval-when&lt;/font&gt; (&lt;font color=&quot;#da70d6&quot;&gt;:compile-toplevel&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:load-toplevel&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:execute&lt;/font&gt;)
  (&lt;font color=&quot;#a020f0&quot;&gt;defparameter&lt;/font&gt; &lt;font color=&quot;#b8860b&quot;&gt;*dependencies*&lt;/font&gt;
    &amp;#8216;(&lt;font color=&quot;#da70d6&quot;&gt;:asdf&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:hunchentoot&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:ht-ajax&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:cl-who&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:parenscript&lt;/font&gt;))
  (map nil &amp;#8216;require *dependencies*))

(&lt;font color=&quot;#a020f0&quot;&gt;defpackage&lt;/font&gt; &lt;font color=&quot;#228b22&quot;&gt;:ajax-test&lt;/font&gt;
  (&lt;font color=&quot;#da70d6&quot;&gt;:use&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:common-lisp&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:hunchentoot&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:ht-ajax&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:cl-who&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:parenscript&lt;/font&gt;))

(&lt;font color=&quot;#a020f0&quot;&gt;in-package&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:ajax-test&lt;/font&gt;)

(&lt;font color=&quot;#a020f0&quot;&gt;defparameter&lt;/font&gt; &lt;font color=&quot;#b8860b&quot;&gt;*local-dir*&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/Users/lucindo/Documents/Lisp/web/3rdparty/&amp;#8221;&lt;/font&gt;)
(&lt;font color=&quot;#a020f0&quot;&gt;defparameter&lt;/font&gt; &lt;font color=&quot;#b8860b&quot;&gt;*ajax-handler-url*&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/ajax&amp;#8221;&lt;/font&gt;)
(&lt;font color=&quot;#a020f0&quot;&gt;defparameter&lt;/font&gt; &lt;font color=&quot;#b8860b&quot;&gt;*ajax-processor*&lt;/font&gt;
  (make-ajax-processor &lt;font color=&quot;#da70d6&quot;&gt;:type&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:jquery&lt;/font&gt;
                       &lt;font color=&quot;#da70d6&quot;&gt;:server-uri&lt;/font&gt; *ajax-handler-url*
                       &lt;font color=&quot;#da70d6&quot;&gt;:js-file-uris&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/static/jquery.js&amp;#8221;&lt;/font&gt;))

(&lt;font color=&quot;#a020f0&quot;&gt;defun&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;testfunc&lt;/font&gt; (command)
  (prin1-to-string (&lt;font color=&quot;#a020f0&quot;&gt;handler-case&lt;/font&gt; (eval (read-from-string command nil))
                                 (&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;error&lt;/b&gt;&lt;/font&gt; (c) (format nil &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;~a&amp;#8221;&lt;/font&gt; c)))))

(&lt;font color=&quot;#a020f0&quot;&gt;defun&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;js&lt;/font&gt; ()
  (ps
   (&lt;font color=&quot;#a020f0&quot;&gt;defun&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;command_clicked&lt;/font&gt; ()
     (&lt;font color=&quot;#a020f0&quot;&gt;let&lt;/font&gt; ((command (document.get-element-by-id &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;command&amp;#8221;&lt;/font&gt;)))
       (&lt;font color=&quot;#a020f0&quot;&gt;with-slots&lt;/font&gt; (value) command
                   (ajax_testfunc_set_element &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;result&amp;#8221;&lt;/font&gt; value))))))

(&lt;font color=&quot;#a020f0&quot;&gt;defun&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;main-page&lt;/font&gt; ()
  (with-html-output-to-string
   (*standard-output* nil &lt;font color=&quot;#da70d6&quot;&gt;:prologue&lt;/font&gt; t)
   (&lt;font color=&quot;#da70d6&quot;&gt;:html&lt;/font&gt;
    (&lt;font color=&quot;#da70d6&quot;&gt;:head&lt;/font&gt;
     (&lt;font color=&quot;#da70d6&quot;&gt;:script&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:type&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;text/javascript&amp;#8221;&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:src&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/js&amp;#8221;&lt;/font&gt;)
     (&lt;font color=&quot;#da70d6&quot;&gt;:title&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;AJAX test&amp;#8221;&lt;/font&gt;)
     (fmt &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;~a&amp;#8221;&lt;/font&gt; (generate-prologue *ajax-processor*)))
    (&lt;font color=&quot;#da70d6&quot;&gt;:body&lt;/font&gt;
     (&lt;font color=&quot;#da70d6&quot;&gt;:h1&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;ajax test&amp;#8221;&lt;/font&gt;)
     (&lt;font color=&quot;#da70d6&quot;&gt;:table&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:width&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;50%&amp;#8221;&lt;/font&gt;
             (&lt;font color=&quot;#da70d6&quot;&gt;:tr&lt;/font&gt;
              (&lt;font color=&quot;#da70d6&quot;&gt;:td&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:colspan&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;2&amp;#8243;&lt;/font&gt;
                   (&lt;font color=&quot;#da70d6&quot;&gt;:span&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:id&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;result&amp;#8221;&lt;/font&gt;
                          (&lt;font color=&quot;#da70d6&quot;&gt;:i&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;no results yet&amp;#8221;&lt;/font&gt;))))
             (&lt;font color=&quot;#da70d6&quot;&gt;:tr&lt;/font&gt;
              (&lt;font color=&quot;#da70d6&quot;&gt;:td&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:width&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;70%&amp;#8221;&lt;/font&gt;
                   (&lt;font color=&quot;#da70d6&quot;&gt;:input&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:type&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;text&amp;#8221;&lt;/font&gt;
                           &lt;font color=&quot;#da70d6&quot;&gt;:size&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;70&amp;#8243;&lt;/font&gt;
                           &lt;font color=&quot;#da70d6&quot;&gt;:name&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;command&amp;#8221;&lt;/font&gt;
                           &lt;font color=&quot;#da70d6&quot;&gt;:id&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;command&amp;#8221;&lt;/font&gt;))
              (&lt;font color=&quot;#da70d6&quot;&gt;:td&lt;/font&gt; (&lt;font color=&quot;#da70d6&quot;&gt;:input&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:type&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;button&amp;#8221;&lt;/font&gt;
                           &lt;font color=&quot;#da70d6&quot;&gt;:value&lt;/font&gt; &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;eval&amp;#8221;&lt;/font&gt;
                           &lt;font color=&quot;#da70d6&quot;&gt;:onclick&lt;/font&gt; (ps-inline (command_clicked))))))))))

(&lt;font color=&quot;#a020f0&quot;&gt;eval-when&lt;/font&gt; (&lt;font color=&quot;#da70d6&quot;&gt;:load-toplevel&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:execute&lt;/font&gt;)
  (export-func *ajax-processor* &amp;#8216;testfunc &lt;font color=&quot;#da70d6&quot;&gt;:method&lt;/font&gt; &lt;font color=&quot;#da70d6&quot;&gt;:post&lt;/font&gt;)
  (setf *dispatch-table*
        (list &amp;#8216;dispatch-easy-handlers
              (create-folder-dispatcher-and-handler &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/static/&amp;#8221;&lt;/font&gt;
                                                    *local-dir* &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;text/plain&amp;#8221;&lt;/font&gt;)
              (create-prefix-dispatcher *ajax-handler-url*
                                        (get-handler *ajax-processor*))
              (create-prefix-dispatcher &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/js&amp;#8221;&lt;/font&gt; &amp;#8216;js)
              (create-prefix-dispatcher &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;/&amp;#8221;&lt;/font&gt; &amp;#8216;main-page))))

(&lt;font color=&quot;#a020f0&quot;&gt;defparameter&lt;/font&gt; &lt;font color=&quot;#b8860b&quot;&gt;*webserver*&lt;/font&gt; nil)

(&lt;font color=&quot;#a020f0&quot;&gt;defun&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;start-web&lt;/font&gt; (&lt;font color=&quot;#228b22&quot;&gt;&amp;amp;optional&lt;/font&gt; (port 4242))
  (setf *webserver* (start-server &lt;font color=&quot;#da70d6&quot;&gt;:port&lt;/font&gt; port)))

(&lt;font color=&quot;#a020f0&quot;&gt;defun&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;stop-web&lt;/font&gt; ()
  (stop-server *webserver*))
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href=&quot;http://lucindo.com.br/lisp/ajax2.lisp&quot;&gt;ajax2.lisp&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Ruby sucks: parte 42</title>
		<link href="http://blog.lucindo.com.br/2008/10/08/ruby/"/>
		<id>http://blog.lucindo.com.br/2008/10/08/ruby/</id>
		<updated>2008-10-08T15:13:05+00:00</updated>
		<content type="html">&lt;p&gt;Há algum tempo eu desisti de Ruby. Como linguagem de programação tem coisas muito legais, mas ainda é muito imatura (apesar da idade). Poderia mostrar vários exemplos de coisas estranhas em Ruby, mas hoje vai a causa de um bug que me mostraram.&lt;/p&gt;
&lt;p&gt;Veja se o &lt;strong&gt;defined?&lt;/strong&gt; não funciona de maneira não intuitiva:&lt;/p&gt;
&lt;pre&gt;
lucindo@marvin:~$ irb
irb(main):001:0&gt; defined?(cu)
=&gt; nil
irb(main):002:0&gt; if false
irb(main):003:1&gt;    cu = &quot;ruby&quot;
irb(main):004:1&gt; end
=&gt; nil
irb(main):005:0&gt; defined?(cu)
=&gt; &quot;local-variable&quot;
irb(main):006:0&gt; if defined?(cu)
irb(main):007:1&gt;    puts &quot;ruby cu&quot;
irb(main):008:1&gt; end
ruby cu
=&gt; nil
irb(main):009:0&gt;
&lt;/pre&gt;
&lt;p&gt;Imagina se você usa isso em algo como configuração&amp;#8230;
&lt;/p&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">13949712720901ForOSX</title>
		<link href="http://lispbr.blogspot.com/2008/10/13949712720901forosx.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-1147295728959576435</id>
		<updated>2008-10-06T10:59:25+00:00</updated>
		<content type="html">&lt;a href=&quot;http://blogs.sun.com/bblfish/entry/vote_for_java6_on_leopard&quot;&gt;&lt;br /&gt;&gt;Java  1.6 for OS x&lt;/a&gt;!!!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13949712720901ForOSX</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">ACE_Task-like em Python</title>
		<link href="http://blog.lucindo.com.br/2008/09/28/ace_task-like-em-python/"/>
		<id>http://blog.lucindo.com.br/2008/09/28/ace_task-like-em-python/</id>
		<updated>2008-09-28T23:02:34+00:00</updated>
		<content type="html">&lt;p&gt;Nos últmos dias me reanimei a voltar a postar nesse blog.&lt;/p&gt;
&lt;p&gt;Estou tentando mudar para Python como a minha principal linguagem de script, mas ainda preciso aprender a programar direito nessa linguagem. Enquanto isso não acontece, eu fico replicando código de outros lugares, como a cópia de pobre da &lt;a href=&quot;http://www.cs.wustl.edu/~schmidt/ACE.html&quot;&gt;ACE_Task&lt;/a&gt; abaixo:&lt;/p&gt;
&lt;pre&gt;
&lt;font color=&quot;#a020f0&quot;&gt;import&lt;/font&gt; threading, Queue, signal

&lt;font color=&quot;#a020f0&quot;&gt;class&lt;/font&gt; &lt;font color=&quot;#228b22&quot;&gt;Task&lt;/font&gt;(object):
    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;__init__&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;):
        &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.queue = Queue.Queue(0)

    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;__worker&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;):
        &lt;font color=&quot;#a020f0&quot;&gt;while&lt;/font&gt; &lt;font color=&quot;#a020f0&quot;&gt;True&lt;/font&gt;:
            item = &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.queue.get()
            &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.process(item)
            &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.queue.task_done()

    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;__start&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;):
        thread = threading.Thread(target=&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.__worker)
        thread.setDaemon(&lt;font color=&quot;#a020f0&quot;&gt;True&lt;/font&gt;)
        thread.start()

    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;activate&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;, threads):
        &lt;font color=&quot;#a020f0&quot;&gt;for&lt;/font&gt; thread &lt;font color=&quot;#a020f0&quot;&gt;in&lt;/font&gt; xrange(threads):
            &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.__start()
        signal.signal(signal.SIGINT, signal.SIG_DFL)

    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;put&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;, item):
        &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.queue.put(item)

    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;wait&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;):
        &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.queue.join()

    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;process&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;, item):
        &lt;font color=&quot;#a020f0&quot;&gt;pass&lt;/font&gt;

&lt;font color=&quot;#a020f0&quot;&gt;class&lt;/font&gt; &lt;font color=&quot;#228b22&quot;&gt;task&lt;/font&gt;(Task):
    &lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;__init__&lt;/font&gt;(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;, func):
        Task.__init__(&lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;)
        &lt;font color=&quot;#a020f0&quot;&gt;self&lt;/font&gt;.process = func
&lt;/pre&gt;
&lt;p&gt;A única coisa pytônica do código é o decorator do final. &lt;/p&gt;
&lt;p&gt;Bom, um exemplo de uso: digamos que você é um spammer e quer mandar vários emails. Você tem um arquivo em que cada linha tem as seguintes informações: servidor; email; subject; mensagem. Tudo separado por ponto e vírgula. &lt;/p&gt;
&lt;p&gt;Usando o decorator acima o código ficaria mais ou menos assim (usando 100 threads):&lt;/p&gt;
&lt;pre&gt;
&lt;font color=&quot;#a020f0&quot;&gt;from&lt;/font&gt; __future__ &lt;font color=&quot;#a020f0&quot;&gt;import&lt;/font&gt; with_statement
&lt;font color=&quot;#a020f0&quot;&gt;from&lt;/font&gt; task &lt;font color=&quot;#a020f0&quot;&gt;import&lt;/font&gt; task
&lt;font color=&quot;#a020f0&quot;&gt;import&lt;/font&gt; smtplib, sys

&lt;font color=&quot;#da70d6&quot;&gt;@task&lt;/font&gt;
&lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;send_spam&lt;/font&gt;(item):
    server, toaddr, subject, msg = item.strip().split(&lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8216;;&amp;#8217;&lt;/font&gt;)
    fromaddr = &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8217;spammer@evil.org&amp;#8217;&lt;/font&gt;
    message = (&lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8220;From: %s&amp;#92;r&amp;#92;nTo: %s&amp;#92;r&amp;#92;nSubject: %s&amp;#92;r&amp;#92;n&amp;#92;r&amp;#92;n%s&amp;#8221;&lt;/font&gt;
               % (fromaddr, toaddr, subject, msg))
    &lt;font color=&quot;#a020f0&quot;&gt;try&lt;/font&gt;:
        smtp = smtplib.SMTP(server)
        smtp.sendmail(fromaddr, toaddr, message)
    &lt;font color=&quot;#a020f0&quot;&gt;except&lt;/font&gt; Exception:
        &lt;font color=&quot;#a020f0&quot;&gt;pass&lt;/font&gt;

&lt;font color=&quot;#a020f0&quot;&gt;def&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;process_file&lt;/font&gt;(filename):
    send_spam.activate(100)
    &lt;font color=&quot;#a020f0&quot;&gt;with&lt;/font&gt; open(filename) &lt;font color=&quot;#a020f0&quot;&gt;as&lt;/font&gt; file:
        map(&lt;font color=&quot;#a020f0&quot;&gt;lambda&lt;/font&gt; line: send_spam.put(line), file.readlines())
    send_spam.wait()

&lt;font color=&quot;#a020f0&quot;&gt;if&lt;/font&gt; __name__ == &lt;font color=&quot;#bc8f8f&quot;&gt;&amp;#8216;__main__&amp;#8217;&lt;/font&gt;:
    process_file(sys.argv[1])
&lt;/pre&gt;
&lt;p&gt;Coloquei esse exemplo porque não tinha um melhor&amp;#8230; é apenas um exemplo, não um programa de verdade, ok? &lt;img src=&quot;http://blog.lucindo.com.br/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:-P&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href=&quot;http://lucindo.com.br/python/task.txt&quot;&gt;task.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To do&lt;/strong&gt;: reescrever em &lt;a href=&quot;http://python.org/download/releases/2.6/&quot;&gt;Python 2.6&lt;/a&gt; usando &lt;a href=&quot;http://docs.python.org/library/multiprocessing.html&quot;&gt;Multiprocessos&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Frase do dia</title>
		<link href="http://blog.lucindo.com.br/2008/09/21/frase-do-dia/"/>
		<id>http://blog.lucindo.com.br/2008/09/21/frase-do-dia/</id>
		<updated>2008-09-22T01:28:39+00:00</updated>
		<content type="html">&lt;p&gt;Só porque esse blog está muito parado:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Eight years to do TeX? How smart can he be? He should have used Lisp.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tilton-technology.com/&quot;&gt;Kenny&lt;/a&gt; &lt;a href=&quot;http://smuglispweeny.blogspot.com/&quot;&gt;Tilton&lt;/a&gt;, sobre &lt;a href=&quot;http://www-cs-faculty.stanford.edu/~uno/&quot;&gt;Donald Knuth&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>(blog 'lucindo)</name>
			<uri>http://blog.lucindo.com.br</uri>
		</author>
		<source>
			<title type="html">(blog 'lucindo)</title>
			<subtitle type="html">um dia eu aprendo a programar</subtitle>
			<link rel="self" href="http://blog.lucindo.com.br/feed/"/>
			<id>http://blog.lucindo.com.br/feed/</id>
			<updated>2008-12-13T19:00:12+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">The need for speed</title>
		<link href="http://www.ventonegro.org/2008/09/the-need-for-speed/"/>
		<id>http://www.ventonegro.org/?p=35</id>
		<updated>2008-09-19T21:05:59+00:00</updated>
		<content type="html">&lt;p&gt;I have found a &lt;a href=&quot;https://webmail.iro.umontreal.ca/pipermail/mslug/2007-December/000241.html&quot; title=&quot;Floating point speed of Gambit-C&quot;&gt;very interesting thread&lt;/a&gt; in the &lt;a href=&quot;http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page&quot; title=&quot;Gambit-C&quot;&gt;Gambit-C Scheme&lt;/a&gt; mailing list. Marc Feeley tries to dismiss the myth that floating-point calculations are inherently faster in C/C++ than in Scheme, which is taken as common wisdom. The the work of Bradley Lucier is cited as a case of very fast numerical Scheme code.
&lt;p&gt;Bradley himself &lt;a href=&quot;https://webmail.iro.umontreal.ca/pipermail/mslug/2007-December/000251.html&quot; title=&quot;Floating point speed of Gambit-C&quot;&gt;replies&lt;/a&gt;, in which he explains that his code is roughly half as fast as it would have been if coded in C, but the memory bandwidth is the culprit and it does not matter anyway. An interesting part of the email is this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I didn&amp;#8217;t mind rewriting the level-1 BLAS code in Scheme, however, as   it didn&amp;#8217;t seem worth the trouble to get a small speedup in the entire   system just to use a dot-product or saxpy written in C and called   from an FFI.  I have enough difficulty in getting students to admit to themselves that, yes, this system is fast (just about as fast as any expert could have written it, and probably much faster than your average graduate student could have written it) and it&amp;#8217;s flexible (it&amp;#8217;s only at the end of the course that some students reluctantly admit that they could not have finished their semester project in their favorite language, whether C or C++), and that the speed doesn&amp;#8217;t arise from level-1 BLAS written in C (because they&amp;#8217;re written   in Scheme).  One point that most students seem to take away from the class is that multigrid is one hell of a lot faster than conjugate gradient, and many of them have been using conjugate gradient in their own projects simply because it&amp;#8217;s too hard to program multigrid in C or C++ (at least the first time you try it). So one gets a lot of speedup simply by being able to program more sophisticated algorithms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There is also a toy ray-tracer written in Gambit-C, &lt;a href=&quot;http://smallnum.blogspot.com/2007/10/scheme-raytracer-written-in-couple-of.html&quot; title=&quot;Scheme Raytracer written in a couple of days&quot;&gt;Schemeray&lt;/a&gt;, which was further &lt;a href=&quot;http://smallnum.blogspot.com/2007/10/scheme-raytracer-optimized.html&quot; title=&quot;Scheme Raytracer Optimized&quot;&gt;optimised&lt;/a&gt; by Marc Feeley, and &lt;a href=&quot;https://webmail.iro.umontreal.ca/pipermail/gambit-list/2008-March/002235.html&quot; title=&quot;Updated Schemeray&quot;&gt;even more&lt;/a&gt; by (again) Bradley Lucier. The times are impressive, thanks to all the clever compiler tricks Gambit-C uses when generating C code, like inlining, partial code evaluation and generating one C function per Scheme module (avoiding expensive inter-module C calls).&lt;/p&gt;
&lt;p&gt;The code generated by Gambit-C is fast enough for 99.99% of the applications out there. And this is using a &lt;em&gt;strong, dynamically-typed&lt;/em&gt; language, with first-class closures and continuations, arbitrary-precision numbers, and the powerful macros of the Lisp family of languages. There is hardly need to use C or C++ even in the most demanding applications. The same cannot be said of Perl, Python or Ruby, whose applications usually run much slower than one created with Gambit-C. And, if the need &lt;strong&gt;really&lt;/strong&gt; arises, interfacing Gambit-C with C code is extremely easy.&lt;/p&gt;&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Call me a whiner</title>
		<link href="http://www.ventonegro.org/2008/09/call-me-a-whiner/"/>
		<id>http://www.ventonegro.org/?p=31</id>
		<updated>2008-09-08T14:08:25+00:00</updated>
		<content type="html">&lt;p&gt;But there are out there things like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We don&amp;#8217;t really care about the title but we want someone good (who doesn&amp;#8217;t?). We need someone able to model &lt;em&gt;and&lt;/em&gt; code well (No architect who never codes). The ability to communicate well with a team is also a big plus. You don&amp;#8217;t need to speak French (we are in France) but a reasonably good English is mandatory.&lt;/p&gt;
&lt;ul&gt;If You:&lt;/ul&gt;&lt;/blockquote&gt;
&lt;li&gt;like coding 4+ hours straight&lt;/li&gt;
&lt;li&gt;like to solve a coding problem elegantly (and are bothered if can&amp;#8217;t)&lt;/li&gt;
&lt;li&gt;like and read &lt;em&gt;real&lt;/em&gt; CS books (SICP, EGB, TAOCP, etc&amp;#8230;)&lt;/li&gt;
&lt;li&gt;code in Haskell, Python and C++&lt;/li&gt;
&lt;li&gt;are a gamer (this one is optional)&lt;/li&gt;
&lt;li&gt;are interested in computer graphics (optional too)&lt;/li&gt;

&lt;ul&gt;What we offer:&lt;/ul&gt;
&lt;li&gt;interesting problems and creative freedom&lt;/li&gt;
&lt;li&gt;quality of life (no overtime, sunny countryside, French food and low rent)&lt;/li&gt;
&lt;li&gt;a pay in Euros&lt;/li&gt;
&lt;li&gt;comfortable workplace, etc&amp;#8230;&lt;/li&gt;
&lt;li&gt;coding in Haskell, Python&lt;/li&gt;

&lt;p&gt;The boss &lt;em&gt;really&lt;/em&gt; codes. He likes Haskell, Python, &lt;a href=&quot;http://www.reddit.com/&quot;&gt;Reddit&lt;/a&gt;, and wants the team to be there for the long run (i.e. happy). He also modestly wrote and posted this jobs offer.&lt;/p&gt;

&lt;p&gt;So let me see: Haskell, games, and Computer Graphics. How sweet. Also, note the emphasis on how the boss and &amp;#8220;architects&amp;#8221; still code. In underdeveloped places, coding is just for drones, and bosses and &amp;#8220;architects&amp;#8221; can&amp;#8217;t do it to save their lives.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Interface para manipulação de grupos no LDAP</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/09/interface-para-manipulao-de-grupos-no.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-6826503713664660458</id>
		<updated>2008-09-04T06:32:34+00:00</updated>
		<content type="html">A seguir está uma simples, rápida e não muito elegante interface para manipulação de grupos de usuários no &lt;a href=&quot;http://tools.ietf.org/html/rfc4510&quot;&gt;LDAP&lt;/a&gt; (&lt;i&gt;Lightweight Directory Access Protocol&lt;/i&gt;) que usa o programa &lt;a href=&quot;http://cpu.sourceforge.net/&quot;&gt;cpu&lt;/a&gt; por baixo dos panos. A implementação é em &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; Scheme.&lt;br /&gt;&lt;br /&gt; Com esta ferramenta são possíveis as seguintes operações:&lt;br /&gt;&lt;br /&gt; &lt;ul&gt;&lt;li&gt;Listar grupos aos quais um dado usuário pertence&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Listar usuários que fazem parte de um dado grupo&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Adicionar usuário a grupo&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt; Exemplos:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ ldap-groups.scm -h&lt;br /&gt;Uso: ldap-groups.scm -h | -a &amp;lt;user&amp;gt; &amp;lt;group&amp;gt; | -l &amp;lt;group&amp;gt; | -g &amp;lt;user&amp;gt;&lt;br /&gt;&lt;br /&gt;-a : adiciona &amp;lt;user&amp;gt; ao grupo &amp;lt;group&amp;gt; (cria &amp;lt;group&amp;gt; se nao existir)&lt;br /&gt;-l : lista os usuarios do grupo &amp;lt;group&amp;gt;&lt;br /&gt;-g : lista os grupos a que pertence o usuario &amp;lt;user&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Listando os usuários do grupo &lt;code&gt;admin&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ ldap-groups.scm -l admin&lt;br /&gt;mario&lt;br /&gt;joao&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Listando os grupos a que pertenço:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ ldap-groups.scm -g mario&lt;br /&gt;sgpc&lt;br /&gt;admin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Adicionando o meu usuário ao grupo &lt;code&gt;printer&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ ldap-groups.scm -a mario printer&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; O código está abaixo:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;(use posix srfi-13)&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;system-output&lt;/font&gt;&lt;/b&gt; . command)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((cmd (string-intersperse (map -&amp;gt;string command))))&lt;br /&gt;    (read-all (open-input-pipe (sprintf &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;~A 2&amp;gt;&amp;amp;1&amp;quot;&lt;/font&gt;&lt;/b&gt; cmd)))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;*groups-data*&lt;/font&gt;&lt;/b&gt; #f)&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;set-groups-data!&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; *groups-data*&lt;br /&gt;  &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; lista de listas ((&amp;quot;grupo&amp;quot; &amp;quot;user1&amp;quot; &amp;quot;user2&amp;quot; ... &amp;quot;usern&amp;quot;))&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;        (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((data (with-input-from-string&lt;br /&gt;                        (cadr (string-split-fields&lt;br /&gt;                               &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;Group Entries\n&amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;                               (system-output &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;cpu cat&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;                               infix:))&lt;br /&gt;                      read-lines)))&lt;br /&gt;          (map (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; (line)&lt;br /&gt;                 (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((ldata (string-split line &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;:&amp;quot;&lt;/font&gt;&lt;/b&gt;)))&lt;br /&gt;                   (cons (car ldata) &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; nome do grupo&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;                         (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((users (cdddr ldata))) &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; usuarios&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;                           (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (null? users)&lt;br /&gt;                               '()&lt;br /&gt;                               (map&lt;br /&gt;                                string-trim-both&lt;br /&gt;                                (string-split (car users) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;,&amp;quot;&lt;/font&gt;&lt;/b&gt;)))))))&lt;br /&gt;               data))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;get-groups&lt;/font&gt;&lt;/b&gt; user)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((user-groups '()))&lt;br /&gt;    (for-each (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; (group/users)&lt;br /&gt;                (when (member user (cdr group/users))&lt;br /&gt;                  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; user-groups&lt;br /&gt;                        (cons (car group/users) user-groups))))&lt;br /&gt;              *groups-data*)&lt;br /&gt;    user-groups))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;group-exists?&lt;/font&gt;&lt;/b&gt; group)&lt;br /&gt;  (not (not (alist-ref group *groups-data* equal?))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;get-users&lt;/font&gt;&lt;/b&gt; group)&lt;br /&gt;  (alist-ref group *groups-data* equal?))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;add-user-to-group!&lt;/font&gt;&lt;/b&gt; user group)&lt;br /&gt;  (unless (group-exists? group)&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((cmd (conc &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;cpu groupadd &amp;quot;&lt;/font&gt;&lt;/b&gt; group)))&lt;br /&gt;      (print cmd)&lt;br /&gt;      (system-output cmd)))&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((cmd (conc &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;cpu usermod &amp;quot;&lt;/font&gt;&lt;/b&gt; user &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot; -G &amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;                   (string-intersperse&lt;br /&gt;                    (cons group (get-groups user)) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;,&amp;quot;&lt;/font&gt;&lt;/b&gt;))))&lt;br /&gt;    (print cmd)&lt;br /&gt;    (system-output cmd)))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;usage&lt;/font&gt;&lt;/b&gt; #!optional exit-code)&lt;br /&gt;  (print #&amp;lt;#EOF&lt;br /&gt;Uso: #(program-name) -h | -a &amp;lt;user&amp;gt; &amp;lt;group&amp;gt; | -l &amp;lt;group&amp;gt; | -g &amp;lt;user&amp;gt;&lt;br /&gt;&lt;br /&gt;-a &lt;b&gt;&lt;font color=&quot;#5F9EA0&quot;&gt;:&lt;/font&gt;&lt;/b&gt; adiciona &amp;lt;user&amp;gt; ao grupo &amp;lt;group&amp;gt; (cria &amp;lt;group&amp;gt; se nao existir)&lt;br /&gt;-l &lt;b&gt;&lt;font color=&quot;#5F9EA0&quot;&gt;:&lt;/font&gt;&lt;/b&gt; lista os usuarios &lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;do&lt;/font&gt;&lt;/b&gt; grupo &amp;lt;group&amp;gt;&lt;br /&gt;-g &lt;b&gt;&lt;font color=&quot;#5F9EA0&quot;&gt;:&lt;/font&gt;&lt;/b&gt; lista os grupos a que pertence o usuario &amp;lt;user&amp;gt;&lt;br /&gt;EOF&lt;br /&gt;)&lt;br /&gt;  (when exit-code&lt;br /&gt;    (exit exit-code)))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((args (command-line-arguments)))&lt;br /&gt;  (when (null? args)&lt;br /&gt;    (usage 1))&lt;br /&gt;  (set-groups-data!)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;cond&lt;/font&gt;&lt;/b&gt; ((member (car args) '(&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;-h&amp;quot;&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;--help&amp;quot;&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;-help&amp;quot;&lt;/font&gt;&lt;/b&gt;))&lt;br /&gt;         (usage))&lt;br /&gt;        ((member &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;-a&amp;quot;&lt;/font&gt;&lt;/b&gt; args)&lt;br /&gt;         (add-user-to-group! (cadr args) (caddr args)))&lt;br /&gt;        ((member &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;-l&amp;quot;&lt;/font&gt;&lt;/b&gt; args)&lt;br /&gt;         (map print (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;or&lt;/font&gt;&lt;/b&gt; (get-users (cadr args)) '())))&lt;br /&gt;        ((member &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;-g&amp;quot;&lt;/font&gt;&lt;/b&gt; args)&lt;br /&gt;         (map print (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;or&lt;/font&gt;&lt;/b&gt; (get-groups (cadr args)) '())))&lt;br /&gt;        (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;else&lt;/font&gt;&lt;/b&gt; (usage 1))))&lt;br /&gt;&lt;/pre&gt;</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Not luck</title>
		<link href="http://www.ventonegro.org/2008/08/not-luck/"/>
		<id>http://www.ventonegro.org/?p=27</id>
		<updated>2008-08-27T18:13:43+00:00</updated>
		<content type="html">&lt;p&gt; There is a recurrent angst I feel every time I think I could be working daily in a decent programming language. Usually the &lt;em&gt;management&lt;/em&gt; people believe the choice of programming language is irrelevant, but we developers know better. &lt;a href=&quot;http://en.wikipedia.org/wiki/Sapir%E2%80%93Whorf_hypothesis&quot; title=&quot;Sapir-Whorf hypothesis&quot;&gt;Languages shape our thoughts&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt; Today I found &lt;a href=&quot;http://logicaltypes.blogspot.com/2008/08/lucky-you.html&quot; title=&quot;Luck you!&quot;&gt;an interesting post&lt;/a&gt; about getting work using non-mainstream languages. &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Well, unlike Java jobs or C# jobs or VB jobs, where one can scan the newspaper or go to dice.com, these magical jobs are not the ones I get when recruiters solicit me (three times a day). No, they appear between the cracks of the sky when it rends in two. All but one contract (that did come from dice.com) came from the company CEO pulling me aside or phoning me out of the blue from the materials I had published inside the company where I was employed, or from my web-sites on programming languages. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; This basically means you must be a reference. You must blog a lot or, better yet, write even a book. When your name is said in a company meeting, somebody of the team &lt;strong&gt;must already have heard of you&lt;/strong&gt;. Needless to say, this is not easy at all. &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Usually and because of the exclusivity of the work it takes anywhere from at least 3 months to 2 years to secure these kinds of contracts, so the adage &amp;#8220;Don&amp;#8217;t quit your day job&amp;#8221; is an appropriate one here. When I do get these contracts, however, they usually last longer (3 years) than the Java/C++/XML/web-services-code-grinder ones (that usually last around 6 months), and the peer group is much more intelligent, genteel and just plain more interesting than the code-grinding crowd. Is is harder to find these magical contracts? Yes, they are rarified air. But are they worth preparing for and then finding? Definitely. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here we see that even after all this work, it is still &lt;em&gt;very hard&lt;/em&gt; to find these dream jobs. You can wait as long as two years to get one, simply because in most companies the management employ Java/C#/VB drones anyway, as they are cheaper and easier to find. Only when they face &lt;em&gt;really hard&lt;/em&gt; problems they start thinking of alternatives. &lt;/p&gt;
&lt;p&gt;This post only reinforces what was already in the back of my mind for a while: The least hard way to earn money and be happy at the same time is to start an own business. Now if I could only move my lazy ass&amp;#8230;&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">Testanto o rucksack</title>
		<link href="http://lispbr.blogspot.com/2008/08/testanto-o-rucksack.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-1868261431327360054</id>
		<updated>2008-08-17T20:53:17+00:00</updated>
		<content type="html">&lt;a&gt;Elephant&lt;/a&gt; é uma biblioteca para persistência de dados em Common Lisp construída em cima do &lt;a href=&quot;http://www.oracle.com/technology/products/berkeley-db/index.html&quot;&gt;BerkeleyDB&lt;/a&gt;. A biblioteca tem uma boa documentação e uma comunidade de usuários e mantenedores ativa, porém, eu não consigo fazer ela funcionar no Linux 64 bits (No Mac 32 bits funciona). Já escrevi para a lista deles e nenhuma resposta. É um bug na invocação da função em C db-env-create da BerkeleyDB. Tentei eu mesmo debugar o código do elephant, mas não foi para frente.&lt;br /&gt;&lt;br /&gt;Resolvi uma nova abordagem, hoje eu testei a biblioteca &lt;a href=&quot;http://common-lisp.net/project/rucksack/&quot;&gt;Rucksack&lt;/a&gt;. É um código menos maduro que o Elephant e aparentemente só um desenvolvedor o mantém, no entanto, o Rucksack não depende de nenhum código em C, é uma implementação de persistência totalmente feita em Common Lisp, inclusive com indexação por B-Tree. O desempenho me pareceu bom, consegui inserir mais de 26 mil registros em aproximadamente 140 segundos no MacBook.&lt;br /&gt;&lt;br /&gt;É muito bonito fazer tudo isso sem sair do Lisp. Essa biblioteca parece ter um grande potencial, por exemplo, uma linguagem de queries OOP ou baseada em Prolog iria ser muito legal (uma espécie de AllegroCache Free software).</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Configurando o tamanho do stack trace</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/08/configurando-o-tamanho-do-stack-trace.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-1951392417746440187</id>
		<updated>2008-08-12T05:18:01+00:00</updated>
		<content type="html">&lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; dispõe de uma opção para configurar o tamanho do relatório de chamadas de procedimentos (&lt;i&gt;stack trace&lt;/i&gt;) a ser exibido em caso de erro.  Se a configuração for omitida, o valor 8 é usado, o que significa que serão exibidas as últimas 8 chamadas de procedimento.&lt;br /&gt;&lt;br /&gt; Para algumas aplicações, esse número pode ser muito pequeno, mas pode ser aumentado com o parâmetro &lt;code&gt;-:aNUMBER&lt;/code&gt;, onde &lt;code&gt;NUMBER&lt;/code&gt; é o número de chamadas a ser mostrado (&lt;a href=&quot;http://chicken.wiki.br/Using%20the%20compiler#runtime-options&quot;&gt;http://chicken.wiki.br/Using%20the%20compiler#runtime-options&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt; Abaixo está um exemplo de uma situação onde o aumento do &lt;i&gt;stack trace&lt;/i&gt; pode ser útil:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;l&lt;/font&gt;&lt;/b&gt;) (error 'oops))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;k&lt;/font&gt;&lt;/b&gt;) (l))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;j&lt;/font&gt;&lt;/b&gt;) (k))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;i&lt;/font&gt;&lt;/b&gt;) (j))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;h&lt;/font&gt;&lt;/b&gt;) (i))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;g&lt;/font&gt;&lt;/b&gt;) (h))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;f&lt;/font&gt;&lt;/b&gt;) (g))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;e&lt;/font&gt;&lt;/b&gt;) (f))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;d&lt;/font&gt;&lt;/b&gt;) (e))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;c&lt;/font&gt;&lt;/b&gt;) (d))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;b&lt;/font&gt;&lt;/b&gt;) (c))&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;a&lt;/font&gt;&lt;/b&gt;) (b))&lt;br /&gt;&lt;br /&gt;(a)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Executando este código com o interpretador, temos:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ csi -s oops.scm&lt;br /&gt;Error: oops&lt;br /&gt;&lt;br /&gt;        Call history:&lt;br /&gt;&lt;br /&gt;                  [e] (f)&lt;br /&gt;                  [f] (g)&lt;br /&gt;                  [g] (h)&lt;br /&gt;                  [h] (i)&lt;br /&gt;                  [i] (j)&lt;br /&gt;                  [j] (k)&lt;br /&gt;                  [k] (l)&lt;br /&gt;                  [l] (error (quote oops))        --&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Com esse relatório, não fica claro que quem originou a chamada de &lt;code&gt;l&lt;/code&gt; foi &lt;code&gt;a&lt;/code&gt;. Mas, se aumentarmos o tamanho do relatório:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ csi -:a14 -s oops.scm&lt;br /&gt;Error: oops&lt;br /&gt;&lt;br /&gt;        Call history:&lt;br /&gt;&lt;br /&gt;                        (a)&lt;br /&gt;                  (a)&lt;br /&gt;                  [a] (b)&lt;br /&gt;                  [b] (c)&lt;br /&gt;                  [c] (d)&lt;br /&gt;                  [d] (e)&lt;br /&gt;                  [e] (f)&lt;br /&gt;                  [f] (g)&lt;br /&gt;                  [g] (h)&lt;br /&gt;                  [h] (i)&lt;br /&gt;                  [i] (j)&lt;br /&gt;                  [j] (k)&lt;br /&gt;                  [k] (l)&lt;br /&gt;                  [l] (error (quote oops))        --&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; O parâmetro &lt;code&gt;-:aNUMBER&lt;/code&gt; também é válido para programas compilados com o compilador de Chicken (&lt;a href=&quot;http://chicken.wiki.br/Using%20the%20compiler&quot;&gt;&lt;code&gt;csc&lt;/code&gt;&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;$ csc oops.scm&lt;br /&gt;$ ./oops&lt;br /&gt;Error: oops&lt;br /&gt;&lt;br /&gt;        Call history:&lt;br /&gt;&lt;br /&gt;        oops.scm: 8    f&lt;br /&gt;        oops.scm: 7    g&lt;br /&gt;        oops.scm: 6    h&lt;br /&gt;        oops.scm: 5    i&lt;br /&gt;        oops.scm: 4    j&lt;br /&gt;        oops.scm: 3    k&lt;br /&gt;        oops.scm: 2    l&lt;br /&gt;        oops.scm: 1    error                    --&lt;br /&gt;&lt;br /&gt;$ ./oops -:a14&lt;br /&gt;Error: oops&lt;br /&gt;&lt;br /&gt;        Call history:&lt;br /&gt;&lt;br /&gt;        oops.scm: 14   a&lt;br /&gt;        oops.scm: 12   b&lt;br /&gt;        oops.scm: 11   c&lt;br /&gt;        oops.scm: 10   d&lt;br /&gt;        oops.scm: 9    e&lt;br /&gt;        oops.scm: 8    f&lt;br /&gt;        oops.scm: 7    g&lt;br /&gt;        oops.scm: 6    h&lt;br /&gt;        oops.scm: 5    i&lt;br /&gt;        oops.scm: 4    j&lt;br /&gt;        oops.scm: 3    k&lt;br /&gt;        oops.scm: 2    l&lt;br /&gt;        oops.scm: 1    error                    --&lt;br /&gt;&lt;/pre&gt;</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Chicken Web REPL</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/08/chicken-web-repl.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-7731380279223882853</id>
		<updated>2008-08-06T09:17:15+00:00</updated>
		<content type="html">Há algum tempo eu e o &lt;a href=&quot;http://vilson.void.cc/&quot;&gt;Vilson&lt;/a&gt; estávamos discutindo sobre REPLs na Web (não lembro o que desencadeou esse tópico -- também é possível que o tópico não tenha sido esse -- tá feio o caso da minha memória). Bem, o fato é que desta conversa surgiu a idéia de fazer um REPL via Web para &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt;. Lembrei do egg &lt;a href=&quot;http://www.call-with-current-continuation.org/eggs/3/sandbox.html&quot;&gt;sandbox&lt;/a&gt;, do &lt;a href=&quot;http://chicken.wiki.br/playground&quot;&gt;Chicken Playground&lt;/a&gt; (um ambiente chroot com uma instalação de &lt;a href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt;, &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; e um monte de &lt;a href=&quot;http://chicken.wiki.br/eggs&quot;&gt;eggs&lt;/a&gt;) e fiz um Web REPL simples para Chicken.&lt;br /&gt;&lt;br /&gt; Em seguida, o Vilson descobriu o &lt;a href=&quot;http://www.cdolivet.net/editarea/&quot;&gt;EditArea&lt;/a&gt; (um editor de código em Javascript) e modificou para adicionar um suporte básico a Common Lisp.  Enviou o código para mim e eu, com base nele, adicionei suporte básico a Scheme.&lt;br /&gt;&lt;br /&gt; O resultado está em &lt;a href=&quot;http://repl.ucpel.tche.br:8080&quot;&gt;http://repl.ucpel.tche.br:8080&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_ade5bioRWEE/SJnKWrc6VDI/AAAAAAAAAAU/t5Sa0yv7Ytc/s1600-h/web-repl.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_ade5bioRWEE/SJnKWrc6VDI/AAAAAAAAAAU/t5Sa0yv7Ytc/s320/web-repl.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5231434933137462322&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; Uma das funcionalidades interessantes do Web REPL é o uso de sessões HTTP para manter coisas como histórico de trechos de código submetidos ao avaliador e definições feitas na sessão.  A implementação de sessões é feita com o egg &lt;a href=&quot;http://chicken.wiki.br/http-session&quot;&gt;http-session&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O Web REPL também usa os eggs &lt;a href=&quot;http://chicken.wiki.br/web-scheme&quot;&gt;web-scheme&lt;/a&gt;, &lt;a href=&quot;http://www.call-with-current-continuation.org/eggs/3/ajax.html&quot;&gt;ajax&lt;/a&gt;, &lt;a href=&quot;http://www.call-with-current-continuation.org/eggs/3/spiffy-utils.html&quot;&gt;spiffy-utils&lt;/a&gt; e &lt;a href=&quot;http://chicken.wiki.br/spiffy&quot;&gt;spiffy&lt;/a&gt; (servidor web).</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">REPL de Chicken para acesso a bases de dados do Postgres</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/08/repl-de-chicken-para-acesso-bases-de.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-901579252181802714</id>
		<updated>2008-08-06T08:26:48+00:00</updated>
		<content type="html">A seguir está uma forma de usar o REPL de &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; (&lt;a href=&quot;http://chicken.wiki.br/Using%20the%20interpreter&quot;&gt;csi&lt;/a&gt;) como um REPL para bases de dados do &lt;a href=&quot;http://www.postgresql.org/&quot;&gt;Postgres&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; Com isso, tem-se um REPL que possibilita a execução de consultas SQL e código Scheme.  A implementação usa o próprio REPL do sistema &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; e alguns &lt;a href=&quot;http://chicken.wiki.br/eggs&quot;&gt;eggs&lt;/a&gt; como: &lt;a href=&quot;http://chicken.wiki.br/postgresql&quot;&gt;postgresql&lt;/a&gt; (para acesso so Postgres), &lt;a href=&quot;http://chicken.wiki.br/readline&quot;&gt;readline&lt;/a&gt; (para edição de linhas de comando, histórico) e &lt;a href=&quot;http://chicken.wiki.br/stty&quot;&gt;stty&lt;/a&gt; (para configuração do terminal na leitura de senhas).&lt;br /&gt;&lt;br /&gt; O programa &lt;code&gt;db-repl.scm&lt;/code&gt; usa como argumentos não interativos (opcionais) o usuário do banco de dados, o nome do host e a base de dados, os quais devem ser fornecidos no seguinte formato:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&amp;lt;usuario&amp;gt;@&amp;lt;host&amp;gt;/&amp;lt;base de dados&amp;gt;&lt;/pre&gt;&lt;br /&gt; Quando executado, o programa pede para o usuário digitar a senha.&lt;br /&gt;&lt;br /&gt; A associação do REPL de &lt;a href=&quot;http://www.call-with-current-continuation.org&quot;&gt;Chicken&lt;/a&gt; com a base de dados é feita através da definição de comandos do REPL (&lt;a href=&quot;http://chicken.wiki.br/Using%20the%20interpreter#toplevel-command&quot;&gt;&lt;code&gt;toplevel-command&lt;/code&gt;&lt;/a&gt;). Na implementação mostrada abaixo, são definidos três comandos:&lt;br /&gt;&lt;br /&gt; &lt;ul&gt;&lt;li&gt;&lt;code&gt;tables&lt;/code&gt;: mostras as tabelas da base de dados.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;table&lt;/code&gt;: mostra estrutura da tabela dada como argumento (nome e tipo das colunas e se podem ou não ser nulas).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;-&lt;/code&gt;: executa a consulta SQL dada como argumento.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt; Exemplos:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;csi -s db-repl.scm mario@localhost/sgpc&lt;br /&gt;Senha: *****&lt;br /&gt;&lt;br /&gt;#;1&gt; ,tables&lt;br /&gt;perms&lt;br /&gt;news&lt;br /&gt;users_sites&lt;br /&gt;ticket_comments&lt;br /&gt;ticket_attachments&lt;br /&gt;obj_type&lt;br /&gt;acervos&lt;br /&gt;autores&lt;br /&gt;videos&lt;br /&gt;audios&lt;br /&gt;images&lt;br /&gt;objects&lt;br /&gt;texts&lt;br /&gt;scanners&lt;br /&gt;users&lt;br /&gt;wiki&lt;br /&gt;sites&lt;br /&gt;tickets&lt;br /&gt;&lt;br /&gt;#;1&gt; ,table news&lt;br /&gt;news_id                       integer                       NO&lt;br /&gt;user_id                       integer                       NO&lt;br /&gt;site_id                       integer                       NO&lt;br /&gt;timestamp                     timestamp without time zone   YES&lt;br /&gt;title                         character varying(100)        NO&lt;br /&gt;news                          text                          YES&lt;br /&gt;&lt;br /&gt;#;1&gt; ,- select * from news&lt;br /&gt;(#(2&lt;br /&gt;   1&lt;br /&gt;   1&lt;br /&gt;   #(2008 7 30 19 37 54 271625)&lt;br /&gt;   &quot;Teste.&quot;&lt;br /&gt;   &quot;teste&lt;br /&gt;&lt;br /&gt;   === titulo&quot;)&lt;br /&gt; #(3&lt;br /&gt;   1&lt;br /&gt;   1&lt;br /&gt;   #(2008 7 30 19 40 27 180765)&lt;br /&gt;   &quot;Outra notícia!&quot;&lt;br /&gt;   &quot;Aqui vai o texto da notícia.&lt;br /&gt;&lt;br /&gt;[[image:http://subversion.tigris.org/branding/images/logo.gif|Logo]]&quot;))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Obviamente, os comandos para acesso ao banco de dados disponibilizados através do REPL podem ser estendidos.  O texto &lt;a href=&quot;http://www.alberton.info/postgresql_meta_info.html&quot;&gt;PostgreSQL INFORMATION_SCHEMA&lt;/a&gt; fornece várias dicas de como extrair informações de bases de dados do Postgres.&lt;br /&gt;&lt;br /&gt; Nesta implementação, o parâmetro &lt;code&gt;pg-repl:conn&lt;/code&gt; armazena o objeto que representa a conexão com o banco de dados, de forma que ele pode ser usado pelos procedimentos do egg &lt;a href=&quot;http://chicken.wiki.br/postgresql&quot;&gt;postgresql&lt;/a&gt; para a execução de consultas:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;&lt;br /&gt;#;1&gt; (define query  &quot;select * from news&quot;)&lt;br /&gt;#;2&gt; (vector-ref (car (pg:query-tuples query (pg-repl:conn))) 3)&lt;br /&gt;#(2008 7 30 19 37 54 271625)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; O código do programa (&lt;code&gt;db-repl.scm&lt;/code&gt;) está a seguir:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;(use utils postgresql readline stty regex (srfi 13))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;pg-repl:conn&lt;/font&gt;&lt;/b&gt; (make-parameter #f))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;pg-repl:query&lt;/font&gt;&lt;/b&gt; . query)&lt;br /&gt;  (pg:query-tuples&lt;br /&gt;   (string-intersperse (map -&amp;gt;string query) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;   (pg-repl:conn)))&lt;br /&gt;&lt;br /&gt;(toplevel-command&lt;br /&gt; '-&lt;br /&gt; (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; ()&lt;br /&gt;   (pp (pg-repl:query&lt;br /&gt;        (with-output-to-string&lt;br /&gt;          (cut print (read-line)))))))&lt;br /&gt;&lt;br /&gt;(toplevel-command&lt;br /&gt; 'table&lt;br /&gt; (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; ()&lt;br /&gt;   (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let*&lt;/font&gt;&lt;/b&gt; ((table (string-trim-both (read-line)))&lt;br /&gt;          (cols&lt;br /&gt;           (pg-repl:query&lt;br /&gt;            &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;select column_name,data_type,&amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;            &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;character_maximum_length,is_nullable &amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;            &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;from information_schema.columns &amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;            &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;where table_name = '&amp;quot;&lt;/font&gt;&lt;/b&gt; table &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;'&amp;quot;&lt;/font&gt;&lt;/b&gt;)))&lt;br /&gt;     (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (null? cols)&lt;br /&gt;         (print &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;Tabela \&amp;quot;&amp;quot;&lt;/font&gt;&lt;/b&gt; table &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;\&amp;quot; nao existe.&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;         (for-each&lt;br /&gt;          (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; (f)&lt;br /&gt;            (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((colname (vector-ref f 0))&lt;br /&gt;                  (type (vector-ref f 1))&lt;br /&gt;                  (size (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((size (vector-ref f 2)))&lt;br /&gt;                          (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (pg:sql-null-object? size)&lt;br /&gt;                              &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;                              (conc &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;(&amp;quot;&lt;/font&gt;&lt;/b&gt; size &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;)&amp;quot;&lt;/font&gt;&lt;/b&gt;))))&lt;br /&gt;                  (nullable (vector-ref f 3)))&lt;br /&gt;              (print&lt;br /&gt;               colname&lt;br /&gt;               (make-string&lt;br /&gt;                (- 30 (string-length colname)))&lt;br /&gt;               type size&lt;br /&gt;               (make-string&lt;br /&gt;                (- 30 (string-length (conc type size))))&lt;br /&gt;               nullable)))&lt;br /&gt;          cols)))))&lt;br /&gt;&lt;br /&gt;(toplevel-command&lt;br /&gt; 'tables&lt;br /&gt; (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; ()&lt;br /&gt;   (for-each&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; (item)&lt;br /&gt;      (print (vector-ref item 0)))&lt;br /&gt;    (pg-repl:query&lt;br /&gt;     &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;select table_name from information_schema.tables &amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;     &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;where table_type = 'BASE TABLE' &amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;     &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;and table_schema not in &amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;     &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;('pg_catalog', 'information_schema')&amp;quot;&lt;/font&gt;&lt;/b&gt;))))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;define&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;pg-repl:usage&lt;/font&gt;&lt;/b&gt; #!optional exit-code)&lt;br /&gt;  (print (program-name) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot; [&amp;lt;user&amp;gt;@&amp;lt;server&amp;gt;/&amp;lt;database&amp;gt;]&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (when exit-code (exit exit-code)))&lt;br /&gt;&lt;br /&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let&lt;/font&gt;&lt;/b&gt; ((args (command-line-arguments))&lt;br /&gt;      (user &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;postgres&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;      (host &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;localhost&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;      (db &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;template&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;      (passwd #f))&lt;br /&gt;&lt;br /&gt;  &lt;i&gt;&lt;font color=&quot;#B22222&quot;&gt;;; Restaura o terminal em caso de termino via C-c&lt;br /&gt;&lt;/font&gt;&lt;/i&gt;  (set-signal-handler! signal/int&lt;br /&gt;                       (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;lambda&lt;/font&gt;&lt;/b&gt; (_) (stty '(echo))))&lt;br /&gt;&lt;br /&gt;  (unless (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;or&lt;/font&gt;&lt;/b&gt; (null? args) (equal? &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;\&amp;quot;\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/b&gt; (car args)))&lt;br /&gt;    (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;let*&lt;/font&gt;&lt;/b&gt; ((cred (string-trim-both&lt;br /&gt;                  (car args)&lt;br /&gt;                  (cut memq &amp;lt;&amp;gt; '(#\space #\newline #\&lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;)))) ;&amp;quot;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;           (@tokens (string-split cred &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;@&amp;quot;&lt;/font&gt;&lt;/b&gt;))&lt;br /&gt;           (/tokens (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (null? @tokens)&lt;br /&gt;                        '()&lt;br /&gt;                        (string-split (cadr @tokens) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;/&amp;quot;&lt;/font&gt;&lt;/b&gt;))))&lt;br /&gt;      (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;if&lt;/font&gt;&lt;/b&gt; (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;and&lt;/font&gt;&lt;/b&gt; (null? @tokens) (null? /tokens))&lt;br /&gt;          (pg-repl:usage 1)&lt;br /&gt;          (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;begin&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;            (unless (null? @tokens)&lt;br /&gt;              (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; user (car @tokens)))&lt;br /&gt;            (unless (null? /tokens)&lt;br /&gt;              (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; host (car /tokens))&lt;br /&gt;              (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;set!&lt;/font&gt;&lt;/b&gt; db (cadr /tokens)))))))&lt;br /&gt;  (display &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;Senha: &amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (pg-repl:conn&lt;br /&gt;   (pg:connect&lt;br /&gt;    `((user . ,user)&lt;br /&gt;      (dbname . ,db)&lt;br /&gt;      (host . ,host)&lt;br /&gt;      (password . ,(with-stty '(not echo) read-line)))))&lt;br /&gt;  (current-input-port (make-gnu-readline-port))&lt;br /&gt;  (gnu-history-install-file-manager&lt;br /&gt;   (string-append (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;or&lt;/font&gt;&lt;/b&gt; (getenv &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;HOME&amp;quot;&lt;/font&gt;&lt;/b&gt;) &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;.&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;                  &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;/.csi.history&amp;quot;&lt;/font&gt;&lt;/b&gt;))&lt;br /&gt;  (newline)&lt;br /&gt;  (repl))&lt;br /&gt;&lt;/pre&gt;</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Copy &amp;amp; comment</title>
		<link href="http://call-with-hopeless-continuation.blogspot.com/2008/07/copy-comment.html"/>
		<id>tag:blogger.com,1999:blog-7213650200249361122.post-3744481839981502092</id>
		<updated>2008-07-31T19:21:20+00:00</updated>
		<content type="html">Para quem seguidamente, como eu:&lt;br /&gt;&lt;br /&gt; 1. tem preguiça de criar uma revisão no VCS para alterar algo pequeno no código (só para ver se dá certo -- se não der, volta atrás rapidinho);&lt;br /&gt;&lt;br /&gt; 2. acha muito trabalhoso usar o editor de texto para duplicar um trecho de código (i.e., copiar &amp;amp; colar) e comentar uma das partes.&lt;br /&gt;&lt;br /&gt; A função a seguir (em &lt;a href=&quot;http://www.gnu.org/software/emacs/manual/elisp.html&quot;&gt;Elisp&lt;/a&gt;, para &lt;a href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt;) faz as tarefas do item 2 para quem se enquadra no perfil do item 1:&lt;br /&gt;&lt;br /&gt; &lt;pre&gt;(&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;defun&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#0000FF&quot;&gt;copy&amp;amp;comment&lt;/font&gt;&lt;/b&gt; (begin end)&lt;br /&gt;  (interactive &lt;b&gt;&lt;font color=&quot;#BC8F8F&quot;&gt;&amp;quot;r&amp;quot;&lt;/font&gt;&lt;/b&gt;)&lt;br /&gt;  (&lt;b&gt;&lt;font color=&quot;#A020F0&quot;&gt;save-excursion&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;    (copy-region-as-kill begin end)&lt;br /&gt;    (goto-char end)&lt;br /&gt;    (yank)&lt;br /&gt;    (comment-region begin end)))&lt;/pre&gt;</content>
		<author>
			<name>mario</name>
			<email>noreply@blogger.com</email>
			<uri>http://call-with-hopeless-continuation.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">call/hc</title>
			<link rel="self" href="http://call-with-hopeless-continuation.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-7213650200249361122</id>
			<updated>2008-12-09T17:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">XEmacs no windows</title>
		<link href="http://lispbr.blogspot.com/2008/07/xemacs-no-windows.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-8339636397702905232</id>
		<updated>2008-07-29T14:03:39+00:00</updated>
		<content type="html">No windows é melhor utilizar o XEmacs do que o GNU Emacs. Além dele possuir um &lt;a href=&quot;http://www.xemacs.org/Download/win32/&quot;&gt;instalador legal&lt;/a&gt;, ele reenderiza as fontes melhor que a versão do Stallman.&lt;br /&gt;&lt;br /&gt;Uma curiosidade é que o XEmacs é um fork do GNU Emacs feito pela Lucid na esperança de escapar da falência após o AI Winter.</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">Windows Vista</title>
		<link href="http://lispbr.blogspot.com/2008/07/windows-vista.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-292410410959068315</id>
		<updated>2008-07-27T07:33:20+00:00</updated>
		<content type="html">Logo que o vista eu o testei brevemente. Minha primeira impressão havia sido péssima, o sistema me pareceu lento e kitsch, muito pior que o XP.&lt;br /&gt;&lt;br /&gt;Ontem eu tentei novamente e minha impressão mudou completamente. Não sei se é porque eu testei em uma máquina nova, mais rápida e com monitor LCD widescreen, o use é porque o Vista SP1 esta muito melhor que o original, o fato é a minha impressão sobre o Vista mudou fortemente, atualmente eu o acho melhor que o XP (mas ainda não é um Mac OS X).</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Misuse of technology, XML case</title>
		<link href="http://www.ventonegro.org/2008/07/misuse-of-technology-xml-case/"/>
		<id>http://www.ventonegro.org/?p=16</id>
		<updated>2008-07-16T19:16:48+00:00</updated>
		<content type="html">&lt;p&gt;I do not have strong feelings about XML, be it for or against it. I don&amp;#8217;t use it much because I use either &lt;a href=&quot;http://en.wikipedia.org/wiki/S-expressions&quot; title=&quot;S-Expressions&quot;&gt;S-Expressions&lt;/a&gt; with Scheme or &lt;a href=&quot;http://www.lua.org/manual/5.1/manual.html#2.5.7&quot; title=&quot;Table Constructors&quot;&gt;Lua tables&lt;/a&gt; with Lua. I believe XML can be helpful, but people need to know &lt;em&gt;how&lt;/em&gt; to use it.&lt;/p&gt;
&lt;p&gt;I have come across an application of XML to store an animation, frame by frame, like the animated GIFs of old. Each frame is then an image, stored as an XML element. The bizarre part is that every pixel is stored as an individual element inside the frame:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;frame id=&quot;Frame001&quot; width=&quot;180&quot; height=&quot;240&quot;&amp;gt;
  &amp;lt;array type=&quot;Int8&quot;&amp;gt;
    &amp;lt;Int8 value=&quot;230&quot;/&amp;gt;
    &amp;lt;Int8 value=&quot;012&quot;/&amp;gt;
    .
    .
    .
  &amp;lt;/array&amp;gt;
&amp;lt;/frame&amp;gt;
&lt;/pre&gt;
&lt;p&gt;I believe this is the most &amp;#8220;by the book&amp;#8221; implementation. But this is far from optimal. When inspecting the files with a text editor (yes, I needed to do that) it was very painful. Besides, the files are huge! Why not be sensible and use &lt;a href=&quot;http://en.wikipedia.org/wiki/Base64&quot; title=&quot;Base64&quot;&gt;Base64&lt;/a&gt; encoding for the image part:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;frame id=&quot;Frame001&quot; width=&quot;180&quot; height=&quot;240&quot;&amp;gt;
  TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
  IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
  dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
  dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
  .
  .
  .
&amp;lt;/frame&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Nobody could inspect the information of previous format anyway, the files gets much smaller, one could edit them by hand (like I did to copy frames between animations). And no, the files are not being compressed because they are part of a build process.&lt;/p&gt;
&lt;p&gt;It only remains to be seen why it is done this way. I believe it was a mixture of a non-too-intimate knowledge of the technology and a desire to use it in it &amp;#8220;purest&amp;#8221; form, like those people who &lt;em&gt;must&lt;/em&gt; design their programs with all the design patterns known to man. With time they may learn that a sensible dose of pragmatism is very healthy.&lt;/p&gt;</content>
		<author>
			<name>Ventonegro</name>
			<uri>http://www.ventonegro.org</uri>
		</author>
		<source>
			<title type="html">Ventonegro</title>
			<subtitle type="html">Geek random ramblings</subtitle>
			<link rel="self" href="http://www.ventonegro.org/feed/"/>
			<id>http://www.ventonegro.org/feed/</id>
			<updated>2008-12-30T21:00:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">A biblioteca mpfr</title>
		<link href="http://lispbr.blogspot.com/2008/07/biblioteca-mpfr.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-1605101738385398911</id>
		<updated>2008-07-15T05:18:23+00:00</updated>
		<content type="html">Acabei de descobrir (na lista do GMP) a biblioteca &lt;a href=&quot;http://lispbr.blogspot.com/atom.xml&quot;&gt;mpfr&lt;/a&gt; (feita pela INRIA, provavelmente quer dizer MP france). Esta biblioteca é uma extensão do GMP, que adiciona regras de arredondamento e funções transcedentais. &lt;br /&gt;&lt;br /&gt;As regras de arredondamento tem como objetivo retornar resultados com todos os digitos significativos, de maneira similar ao mathematica. Tenho a impressão que o mpfr é muito mais adequado para aplicações matemáticas do que o GMP.&lt;br /&gt;&lt;br /&gt;Agora preciso adapter o cl-mpfloat para utilizar o mpfr.</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">Sempre tem um comando para você</title>
		<link href="http://lispbr.blogspot.com/2008/07/sempre-tem-um-comando-para-voc.html"/>
		<id>tag:blogger.com,1999:blog-14325535.post-149718291226444552</id>
		<updated>2008-07-13T18:40:28+00:00</updated>
		<content type="html">Para formatar o valor de pi que aparece no post anterior, eu descobri um novo comando do unix: fold. Ele quebra linhas muito longas em linhas com 80 colunas, ou outro valor especificado com a opção -w.</content>
		<author>
			<name>Leonardo Varuzza</name>
			<email>noreply@blogger.com</email>
			<uri>http://lispbr.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Varuzza on Lisp</title>
			<subtitle type="html">Informações e comentários sobre Lisp.</subtitle>
			<link rel="self" href="http://lispbr.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-14325535</id>
			<updated>2009-01-05T23:00:19+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">Calculando pi em lisp</title>
		<link href="http://lispbr.blogspot.com/20