Como configurei o JDK no Ubuntu 12.10

novembro 4th, 2012 | 0 comments

A Oracle deve ter algum problema com pacotes .deb, como os do Ubuntu. A instalação do Java Development Kit é complicada, mas é possível para usuários um pouco mais familiarizados com Linux.

Siga os passos abaixo (você precisará da senha de administrador, para usar o comando sudo):

  1. Baixe os quase 100MB do JDK mais recente, na p√°gina oficial;
  2. Descompacte-o numa pasta qualquer;
  3. Opcionalmente, renomeie a pasta “jdk.1.7.0_09″ (ou nome semelhante) para java (que √© mais geral, sem a vers√£o);
  4. Abra o terminal e digite: sudo mv java /usr (Isto irá mover a sua pasta java, com o JDK, para a pasta usr)
  5. Navegue da sua pasta “Documentos” para tr√°s -> “usu√°rio (seu nome)” -> “home” -> ” / “, e ent√£o entre na pasta usr.
  6. Clique com o botão direito para escolher Open terminal here;
  7. Navegue at√© a pasta ” / ” -> “etc” e procure pelo arquivo bash.bashrc;
  8. Abra o terminal nesta pasta, conforme já feito anteriormente, e digite sudo leafpad bash.bashrc (como uso o Xubuntu, o editor de texto dele é o leafpad. Se você quiser abrir o arquivo em outro editor de textos, substitua o nome usado na linha de comando);
  9. Adicione estas três linhas, ao fim do arquivo:
  • export JAVA_HOME=/usr/java
  • export CLASSPATH=$JAVA_HOME/lib
  • export PATH=$PATH:$JAVA_HOME/bin

Salve o arquivo e saia. Abra o terminal em qualquer pasta e digite¬†java -version. Se o comando for aceito ele ir√° escrever a vers√£o do java, e isto mostrar√° que ele est√° instalado corretamente. Se o comando n√£o funcional, reinicie o sistema, para carregar as novas configura√ß√Ķes do bash.bashrc. Se ap√≥s o rein√≠cio o comando ainda n√£o mostrar a vers√£o, significa que a configura√ß√£o da JDK n√£o funcionou, por algum motivo.

Arquivos .jar n√£o executam com duplo-clique

A este ponto, em caso de configuração bem sucedida, os arquivos .jar ainda não deverão estar abrindo com duplo-clique. Para que isto possa ocorrer:

  1. Clique com o bot√£o direito num arquivo .jar e v√° em “Abrir com outro aplicativo“;
  2. Clique em “Usar um comando personalizado“;
  3. Digite l√° o caminho do arquivo java, da pasta¬†bin do JRE:¬†/java/j2se/jre/bin/java -jar (n√£o esque√ßa do par√Ęmetro ” -jar”, no final).

Teste o duplo-clique sobre arquivos .jar. Veja que a op√ß√£o “Abrir com java” ficar√° dispon√≠vel no topo do menu do bot√£o direito sobre o arquivo. H√° ainda a possibilidade de rodar o arquivo no terminal, com o comando “java – jar nome-do-arquivo.jar”.

Pronto. Seu JDK est√° pronto para uso!

Eclipse

Se você precisa configurar esta JDK para abrir o Eclipse, edite o arquivo eclipse.ini, na pasta principal do eclipse. imediatamente antes de -vmargs, adicione duas linhas e salve o arquivo:

  • -vm
  • Caminho para a Java Virtual Machine. No meu caso √©: /java/j2se/bin/java
Firefox
  1. Para instalar o plugin do java no firefox, siga os passos:
  2. Navegue ate a pasta /usr/lib/firefox/plugins e abra o terminal l√°.
  3. Digite sudo ln -s /usr/java/jre/lib/amd64/libnpjp2.co (para copiar um link deste arquivo para dentro da pasta de plugins do Firefox)
