Skip to content

Tag: tutorial

Java assertion to prevent time travelers

cc broken pocket watches
Creative Commons photo by jekemp

public class PreventTimeTravelers {
    public static void main(String args[]){
        long startTime = System.currentTimeMillis();
        long endTime = System.currentTimeMillis();
        assert endTime >= startTime: "We came back in time!";
    }
}

Please do not execute this code in a time machine.

NumberFormatException Example

NumberFormatException: Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.

An simple example:

public class SummationExample {
    public static void main(String args[]){
        int sum = 0;
        for(String arg: args){
            System.out.println("+" + arg);
            sum += Integer.parseInt(arg);
        }
        System.out.println("= " + sum);
    }
}

$ javac SummationExample.java
$ java SummationExample 1 2 3 4 5
+1
+2
+3
+4
+5
= 15

but

$ java SummationExample 1 2 3 4 five
+1
+2
+3
+4
+five
Exception in thread “main” java.lang.NumberFormatException: For input string: “five”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at SummationExample.main(SummationExample.java:6)

So

public class SummationExample {
    public static void main(String args[]){
        int sum = 0;
        for(String arg: args){
            try {
                sum += Integer.parseInt(arg);
                System.out.println("+" + arg);
            } catch (NumberFormatException e) {
                // nothing
            }
        }
        System.out.println("= " + sum);
    }
}

now

$ javac BetterSummationExample.java
$ java BetterSummationExample 1 2 3 4 5
+1
+2
+3
+4
+5
= 15

and also

$ java BetterSummationExample 1 2 3 4 five
+1
+2
+3
+4
= 10

Java Duke animated gif waving

Cannot create duplicate Solaris fdisk partitions

Eu estava com problemas para instalar o Solaris Express Community Edition b73.

Ocorria de sempre no inicio ou lá pelos 5% da instalação ela falhava. No log da instalação havia:

ERROR: Cannot create duplicate Solaris fdisk partitions (c0d0)

Isso acontecia quando eu instalava o Ubuntu e depois tentava instalar o Solaris. Quando eu tentava instalar o Solaris no disco todo não havia nenhum problema e a instalação transcorria normalmente.

Bem, o que eu acho que estava acontecendo era o seguinte. Por algum motivo o Solaris usa o mesmo código para identificar uma partição Solaris e uma partição linux-swap. Sempre que já havia alguma partição linux-swap ele iria pensar que já havia uma partição Solaris.

Para contornar isso, use uma ferramente da particionamento como o Gparted e modifique temporariamente o linux-swap para alguma outra coisa. No meu caso eu troquei para ext2.

Gparted

Depois é só instalar o Solaris normalmente e o problema não deve se manifestar sumir:

Opensolaris no notebook

Depois reformate a partição para linux-swap e torne o swap ativo:

Ativando o swap

Pronto.

Notebook Amazon PC FL 31

Como eu disse nesse outro post, eu estava procurando um modelo de notebook adequado paras minhas necessidades. Eu pesquisei bastante, colhi diversas dicas e sugestões e no final acabei fazendo uma ótima escolha, o Amazon PC FL 31.

Notebook Amazon PC FL 31
Vista frontal do Amazon PC FL 31

Nesse post eu vou fazer minha avaliação dele bem como mostrar algumas dicas para quem tem um modelo similar. Eu estou usando o Ubuntu 7.10, Gutsy Gibbon.

Monitor do sistema
O Monitor do Sistema do Gnome mostra a carga em cada core

Processador: Intel Core Duo 1.73Ghz. Cache de 1024kb. Aqui está o /proc/cpuinfo dele. O desempenho é muito bom e eu posso fazer minhas brincadeiras de computação concorrente com threads. A descrição mais detalhada, que consta no manual é: Intel Yonah FSB667 Mhz/2MbL2 Dual Core e Single Core.Memória: 1Gb de ram (). Para mim que já viva bem com 512 está ótimo e não tenho problemas em usar os meus aplicativos mais comuns, Gnome (com as extensões 3D ativadas), Firefox, Netbeans e outros aplicativos ao mesmo tempo. Mais tarde se eu quiser, eu ainda posso colocar mais um pente de 1Gb.

