quinta-feira, 11 de junho de 2015

Trabalhando com Clipboard (área de transferência)


Ampliando o poder do CTRL+C / CTRL+V e tirando Printscreens da tela.


A maioria das vezes que utilizamos o CTRL+C, estamos com algum texto selecionado, mas
quando selecionamos um conjunto de arquivos, diretórios ou alguma imagem ou parte dela?

O Java nos fornece o objeto Clipboard, onde conseguimos acessar essa área de transferência.
Em conjunto com DataFlavor, conseguimos determinar quais tipos de dados estão na área.

Para obter uma instância do Clipboard, pedimos ao Toolkit:

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

Uma vez com o objeto clipboard em mãos, basta saber o que está na área de transferência:

try {
 if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) {
  clipboard.getData(DataFlavor.stringFlavor).toString();
  
 } else if (clipboard.isDataFlavorAvailable(DataFlavor.javaFileListFlavor)) {
  List<File> files = (List<File>) clipboard.getData(DataFlavor.javaFileListFlavor);
  
 } else if (clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)) {
  BufferedImage image = (BufferedImage) clipboard.getData(DataFlavor.imageFlavor);
 }
 
} catch (UnsupportedFlavorException | IOException ufe) {
 Logger.getLogger(getClass().getName()).log(null, null, ufe);
}

Neste exemplo estamos verificando apenas três tipos de dados, para ver outros tipos, consulte
a documentação. Na primeira verificação, temos um texto, nada que um editor de texto básico
não aceite. Já no segundo if, verificamos se o que foi copiado são pastas ou arquivos. Por fim, se temos uma imagem, gerada pela tecla Print Screen ou uma cópia do Paint, por exemplo.

Aplicação de exemplo

Nossa aplicação consiste em “colar” texto, arquivo e imagem, conforme código de exemplo anterior, ao clicar no botão Paste. Para texto, o comportamento é o padrão de qualquer editor. Já para os arquivos, ele apenas gera quatro listagens:
  •  Caminho completo dos arquivos, separados por “;”
  •  Caminho completo separados por linha
  •  Apenas o nome dos arquivos separados por “;”
  •  Nome dos arquivos separados por linha

private void pasteFiles(List<File> files) {
  if (files.size() == 1) {
   taResult.append(files.get(0).getAbsolutePath());
   taResult.append("\n");
   taResult.append(files.get(0).getName());
  } else {
   taResult.append("Caminho completo com ';':\n");
   for (File f : files) {
   taResult.append(f.getAbsolutePath());
   taResult.append(";");
   }
 
   taResult.append("\nNomes com ';':\n");
 
   for (File f : files) {
    taResult.append(f.getName());
    taResult.append(";");
   }
 
   taResult.append("\n");
   taResult.append("\nCaminho completo:\n");
 
   for (File f : files) {
    taResult.append(f.getAbsolutePath());
    taResult.append("\n");
   }
 
   taResult.append("\nNomes:\n");
 
   for (File f : files) {
    taResult.append(f.getName());
    taResult.append("\n");
   }
  }
}
Eu, por diversas vezes, preciso do nome de diversos arquivos em uma pasta para colocar na documentação, mas você poderia por exemplo, carregar o conteúdo do(s) arquivo(s), ou outras coisas (daquele tipo de coisa que se faz com arquivos). No caso da imagem, além de exibir uma prévia, a aplicação salva a imagem no formato JPG, na mesma pasta da aplicação.

As imagens são salvas em sequência, que é útil quando se está fazendo um tutorial.

private void pasteImage(BufferedImage image) {
 BufferedImage resizeImage = new BufferedImage(lblImage.getWidth(), lblImage.getHeight(), BufferedImage.TYPE_INT_RGB);
 Graphics g = resizeImage.createGraphics();

 g.drawImage(image, 0, 0, lblImage.getWidth(),lblImage.getHeight(), null);
 g.dispose();
 lblImage.setIcon(new ImageIcon(resizeImage));

 File fImg = new File("imagem_" + count + ".jpg");
 try {
 ImageIO.write(image, "jpg", fImg);
 count++;
 taResult.append("\nImagem salva em: " + fImg.getAbsolutePath());
 } catch (IOException ex) {
 Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex);
 }
}

