<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Mrsantos - Programação</title>
	<atom:link href="http://mrsantos76.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mrsantos76.wordpress.com</link>
	<description>Perl, Python, Php, C++, Linux, Vi e futilidades :)</description>
	<lastBuildDate>Tue, 10 Nov 2009 13:12:39 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='mrsantos76.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/01ef3723b318f750dbb8a3cd5637cee9?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Mrsantos - Programação</title>
		<link>http://mrsantos76.wordpress.com</link>
	</image>
			<item>
		<title>Usando pynotify</title>
		<link>http://mrsantos76.wordpress.com/2009/11/10/usando-pynotify/</link>
		<comments>http://mrsantos76.wordpress.com/2009/11/10/usando-pynotify/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 13:12:39 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=315</guid>
		<description><![CDATA[Bom galera essa semana deu uma olhada no pynotify, com ele é possivel gerar aquelas notificações que recemos quando o Icedove recebe um email, quando nossa bateria do note tá abrindo as pernas, enfim uma sério de possibilidades pra esse cara&#8230;
nesse exemplo que fiz imaginei o seguinte, tenho uma série de servidores e quero ser [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=315&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bom galera essa semana deu uma olhada no pynotify, com ele é possivel gerar aquelas notificações que recemos quando o Icedove recebe um email, quando nossa bateria do note tá abrindo as pernas, enfim uma sério de possibilidades pra esse cara&#8230;<br />
nesse exemplo que fiz imaginei o seguinte, tenho uma série de servidores e quero ser avisado quando algum deles não estiver respondendo&#8230;<br />
aproveitei tbm a optionParse que pra mim é uma mão na roda e coloquei algumas opções pra chamar esse script<br />
./script -t tempo_em_segundos<br />
alem disso -v verssion -h help<br />
gostei dele cara <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
bom vamos ao código:</p>
<pre>
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-

# Criado em: "05/11/2009"
# Autor: MRSantos mrsantos@viaconnect.com.br
# Version:  1.3
#
# A espera não é uma esperaça vazia,
# possui a certeza interior de alcançar seu objetivo...
#
# 2009-11-08
#	+ acrescentado loop no script pra rodar eternamente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
#
# 2009-11-09
#	+ acrescentados optionParse para chamar o script com parametros
#	+ acrescentado icone na notificacao...

import sys
import os
import socket
from time import sleep
from optparse import OptionParser

try:
	import pynotify
except:
	os.system("clear")
	print "###########################################################"
	print "Modulo pynotfy nao instalado\napt-get install python-notify"
	print "###########################################################"
	sys.exit(0)

def verifica_status(host):
    	# por padrao tento nessa porta...
	port=22
	sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	sock.settimeout(.5)

	testa=sock.connect_ex((host, port))
	if testa==0:
		return True
	else:
		sock.close()
		return False

def notificacao(title, msg):
	""" valores possiveis para os icones:
		printer - impressora
		dialog-warning - icone com exclamacao
		printer - impressora
		emblem-mail - email
		# acho que tem bem mais mas nao fui atrás <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
		# tbm pode ser passado um caminho para uma imagem algo em torno de 72px de largura...
		# testei com uma foto minha ficou lindo... <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
	"""
	icone = 'server'
	if pynotify.init("MRS"):
		n = pynotify.Notification(title, msg, icone)
		# descomente a linha de baixo e a notificacao fica até que alguem a feche...
		#n.set_timeout(pynotify.EXPIRES_NEVER)

		if not n.show():
		    print "Falha ao criar notificacao"

def main():
	hosts = {
		'Servidor1': '192.168.0.10',
		'Servidor2': '192.168.0.11',
		'Servidor3': '10.255.106.12',
		'Servidor do terra': '200.154.56.80'
		}

	for i in hosts.keys():
		if  not verifica_status(hosts[i]):
			 notificacao(i, "O servidor %s não está respondendo" % hosts[i])

if __name__ == '__main__':
	parser = OptionParser(usage="./%prog [-t]", version="%prog 1.0")
	parser.add_option('-t', '--time', help='Especifique um tempo para que que o script seja chamado novamente\nO tempo eh especificado em segundos...')
	options = parser.parse_args()[0]

	time_default=180 # se nao especificado tempo então é a cada 3 minutos

	while 1:
		main()
		if options.time:
			try:
				sleep(time)
			except:
				sleep(time_default)
		else:
				sleep(time_default)
</pre>
<p>Bom galera uma mudança que vou fazer é ele pegar os servidores de uma lista e nao do dicionario dentro do script, quando fizer atualizo o codifo aqui <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/315/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/315/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=315&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/11/10/usando-pynotify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Quadrado e cubo em C</title>
		<link>http://mrsantos76.wordpress.com/2009/11/10/quadrado-e-cubo-em-c/</link>
		<comments>http://mrsantos76.wordpress.com/2009/11/10/quadrado-e-cubo-em-c/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 12:39:50 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Programação C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cubo]]></category>
		<category><![CDATA[printf]]></category>
		<category><![CDATA[quadrado]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=312</guid>
		<description><![CDATA[Semana passada peguei uma carona com o prima de uma amiga e no banco de trás do carro dele estava o livro C total e completo, quem nunca ouviu falar dele né&#8230;
tenho ele, mas sem nada melhor pra fazer começei a folhear ele e na pagina 282 eu acho tinha esse pequeno exemplo de como [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=312&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Semana passada peguei uma carona com o prima de uma amiga e no banco de trás do carro dele estava o livro C total e completo, quem nunca ouviu falar dele né&#8230;<br />
tenho ele, mas sem nada melhor pra fazer começei a folhear ele e na pagina 282 eu acho tinha esse pequeno exemplo de como usar o printf pra formatar uma saída de dados, fiquei com ele na cabeça&#8230;<br />
e num domingo a tarde desses da vida sem coisa melhor pra fazer fiz ele <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
tá sei que esse não é meu melhor post mas enfim tá ai <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre>
/*
* File:   main.c
* Author: mrsantos
*
* Created on 8 de Novembro de 2009, 16:47
*/

#include
#include 

int main(int argc, char** argv)
{
        int i;
            for(i=1;i &lt;21; i++)
                            printf(&quot;%d \t%d \t%d\n&quot;, i, i*i, i*i*i);

                return (EXIT_SUCCESS);
}
</pre>
<p>Bom galera é isso, abraços a todos&#8230;</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/312/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=312&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/11/10/quadrado-e-cubo-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Gerar senha aleatório com pytho parte III a missão&#8230;</title>
		<link>http://mrsantos76.wordpress.com/2009/11/05/gerar-senha-aleatorio-com-pytho-parte-iii-a-missao/</link>
		<comments>http://mrsantos76.wordpress.com/2009/11/05/gerar-senha-aleatorio-com-pytho-parte-iii-a-missao/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 19:33:57 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[choice]]></category>
		<category><![CDATA[optparser]]></category>
		<category><![CDATA[rand]]></category>
		<category><![CDATA[senha aleatoria]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=306</guid>
		<description><![CDATA[Tá sei que meus dois últimos posts foram sobre isso 
mas  um foi a função crua sem muito incremento&#8230;
o segundo foi uma versão gráfica usando GTK e desenhando tela no glade&#8230;
e esse resolvi escrever pra fazer uso do modulo optparse que é muito util pra quando queremos escrever script a maneira unix..
onde chamamos um [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=306&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Tá sei que meus dois últimos posts foram sobre isso <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
mas  um foi a função crua sem muito incremento&#8230;<br />
o segundo foi uma versão gráfica usando GTK e desenhando tela no glade&#8230;<br />
e esse resolvi escrever pra fazer uso do modulo optparse que é muito util pra quando queremos escrever script a maneira unix..<br />
onde chamamos um script e passamos paramentros pro mesmo atraves de flags<br />
nesse script usamos a flag -t pra definir tamanho, &#8211;version pra ver versão e -h pra mostrar um help&#8230;<br />
bom sem mais delongas vamos ao script&#8230;</p>
<pre>
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-

# Criado em: "04/11/2009"
# Autor: MRSantos mrsantos@viaconnect.com.br
#
# A espera não é uma esperaça vazia,
# possui a certeza interior de alcançar seu objetivo...

from os import system
from random import choice
from optparse import OptionParser

def gera_senha(tamanho):
	""" -=-=-=- Funcao responsavel por gerar a senha..."""
	caracters = '0123456789abcdefghijlmnopqrstuwvxz'
	tamanho = int(tamanho)

	passwd = ''
	for char in range(tamanho):
		passwd += choice(caracters)

	return passwd

def main():
	system('clear')
	# -=-=-=- Se nao informado tamanho da senha sera de 10 caracteres

	parser = OptionParser(usage="./%prog [-t] valor", version="%prog 1.0\nBy MRSANTOS")
	parser.add_option('-t', '--tamanho', help='Informe o tamanho desejado para senha')
	options = parser.parse_args()[0]

	try:
		tamanho = options.tamanho
		print "Senha=&gt; " + gera_senha(tamanho)
	except:
		parser.error("""Valor informado nao eh numerico""")

if __name__ == '__main__':
	main()
</pre>
<p>Bom galera é isso, espero que seja util a alguem <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
abraços </p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/306/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=306&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/11/05/gerar-senha-aleatorio-com-pytho-parte-iii-a-missao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Gerar senha aleatória coma Python &#8211; Gráfico</title>
		<link>http://mrsantos76.wordpress.com/2009/11/04/gerar-senha-aleatoria-coma-python-grafico/</link>
		<comments>http://mrsantos76.wordpress.com/2009/11/04/gerar-senha-aleatoria-coma-python-grafico/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 19:43:00 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[glade]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[interface gráfica]]></category>
		<category><![CDATA[senhas aleatoria]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=291</guid>
		<description><![CDATA[Há uns dias atrás mostrei como escrever um programinha pra gerar senha aleatória com python, bom resolvi montar uma interface gráfica pra ele usando gtk+glade+python o script que gera a senha é basicamente o mesmo que mostrei em outro post..
bom galera espero que gostem, na verdade vi vários desses na net e resolvi tbm codificar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=291&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Há uns dias atrás mostrei como escrever um programinha pra gerar senha aleatória com python, bom resolvi montar uma interface gráfica pra ele usando gtk+glade+python o script que gera a senha é basicamente o mesmo que mostrei em outro post..<br />
bom galera espero que gostem, na verdade vi vários desses na net e resolvi tbm codificar o meu <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
há ia me esquecendo a tela que desenhei no glade é super simples tem um caixa de texto que dei o nome de senha<br />
um label que ira mostrar o resultado que dei o nome de resultado <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
e tem tbm 3 botoes,<br />
um pra gerar a senha, outro com about só pra fazer uso das caixas de mensagens e tem tbm um botão pra sair do programa, qq duvida a respeito das telas me avisem, vou ver se coloca elas aqui tbm <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre>
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-

# Criado em: "03/11/2009"
# Autor: MRSantos mrsantos@viaconnect.com.br
#
# A espera não é uma esperaça vazia,
# possui a certeza interior de alcançar seu objetivo...

try:
	import gtk
except:
	print "Modulo python-gtk2 nao encontrado: sudo apt-get install python-gtk2"

try:
	import gtk.glade
except:
	print "Modulo python-glade2 nao encontrado: sudo apt-get install python-glade2"

import os
from random import choice

class gera_senha(object):

	def __init__(self):

		os.system("clear")
		dir = ''
		file = 'gera_senha.glade'
		path = "%s%s" % (dir, file)
		self.interface = gtk.glade.XML(path)
		self.interface.signal_autoconnect(self)

		self.janela = self.interface.get_widget("janela")
		self.janela.set_title("Gerador de senhas by mrsantos")
		self.janela.connect("destroy", gtk.main_quit)

		self.tamanho = self.interface.get_widget("tamanho")
		self.tamanho.set_text("10")

		self.resultado = self.interface.get_widget("resultado")

	def mensagem(self, texto, janela=None):
		dialogo= gtk.MessageDialog(janela, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, texto)
		dialogo.set_markup(texto)
		dialogo.run()
		dialogo.destroy()

	def gera_senha(self):
		tamanho = None
		caracters = '0123456789abcdefghijlmnopqrstuwvxz'
		try:
			tamanho = int(self.tamanho.get_text())
		except:
			tamanho = 10

		passwd = ''
		for char in range(tamanho):
			passwd += choice(caracters)

		return passwd

	def on_sair_clicked(self, widget):
		gtk.main_quit()

	def on_about_clicked(self, widget):
		texto = "<span>%s</span>" % (15000, 'blue', "By mrsantos")
		self.mensagem(texto)

	def on_gera_clicked(self, widget):
		passwd = self.gera_senha()
		self.resultado.set_label("<span>%s</span>" % \
		(15000, 'orange', passwd))

	def main(self):
		self.janela.show_all()
		gtk.main()

if __name__ == '__main__':
	gs = gera_senha()
	gs.main()
</pre>
<p>É isso ai galera, espero que gostem, abraços</p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/291/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=291&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/11/04/gerar-senha-aleatoria-coma-python-grafico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Gerar senha aleatória com Python</title>
		<link>http://mrsantos76.wordpress.com/2009/11/03/gerar-senha-aleatoria-com-python/</link>
		<comments>http://mrsantos76.wordpress.com/2009/11/03/gerar-senha-aleatoria-com-python/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 10:31:56 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[choice]]></category>
		<category><![CDATA[rand]]></category>
		<category><![CDATA[senha aleatoria]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=288</guid>
		<description><![CDATA[1 de novembro de 2009, 18:15 domingo&#8230;
estou em casa fazendo um programa pra trocar senha de uma tabela no postgres, a idéia é a seguinte a cada x dias o script vai rodar e trocar a senha de uma determinada tabela no postgres&#8230;
bom não vou colocar todo o código aqui, mas vou por a parte [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=288&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>1 de novembro de 2009, 18:15 domingo&#8230;<br />
estou em casa fazendo um programa pra trocar senha de uma tabela no postgres, a idéia é a seguinte a cada x dias o script vai rodar e trocar a senha de uma determinada tabela no postgres&#8230;<br />
bom não vou colocar todo o código aqui, mas vou por a parte que gera a senha aleatória em python que diga-se de passagem é muito simples&#8230;<br />
bom esse é o post de numero 100 do meu blog, tinha a idéia de escrever algo mais elaborado mas não pensei em nada melhor <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
então sem mais delongas como dizem os gauchos, segue o código! </p>
<pre>
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-

# Criado em: "01/11/2009"
# Autor: MRSantos mrsantos@viaconnect.com.br
#
# A espera não é uma esperaça vazia,
# possui a certeza interior de alcançar seu objetivo...

from random import choice

def gera_senha(tamanho):
        caracters = '0123456789abcdefghijlmnopqrstuwvxz'
        senha = ''
        for char in xrange(tamanho):
                senha += choice(caracters)
        return  senha

print sera_senha(10)
</pre>
<p>ao ser executado esse script vai mostrar algo como:<br />
mrsantos@Cerrito ntpm&gt;&gt;$ ./troca_senhas.py<br />
s7orn1gje5</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/288/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/288/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=288&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/11/03/gerar-senha-aleatoria-com-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Alter table Postgres &#8211; mudar tipo da coluna</title>
		<link>http://mrsantos76.wordpress.com/2009/10/30/alter-table-postgres-mudar-tipo-da-coluna/</link>
		<comments>http://mrsantos76.wordpress.com/2009/10/30/alter-table-postgres-mudar-tipo-da-coluna/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 15:49:28 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Postgres]]></category>
		<category><![CDATA[alter table]]></category>
		<category><![CDATA[coluna]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=285</guid>
		<description><![CDATA[Bom galera uma coisa que nas versões anteriores ao posgres 8.* era que não existia um alter table pra mudar o tipo da coluna e volta e meia tinha que realizar essa operação&#8230;
bom agora temos como fazer isso com um comando e não digamos com um metodo &#8220;alternativo&#8221;
então vamos ao comando 

meuBanco=# ALTER TABLE minhaTabela [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=285&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bom galera uma coisa que nas versões anteriores ao posgres 8.* era que não existia um alter table pra mudar o tipo da coluna e volta e meia tinha que realizar essa operação&#8230;<br />
bom agora temos como fazer isso com um comando e não digamos com um metodo &#8220;alternativo&#8221;<br />
então vamos ao comando <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<strong><br />
meuBanco=# ALTER TABLE minhaTabela ALTER column minhaColuna type newType;<br />
</strong></p>
<p>Simples né <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Bom galera por hora é isso e se não me falha a memoria esse é o post de numero 99..<br />
rumo ao POST 100!!!</p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/285/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=285&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/10/30/alter-table-postgres-mudar-tipo-da-coluna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Alter sequence no postgres</title>
		<link>http://mrsantos76.wordpress.com/2009/10/28/alter-sequence-no-postgres/</link>
		<comments>http://mrsantos76.wordpress.com/2009/10/28/alter-sequence-no-postgres/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 18:20:25 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Postgres]]></category>
		<category><![CDATA[alter sequence]]></category>
		<category><![CDATA[serial]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=280</guid>
		<description><![CDATA[Quando criamos uma tabela no postgres e queremos ter um campo de auto incremento estilo mysql a maneira mais simples é definir ele como sendo do tipo serial com isso o postgres irá criar uma sequencia que terá como nome nomeTabela_nomeCampo_seq, como será mostrado abaixo&#8230;
já tive que em algumas situações deixar alguns valores reservador pra [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=280&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Quando criamos uma tabela no postgres e queremos ter um campo de auto incremento estilo mysql a maneira mais simples é definir ele como sendo do tipo serial com isso o postgres irá criar uma sequencia que terá como nome nomeTabela_nomeCampo_seq, como será mostrado abaixo&#8230;<br />
já tive que em algumas situações deixar alguns valores reservador pra uso administrativos por ex e as demais inserções terem<br />
que começar por ex outro valor que não o 1 como seria de ser experado&#8230;<br />
pra exemplificar isso vamos criar uma tabela</p>
<p><strong><br />
testes=# CREATE TABLE teste_sequence(id serial, nome varchar(15), idade int);<br />
NOTA:  CREATE TABLE criará sequência implícita &#8220;teste_sequence_id_seq&#8221; para coluna serial &#8220;teste_sequence.id&#8221;<br />
CREATE TABLE<br />
</strong></p>
<p>Ok tabela criada quero fazer com que os IDs dos inserts iniciem em 10<br />
mas antes vamos dar uma olhada nessa sequence recem criada.<br />
esqueceu o nome dela?<br />
facil de ver<br />
\ds<br />
com esse comando iremos ver todas as sequences do banco que estamos conectados&#8230;<br />
vejam o resultado do meu&#8230;<br />
<strong><br />
testes=# \ds<br />
                   Lista de relações<br />
 Esquema |         Nome          |   Tipo    |   Dono<br />
&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;-<br />
 public  | pessoas_id_seq        | sequência | postgres<br />
 public  | teste_sequence_id_seq | sequência | postgres<br />
(2 registros)<br />
</strong><br />
beleza agora quero ver em que valor que inicia essa minha sequence..<br />
simples posso ver com um simples select nela como se fosse uma tabela comum, então vamos ao select<br />
<strong><br />
testes=# SELECT * from teste_sequence_id_seq;<br />
     sequence_name     | last_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;<br />
 teste_sequence_id_seq |          1 |            1 | 9223372036854775807 |         1 |           1 |       1 | f         | f<br />
(1 registro)<br />
</strong><br />
Bom agora vamos a mágica, vamos mudar o valor do last_value!<br />
syntaxe é simples&#8230;<br />
ALTER SEQUENCE nome_sequencia RESTART WITH novo_valor;<br />
então para o que eu quero ficaria assim:<br />
<strong><br />
testes=# ALTER SEQUENCE teste_sequence_id_seq RESTART WITH 10;<br />
ALTER SEQUENCE<br />
</strong></p>
<p>vendo se realmente mudou <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<strong><br />
testes=# SELECT * from teste_sequence_id_seq;<br />
     sequence_name     | last_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;<br />
 teste_sequence_id_seq |         10 |            1 | 9223372036854775807 |         1 |           1 |       1 | f         | f<br />
(1 registro)<br />
</strong><br />
bom agora vamos fazer apenas uns inserts pra ver como ficou <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<strong><br />
testes=# insert into teste_sequence (nome, idade) values(&#8216;marcio&#8217;, 33);<br />
INSERT 0 1<br />
testes=# insert into teste_sequence (nome, idade) values(&#8216;cheila&#8217;, 37);<br />
INSERT 0 1<br />
testes=# insert into teste_sequence (nome, idade) values(&#8216;vitoria&#8217;, 08);<br />
INSERT 0 1<br />
testes=# insert into teste_sequence (nome, idade) values(&#8216;gui&#8217;, 16);<br />
INSERT 0 1<br />
</strong></p>
<p>e pra finalizar apenas um select na nossa tabela&#8230;<br />
<strong><br />
testes=# SELECT * from teste_sequence;<br />
 id |  nome   | idade<br />
&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;-<br />
 10 | marcio  |    33<br />
 11 | cheila  |    37<br />
 12 | vitoria |     8<br />
 13 | gui     |    16<br />
(4 registros)<br />
</strong></p>
<p>Bom pessoal com isso vimos como mudar os valores de uma sequence<br />
abraços até a próxima</p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/280/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/280/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/280/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=280&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/10/28/alter-sequence-no-postgres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Trocando papel parede via linha de comando</title>
		<link>http://mrsantos76.wordpress.com/2009/10/28/trocando-papel-parede-via-linha-de-comando/</link>
		<comments>http://mrsantos76.wordpress.com/2009/10/28/trocando-papel-parede-via-linha-de-comando/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 16:08:06 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[Esetroot]]></category>
		<category><![CDATA[eterm]]></category>
		<category><![CDATA[papel parede]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/2009/10/28/trocando-papel-parede-via-linha-de-comando/</guid>
		<description><![CDATA[trocando papel de parede pela linha de comando&#8230;
Galera essa maneira é uma das inumeras maneiras que se deve ter de fazer isso
é apenas uma que gosto e que usei pra criar um script pra trocar aleatoria as imagens pra mim
a cada x tempo&#8230;
primeiro termos que ter o eterm instalado&#8230;
versões baseadas no debian basta instalar via [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=278&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>trocando papel de parede pela linha de comando&#8230;<br />
Galera essa maneira é uma das inumeras maneiras que se deve ter de fazer isso<br />
é apenas uma que gosto e que usei pra criar um script pra trocar aleatoria as imagens pra mim<br />
a cada x tempo&#8230;<br />
primeiro termos que ter o eterm instalado&#8230;<br />
versões baseadas no debian basta instalar via apt&#8230;<br />
<strong>sudo apt-get install eterm</strong><br />
bom com ele instalado temos um programinha que vem como acessório chamado Esetroot<br />
para usar basta executar o seguinte comando:<br />
<strong>Esetroot -f imagem.jpg</strong><br />
com a flag -f temos a imagem em full screen&#8230;<br />
fica ai a dica&#8230;<br />
dá pra fazer facil um script pra ficar trocando as imagens <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
abraços</p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/278/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=278&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/10/28/trocando-papel-parede-via-linha-de-comando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Pgpass</title>
		<link>http://mrsantos76.wordpress.com/2009/10/27/pgpass/</link>
		<comments>http://mrsantos76.wordpress.com/2009/10/27/pgpass/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:19:03 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Postgres]]></category>
		<category><![CDATA[pgpass]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=271</guid>
		<description><![CDATA[Opa galera as vezes precisamos executar algumas rotinas no postgres mas com outro usuário e fazer isso
atraves de um script, mas ai barramos um problema, vai pedir senha 
uma maneira bem simples e elegante de resolver isso é criar no home do usuário que via executar o script um arquivo chamado
.pgpass com o seguinte conteudo&#8230;
hostname:port:database:username:password
há [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=271&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Opa galera as vezes precisamos executar algumas rotinas no postgres mas com outro usuário e fazer isso<br />
atraves de um script, mas ai barramos um problema, vai pedir senha <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
uma maneira bem simples e elegante de resolver isso é criar no home do usuário que via executar o script um arquivo chamado<br />
.pgpass com o seguinte conteudo&#8230;<br />
<strong>hostname:port:database:username:password</strong><br />
há detalhe importante é que a permissão do arquivo de ser 600<br />
simples né <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>abraços </p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/271/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=271&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/10/27/pgpass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
		<item>
		<title>Rollback &#8211; salvando vidas&#8230;</title>
		<link>http://mrsantos76.wordpress.com/2009/10/27/rollback-salvando-vidas/</link>
		<comments>http://mrsantos76.wordpress.com/2009/10/27/rollback-salvando-vidas/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:14:42 +0000</pubDate>
		<dc:creator>mrsantos76</dc:creator>
				<category><![CDATA[Postgres]]></category>
		<category><![CDATA[commit]]></category>
		<category><![CDATA[rollback]]></category>

		<guid isPermaLink="false">http://mrsantos76.wordpress.com/?p=266</guid>
		<description><![CDATA[Galera olha o cenário vc no servidor de um cliente em produção fazendo um delete e sem querer vc esquece do bendito where..
quem nunca passou por algo parecido&#8230;
esquecer do where num delete ou update pode trazer muita dor de cabeça, que já passou por isso sabe do que estou falando&#8230;
uma maneira de revitar isso é [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=266&subd=mrsantos76&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Galera olha o cenário vc no servidor de um cliente em produção fazendo um delete e sem querer vc esquece do bendito where..<br />
quem nunca passou por algo parecido&#8230;<br />
esquecer do where num delete ou update pode trazer muita dor de cabeça, que já passou por isso sabe do que estou falando&#8230;<br />
uma maneira de revitar isso é usar o comado rollback&#8230;<br />
ele aborta uma transaçao, bom então temos que iniciar uma transação<br />
e como faremos isso no postgres?<br />
bom iniciamos com o comando begin&#8230;<br />
simples assim&#8230;<br />
depois do comando begin seguimos com nossos sql normalmente pra finalizar uma transação usamos o comando commit, fazendo isso nossos SQLs serão efetivados em disco..<br />
então seria algo assim:<br />
begin;<br />
SQLs;<br />
commit;</p>
<p>vamos aos exemplos, primeiro vamos criar uma database;<br />
pra testes&#8230;<br />
<strong>create database testes;</strong><br />
após isso vamos nos conectar a base recem criada&#8230;<br />
<strong>\c testes</strong><br />
agora criando uma tabela pra podermos fazer nossos testes&#8230;<br />
<strong><br />
create table pessoas(id serial, nome varchar(60), idade int);</strong><br />
agora vamos popular nossa tabela</p>
<p><strong>insert into pessoas(nome, idade) values(&#8216;marcio&#8217;, 33);<br />
insert into pessoas(nome, idade) values(&#8216;cheila&#8217;, 38);<br />
insert into pessoas(nome, idade) values(&#8216;amanda&#8217;, 24);<br />
insert into pessoas(nome, idade) values(&#8216;vitoria&#8217;, 08);<br />
insert into pessoas(nome, idade) values(&#8216;gui&#8217;, 16);<br />
insert into pessoas(nome, idade) values(&#8216;fox&#8217;, 31);</strong></p>
<p>vendo nossos dados na tabela&#8230;<br />
<strong>testes=# SELECT * from pessoas;<br />
 id |  nome   | idade<br />
&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;-<br />
  1 | marcio  |    33<br />
  2 | cheila  |    38<br />
  3 | amanda  |    24<br />
  4 | vitoria |     8<br />
  5 | gui     |    16<br />
  6 | fox     |    31<br />
(6 registros)</strong></p>
<p>ok agora vamos a parte que nos interessa<br />
vamos inciar uma transação, deletar alguns registros e voltar atras com rollback <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
segue o trecho&#8230;<br />
<strong>testes=# begin;<br />
BEGIN<br />
testes=# DELETE FROM pessoas WHERE id &gt; 3;<br />
DELETE 3<br />
testes=# SELECT * from pessoas;<br />
 id |  nome  | idade<br />
&#8212;-+&#8212;&#8212;&#8211;+&#8212;&#8212;-<br />
  1 | marcio |    33<br />
  2 | cheila |    38<br />
  3 | amanda |    24<br />
(3 registros)</p>
<p>testes=# ROLLBACK;<br />
ROLLBACK<br />
testes=# SELECT * from pessoas;<br />
 id |  nome   | idade<br />
&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;-<br />
  1 | marcio  |    33<br />
  2 | cheila  |    38<br />
  3 | amanda  |    24<br />
  4 | vitoria |     8<br />
  5 | gui     |    16<br />
  6 | fox     |    31<br />
(6 registros)<br />
</strong><br />
ufá tá tudo ali <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
viram pra evitar muita dor de cabeça podemos fazer com uma transação, não custa iniciar com um simples begin né&#8230;<br />
agora se tudo tiver corrido bem basta dar um commit no final e tudo será gravado no banco, mas tenha certeza que tudo foi feito conforme vc queria mesmo&#8230;<br />
bom galera tem muito mais pra falar sobre transações só arranhamos o conteudo, mas com isso já vamos evitar muita dor de cabeça né&#8230;<br />
T+</p>
<p>Marcio</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mrsantos76.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mrsantos76.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mrsantos76.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mrsantos76.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mrsantos76.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mrsantos76.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mrsantos76.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mrsantos76.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mrsantos76.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mrsantos76.wordpress.com/266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mrsantos76.wordpress.com&blog=3367123&post=266&subd=mrsantos76&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mrsantos76.wordpress.com/2009/10/27/rollback-salvando-vidas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4ae743aafde403e44f8cb2935149310?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mrsantos</media:title>
		</media:content>
	</item>
	</channel>
</rss>