Observa√ß√Ķes:
  • A pasta amd64 √© encontrada em jdk de 64 bits. Se voc√™ instalou uma vers√£o de 32 bits, o nome da pasta dever√° ser i386 ou i586
  • A recomenda√ß√£o para uso do java web start e dos applets √© com a jre de 32 bits (note que o plugin do firefox est√° na pasta jre).

HTML e acessibilidade

março 28th, 2012 | 0 comments

Ontem, estava experimentando anima√ß√Ķes e outros apetrechos da CSS3.

Três computadores ligados, carregando minha página-teste:

  1. Desktop Windows 7-64: 23 polegadas, com Chrome, Firefox 11 e Internet Explorer 9
  2. Tablet Coby Kyros MID 8024: 8 polegadas, com Dolphin HD
  3. Telefone móvel Sony Xperia Live com Walkman: 3,4 polegadas, com Opera Mini

Apanhei bastante mas descobri dois atalhos para fazer a página ter boa aparência, em todos os dispositivos. O problema principal estava na largura da página e das telas. Deixo aqui algumas dicas:

  • Prefira a propriedade max-width: ela permite que as telas maiores exibam a p√°gina na largura m√°xima, enquanto as telas menores podem redimensionar a p√°gina para sua largura padr√£o, deixando o conte√ļdo todo vis√≠vel.
  • Utilize a meta tag com name=”viewport: recomendo come√ßar experimentando o¬†content=”width=device-width”, que libera a p√°gina para se moldar √† largura da tela do dispositivo.

V√° em frente e experimente!

OBS: Nem perdi meu tempo testando anima√ß√Ķes no IE. No Opera, tamb√©m n√£o funcionou. Mas o IE tem uma frescura interessante: ele simplesmente ignora a propriedade min-width. O que ele √© quer √© uma nova folha de estilos, s√≥ para ele.

Caracteres de quebra de linha

março 21st, 2012 | 0 comments

Uma das principais motiva√ß√Ķes que tenho para escrever neste blog √© que, quanto mais escrevo, mais aprendo.

Aliás, em muitas das nossas experiências não há perda de tempo, mas aprendizado e aprofundamento.

Quando precisamos escrever algo, somos forçados organizar toda a bagunça de conceitos e experiências da nossa memória.

Não é à toa que, quando assisto aulas, ouço o professor e vou escrevendo no caderno o que entendo. Me ajuda a organizar melhor as coisas na minha cabeça.

Abaixo, escrevo mais algo n√£o posso esquecer:

Há diferenças nos caracteres de quebra de linha, entre os sistemas operacionais. São estas:

  • Windows: \r\n
  • Linux: \n
  • BSD: \r

Estes caracteres s√£o os seguintes:

  • \n : √© o caractere n√ļmero 10 da tabela ASCII (n√£o √© “ASC dois”, √© “ASC i i”). √Č o chamado line feed, ou “V√° para a linha de baixo”;
  • \r : √© o caractere n√ļmero 13 da tabela ASCII. √Č o chamado carriage return, ou “Volte para o in√≠cio da linha”.

Sem entrar na discussão de qual é a maneira mais coerente dessas três, registro que, para o Java, a quebra de linha se dá com o caractere \n (estilo Linux).

E, mais importante ainda: O DefaultEditorKit, base de funcionamento do JTextArea e afins, superclasse do StyledEditorKit (estou trabalhando com ele, nesse momento), trabalha com o \n na memória, mas quando vai salvar ou carregar um novo arquivo texto (string), ele age conforme o sistema operacional, embora nos permita definir um caractere diferente.

√Č uma informa√ß√£o importante. O texto completo est√° aqui (em ingl√™s):

Registro feito.

Aprender uma ou mais linguagens?

março 20th, 2012 | 0 comments

Acabo de ler um ótimo artigo sobre tipagem. No final, a frase:

“Utilizar uma √ļnica tecnologia para fazer tudo √© como usar somente um tipo de material para todas as partes de uma constru√ß√£o.”

Fiquei pensativo… Decidi testar isso numa pr√°tica com as linguagens humanas, para visualizar por outro ponto de vista.

