Mostrando postagens com marcador Programação. Mostrar todas as postagens
Mostrando postagens com marcador Programação. Mostrar todas as postagens

4 de jul. de 2014

Editor de Texto Atom

Recentemente o Github lançou seu editor de texto Atom, um editor bastante poderoso escrito com tecnologias web (HTML, CSS, Javascript) mas que funciona como aplicativo desktop nativo. Se isso parece familiar e lembra o node-webkit você está enganado.
Ele segue o mesmo princípio mas o Github lançou também o atom-shell, o que permite a criação desse tipo de aplicativo.

Integração com Node.js

Tudo aquilo que você faz com node em linha de comando pode ser integrado, através do atom-shell, no seu Atom, ou seja, acesso ao sistema de arquivos, executar ferramentas externas, iniciar serviços, etc. Quer dizer qualquer módulo do Node.js.

18 de out. de 2012

Faça seu próprio driver de impressora usb no Linux

Alguns programadores estão familiarizadas com o uso de impressoras usando a porta direta /dev/lp0 ou porta USB /dev/usb/lp0. Mas essa funcionalidade parecia que havia deixado de existir no Ubuntu 12.04. Na verdade ela apenas foi desabilitada por padrão.

6 de fev. de 2012

NetBeans 7.1


NetBeans 7.1

Lançado em 5 de Janeiro de 2012, a versão 7.1 do IDE NetBeans, agora desenvolvida pela Oracle veio com várias novas funcionalidades. Vou listar as que eu particularmente acho mais úteis, pelo menos do ponto de vista das que eu mais vou utilizar (por exemplo, funcionalidades relacionadas ao JavaFX não serão o
o foco).



Novos Refatoramentos

Um refatoramento bastante útil é o que troca a chamada demasiada de um método e substitui por uma única chamada e atribui o valor a uma variável local. Ex. suponha o seguinte método:

public double calculatePrice() {
  if (getBasePrice() > 1000) {
    return getBasePrice() * 0.95;
  } else {
    return getBasePrice() * 0.98;
  }
}

Note que a chamada ao método getBasePrice() é feita três vezes. É muito provável que este método seja caro para a aplicação, no sentido de que ele deve executar algum cálculo toda vez que é chamado.
Neste caso o ideal seria chamá-lo apenas uma vez e atribuir o valor a uma variável.
Para isso basta clicar com o botão direito no método getBasePrice(), Refatorar → Introduzir variável...
Selecione a expressão desejada, dê um nome a nova variável. Note que é possível torná-la final e/ou
substituir todas as ocorrências. Pronto. Seu código agora deverá ser da seguinte maneira:

public double calculatePrice() {
  double basePrice = getBasePrice();
  if (basePrice > 1000) {
    return basePrice * 0.95;
  } else {
    return basePrice * 0.98;
  }
}

Renomear

Um problema grande de renomear algum atributo de instância no NetBeans era de que os metodos get e set ainda ficavam com o nome antigo. Agora já é possível mudá-los ao renomear um atributo.

Mudar tipo de retorno do método

Caso você crie um método, e ao terminar de escrevê-lo se dá conta que deveria retornar um valor, ou
que o tipo de retorno está incorreto é possível mudar utilizando as Dicas do NetBeans. Quando uma lâmpada com um ponto de interrogação aparece é possível chamar um menu com dicas do IDE. O atalho para isso é o Alt+Enter. Daí basta escolher a opção Alterar o tipo de retorno do método para...

Importar classes ao copiar e colar

Quando um código Java é copiado, os tipos que são usados pelo trecho de código são gravadas. Quando o trecho é colado, você tem a opção de automaticamente importar as classes que são utilizadas no trecho.

Seleção Retangular

Para isso clique em "Alternar seleção retangular" na barra de edição (ou Ctrl+Shift+R). A seleção pode ser criada com o mouse ou com as setas do teclado usando Shift.
Possíveis ações:

  • Clique Del para remover o texto selecionado.
  • Digite novos caracteres, os quais serão replicados em todas as linhas
  • Recorte/Copie/Cole


Suporte ao Git finalizado

Suporte completo ao Git faz parte da distribuição padrão do NetBeans e está disponível logo após a instalação do IDE. Ele permite que usuários trabalhem com clones locais bem como provê possibilidade
de clone, fetch, pull ou push de repositórios remotos.

Histórico Local

Reverter exclusão

É possível escolher quais arquivos serão deletados.

Aba Histórico

