Um aplicativo trivial em Java

Maio 3, 2008 by frsoares

Com meu tempo atribulado, hoje tive uma iluminação:

Preciso de algo para gerenciar melhor meu tempo durante o dia… já sei, vou fazer um temporizador!

Isso, e pelo fato da água da chaleira ferver demais e eu ter que re-enxê-la para fazer café. Muito chato isso - mesmo. Fui até o Eclipse, e comecei a digitar.

Quero algo em formato de pop-ups, que aparecem na tela e me diga: “Ei, hora disso.”

Pop-ups.. hum… Poderiam ser Dialogs? Surgiu uma idéia simples:

Começando com uma classe simples, chamemo-a Main.

public class Main{
}

Para podermos chamar fácil Dialogs de opções a partir dela, podemos acrescentar algo: herdando de JFrame, fica fácil de usá-la como componente pai de um Dialog de JOptionPane. Começamos a fazer sua classe principal também:

public class Main extends JFrame{
    public static void main(String[] args){
       Main m = new Main();
       m.setVisible(false);
   }
}

Ok, agora já temos um JFrame invisível. A partir deles vamos abrir pop-ups. Podemos ter um para saber quantos minutos você quer esperar, e outro para saber que mensagem ele deve retornar para lhe lembrar do que era para ser feito. Finalmente teremos um que indicará que passou o tempo.

public class Main extends JFrame{
   public static void main(String[] args){
      Main m = new Main();
      m.setVisible(false);

      String tempo = JOptionPane.showInputDialog(m,"Digite o tempo de espera");
      if(tempo==null){
      //caso da janela ser cancelada ou fechada.
        System.exit(0);
      }

      tempo=tempo.trim();
      int minutos = Integer.parseInt(tempo);

      String mensagem = JOptionPane.showInputDialog(m,
                                     "Digite a mensagem de alerta!");

      Thread.sleep(minutos*60*1000);

      JOptionPane.showMessageDialog(m,mensagem);
      m.dispose();
      System.exit(0);
      }
   }
}

O programa todo é mais ou menos isso. Na chamada de Thread.sleep, a multiplicação é feita para passar de minutos para milissegundos, medida de tempo que ele usa. Claro, algumas exceções devem ser verificadas: NumberFormatException e InterruptedException, para o parseInt e o sleep, respectivamente. Podemos florear também o retorno um pouco. O código final fica assim:

public class Main extends JFrame{
  public static void main(String[] args){
    Main m = new Main();
    m.setVisible(false);

    try{
      String tempo = JOptionPane.showInputDialog(m,"Digite o tempo de espera");
      if(tempo==null){
      //caso da janela ser cancelada ou fechada.
        System.exit(0);
      }

      tempo=tempo.trim();
      int minutos = Integer.parseInt(tempo);

      String mensagem = JOptionPane.showInputDialog(m,
                                      "Digite a mensagem de alerta!");

      Thread.sleep(minutos*60*1000);

      JOptionPane.showMessageDialog(m,mensagem,"Passados "+tempo+" minutos!!!",
                        JOptionPane.WARNING_MESSAGE);
      } catch(NumberFormatException e){
         JOptionPane.showMessageDialog(m, "Use somente "+
                 " números inteiros para o tempo!!!");
      } catch(InterruptedException e){
         JOptionPane.showMessageDialog(m, e.getMessage());
      } finally{
         m.dispose();
         System.exit(0);
      }
    }
  }
}

Quanto à dependências dos pacotes, só precisa do JFrame e do JOptionPane - nada que um Ctrl+Shift+O não resolva.

Isso, em uma classe só, é um aplicativo trivial e funcional o suficiente para eu ter me viciado nele. Já virei escravo dele para tudo que preciso. E não me preocupo mais que a água da chaleira evapore toda.

Entrada do tempo do temporizadorEntrada de mensagemRetorno do temporizador

O problema do GParted

Maio 2, 2008 by frsoares

Relatando o problema que tive com o GParted: ao instalar o Fedora em uma máquina, o instalador acusou que não conseguia redimensionar o HD, que estava todo formatado em NTFS, mas com bastante espaço livre. O que eu fiz:

  1. Bootei um live-cd do Puppy Linux.
  2. Usei o GParted dele!

Liberado um espacinho, voltei ao instalador do Fedora e consegui instalá-lo perfeitamente. Hooray for me!

Problema: ao inicializar o GRUB e tentar dar boot pelo windows(listado como “Other”), ele até parecia que iria inicializar, mas lá veio a Blue Screen Of Death - realmente igual à do artigo da Wikipedia. Logo pensei: M*rda, lasquei a formatação.