Abrir o tradutor da google e testei, em 6 idiomas, a seguinte frase:

Eu vi um p√°ssaro azul na janela

Os resultados foram estes:

  1. I saw a blue bird in the window (inglês Р24 letras)
  2. Eu vi um pássaro azul na janela (português Р25 letras)
  3. Yo vi un p√°jaro azul en la ventana (espanhol – 27 letras)
  4. Ho visto un uccello blu nella finestra (italiano – 32 letras)
  5. J’ai vu un oiseau bleu dans la fen√™tre (franc√™s – 31 caracteres)
  6. Ich sah einen blauen Vogel im Fenster (alem√£o – 31 letras)

A princ√≠pio, ingl√™s foi a mais econ√īmica de todas, seguida do portugu√™s. Mas, digamos que cada palavra desta frase seja uma parte de um programa, e eu quisesse otimizar meu trabalho agregando diferentes linguagens, este seria um resultado poss√≠vel:

I vu a bird blu im janela (19 letras)

Nesta frase, h√° pelo menos uma palavra de cada idioma. Mas digamos que eu queira manter o mais “em portugu√™s” poss√≠vel:

I vi a bird blu na janela (19 letras)

Continuo com as 19 letras e consegui diminuir o n√ļmero de idiomas para tr√™s: portugu√™s, italiano e ingl√™s. Para excluir o italiano dessa lista, eu posso ganhar s√≥ mais uma letra, assim:

I vi a bird azul na janela (20 letras)

Na pr√°tica, diminu√≠ 17% de c√≥digo da frase em ingl√™s e 35% das vers√Ķes em franc√™s e em alem√£o. Num grande programa, essa economia faria diferen√ßa. Agora, estou usando apenas dois idiomas e posso lidar com as incompatibilidades de ordem substantivo-adjetivo delas (bird azul ou azul bird?).

Mas ser√° que vale a pena?

  1. N√£o seria melhor escolher uma boa linguagem e se aprofundar nela?
  2. Ou ser√° melhor aprender as seis e buscar o m√°ximo de otimiza√ß√£o, em todas as situa√ß√Ķes?

Penso que a primeira é a melhor opção.

Abrevia√ß√Ķes exageradas s√£o desagrad√°veis

março 17th, 2012 | 0 comments

A primeira vez que estudei um bloco condicional, em Python, pensei: “Mas o que √© isso?

if aposta == segredo:
        print("VOC√ä ACERTOU!!!!! O n√ļmero era {:d}.".format(segredo))
    elif aposta > segredo:
        print("Voc√™ errou! O n√ļmero secreto √© menor.")
    else:
        print("Voc√™ errou! O n√ļmero secreto √© maior.")

O que vem a ser elif? …

Abrevia√ß√Ķes s√£o chatas. At√© compensam, quando encurtam palavras longas. Mas abreviar else if para elif¬†tornou o termo incompreens√≠vel.

Me pergunto qual ser√° a explica√ß√£o para isto…

Outra abrevia√ß√£o desnecess√°ria, no Python, √©¬†str. Para a Rede Globo, √© uma equipe de F√≥rmula 1. Em Python, √© uma designa√ß√£o in√ļtil para string, porque se a declara√ß√£o de vari√°veis, n√£o exige a declara√ß√£o do tipo, str n√£o precisar√° ser utilizado para economizar c√≥digo.

Qual a vantagem em abreviar três letras e deixar o termo incompreensível? Quem aprende Python, nem sempre tem o palpite certo sobre o significado de alguma abreviação. Ou seja: a abreviação gera confusão.

Vejamos algumas das abrevia√ß√Ķes pass√≠veis de questionamento:

random.randint()
''' rand? randbol? rand = m√£o? N√£o: rand vem de random.
Economiza 2 letras.'''
len()
''' Um leigo pergunta: "O que é len?"
Um especialista em Python responde: "length."
E o leigo suspira: "Ah...". Economizou 3 letras.'''
setattr()
''' se property() e callable() n√£o foram abreviados,
porque setattribute foi? Ecenomizou 5 letras, em troca
de confus√£o.'''
println()
/* Esta é a variação Groovy/Scala do System.out... Será que
todos sabem que ln significa line? Economiza 2 letras.*/