Use a aba Histórico para acesso rápido ao Histórico Local.

Essas, dentre outras dicas podem ser encontradas em http://wiki.netbeans.org/NewAndNoteworthyNB71

9 de dez. de 2011

Máscara de dados - PostgreSQL

Fazendo uma pesquisa descobri uma maneira fácil de criar máscara de dados usando a função to_char() do PostgreSQL. Para exemplificar teste a seguinte query:

SELECT to_char(12345678901, 'FM000"."000"."000"-"00');


Neste exemplo transformaremos o número 12345678901 (NUMERIC) no texto 123.456.789-01 (TEXT). O que acontece é que a função to_char() tem o poder de converter valores em textos usando máscaras. Isso serve tanto para números, como para datas, entre outros. Mais detalhes em http://www.postgresql.org/docs/8.1/interactive/functions-formatting.html.

Notem que existem algumas curiosidades neste SELECT. A primeira é: o que representa esse FM? Neste caso ele remove espaços em branco antes do texto. Isso porque a função to_char() adiciona esses espaços para criar um padrão de tamanho fixo. Faça o teste e remova o FM e note que há um espaço em branco antes do primeiro zero.

A segunda curiosidade é a presença de aspas duplas. Neste caso elas servem como delimitadores e compõem a máscara. Isso diferencia um ponto flutuante de um ponto qualquer.

Seguindo o mesmo raciocínio podemos criar máscaras para outros tipos de dados, como por exemplo CNPJ, CEP, telefone, etc. Para uma utilização otimizada e para não repetirmos códigos criaremos uma função SQL na linguagem pl/pgsql. Eis o código:


-- Function: public.to_cpf(numeric)


-- DROP FUNCTION public.to_cpf(numeric);


CREATE OR REPLACE FUNCTION public.to_cpf(numeric)
  RETURNS text AS
$BODY$
BEGIN
  RETURN to_char($1, 'FM000"."000"."000"-"00');
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.to_cpf(numeric) OWNER TO postgres;

Essa função recebe um NUMERIC como parâmetro, assim poderemos passar um INTEGER, ou LONG, que o método aceitará numa boa. A partir desse número usaremos a função to_char() para gerar a máscara e retornar o valor. Simples e objetivo.

Faça o mesmo para outras máscaras, por exemplo telefone:

SELECT to_char(12345678901, 'FM"("00") "0000"-"0000');

Ou seja, sempre que for necessário utilizar caracteres diferentes de zero utilize aspas duplas.

7 de nov. de 2011

COMSOLiD ⁴ - Falta pouco...

Para quem ainda não se inscreveu no COMSOLiD⁴, basta acessar o link e confirmar sua presença no melhor evento de software livre e inclusão digital do Ceará.

Para os interessados em palestras, mini-cursos e oficinas basta submeterem seus trabalhos para o e-mail comsolid_AT_comsolid_DOT_org.

Essa ano teremos um Blender Day, distribuiremos uma versão customizada do Ubuntu com vários recursos pré-configurados, Campeonato de Jogos, Luta Livre de Programação, palestras dos mais variados assuntos, entre outras atividades.

Tudo isso de 23 a 26 de novembro no IF CE - Campus Maracanaú.

Para mais informações vá ao site oficial do evento.

28 de abr. de 2010

Boas práticas de programação 3 - Java Collections Framework

Collections - Classe Java para Manipular Listas.

Se você estava a procura de uma forma rápida de ordenar listas, embaralhá-las, entre outras coisas, esta é a classe.
Ela pode manipular várias Interfaces do java, como:
  • Set
  • List
  • Map
  • SortedSet
  • entre outras.

A classe Collections oferece vários métodos que são de bastante utilidade. Confira:

  • sort(List) - ordena uma lista usando o algoritmo merge sort, o qual provê uma performance média comparado com o algoritmo quicksort, mas garantindo performance de [n*log n] (diferente do quicksort), e estabilidade (diferente do quicksort).

obs.: Você deve implementar a Inteface Comparable. Mas como eu faço isso? Simples. Veja ai!

Vamos supor que você tenha uma classe Produto com essa cara:

public class Produto {

private Integer id;
private String descricao;
private Double preco;
private Long codigoBarra;

// getters and setters ...
}


Para que o Collections.sort(List) ordene o Produto pela descricao, por exemplo, primeiro implemete a Interface Comparable.
E implemente o método compareTo(Object).