Tela:14.1″ WXGA TFT. É uma tela leve, com anti-reflexo e com um tamanho ideal, já que eu não gosto de monitores muito grandes. Eu uso ele com uma resolução de 1280×800 (que é bem maior do que a que eu usava no Desktop antes).

Ubuntu Compiz Cubo Gits Gimp Camera
Compiz rodando sem problemas

Vídeo: O suporte 3D está habilitado e funcionando muito bem. Foi necessário acionar o Gerenciador de Drivers Restritos. O chipset da placa mãe é Intel 945 GM + ICH7-M. O que eu tenho usado mais de suporte 3D é o Compiz que tem se saído muito bem.

Saída de vídeo

Na lateral esquerda há uma saída de vídeo para monitor externo. É um conector padrão de 15 pinos. Na Bios é possível configurar para quando você conectar no monitor externo se o LCD deverá se apagar ou não.

Saída S-Vídeo

Há também uma saída S-Video, para televisão.

Teclado do Notebook

Teclado: apesar de detestar teclados de notebook eu estou, na medida que se pode gostar de um teclado de notebook, até gostando desse aqui. As teclas não são detestavelmente leves mas também não fazem barulho.

Teclado do Notebook

A compatibilidade do Ubuntu com o teclado foi ótima, é um teclado Qwerty com cedilha e acentos. Todas as teclas de atalho estão funcionando e correspondendo com o que está escrito no teclado. Até as teclas de volume, brilho, multimídia e as teclas de chamar o gerenciador de emails e o navegador estão funcionando. Não foi preciso eu fazer nenhum configuração, funcionou de primeira.

Teclado do Notebook

A parte chata é que eles escolheram péssimos lugares para colocarem a ‘?’ e a ‘/’, preciso apertar a tecla Fn (a tecla azul de segunda função) e ‘0’ para fazer uma barra e o alt da direita e ‘W’ para fazer o ‘?’. É algo que eu ainda estou me acostumando.

Touchpad

Touchpad: funcionou bem mas como eu não faço a menor questão de usar eu comprei logo um mouse usb (de tamanho médio, para facilitar o transporte) e um mousepad bem firme. O mouse, um Genius, funcionou só plugando, sem nenhuma configuração.

Auto falantes do notebook

Som: há dois auto falantes, cada um ao lado do teclado. São bem fraquinhos mas já quebram um galho. Acho que são de 2 Watts cada um.

Microfone embutido

Há um microfone embutido, logo acima da tela. Ele não tem um alcance muito bom, então quando eu tenho que gravar algo eu uso um fone de ouvido com microfone que é mais sensível.

Saída de áudio e entrada para microfone na lateral

Além disso, na lateral direita há uma entrada de microfone e uma saída de áudio.

chave seletora do wifi

Wifi: O wifi funcionou sem problemas. No manual dizia que o wifi não iria funcionar no Linux, mas funcionou sem nenhuma configuração. Há um led indicador na frente do notebook e uma chave seletora com o ícone do wifi. Porém o led não acende (ele pisca quando eu ligo o notebook) e o comportamento do wifi não se altera quando eu ligo ou desligo a chave. Acho que é um defeito.

Drive do DVD fechado

DVD: A um drive na lateral esquerda no notebook. Eu já testei a leitura e a gravação de DVD e funcionou sem problemas. Também não foi necessário nenhuma configuração.

Drive do DVD aberto

No manual consta: combo drive 24 x Cdr W/8x DVD-ROM e DVD-Burner 4x DVD+R/-R/RW.

leds incicadores e leitora de cartão SD e MMC

Leitor de cartões: na frente do notebook há uma leitora de cartões que lê cartões SD e MMC.

leitora de cartões do notebook lendo um cartão MMC

Eu testei com um cartão MMC da Nokia, mas não aconteceu nada. A leitora funcionou que foi uma beleza. Espetei o cartão, os leds acenderam e uma janelinha saltou na tela com os arquivos. Sem configurações, sem drives, só alegria. Acho que dá primeira vez que eu tentei eu havia colocado o cartão de forma incorreta.

Entrada de rede

Rede com fios: há uma entrada de cabo de rede com fios, conector padrão RJ-45. Funcionou sem problemas.

RJ11