Bem, até agora não foi resolvido esse problema. Não foi necessário ainda rodar windows nessa máquina. Mas hoje, ao olhar o manual do novo release do Ubuntu, especificamente no capítulo 7, encontrei algo interessante relacionado a isso, na parte de Criar uma configuração de dual-boot. Logo no primeiro procedimento, ele diz para Desfragmentar a partição do windows. Provavelmente, por eu não ter feito isso, eu não agrupei os fragmentos do windows, e alguns pedaços dele foram pro espaço. Ó céus, por que diabos não pensei nisso?

Ficou uma lição para mim: se o instalador disser que não pode fazer, não force. Pode acabar em problemas.

Coisas descobertas essa(s) semana(s)

Abril 30, 2008 by frsoares
  1. Eu não sei reparticionar HD’s com GParted. É melhor aprender antes de tentar novamente, sob risco de perder todos meus arquivos.
  2. Após instalar o Fedora 8 (ainda não no meu pc), haviam 737 atualizações a serem feitas, o que já havia me sido profetizado.
  3. O jeito que mais me agrada para ver um código direto é: nl nomeDoArquivo | less. Mais rápido que o Notepad++, dentro do terminal, e numerado. Só falta syntax highlighting.
  4. Sim, liberando 20GB devo já conseguir instalar o Fedora. Resta lamentar as atualizações que demorarão horas a serem baixadas.
  5. O orientador de iniciação científica de minha namorada, não satisfeito em escravizá-la, quer me mandar aos trabalhos forçados também.
  6. O meu orientador não parece se importar com isso.
  7. A caminho de implementar uma simulação de máquina de Turing em Haskell(ironia: máquina de turing usando lamda-cálculo)).
  8. Meu horário de sono fica desregulado muito fácil. Um dia entre 18h e 20h, outro dia entre 4h e 6h30, e outro entre 23h e 2h. E consigo ficar mais pontual assim.
  9. Escrever se aprende escrevendo. E lendo. Por isso talvez eu coloque mais alguma coisa aqui em breve: um certo trabalho de Metodologia Científica que me atormenta.

Isso não é feito para ser entendível completamente por ninguém além de mim.

Refactoring comic

Março 25, 2008 by frsoares

Quadrinho feito por mim, a partir de idéia no livro de Martin Fowler, sobre Refactoring(refatoração). Sim, foi uma forma de mostrar o que eu faço enquanto não atualizo isto.

Refactoring - rule of 3

Quadrinho dedicado a minha nega, pois a idéia veio dela. =D

Instalando QEMU no Windows

Fevereiro 29, 2008 by frsoares

Pra começar, o Qemu é um emulador de um processador. Pra que serve? Emulando um processador de um PC, você pode usá-lo para executar qualquer sistema bootável, esteja ele em um cd, dvd ou um espaço no seu disco rígido.

Não, talvez não seja o melhor emulador do mundo. Sim, ainda estou futucando pra aprender melhor ele. Mas foi simples de instalar.

  1. Primeiro: vá em http://www.h7.dion.ne.jp/~qemu-win - nessa página você pode encontrar um binário pra Windows. Vem até com um linux linha de comando para testes. Funciona - só não muito bem.
  2. Baixar um arquivo qemu-xxx-windows.zip, onde xxx é o número da versão.
  3. Extraia o arquivo em alguma pasta.

Para usar, o mais adequado é ter uma iso de um live-cd disponível, e de preferência em uma pasta facilmente acessível(próxima) da do Qemu. Depois você pode rodar pelo prompt de comando(ou um .bat) um comando de execução semelhante a:

qemu.exe -L . -boot d -cdrom current.iso

e, voilá!, current.iso roda filé em um emulador(configurado por padrão pra 128MB).

Screenshot1 do DSLScreenshot2 do DSL Screenshot3 do DSL

Há algumas configurações e manipulações possíveis pro qemu. Mas isso pode ficar para outro post. o/

P*rra, me impressionei comigo mesmo.

Fevereiro 22, 2008 by frsoares


I am nerdier than 98% of all people. Are you a nerd? Click here to find out!

Não, eu não esperava algo assim…

versão 2.0

NerdTests.com says I'm a Nerd God.  What are you?  Click here!

Lembrei que isso existe.

Fevereiro 20, 2008 by frsoares

A-há, estou escrevendo aqui pela 2ª vez em 3 meses! Só pra mostrar que lembro que isso existe, coloquei um avatar pra mim.

Hasta luego.

System.out.println(”Meu primeiro post.”);

Novembro 1, 2007 by frsoares

Este é o primeiro post de meu blog, que espero ser sobre assuntos de tecnologia, computação, e afins, ou seja, áreas de meu interesse, que espero ser de interesse de mais alguém também. Divirta(m)-se!