quarta-feira, 27 de junho de 2018

PFsense DNS Resolver Host Overrides e Domain Overrides como configurar

Boa Noite!

Depois de muitas duvidas em como configurar  principalmente o Host Overrides finalmente consegui chegar a uma conclusão de como configurar corretamente. Comecemos com o mais simples Domain Overrides.

Cenário tenho um servidor Samba como controlador de Dominio e gostaria que ao realizar uma consulta dns em minha rede o pfsense responde-se de forma satisfatória as pesquisas então vamos assumir que meu dominio é SANTOS.TRANSPARENCY e a maquina na qual ele responde esta no meu ip de rede 192.168.1.5 então navego pelo menu Services > DNS Resolver rolo a pagina até embaixo e clico em +add e faço a seguinte configuração conforme a baixo.

Clique na Imagem para Ampliar

Salvo e em seguida aplico as mudanças. Verifico se vou conseguir realizar um ping no dominio e se vai apontar para o ip desejado.

Clique na Imagem para Ampliar
Observamos que no primeiro comando estou conseguindo "pingar" o dominio perfeitamente. No segundo é o nome registrado  da maquina dentro do meu DHCP, tambem respodendo perfeitamente.

Agora vamos para o Host Overridades

Cenario tenho um ubuntu server com GLPI e OCSINVENTORY, e eu desejo acessar o GLPI diretamente ao digitar no navegador http://glpi/ até ai bastaria eu dar o nome de glpi a esta maquina no serviço de dhcp e ativar a função no DNS Resolver de mapear os dns registrados no dhcp Server, mas sempre temos um mas, durante a instalação dos clientes do ocsinventory por padrão vem a url http://ocsinventory-ng/ocsinventory eu poderia mudar a url para http://192.168.1.4/ocsinventory, mas seria pouco pratico para mim então eu quero acessar ambos pelas url, vamos a configuração.

Mas antes lembra quando voce configurou o seu pfsense e colocou um dominio ? Não lembra ? tudo bem só ir no menu System > General setup e veja o que digitou em Domain essa informação é importante pois sera usada para realizar a substituição do host, no meu caso é santos.transparency.

A configuração a baixo mostra o seguinte:

Host: NOME DA MAQUINA NO MEU DHCP SERVER O QUAL FOI MAPEADO NO DNS

Domain: que no meu caso é santos.transparency, por isso é importante saber qual o dominio(FQND)

IP ADDRESS: IP da maquina que ira responder as pesquisas pelos Host names no meu caso 192.168.1.4

Em Additional Names for this host vou adicinar os dominios adicionais que quero que passem para essa maquina, como pode ser visto na imagem poderia haver muitos mais.

Clique na imagem para Ampliar
Em caso de duvidas deixe nos comentarios.

quinta-feira, 20 de julho de 2017

Refatoração de Codigo Java

Olá!
Me solicitaram uns novos argumentos a esta janela:


No caso são os tipos de motoristas(Funcionario,Agregado e Terceiro). Até bacana mas senti que precisava ser dinâmico independente da escolha caso nao fosse assim nao estaria interessante. Pensei em como iria implementar este codigo tentei varias coisas ontem, mas sem sucesso, isso por que programar de cabeça cheia nao dá. Ai fiz o de sempre no caminho para casa por 25 km fiquei pensando em como solucionar meu problema, e então saiu o primeiro codigo que deu certo:

Ai olhei para esse codigo e pensei.. que feio.. deve ter alguma forma de melhorar esse codigo fazendo de outra maneira, ai me ocorreu usar  de mudar e pensei no seguinte. Tenho 3 JCheckBoxp posso usar um Case e colocar  o codigo dentro de 2 casos, Ai criei um metodo que armazenava os JCheckBox ao um List caso eles estivessem selecionados.
Pronto com isso eu consegueria pegar a quantidade e quais  JCheckBox estariam selecionados. Dai foi so juntar A+B, o switch  case recebia  o total da lista e dentro de cada caso havia um codigo diferente, conforme podemos ver a baixo utilizei o proprio texto do componente como clasula da pesquisa ja que eram identicos as categorias.

Olha que belezinha comparando a quantidade de linhas com o primeiro codigo esse ai tem apenas 10 e com uma cara muito mais limpa e clara sem falar legivel.

Recebe os JCheckBox caso tenha 1 seja ele qual for concatena com a String que ja havia com o codigo mais generico e observem como pego o argumento se so tem 1 com certeza  esta na posição 0 do list, depois pego o texto descrito no componente e o transformo todas as letras para Maiusculas, Ai esta o primeiro. No Segundo precisei adicionar um pouco mais  por causa da propria pesquisa mas a ideia foi praticamente a mesma do 1.

E é isso refatorem sempre que der os codigos reduza o tamanho melhore os metodos e vamos continuar com as boas praticas.

quinta-feira, 10 de março de 2016

Expressões Regulares Java - Regex

Olá

