<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.10" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>(blog 'lucindo)</title>
	<link>http://blog.lucindo.com.br</link>
	<description>um dia eu aprendo a programar</description>
	<pubDate>Sat, 22 Nov 2008 02:49:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.10</generator>
	<language>en</language>
			<item>
		<title>Como tomar decisões</title>
		<link>http://blog.lucindo.com.br/2008/11/22/como-tomar-decisoes/</link>
		<comments>http://blog.lucindo.com.br/2008/11/22/como-tomar-decisoes/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 02:47:42 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>programação</category>

		<category>vida</category>

		<category>python</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/11/22/como-tomar-decisoes/</guid>
		<description><![CDATA[Agora pouco, no IM:
trajber: vou pedir ajuda ao meu querido PC
trajber: mauro@trajber:~$ python
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type &#8220;help&#8221;, &#8220;copyright&#8221;, &#8220;credits&#8221; or &#8220;license&#8221; for more information.
>>> import random
>>> print random.randint(0,1)
trajber: 0 = ignorar
trajber: 1 = comer
trajber: ok ?
trajber: 0
>>>
trajber: foi justo&#8230;
Outro também fez algo parecido: http://twitter.com/igorrs/status/896944758

]]></description>
			<content:encoded><![CDATA[<p>Agora pouco, no IM:</p>
<p><strong>trajber</strong>: vou pedir ajuda ao meu querido PC<br />
<strong>trajber</strong>: mauro@trajber:~$ python<br />
Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)<br />
[GCC 4.3.2] on linux2<br />
Type &#8220;help&#8221;, &#8220;copyright&#8221;, &#8220;credits&#8221; or &#8220;license&#8221; for more information.<br />
>>> import random<br />
>>> print random.randint(0,1)<br />
<strong>trajber</strong>: 0 = ignorar<br />
<strong>trajber</strong>: 1 = comer<br />
<strong>trajber</strong>: ok ?<br />
<strong>trajber</strong>: 0<br />
>>><br />
<strong>trajber</strong>: foi justo&#8230;</p>
<p>Outro também fez algo parecido: <a href="http://twitter.com/igorrs/status/896944758">http://twitter.com/igorrs/status/896944758</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/11/22/como-tomar-decisoes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Book Meme</title>
		<link>http://blog.lucindo.com.br/2008/11/13/book-meme/</link>
		<comments>http://blog.lucindo.com.br/2008/11/13/book-meme/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 00:34:00 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>indefinido</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/11/13/book-meme/</guid>
		<description><![CDATA[Time is always critical because somebody might beat you to the punch
Founders at Work, Jessica Livingston

Grab the nearest book.
Open it to page 56.
Find the fifth sentence.
Post the text of the sentence in your journal along with these # instructions.
Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.

]]></description>
			<content:encoded><![CDATA[<blockquote><p>Time is always critical because somebody might beat you to the punch</p></blockquote>
<p><a href="http://www.foundersatwork.com/">Founders at Work</a>, <a href="http://en.wikipedia.org/wiki/Jessica_Livingston">Jessica Livingston</a></p>
<ul>
<li>Grab the nearest book.</li>
<li>Open it to page 56.</li>
<li>Find the fifth sentence.</li>
<li>Post the text of the sentence in your journal along with these # instructions.</li>
<li>Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/11/13/book-meme/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Javascript (Ajax) e HTML em Lisp</title>
		<link>http://blog.lucindo.com.br/2008/10/12/javascript-ajax-e-html-em-lisp/</link>
		<comments>http://blog.lucindo.com.br/2008/10/12/javascript-ajax-e-html-em-lisp/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 18:56:49 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>common lisp</category>

		<category>javascript</category>

		<category>web</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/10/12/javascript-ajax-e-html-em-lisp/</guid>
		<description><![CDATA[Para testar algumas coisas refiz hoje o código do post Common Lisp e Ajax. Desta vez estou usando o patch para o HT-AJAX com suporte e jQuery. Além disso, para gerar código JavaScript  uso Parenscript. Assim todo HTML e JS é produzido por s-exps:

(eval-when (:compile-toplevel :load-toplevel :execute)
  (defparameter *dependencies*
    &#8216;(:asdf [...]]]></description>
			<content:encoded><![CDATA[<p>Para testar algumas coisas refiz hoje o código do post <a href="http://blog.lucindo.com.br/2007/09/15/common-lisp-e-ajax/">Common Lisp e Ajax</a>. Desta vez estou usando o <a href="http://blog.lucindo.com.br/2008/06/01/ht-ajax-e-jquery/">patch</a> para o <a href="http://www.cliki.net/HT-AJAX">HT-AJAX</a> com suporte e <a href="http://jquery.com/">jQuery</a>. Além disso, para gerar código JavaScript  uso <a href="http://common-lisp.net/project/parenscript/">Parenscript</a>. Assim todo HTML e JS é produzido por s-exps:</p>
<pre>
(<font color="#a020f0">eval-when</font> (<font color="#da70d6">:compile-toplevel</font> <font color="#da70d6">:load-toplevel</font> <font color="#da70d6">:execute</font>)
  (<font color="#a020f0">defparameter</font> <font color="#b8860b">*dependencies*</font>
    &#8216;(<font color="#da70d6">:asdf</font> <font color="#da70d6">:hunchentoot</font> <font color="#da70d6">:ht-ajax</font> <font color="#da70d6">:cl-who</font> <font color="#da70d6">:parenscript</font>))
  (map nil &#8216;require *dependencies*))

(<font color="#a020f0">defpackage</font> <font color="#228b22">:ajax-test</font>
  (<font color="#da70d6">:use</font> <font color="#da70d6">:common-lisp</font> <font color="#da70d6">:hunchentoot</font> <font color="#da70d6">:ht-ajax</font> <font color="#da70d6">:cl-who</font> <font color="#da70d6">:parenscript</font>))

(<font color="#a020f0">in-package</font> <font color="#da70d6">:ajax-test</font>)

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

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

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

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

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

(<font color="#a020f0">defparameter</font> <font color="#b8860b">*webserver*</font> nil)

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

(<font color="#a020f0">defun</font> <font color="#0000ff">stop-web</font> ()
  (stop-server *webserver*))
</pre>
<p><strong>Download</strong>: <a href="http://lucindo.com.br/lisp/ajax2.lisp">ajax2.lisp</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/10/12/javascript-ajax-e-html-em-lisp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby sucks: parte 42</title>
		<link>http://blog.lucindo.com.br/2008/10/08/ruby/</link>
		<comments>http://blog.lucindo.com.br/2008/10/08/ruby/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 15:13:05 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>ruby</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/10/08/ruby/</guid>
		<description><![CDATA[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.
Veja se o defined? não funciona de maneira não intuitiva:

lucindo@marvin:~$ irb
irb(main):001:0> defined?(cu)
=> nil
irb(main):002:0> [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>Veja se o <strong>defined?</strong> não funciona de maneira não intuitiva:</p>
<pre>
lucindo@marvin:~$ irb
irb(main):001:0> defined?(cu)
=> nil
irb(main):002:0> if false
irb(main):003:1>    cu = "ruby"
irb(main):004:1> end
=> nil
irb(main):005:0> defined?(cu)
=> "local-variable"
irb(main):006:0> if defined?(cu)
irb(main):007:1>    puts "ruby cu"
irb(main):008:1> end
ruby cu
=> nil
irb(main):009:0>
</pre>
<p>Imagina se você usa isso em algo como configuração&#8230;
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/10/08/ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ACE_Task-like em Python</title>
		<link>http://blog.lucindo.com.br/2008/09/28/ace_task-like-em-python/</link>
		<comments>http://blog.lucindo.com.br/2008/09/28/ace_task-like-em-python/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 23:02:34 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>programação</category>

		<category>python</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/09/28/ace_task-like-em-python/</guid>
		<description><![CDATA[Nos últmos dias me reanimei a voltar a postar nesse blog.
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 ACE_Task abaixo:

import threading, Queue, signal

class Task(object):
  [...]]]></description>
			<content:encoded><![CDATA[<p>Nos últmos dias me reanimei a voltar a postar nesse blog.</p>
<p>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 <a href="http://www.cs.wustl.edu/~schmidt/ACE.html">ACE_Task</a> abaixo:</p>
<pre>
<font color="#a020f0">import</font> threading, Queue, signal

<font color="#a020f0">class</font> <font color="#228b22">Task</font>(object):
    <font color="#a020f0">def</font> <font color="#0000ff">__init__</font>(<font color="#a020f0">self</font>):
        <font color="#a020f0">self</font>.queue = Queue.Queue(0)

    <font color="#a020f0">def</font> <font color="#0000ff">__worker</font>(<font color="#a020f0">self</font>):
        <font color="#a020f0">while</font> <font color="#a020f0">True</font>:
            item = <font color="#a020f0">self</font>.queue.get()
            <font color="#a020f0">self</font>.process(item)
            <font color="#a020f0">self</font>.queue.task_done()

    <font color="#a020f0">def</font> <font color="#0000ff">__start</font>(<font color="#a020f0">self</font>):
        thread = threading.Thread(target=<font color="#a020f0">self</font>.__worker)
        thread.setDaemon(<font color="#a020f0">True</font>)
        thread.start()

    <font color="#a020f0">def</font> <font color="#0000ff">activate</font>(<font color="#a020f0">self</font>, threads):
        <font color="#a020f0">for</font> thread <font color="#a020f0">in</font> xrange(threads):
            <font color="#a020f0">self</font>.__start()
        signal.signal(signal.SIGINT, signal.SIG_DFL)

    <font color="#a020f0">def</font> <font color="#0000ff">put</font>(<font color="#a020f0">self</font>, item):
        <font color="#a020f0">self</font>.queue.put(item)

    <font color="#a020f0">def</font> <font color="#0000ff">wait</font>(<font color="#a020f0">self</font>):
        <font color="#a020f0">self</font>.queue.join()

    <font color="#a020f0">def</font> <font color="#0000ff">process</font>(<font color="#a020f0">self</font>, item):
        <font color="#a020f0">pass</font>

<font color="#a020f0">class</font> <font color="#228b22">task</font>(Task):
    <font color="#a020f0">def</font> <font color="#0000ff">__init__</font>(<font color="#a020f0">self</font>, func):
        Task.__init__(<font color="#a020f0">self</font>)
        <font color="#a020f0">self</font>.process = func
</pre>
<p>A única coisa pytônica do código é o decorator do final. </p>
<p>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. </p>
<p>Usando o decorator acima o código ficaria mais ou menos assim (usando 100 threads):</p>
<pre>
<font color="#a020f0">from</font> __future__ <font color="#a020f0">import</font> with_statement
<font color="#a020f0">from</font> task <font color="#a020f0">import</font> task
<font color="#a020f0">import</font> smtplib, sys

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

<font color="#a020f0">def</font> <font color="#0000ff">process_file</font>(filename):
    send_spam.activate(100)
    <font color="#a020f0">with</font> open(filename) <font color="#a020f0">as</font> file:
        map(<font color="#a020f0">lambda</font> line: send_spam.put(line), file.readlines())
    send_spam.wait()

<font color="#a020f0">if</font> __name__ == <font color="#bc8f8f">&#8216;__main__&#8217;</font>:
    process_file(sys.argv[1])
</pre>
<p>Coloquei esse exemplo porque não tinha um melhor&#8230; é apenas um exemplo, não um programa de verdade, ok? <img src='http://blog.lucindo.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p><strong>Download</strong>: <a href="http://lucindo.com.br/python/task.txt">task.py</a></p>
<p><strong>To do</strong>: reescrever em <a href="http://python.org/download/releases/2.6/">Python 2.6</a> usando <a href="http://docs.python.org/library/multiprocessing.html">Multiprocessos</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/09/28/ace_task-like-em-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Frase do dia</title>
		<link>http://blog.lucindo.com.br/2008/09/21/frase-do-dia/</link>
		<comments>http://blog.lucindo.com.br/2008/09/21/frase-do-dia/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 01:28:39 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>common lisp</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/09/21/frase-do-dia/</guid>
		<description><![CDATA[Só porque esse blog está muito parado:
Eight years to do TeX? How smart can he be? He should have used Lisp.
Kenny Tilton, sobre Donald Knuth

]]></description>
			<content:encoded><![CDATA[<p>Só porque esse blog está muito parado:</p>
<blockquote><p>Eight years to do TeX? How smart can he be? He should have used Lisp.</p></blockquote>
<p><a href="http://www.tilton-technology.com/">Kenny</a> <a href="http://smuglispweeny.blogspot.com/">Tilton</a>, sobre <a href="http://www-cs-faculty.stanford.edu/~uno/">Donald Knuth</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/09/21/frase-do-dia/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HT-AJAX e jQuery</title>
		<link>http://blog.lucindo.com.br/2008/06/01/ht-ajax-e-jquery/</link>
		<comments>http://blog.lucindo.com.br/2008/06/01/ht-ajax-e-jquery/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 20:46:26 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>common lisp</category>

		<category>programação</category>

		<category>javascript</category>

		<category>web</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/06/01/ht-ajax-e-jquery/</guid>
		<description><![CDATA[HT-AJAX (documentação aqui) é uma extenção do Hunchentoot que permite exportar suas funções lisp de modo que elas podem ser acessadas via JavaScript, usando AJAX. Um pequeno exemplo de uso dessa biblioteca está nesse post.
HT-AJAX suporta vários AJAX processors, como Prototype e Dojo, mas não jQuery. Então fiz um pequeno patch adicionando suporte a jQuery.
Download: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cliki.net/HT-AJAX">HT-AJAX</a> (documentação <a href="http://pen.two-bytes.com/misc/ht-ajax.html">aqui</a>) é uma extenção do <a href="http://weitz.de/hunchentoot/">Hunchentoot</a> que permite exportar suas funções lisp de modo que elas podem ser acessadas via JavaScript, usando <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">AJAX</a>. Um pequeno exemplo de uso dessa biblioteca está nesse <a href="http://blog.lucindo.com.br/2007/09/15/common-lisp-e-ajax/">post</a>.</p>
<p><a href="http://www.cliki.net/HT-AJAX">HT-AJAX</a> suporta vários <em>AJAX processors</em>, como <a href="http://www.prototypejs.org/">Prototype</a> e <a href="http://dojotoolkit.org/">Dojo</a>, mas não <a href="http://jquery.com/">jQuery</a>. Então fiz um pequeno patch adicionando suporte a <a href="http://jquery.com/">jQuery</a>.</p>
<p><strong>Download</strong>: <a href="http://lucindo.com.br/lisp/ht-ajax_0.0.7-jquery.patch">ht-ajax_0.0.7-jquery.patch</a></p>
<p><strong>Aplicando o patch (SBCL)</strong>:</p>
<pre>
$ cd ~/.sbcl/site/ht-ajax_0.0.7
$ wget http://lucindo.com.br/lisp/ht-ajax_0.0.7-jquery.patch
$ cat ht-ajax_0.0.7-jquery.patch | patch -p0
$ sbcl
* (require :asdf)
* (asdf:oos 'asdf:compile-op :ht-ajax)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/06/01/ht-ajax-e-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>About State</title>
		<link>http://blog.lucindo.com.br/2008/05/31/about-state/</link>
		<comments>http://blog.lucindo.com.br/2008/05/31/about-state/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 00:57:43 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>common lisp</category>

		<category>programação</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/05/31/about-state/</guid>
		<description><![CDATA[State: you’re doing it wrong!
Two options for lispers:

Purely functional Lisps (subset of CL or something like Clojure, LFE, etc)
Cells!!!

]]></description>
			<content:encoded><![CDATA[<p><center><em><strong>State</strong>: you’re doing it wrong!</em></center></p>
<p>Two options for lispers:</p>
<ul>
<li>Purely functional Lisps (subset of CL or something like <a href="http://clojure.sourceforge.net/">Clojure</a>, <a href="http://forum.trapexit.org/viewtopic.php?p=40268">LFE</a>, etc)</li>
<li><a href="http://common-lisp.net/project/cells/">Cells</a>!!!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/05/31/about-state/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Logo legal</title>
		<link>http://blog.lucindo.com.br/2008/05/22/logo-legal/</link>
		<comments>http://blog.lucindo.com.br/2008/05/22/logo-legal/#comments</comments>
		<pubDate>Thu, 22 May 2008 22:44:13 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>programação</category>

		<category>erlang</category>

		<category>web</category>

		<category>computação</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/05/22/logo-legal/</guid>
		<description><![CDATA[Logo do IRRLAB (site pessoal do Ivan):




]]></description>
			<content:encoded><![CDATA[<p>Logo do <a href="http://irrlab.com">IRRLAB</a> (site pessoal do Ivan):</p>
<p><center><br />
<img src="http://irrlab.com/w/chrome/site/irrlab.png" alt="IRR Lab" /><br />
</center>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/05/22/logo-legal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>State: you&#8217;re doing it wrong</title>
		<link>http://blog.lucindo.com.br/2008/05/22/state-youre-doing-it-wrong/</link>
		<comments>http://blog.lucindo.com.br/2008/05/22/state-youre-doing-it-wrong/#comments</comments>
		<pubDate>Thu, 22 May 2008 21:20:49 +0000</pubDate>
		<dc:creator>Lucindo</dc:creator>
		
		<category>programação</category>

		<guid isPermaLink="false">http://blog.lucindo.com.br/2008/05/22/state-youre-doing-it-wrong/</guid>
		<description><![CDATA[I&#8217;m completely convinced that mutable objects and the whole approach that is sort of implied by the design of Java, C#, Python, all the languages that followed along this path, is very much the wrong way to do most things&#8230; it is ok to do somethings, but it&#8217;s the wrong way to do most things.
Mutable [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>I&#8217;m completely convinced that mutable objects and the whole approach that is sort of implied by the design of Java, C#, Python, all the languages that followed along this path, is very much the wrong way to do most things&#8230; it is ok to do somethings, but it&#8217;s the wrong way to do most things.<br />
Mutable objects are the new spaghetti code, and by that I mean that you eventually, with mutable objects, create an intractable mess, and encapsulation does not get rid off that, encapsulation just means: well, I&#8217;m in charge of this mess. But the real mess comes from this network you create of objects that can change, and your inability to look at the state of a system and understand how you got there, how to get there to test it next time&#8230; so it&#8217;s hard to understand the program&#8230; it&#8217;s very hard to test it. I think that&#8217;s interesting in telling all the emphasis on test driven design. I think people are driven to this because they know their systems are completely intractable&#8230;</p></blockquote>
<p>Rich Hickey - <a href="http://blip.tv/file/812787">Screencast</a>: <a href="http://clojure.sourceforge.net">Clojure</a> Concurrency (&#8221;transcrição&#8221; do minuto 21 ao 23)<br />
<center><br />
<object type="application/x-shockwave-flash" data="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&#038;feedurl=http%3A%2F%2Fclojure%2Eblip%2Etv%2Frss&#038;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F819147%3Freferrer%3Dblip%2Etv%26source%3D1&#038;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf" width="400" height="255" allowfullscreen="true" id="showplayer">
<param name="movie" value="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&#038;feedurl=http%3A%2F%2Fclojure%2Eblip%2Etv%2Frss&#038;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F819147%3Freferrer%3Dblip%2Etv%26source%3D1&#038;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf" />
<param name="quality" value="best" /><embed src="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&#038;feedurl=http%3A%2F%2Fclojure%2Eblip%2Etv%2Frss&#038;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F819147%3Freferrer%3Dblip%2Etv%26source%3D1&#038;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf" quality="best" width="400" height="255" name="showplayer" type="application/x-shockwave-flash"></embed></object><br />
</center>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucindo.com.br/2008/05/22/state-youre-doing-it-wrong/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