Ent√£o, mais um ponto importante para a nova linguagem:

  1. N√£o exagere nas abrevia√ß√Ķes.

Diga não ao ponto-e-vírgula

março 17th, 2012 | 0 comments

Diga não ao ponto-e-vírgula!

Alguém pode dizer:

“Legal, posso colocar v√°rios comandos numa mesma linha!”

√Č o confronto: Ser leg√≠vel x Ter menos linhas:

if (num1 > num2) { res = num1 - num2;  num1 = res; /*Etc.*/ }

Aliás, ter menos linhas é uma coisa, ter um código menor é outra. E ser organizado é ainda outra.

Defendo a ideia de que escrever pouco código não depende de ponto-e-vírgulas, mas de uma melhor lógica de programação, da modularização do código, entre outras coisas.

Então, o foco deve ser na facilidade de leitura e escrita de código. O ponto-e-vírgula suja a aparência e é desnecessário.

Cada linha pode terminar, simplesmente, apertando-se Enter. Mas não é assim em Java, que abusa de termos na mesma linha:

public static void main(String args[]) {}
// Isso é que é ser horizontal: o gosto por linhas longas

O groovy, amigavelmente, diminui isto para:

static main(args) {}

Ao se criar uma linguagem mais simples, que tal deixar os ponto-e-vírgulas de fora? Serão dígitos a menos, no código.

E, al√©m disso, que tal tamb√©m¬†se livrar das chaves, que abrem e fecham blocos de c√≥digo? √Č desperd√≠cio de linhas (ser vertical):

private int hexToRGB(String hex) {
    return Integer.parseInt(hex, 16);
}

Pior ainda é escrever destacando a abertura de chaves em linha própria:

private int hexToRGB(String hex)
{
    return Integer.parseInt(hex, 16);
}

Para evitar isto, e ser menos vertical, basta tornar a indentação dos blocos de código obrigatória, como faz o Python:

private int hexToRGB(String hex)
    return Integer.parseInt(hex, 16)

Ah, e sem ponto-e-vírgula, pois a linha com o Enter (\n).

Os olhos agradecem pois o código ficou bem mais limpo e compreensível. Ficou menos vertical, pasando de 4 ou 3 para 2 linhas. E ficou menos horizontal, pois mais horizontal que Java deve ser mesmo impossível.

Ent√£o, temos dois pontos importantes para uma nova linguagem:

  1. Diga não ao ponto-e-vírgula!
  2. Seja menos vertical. Seja também menos horizontal.

Nova linguagem de programação

março 14th, 2012 | 0 comments

Vou criar uma nova linguagem de programação!

Ser√° que consigo? Em quanto tempo?

Concluo que as linguagens mais comuns existentes se preocupam com ambientes profissionais complexos, comerciais e lucrativos, com funcionalidades diversas e documentação muito complicada, em inglês.

E quem traduz para o português não é pedagogo, então a didática dos livros normalmente é péssima.

Já que sou professor, por que não encampar um movimento pela iniciação adequada da criança ao processamento de dados?

Num mundo onde tudo está se informatizando e virtualizando, as crianças crescem excluídas do processo. Qual o futuro de um povo, se assim continuar?

Tenho estudado algoritmos mas só tenho encontrado coisas voltadas a adultos, a ambientes universitários, e também voltado ao ambiente comercial.

Onde est√° a brincadeira, a programa√ß√£o descompromissada? E o encanto do desafio de fazer um programa in√ļtil, s√≥ para ver ele funcionar na frente dos seus olhos?

Como associar esse clima juvenil ao domínio de um computador?

E como incluir no processo a língua portuguesa?

Estou animado em me dedicar a algo novo e a mostrar aqui meus passos, minhas escolhas, se possível trocar idéias e conseguir parceiros que tenham esse mesmo interesse, como eu.