Durante meus quase 10 anos de programação com a linguagem Java, não consigo recordar se precisei ou não utilizar expressões regulares... mas durante alguns dos desafios no site HackerRank, fui forçado a estudar para conseguir resolver o desafio que exigia que em uma String X, caso ouve-se pontos(Padrão inglês não tem acentos).

No Site da Oracle existe uma ótima documentação que qualquer um pode ler facilmente a aprender, mas para variar esta em inglês(Sim Jovens Inglês é indispensável).

Segundo a Oracle o que podemos fazer com expressões regulares são pesquisas, edições ou manipulação do texto e dados em Strings;

Vou usar como referencia para dar uma explicada básica o desafio que estava tentando realizar no HackerRank.

Possuía esta entrada:
He is a very very good boy, isn't he?
Que deveria sair com esta saída:
He
is
a
very
very
good
boy
isn
t
he
Em suma precisava retirar a pontuação da frase.
E o próprio enunciado dava a dica sobre usar expressões regulares. Então fui estudar para tentar resolver meu problema.


ConstrutorDescrição
[abc]a, b, or c (Classe Simples)
[^abc]Qualquer carácter exceto a, b, ou c (negação)
[a-zA-Z]a até z, ou A até Z, inclusive (alcance)
[a-d[m-p]]a ate d, ou m até p: [a-dm-p] (Uniao)
[a-z&&[def]]d, e, ou f (interseção)
[a-z&&[^bc]]a até z, exceto para b e c: [ad-z] (subtração)
[a-z&&[^m-p]]a até z, e não m até p: [a-lq-z] (subtração)

 Dai fui testando um a um para ver como se comportam afinal , ver algo funcionando e muito diferente de ler como funciona.

Ai pensei só quero as letras sem  acentos, de cara iria usar a expressão [a-zA-Z] , mas como nada é tao simples, usei o método replaceAll da API String. Ela aceita dois Argumentos, o primeiro um Regex e o segundo a String que ira substituir de acordo com o Regex.

Porem ser usar ele desta forma String.replaceAll("[a-zA-Z]", " "); . Se eu fizer exatamente assim estou dizendo para ele substituir qualquer letra Minuscula ou Maiúscula por Espaço " ";
Meu objetivo e justamente o contrario, então como é o contraio eu vou negar essa regra invertendo a saida dela usando  o simbolo da negação ^ , mudando minha expressao para String.replaceAll("[^a-zA-Z]", " ");

Agora sim tenho a saida que quero sem os Acento. Mas para complementar e explicar como fiz para conseguir as palavras cada uma em uma linha.



String.replaceAll("[^a-zA-Z]", " ").split(" ") adicionando o split(" ") eu tenho como retorno um Array de String[] e com isso posso usar um forEach para percorrer o Array e Imprimir em cada linha cada uma das palavras.

Duvidas ? Comenta ai.

quinta-feira, 5 de novembro de 2015

CRIAR PROJETO MAVEN EM JSP 2.2 - ECLIPSE

Olá a Todos.

Se voce como eu esta a horas tentando entender o por que vc tenta criar um projeto Maven com jsp e acontece varias falhas, dentre elas nao consegue mudar o modulo dinamico para 2.5 ou superior, bem o problema é bem mais simples do que parece.
Durante a criação de um novo projeto maven nesta tela, caso a caixa circulada não  esteja selecionada a selecione.

Depois so completar os dados de acordo e clicar em finish




sexta-feira, 12 de setembro de 2014

Enviar E-mail com texto e anexo Commons Mail

Olá, recentemente comecei testar novas tecnologias para envio de e-mails. Onde muito se falava do Commons Mail, por ser simples e de fácil configuração se considerado com o Java Mail, o qual é mais complexo. 

Curiosidade importante, Commons Mail é baseado no Java Mail. Bom vamos la para utilizar o Commons Mail é necessário o Java Mail e o próprio Commons Mail, e caso esteja utilizando Java 6 é necessario o JAF.

No próprio site da Commons Apache, existe diversos tutorias básicos contendo ótimos exemplos confira aqui.

No meu caso vou dar uma importante dica, caso como eu você esteja utilizando iReport para gerar relatórios ou algum outro meio que utilize Array de Bytes(Essa solução é usada para  que não seja necessário persistir o arquivo em disco). Se parou para olhar o exemplo no site da Commons Apache percebeu que ele usa a classe EmailAttachment  , e esta classe apenas aceita o caminho do arquivo (Em String) que ja esta no disco. E como ja dito para casos que você vai gerar o arquivo em por exemplo um Array de Bytes existe métodos especifico dentro da classe MultiPartEmail.  O método sobrecarregado chamado attach, possui atualmente cerca de 6 metodos com este mesmo nome utilizando construtores diferentes( Isso é mesmo necessario ser dito ? ). O construtor que irei demostrar no codigo a baixo é o seguinte:


public MultiPartEmail attach(DataSource ds,String name,String description,String disposition) throws EmailException

