Archive for the 'codes' Category
março 10th, 2010 by elm
Aqui na empresa temos duas contas de FTP contratadas no nosso plano de hospedagem para usarmos como espaço de backup. As duas contas tem um espaço limitado e toda semana eu preciso monitorar quanto espaço estamos usando, para evitar erros no script de backup. Para facilitar esse controle eu criei um pequeno script Python para navegar em todas as pastas e me dizer quanto espaço estou usando. O script ficou assim:
-
import os
-
from ftplib import FTP
-
-
def pretty_filesize(bytes):
-
if bytes >= 1073741824:
-
return str(bytes / 1024 / 1024 / 1024) + ' GB'
-
elif bytes >= 1048576:
-
return str(bytes / 1024 / 1024) + ' MB'
-
elif bytes >= 1024:
-
return str(bytes / 1024) + ' KB'
-
elif bytes < 1024:
-
return str(bytes) + ' bytes'
-
-
endereco_ftp = 'servidor'
-
usuario = 'usuario'
-
senha = 'senha'
-
conexao_ftp = FTP(endereco_ftp)
-
-
conexao_ftp.login(usuario,senha)
-
diretorio_corrente = conexao_ftp.pwd()
-
soma = 0
-
for i in conexao_ftp.nlst():
-
conexao_ftp.cwd(i)
-
for j in conexao_ftp.nlst():
-
soma = soma + conexao_ftp.size(j)
-
conexao_ftp.cwd('..')
-
-
print pretty_filesize(soma)
Agora é só colocar no crontab e receber diariamente o espaço utilizado.
Fontes:
http://www.vivaolinux.com.br/script/navegador-ftp
http://code.rivers.pro/python-function-to-convert-bytes-to-kbmbgb/
janeiro 28th, 2010 by elm
Monitorar os servidores e serviços é uma tarefa importante para manter seus sites e sistemas sempre em ordem. Existem diversas ferramentas bem completas como o Nagios que fazem praticamente todo o serviço. Eu uso o Nagios para monitorar quase tudo e ele me avisa via e-mail de quaisquer problemas. O problema é que nã verifico e-mail o tempo todo. Uma solução seria mandar os avisos via SMS, mas isso envolve alguns custos.
Nesse momento me lembrei do Twitter. Eu sou um daqueles viciados, que verifica o twitter diversas vezes por dia. Pensando nisso fiz um pequeno script para monitorar o MySQL e caso o ping não responda eu recebo uma DM avisando.
Um exemplo do script:
status=`mysqladmin ping -hhost -uuser -psenha 2> /dev/null`
-
if [ "$status" != "mysqld is alive" ]; then
-
curl -u usuario_mon:senha -d "text=Erro conectando ao MySQL&user=eminetto" http://twitter.com/direct_messages/new.xml 2> /dev/null > /dev/null
-
fi
Um detalhe importante a lembrar é que não é bom usar sua conta no Twitter para enviar as DMs. O Twitter tem uma política que remove contas que usam muitas DMs por dia, temendo abuso e SPAM. O melhor é criar uma nova conta. Além disso, é preciso que as duas contas sejam seguidoras uma da outra, senão a DM não pode ser enviada
Claro que eu poderia criar um plugin ou script para o próprio Nagios e deixar ele fazer isso para mim, mas assim ficou mais rápido. Além disso é só um exemplo
junho 10th, 2009 by elm
Finalmente me organizei e fiz o upload dos slides da palestra que ministrei no PHPSC Conf 2009.
Coloquei no Slideshare. Se alguém precisar do arquivo em outro formato é só me avisar.
Melhorando a performance de aplicações com o uso do MemCache
fevereiro 13th, 2009 by elm
Depois de alguns meses de desenvolvimento finalmente posso começar a comentar sobre o projeto que estou trabalhando. Chama-se Drimio.
Agora que estamos chegando perto do grande lançamento estamos recrutando beta testers para nos ajudar a aprimorar o serviço. Então fica aqui o convite: SEJA UM DOS NOSSOS BETA TESTERS
novembro 25th, 2008 by elm
Outra novidade para mim ao usar o Subversion foi o controle de Locks.
Eu sempre usei o CVS integrado ao Eclipse para gerenciar os projetos que eu trabalhava e com essa duplinha é bem fácil configurar para evitar que dois programadores alterem o mesmo arquivo.
Com o Subversion e o Eclipse (usando o plugin Subclipse) eu não encontrei essa opção. A solução que encontrei foi configurar o cliente do subversion para quando criar novos arquivos marcá-los com um flag. Este flag indica que, para editar o arquivo é preciso que seja feito o “lock” antes. No momento de criar o lock o Subclipse também verifica a versão do arquivo e avisa caso a versão local seja inferior a que consta no repositório. Desta forma eu garanto que o programador sempre tenha a última versão do arquivo e evito que duas pessoas alterem o mesmo arquivo ao mesmo tempo. Existem formas de corrigir isso usando práticas de merge, mas eu acho mais fácil evitar o problema do que resolvê-lo
O que eu fiz foi alterar o arquivo config no diretório do usuário:
mate ~/.subversion/config
Eu estou usando o Textmate no MacOSX. Mas o mesmo passo vai funcionar no Linux. No Windows XP o arquivo encontra-se no diretório
c:\Documents and Settings\usuario\Dados de Aplicativos\Subversion\config
Neste arquivo eu alterei
# enable-auto-props = yes
para
enable-auto-props = yes
E adicionei alinha abaixo na seção [auto-props]
* = svn:needs-lock
Desta forma, assim que o programador criar um novo arquivo e realizar o primeiro commit é adicionada esta flag ao arquivo. Todos que forem alterá-lo vão passar pela fase “lock-edit-commit”, com um “update” caso seja necessário.
maio 26th, 2008 by elm
Excelente artigo com dicas de performance para scripts em PHP.
Vale a leitura
maio 1st, 2008 by elm
Neste ano eu comecei a investir em ações. É algo ao mesmo tempo emocionante e apavorante porque você pode ganhar e perder dinheiro em questão de horas. Por isso é importante ficar sempre atento as alterações dos valores das ações. Existem vários programas e sites que permitem o acompanhamento das alterações. Mesmo assim, eu aproveitei a manhã de feriado, enquanto me recupero de uma pequena ressaca, e fiz um script em Python que busca os dados da Bovespa e permite o acompanhamento da sua “carteira de ações”. Assim dá para deixar um terminal aberto e ir acompanhando o mercado.
O script foi feito por diversão e uso pessoal, mas se servir para alguém mais legal. O código:
-
# -*- coding: utf-8 -*-
-
# Elton Luís Minetto
-
import urllib
-
from xml.dom import minidom
-
from time import sleep
-
from os import system
-
-
#adicionar as acoes aqui
-
#formato ACAO: [num_acoes,valor_compra,data_compra]
-
acoes = {
-
'BBDC4':[100,34.84,'25/04/2008'],
-
'PETR4':[100,42.00,'20/04/2008'],
-
}
-
-
def atualiza(acoes):
-
system('clear')
-
url = 'http://www.bovespa.com.br/Mercado/RendaVariavel/InfoPregao/ExecutaAcaoAjax.asp?CodigoPapel='
-
for i in acoes:
-
url += '|'+i
-
f = urllib.urlopen(url)
-
xml = f.read()
-
xmldoc = minidom.parseString(xml)
-
papeis = xmldoc.getElementsByTagName('Papel')
-
#cabecalho
-
print 'Ação\tValor de Compra\tData da Compra\tQtd\tAtual\tDiferença R$\tDiferença %\tData de Atualização'
-
-
total_compra = 0.0
-
total_dif_reais = 0.0
-
for i in papeis:
-
codigo = i.attributes['Codigo'].value
-
valor_compra = acoes[codigo][1]
-
qtd_acoes = acoes[codigo][0]
-
data_compra = acoes[codigo][2]
-
valor_atual = i.attributes['Ultimo'].value.replace(',','.')
-
data_atual = i.attributes['Data'].value
-
-
diferenca_reais = (float(valor_atual) * qtd_acoes) – (valor_compra * qtd_acoes)
-
diferenca_perc = (diferenca_reais*100)/(valor_compra * qtd_acoes)
-
total_compra += valor_compra * qtd_acoes
-
total_dif_reais += diferenca_reais
-
-
print '%s\t%02f\t%s\t%d\t%s\t%02f\t%02f\t%s' % (codigo,valor_compra,data_compra,qtd_acoes,valor_atual,diferenca_reais,diferenca_perc,data_atual)
-
-
print 'Total de Compra:%02f' % total_compra
-
print 'Total da Diferença em Reais:%02f' % total_dif_reais
-
total_dif_perc = (total_dif_reais * 100)/total_compra
-
print 'Total da Diferença em Percentual:%02f' % total_dif_perc
-
sleep(1200)
-
-
while 1:
-
atualiza(acoes)
Eu testei o script no MacOSX Leopard. Mas deve funcionar legal no Linux e no Windows
Download do arquivo
abril 25th, 2008 by elm
Encontrei esse plugin para o WordPress que faz highlight em códigos nos posts:
http://wordpress.org/extend/plugins/highlight-source-pro/
Muito útil
abril 25th, 2008 by elm
Estou desenvolvendo um sistema grande usando o framework CakePHP e surgiu uma necessidade. Precisava criar uma pseudo-coluna com o resultado do cálculo de outras duas. Seguindo o conceito de MVC, achei mais interessante fazer este cálculo no Model para poder usar em todos os programas que utiizam aquela tabela.
Para ilustrar isto montei um exemplo. Criei a seguinte tabela:
-
CREATE TABLE IF NOT EXISTS `clientes` (
-
`id` int(11) NOT NULL AUTO_INCREMENT,
-
`nome` varchar(100) NOT NULL,
-
`sobrenome` varchar(100) NOT NULL,
-
PRIMARY KEY (`id`)
-
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
O Model da tabela ficou da seguinte forma:
-
class Cliente extends AppModel {
-
-
var $name = 'Cliente';
-
var $validate = array(
-
'id' => VALID_NOT_EMPTY,
-
'nome' => VALID_NOT_EMPTY,
-
'sobrenome' => VALID_NOT_EMPTY,
-
);
-
-
/*
-
funcao que é executada toda vez que é realizado uma consulta na tabela
-
esta funcao adiciona o nome completo do cliente ao resultado como uma pseudo-coluna.
-
idéia tirada de http://www.paulherron.net/articles/view/cakephp_afterfind_psuedofield
-
*/
-
function afterFind($results) {
-
if(isset($results['0']['Cliente'])) {
-
foreach ($results as $key => $val) {
-
$results[$key]['Cliente']['nome_completo'] = $results[$key]['Cliente']['nome'] . $results[$key]['Cliente']['sobrenome'] ;
-
}
-
}
-
return $results;
-
}
-
}
E na visão eu simplesmente imprimo a pseudo-coluna:
echo $cliente['Cliente']['nome_completo'];
Simples assim.
abril 22nd, 2008 by elm
Recentemente precisei criptografar alguns dados gerados por uma aplicação em Python. Para isso resolvi testar o python-mcrypt, módulo desenvolvido pelo brasileiro Gustavo Niemeyer.
Demorei um pouco para conseguir entender o funcionamento, mas é bem simples. Fiz um exemplo de uso para alguém não precisar perder o mesmo tempo que eu investi
exemplo_mcrypt
abril 16th, 2008 by elm
Faz um bom tempo que tenho usado o Eclipse como IDE para trabalhar com PHP, principalmente por causa do suporte a CVS que preciso para alguns projetos.
Ele é muito bom, mas uma coisa estava me irritando. A dificuldade de configurar cores de fundo e cores da sintaxe. Parece besteira, mas o fundo branco padrão do Eclipse agride os olhos depois de algumas horas de uso. No Komodo Edit é muito fácil trocar essas configurações mas no Eclipse é muito complicado e limitado.
Então resolvi fazer um teste com o Aptana . E me surpreendi. Ele tem tudo o que o Eclipse tem (é baseado nele) como CVS e outros plugins, suporte a várias bibliotecas de Ajax como ExtJs, jQuery, etc. E tem suporte a alterar as cores de uma maneira bem fácil e completa.
Segui estes passos e estou bem feliz com minha nova configuração.
fevereiro 28th, 2008 by elm
Nas disciplinas que ministro sempre aplico vários trabalhos para reforçar o conhecimento dos alunos. Todos os trabalhos são divididos em duas partes: 7 pontos a entrega do texto/código e os outros 3 pontos vem da apresentação oral. Quando o trabalho é em grupos eu sempre sorteio um dos componentes para apresentar e a nota da apresentação vale para o grupo todo. Tem dado certo. O único problema era fazer o sorteio dos alunos de forma justa. Para isso fiz um script em PHP que resolve isso pra mim.
Professor Nerd é isso
janeiro 26th, 2008 by elm
Nesses meses como novo usário de MacOSX testei alguns editores para trabalhar com programação, principalmente com PHP, Python, HTML e CSS. Encontrei alguns interessantes. Deixo aqui minhas opiniões sobre o assunto.
Eclipse
O primeiro que testei foi o Eclipse, pois é o que utilizo no meu trabalho diário na universidade. Lá eu utilizo em ambiente Linux e no OSX tudo funcionou da mesma maneira. Só algumas telas e teclas de atalho mudam. O Eclipse é uma ferramenta muito poderosa. Instalando os plugins corretos, PDT para PHP e PyDev para Python, é possível ter todas as características que esperamos deste tipo de ambiente. O que eu mais gosto é o suporte nativo a CVS (extremamente útil para projetos maiores pois não consigo mais programar sem este recurso), o auto complete dos comandos PHP e HTML que funciona certinho, aquilo que o Eclipse chama de Outline onde ele mostra os métodos e funções do arquivo aberto, e a árvore de arquivos/diretórios que facilita o acesso rápido aos códigos. O que eu não gosto no Eclipse é a quantia de memória que ele utiliza.
Smultron
Já comentei sobre o Smultron aqui no site. É um editor bom, open source e leve. O que eu sinto falta é o equivalente ao Outline e a árvore de diretórios do Eclipse. Além disso, a interface do programa não é tão bonita quanto o resto do sistema operacional
TextWrangler
O TextWrangler é um editor feito pela mesma empresa que desenvolve outro editor famoso (e pago) para o Mac, o BBEdit. É uma versão com menos recursos do que a versão comercial, mas mesmo assim é muito bom. Leve, suporta várias linguagens de programação, interface polida, acesso a ler/gravar arquivos direto em servidores FTP/SFTP, possui algo equivalente ao Outline do Eclipse, além de ser altamente configurável. Uma boa opção. Só senti falta da árvore de diretórios para rápido acesso aos arquivos.
Komodo Edit
É a versão para Mac do editor do qual já comentei aqui no site. É muito bom. Rápido, possui a árvore de diretórios (que se atualiza automaticamente caso um arquivo seja criado ou excluído. Cool), é extensível usando-se plugins quase da mesma maneira que o Firefox, apesar de ainda existirem poucos disponíveis. E o auto complete é tão bom quanto o do Eclipse, se não for até melhor. Só faltou o Outline e suporte a CVS pra ser um bom substituto ao Eclipse. Mas isso só na versão paga, que por enquanto está fora do meu foco de avaliação
Vi/VIM
Lógico que não dava para esquecer do velho amigo. Outra vantagem do OSX ser derivado do Unix é poder usar o Vi. É um bom editor de programação como é possível ver nesse excelente artigo
Conclusões
Depois de testar estes softwares cheguei as seguintes conclusões:
- Para projetos grandes, onde o CVS/Subversion é importante, o Eclipse ainda é a melhor opção.
- Para projetos menores eu estou usando o Komodo Edit e estou satisfeito. Tenho usado ele bastante em projetos com o CakePHP e outros frameworks como o Django (ele tem suporte ao Django além do próprio Python)
- Para editar arquivos PHP/Python de maneira rápida, sem precisar ver todo o projeto eu estou usando o TextWrangler
- E para arquivos de configuração, como o httpd.conf e outros, o bom e velho Vim é a solução
- É possível programar confortavelmente sem precisar comprar um TextMate ou o BBEdit (apesar do TextMate ser muito bonito)
Se alguém usa outro editor ou discorda de alguma das conclusões me avise
outubro 25th, 2007 by elm
Gostaria de indicar um material muito legal sobre o Zend 1.0.1 escrito pelo Flavio Gomes da Silva Lisboa
Como construir uma aplicação MVC em PHP 5 com Zend Framework
Ambiente integrado para Zend Framework
Ambos bem completos e bem escritos. Vale a pena a leitura.
outubro 18th, 2007 by elm
Aproveitando o lançamento da nova versão do Ubuntu, aproveito para fazer o lançamento da versão 1.1 do framework slimPHP. Este é um framework que desenvolvi a algum tempo atráz e foi adotado como principal ferramenta de desenvolvimento de novos aplicativos na universidade onde trabalho, a Unochapecó.
Esta nova versão contou com a colaboração dos desenvolvedores da Unochapecó Odair Lopes, Francis Perini, Clemente Scaratti e o professor Jorge Antônio Di Domenico.
As novas features do framework são:
Classe tabela
- Adicionado método getAllData() que retorna todos os dados da consulta na forma de um array
Exemplo:
$tab = new tabela(“pessoa”);
$tab->get(array(“*”));
$dados = $tab->getAllData();
unset($tab);
app::showView(“view/index_view.php”,$dados);
- Adicionado método setData() que automaticamente seta os valores para a tabela apartir dos dados vindos do $_POST ou $_GET
Exemplo:
$tab = new tabela(“pessoa”);
$tab->setData($_POST);
$tab->insert();
$tab->save();
unset($tab);
- Adicionado campo opcional $order no método get() na forma de uma string para poder escolher os campos de ordenação do SQL
Demais inclusões
- Adicionado o crudGenerator na pasta extra. Manual
- Foram adicionados os arquivos header.php e footer.php no diretório de visões representando o cabeçalho e o rodapé das visões.
- Adicionada a classe report.
Exemplo
Controlador
< ?
include("../slimphp/classes/app.php");
include("../slimphp/classes/tabela.php");
/**
* Objetivo: Descrição
* Autor: Nome
* Data: Data
*/
class XXX extends app {
function index() {
$tab = new tabela("pessoa");
$tab->get(array(“*”));
$dados = $tab->getAllData();
unset($tab);
app::showView(“view/index_view.php”,$dados);
}
}
$app = new XXX(“mysql://root:@localhost/slimphp”);
?>
Visão
< ?php
include("../slimphp/classes/report.php");
$r = new report('Titulo do Relatório');
$header = array('Código','Nome','CPF','RG'); //cabeçalho da tabela
$r->Table($header,$dados,’Pessoas’); //gera uma tabela
$r->Text(‘Total de Pessoas ‘.count($info)); //gera uma linha de texto
?>
O download desta nova versão pode ser feito neste link
setembro 22nd, 2007 by elm
Ontem ministrei a palestra sobre CakePHP na Unoesc em Xanxerê.
O arquivo da apresentação pode ser copiado aqui e o aplicativo criado neste link.
agosto 27th, 2007 by elm
Estou novamente ministrando a disciplina de Sistemas Operacionais Distrubuídos. É uma disciplina bem complexa mas muito divertida. Já me rendeu algumas horas de programação e diversão.
Um dos tópicos é a comunicação entre processos em sistemas distribuídos. Aí entra sockets, RPC, RMI, Corba e WebServices. Ano passado tinha desenvolvido um exemplo de um programa distribuído em sockets que depois foi desenvolvido usando Pyro por outro professor. Agora consegui um tempo e desenvolvi o mesmo algoritmo usando Java RMI.
Aqui está o código se interessar para alguém. Vale lembrar que não programo regularmente em Java por isso a solução pode estar bem “tosca”. Se algum Java Jedi quiser melhorar eu ficaria muito feliz.
janeiro 2nd, 2007 by elm
Finalmente criei o projeto do slimPHP no Sourceforge.
slimPHP é o nome, pouco criativo, que dei para o pequeno framework que desenvolvi e que estamos utilizando aqui na Unochapecó no desenvolvimento de novos aplicativos.
Eu já havia descrito ele anteriormente aqui no site, mas agora no sourceforge fica mais fácil de alguém visualizar os códigos e fazer o download.
O site ficou horrível, sem nenhum design. Se alguém tiver interesse de ajudar nisso e em qualquer coisa relacionada eu agradeço
Site: http://slimphp.sourceforge.net
setembro 24th, 2006 by elm
O Cake PHP é um framework de desenvolvimento em PHP 5 baseado nos conceitos de MVC. É uma ferramenta muito interessante para gerar aplicações padronizadas como cadastros, relatórios, etc.
Desenvolvi a parte de conexão com a base de dados Oracle. Aparentemente vai ser adicionada oficialmente na versão 1.2.x do Cake, mas já pode ser copiada e testada neste endereço. Se alguém encontrar algum bug me avise.
agosto 27th, 2006 by elm
Texto que usei na disciplina de Sistemas Operacionais Distribuídos que estou ministrando. É uma implementação em Python de um programa usando sockets para demonstrar a comunicação em um sistema distribuído.
Download