Print Screen + Paste


Já sabemos como trabalhar com uma imagem no clipboard, mas dependemos de alguém ter clicado na tecla Print Screen antes, sendo que já vi teclados sem essa tecla. Mas o Java nos permite simular esse clique utilizando o método createScreenCapture da classe Robot, projetada inicialmente com o propósito de facilitar testes automáticos.

...
try {
 robo = new Robot();
} catch (AWTException ex) {
 Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
...

private void print() throws HeadlessException {
 if (robo != null) {
 Dimension screenSize = toolkit.getScreenSize();
 BufferedImage print = robo.createScreenCapture(new Rectangle(screenSize));
 pasteImage(print);
 }
}

Nó tiramos um print da tela inteira (toolkit.getScreenSize()) e depois salvamos a imagem utilizando o mesmo método pasteImage, visto anteriormente. Tudo isso ao clicar no botão Print and Save.
Para deixar as coisas mais interessantes, utilizamos a classe javax.swing.Timer para capturar a tela automaticamente a cada meio segundo, isso se o checkbox Auto Print estiver marcado.

timer = new Timer(500, new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent e) {
 if (cbAutoPrint.isSelected()) {
 print();
 }
 }
});

Por fim

Com Java é fácil saber e obter o que o SO colocou na área de transferência e trabalhar com o que foi colocado lá, já saber o que fazer com isso, nem tanto. Em todo caso, qualquer editor de texto / imagem que se preze, precisa saber trabalhar com o clipboard. Vimos o objeto Robot superficialmente, mas com o que já vimos, criamos um programa para gravar a tela, facilitando a criação de tutoriais passo-a-passo (ou espionagem, vai saber...).

Você pode baixar a aplicação em https://sourceforge.net/projects/mvbostools.

PDF: https://drive.google.com/file/d/0B1rjzjT1KgoTanlfQ2dqRGNhNkk/view

Feito no NetBeans 8, o código fonte direto do SVN: https://sourceforge.net/p/mvbostools/code/HEAD/tree/Mlipboard

Java Doc:
http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html
https://docs.oracle.com/javase/8/docs/api/java/awt/datatransfer/DataFlavor.html

Marcus Becker
meumundojava@gmail.com

quarta-feira, 3 de junho de 2015

JUG TOUR BRASIL 2015 EDIÇÃO SALVADOR



Salvador vai ser uma das sedes do JUG Tour Brasil 2015. Esse evento vai acontecer nas pricipais cidades brasileiras e faz parte das comemorações dos 20 anos de Java e do retorno do JavaOne ao país
Nessa edição vamos contar com a participação de dois dos maiores evangelizadores Java no mundo.

Data: 04 de Julho de 2015
Horário: 13:00hs 
Local: Auditório da Universidade Católica do Salvador - UCSal - Campus Pituaçu, Salvador



sábado, 23 de maio de 2015

20 anos de Java!

foto twittada por Sharat Shander

Hoje, 23 de maio, o Java está fazendo aniversário de 20 anos!

É incrível como uma linguagem de programação pode  influenciar a vida, a carreira, a história de tantas pessoas e organizações.

Eu não tenho como enumerar aqui o tanto que Java me deu, gastaria hoooooras.

Vou listar só algumas coisinhas;

Por saber programar em Java fui desenvolvedor (junto com Elizier Santos), depois líder (substituindo o amigo Júlio Shinzato, da Receita Federal) da equipe do programa do Imposto de Renda Pessoa Física - IRPF.

Por causa do IRPF conheci Bruno JavaMan Souza e nos tornamos amigos.

Bruno, Juggy e Serge, JavaOne 2005

Por causa de Bruno fui apresentar o IRPF Java no Café Brasil (minha primeira palestra em um grande evento!) e depois no JavaOne 2005 (justamente nos 10 nos de Java!). De lá pra cá conheci Daniel deOliveira, Yara e Vinicius Senger, Maurício Leal, Fábio Veloso, Bruno Ghisi, Andre Faria e muita, MUITA gente da comunidade Java que hoje se tornaram amigos.

