Arquivos da categoria: Código

ShellScript para implementação de “lixeira”

Utilizando ShellScript para não perder mais arquivos no Linux

Linu

Introdução

Neste post iremos utilizar o ShellScript para implementar um recurso muito importante que possibilita a recuperação simples e rápida de uma lixeira para o linux quando utilizado sem os gerenciadores de janelas como KDE, Gnome e outros que ja possuem um recurso parecido.

O Problema

Quando se utiliza o terminal o linux, pode acontecer alguns desastres, como por exemplo o uso do comando rm que remove o arquivo informado permanentemente. Por isso criei o script abaixo que move o arquivo ou pasta informado para uma pasta temporária, e só remove permanentemente após 30 dias.

A Solução

 Para disponibilizar o comando em qualquer local do terminal, crie o arquivo com o nome “del.sh”, dê permissão de execução com o comando “chmod +x del.sh” e crie um link dentro da pasta “/usr/local/bin” com o seguinte comando: “ln -s /home/pasta/onde/esta/o/arquivo/del.sh del”
Apos seguir todos estes passos, você ja poderá utilizar o comando:
del arquivo.txt

O ShellScript del.sh

Exemplo de uso:

Derby – utilizando auto incremento

Derby embed java database

Derby

O Derby

O Derby é um sistema de banco de dados relacional embarcado no java, isto significa que você não precisa ter um serviço a mais sendo executado na sua maquina para fazer uso do sistema de banco de dados, todo o código é executado na mesma JVM de sua aplicação.

Alguns motivos para utilizar o Derby

  • Rápida instalação e ouço consumo de recursos 2.6MB por instância já considerando o driver.
  • Baseado em Java, JDBC, e SQL padrão.
  • Possibilidade de utilização no modo cliente servidor.
  • Facilidade de instalar e usar.

Criando a tabela com auto-incremento

O auto incremento no derby é um pouco diferente do padrão dos outros banco de dados.
Segue um exemplo que pode ajudar a criar as tabelas de seu novo banco.

Link para o site oficial.

Executando scripts Groovy no java

Logo Groovy

Groovy – Introdução

O Groovy é uma linguagem dinâmica de script criada para ser executada na plataforma Java, e não é necessariamente um concorrente do Java mas sim um complemento que torna a plataforma ainda mais forte. Além do beneficio de ser uma linguagem de Script e não precisar ser pre-compilado par que seja executado o Groovy ainda conta com o beneficio de ser completamente integrado com a plataforma Java, isto significa que o seu script pode ter acesso ao escopo interno do sistema Java.

Onde Utilizar ?

Existem situações onde precisamos montar lógica em tempo de execução, o java tem recursos muito bons para trabalhar com reflection, mas quando não é suficiente sentimos falta do bom JavaScript.

Uma das situações onde estes recursos podem ajudar é quando precisamos dar ao usuário final a possibilidade de definir as regras de negocio dinamicamente:

  1. O clientes deve receber um desconto quando comprar um determinada combinação de produtos.
  2. Critério de aprovação de um aluno: “Deve ter uma média maior que 5.5 e ter uma frequência de 70%”
  3. O 500º cliente do dia recebe um desconto especial.

Estes são apenas alguns dos muitos exemplos de regras de negocio que podem mudar de um dia para o outro, e para que nao precisemos criar parametrizações monstruosas ou ter que publicar uma nova versao da aplicação a cada dia podemos deixar estas regras nas mãos dos gestores e quando eles acharem pertinente eles mesmos pode editar as regras como se fosse uma fórmula do Excel.

O Código

Site oficial: Groovy

Uso da tag canvas do HTML5 com JavaScript

A tag CANVAS é basicamente uma tela para desenho.

 

Com o JavaScript pode-se obter a tela, dai será nescessário um objeto Context para desenhar nesta tela:

Resultado:

Principais funções:
 
moveTo(int x, int y);   //Move para as cordenadas indicadas

lineTo(int x, int y); //Desenha uma linhas do ponto inicial definido por “moveTo” ate o pondo indicado nos valores de X e Y

stroke(); //Imprime o senho na tela
 
fillRect(int x, int y, int width, int height); //Desenha um retângulo, onde X e Y indica o posicionamento e Width e Height indicam o tamanho do retângulo
 
arc(int x, int y, int radius,double start, double end); //Desenha um arco onde X e Y indica o posicionamento do centro do arco, Radius é o raio , Start indica onde o arco deve iniciar, o valor 0(zero) é a posiçao de 3(três) horas no relógio e vai ate Math.PI (3.14), End é o fim do arco, desta forma para desenhar um círculo, usa-se 0 para Start e 3.14 (Math.PI) para End

Abaixo você pode ver um exemplo de uma animação que renderiza um relogio em uma tag

Seu navegador não suporta HTML5

Fonte: developer.mozilla.org

Usando log com Java

System.out.println(e.getMessage());
Este é talves, o maior motivo para querer-mos utilizar uma ferramenta para gestão dos processos de log.
Enquanto estamos desenvolvendo, é comum o uso do sysout, para registro e ate “depuração” do código, o problema começa quando o sistema vai para a produção e ocorrem erros misteriosos e o usuario nunca sabe realmente informar o que aconteceu.