public class Produto implements Comparable {

// continua o mesmo acima ...
@Override
public int compareTo(String value) {
return this.descricao.compareTo(value);
}
}


Mas por que isso deve ser feito? Bom, primeiro pois o sort ordena seus elementos a partir do resultado que retorna o compareTo(Object). Esse método tem por função retornar números inteiros negativos(não necessariamente -1), positivos (não necessariamente 1) ou zero.
Dica: se você tiver uma List de String, por exemplo, não é necessário implementar o compareTo, pois esse trabalho já foi feito pelos desenvolvedores da Sun. Isso vale para as várias classes conhecidas como Integer, Long, Double, etc.

Bom, o próximo passo é chamar o método:

public class ProdutoDao {

// atributos e construtor ...

public List findAll() {

List list = new ArrayList();
// conexão com o banco e a query ...
while (rs.next()) {
// Pegue os dados do ResultSet e adicione na lista
list.add(produto);
}
Collections.sort(list);
return list;
}
}


  • reverse(List) - Reverte a ordem dos elementos na lista.

Vamos supor a seguinte situação: Você quer os elementos de uma lista ordenados de forma decrescente. Bem, agora
que você já aprendeu a ordenar de forma crescente, basta chamar o sort(List) e depois o reverse(List).

public List findAll() {

List list = new ArrayList();
// conexão com o banco e a query ...
while (rs.next()) {
Produto produto = new Produto();
// Pegue os dados do ResultSet e adicione na lista
list.add(produto);
}
Collections.sort(list);
Collections.reverse(list);
return list;
}


  • swap(List, int, int) - Troca elementos da List a partir do índice.

Útil quando necessário algum tipo de prioridade de certo elemento, basta achá-lo e trocar de lugar com outro
usando o método swap.

// ...
Collections.swap(list, 3, 1);
// ...


No caso o elemento 3 da list foi para a primeira posição e o 1 foi para a terceira posição.

  • shuffle(List) - permuta randomicamente uma lista usando um código randômico padrão.

É ideal quando você precisa embaralhar, por exemplo, uma lista de cartas de uma baralho.

// ...
Collections.shuffle(list);
// ...


Para mais informações sobre Java Collections Framework visite: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html

8 de fev. de 2010

Boas Práticas de Programação 1

Linguagem Java

1. Ao comparar Objetos, prefira começar pelo que você tem certeza que não seja nulo. Por exemplo:




Dessa maneira você evitará o erro:
Exception in thread "main" java.lang.NullPointerException
at mad3linux.Main.main(Main.java:20)
Java Result: 1

2. Ao criar um Bean para uso com banco de dados, crie os atributos que podem receber nulo em seu valor não com os tipos primitivos com int, long, boolean, double, etc. Crie como classes. Por exemplo:



Dessa maneira o atributo telefone, por exemplo poderá receber valores nulos, e não vai ser preciso validar, por exemplo, buscas e verificar se tal valor for nulo e por um zero no lugar. Exemplo:

Se o atributo telefone tiver o valor nulo, não terá problema pois o telefone é da Classe Long, e não do primitivo long, o qual não poderia ser nulo.

Think About it!

18 de ago. de 2009

Apache Tomcat - Adicionando um usuário

· 1° passo: tomcat-users.xml

Para adicionar um usuário no Apache Tomcat basta editar o arquivo tomcat-users.xml. Este arquivo pode ser encontrado em $CATALINA_HOME/conf.
Mas antes de qualquer coisa você deve estar se perguntando: Que diabos é $CATALINA_HOME?!?!?

Deixa que eu explico.
$CATALINA_HOME é o alias para o diretório raiz do Apache Tomcat. Bem, mas isso eu não inventei; o próprio Apache foi quem convencionou assim. É uma variável de ambiente do sistema que você pode usar para assim poder instalar o Apache Tomcat onde você achar melhor.
Vamos a um exemplo prático, vá em um terminal e tente o seguinte:

$ echo $USER

Você obterá como resposta seu nome de usuário. Agora faça:

$ echo $HOME

Você verá em sua tela seu diretório home.

Bom, acho que ficou entendido. Vamos prosseguir. ;-)

Como eu disse anteriormente para adicionar um usuário no Tomcat basta editar o arquivo tomcat-users.xml que está em $CATALINA_HOME/conf (acho que agora você sabe onde fica hã? :-). Espero que você esteja usando um editor de texto no próprio terminal como nano ou vi ou vim. Digo isso porque é assim que você configuraria um servidor. Seguindo minha dica entre no diretório raiz do Tomcat e:

$ cd conf/

Liste todos os arquivos deste diretório:

$ ls -la

Você verá o seguinte:

total 104
drwxr-xr-x 3 mad3linux mad3linux 4096 2009-07-31 14:15 .
drwxr-xr-x 9 mad3linux mad3linux 4096 2009-07-31 14:12 ..
drwxr-xr-x 3 mad3linux mad3linux 4096 2009-07-31 14:15 Catalina
-rwxr-xr-x 1 mad3linux mad3linux 8690 2009-05-13 20:15 catalina.policy
-rwxr-xr-x 1 mad3linux mad3linux 3665 2009-05-13 20:15 catalina.properties
-rwxr-xr-x 1 mad3linux mad3linux 1396 2009-05-13 20:15 context.xml
-rwxr-xr-x 1 mad3linux mad3linux 3257 2009-05-13 20:15 logging.properties
-rwxr-xr-x 1 mad3linux mad3linux 6539 2009-07-31 14:15 server.xml
-rwxr-xr-x 1 mad3linux mad3linux 1205 2009-07-31 14:27 tomcat-users.xml
-rwxr-xr-x 1 mad3linux mad3linux 50757 2009-05-13 20:15 web.xml

Neste diretório estão contidos todos os arquivos de configuração do Apache Tomcat. Podemos ver o nosso arquivo na penúltima linha. Basta editá-lo com:

$ nano tomcat-users.xml

Com o arquivo aberto é possível ver dicas que o Tomcat dá sobre como adicionar usuários. Mas não confunda, as linhas onde estão supostamente adicionando usuários estão comentadas (verifique a presença do , como no html essas tags representam comentários), logo abaixo delas faça:

Para adicionar uma role (algo como função ou grupo):

<role rolename="administrador"></role>

Para adicionar um usuário no grupo:

<user username="mad3linux" password="s3cr3t" roles="administrador"></user>


MAD Dica: observe onde você está escrevendo essas novas linhas. Elas devem estar entre as tags
<tomcat-users> e </tomcat-users>.


· 2° passo: Testando se tudo deu certo.

Para ver se o usuário foi adcionado com sucesso faça o seguinte:

Inicie o servidor Apache Tomcat. Apenas abra um terminal e entre em $CATALINA_HOME/bin, por exemplo, vamos supor que você tenha instalado o Tomcat em /opt:

# cd /opt/apache-tomcat-x.x.x/bin/

e então:

# ./startup.sh

MAD Dica: para poder executar o arquivo startup.sh é necessário que ele tenha permissão de execução. Para saber isso basta digitar no terminal:

# ls -l startup.sh

A saída deve ser mais ou menos assim:

-rwxr-xr-x 1 mad3linux mad3linux 1956 2009-05-13 20:15 startup.sh

Note que para o dono do arquivo, ou seja as três primeiras depois do - (hífen), uma delas é o x. Isso indica que o arquivo possue permissão de execução.
Mas caso a saída do comando ls -l seja dessa forma:

-rw-r--r-- 1 mad3linux mad3linux 1956 2009-05-13 20:15 startup.sh

Então basta dar permissão ao arquivo. Faça:

# chmod +x startup.sh

Pronto, execute o comando ls -l de novo para ver as modificações.
Bem, mas antes que eu esqueça, faça o mesmo para o arquivo shutdown.sh, que se encontra no mesmo diretório que o startup.sh ($CATALINA_HOME/bin/). Ele serve para desligar o servidor Apache Tomcat.

Iniciado o servidor, a seguinte saída pode ser observada:

Using CATALINA_BASE: /opt/apache-tomcat-6.0.20
Using CATALINA_HOME: /opt/apache-tomcat-6.0.20
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.20/temp
Using JRE_HOME: /usr

Observe que ele detectou o caminho para o jre, justamente com a variável de ambiente JRE_HOME, interessante não?

Se algo como citado acima apareceu em seu terminal, vá em seu browser favorito (o meu é o Mozilla Firefox ;-) e digite na barra de endereço:

http://localhost:8080/

Aparecerá a tela principal de configurações do Apache Tomcat.





No menu Administration clique em Tomcat Manager.






Ele pedirá um usuário e senha. Digite de acordo com o que você configurou e clique em Ok.
Em caso positivo a seguinte tela será mostrada:



Em uma próxima postagem eu explicarei com utilizar essa parte de gerência do Tomcat.