Por causa do JavaOne (eu voltaria a San Francisco mais 2x!), e da influencia de Bruno e Daniel, conheci Eduardo Bart, Ulisses Telemaco e me juntei ao JavaBahia.

JavaBahia presente no JavaOne, com cobertura completa aqui no blog!


Por causa do JavaBahia fui convidado a liderar o time do Demoiselle Framework, no Serpro, no nomento em que a v1 estava pronta e precisava criar um ecossistema de comunidade.


Por causa do JavaBahia conheci Aécio Júnior e ajudei a fundar o SertãoJUG e a realizar o I Simpósio Java do Sertão. Hoje estamos juntos em outra empreitada relacionada a ensinar programação e robótica pra crianças. (E foi ele que nos presentou a logo do JavaBahia q vc viu mais acima!)


1o Simpósio Java do Sertão em Feira de Santana, em 2008


Por causa do JavaBahia, conheci Alexandre Gomes, Manoel Pimentel, Renato Willi, Bruno Pedroso e um bocado de gente que me apresentou o mundo dos Métodos Ágeis e Empreendedorismo.

Por causa dos Métodos Ágeis fizemos o Maré de Agilidade em Salvador, evento que rodou o Brasil e de onde surgiu a ideia (e o fato!) do primeiro livro sobre Métodos Ágeis para Desenvolvimento de Software feito pela comunidade Agile brasileira.

Por causa do Maré de Agilidade e do JavaBahia resolvemos juntas as comunidades locais de tecnologia e criamos o evento e o grupo LinguÁgil. O evento continua acontecendo todo ano e uma nova geração de líderes vem se formando!

o 1o LinguÁgil em 2009

Por causa do JavaBahia, dos Métodos Ágeis e Empreendedorismo, meu mindset vem mudando completamente, com meu primo Anísio Neto fundamos a Normando Transportes.

Por causa da Normando Transportes eu virei oficialmente um empreendedor e, por causa do meu irmão Leandro Rehem eu comecei a me interessar por Marketing Digital e criei o Marketing4Nerds.com.

E por causa do Marketing4Nerds tem muita coisa boa acontecendo, mas isso fica pra outro dia :-)

VIU SÓ QUANTA COISA ACONTECEUPOR CAUSA DO JAVA?


Tudo isso aconteceu na minha vida, e isso é só um recorte que certamente deixou de fora dezenas de fatos e pessoas importantes que mereciam ser citadas (como não falar das que passarem pelo JavaBahia deixando suas marcas, como Ádamo, Lucília e o nosso atual líder pop-mega-star Otávio Santana :).

Tudo isso começou com o Java.

PARABÉNS e vida longa ao Java!

PARABÉNS a todas as pessoas que fizeram e fazem a história do Java! 

PARABÉNS a todas as pessoas que assim como eu tem o Java fazendo parte das SUAS histórias.



Quer conhecer um pouco mais sobre a história do Java?


segunda-feira, 2 de fevereiro de 2015

Linguágil 2015 - Minicursos confirmados




