Lista Arquivos grandes
Comando util para achar arquivos “gigantes” (logs,backups velhos etc…) em seu sistema de arquivo :
find / -type f -size +20000k -exec ls -lh {} \; | awk ‘{ print $8 “: ” $5 }’
fonte: http://snippets.dzone.com/posts/show/1491
Comando util para achar arquivos “gigantes” (logs,backups velhos etc…) em seu sistema de arquivo :
find / -type f -size +20000k -exec ls -lh {} \; | awk ‘{ print $8 “: ” $5 }’
fonte: http://snippets.dzone.com/posts/show/1491
Para habilitar o acesso SSH sem senha, muito util para criação de scripts que precisam acessar outras maquinas é muito simples.
basta criar uma chave publica no seu servidor:
1. ssh-keygen -t rsa
2. copiar o arquivo <HOME>/.ssh/id_rsa.pub para a maquina(você pode concatenar no final deste arquivo se ele já existir) que você deseja acessar sem usuario e senha: <HOME>/.ssh/authorized_keys.
pronto com isso já esta feito ! em resumo você cria uma chave publica na sua maquina cliente e adiciona essa chave no authorized_keys do seu servidor.
Uma curiosidade é http://docs.jboss.com/seam/2.0.1.GA/reference/en/html/gettingstarted.html que é esse tal de seam-gen é basicamente uma cópia do generate do Ruby On Rails, até ae tudo bem mas reparem no trecho:
“But if you really want a fast edit/compile/test cycle, Seam supports incremental redeployment of JavaBean components. To make use of this functionality, you must deploy the JavaBean components into the WEB-INF/dev directory, so that they will be loaded by a special Seam classloader, instead of by the WAR or EAR classloader.”
e logo depois :
“ou need to be aware of the following limitations:
então em resumo este tal de ” fast edit/compile/test cycle” não existe com essas limitações… O mais engraçado é o “But if you really want” , se eu quero(preciso) ? não, eu não quero não… eu gosto de ficar reiniciando o tomcat…é divertido… perder o maior tempo e depois descobrir que o tomcat não fez o deployment da sua ultima alteração na sua classe, super legal.
Depois de muito ouvir falar desse tal de JBoss seam , hoje resolvi testar ele, fazer algum exemplo realmente facil para ver como ele funciona. Para isso fui até site do framework e baixei a versão [jboss-seam-2.0.3.CR1] eu já tinha baixado o JBoss [jboss-5.0.0.Beta4], com isso eu esperava ter tudo para rodar o tal JBoss Seam engano meu logo no começo para rodar o JBoss tive um problema, bem estranho, mais googlando “resolvi” tinha alguma coisa haver com java jdk 6, tudo bem adicionei um novo parametro para JVM e ok agora já era possível rodar o JBoss, claro para fazer isso la se foram uma 1 hora.
Depois disso já confiante que iria ver o JBoss Seam rodando na minha maquina, entrei no diretorio de exemplos do framework e depois de alguns minutos e um monte de build.xmls e build.properties eu era capaz de fazer o build das aplicações de exemplos no diretorio correto do JBoss.
E para ter “alguma base” abri o tutorial do Seam que começa pela aplicação “registration” depois de executar “ant” no diretório do exemplo, mais uma decepção :
*** CONTEXTS IN ERROR: Name -> Error
vfsfile:/C:/jboss-5.0.0.Beta4/server/default/deploy/jboss-seam-registration.ear
-> java.lang.RuntimeException: mapped-name is required for timerService of deplo
yment TimerServiceDispatcher
Novamente de volta ao google e desta vez sem muita sorte, depois de pelo menos uma hora, descobri que esse erro é realmente um bug, e que teria que baixar o JBoss com o release que corrigia este bug….
Em casa conexão discada… sem chance de baixar JBoss… então baixei esse tal de JBoss embebed [jboss-embedded-beta3-SNAPSHOT-bin] e mais uma vez depois de uma hora brigando com o bicho, devido a problemas de configurações especificos da minha maquina, “até que funcionou” consegui rodar alguns exemplos do JBoss Seam e já outros não funcionaram, por exemplo [registration]…
em resumo pretendia estudar o framework mais gastei quase todo tempo em problemas de configurações, talvez eu tenha escolhido errado as versões, pois quase todas elas era CR,BETA então vou tentar novamente mais somente com versões “estaveis” dos frameworks.
Mais de primeira o que notei no framework é a volta do EJB estilo “bem pesado”,”para rodar em servidor de aplicação” muito criticados em sua versão EJB 2.*.
Sobre o JBoss Seam a idéia do framework é Usar EntityBean(JPA e Hibernate) e um tal de Stateless Session Bean como a classe de ação.
bom lendo o tutorial percebe-se tem annotations para todo lado e alguns xmls(web.xml,persistence.xml,faces-config.xml,ejb-jar.xml).
A Java magazine deste mês fala deste framework, e pela matéria parece ser o framework “produtivo”, mais será mesmo ?
Outra critica é que JBoss Seam como próprio nome diz é “JBoss” teoricamente tem suporte para outros AS, mais sabe como é né ? “na pratica a teoria é outra…”.
bom vamos ver se na próxima tentativa eu tenha mais sorte.
Alguns Tech Days Hands-on Labs 2008 podem ser encontradas aqui
Uma feature muito interessante no Ruby On Rails é a “counter_cache” , mais o que seria counter cache ? vou explicar através de um exemplo , supomos que você esteja desenvolvendo um site de contatos, suponhamos que você queira mostrar a quantidade de contatos por tipos algo no estilo da listagem abaixo:
| Categoria | Quantidade |
|---|---|
| Familia | 10 |
| Profissional | 15 |
na maneira “tradicional” , essa listagem sempre acarretaria em varios “selects”, ou seja, um select seleciona todos os tipos de contatos e um select para totalizar cada tipo, imagine, seu sistema tem 1.000,000 tipos de contato você teria 1.000,000 selects + 1.
O ruby counter cache minimiza este problema, pois ele cria uma nova coluna na tabela categoria com a quantidade correta de contatos.
Então vamos ao código.
Criar o projeto rails
rails contato --database=mysql
Configuração
edite seu config/database.yml e altere os dados do seu banco de dados mysql
Criar a base de dados
rake db:create
Deixar o ruby criar algum código
ruby script/generate scaffold Categoria nome:string
ruby script/generate scafffold Contato nome:string email:string fone:string categoria_id:integer
Vamos criar as tabelas
rake db:migrate
class Categoria < ActiveRecord::Base has_many :contato end
edite o app/models/contato.rb qude deve ficar como:
class Contato < ActiveRecord::Base belongs_to :categoria end
agora você já pode iniciar o servidor ruby script/server e acessar http://localhost:3000/categorias.
vamos editar a view index da categoria e adicionar a quantidade de contatos:
...<table> <tr> <th>Nome</th> <th>Quantidade</th> </tr> <% for categoria in @categorias %> <tr> <td><%=h categoria.nome %></td> <td><%=h categoria.contato.length %></td>...
agora vamos fazer a magica acontecer, vamos primeiro adicionar a coluna magica no seu modelo categoria
ruby script/server migration add_categoria_count_cache
edite esse novo arquivo:
class AddCategoriaCountCache < ActiveRecord::Migration def self.up add_column :categorias,:contatos_count,:integer,:default => 0 end def self.down end end
logo após isso rode rake novamente,da pasta raiz do seu projeto:
rake db:migrate
Agora vamos atualizar o Contato para sempre atualizar o count_cache, para isso basta editar o app/models/contato.rb
class Contato < ActiveRecord::Base belongs_to :categoria, :counter_cache => true end
Pronto se tudo correu bem é para o counter cache estar habilitado, para testar basta acessar ruby script/console cadastrar algumas categorias e popular alguns contatos para essas categorias e verificar o resultado no browser.
aqui um outro ótimo exemplo.
divirta-se!
Meu amigo Tiago Dornelas e Talita Pagani estão com um super projeto de controle financeiro open source e resumidamente eu vi o que eles já produziram e fiquei super empolgado, afinal eu mesmo já tentei iniciar um projeto neste domínio e não tive sucesso.
Eles estão trabalhando com o PHP neste projeto, nada contra o PHP, mais acredito que esta seria uma ótima oportunidade para aplicar o Ruby On Rails e ganhar experiência nesta proeminente plataforma.
Então implementarei uma versão do projeto em Ruby, a ideia é ter a mesmas funcionalidades, layout e banco de dados, mais em Ruby On Rails.
então em breve publicarei mais sobre isso.
XMLBeans é uma ótima ferramenta para quem precisa trabalhar com XML, por exemplo, fazer uma integração entre dois sistemas utitlizando troca de arquivos em formato xml , para entender como essa ferramenta funciona é necessário ter algum conhecimento sobre XML Schema.
O que é XML Schema ? resumidamente esta ferramenta foi projetada para substituir as DTD , ou seja, é forma de definir e validar um documento XML.
Aqui um ótimo tutorial sobre XML Schema, neste tutorial iremos trabalhar com XML BEANS.
O que vamos fazer : Nosso sistema de comércio online deverá permitir o envio de pedido em formato XML este arquivo recebido deverá ser transformado em java bean com os seus respectivos dados.
Existem várias formas de se fazer essa tarefa mas com certeza usar xmlbeans é realmente uma forma elegante de resolver o problema.
A Seguir um passo a passo , antes de prosseguir é necessário instalar xml beans, instruções aqui.
Nosso arquivo que representa um novo pedido:
Pedido.xml
<?xml version="1.0"> <Pedido cliente_id="1"> <Item produto_id="10" quantidade="10" /> <Item produto_id="10" quantidade="10" /> </Pedido>
Nosso pequeno arquivo xsd(XML Schema):
Pedido.xsd
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pedido="http://www.alexflorentino.com/pedido" targetNamespace="http://www.alexflorentino.com/pedido" elementFormDefault="qualified"> <xs:element name="Pedido"> <xs:complexType> <xs:sequence> <xs:element name="Item" type="pedido:Item" /> </xs:sequence> <xs:attribute name="client_id" type="xs:int" use="required"/> </xs:complexType> </xs:element> <xs:complexType name="Item"> <xs:attribute name="produto_id" type="xs:int" use="required"/> <xs:attribute name="quantidade" type="xs:int" use="required"/> </xs:complexType> </xs:schema>
Este arquivo resumidamente descreve como um arquivo de pedido deve ser formatado.
Agora precisamos inserir em nosso arquivo de pedido uma referência ao nosso Arquivo XSD.
Pedido.xml
<?xml version="1.0" encoding="UTF-8"?> <Pedido cliente_id="1" xmlns="http://www.alexflorentino.com/pedido" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="pedido.xsd"> <Item produto_id="10" quantidade="10" /> <Item produto_id="10" quantidade="10" /> </Pedido>
Pronto! com esses artefatos criados precisamos agora rodar um comando mágico, no diretório onde você criou os arquivos pedido.xml e pedido.xsd, execute:
scomp -out pedido.jar pedido.xsd
lembre-se para este comando funcionar você precisa ter xml beans devidamente instalado.
Basicamente este comando irá criar um monte de código para você, código que trata todo o trabalho que você poderia ter ao trabalhar com arquivo xml em java.
Para isso basta inserir o arquivo pedido.jar(gerado com o comando anterior) na sua aplicação junto com as bibliotecas do xml beans.
exemplo o trecho de código abaixo ilustra o processamento do arquivo de pedido.
PedidoDocument pedidoDoc = PedidoDocument.Factory.parse(new File("pedido.xml"));
Pedido pedido = pedidoDoc.getPedido();
System.out.println("Client_id:"+pedido.getClientId());
System.out.println("XMLLIDO \n:"+pedidoDoc.toString());
repare neste código você acabou de ler o arquivo pedido.xml diretamente para o seu objeto java Pedido, sem qualquer preocupação com detalhes de leitura do arquivo xml.
Para finalizar, xmlbeans é uma ferramenta poderoza para o trabalho com arquivo xml quando você já tem xsd já definidos, um exemplo real : você quer integrar com sistema .Net e certamente o dono do sistema em .Net tem os arquivos xsd e lhe fornecerá com isso o tempo de integração cai drasticamente, né ?.
O XML Beans também evita a famosa programação orienta a String
já que você não precisa ficar lendo este arquivo xml, dentre muitas outras vantagens.
Baixe aqui os arquivos deste tutorial.
Finalmente consegui encontrar um plugin para formatar os códigos fontes apresentados neste blog.
public class TestPlugin {
public static void main(String args[]) {
System.out.println("teste");
}
}
com isso irei aumentar a frequência de posts apresentados aqui.
No Mundo Ruby On Rails, existe uma ferramenta Chamada Scaffold que tem como objetivo basicamente geração de um esqueleto para a nossa aplicação. Com esta ferramenta podemos começar o nosso projeto com bastante código gerado automaticamente.vamos a um passo-a-passo.
1. Baixe e instale o Ruby
2. Instale o MySQL acessando o link
3. Instalar o framework rails
gem install rails –include-dependencies
4. Crie uma nova aplicação rails blog -d mysql
5. Configure usuario e senha de acesso ao banco de dados para isso edite o arquivo config/database.yml e atualize o username e password
6. Cria o database
rake db:create
7. Gerar um scaffold
ruby script/generate scaffold blog titulo:string autor:string conteudo:text
8. Gera as tabelas rake db:migrate
9. Inicie o Servidor ruby script/server
acesse http://localhost:3000/blogs
Se tudo ocorreu bem é para ver um site com um cadastro totalmente funcional rodando.
Viva ao Ruby.