Git SVN Crash Course – Curso de Git pra quem usa SVN
Posted on jul 04, 2009 under Sem categoria | No CommentPessoal, encontrei na internet um curso de Git prá quem usa SVN. Muito bom, vale a pena ler.
http://git.or.cz/course/svn.html
Pessoal, encontrei na internet um curso de Git prá quem usa SVN. Muito bom, vale a pena ler.
http://git.or.cz/course/svn.html
Pessoal a partir de hoje todos os códigos mostrados no blog também estarão disponíveis em um repositório git no endereço:
http://github.com/petryx/petryx.blogrs.com.br/tree.
Fiquem a vontade para fazer um fork.
Desenvolvi há algum tempo um script de backup por e-mail escrito em python. Esse script lê um arquivo de configuração onde está descrito todos os arquivos que devem estar no backup, logo após gera um arquivo tar compactado com bz2, e envia para o e-mail desejado.
Utilizo esse script para arquivos pequenos – como arquivos de configurações dos servidores que administro, uma limitação desse tipo de backup é o tamanho máximo suportado para envio e recebimento de e-mails, por exemplo, o gmail não aceita arquivos maiores que 20M.
Vamos ao script:
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
#Author: Marlon Luis Petry
#Licença GPL
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
import tarfile
import time
import datetime
import re
def sendMail(to, subject, text, files=[],server="localhost"):
assert type(to)==list
assert type(files)==list
fro = "Server Backup "
msg = MIMEMultipart()
msg['From'] = fro
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
today = datetime.date.today()
msg['Subject'] = subject + str(today)
msg.attach( MIMEText(text) )
for file in files:
part = MIMEBase('application', "octet-stream")
part.set_payload( open(file,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)
smtp = smtplib.SMTP(server)
smtp.sendmail(fro, to, msg.as_string() )
smtp.close()
def backupTar(nameBackup,conf="/etc/backup.conf"):
tar = tarfile.open(nameBackup,'w:bz2')
f = open(conf,'r')
p = re.compile('\#')
for line in f:
if not p.match(line): #descarta linhas que comecem por #
file = line.replace('\n','') # Remove \n
tar.add(file) #adiciona ou arquivo tar
tar.close()
name = 'backupSRV.tar.bz2' #nome do backup
backupTar(name)
sendMail(["xxxx@gmail.com"],"backup","backup",[name])
O arquivo de configuração deve estar no /etc/backup.conf, exemplo da estrutura do arquivo:
/etc/postfix/
/etc/apache2/
/root/scripts/
O arquivo não deve possuir linhas em branco
Depois de configurado é só inserir no crontab o script para gerar o backup e enviar por email nos horários desejados.
Acaba de ser lançado a versão 3.5 do Firefox, turbine sua navegação web, 2 vezes mais rápido que o seu antecessor Firefox 3 e por consequência 10 vezes mais rápido que o Firefox 2.
Experimenta já!! Ficou parecido com Ligue Jáhh, a alguém se lembra?!
O download pode ser realizado no link abaixo:
http://pt-br.www.mozilla.com/pt-BR/firefox/
Este post faz parte da campanha onda de shock http://bit.ly/ShiretokoShock
Pessoal o projeto Gentoo-BR.net está realizando uma pesquisa de usuários, com o intuito de verificar a situação da distribuição no país.
O pesquisa também visa o planejamento de novas ações para buscar colaboradores.
Está disponível no seguinte link: http://gentoo-br.net/pesquisa/
Por favor participe e ajude a divulgar.
Acompanho o fisl desde a 5° edição, cada ano aumenta o número de participantes, mas o quê acho mais legal é a diversidade – pessoas de vários lugares com um mesmo interesse: software livre, liberdade e claro mídias de distribuições linux. Das palestras que assiste até agora, a que mais me chamou a atenção foi #spectral How piracy become theatre apresentada por Peter Sunde (um dos fundadores do Pirate Bay). O palestrante mostrou como nasceu o Pirate Bay sua evolução, as perseguições que sofreram e o processo judicial. Apesar de serem perseguidos, sempre responderam as solicitações das organizações de direitos autorais com muita inteligência e irreverência. A palestra mostrou um ponto de vista bem interessante sobre a briga entre os direitos autorais e as redes p2p.
O que as organizações de direitos autorais ainda não perceberam que isso é irreversível.
Beleza vou indo, tenho mais palestras para assistir.
Escrevo pouco aqui no blog sobre desenvolvimento, mas é uma área que gosto muito. Já desenvolvi alguns projetos usando Spring Framework ainda na versão 1.x, achei muito trabalhoso, gastei muito tempo em configurações de arquivos xml. Mas agora tudo mudou. Ouvi dizer que Jboss-Seam é a bolachinha mais recheada do pacote. E que com ele se consegue uma alta produtividade em desevolvimento web.
Mas afinal o que é Jboss-Seam?
Jboss-Seam é um novo framework para desenvolvimento web, que integra as melhores tecnologias para desenvolvimento web em java. O próprio nome do framework já diz isso seam em inglês significa costura, emenda. A idéia principal é desenvolver usando POJO (Plain Old Java Objects) e fazer o mínimo de configurações em arquivos xml. Isso é alcançado através do uso de anotações e programação orientada a aspectos.
Muito bonito o blah,blah,blahh, mas qual o benefício?
O benefício é o desenvolvedor se concentrar nas funcionalidades das regras de negócio ao invés das cofigurações necessárias para a integração de frameworks.
Vamos a um exemplo. Se chama registration e pode ser encontrado no pacote de instalação do jboss-seam download.
O que ele faz?
Persiste o objeto user no banco de dados caso ele não exista, mostra mensagens de erro ou sucesso e faz redirecionamento de página.
Para fazer isso é necessário três classes:
User.java a qual representa uma entidade EJB que será persistida no banco de dados.
@Entity
@Name("user")
@Scope(SESSION)
@Table(name="users")
public class User implements Serializable
{
private static final long serialVersionUID = 1881413500711441951L;
@Id @NotNull @Length(min=5, max=15)
private String username;
@NotNull @Length(min=5, max=15)
private String password;
@NotNull
private String name;
public User(String name, String password, String username)
{
this.name = name;
this.password = password;
this.username = username;
}
...
getters and setters
RegisterAction.java – Um ejb stateless que irá interagir com o banco de dados realizando uma pesquisa, e persistindo o objeto no banco, caso ainda não exista.
Esta classe possui muitos detalhes interessantes como a anotação @In, a qual injeta um atributo do tipo user definido nas variáveis de contexto através da anotação @Name na classe User. Outro detalhe que achei interessante é a possibilidade de usar JSF EL expressões dentro de uma query ejb no caso: select username from User where username = #{user.username}“
@Stateless
@Name("registerTest")
public class RegisterAction implements Register
{
@In
private User user;
@PersistenceContext
private EntityManager em;
@Logger
private static Log log;
public String register()
{
List existing = em.createQuery("select u.username from User u where u.username=#{user.username}")
.getResultList();
if ( existing.size()==0 )
{
em.persist(user);
log.info("Registered new user #{user.username}");
return "/registered.xhtml";
}
else
{
FacesMessages.instance().add("User #{user.username} already exists");
return null;
}
}
}
E por fim a interface Remote.java
@Local
public interface Register
{
public String register();
}
Os códigos em java estão prontos, com essas três classes já é possível interagir com o banco de dados, ou seja, as camadas de modelo e controle estão prontas, falta criar a camada de visualização, o qual foi desenvolvida usando facelets e JSF nada específico do framework seam. Não irei coloca-lás devido ao plugin que mostra o código não conseguir mostrar corretamente.
Esses códigos foram removidos do diretório examples/registration que acompanha o jboss-seam. Coloquei eles no blog para mostrar como o framework seam facilita as coisas e cumpre perfeitamenta com a sua missão, possibilitando ao desenvolvedor se preocupar com as funcionalidades exigidas pelo cliente. Claro que o seam tem muitas outras funcionalidades que não mostrei, pois também estou aprendendo e ainda não cheguei lá.
Para quem quiser aprender, a documentação que acompanha o framewrok seam é muito boa bem explicada, esse exemplo que mostrei é mostrado em detalhes. Também estou lendo o livro Jboss Seam Projetos Práticos, o qual estou achando muito interessante, uma leitura recomendada.
Se gostou do post assine os feeds. E volte sempre.
Manter um servidor ou desktop longe das vulnerabilidades de segurança, é um serviço árduo. Mas com intuito de facilitar nossa vida, o Gentoo possui um projeto chamado GLSA(Gentoo Linux Security Advisor) no qual a idéia principal é manter a árvore do portage livre de vulnerabilidades conhecidas, através de uma ferramenta capaz de pesquisar na árvore do portage e avisar sobre as vulnerabilidades encontradas.
Então vamos colocar a mão na massa.
Primeiro passo é instalar o gentoolkit.
# emerge -av gentoolkit
Depois de instalado teremos uma ferramenta chamada glsa-check, com a qual podemos verificar o nosso servidor ou desktop, procurando por pacotes com vulnerabilidades de segurança.
Verificando o sistema:
# glsa-check -l affected [A] means this GLSA was already applied, [U] means the system is not affected and [N] indicates that the system might be affected. 200903-28 [N] libpng: Multiple vulnerabilities ( media-libs/libpng ) 200904-02 [N] GLib: Execution of arbitrary code ( dev-libs/glib ) 200903-21 [N] cURL: Arbitrary file access ( net-misc/curl ) 200902-02 [N] OpenSSL: Certificate validation error ( dev-libs/openssl ) 200904-18 [N] udev: Multiple vulnerabilities ( sys-fs/udev ) 200904-08 [N] OpenSSL: Denial of Service ( dev-libs/openssl ) 200903-24 [N] Shadow: Privilege escalation ( sys-apps/shadow ) 200903-25 [N] Courier Authentication Library: SQL Injection vulnerability ( net-libs/courier-authlib ) 200807-16 [N] Python: Multiple vulnerabilities ( dev-lang/python ) 200903-11 [N] PyCrypto: Execution of arbitrary code ( dev-python/pycrypto ) 200903-13 [N] MPFR: Denial of Service ( dev-libs/mpfr ) 200903-38 [N] Squid: Multiple Denial of Service vulnerabilities ( net-proxy/squid ) 200812-06 [N] libxml2: Multiple vulnerabilities ( dev-libs/libxml2 )
Olha só que coisa mais linda! Minha máquina está com bastantes vulnerabilidades.
Então vamos corrigir.
# glsa-check -f affected
Um detalhe importante do uso da correção automática é que pode dar algum problema se você usa a flag “USE” para adicionar alguma dependência a um determinado pacote, quando o pacote tiver que ser atualizado o portage irá buscar as informações sobre dependências nos arquivos /etc/make.conf ou /etc/portage/package.use, então a instalação do pacote ficará diferente da anterior podendo causar mau funcionamento em algum serviço devido a falta de alguma biblioteca. Para garantir que não tenhamos nenhum problema é melhor atualizar todos os pacotes manualmente.
Uma boa prática para utilização do portage é adicionar as dependências no arquivo /etc/portage/package.use, porque com o passar do tempo a gente nem se lembra o motivo pelo qual um determinado pacote precisa de uma dependência específica. Então para garantir que as atualização fiquem corretas com relação as dependências devemos adiciona-las no arquivo como no exemplo a seguir:
echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
Todo usuário Linux gosta de automatizar tarefas o glsa-check tem uma característica interessante, ele pode enviar um e-mail para o administrador, quando o sistema apresentar algum pacote com vulnerabilidade. Para enviar e-mail devemos fazer as seguintes configurações:
Adicionar no arquivo /etc/make.conf a variável PORTAGE_ELOG_MAILURI=”admin@xyz.com” informando o endereço de e-mail do administrador.
Agora é só adicionar no contrab o comando glsa-check -m affected configurando para rodar uma vez por dia.
Para saber mais sobre segurança no Gentoo:
USE flags
Gentoo Linux Security Project
Gentoo Security Handbook
Gentoo Linux Security Advisories
Espero que seja útil para alguém.
Nesse mês o blog Petryx comemora seu primeiro ano. Para festejar um novo layout verde, para incentivar a TI verde, claro que se fosse para seguir a risca os preceitos de TI verde, a cor principal deveria ser preta, pois consome menos energia, ainda não fiz o experimento mas um dia vou fazer.
Para quem não sabe o que é TI verde, como eu não sabia vale a pena dar uma pesquisada. Não podemos resolver todos os problemas do meio ambiente, todavia atitudes simples como economizar energia e água, separar o lixo para ser reciclado, reutilizar materiais, são um grande passo na conservação do meio ambiente, as quais cada um de nós pode fazer em casa ou no trabalho.
Sempre que começo a escrever algum código com o VIM e necessito colar algo o VIM autoindenta! Inseri tabs ou comentários, então pesquisando na web descobri uma maneira simples de desabilitar a autoindentação:
:set paste
Depois de ter colado o que eu quero, para habilitar novamente a autoindentação basta digitar:
:set nopaste
Existem outras formas, mas essa achei mais fácil de me lembrar é bem intuitiva.
fonte:blog.exeko.com