O log4j propõe resolver este problema, não apenas registrando as mensagens em arquivos para encapsulando todo o processo que envolve os registros de log, como formatação das saidas, inclusão de data e hora, backup do log e outros.

Para utilização desta API, basta fazer o download do arquivo .jar e adiciona-lo ao buildpath da aplicação. 
 
No caso de uma aplicação web, basta colar o arquivo na pasta “lib”  do projeto.

Na primeira linha, foi usada uma configuração básica 
Na segunda linha iniciamos a classe que registra o log.
Esta configuração não resolve muita coisa porque apenas registra no console as saidas informadas:

0 [localhost-startStop-1] INFO com.edgardleal.ClassTest  – Sistema iniciado
500 [localhost-startStop-1] WARN
com.edgardleal.ClassTest  – Mensagem de alerta
500 [localhost-startStop-1] ERROR com.edgardleal.ClassTest  – Log de erro

A primeira coluna indica o tempo decorrido deste a inicialização da classe Logger
2º Thread que esta sendo executada no momento
3º Nível do log
4º Classe que executou o log
5º Mensagem informada

Para que tenha-mos um log realmente útil precisaremos criar um arquivo de configurações para definirmos nossas preferencias e termos um resultado como o do exemplo abaixo:

INFO localhost-startStop-1 15:33:42.017 com.edgardleal.ClassTest – Sistema iniciado
WARN localhost-startStop-1 15:33:42.517 com.edgardleal.ClassTest – Mensagem de alerta
ERROR localhost-startStop-1 15:33:42.517 com.edgardleal.ClassTest – Log de erro

Crie um arquivo com o nome “log.properties” com o seguinte coneudo:


1º Nome o layout de configuração
2º Tipo de layout utilizado ( o arquivo continua crescendo )
3º Formatação utilizada, neste caso, utilizaremos o padrão informado abaixo
4º Nome do arquivo de log
5º Mascara utilizada para gerar o resultado
6º Tamanho máximo do arquivo de log
7º Número máximo de backups mantidos
 
E alteramos o código anterior para que fique da seguinte forma:

  

Na primeira linha do código, iniciamos a configuração global do log com o arquivo “log.properties”

Veja a documentação completa

Gerar autoincremento para todas as tabelas automaticamente

Logo do firebird sistema de gerenciamento de banco de dados

Uma das reclamações das pessoas que começam a utilizar o FireBird é a falta do auto-incremento como é contrados em sistemas como SQL Server e MySQL. Ainda não vamos discutir os prós e contras de se utilizar generators(Sequences), mas criei um código para me auxiliar na tarefa de preparar o banco de dados para rotinas de replicação e que serve para solucionar este problema.

A rotina abaixo busca por tabelas no banco de dados que contenha chaves primárias de apenas um campo, caso encontre, cria o GENERATOR (SEQUENCE), e a TRIGGER correspondente para gerar o auto-incremento destas tabelas.

Recursos utilizados nestes scripts:
TRIM: retorna o texto informado no parâmetro sem os espaços a esquerda e direita.
EXECUTE STATEMENT: Execute um comando contido na string, muito útil para criação de consultas  
            dinamicamente.
RDB$RELATIONS: Tabela do sistema que contem todas as tabelas e views do banco de dados.
UPPER: Retorna o parâmetro informado em caixa alta (todas as letras maiúsculas )
CAST: Converte um valor para um determinado tipo de dados. No nosso exemplo foi convertido um valor inteiro para texto ( varchar(5) ).

Dados aleatórios e busca inteligente

Por melhor que seja sua rotina de busca, ainda assim vai existir um usuário que não consiga encontrar o que esta procurando, por isso criei a rotina abaixo para fazer algo parecido com a busca do google.
Para testar utilizei também uma rotina para gerar dados aleatórios que pode ser muito boa para testar procedimentos.

ATENÇÃO!! Veja a função SPLIT aqui

Rotina para gerar números para loteria

Lotofacil

Lotofacil

Acredito que quase todo programador já tentou criar um programa para descobrir(prever) os números da loteria. Abaixo escrevi uma função para gerar uma sequencia de 15 números para a Lotofacil para quem quer  iniciar esta jornada em busca da combinação certa.

SQL Server – Registros por tabela

SQL Server

Como esta seu banco no SQL Server ?

Seja para detectar um problema de excesso de uso de disco ou mesmo para monitoração dinâmica do SQL Serve, é importante saber como cada tabela do banco esta se comportando e se estão crescendo como esperado. Uma outra situações pela qual costumo passar é quando preciso otimizar consultas e preciso saber a cardinalidade das tabelas envolvidas para decidir qual índices priorizar na junções condições e ordenamento. Para isso criei a rotina abaixo que lista todas as tabelas do banco de dados e sua respectiva cardinalidade ( Quantidade de registros ), este código pode ser incluso em uma Stored Procedure e utilizado para verificar periodicamente o comportamento dos dados no banco, isso pode evitar que sua aplicação pare de funcionar ou fique lenta de mais por causa de alguma rotina com erro.

Para mais informações sobre Stored Procedures e sintaxe do SQL Server visite a documentação oficial da MicroSoft aqui.