<?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>Stiod Blog &#187; Linux</title>
	<atom:link href="http://blog.stiod.com/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stiod.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 22 Feb 2010 14:20:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Por que o htaccess deve ser evitado?</title>
		<link>http://blog.stiod.com/2010/02/11/por-que-o-htaccess-deve-ser-evitado/</link>
		<comments>http://blog.stiod.com/2010/02/11/por-que-o-htaccess-deve-ser-evitado/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 14:09:53 +0000</pubDate>
		<dc:creator>Yoshio Iwamoto</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=774</guid>
		<description><![CDATA[No post anterior falei sobre o htaccess, o que é, como funciona e mais algumas dicas. Porém faltou dar uma explicação melhor desta citação sobre quando utiliza-lo:
Por questões de performance e segurança: NUNCA!!!!!!!!!!!!11...
Então, por que devemos evitar o uso do htaccess?
Performance
Se você utiliza o htaccess em seus diretórios então o Apache terá que verificar pela [...]]]></description>
			<content:encoded><![CDATA[<p>No post anterior falei sobre o <a href="http://http://blog.stiod.com/2010/02/09/hypertext-access-htaccess/">htaccess</a>, o que é, como funciona e mais algumas dicas. Porém faltou dar uma explicação melhor desta citação sobre quando utiliza-lo:</p>
<blockquote><p><em>Por questões de performance e segurança: NUNCA!!!!!!!!!!!!11...</em></p></blockquote>
<p>Então, por que devemos evitar o uso do htaccess?</p>
<h2>Performance</h2>
<p>Se você utiliza o htaccess em seus diretórios então o Apache terá que verificar pela existência do ".htaccess" no diretório atual e em cada diretório superior e carregar estas configurações em runtime a cada vez que as páginas são requisitadas.</p>
<p>Mesmo sem existir nenhum arquivo ".htaccess" ainda haverá pequeno impacto na performance pois o Apache sempre verifica a existência deste arquivo nos diretórios.</p>
<p>Para não utilizar o htaccess e evitar estas verificações desabilite o AllowOverride (AllowOverride None) nas configurações principais do Apache.</p>
<h2>Segurança</h2>
<p>Quanto a segurança isto depende se é você ou não quem configura os ".htaccess" e/ou o Apache.</p>
<p>Batendo novamente na tecla, o htaccess deve ser utilizado quando se necessita aplicar regras por-diretório e não se possui permissão para alterar as configurações do servidor (e reiniciar o apache também <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<p>Normalmente esta é uma situação encontrada nas hospedagens, você pode hospedar suas páginas mas não pode alterar as configurações do servidor. É ai que entra o htaccess.</p>
<p>Permitindo o uso do htaccess neste caso, você basicamente está permitindo que o "usuário" (uma pessoa que provavelmente você não conhece, seja de conhecimentos técnicos ou caráter) configure o seu próprio:</p>
<pre class="apache">&lt;Directory ...&gt;
...
&lt;/Directory&gt;</pre>
<p>Mas de qualquer forma a questão da segurança depende mais da capacidade da pessoa que está configurando o servidor para não deixar que os usuários façam "caquinhas".</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2010/02/11/por-que-o-htaccess-deve-ser-evitado/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hypertext Access: htaccess</title>
		<link>http://blog.stiod.com/2010/02/09/hypertext-access-htaccess/</link>
		<comments>http://blog.stiod.com/2010/02/09/hypertext-access-htaccess/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 02:40:57 +0000</pubDate>
		<dc:creator>Yoshio Iwamoto</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=767</guid>
		<description><![CDATA[O "Hypertext Access" ou apenas "htaccess" é um arquivo (oculto) com diretrizes de configuração do servidor HTTP Apache que são aplicadas por diretório.
Basicamente o htaccess utiliza a mesma sintaxe do arquivo de configuração principal do Apache, porém obedece as regras estabelecida pela diretriz AllowOverride.
Para utiliza-lo crie um arquivo ".htaccess" no diretório onde você deseja que [...]]]></description>
			<content:encoded><![CDATA[<p>O "<a title="Hypertext Access" href="http://httpd.apache.org/docs/2.0/howto/htaccess.html">Hypertext Access</a>" ou apenas "<a title="htaccess" href="http://httpd.apache.org/docs/2.0/howto/htaccess.html">htaccess</a>" é um arquivo (oculto) com diretrizes de configuração do servidor HTTP Apache que são aplicadas por diretório.</p>
<p>Basicamente o htaccess utiliza a mesma sintaxe do arquivo de configuração principal do Apache, porém obedece as regras estabelecida pela diretriz <a title="AllowOverride Directive" href="http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride">AllowOverride</a>.</p>
<p>Para utiliza-lo crie um arquivo ".htaccess" no diretório onde você deseja que as regras sejam aplicadas e adicione dentro dele as diretrizes. As regras são aplicadas sem a necessidade de reiniciar o Apache.</p>
<h2>Quando utilizar?</h2>
<p>Por questões de <strong>performance</strong> e <strong>segurança</strong>: NUNCA!!!!!!!!!!!!11...</p>
<p>Obviamente se o htaccess existe é porque há um motivo. Utilize nas seguintes condições:</p>
<ul>
<li> Se sua hospedagem não permitir alterações nas configurações principais do Apache (permissão).</li>
<li> Se você precisar permitir que seus usuários possam alterar as configurações do Apache (ex: servidor compartilhado), mas com uma certa limitação (hospedagem é um bom exemplo novamente).</li>
</ul>
<p>De toda forma evite o uso do htaccess.</p>
<h2>Dicas</h2>
<p>As dicas abaixo funcionam não só no ".htaccess", mas também no arquivo de configuração principal do Apache (onde é mais recomendável).</p>
<p>Algumas dicas podem necessitar do módulo Mod-Rewrite habilidado.</p>
<h3>301 Redirect</h3>
<p>O "301 redirect" é a melhor forma de ser fazer um redirecionamento de uma página, além de Search Engine Friendly.</p>
<p>Exemplo 1: Redirecionando todo o website para um outro domínio</p>
<pre class="apache"><span style="color: #00007f;">Redirect</span> <span style="color: #ff0000;">301</span> / http://outrodominio.com.br/</pre>
<p><br/><br />
Exemplo 2: Redirecionando uma página específica</p>
<pre class="apache"><span style="color: #00007f;">Redirect</span> <span style="color: #ff0000;">301</span> /pagina_de.html http://dominio.com.br/pagina_para.html</pre>
<p><br/><br />
<h3>404 Redirect</h3>
<p>Redirecionando erros 404, o famoso "Page not found" (Página não Encontrada), para uma outra página.</p>
<pre class="apache"><span style="color: #00007f;">ErrorDocument</span> <span style="color: #ff0000;">404</span> /pagina_404_customizada.html</pre>
<p><br/><br />
O mesmo vale para redirecionar outras página de erro como 403, 500 e 666. o.O</p>
<h3>DirectoryIndex</h3>
<p>A diretriz "DirectoryIndex" permite escolher uma lista de recursos/páginas/arquivos que serão retornados para a requisição de um index de diretório. Se o arquivo index não for especificado será feita a listagem do diretório (se for permitido).</p>
<p>Por padrão é procurado pelo "index.html" (ou index.php ou outras extensões mais caóticas).</p>
<p>Exemplo:</p>
<ul>
<li>De http://seudominio.com.br/  para http://seudominio.com.br/index.html</li>
<li>De http://seudominio.com.br/diretorio/ para http://seudominio.com.br/diretorio/index.html</li>
</ul>
<pre class="apache"><span style="color: #00007f;">DirectoryIndex</span> index.html index.txt index.exe</pre>
<p><br/></p>
<h3>Negando listagem de diretório</h3>
<p>Já que eu comentei, para não permitir a listagem de diretórios adicione o seguinte comando no htaccess.</p>
<pre class="apache"><span style="color: #00007f;">Options</span> -Indexes</pre>
<p><br/></p>
<h3>Mudando extensões dos arquivos</h3>
<p>Se você quiser migrar/trocar suas páginas *.html para *.php poderá utilizar o seguinte comando.</p>
<pre class="apache"><span style="color: #00007f;">RedirectMatch</span> <span style="color: #ff0000;">301</span> <span style="color: #66cc66;">&#40;</span>.*<span style="color: #66cc66;">&#41;</span>\.html$ http://www.seudominio.com.br$<span style="color: #ff0000;">1</span>.php</pre>
<p><br/><br />
Só fique esperto com o uso de iframes <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Tradução do Google</h3>
<p>Traduz o site automaticamente através do Google Translate. Este até que é interessante (apesar de ainda não ter pensado em como poderá ser útil) e encontrei hoje no site da <a href="http://wiki.dreamhost.com/Htaccess_tricks#Google_Text_Translation">Dreamhost</a>.</p>
<p>Fiz alterações para que seja de Português para outros idiomas e aviso que ainda não testei.</p>
<pre class="apache"><span style="color: #00007f;">Options</span> +<span style="color: #0000ff;">FollowSymlinks</span>
<span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteBase</span> /
<span style="color: #00007f;">RewriteRule</span> ^<span style="color: #66cc66;">&#40;</span>.*<span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&#40;</span>en|es|it|jp|fr<span style="color: #66cc66;">&#41;</span>$ http://www.google.com/translate_c?hl=$<span style="color: #ff0000;">2</span>&amp;amp;sl=pt&amp;amp;u=http://seudominio.com.br/$<span style="color: #ff0000;">1</span> <span style="color: #66cc66;">&#91;</span>R,NC<span style="color: #66cc66;">&#93;</span></pre>
<p><br/><br />
Funciona da seguinte forma, quando alguém acessar "http://seudominio.com.br/-en" ele será traduzido de Português(pt) para Inglês(en) pelo Google Translate.</p>
<h3>AccessFileName</h3>
<p>Permite alterar o nome do arquivo htaccess (que por padrão é ".htaccess") para qualquer outra coisa como ".config". Esta diretriz na verdade deve ser utilizada no arquivo de configuração principal do Apache.</p>
<pre class="apache"><span style="color: #00007f;">AccessFileName</span> .config</pre>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2010/02/09/hypertext-access-htaccess/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Make e Makefile</title>
		<link>http://blog.stiod.com/2009/11/25/make-e-makefile/</link>
		<comments>http://blog.stiod.com/2009/11/25/make-e-makefile/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 13:43:43 +0000</pubDate>
		<dc:creator>Yoshio Iwamoto</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[Makefile]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=719</guid>
		<description><![CDATA[Você que utiliza algum *nix da vida já deve ter passado pelo momento mágico de ter executado o comando make em algum código fonte, não?
O make (GNU make) é uma ferramenta que executa os comandos inclusos dentro de um arquivo. É normalmente utilizado na compilação e instalação de programas.
Uma das vantagens do make é que [...]]]></description>
			<content:encoded><![CDATA[<p>Você que utiliza algum *nix da vida já deve ter passado pelo momento mágico de ter executado o comando make em algum código fonte, não?</p>
<p>O <strong>make</strong> (<a href="http://www.gnu.org/software/make/">GNU make</a>) é uma ferramenta que executa os comandos inclusos dentro de um arquivo. É normalmente utilizado na <strong>compilação</strong> e <strong>instalação</strong> de programas.</p>
<p>Uma das vantagens do make é que ele identifica quais partes do programa devem ser recompiladas de acordo com as mudanças efetuadas desde a última compilação.</p>
<p>Dependendo do tamanho do programa pode-se economizar minutos ou horas entre as recompilações, pois não será necessário recompilar o programa inteiro.</p>
<p>Exemplo de uso:</p>
<pre class="bash">$ <span style="color: #c20cb9; font-weight: bold;">make</span> -f arquivo_com_os_comandos</pre>
<p></p>
<p>Se você chamar o comando make sem passar nenhum parâmetro ele tentará utilizar o arquivo com nome de <strong>Makefile</strong> do diretório atual.</p>
<p>É o que normalmente acontece quando você precisa compilar e instalar um programa pelo código fonte.</p>
<ul>
<li>Descompactar o código fonte (se for um "<strong>*.tar.gz</strong>").</li>
<li>Entrar na pasta descompactada. Haverá um arquivo <strong>Makefile</strong> dentro.</li>
<li>Executar o comando "<strong>make</strong>" para compilar.</li>
<li>Executar o comando "<strong>make install</strong>" como root para instalar.</li>
</ul>
<p></p>
<h3>Makefile</h3>
<p>Se você quiser utilizar o comando make só é necessário criar um arquivo <strong>Makefile</strong> e dentro dele colocar as instruções que o make deve executar.</p>
<p>Formato do Makefile:</p>
<pre>regra: dependências...
	comandos
	...</pre>
<p></p>
<p>Os <strong>comandos</strong> são comandos normais do <strong>shell</strong> (bash). Pode-se colocar vários comandos, porém devem estar <strong>identados com tabulações</strong>. Isto é importante, <strong>não utilize espaços</strong> pois não irá funcionar.</p>
<p>A <strong>regra</strong> é só um nome para identificar um bloco de comandos. Fazendo uma analogia com programação, a "regra" seria semelhante a uma função.</p>
<p>As <strong>dependências</strong> são os arquivos necessários para a execução dos comandos da regra, o make irá fazer a verificação deles. Também podem ser outras <strong>regras</strong> que serão chamadas antes da execução dos comandos. Se houver mais de uma dependência elas devem ser separadas com espaços.</p>
<p>Aqui vai um exemplo de um Makefile que compila um programa em C:</p>
<pre>program:
	gcc -o meuprograma meuprograma.c</pre>
<p></p>
<p>Um exemplo com dependências:</p>
<pre>program: cod1.c cod2.c lib1.a
	gcc -c cod1.c cod2.c
	gcc cod1.o cod2.o lib1.a -o program

lib1.a: lib1.c cod3.c
	gcc -c lib1.c cod3.c
	ar rcs lib1.a lib1.o cod3.o
	ranlib lib1.a</pre>
<p></p>
<p>Pode-se utilizar variáveis também. A declaração é simples, mas devem ser chamados com a notação "<strong>$(variável)</strong>". Repare também que elas podem ser concatenadas:</p>
<pre>CC=gcc
CFLAGS=-O2
CFLAGS=$(CFLAGS) -Wall

program:
	$(CC) $(CFLAGS) -o program program.c</pre>
<p></p>
<p>Olha que legal no Makefile a seguir, advinha o que acontece ao executar o comando `make clean' no terminal?</p>
<pre>program: program.c
        gcc -o program program.c

clean:
        rm *.o
        rm program</pre>
<p></p>
<p>O que aconteceria também se houvesse um arquivo no diretório atual que se chamasse "clean"? O `make clean' não iria executar a lista de comandos da regra. Para evitar este tipo de conflito utilize a regra "<strong>.PHONY</strong>":</p>
<pre>program: program.c
        gcc -o program program.c

.PHONY: clean
clean:
        rm *.o
        rm program</pre>
<p></p>
<p>Agora a regra "clean" será executada mesmo se houver um arquivo no diretório atual com mesmo nome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/11/25/make-e-makefile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>API do Twitter para Python</title>
		<link>http://blog.stiod.com/2009/10/14/api-do-twitter-para-python/</link>
		<comments>http://blog.stiod.com/2009/10/14/api-do-twitter-para-python/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 04:50:52 +0000</pubDate>
		<dc:creator>Yoshio Iwamoto</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=528</guid>
		<description><![CDATA[Hoje vou mostrar como fazer uso da API do Twitter para Python, a Python Twitter API. Sua utilização é bem simples e podemos criar vários aplicativos ou scripts para automatizar algumas tarefas no microblog, como o script que fiz no meu último post.
Instalação no Linux
Baixe o código fonte da última versão aqui.
Descompacte com o comando:
$ [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje vou mostrar como fazer uso da API do Twitter para Python, a <a href="http://code.google.com/p/python-twitter/">Python Twitter API</a>. Sua utilização é bem simples e podemos criar vários aplicativos ou scripts para automatizar algumas tarefas no microblog, como o script que fiz no meu <a href="http://blog.stiod.com/2009/10/07/seja-seguido-no-twitter-sem-incomodar-as-pessoas/">último post</a>.<br/></p>
<p><strong>Instalação no Linux</strong><br />
Baixe o código fonte da última versão <a href="http://code.google.com/p/python-twitter/downloads/list">aqui</a>.</p>
<p>Descompacte com o comando:<br />
<code>$ tar -zxvf python-twitter-XXX.tar.gz</code></p>
<p>Após descompactar entre no diretório criado e execute o seguinte comando como usuário root:<br />
<code># python setup.py install</code><br />
<br/><br />
<strong>Utilização</strong><br />
Para utilizar a API importe o módulo <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html">twitter</a>:</p>
<pre class="python"><span style="color: #ff7700;font-weight:bold;">import</span> twitter
...</pre>
<p>As principais classes que você deve conhecer são:<br />
<a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Api">twitter.Api</a><br />
<a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#User">twitter.User</a><br />
<a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Status">twitter.Status</a><br />
<a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#DirectMessage">twitter.DirectMessage</a></p>
<p>Para iniciar, crie uma instancia da classe <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Api">twitter.Api</a>:</p>
<pre class="python"><span style="color: #ff7700;font-weight:bold;">import</span> twitter
api = twitter.<span style="color: black;">Api</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre>
<p>Com este objeto você pode utilizar os métodos da API que não necessitam de autenticação do usuário. Um Exemplo é o método <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Api-GetPublicTimeline">GetPublicTimeline</a>, que sem parâmetros retorna as últimas 20 mensagens de status dos usuários.</p>
<pre class="python"><span style="color: #ff7700;font-weight:bold;">import</span> twitter
api = twitter.<span style="color: black;">Api</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
status_list = api.<span style="color: black;">GetPublicTimeline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> status <span style="color: #ff7700;font-weight:bold;">in</span> status_list:
    <span style="color: #ff7700;font-weight:bold;">print</span> status.<span style="color: #dc143c;">user</span>.<span style="color: black;">name</span></pre>
<p>No exemplo anterior o status é um objeto da classe <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Status">twitter.Status</a>. A classe twitter.Status possui um atributo user que é um objeto da classe <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#User">twitter.User</a>.</p>
<p>Para realizar a autenticação de um usuário, instancie a classe <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Api">twitter.Api</a>, porém passando o usuário e a senha como parâmetros:</p>
<pre class="python"><span style="color: #ff7700;font-weight:bold;">import</span> twitter
api = twitter.<span style="color: black;">Api</span><span style="color: black;">&#40;</span>username=<span style="color: #483d8b;">'joao'</span>, password=<span style="color: #483d8b;">'abc123'</span><span style="color: black;">&#41;</span></pre>
<p>Para enviar uma mensagem utilize o método <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Api-PostUpdate">PostUpdate</a>:</p>
<pre class="python"><span style="color: #808080; font-style: italic;"># -*- encoding: utf-8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> twitter
api = twitter.<span style="color: black;">Api</span><span style="color: black;">&#40;</span>username=<span style="color: #483d8b;">'joao'</span>, password=<span style="color: #483d8b;">'abc123'</span><span style="color: black;">&#41;</span>
status = api.<span style="color: black;">PostUpdate</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'Yohohoho! Enviei uma mensagem! Mas cuidado
com os limite de 140 caracteres.'</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span></pre>
<p>Repare que ele retorna o status da mensagem enviada.<br/></p>
<p><strong>Várias mensagens contínuas</strong><br />
Um método interessante da API é o <a href="http://static.unto.net/python-twitter/0.6/doc/twitter.html#Api-PostUpdates">PostUpdates</a>, que permite que seja enviada uma mensagem com mais de 140 caracteres. A mensagem na verdade é enviada como se fosse várias mensagens com no máximo 140 caracteres.</p>
<p>Você também pode indicar uma string de continuação no segundo parâmetro, esta string é colocada no final das mensagens para indicar a continuação.</p>
<pre class="python"><span style="color: #808080; font-style: italic;"># -*- encoding: utf-8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> twitter
api = twitter.<span style="color: black;">Api</span><span style="color: black;">&#40;</span>username=<span style="color: #483d8b;">'joao'</span>, password=<span style="color: #483d8b;">'abc123'</span><span style="color: black;">&#41;</span>
status = api.<span style="color: black;">PostUpdates</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'Yohohoho! Enviei uma mensagem bem grande!
Agora você não precisa se preocupar com o tamanho da mensagem pois
este método irá dividi-la para você em várias mensagens, você também
pode utilizar uma string de continuação ao lado.'</span><span style="color: #483d8b;">''</span>, <span style="color: #483d8b;">'…'</span><span style="color: black;">&#41;</span></pre>
<p><em><strong>Obs: Segundo a documentação da API, o Twitter remove as reticências ("...") das strings das mensagem, por isso utilize o caractere UNICODE \u2026 ("…"). Também não ultrapasse o limite dos 150 requests permitidos por hora pelo Twitter.</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/10/14/api-do-twitter-para-python/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>VIM &#8211; Substituir Tab por Espaços</title>
		<link>http://blog.stiod.com/2009/10/06/vim-substituir-tab-por-espacos/</link>
		<comments>http://blog.stiod.com/2009/10/06/vim-substituir-tab-por-espacos/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 21:26:44 +0000</pubDate>
		<dc:creator>Ricardo Perez</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[vim linux vi shell]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=425</guid>
		<description><![CDATA[Uma dica muito rápida!
Se você estiver precisando trocar "Tab" por espaços para identação do seu código fonte, como eu preciso para editar alguns scripts python em  um servidor, basta fazer o seguinte:

:set tabstop=n // seta para cada tab o numero n de espaços
:set expandtab // troca a tab por espaço

Note que para as tabs [...]]]></description>
			<content:encoded><![CDATA[<p>Uma dica muito rápida!</p>
<p>Se você estiver precisando trocar "Tab" por espaços para identação do seu código fonte, como eu preciso para editar alguns scripts <a href="http://python.org">python</a> em  um servidor, basta fazer o seguinte:<br />
<code><br />
:set tabstop=n // seta para cada tab o numero n de espaços<br />
:set expandtab // troca a tab por espaço<br />
</code></p>
<p>Note que para as tabs já existentes no código estes comandos não funcionarão, para ajusta isto basta fazer:<br />
<code><br />
:retab<br />
</code></p>
<p>Para setar permanentemente esses ajuste em seu <em>Vim </em>  basta colocar estes comandos dentro do <em>~/.vimrc</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/10/06/vim-substituir-tab-por-espacos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monitorando sua internet 3G</title>
		<link>http://blog.stiod.com/2009/08/02/monitorando-sua-internet-3g/</link>
		<comments>http://blog.stiod.com/2009/08/02/monitorando-sua-internet-3g/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 02:02:29 +0000</pubDate>
		<dc:creator>Rafael Sierra</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=348</guid>
		<description><![CDATA[Em decorrência da minha mudança de imóvel por conta do meu (em breve) casamento fiquei sem internet. O prédio atual onde moro não tem suporte a cabeamento da Net/Virtua e a Telefônica foi, legalmente, proibida de vender novas assinaturas telefônicas, o que significa que eu não tinha até então internet em casa, e pra resolver [...]]]></description>
			<content:encoded><![CDATA[<p>Em decorrência da minha mudança de imóvel por conta do meu (em breve) casamento fiquei sem internet. O prédio atual onde moro não tem suporte a cabeamento da Net/Virtua e a Telefônica foi, legalmente, proibida de vender novas assinaturas telefônicas, o que significa que eu não tinha até então internet em casa, e pra resolver isso a sempre sábia <a href="http://twitter.com/pathiene">@pathiene</a> sugeriu que utilizássemos uma internet 3G qualquer, e como eu já tinha feito um teste com o Claro 3G, que funcionou muito bem por eu estar em um lugar onde geralmente não se tem muita atenção das operadoras de celular, resolvi então ver qual seria a melhor opção, que dentre as disponíveis a OI/Velox se destacou.</p>
<p>O problema começa na assinatura do contrato, quando você lê no mesmo: <strong>"...até um limite de 10GB por mês..."</strong> caso eu ultrapasse o limite será cobrado R$0,10 por MB adicional, ou R$102,40 por GB adicional, e no caso da Claro com 1GB por mês tendo como punição ao abuso o corte da velocidade de 1Mbps para 128Kbps. Naturalmente, não existe de forma clara e abertamente disponível aos seus clientes (ao menos no caso da Oi, não posso confirmar quanto a outras operadoras) um link como o <a href="http://consumo.virtua.com.br">http://consumo.virtua.com.br</a> que lhe disponibiliza um relatório diário com o seu consumo, bastando saber qual o mac address de seu dispositivo.</p>
<p>Pois bem, para resolver esse problema recorri, naturalmente, à programação e criei um script que para ser adicionado ao <a href="http://arco-debian.codigolivre.org.br/tutorial/crontab.html">crontab</a> que irá gerar um relatório constante do seu consumo. O script é feito em Ruby (ahh Rafael, pq Ruby e não Python/Java/C/PHP??, simples: porque eu quis) e pode ser baixado em <a href="http://blog.stiod.com/wp-content/uploads/2009/08/net_counter.rb">http://blog.stiod.com/wp-content/uploads/2009/08/net_counter.rb</a> .</p>
<p>O funcionamento do script é muito simples:<br />
<code>sdm@sdm:~$ ./net_counter.rb -h<br />
Usage: net_counter.rb [OPTIONS]<br />
Utilize este script para mensurar o consumo de sua rede<br />
    -i, --interface=val              Interface que deve ser analizada. Padrão: ppp0<br />
    -f, --file=val                   Arquivo onde deve ser armazenado os dados.<br />
                                     Evite usar o mesmo arquivo para diferentes interfaces. Padrão: report_ppp0.txt<br />
    -h, --help                       Exibe esta mensagem.<br />
</code></p>
<p>Edite o seu crontab e adicione o comando nele, você pode customizar ele para gerar logs mensais, adicionando o comando <strong>net_counter.rb --file /qualquer/lugar/report_ppp0_`date +%m`.txt</strong>. Lembre-se apenas de dar permissão de execução no script (chmod +x) e de coloca-lo no PATH do seu crontab (/usr/bin/ costuma servir).</p>
<p>Para saber como esta o consumo da sua rede basta analizar o arquivo report_ppp0.txt ou seja lá qual for o nome que você escolher, o arquivo está disposto da seguinte forma:</p>
<ul>
<li>Primeira linha: Trafego de download total (somatório desde a primeira execução para aquele arquivo)</li>
<li>Segunda linha: Trafego de upload total (idem)</li>
<li>Terceira linha: Trafego de download desde a última vez que você se conectou</li>
<li>Quarta linha: Trafego de upload  desde a última vez que você se conectou</li>
</ul>
<p>Em todos os casos o número sera em <strong>bytes</strong>, em um post futuro talvez eu faça o script que calcula em K, M ou GB.</p>
<p>Observações:</p>
<ul>
<li>O script utiliza os dados do arquivo /proc/net/dev</li>
<li>A internet 3G da Claro e Oi funcionam muito bem em Praia Grande/SP, se você vier passar um feriado aqui, pode trazer seu notebook e modem tranquilamente <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>O modem oferecido pela Oi funcionou perfeitamente no Ubuntu 9.04 e foi extremamente simples e intuitiva sua configuração</li>
<li>Desculpem pelos 4 meses e 1 dia sem atualização no blog :S</li>
<li>Sim, o ultimo post foi de primeiro de abril</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/08/02/monitorando-sua-internet-3g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell Script &#8211; Tratamento de querystring como cgi</title>
		<link>http://blog.stiod.com/2009/03/24/shell-script-tratamento-de-querystring-como-cgi/</link>
		<comments>http://blog.stiod.com/2009/03/24/shell-script-tratamento-de-querystring-como-cgi/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 17:16:38 +0000</pubDate>
		<dc:creator>Gabriel Verta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[querystring]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=316</guid>
		<description><![CDATA[Como fazemos para pegar os valores de uma querystring rodando um shell script por cgi?
Vamos ao código:

for var in `echo $QUERY_STRING &#124; tr "&#38;" "\t"`
do
key=$(echo $var &#124; tr = " " &#124; awk '{print $1}';);
value=$(echo $var &#124; tr = " " &#124; awk '{print $2}';);
declare "query_$key"="$value";
done

Agora a lógica:
Quando chamamos um script via cgi, este cria [...]]]></description>
			<content:encoded><![CDATA[<p>Como fazemos para pegar os valores de uma querystring rodando um shell script por cgi?</p>
<p>Vamos ao código:</p>
<p><code><br />
for var in `echo $QUERY_STRING | tr "&amp;" "\t"`<br />
do<br />
key=$(echo $var | tr = " " | awk '{print $1}';);<br />
value=$(echo $var | tr = " " | awk '{print $2}';);<br />
declare "query_$key"="$value";<br />
done<br />
</code></p>
<p>Agora a lógica:</p>
<p>Quando chamamos um script via cgi, este cria a variavel de ambiente <em>QUERY_STRING</em>, que conterá o valor do GET em uma string única. Assim temos que tratar esta string para que tenhamos as variáveis com os valores que enviamos.</p>
<p>Vamos começar com este trecho:<br />
<code><br />
`echo $QUERY_STRING | tr "&amp;" "\t"`<br />
</code><br />
Neste estamos mandando exibir o valor da variável QUERY_STRING e jogando a saida para o comando tr, que faz uma tradução de um texto em outro, transformando todos os &amp; em \t no caso.<br />
E o que é esta ` (crase) antes e depois do comando? Serve para você efetivamente executar um comando do shell, onde o resultado é retornado para o script.</p>
<p>Vamos para a próxima linha do script:<br />
<code><br />
key=$(echo $var | tr = " " | awk '{print $1}';);<br />
</code></p>
<p>A partir desta linha, dentro do for, já temos a variavel <em>var</em> com o valor parametro=valor, então temos que pegar este parametro e valor. Exibimos o valor de var, jogando a saída padrão para o tr novamente, só que agora transformamos = em espaço, para aí jogarmos esta saída em outro programa para separar os argumentos, no caso o <a href="http://pt.wikipedia.org/wiki/Awk">awk</a>, onde mandamos exibir somente o primeiro parâmetro, rodando direto no shell seria algo como:</p>
<p><code><br />
$ awk '{print $1}';<br />
parametro valor<br />
parametro<br />
</code></p>
<p>Digitando parametro e valor no awk e mandando exibir apenas o primeiro parâmetro ele retorna somente o primeiro.</p>
<p>Na linha seguinte do nosso script, a mesma coisa é feita, com a diferença de que o segundo parâmetro é pego para termos o valor e não a chave desta vez.</p>
<p>Agora já temos key com a chave do parâmetro do GET, e value com o valor da chave. Vamos a próxima linha:<br />
<code><br />
declare "query_$key"="$value";<br />
</code></p>
<p>Agora estamos criando a variável com o valor de key com o valor de value. Como assim?</p>
<p>Se no GET tivessemos algo como stiod=nozes, $key teria o valor de stiod e $value o valor nozes. Então estariamos criando uma variável stiod com o valor nozes. Seria algo como se estivessemos digitado stiod=nozes no código. Ou seja, a partir deste momento, com o fim do for, temos uma variável com cada chave do GET com o prefixo "query_", e seus respectivos valores.</p>
<p>Seguindo o exemplo anterior, se tivessemos passado arquivo.sh?stiod=nozes, mandando exibir o valor da variável query_stiod seria exibido o valor nozes (echo $query_stiod)</p>
<p>É isso ai,<br />
 <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/03/24/shell-script-tratamento-de-querystring-como-cgi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como extrair o conteúdo de um arquivo rpm?</title>
		<link>http://blog.stiod.com/2009/03/16/como-extrair-o-conteudo-de-um-arquivo-rpm/</link>
		<comments>http://blog.stiod.com/2009/03/16/como-extrair-o-conteudo-de-um-arquivo-rpm/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 01:16:13 +0000</pubDate>
		<dc:creator>Gabriel Verta</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Xapian]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[rpm]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=306</guid>
		<description><![CDATA[O comando que extrai todo o conteudo de um arquivo rpm, criando as pastas que o rpm criaria a partir do diretório atual:
rpm2cpio arquivo.rpm &#124; cpio -idmv
  

Link sobre cpio
]]></description>
			<content:encoded><![CDATA[<p>O comando que extrai todo o conteudo de um arquivo rpm, criando as pastas que o rpm criaria a partir do diretório atual:</p>
<p><code>rpm2cpio arquivo.rpm | cpio -idmv</code><br />
 <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>
<a href="http://www.gnu.org/software/cpio/">Link sobre cpio</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/03/16/como-extrair-o-conteudo-de-um-arquivo-rpm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix II</title>
		<link>http://blog.stiod.com/2009/02/26/postfix-ii/</link>
		<comments>http://blog.stiod.com/2009/02/26/postfix-ii/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 01:56:02 +0000</pubDate>
		<dc:creator>pathi</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=276</guid>
		<description><![CDATA[Demorou mas chegou!!
Ai está a segunda parte do servidor de email que subi com Postfix + Squirrelmail um tempo atrás...
Instalando o Squirrelmail:
  
  # aptitude install squirrelmail
  # aptitude install php5
  
Quando instalarmos o pacote do squirrelmail, será instalado também o apache2 e outros pacotes e dependências necessárias para o funcionamento dessas ferramentas. 
Depois de instalado, uma das [...]]]></description>
			<content:encoded><![CDATA[<p>Demorou mas chegou!!</p>
<p>Ai está a segunda parte do servidor de email que subi com Postfix + Squirrelmail um tempo atrás...</p>
<p>Instalando o Squirrelmail:</p>
<p>  <br />
<strong>  # aptitude install squirrelmail<br />
  # aptitude install php5</strong><br />
  <br />
Quando instalarmos o pacote do squirrelmail, será instalado também o apache2 e outros pacotes e dependências necessárias para o funcionamento dessas ferramentas. <br />
Depois de instalado, uma das primeiras coisas que temos que fazer, é criar uma espécie de alias para abrir o squirrelmail no browser. Portanto, adicione as duas linhas abaixo no httpd.conf:</p>
<p><strong>  # vim /etc/apache2/httpd.conf<br />
  Alias /webmail "/usr/share/squirrelmail/"<br />
  DirectoryIndex index.php</strong></p>
<p>  Para definir algumas configurações do Squirrelmail, basta usar o comando abaixo. Esse comando abre várias opções de configurações que podemor alterar para deixar o squirrelmail com uma cara mais pessoal. <br />
<strong>  # squirrelmail-configure</strong></p>
<p>  Para acessar o squirrelmail do seu browser, basta usar:<br />
 <strong> http://IP.IP.IP.IP/webmail</strong><br />
  ou<br />
<strong>  http://www.dominio.com.br/webmail</strong></p>
<p>  Lembrando que a principio, os logins dos usuários são os mesmos usuários que estão criados dentro de /etc/passwd.<br />
  Execute agora o comando que cria a pasta dentro do diretório /etc/skel, para que todos os homes dos novos usuários criados daqui em diante já sejam criados com o diretório Maildir, fundamental para o armazenamento de mensagens no Postfix:</p>
<p> <strong> # maildirmake /etc/skel/Maildir</strong></p>
<p> Se você já tem usuários criados mas não tem o Maildir dentro do home deles, basta usar o comando abaixo que será criado o Maildir de maneira correta. Caso não seja criado, é bem provável que apareçam erros quando tentar enviar/receber emails:</p>
<p> <strong> # maildirmake /home/usuario/Maildir</strong></p>
<p>  Para trabalhar com o Postfix autenticado usando o módulo SASL e TLS.</p>
<p><strong>  # aptitude install libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail<br />
  # vim /etc/default/saslauthd</strong><br />
  <br />
  Substitua a linha "START=no" por: <strong>"START=yes"</strong><br />
E confirme se a linha abaixo está igual:</p>
<p><strong>MECHANISMS="pam"</strong></p>
<p><strong><span style="normal;">Também é necessário fazer mais algumas alterações:</span></strong></p>
<p><strong>  # vim /etc/postfix/sasl/smtpd.conf"</strong></p>
<p><strong>pwcheck_method: saslauthd</strong></p>
<p><strong>mech_list: plain login</strong></p>
<p>Crie o diretório:</p>
<p><strong># mkdir -p /var/spool/postfix/var/run/saslauthd</strong></p>
<p>  Novamente edite o arquivo e substitua uma linha:</p>
<p><strong># vim /etc/default/saslauthd<br />
  <span style="normal;">OPTIONS="-c"  por:</span> OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"</strong></p>
<p>  Reinicie o serviço:</p>
<p><strong>  # /etc/init.d/saslauthd restart</strong><br />
    <br />
  Adicione no postfix o  grupo SASL:</p>
<p><strong>  # adduser postfix sasl</strong></p>
<p>  O proximo passo é adicionar o SASL no  Postfix:</p>
<p><strong>  # vim /etc/postfix/main.cf</strong><br />
  <br />
  Adicione as seguintes linhas:</p>
<p> <strong> smtpd_sasl_local_domain =<br />
  smtpd_sasl_auth_enable = yes<br />
  smtpd_sasl_security_options = noanonymous<br />
  broken_sasl_auth_clients = yes<br />
  smtpd_recipient_restrictions = permit_sasl_authenticated,<br />
  permit_mynetworks,<br />
  reject_unauth_destination<br />
  smtpd_tls_auth_only = no</strong></p>
<p>  Reinicie o Postfix:</p>
<p><strong>  # /etc/init.d/postfix reload<br />
  # /etc/init.d/postfix restart</strong></p>
<p> </p>
<p>E então, desfrute!! <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/02/26/postfix-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix I</title>
		<link>http://blog.stiod.com/2009/01/07/postfix-i/</link>
		<comments>http://blog.stiod.com/2009/01/07/postfix-i/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 23:40:24 +0000</pubDate>
		<dc:creator>pathi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.stiod.com/?p=222</guid>
		<description><![CDATA[People,
Esses dias tive que estudar um pouco sobre Postfix para entender marromenos como que funciona um server de email. Então ai vai um passo-a-passo do que eu fiz para subir  esse servidor de email com Postfix usando o squirrelmail para testar os envios e recebimentos dos emails  
Usei Ubuntu Server (não gosto muito mas [...]]]></description>
			<content:encoded><![CDATA[<p>People,</p>
<p>Esses dias tive que estudar um pouco sobre Postfix para entender marromenos como que funciona um server de email. Então ai vai um passo-a-passo do que eu fiz para subir  esse servidor de email com Postfix usando o squirrelmail para testar os envios e recebimentos dos emails <img src='http://blog.stiod.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Usei Ubuntu Server (não gosto muito mas era o que eu tinha na mão) e gerenciador de pacote aptitude. O mesmo funciona com apt-get se preferir :-p</p>
<p>Primeiramente, vamos instalar os pacotes básicos na máquina. Esses pacotes não são necessariamente só do Postfix.</p>
<p><strong> # aptitude install openssh-server vim-full mutt nmap postfix</strong></p>
<p>Durante a instalação, provavelmente serão feitas algumas perguntas. Por enquanto, apenas dê ENTER para todas elas. Porque assim que a instalação terminar, iremos reconfigurar algumas opções e depois editar o arquivo de configuração direto.</p>
<p>Feita a instalação, vamos reconfigurar algumas opções básicas:</p>
<p><strong> # dpkg-reconfigure postfix</strong></p>
<p>Abaixo, segue um exemplo de configuração que foi definida:</p>
<p><em> =&gt; OK<br />
=&gt; Internet Site<br />
=&gt; dominio.com.br<br />
=&gt; (em branco)<br />
=&gt; $myhostname, localhost.$mydomain, $mydomain<br />
=&gt; yes<br />
=&gt; 127.0.0.0/8 192.168.1.0/24<br />
=&gt; yes<br />
=&gt; 0<br />
=&gt; +<br />
=&gt; all</em></p>
<p>Depois que definirmos todas essas configurações, então automaticamente o postfix será recarregado (reload) e reiniciado.<br />
Nesse server básico de Postfix, estou usando a mesma base de usuários comuns do sistema, como usuários que terão email no postfix. Lembrando que todos esses usuários comuns, são os que possuem ID maior que 1000 e estão dentro de /etc/passwd.</p>
<p>Para esse primeiro teste, vou adicionar um usuário novo no sistema:</p>
<p><strong> # adduser joao</strong></p>
<p>Como o postfix já está instalado e com uma pré-configuração, então vamos enviar alguns emails entre os usuários comuns do sistema. Para isso, vamos usar o telnet mesmo:</p>
<p><em> $ telnet localhost 25</em></p>
<p><em>HELO smtp.dominio.com.br<br />
MAIL From: user@dominio.com.br<br />
RCPT to: joao@dominio.com.br<br />
DATA<br />
Mensagem do email.<br />
.<br />
QUIT</em></p>
<p>Como estamos fazendo tudo na máquina local por enquanto, então usei um telnet localhost na porta 25. Na linha HELO como o próprio nome já fala, estou dando um "Olá" para o meu server de email e domínio. Na linha MAIL From estou avisando qual o usuário que irá enviar o email e na linha RCPT to está o usuário que irá receber o email. Para escrever a mensagem, chamamos o DATA e então basta escrever o que você quiser. Para finalizar a mensagem, basta dar um . único e ele entenderá como fim da mensagem. E para finalizar o telnet, basta dar um QUIT.<br />
É importante prestar atenção nas palavras e letras maiúsculas.</p>
<p>Quando enviarmos esse email para o joao@dominio.com.br, será criado um arquivo com o nome do usuário em /var/mail/.<br />
Por exemplo:</p>
<p><strong> # ls /var/mail</strong><br />
joao</p>
<p>Então para ler o email, pode-se dar um cat nesse arquivo, ou então usar uma ferramenta chamada mutt, que lê emails em linha de comando.</p>
<p><strong> # cat /var/mail/joao</strong><br />
ou<br />
<strong> # su joao<br />
$ mutt<br />
</strong><br />
Abaixo, segue a estrutura do arquivo /etc/hostname:<br />
<strong><br />
# cat /etc/hostname<br />
dominio.com.br</strong></p>
<p>Abaixo, segue a estrutura do arquivo /etc/hosts:</p>
<p><strong> # cat /etc/hosts</strong><br />
<em> 127.0.0.1 localhost<br />
127.0.1.1 dominio.com.br dominio.com.br<br />
IP.ex.ter.no dominio.com.br dominio.com.br</em></p>
<p>A estrutura desses arquivos é importante, porque dependendo dos casos, o hostname e o domínio tem que estar com o mesmo nome.</p>
<p>O arquivo de configuração do Postfix está localizado em /etc/postfix/main.cf.<br />
Abaixo vou colocar umas linhas básicas desse arquivo de configuração para analisar o conteúdo. Não vou explicar o que todas as linhas fazem, mas sites como o do próprio postfix explica o conteúdo de cada linha e muitas vezes cita exemplos =p</p>
<p><strong> # vim /etc/postfix/main.cf</strong><br />
<em> myhostname = IP.ex.ter.no.dominio.com.br<br />
mydomain = dominio.com.br<br />
alias_maps = hash:/etc/aliases<br />
alias_database = hash:/etc/aliases<br />
myorigin = /etc/mailname<br />
mydestination = $myhostname, localhost.$mydomain, $mydomain<br />
relayhost =<br />
relay_domains = $mydomain<br />
mynetworks = 127.0.0.0/8 192.168.1.0/24<br />
home_mailbox = Maildir/<br />
recipient_delimiter = +<br />
inet_interfaces = all<br />
inet_protocols = all<br />
mailbox_size_limit = 0</em></p>
<p>Vamos configurar os serviços de pop e imap. Para isso, será necessário instalar os seguintes pacotes:</p>
<p><strong> # aptitude install courier-pop courier-pop-ssl<br />
# aptitude install courier-imap courier-imap-ssl</strong></p>
<p>Quando instalarmoas esses pacotes, será criado um diretório courier dentro do /etc/ e dentro desse diretório, teremos diversos arquivos. Antesde editar os arquivos e fazer as alterações, aconselho renomear os arquivos originais:<br />
<strong><br />
# cd /etc/courier<br />
# mv imapd.pem imapd.pem.old<br />
# mv pop3d.pem pop3d.pem.old</strong></p>
<p>O próximo passo, é editar os arquivos imap.cnf e pop3d.cnf e alterar as informações necessárias. Por exemplo coloque em Country=BR, State=Sao Paulo e etc:</p>
<p><strong> # vim imapd.cnf<br />
# vim pop3d.cnf</strong></p>
<p>Quando os arquivos forem alterados, devemos devemos criar novamente os arquivos imapd.pem e pop3d.pem com os comandos:</p>
<p><strong> # mkimapdcert<br />
# mkpop3dcert</strong></p>
<p>O próximo passo agora é instalar o squirrelmail, que é uma ferramenta para testar o envio e recebimento de mensagens de email através de uma interface web mesmo. Se preferir, pode usar alguma outra ferramenta, como eu já tinha comentado antes:</p>
<p><strong> # aptitude install squirrelmail<br />
# aptitude install php5</strong></p>
<p>Continua... :-p</p>
<p>Links de Referências:</p>
<p><a href="http://www.postfix.org/documentation.html">http://www.postfix.org/documentation.html</a></p>
<p><a href="https://help.ubuntu.com/7.04/server/C/postfix.html">https://help.ubuntu.com/7.04/server/C/postfix.html</a></p>
<p><a href="http://virtual01.lncc.br/~licht/linux/servidores.postfix.arq.html">http://virtual01.lncc.br/~licht/linux/servidores.postfix.arq.html</a></p>
<p><a href="http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap10-2">http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap10-2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.stiod.com/2009/01/07/postfix-i/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