E hoje, 14 de março de 2012, é o marco zero dessa nova linguagem.

Programação para crianças 3

março 14th, 2012 | 0 comments

A orienta√ß√£o √† objetos √© organizada, linda… Mas complexa demais para as coisas simples.

Imagine uma criança de 11 anos tentando imprimir na tela o resultado de 2 + 2, tendo que criar um objeto para isso!

Para tornar tudo mais simples, proponho iniciar com uma programação imperativa.

Por exemplo, o programa se resume a uma √ļnica linha:

print(2+2)

E o programa lhe mostra o resultado: 4.

Para crianças e adolescentes, que nunca viram uma linguagem de programação na vida, os nortes ideais são:

  • Simplificar ao m√°ximo: poucas linhas e comandos (nada de objetos!)
  • Partir do que √© concreto: ver sempre resultados na tela

A orientação a objetos é um paradigma importante, mas abstrato. Vai entrar posteriormente no meu projeto de curso para crianças.

Programação para crianças 2

fevereiro 29th, 2012 | 0 comments

Um país que cresce precisa antever a demanda futura de profissionais de áreas tecnológicas. Então, criar escolas técnicas, ampliar as vagas em cursos tecnológicos, etc.

Mas olhamos para as escolas e vemos salas de inform√°ticas (quando h√°) paralisadas, com computadores envelhecendo… Quando h√° uso, √© para pesquisas na internet ou cursos b√°sicos sobre como usar o sistema operacional, o navegador ou o editor de texto.

Há um espaço vago, naquilo que é realmente aprender a trabalhar com um computador, que é dominá-lo e fazê-lo trabalhar para você.

Isso é programação: fazer o computador trabalhar para você.

Disso depende uma verdadeira informatização da sociedade. E estamos atrasados nisso.

O processo de informatiza√ß√£o das empresas √© irrevers√≠vel. O campo de trabalho √© praticamente infinito, visto que todo sistema precisa de manuten√ß√£o: amplia√ß√£o, altera√ß√£o, renova√ß√£o… No dia em que tudo for totalmente informatizado, a demanda por profissionais que saibam trabalhar com isso ser√° realmente monstruosa.

Por isso quero experimentar a programação para crianças. Como sou professor, posso contribuir com isso trazendo para a informática algo de que ela é muito carente: didática.

De modo mais amplo, uma pedagogia para facilitar a iniciação de crianças.

Como fazer a criança aprender, com o máximo de facilidade e rapidez, como fazer o computador trabalhar para ela?

Esse é o desafio. Quero buscar uma resposta.

Novo Acordo Ortogr√°fico e Python

fevereiro 29th, 2012 | 0 comments

Enquanto lia uma reportagem do jogo Brasil 2 x 1 Bósnia, de futebol, por sarcasmo, pensei na seguinte frase:

Ninguém pára o Brasil

Por causa do novo acordo ortográfico, o acento diferencial do verbo parar desapareceu. Esta frase, então, se escreverá:

Ninguém para o brasil

… O que torna a frase confusa. Embora simplifique a aprendizagem da l√≠ngua, dificulta sua flu√™ncia de leitura. A fra√ß√£o de segundo a mais, necess√°ria para interpretar a ambiguidade da frase, ser√° cumulativa num texto grande, cheio de palavras com a nova grafia. N√£o concordo com esta mudan√ßa.

Por√©m, enquanto estudo Python, agrade√ßo cada simplifica√ß√£o de c√≥digo, e cada facilita√ß√£o a quem est√° aprendendo uma nova linguagem. A falta do end (como em Lua), para fechar os blocos de c√≥digo, gera mais ou menos o mesmo tipo de problema de leitura que critico na perda dos acentos diferenciais da l√≠ngua portuguesa. √Č mais complicado saber onde cada bloco termina, embora estejam indentados.

Mesmo assim, não há palavras para agradecer um código com tão poucas linhas, como o do Python!!!

Aqui, em situação semelhante, sou a favor dessa inovação.

Que contradição!