Há também um modem, com uma entrada para conector padrão RJ-11, na parte de trás do notebook.

Cartão PC e Cartão Express

Cartões: A duas entradas para cartões de notebook. O cartão PC (PCMCIA) e o cartão Express. Eu não tenho como testar porque não tenho nenhuma placa dessas.

Câmera integrada

Câmera: há uma câmera de 1.3 megapixels integrada. Ela não vai funcionar de primeira no Linux será necessário instalar manualmente um driver proprietário.

Se você der um lsusb você vai ver:

Bus 005 Device 002: ID 0c45:624f Microdia

A primeira coisa a fazer é baixar o pacote sn9cxxx_2.09-gutsy-1ubuntu1_i386.deb (no meu caso, que estou usando o Ubuntu 7.10). Ele está disponível aqui. Também há o mesmo driver para o Ubuntu 7.04 aqui.

Uma vez baixado, instale ele:

sudo dpkg -i sn9cxxx_2.09-gutsy-1ubuntu1_i386.deb

Agora reinicie o computador ou ative o módulo com o modprobe:

sudo modprobe sn9cxxx

Você vai notar que o arquivo /dev/video0 foi criado. Para testar a câmera você pode usar o mplayer:

mplayer tv:// -tv driver=v4l:width=640:height=480:device=/dev/video0 -vo x11

Aí está:

Eu na câmera do notebook
Sono …