Este construtor recebe um Objeto do tipo DataSource contendo os dados do mesmo, um nome, uma descrição e disposição. Para resumir abaixo o codigo que utilizo hoje a partir deles com certeza voce vai entender muito melhor:


public class Email {  
    private Object[] para;
    MultiPartEmail multiPartEmail;

    public Email() {
        multiPartEmail = new MultiPartEmail();      
        try {
            multiPartEmail.setFrom("seuMail@seuDominio","Seu Nome");
        } catch (EmailException ex) {
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
        multiPartEmail.setAuthentication("emailAutencar@dominio", "senha");
        multiPartEmail.setHostName("seuHost");
        multiPartEmail.setSmtpPort(PORTA_SMTP);
        multiPartEmail.setDebug(true);//DEBUG
    }

    @Override
    public boolean enviar() {
        try {
            for (Object object : para) {//Percorre a lista de destinatarios e add ao email
                multiPartEmail.addTo(object.toString());
            }
            multiPartEmail.send();//envia
            return true;
        } catch (EmailException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage(), "Informação do Sistema", JOptionPane.ERROR_MESSAGE);
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    @Override
    public boolean enviar(byte[] arquivo) {
        try {
            multiPartEmail.attach(new ByteArrayDataSource(arquivo, "aplication/pdf"), //Converte Array de Bytes em um DataSource
                                  new SimpleDateFormat("yyyyMMdd HH:mm").format(new Date()) + ".pdf",//Nome do Arquivo escolhi que seria desta Forma
                                  "relatorio",
                                  EmailAttachment.ATTACHMENT);
        } catch (EmailException ex) {
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
        return this.enviar();
    }

    @Override
    public void setPara(List<String> para) {
        this.para = para.toArray();
    }
   
    @Override
    public void setMensagem(String mensagem) {
        try {
            multiPartEmail.setMsg(mensagem);//Este Metodo deve ser chamado antes do anexo, caso contrario o texto nao será exibido
        } catch (EmailException ex) {
            Logger.getLogger(Email.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void setAssunto(String assunto) {
        multiPartEmail.setSubject(assunto);
    }

}

obs: Eu levei um tempo para descobrir um pequeno "Pulo do Gato", apesar de estar descrito da Documentação oficial, quando desejar enviar email com mensagem é necessario que no caso MultiPartEmail, o metodo referente ao corpo do email seja chamado antes ao metodo referente ao anexo, caso contrario  não irá funcionar como esperado.

sexta-feira, 7 de junho de 2013

[Linux] Criando Script SH de Backup Ubuntu part 2 - Armazenando e Compactando Tar e Gzip mãos a Obra!

Continuando... Agora irei demonstrar o basico para o armazenamento utilizando o Tar  e compactando com o Gzip.

tar -cvzf  /media/usbBackup/$Y$m$d-$H-$M-$S-Sever.tar.gz /home/denis/'VirtualBox VMs'/Server

Sendo o padrão de sintaxe: tar [parâmetros] [DESTINO] [ORIGEM], abaixo descreverei os parametros que utilizei.

  • -c  - extrai um arquivo para a saída padrão;
  • -v  - exibe detalhes sobre o procedimento;
  • -z  - Usada para que o arquivo seja compactado com gzip
  • -f   - Especifica o arquivo que será usado.
Sendo que utilizei a referencia a Part 1, para realizar a tarefa abaixo.Utilizei variaveis para guardar os valores ,Ano,Mes,Dia,Hora,Minuto e segundos "$Y$m$d-$H-$M-$S", quando se concatena varias variaveis nao se deve utilizar o underscore, eu utilizei ifen.


Y  `date + %Y`
m  `date + %m`
d   `date + %d`
H  `date + %H`
`date + %M`
S   `date + %S`



[Linux] Criando Script SH de Backup Ubuntu part 1 - Formatar nome de arquivo com Data e Hora

Bom dia!

 Vamos ao que interessa, na primeira parte  vou mostrar como conseguir formatar a data e hora para ser add ao nome do arquivo.. estarei usando o exemplo que faz parte da minha vida todos os dias rs.

1º Abrir o Terminal do Ubuntu, de forma simples apenas aperte ctrl+alt+t


2º Se digitar a palavra date será exibido na tela, o dia da semana, mes do ano, hora e ano.

3º Para pegar apenas a data de forma personalizada observe as variaveis abaixo.

  • %d - Mostra apenas o Dia ex: 07.
  • %m - Mostra apenas o Mes ex: 06.
  • %y - Mostra apenas o Ano ex: 13.
  • %H - Mostra apenas a Hora com duas Casas ex: 10
  • %M - Mostra apenas os Minutos duas Casas ex: 41
  • %S - Mostra apenas os Segundos duas Casas ex: 40

4º Para concatenar observe o exemplo digitando no terminal o seguinte comando:
"date +%d-%m-%y_%H:%M:%S"