Aproveite os preços iniciais e os pacotes para o LinguÁgil 2015!
Visite o site do evento ( http://www.linguagil.com.br ) e acompanhe a programação completa. Veja os cursos já confirmados:


  • :: AngularJS: Um Framework para facilitar sua vida (Wilson Mendes; Google Dev Expert)
  • Aprenda na prática como é possível criar aplicações complexas com um código simples, coeso, performático e modularizado. Angularjs é um framework JavaScript construido e mantido por engenheiros do Google que fornece uma solução completa para o "client-side" de sua aplicação.



  • :: Scala: Programação funcional na JVM (Robson Peixoto, Rodrigo Ribeiro e Isabela Gonçalves; JusBrasil)
  • Conheça as vantagens de usar programação funcional com Scala, a linguagem de programação baseada na JVM que conquistou empresas como Twitter, LinkedIn e Netflix.


  • ::Bem vindo ao mundo fantástico do Xamarin (Paulo Ortins; OnceDev)
  • Aprenda como utilizar o Xamarin para desenvolver aplicações realmente nativas, usando somente C# e compartilhando até 90% do código entre as plataformas Windows Phone, Android e iOS.


  • :: Lambdas, Streams, com Java 8 e além! (Otávio Santana; JCP, JavaBahia, SouJava)
  • Conheça os recursos que virão para compor o vigésimo ano da linguagem mais utilizada no mundo! A versão 8 do Java traz melhorias de performance e novidades como Lambda, Streams e muitos outros.


  • :: Python para Zumbis (Fernando Masanori; FATEC São José dos Campos)
  • Nesse curso completamente prático você vai aprender a hackear fotos do Facebook sem autenticação, rodar games clássicos diretamente no navegador, metaprogramação 42 (resposta para tudo), resolver a seletiva Hackaton Facebook em uma linha e muito mais, usando Python 3.x, Pygame e interagindo com o GitHub.


  • :: DDD - Quando o modelo é tudo, menos trivial (Osni Oliveira; Elo7 e Caelum)
  • Aprenda os conceitos básicos sobre DDD (Domain Driven Development), como linguagem ubíqua e modelagem evolutiva e iterativa, aplicando boas práticas de Orientação a Objetos.


           Confira toda a programação em nosso site: http://linguagil.com.br/programacao.html

segunda-feira, 19 de janeiro de 2015

Notícia: I Congresso para Empreendedores Nerds (Ceonerds) - On-line e Gratuito (25 a 31.jan)!

Olá amigos do JavaBahia!
Gostaria de divulgar aqui um evento que acredito ser de interesse de alguns de vocês.
Ceonerds - I Congresso On-Line para Nerds Empreendedores - é formado por mais de 20 palestras on-line (e gratuitas!) que vão ao ar de 25 a 31 de janeiro.
Desenvolvedores, programadores, entusiastas e empreendedores compartilhando suas histórias e valiosas informações sobre negócios, empreendedorismo, startups, games, marketing e até psicologia.
Está realmente imperdível!
Alguns palestrantes vieram da comunidade Java como o Bruno JavaMan Souza, André Faria, Daniel Widldt, Klaus Wuestefeld e eu, Serge Rehem (:P), então vai ser interessante conhecer melhor a trajetória deles.
Em Ceonerds.com.br vocês podem se inscrever e saber todos os detalhes.
Peço que vocês ajudem a espalhar a ideia de alavancar o grau de Empreendedorismo Nerd no Brasil, divulgando o Ceonerds nas suas redes de contato.

terça-feira, 13 de janeiro de 2015

LinguÁgil 2015 - Local e datas confirmados!




A edição 2015 do LinguÁgil está com a data e local confirmados. O evento acontecerá de 11 a 14 de março, no SENAI Cimatec, na Av. Orlando Gomes, em  Salvador. Marque na sua agenda!

Neste ano o evento terá dois dias de mini-cursos e dois de palestras. Confira algumas atividades confirmadas:

  • Mini-curso de AngularJS com Wilson Mendes, Google Dev Expert;
  • Mini-curso de TDD com Paulo Ortins, um dos fundadores da OnceDev;
  • Mini-curso de Java 8 com Otávio Santana, um dos responsáveis pelo desenvolvimento da plataforma Java;
  • Mini-curso “Python para Zumbis” com Fernando Masanori, professor e divulgador.

  • Palestras sobre agilidade com o Rafael Miranda, fundador da He:Mobile, e Vladson Freire, fundador da OnceDev.


Mais informações: http://linguagil.com.br/


segunda-feira, 3 de novembro de 2014

Chamada para Palestras do Linguágil 2015







Está aberta a Chamada para Palestras (C4P) para mais uma edição do LinguÁgil, o evento que mistura linguagens de programação, agilidade e outros temas. Nessa edição, o evento acontece na capital baiana, Salvador. Submeta sua palestra! O evento que está previsto para o primeiro semestre de 2015, pouco tempo depois do Carnaval.


O Grupo LinguÁgil é formado por membros de diversas comunidades de tecnologia e promove a sexta edição do evento LinguÁgil. Este é um evento sem fins lucrativos que tem como principal objetivo promover a divulgação, o debate e a troca de experiências entre especialistas nacionais e da comunidade baiana, profissionais e estudantes.

Submeta sua palestra: http://goo.gl/vE1j2Z

Encerramento do C4P: 30 de novembro de 2014