A resolução está abaixo dos 1.3 megapixels já que 640×480=307200 que é 0.3 megapixels. Quando eu uso qualquer outra resolução no mplayer não dá certo, aparece só uma pequena tela, mostrando só meu rosto. :(

Obrigado ao Xisberto pela dica de como fazer essa câmera funcionar. O mesmo procedimento se aplica a qualquer outra câmera 0c45:624f Microdia.

Preço: essa foi a melhor parte no notebook. Eu comprei ele em uma promoção nas americanas.com e mesmo parcelado em 12 vezes eu consegui um desconto de 5%. Ele saiu por R$ 1.519,05 já com frete e todas as outras despesas. Não é a primeira vez que eu compro lá, a entrega é super rápida e segura, você acompanha tudo pela internet. Eu recomendo.

Quem mais comenta no seu blog?

Uma brincadeira de mão na massa com SQL e as tabelas do WordPress.

Logomarca do WordPress

Você vai precisar de:

  • Um blog em WordPress num servidor próprio.
  • Uma lugar onde você possa se conectar ao banco de dados (provavelmente o MySQL). Um terminal SSH no seu servidor ou mesmo o PhpMyAdmin servem.

Se você tiver acesso por SSH no servidor onde está seu blog, chame o prompt do mysql assim:

$ mysql -u USUÁRIO -p -h URL_DO_BANCO DATABASE

Trocando USUÁRIO por seu login no mysql, URL_DO_BANCO por a url do seu banco (geralmente 127.0.0.1) e DATABASE por a base de dados (geralmente wordpress). Em seguida será perguntada a sua senha.

Uma vez conectado dentro do seu banco de dados você pode executar algumas queries legais.

Os 10 maiores comentaristas do seu blog: você seleciona da wp_comments (a tabela de comentários do WordPress) selecionando só os nomes e agrupando pelo email do autor e fazendo uma contagem que chamados de quantidade. Também é feito uma ordenação usando o campo contagem. Aqui eu supondo que a pessoa sempre coloque seu próprio email, mas as vezes mude o nome, o que realmente acontece.

SELECT comment_author AS autor, COUNT(*) AS quantidade
   FROM wp_comments
   GROUP BY `comment_author_email`
   ORDER BY quantidade DESC
   LIMIT 10
;

Usando isso lá no banco de dados do eupodiatamatando.com que tem uns 3 mil comentários, deu o seguinte:

+---------------------------------------------+------------+
| autor                                       | quantidade |
+---------------------------------------------+------------+
| Silveira                                    |        511 |
| 2007 Janeiro 21 » Eu Podia Ta Matando       |        174 |
| Kct                                         |        133 |
| Filho                                       |         91 |
| Dora                                        |         83 |
| Leonardo                                    |         67 |
| manero                                      |         58 |
| Esdras                                      |         52 |
| Marlany                                     |         51 |
| Roney Marques                               |         50 |
+---------------------------------------------+------------+
10 rows in set (0.12 sec)

Ou seja, em primeiro lugar deu eu mesmo, com 511 comentários. Em segundo, o próprio blog com seus pingbacks. O maior comentarista mesmo foi o comentarista que se identifica como Kct.

Os 10 posts mais comentados: É necessário fazer uma junção entre a tabela dos comentários (wp_comments) e a tabela dos posts (wp_posts) usando o ID do post.

SELECT wp_posts.post_title, COUNT(*) AS quantidade
   FROM wp_comments JOIN wp_posts
   ON wp_comments.comment_post_ID = wp_posts.ID
   GROUP BY wp_posts.ID
   ORDER BY quantidade DESC
   LIMIT 10
;

A saída que eu tive:

+-----------------------------------------+------------+
| post_title                              | quantidade |
+-----------------------------------------+------------+
| Sobre o vôo 3054                        |        104 |
| Chegou o boneco do Capitão Nascimento!  |         80 |
| Vamos trocar links?                     |         74 |
| O celular Linux já está a venda         |         64 |
| O Que o Emo disse pra Ema?              |         57 |
| Bichos grandes. Falsificações?          |         46 |
| Esse ainda tem muito pra upar           |         45 |
| Entenda Heroes                          |         42 |
| Aqui pro iPhone!                        |         40 |
| Ganhe créditos de graça no celular      |         39 |
+-----------------------------------------+------------+
10 rows in set (0.11 sec)

Qual o post você mais comentou: Basta colocar um WHERE e pegar o autor que você quer, no caso, Silveira (eu). Eu coloquei um limite de 10, para pegar só os 10 posts que eu mais comentei.

SELECT wp_posts.post_title, COUNT(*) AS quantidade
    FROM wp_comments JOIN wp_posts
    ON wp_comments.comment_post_ID = wp_posts.ID
    WHERE wp_comments.comment_author = 'Silveira'
    GROUP BY wp_posts.ID
    ORDER BY quantidade DESC
    LIMIT 10
;

O resultado no meu blog foi:

+---------------------------------------------+------------+
| post_title                                  | quantidade |
+---------------------------------------------+------------+
| Vamos trocar links?                         |         20 |
| Regnum, RPG online gratúito                 |         11 |
| Promoção: Estamos Dando 97 dólares!         |          7 |
| Aqui pro iPhone!                            |          6 |
| Vamos escrever um livro?                    |          6 |
| Democracy TV Player                         |          5 |
| Formatura, novidades                        |          5 |
| Como eu consegui cancelar minha conta na Oi |          5 |
| Chico Buarque em Fortaleza                  |          4 |
| Livro Python Guia de Bolso                  |          4 |
+---------------------------------------------+------------+
10 rows in set (0.02 sec)

Se você quiser ir mais fundo nas consultas eu recomendo dar uma olhada na sintaxe do select do Mysql.

SSH sem senha

Em poucas palavras, dê o comando ssh-keygen no seu Linux. Você vai dar enter três vezes, a primeira para não mudar onde vai ser gravada a chave, a segunda para não escolher nenhuma senha e a terceira para confirmar que não vai usar senha:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/silveira/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/silveira/.ssh/id_rsa.
Your public key has been saved in /home/silveira/.ssh/id_rsa.pub.
The key fingerprint is:
f4:b3:87:32:63:3d:4a:fa:83:4c:4c:52:22:31:v7:1c

Agora copiamos a chave pública RSA para a máquina onde você quer logar sem senha. Por exemplo, eu vou cópiar para uma certa máquina certamaquina.com para o usuário também chamado silveira:

scp /home/silveira/.ssh/id_rsa.pub silveira@certamaquina.com:/home/silveira/.ssh/authorized_keys

Para usar esse scp você ainda vai ter que colocar a senha. Depois que você copiou sua chave pública para o diretório .ssh do seu usuário, com o nome authorized_keys, você pode se conectar normalmente àquela máquina. Só que agora sem usar nenhuma senha.

ssh silveira@algumamaquina.com

Há um artigo mais detalhado do procedimento pode ser visto no dicas-l.