<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Um Manifesto!</title>
	<atom:link href="http://manifesto.blog.br/2.0/feed" rel="self" type="application/rss+xml" />
	<link>http://manifesto.blog.br/2.0</link>
	<description>Programação, web, banco de dados e muito desenvolvimento.</description>
	<lastBuildDate>Mon, 14 Nov 2011 14:37:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Novos projetos: FastChat e Semaphore.js</title>
		<link>http://manifesto.blog.br/2.0/Javascript/novos-projetos-fastchat-e-semaphore-js</link>
		<comments>http://manifesto.blog.br/2.0/Javascript/novos-projetos-fastchat-e-semaphore-js#comments</comments>
		<pubDate>Mon, 14 Nov 2011 10:20:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de dados  e "NoSQL"]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Programação Funcional]]></category>

		<guid isPermaLink="false">http://manifesto.blog.br/2.0/?p=1449</guid>
		<description><![CDATA[Sempre curti micro-projetos úteis e reutilizáveis, principalmente widgets. Bom, para o projeto que estou trabalhando vi a necessidade de dois widgets que imaginei que seria legal de reutilizar, e eis o resultado deles (ainda em desenvolvimento): Semaphore.js Um mini widget &#8230; <a href="http://manifesto.blog.br/2.0/Javascript/novos-projetos-fastchat-e-semaphore-js">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sempre curti micro-projetos úteis e reutilizáveis, principalmente widgets.</p>
<p>Bom, para o projeto que estou trabalhando vi a necessidade de dois widgets que imaginei que seria legal de reutilizar, e eis o resultado deles (ainda em desenvolvimento):</p>
<h2><a title="Widget javascript para indicar status do servidor." href="http://github.com/diogok/semaphore.js">Semaphore.js</a></h2>
<p>Um mini widget em javascript que apenas indica o status do servidor através de um semáforo.</p>
<p>Através de um url configurada do widget ele indica se o servidor está online, lento ou offline. É bem útil para aplicações totalmente em ajax, principalmente quando se depende de servidores instáveis ou serviços de terceiros. Permite ainda algumas integrações para cada estado.</p>
<p>Consiste apenas em um pequeno arquivo javascript.</p>
<h2><a title="Widget de bate-papo (chat) para seu site ou aplicação." href="http://github.com/diogok/FastChat">FastChat</a></h2>
<p><a href="http://manifesto.blog.br/2.0/wp-content/uploads/2011/11/fastchat.png"><img class="aligncenter size-medium wp-image-1455" title="Fastchat: chat widget easy to use" src="http://manifesto.blog.br/2.0/wp-content/uploads/2011/11/fastchat-300x111.png" alt="Fastchat: chat widget easy to use" width="300" height="111" /></a></p>
<p>Esse é mais legal! É um widget de bate-papo que basta carregar um pequeno javascript sem dependências e está pronto o chat!</p>
<p>Foi feito com um servidor em clojure, usando redis e javascript simples para o widget. Pode-se usar css para customizar a UI padrão, grava um histórico, possui uma &#8220;janela&#8221; por usuário, lista de onlines e etc.</p>
<p>Bom, é isso, o semaphore.js eu já usei em mais de um projeto e o fastchat ainda está em teste no projeto principal, mas acho que promete bastante.</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Javascript/novos-projetos-fastchat-e-semaphore-js/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manifesto de volta, e com wordpress agora!</title>
		<link>http://manifesto.blog.br/2.0/Geral/manifesto-de-volta-e-com-wordpress-agora</link>
		<comments>http://manifesto.blog.br/2.0/Geral/manifesto-de-volta-e-com-wordpress-agora#comments</comments>
		<pubDate>Sun, 13 Nov 2011 10:30:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://manifesto.blog.br/2.0/?p=1451</guid>
		<description><![CDATA[Long time no see! Faz muito tempo que não dou atenção a este blog, mas pretendo voltar agora, sem promessas apenas vontade. A novidade é que migrei do joomla(já muito desatualizado que estava, mesmo para um joomla) para o wordpress, &#8230; <a href="http://manifesto.blog.br/2.0/Geral/manifesto-de-volta-e-com-wordpress-agora">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Long time no see!</p>
<p>Faz muito tempo que não dou atenção a este blog, mas pretendo voltar agora, sem promessas apenas vontade.</p>
<p>A novidade é que migrei do joomla(já muito desatualizado que estava, mesmo para um joomla) para o wordpress, migração tranquila com um pouco de sql e todo o conteúdo estava portado, e junto com um 301 na antiga pasta está tudo ok! (eu acho&#8230;)</p>
<p>E para quem acompanhava: meu feed antigo está morto :/ é preciso assinar o novo, se o conteúdo ainda interessar.</p>
<p>Aproveitei e atualizei tudo que tinha nesse servidor, que era outro wordpress e outro joomla e uns aplicativos perdidos. Os aplicativos eu removi, ficou apenas o que era estático (documentações, uns hotsites&#8230;) e o wordpress eu atualizei.</p>
<p>O outro joomla que roda aqui é um problema, antigo e meio complicado de dar manutenção. Tenho que ver o que fazer com ele, não pode ficar assim.</p>
<p>De resto, I am back!</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Geral/manifesto-de-volta-e-com-wordpress-agora/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redis e PHP: Who is online?</title>
		<link>http://manifesto.blog.br/2.0/PHP/php-redis</link>
		<comments>http://manifesto.blog.br/2.0/PHP/php-redis#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Redis e PHP: Who is online? Em um micro projeto precisei manter uma lista de usuários online, são usuários de várias fontes em conexões não persistentes, então fiz uma solução simples em PHP e Redis. Primeiro você precisa conhecer o &#8230; <a href="http://manifesto.blog.br/2.0/PHP/php-redis">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Redis e PHP: Who is online?</p>
<p>Em um micro projeto precisei manter uma lista de usuários online, são usuários de várias fontes em conexões não persistentes, então fiz uma solução simples em PHP e Redis.</p>
<p>Primeiro você precisa conhecer o Redis e te-lo rodando, o que é bem simples:</p>
<pre>
$ git clone git://github.com/antirez/redis.git
$ cd redis
$ make
$ ./src/redis-server
</pre>
<p>Com o redis funcionando vamos usar a biblioteca Predis para trabalhar com Redis em PHP, pegue uma cópia atual e prepare o Phar do projeto:</p>
<pre>
$ git clone git://github.com/nrk/predis.git
$ cd predis
$ php bin/createPhar.php
$ mv predis-*.phar seu/projeto/predis.phar
</pre>
<p>Com as dependências prontas vamos a lógica para os usuários online: Vou implementar um método <strong>&#8220;ping&#8221;</strong> em um controller qualquer, a cada ação do usuário uma chamada ao </strong>&#8220;ping&#8221;</strong> vai ocorrer.</p>
<p>A cada ping o nome do usuário vai ser inserido em um <strong>&#8220;set&#8221;</strong> no redis, vou ter um &#8220;<strong>set&#8221; para cada minuto</strong>, mas usando <strong>&#8220;expire&#8221;</strong> só vou manter os sets dos ultimos 5 minutos.</p>
<p>Para descobrir os usuários online faço <strong>&#8220;sunion&#8221;</strong> dos ultimos 5 minutos para saber quem está online. Você pode ajustar o tempo como achar mais justo para sua aplicação.</p>
<p>Segue o &#8220;pseudo-controller&#8221;, devidamente comentado (no projeto é meio diferente, mas a base é essa):</p>
<p><script src="https://gist.github.com/955879.js"></script></p>
<p>PS: o Predis é para PHP 5.3, o que não deve ser um problema, certo?</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/PHP/php-redis/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Servidor Git pessoal com gitolite</title>
		<link>http://manifesto.blog.br/2.0/Linux/gitolite</link>
		<comments>http://manifesto.blog.br/2.0/Linux/gitolite#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Usem o Git, vale a pena. Usem o Github quando puderem, também vale muito a pena. Mas as vezes precisamos de um repositório mais privado, e não estamos afim de pagar para o github (embora vale a pena!) já que &#8230; <a href="http://manifesto.blog.br/2.0/Linux/gitolite">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Usem o <a href="http://git-scm.com">Git</a>, vale a pena. Usem o <a href="http://github.com/">Github</a> quando puderem, também vale muito a pena. Mas as vezes precisamos de um repositório mais privado, e não estamos afim de pagar para o github (embora vale a pena!) já que temos servidores sobrando. </p>
<p>Entra o <a href="http://github.com/sitaramc/gitolite">gitolite</a>, que permite fácil configuração multiusuário para um repositório Git.</p>
<p>Eis como proceder: Primeiro copie sua chave pública para o servidor (a mesma do github, por exemplo):</p>
<pre>
$ scp ~/.ssh/id_rsa.pub user@servidor:~/
</pre>
<p>E então faça ssh para o servidor e se torne root, para seguir os seguintes passos:</p>
<pre>
# cd
# aptitude install git
# git clone git://github.com/sitaramc/gitolite gitolite-source
# cd gitolite-source
# mkdir -p /usr/local/share/gitolite/conf /usr/local/share/gitolite/hooks
# src/gl-system-install /usr/local/bin /usr/local/share/gitolite/conf /usr/local/share/gitolite/hooks
# useradd git -d /home/git -g users -m -s /bin/bash
# su - git
$ gl-setup /home/user/id_rsa.pub
</pre>
<p> Atenção: assumi que seu usuário padrão no servidor é user, se não for troque as ocorr&ecirc;ncias. Pronto assim temos o básico pronto, agora sobre operação geral.</p>
<p> Você pode configurar uma interface de consulta básica na web usando o pr&oacute;prio git, ainda no user git faça:</p>
<pre>
$ cd repositories/testing.git
$ git instaweb -d webrick -p 8081
</pre>
<p>Agora pode acessar seu servidor na porta 8081 para navegar nos projetos. Não precisamos mais estar no servidor para os próximos passos.</p>
<p>Então vamos criar um novo repo e adcionar usuários, da sua maquina:</p>
<pre>
$ git clone git@servidor:gitolite-admin.git
$ cd gitolite-admin
</pre>
<p> Nessa pasta edite o arquivo conf/gitollite.conf, nessa sintaxe:</p>
<pre>
repo nome-do-repositorio
  RW+ = user1 user2 user3
</pre>
<p>Sendo user1 user2 e user3 os usuários com acesso para escrita. O repositório será criado vazio e e para liberar os usuários basta copiar as chaves publicas para a pasta &#8220;keydir&#8221;, no formato &#8220;user1.pub&#8221; e etc. Agora envie as alterações.</p>
<pre>
$ git commit -a -m 'adionado repositorio nome-do-repositorio'
$ git push
</pre>
<p>Congratz, you got git!</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Linux/gitolite/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meu ambiente de Trabalho em 7 itens</title>
		<link>http://manifesto.blog.br/2.0/Geral/meme-sete-itens</link>
		<comments>http://manifesto.blog.br/2.0/Geral/meme-sete-itens#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ae, o @gserrano descreveu seu ambiente de trabalho em 7 itens e me convidou para o meme, estão vou descrever meu ambiente de trabalho em 7 itens também: 0. Mesão É, eu gosto de uma mesa grande, com espaço, com &#8230; <a href="http://manifesto.blog.br/2.0/Geral/meme-sete-itens">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ae, o <a href="http://twitter.com/gserrano">@gserrano</a> descreveu seu <a href="http://andafter.org/publicacoes/meu-ambiente-de-trabalho-em-7-itens-gserrano.html">ambiente de trabalho em 7 itens</a> e me convidou para o meme, estão vou descrever meu ambiente de trabalho em 7 itens também:</p>
<p><a href="http://manifesto.blog.br/extras/images/7itens.jpg"><img src="http://manifesto.blog.br/extras/images/7itens_thumb.jpg" /></a></p>
<p><strong>0. Mesão</strong><br />
É, eu gosto de uma mesa grande, com espaço, com papel e caneta para rabiscar ideias. Espaço, espaço eu preciso de espaço! É o zero porque o meme fala sobre o ambiente virtual apenas :)</p>
<p><strong>1. Opera e Firefox</strong><br />
Para navegação cotidiana, testes, e-mails e etc eu uso Opera. Acho o navegador muito ágil e o sincronismo de tudo desde de bookmarks até histórico e notas bem ajuda. O firefox só quando mexo com Javascript mesmo, ai entra o Firebug.</p>
<p><strong>2. Rhythmbox/celular</strong><br />
Rhythmbox é o player de música no Ubuntu, quando não estou em casa uso o celular mesmo. Música é essencial! Do Punk ao Metal! Oh Yeah \o/</p>
<p><strong>3. Git</strong><br />
Controle de versão é com Git sempre, e se for possível no Github.</p>
<p><strong>4. VI</strong><br />
Meu editor de escolha, seus atalhos no teclado &#8220;rulez&#8221;.</p>
<p><strong>5. Terminal</strong><br />
Vários utilitários, buscas em arquivos, testes e scripts sempre úteis!</p>
<p><strong>6. SSH/screen/servidores e mais vi</strong><br />
Sempre tem um par de servidores remotos para testar as aplicações e fazer homologações também, além de brincadeiras de qualquer tipo e quando uma banda descente vem a ser necessária.</p>
<p>Agora convidar outros, certo? Vou chamar um pessoal variado também: O #dev companheiro de trabalho <a href="http://twitter.com/pedromenezes">@pedromenezes</a>, o #dev companheiro de #cparty <a href="http://twitter.com/shdo">@shdo</a>, o designer <a href="http://twitter.com/richardbarros">@richardbarros</a> (para reviver seu blog!) e o sysadmin <a href="http://twitter.com/ebastos">@ebastos</a>.</p>
<p>Valeu galera!</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Geral/meme-sete-itens/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Campus Party &#8211; Eu fui!</title>
		<link>http://manifesto.blog.br/2.0/Geral/cpbr4-eu-fui</link>
		<comments>http://manifesto.blog.br/2.0/Geral/cpbr4-eu-fui#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Fui na Campus Party Brasil 2011, e foi incrível! Podem ler o que achei no blog (não técnico, mais pessoal) Não Me Digam! na categoria Campus Party. Abraços.]]></description>
			<content:encoded><![CDATA[<p>Fui na Campus Party Brasil 2011, e foi incrível! Podem ler o que achei no blog (não técnico, mais pessoal) <a href="http://naomedigam.com.br/">Não Me Digam!</a> na categoria <a href="http://naomedigam.com.br/campus-party/">Campus Party</a>.</p>
<p>Abraços.</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Geral/cpbr4-eu-fui/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Campus Party Brasil 2011 &#8211; Eu vou</title>
		<link>http://manifesto.blog.br/2.0/Geral/cpbrasil-euvou</link>
		<comments>http://manifesto.blog.br/2.0/Geral/cpbrasil-euvou#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://manifesto.blog.br/extras/images/cp_vou.gif" /></center></p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Geral/cpbrasil-euvou/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Naive Crawler in Clojure</title>
		<link>http://manifesto.blog.br/2.0/Funcional/clojure-crawler-1</link>
		<comments>http://manifesto.blog.br/2.0/Funcional/clojure-crawler-1#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Programação Funcional]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Algum tempo atrás praticando clojure tentei fazer um crawler de web bem simples e sem dependências, apenas para testar alguns recursos. O resultado foi um programa em clojure capaz de navegar nos links a partir de uma página e salvar &#8230; <a href="http://manifesto.blog.br/2.0/Funcional/clojure-crawler-1">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Algum tempo atrás praticando clojure tentei fazer um crawler de web bem simples e sem dependências, apenas para testar alguns recursos. O resultado foi um programa em clojure capaz de navegar nos links a partir de uma página e salvar os conteúdos.</p>
<p>Resolvi acertar uns detalhes e colocar no github o <a href="http://github.com/diogok/naive-crawler">naive-crawler</a>.</p>
<p>O desenvolvimento foi bem incremental, primeiro as funções para lidar com links: </p>
<ul>
<li><strong>make-url</strong> recebe uma url atual e um link achado para definir o destino.</li>
<li><strong>find-links</strong> acha links através de regex, bem falho na verdade.</li>
<li><strong>find-urls</strong> combina as duas anterior já retornando as urls para serem navegadas .</li>
<li><strong>same-domain?</strong> checa se o destino é do mesmo domínio da página atual.</li>
</ul>
<p>Depois persistência:</p>
<ul>
<li><strong>make-db</strong> cria um banco de dados.</li>
<li><strong>insert</strong> insere uma referencia a uma url no db, se ainda não existir.</li>
<li><strong>get-it</strong> retorna o conteúdo da url salva no db.</li>
<li><strong>non-crawled</strong> filtra as urls ainda sem conteúdo.</li>
<li><strong>set-content</strong> salva o conteúdo no db.</li>
</ul>
<p>Crawler em si:</p>
<ul>
<li><strong>save-page</strong> busca o conteúdo da pagina atual, salva-o e captura as urls dessa página.</li>
<li><strong>start/-main</strong> iniciam o loop do crawler</li>
</ul>
<p>O desenvolvimento foi bem incremental, no começo apenas fazia url a url, depois adicionei o &#8220;same-domain&#8221;, controle de erro bem básico, paralelismo simples (testei outras formas também) e depois salvar em disco.</p>
<p>Interessante seria salvar as URLs numa fila (PerssitenQueue? Redis?) e outras threads consumirem essa fila e salvar o conteúdo em um banco de dados (sqlite? neo4j?). E também não tem testes, pois fui fazendo tudo no REPL e esqueci de escrever os testes.</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Funcional/clojure-crawler-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livros e e-books</title>
		<link>http://manifesto.blog.br/2.0/Geral/livros-2</link>
		<comments>http://manifesto.blog.br/2.0/Geral/livros-2#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ultimamente tenho lido muitos e-books sobre programação, pelo simples fato da grande oferta de material em inglês, mais barato e de acesso instantâneo, como alguns são muito bons resolvi compartilhar alguns dos títulos: Seven Languages in Seven Weeks &#8211; Apesar &#8230; <a href="http://manifesto.blog.br/2.0/Geral/livros-2">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ultimamente tenho lido muitos e-books sobre programação, pelo simples fato da grande oferta de material em inglês, mais barato e de acesso instantâneo, como alguns são muito bons resolvi compartilhar alguns dos títulos:</p>
<p><b>Seven Languages in Seven Weeks</b> &#8211; Apesar do nome sugestivo o autor declara logo no começo que você não vai aprender sete linguagens em sete semanas. É um livro para programadores com alguma experiência que querem principalmente conhecer linguagens em outros paradigmas, assim ele vai gradativamente apresentando sete linguagens que vão cada vez mais se diferenciando das mais comuns hoje em dia e apresentando o ponto forte de cada uma e o que aproveitar delas. Um dos melhores livros que já li, recomendo muito! As linaguagens são: Ruby, IO (awesome!), prolog, Scala, Erlang, Clojure e Haskell.</p>
<p><b>Web design for developers</b>- Programadores não entendem design (no sentido de arte) então esse livro passa os conceitos básicos para pelo menos seu projeto não ser feito e ser usado. É um bom livro.</p>
<p><b>Programming Clojure</b> &#8211; O livro mais básico de clojure, bom para quem quer começar.</p>
<p><b>Clojure in Action</b> &#8211; O livro mais &#8220;real&#8221; de clojure, o estudo é profundo e os exemplos são bem reais e muito uteis. Trata de MySql, Hbase, redis, http (compojure, ring e hiccup), messaging com rabbitmq e distribuição de trabalhos entre maquinas, Map/reduce entre ooutros. O mais completo eu acho sobre clojure.</p>
<p><b>The Joy of Clojure</b> &#8211; O livro mais clojure de clojure, é o que melhor entende a ideia da linguagem e como melhor aproveita-la, meu favorito nessa área.</p>
<p><b>CouchDB The Definitive Guide</b> &#8211; Aborda tudo que deve saber para fazer uma aplicação com CouchDB. Boa leitura.</p>
<p><b>ExtJS in Action</b> &#8211; Achei meio fraco.</p>
<p>Pois é, bastante clojure. Alguns ainda na prateleira para ler (sem ordem):</p>
<ul>
<li>Pragmatic Guide to Git</li>
<li>Pragmatic Guide to Javascript</li>
<li>Erlang and OTP in Action</li>
<li>Programing Erlang</li>
<li>EventSourcing in Action</li>
<li>Real-World Functional Programing</li>
<li>Secrets of the JavaScript Ninja</li>
<li>Hadoop in Action</li>
<li>Jquery Novice to Ninja</li>
<li>Lucene in Action</li>
<li>On Lisp</li>
</ul>
<p>Realmente estou precisando ler os de Javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Geral/livros-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminais múltiplos com screen</title>
		<link>http://manifesto.blog.br/2.0/Linux/screen-linux</link>
		<comments>http://manifesto.blog.br/2.0/Linux/screen-linux#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Quem usa Linux no desktop pode livremente abrir mais de um terminal ou mais de uma aba no terminal, quem est&#225; acostumado com o Vim e o Emacs tamb&#233;m pode ter m&#250;ltiplas janelas dentro do editor. Mas as vezes &#233; &#8230; <a href="http://manifesto.blog.br/2.0/Linux/screen-linux">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quem usa Linux no desktop pode livremente abrir mais de um terminal ou mais de uma aba no terminal, quem est&aacute; acostumado com o Vim e o Emacs tamb&eacute;m pode ter m&uacute;ltiplas janelas dentro do editor. Mas as vezes &eacute; &uacute;til em um mesmo terminal, como numa sess&atilde;o ssh, voc&ecirc; ter mais de uma janela, ai entra o <b>screen</b>!</p>
<p>O uso do screen &eacute; bem simples, ele cria uma <b>sess&atilde;o de shell</b> (bash, zsh, etc&#8230;) da qual voc&ecirc; pode se &#8220;desplugar&#8221; e voltar depois, aonde voc&ecirc; inclusive manter m&uacute;ltiplas sess&otilde;es e janelas.</p>
<p>Para <b>iniciar uma sess&atilde;o</b> usando um apelido, basta usar o comando <i>&#8220;screen -S nome&#8221;</i> e para <b>reconectar a uma sess&atilde;o</b> interrompida <i>&#8220;screen -r -S nome&#8221;</i>.</p>
<p>Os comandos para manipular o screen começam com CTRL+A, voc&ecirc; pode se <b>desconectar de uma sess&atilde;o</b> sem encerr&aacute;-la com <i>&#8220;CTRL+A CTRL+D&#8221;</i>,  pode <b>salvar o hist&oacute;rico</b> usando <i>&#8220;CTRL+A SHIFT+H&#8221;</i>, e ao encerrar a sess&atilde;o tudo vai para um log.</p>
<p>Dentro de uma sess&atilde;o voc&ecirc; pode <b>iniciar outro shell</b> usando <i>&#8220;CTRL+A CTRL+C&#8221;</i>, ver a <b>lista de shells</b> usando <i>&#8220;CTRL+A CTRL+W&#8221;</i>, ir para o <b>pr&oacute;ximo shell</b> usando <i>&#8220;CTRL+A CTRL+A&#8221;</i>.</p>
<p>Voc&ecirc; pode ter janelas em uma sess&atilde;o como no vim/emacs. Divide a <b>janela horizontalmente</b> usando <i>&#8220;CTRL+A SHIFT+S&#8221;</i>, divida a <b>janela verticalmente</b> usando <i>&#8220;CTRL+A | &#8220;</i> (&eacute; o caractere de &#8220;pipe&#8221;, sabe?). Voc&ecirc; <b>alternar entre janelas</b> usando <i>&#8220;CTRL+A CTRL+I&#8221;</i>, para <b>fechar a janela</b> usa-se <i>&#8220;CTRL+A SHIFT+X&#8221;</i>. Veja que uma janela começa sem shell nenhum.</p>
<p>O screen permite ainda que mais de um usu&aacute;rio se conecte a uma sess&atilde;o, para permitir que sua sess&atilde;o tenha mais de um usu&aacute;rio voc&ecirc; pode usar &#8220;CTRL+A :multiuser on&#8221;, e adicione um usu&aacute;rio usando &#8220;CTRL+A :acladd user&#8221;, agora o outro usu&aacute;rio pode por exemplo fazer ssh para sua maquina e entrar na sua sess&atilde;o usando &#8220;screen -x user/nome_da_sessao&#8221;. Para usar o multiusu&aacute;rio o screen deve rodar com &#8220;setuid&#8221;.</p>
<p>Lembre de não sair usando &#8220;ctrl+d&#8221; ou o screen vai encerrar, de agora em diante use o &#8220;ctrl+a ctrl+d&#8221; para manter a sessão rodando.</p>
]]></content:encoded>
			<wfw:commentRss>http://manifesto.blog.br/2.0/Linux/screen-linux/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

