Era pós-PC: realidade ou mito?

Postado em Temas polêmicos em 15/01/2012 por Allan Taborda

No post de hoje, irei falar sobre a tal da era pós-PC que tanto se fala por aí, principalmente em sites relacionados a informática e tecnologia.

Muitos da área de informática (e até de fora dela) consideram que estamos vivendo (ou estamos próximos de viver) uma era pós-PC, onde o computador tradicional estaria sendo substituído por dispositivos móveis, como smartphones e tablets. Estes acreditam que os tablets, pranchetas eletrônicas como o iPad da Apple e o Samsung Galaxy Tab, juntamente com os smartphones, celulares que rodam aplicações e um sistema operacional como o Android, o iOS e o Windows Phone 7, serão o futuro da computação e que o tradicional desktop de ficar em cima da mesa, bem como os notebooks, cada vez menos seriam relevantes pelo fato de serem dispositivos mais complexos e de dos usuários geralmente usarem funções mais básicas, como acessar a Internet, ouvir música e digitar texto, a ponto de, no futuro, serem considerados como peças de museu. Se fala em, inclusive, armazenar os dados do usuário em algum servidor remoto (em um serviço de armazenagem de dados provido por empresas como o Google ou a Microsoft) e executar as aplicações por meio do navegador web (as aplicações ficariam localizadas em sites da Internet), a chamada computação em nuvem, também conhecida pelo termo Cloud Computing.

Eu acho essa história de era pós-PC uma grande bobagem. Eu ouço essa história de era pós-PC desde antes de eu ter meu primeiro computador, em 2002, na época dos Palms, os ancestrais dos atuais smartphones. Já se falava naquela época que os PCs iriam ser substituídos por dispositivos móveis. E até hoje, milhões de PCs e de notebooks são vendidos no mundo. E não irão deixar de serem vendidos tão cedo.

Além disso, nem tudo o que pode ser feito num PC pode ser feito num celular ou num tablet. E quando dá para fazer, não é tão confortável como se estivesse usando um PC ou notebook. Por exemplo, isto que eu estou fazendo agora, escrever este texto num editor de texto simples (para depois jogar no blog) e ouvir música ao mesmo tempo. Até dá para fazer isso no meu celular, mas além do fato da bateria acabar rapidinho, o teclado do celular é muito desconfortável e, pelo fato das teclas serem muito pequenas, eu vivo esbarrando na tecla do lado e tenho que corrigir o texto, sem contar que a autocorreção do celular às vezes corrige as palavras erroneamente pelo fato de tentar adivinhar o que eu quis dizer. E jogar o texto no blog então? Os textos que eu escrevo não são pequenos não, costumam ser grandes. Seria uma tarefa hercúlea selecionar todo o texto (mesmo textos pequenos já são meio difícieis de serem selecionados, pelo que vi), copiar o texto (nem sei como fazer isso), acessar o WordPress, clicar na página correta e colar o texto. E a bagaça nem tem como dar Alt-Tab, nem pelo teclado virtual.

Isto poderia ser feito num tablet também, mas, pelo fato da tela deste ser o teclado, parte da tela é comida pelo teclado virtual, restando menos espaço na tela para visualizar o texto (isso também ocorre com os celulares, obviamente). Além disso, por esse mesmo fato da tela ser o teclado, fica desconfortável você olhar para o que você está escrevendo e digitar ao mesmo tempo.

Outra coisa que eu costumo fazer no PC é programar, desenvolver softwares. Isso eu não tenho como fazer num celular, nem num tablet. Não existem ferramentas de desenvolvimento para dispositivos móveis. Imagine só, abrir o Eclipse (programa para desenvolvimento de softwares em Java e outras linguagens) no celular. A bateria provavelmente duraria muito pouco, além da hipotética versão do Eclipse para dispositivos móveis ter muito provavelmente menos recursos que a versão desktop. Outra coisa: já perceberam que as aplicações para celulares e tablets não são feitas nos próprios dispositivos, e sim em PCs? Além de tudo isso, pela natureza dos dispositivos móveis terem suas próprias plataformas de desenvolvimento, não é possível desenvolver aplicações em qualquer linguagem, somente algumas em específico.

Alguns podem afirmar que analistas disseram que os PCs iriam dar lugar aos dispositivos móveis. Mas esses palpiteiros profissionais (analista que faz previsões nada mais é do que um palpiteiro profissional) vivem dando palpites furados e errando suas previsões assim como ocorre com uns videntes que fazem previsões para o Ano Novo. Já vi cada previsão maluca que vocês nem vão acreditar, como por exemplo, a de que o Paradox (antigo software de banco de dados, não sei se ainda existe) iria ser o futuro dos bancos de dados para Windows, ou que o Windows Phone 7 irá em alguns anos dominar o mercado de sistemas operacionais para dispositivos móveis (o que é muito provável, ainda mais que outro palpiteiro, quase que simultaneamente a isso ser dito por pelo primeiro palpiteiro, disse que o Windows Phone 7 teria só um pouco mais de mercado do que atualmente tem).

Não sei que ano foi, mas acho que foi uns anos após eu já ter meu primeiro PC, vi uma notícia que o servidor web Apache havia sido portado para o sistema operacional Symbian, usado em smartphones mais antigos (hoje em dia, o Symbian está em vias de ser abandonado pela Nokia, atual proprietária do sistema). Na mesma notícia, foi dito que analistas previam que o futuro dos servidores web seriam os celulares (ou algo assim) e que buscadores como o Google teriam um grande desafio pela frente indexando conteúdo disponibilizado por servidores instalados em celulares que pipocariam na web a todo o instante. Até hoje essa previsão não se concretizou, e pelo jeito, nunca irá se concretizar. Quem aqui instala servidor web no celular? Alguém já viu uma pessoa instalar um servidor web no celular?

Os dispositivos móveis não irão substituir os PCs e notebooks, e sim coexistir com eles. Pode ser que, no futuro, os PCs evoluam para um dispositivo que permita fazer tudo o que se faz num PC e possua vantagens sobre este (ou seja substituído por um dispositivo semelhante). Mas ser substituídos pelos dispositivos móveis, isso certamente não irá ocorrer. Para mim, essa tal geração pós-PC seria, na verdade, uma geração pós-hegemonia do PC, não pós PC. E pode ser até que os tablets saiam de moda e caiam no esquecimento, podendo talvez desaparecer do mercado e/ou serem substituídos por outro badulaque tecnológico da moda (mas não é certo que isso ocorra, pode ser que a moda acabe mas continuem a existir tablets).

Sobre a chamada Cloud Computing, isso poderia ser um tema para um próximo post, mas basicamente, acho que a computação em nuvem também irá coexistir com a computação tradicional, uma vez que nem sempre é desejável manter os dados todos num servidor remoto, além de outras razões que irei explanar num outro post dedicado a este assunto.

É basicamente isso que eu acho dessa papagaiada de pós-PC. O post termina aqui. Até o próximo post, que poderá ser visualizado, assim como este e os demais, em um dispositivo móvel, uma vez que o WordPress possui uma interface própria para estes dispositivos. Só fazer comentários no post é que não é tão confortável, pelo que vi…

Crítica à crítica contra a corrupção

Postado em Temas polêmicos em 02/01/2012 por Allan Taborda

No primeiro post de 2012 deste blog, irei falar sobre uma mensagem compartilhada por alguns dos meus contatos do Facebook há alguns dias atrás, um pouco antes do Natal, uma mensagem na qual eu discordo (irei explicar o porquê). A mensagem, na forma de uma imagem de um palhaço à esquerda e um texto à direita, compartilhada originalmente por um perfil do Facebook intitulado “Campanha rir para não chorar”, dizia o seguinte, com letras maiúsculas e com a última frase em letras verdes: “Se todos brasileiros reagissem contra a corrupção da mesma maneira que se indignaram com o caso da enfermeira que matou o Yorkshire, com certeza teríamos um país muito melhor. Corrupção também mata.”

Em primeiro lugar, essa afirmativa, além de demagogóide, é completamente falsa. Nós não teríamos um país muito melhor, assim como a reação do povo indignado com o caso da mulher que matou o Yorkshire não adiantou nada, pois a mulher recebeu apenas uma multa, além de ter deixado de ser ré primária.

Em segundo lugar, o povo já se indigna com a corrupção, principalmente toda vez que um caso de corrupção pinta nos noticiários (principalmente nos últimos anos, que o partido da situação é repudiado pelos donos dos meios de comunicação, algo que não ocorria na época do FHC, na qual a corrupção também havia, mas os meios de comunicação faziam vista grossa e não noticiavam alguns indícios de irregularidades, pois os governos do PSDB e partidos afins são apoiados pelos donos dos meios de comunicação). Tal indignação por si só não adianta nada.

A segunda afirmação, escrita em letras verdes, também é falsa e demagogóide, pois até hoje, nunca, em nenhum lugar do mundo, foi emitido um atestado de óbito no qual a causa mortis do defunto foi corrupção.

Além do texto demagogóide, a figura do palhaço com cara de bunda à esquerda do texto é igualmente demagogóide. Virou um clichê botar figuras de palhaços e de pessoas com nariz de palhaço em mensagens protestando contra a corrupção, bem como em protestos em geral. Até quando ocorreu o caso do bullying à Geisy Arruda teve uns coiós com nariz de palhaço no campus da Uniban onde ocorreu o bullying, protestando contra sei lá o quê.

Mas então, como ter um país melhor e sem corrupção? Prender os corruptos resolveria o problema? Resposta: descobrir todos os casos de corrupção, abrir processo penal contra todos os corruptos (nas esferas federal, estadual e municipal, no executivo, no legislativo e no judiciário) e condená-los à prisão por um tempo proporcional aos crimes que cometeram seria uma solução eficiente, mas não eficaz, porque político corrupto é igual a site de torrent de conteúdo ilegal, tira-se um do ar e aparecem outros.

A corrupção de alguns políticos (uma minoria deles, que faz um estrago enorme apesar disso) é um mero reflexo da nossa sociedade. O pessoal que é eleito para cargos políticos nada mais é do que pessoas como nós, parte da nossa sociedade que se candidata e é eleita pelo povo para seus respectivos cargos.

Uma boa parcela do povo, sempre que possível, tira vantagem sobre alguém ou outros das mais diversas maneiras. Ao acharem carteiras perdidas, ainda com a identificação dos donos, não as devolvem e se apoderam de seu conteúdo. Ao pegarem emprestado livros, CDs, jogos de XBOX 360, objetos diversos, dão um jeito de não devolverem o artefato em questão. Ao venderem morango na feira, botam adoçante nos morangos a serem servidos aos eventuais trouxas que irão comprar a mercadoria para parecer que o morango é mais docinho a fim dos trouxas adquirirem os morangos pensando que eles são realmente docinhos. Ao venderem carne no açougue, botam carne bonita na vitrine e empurram sebo aos compradores após estes comprarem a carne. Ao fazerem o policiamento nas ruas, aceitam propina (ou até propoem receber propina) de traficantes e outros que estão fazendo algo fora da lei.

Isso ocorre devido a uma pseudo-cultura que diz que o mundo é dos espertos, a famigerada lei de Gerson, que diz que se deve levar vantagem em tudo, a cultura do “tirei o meu da reta, então foda-se”. O chefe não vai descobrir que eu estou acessando a Internet para fins alheios ao trabalho em pleno horário de expediente? Então que se dane, eu vou acessar! Ninguém tá vigiando os comes e bebes de um coffee-break alheio? Eu vou é encher a pança! Não vai dar em nada se eu empurrar os outros e passar na frente desses outros ao embarcar na estação Sé, na hora do rush? Então dá-lhe cotovelada e empurrão! Não há fiscalização a respeito de jogar lixo nas ruas da cidade? Então tome bituca/papelzinho de bala/casquinha de sorvete/panfleto/outras porcarias no chão, e depois a culpa é do Kassab (substitua o Kassab pelo prefeito da sua cidade, caso não resida na capital paulista) que não limpa os bueiros (que não foi ele que sujou, mas que se dane) e não faz as obras necessárias para conter as enchentes! E por aí vai…

E isso não ocorre apenas no Brasil, o famoso jeitinho brasileiro é, na verdade, jeitinho mundial. Países como Nigéria, Rússia, Índia, Itália e até os Estados Unidos são acometidos pelo jeitinho mundial por parte de seus respectivos povos. E a corrupção política também rola nesses países todos, teve uma vez que deu no Jornal Nacional, há uns anos atrás, a descoberta de um escândalo de corrupção em não sei em que governo no qual descobriram até pagamento de implante de silicone para a namorada do corrupto, tudo com dinheiro público. E a corrupção se estende até para fora da esfera política: um caso vergonhoso de combinação de resultados em competições futebolísticas na Itália em 2006 acabou em pizza (me parece que apenas um time foi rebaixado para a segunda divisão e de resto, ficou por isso mesmo) e há atualmente indícios de corrupção na FIFA.

A solução para o fim da corrupção, ainda que utópica, seria uma reforma da sociedade mundial (ou pelo menos da brasileira, se a intenção é apenas acabar com a corrupção do nosso país), uma mudança de mentalidade partindo de cada um de nós individualmente, com cada um de nós deixando de dar uma de espertos em cima dos outros. Se isso hipoteticamente acontecesse, ainda que os políticos corruptos não fossem presos, os mesmos, com uma mudança em suas mentalidades, deixariam de ser corruptos, devolvendo o que roubaram (caso seja possível) e não praticando mais seus delitos.

Claro que isso é tão fácil de acontecer quanto o Corinthans ganhar duas Libertadores em um mesmo ano e mais fácil ainda do que o Padre Quevedo admitir que o Inri Cristo é a reencarnação de Jesus (e o mesmo brigar com o parapsicólogo dizendo que não é o Jesus reencarnado, e sim um sósia lunático). Ainda assim, convido a você, seja um adepto da lei de Gerson ou não, a refletir acerca dos impactos das pequenas passadas de perna em outros na sociedade em geral. E peço para, se possível, deixar de ser um adepto da lei de Gerson, deixar de se dar bem em cima dos outros de forma desonesta com uma bela duma Troll Face na cara, abandonar a mentalidade de que o mundo é dos espertos. Sempre é tempo de mudar para melhor e deixar de repetir os erros do passado, como eu mesmo fiz e venho fazendo a cada erro que eu percebo que eu cometi. Eu mesmo, há anos atrás, já dei um jeito de passar na frente na fila do correio (e a fila era gerenciada por meio de senhas eletrônicas). Hoje eu sei que isso é ruim para todos que esperam na filas do correio, até mesmo para mim, já que isto legitima outras pessoas a passarem na minha frente.

Vou encerrando este post com um link que achei na Internet que fala acerca da corrupção em países ricos, mais precisamente nos Estados Unidos, para verem que não é só nos países pobres como o nosso que a corrupção é uma praga. Segue o link:

http://www.advivo.com.br/blog/luisnassif/a-corrupcao-nos-estados-unidos

Até o próximo post, que será postado não sei quando!

Obtendo o Debian (ou outras distros) usando o Jigdo

Postado em Tutoriais em 22/11/2011 por Allan Taborda

Desde Outubro de 2005, eu vendo pela Internet o Debian GNU/Linux, antigamente em CD (eram 14 CDs do Debian 3.1), posteriormente eu passei a vender também a versão em DVD e, com o aumento da quantidade de CDs nos quais o Debian é composto (atualmente são mais de 50, na atual versão 6.0), atualmente vendo apenas a versão em DVD, composta por 8 DVDs.

Cada vez que o projeto Debian lança uma atualização do conjunto de CDs/DVDs da distribuição, ou quando uma nova versão é lançada, lá vou eu baixar as novas imagens de instalação (atualmente, só as de DVD). Entretanto, eu não baixo tudo de novo quando sai uma atualização, ou mesmo quando é lançada uma nova versão. Eu utilizo o Jigdo para baixar as imagens ISO. Na minha opinião, o Jigdo é a melhor opção para obter as imagens de instalação do Debian (e de algumas outras distribuições também). E hoje, irei explicar como usar o Jigdo para baixar as imagens do Debian, aproveitando (ou não) partes de uma mídia de instalação mais antiga ou pacotes baixados anteriormente na hora de instalar atualizações de segurança da Internet, pelos repositórios do Debian.

O Jigdo trabalha da seguinte forma: ao invés dele baixar a imagem ISO propriamente dita, o Jigdo baixa os arquivos contidos na mesma, na sua maioria pacotes do Debian, e depois de baixar os arquivos, sempre de 10 em 10 (de 5 em 5 na versão para Windows), os adiciona a uma imagem ISO temporária que, ao término do download de todos os arquivos, se torna uma imagem ISO idêntica à que pode ser baixada dos servidores do Debian.

O Jigdo pode ser instalado no Debian/Ubuntu com o comando “apt-get install jigdo-file”, executando o mesmo com privilégios de root. Há também pacotes para outras distribuições, como o Fedora (consulte a documentação da distribuição em específico para saber como instalar o Jigdo) e até uma versão para Windows, que é meio bugada e eu não recomendo.

Uma vez instalado o Jigdo, para cada imagem ISO que quiser baixar, será necessário baixar dois arquivos, um com a extensão .jigdo e outro com a extensão .template, este sendo maior que o primeiro. Esses arquivos podem ser obtidos no site do Debian, na sessão de downloads dos arquivos para baixar o Debian com o Jigdo. Há também, em alguns repositórios na Internet, arquivos do Jigdo para versões antigas, para caso, por algum motivo, você precise de uma versão mais antiga do Debian.

O Jigdo é um programa em modo texto, mesmo na versão para Windows, que é executada pelo prompt de comando. Uma versão em modo gráfico chegou a ter seu desenvolvimento iniciado, mas não chegou a ser concluída. Na verdade, nem o Jigdo em modo texto é atualmente desenvolvido, visto que seu desenvolvedor encerrou seu desenvolvimento. Outros desenvolvedores atualmente trabalham num clone do Jigdo escrito em Python, que virá a substituir o Jigdo original.

Para executar o Jigdo, usa-se o comando: “jigdo-lite nomedoarquivo.jigdo”, com os arquivos .jigdo e .template no mesmo diretório que o comando é executado. Então, serão mostradas as informações acerca da imagem a ser gerada após os arquivos serem obtidos e aparecerá um prompt “files to scan”, neste prompt, você poderá informar o caminho de um diretório contendo pacotes do Debian, que pode ser inclusive o caminho do ponto de montagem do DVD, caso opte por usar um DVD já gravado do Debian (aí o caminho ficaria algo como /media/cdrom).

Eu costumo usar imagens ISO antigas para obter novas imagens ISO pelo Jigdo. Com um comando tipo “mount -t iso9660 -o loop imagem.iso /mnt/iso” (o diretório /mnt/iso deve ser previamente criado, e pode ser qualquer diretório, até mesmo um dentro do diretório de usuário, de preferência vazio), que deve ser executado com privilégios de root, é possível montar imagens ISO para que seu conteúdo possa ser escaneado pelo Jigdo, aproveitando os arquivos existentes nas mesmas.

Após escanear todos os diretórios desejados (eu escaneio o conteúdo de todas as imagens de DVDs antigas e mais o diretório /var/cache/apt/archives, onde ficam as atualizações de segurança baixadas pelo gerenciador de pacotes do Debian, e às vezes as imagens de DVD da versão i386 do Debian, caso eu tenha obtido essas primeiro e esteja obtendo a versão amd64 a fim de obter os novos pacotes que são comuns a ambas as versões), você pode dar Enter no prompt “files to scan”, o que fará o Jigdo a exibir o prompt perguntando de onde o restante dos arquivos deverá ser baixado. Você pode informar “http://ftp.br.debian.org/debian/” e dar Enter, e então os arquivos restantes serão baixados, de 10 em 10, automaticamente do servidor brasileiro do Debian. Caso deseje baixar a partir do servidor estadunidense do Debian, substitua o “br” por “us” na URL anteriormente informada. Caso prefira o servidor alemão, substitua por “de”, caso prefira o servidor francês, substitua por “fr” e assim por diante. O servidor brasileiro costuma ser mais rápido para quem está situado no Brasil.

Ao final do download dos arquivos restantes, ou mesmo após escanear os diretórios, caso todos os arquivos tenham sido obtidos, a imagem ISO estará completa. Então, o Jigdo verificará a integridade da mesma, calculando seu checksum. Caso a imagem esteja íntegra (em 99% das vezes está), aparecerá a mensagem “Checksum matchs, image is good!” e a imagem estará pronta para ser gravada num DVD (ou num CD, caso seja uma imagem de CD, ou num disco BluRay, caso seja a imagem de BluRay, que só é distribuída pelo Jigdo ou por BitTorrent) ou usada para instalar o Debian numa máquina virtual.

O Jigdo, apesar de ter sido projetado especialmente para ser usado para obter imagens do Debian, pode ser usado para obter imagens ISO de outras distribuições, como o Fedora, caso haja a opção de baixar a distribuição pelo Jigdo, isto é, caso haja arquivos .jigdo e .template relativos às imagens ISO para serem baixados.

Então é isso. Caso tenha ficado com alguma dúvida do processo de obtenção de imagens ISO pelo Jigdo, escreva a mesma na sessão de comentários deste post.

O possível fim do CD

Postado em Música, Temas polêmicos em 07/11/2011 por Allan Taborda

Hoje eu irei comentar acerca de uma notícia recente que saiu na Internet em alguns sites de notícias, a notícia de que, no final de 2012, as gravadoras iriam deixar de lançar CDs, passando a vender música apenas por meio de download digital. Seria o fim da venda de música em mídia física praticamente, a não ser edições especiais de colecionador, como ocorre atualmente com o disco de vinil.

Há muita gente que já não compra mais CDs e prefere baixar as músicas de seus artistas preferidos pela Internet, seja em lojas de músicas on-line ou, na maioria das vezes, por “vias não-oficiais”, como os torrents e sites que oferecem discografias completas. Há outras pessoas que continuam a comprar CDs, mas muitas vezes pegam os CDs e convertem para MP3 (ou para outros formatos) a fim de ouvirem no computador ou no MP3 player (celular, iPod, etc), e em muitos casos, guardam o CD e acabam não mais o escutando, escutando apenas os MP3 copiados do CD. Outros ouvem os CDs mesmo, independente de copiarem as músicas para o PC ou não. E em muitos casos, o CD é obtido por “vias não-oficiais”, os chamados CDs piratas.

Por essas e outras, o CD muitas vezes é tido como um formato de distribuição de músicas obsoleto. Muitos já previam que um dia o CD ia deixar de existir, principalmente os nerds, que preferem tudo digital ao invés de gravado em mídia física, até filmes, que muitas vezes demoram horas para o download terminar e ainda faz o usuário ter o trabalho de buscar legenda em sites de legendas (e algumas vezes não achar as legendas, ou achar legendas fora de sincronia e/ou com erros de português), trabalho esse que não teria se comprasse o DVD/BluRay original.

E hoje, vi na Internet que as gravadoras, pelo fato do CD já não dar mais o lucro esperado, iriam disponibilizar os álbuns dos cantores e das bandas tudo por meio de download digital, por meio das lojas de músicas on-line. Só haveriam uns poucos lançamentos em CD, como edições de colecionador, vendidos pela Amazon e/ou alguma outra loja tipo a Amazon. Na verdade, as gravadoras ainda não se pronunciaram oficialmente acerca disso, parece que há apenas rumores disso acontecer.

Tem gente até comemorando que isto vai possivelmente acontecer, pessoas que ouvem apenas música baixada da Internet, dizendo que já sabiam que isto ia acontecer. Mas o fato é que, na minha opinião, o fato do CD deixar de existir pode acabar sendo algo muito ruim para muita gente que gosta de ouvir música, inclusive para os que preferem a música no formato digital. Vou explicar o porquê.

A maioria das lojas on-line de músicas vendem as mesmas com a chamada proteção contra cópia, que impede que você escute as músicas em outros dispositivos, como num MP3 player portátil ou outro computador, permitindo apenas escutar a música no dispositivo onde a compra foi feita, e/ou limita o número de cópias para apenas alguns dispositivos, e/ou força você a escutar a música apenas em determinados players de áudio, todos eles sendo softwares proprietários e de código-fonte fechado, muitas vezes tendo versão apenas para Windows, o que impossibilita escutar a música em players em software livre ou em distribuições GNU/Linux.

Como se isso não bastasse, muitas lojas on-line de músicas vendem as mesmas em formatos proprietários, como o WMA e o AAC, pois os mesmos suportam proteção contra cópia, ao contrário do MP3 ou do OGG. Por esses formatos serem fechados, sem documentação e/ou protegidos por patentes, apenas alguns players nos quais o fabricante possui acordo com o detentor dos direitos intelectuais sobre o formato de áudio possuem suporte aos mesmos. Outros podem até ter suporte, mas fazendo a implementação por meio de engenharia reversa e tentando não violar nenhuma patente, o que faz com que a implementação alternativa não seja tão boa quanto a original (apesar disso, há implementações alternativas que acabam se saindo melhores que as implementações oficiais).

Citei os que compram CDs e os convertem para MP3 (ou para outros formatos). Com o fim dos CDs, isto não irá mais poder ser feito e o usuário será forçado a usar o formato de áudio da loja de aplicativos. E provavelmente não vai poder converter para outro formato, já que haverá a proteção contra cópia. E como provavelmente alguma gravadoras terão seus lançamentos condicionados a apenas uma loja de músicas on-line devido a acordos de exclusividade, o usuário não irá poder escolher uma loja concorrente a fim de comprar a música de sua banda favorita.

Até os que baixam as músicas por “vias não-oficiais” irão sair perdendo, já que esses “lançamentos não-oficiais” são originários de cópias de CDs, que não possuem proteção contra cópia.

Mas quem irá sair perdendo mesmo serão os fãs do CD, que gostam de manusear a mídia física e olhar o encarte do CD, que gostam de olhar na caixinha a lista de músicas do CD e que são “ouvintes de música à moda antiga”. Pode parecer idiotice para alguns, sobretudo para os que preferem baixar as músicas pela Internet, mas para quem gosta do bom e velho CD, não há nada melhor do que o mesmo, ainda que o usuário por ventura também o copie para o PC. Eu mesmo sou um fã dos CDs, ainda que eu os copie (mas não os redistribua em cópias digitais) para meu notebook.

A música digital não tem tanta graça quanto um CD. Não tem nem encarte o bagulho. E nem dá para ostentar a coleção na parede utilizando suportes afixados na mesma ou outro lugar onde a coleção possa ficar armazenada. E não me venham dizer que a música digital pode ser gravada em CD virgem, pois a graça não é a mesma, tem tanta graça quanto um CD pirata sem encarte e de baixa durabilidade.

Se o CD fosse uma mídia física de baixa durabilidade (como as fitas cassete) ou de manuseio difícil (como os discos de vinil, que também possuem sua legião de fãs e que existe até hoje, principalmente em edições de colecionador), ainda poderia ser um motivo para os CDs terem sua fabricação descontinuada, mas esse não é o caso.

Espero que essa notícia não se confirme e que, no futuro, eu ainda possa comprar CDs das minhas bandas e cantores favoritos. Se a notícia se confirmar, será uma grande perda para os amantes da música.

Erros irritantes cometidos por programadores Java, parte 2

Postado em Atividades profissionais em 15/10/2011 por Allan Taborda

Este é o segundo post sobre erros irritantes cometidos por programadores Java. No primeiro post, citei seis erros relacionados a comparações entre valores e objetos. Neste segundo post, irei falar sobre outros nove erros também muito comuns, mas que devem ser evitados a todo o custo.

A numeração dos erros começa do 7 porque está continuando a numeração anterior, que parou no 6. Se houver um terceiro post sobre erros irritantes cometidos por programadores Java (e tá na cara que irá ter, pois há outros que deixarei para posts futuros, já que este ficou muito grande), a numeração começará do 16, continuando a numeração deste post.

7) Usar um loop com um contador (variável crescente de um em um) para iterar pelos valores de um List, acessando-os pelo método get: Seria o famoso for(int c = 0; c < list.size(); c++) valor = list.get(c); apesar de haver variantes ligeiramente diferentes, como decrescendo o contador ou usando o loop while e uma variável a parte como contador. Essa maneira de iterar pelos valores funciona bem para arrays, mas pode causar perda de performance em Lists, ou até comportamentos inesperados na lógica da iteração, caso objetos sejam removidos do List. Somente itere por um List dessa forma caso o mesmo seja com certeza um List baseado em array, como o ArrayList ou o Vector, e que não haja jeito do List ser baseado em outra implementação, como o LinkedList, que é baseado em lista encadeada, não em array, o que causaria perda de performance pelo fato de todos os objetos, desde o começo (ou o fim, o que estiver mais próximo) do List até a posição acessada, serem acessados, já que não há como acessar um objeto diretamente, a não ser que o objeto seja o primeiro ou o último da lista. E nunca remova valores do List, pois os valores seguintes serão recuados em uma posição, fazendo a iteração “comer” um valor a cada remoção de objeto do List. A não ser que o contador seja decrementado a cada remoção de objeto.

A maneira correta de se iterar por um List, bem como qualquer outra coleção do Java Collections Framework, é usando o loop for incrementado, algo como for(String s : list) valor = s; ou usando um Iterator, que pode ser obtido invocando o método iterator das coleções do Java. Na Internet, há vários exemplos ensinando a usar o Iterator e seus métodos, não é nada complicado. O Iterator possui a vantagem de permitir a exclusão de objetos usando o método remove.

8) Remover objetos de uma coleção sem ser pelo método remove da classe Iterator: Caso remova um objeto da coleção sem ser pelo Iterator, no caso de loops idiotas que citei no erro 7, a iteração pode “comer” um valor (a não ser que o contador seja decrementado) e, caso ocorra na maneira correta de iterar por uma coleção, será lançada uma ConcurrentModificationException, pois o Java não terá como saber qual a sequencia correta da iteração.

9) Suprimir o tratamento de uma Exception verificada: Se uma determinada Exception é verificada (isto é, que não extende a classe RuntimeException e, por isso, necessita que a mesma seja tratada num bloco try-catch), logo ela necessita que ela seja tratada de alguma forma. Ela é verificada por algum motivo, se ela não precisasse ser tratada, ela seria uma Exception não verificada.

Suprimir o tratamento de uma Exception verificada pode fazer com que um erro que ocorra no programa passe despercebido, ferrando com a lógica do bagulho. Se uma Exception é verificada, deve ser tratada, nem que seja para mostrar uma mensagem de erro.

10) Usar objetos sincronizados desnecessariamente: Objetos sincronizados seriam os pertencentes a classes sincronizadas, isto é, que foram implementadas de modo que os objetos delas podem ser acessados por threads simultânas sem ocorrer inconsistência nos valores dos mesmos. Exemplos de classes sincronizadas são a Vector, a Hashtable e a StringBuffer. Acontece que essas classes possuem performance inferior em relação às suas contrapartes não sincronizadas (ArrayList, HashMap e StringBuilder, em relação às três que citei). Somente se houver acesso concorrente que tais classes devem ser usadas.

11) Concatenar Strings com sinal de adição: A cada vez que uma String é concatenada com outra, mesmo se existir mais de uma concatenação em uma mesma linha, uma nova String será criada, poluindo o pool de Strings com Strings desnecessárias. Vale lembrar que, uma vez que uma String é criada no pool, ela só sairá de lá quando o programa for encerrado. Use a classe StringBuilder para concatenar Strings, passando-as como parâmetro do método append e depois pegando o resultado da concatenação pelo método toString. Isto evita lixo no pool de Strings e faz a concatenação ter performance melhor.

Pior que simplesmente concatenar Strings com sinal de adição, é passar duas ou mais Strings sendo concatenadas com sinal de adição como parâmetro no método append da classe StringBuilder. Se já está usando StringBuilder, por que vai concatenar com sinal de adição, se poderia passar cada uma das Strings separadamente pelo o método append?

12) Programar de forma procedural: Java é uma linguagem orientada a objetos, não é uma linguagem procedural, onde o código descreve um procedimento do início ao fim, num bloco enorme de código. Mas ainda assim, há programadores que não separam os códigos responsáveis por cada tarefa em métodos distintos e botam tudo num método só, programando de forma procedural no Java e não aproveitando a orientação a objetos, que tem como principal finalidade (ou uma das principais finalidades) o reaproveitamento do código. Colocar tudo num método só acaba prejudicando a manutenebilidade do código, fazendo-o ser um código de manutenção mais difícil, além de prejudicar seu posterior reaproveitamento.

13) Repetir o mesmo código várias vezes em um programa: Isto prejudica a manutenebilidade e a possibilidade de reaproveitamento do código. Se isto estiver acontecendo, é melhor escrever um método com o código e chamar este método em todos lugares onde o código repetido estava. São para isto que os métodos servem.

14) Não separar o código do software e misturar código de telas gráficas com código de acesso a banco de dados e com código de outras regras de negócio: Isto prejudica bastante a manutenebilidade e a possibilidade de reaproveitamento do código, ao ponto deste, em muitos casos, virar um lixo. Aí, quando precisa dar manutenção no programa, é aquela tristeza. Mexe numa coisa e estraga outra, pois uma coisa tá colada na outra. Vai tentar aproveitar um código em outro lugar e não dá, pois o mesmo tá acoplado com outra parte que não tem nada a ver.

O código de um software deve ser sempre separado em pelo menos três camadas: a de negócios, que contém a regra de negócios do programa; a de persistência, que contém o código relativo a acessos ao banco de dados; e a de apresentação, que contém o código das telas gráficas (ou o código relativo à geração do HTML, caso este seja uma aplicação web). O software pode ser separado em apenas duas camadas, caso este não possua acesso a banco de dados (por exemplo, uma calculadora). E somente se o software for muito pequeno que o código pode ficar tudo junto (por exemplo, um programa que calcula o índice de massa corporal, que faz apenas isso, um único cálculo, seria só uma tela pequena com dois campos para informar peso e altura e outro para exibir o IMC e um cálculo a ser feito).

15) Usar classes e métodos depreciados ou obsoletos: Se estão marcados como depreciados (isto é, com a anotação @Deprecated), significa que seu uso é desencorajado e que há alternativas melhores de se chegar a mesmo resultado, com outros métodos e classes. Os métodos depreciados só continuam existindo por questões de retrocompatibilidade com aplicações antigas, da época que estes métodos não estavam depreciados, e não devem ser usados em novos códigos.

Classes nas quais não foram marcadas como depreciadas mas que sabe-se que são obsoletas (como as classes StringTokenizer e Stack, onde consta no próprio Javadoc das classes que as mesmas são obsoletas) devem ter seu uso evitado, pois há alternativas melhores a elas. A StringTokenizer, por exemplo, ficou obsoleta após passas a existir o método split da classe String, que é mais simples. Já a Stack foi substituída pelas classes que implementam a interface Deque, que possui métodos equivalentes aos da Stack e possuem performance melhor por não serem sincronizadas.

Bom, por hoje é só, mas futuramente, irei escrever pelo menos mais outro post acerca de erros cometidos por programadores Java, que será a continuação deste aqui, assim como este post foi a continuação do outro post, que foi a parte 1.

Apanhado de assuntos sortidos

Postado em Idiotices em 19/09/2011 por Allan Taborda

O post de hoje será um miscelânea de vários assuntos.

Num comentário sobre o primeiro post que fiz sobre o Robowebert Player, me pediram para enviar por e-mail o código-fonte do pequeno player que fiz antes do que estou fazendo agora, que só toca MP3 e possui poucas linhas de código. Enviei o e-mail com os fontes, mas o mesmo voltou. Neste caso, e também para o caso de mais alguém quiser ver os fontes do primeiro player que fiz, aí estão os dois arquivos de código-fonte, sendo o primero a classe principal, que contém o método Main, e o segundo sendo a parte gráfica.

http://pastebin.com/i4iYFPfL

http://pastebin.com/1t9u52Vt

Este player funciona em conjunto com a biblioteca JLayer, que implementa o suporte ao formato MP3. Esta biblioteca pode ser baixada em:

http://www.javazoom.net/javalayer/sources.html

Por falar no Robowebert Player, este continua a ser desenvolvido no meu tempo livre e já possui muitos recursos novos implementados, como o suporte a múltiplas bibliotecas de músicas, o salvameto e o carregamento de playlists compactadas com GZIP e a possibilidade de arrastar músicas e/ou playlists do desktop diretamente para a lista de reprodução. Mas ainda não há uma previsão de quando ele será disponibilizado ao público geral, visto que ainda faltam recursos básicos. Mas eu posso enviar o código-fonte dele para quem quiser, basta me contrar por meio de um comentário neste ou em outro post sobre o player.

Depois de alguns anos com o mesmo celular, no qual eu o tenho desde 2005 e que foi o primeiro que eu tive (um Nokia 2112, fabricado em 2004), eu comprei um celular novo, um Galaxy 5, da Samsung, que vem com o sistema oparacional Android. Estou gostando bastante desse meu novo celular. Ele tem muitas funções legais que o outro não tinha, como rádio FM, acesso à Internet, câmera digital embutida, ouvir músicas em MP3, configurar um toque de celular em MP3, instalar aplictivos, dentre outras funções. Só a função de despertador que dexou a desejar, uma vez que esta só funciona com o celular ligado. Como despertador, permanecerei usando meu celular antigo, que agora só serve para isso e como lanterna, já que ele tem uma lanterna na parte de cima.

Ainda falando do meu novo celular, apesar de ter visto na Internet que a bateria do modelo que eu comprei dura pouco, até que a bateria do meu está durando bastante. Vai ver porque eu não fico a toda hora mexedo no celular como fazem algumas pessoas. Eu mais fico com ele em stand-by ou escutando música com o fone de ouvido.

No painel de controle do WordPress, há a exibição de estatísticas, que incluem os termos pesquisados pelos motores de busca que fazem os usuários chegarem ao meu blog. O pessoal que chega no meu blog usando vários termos diferentes, muitos deles pesquisando sobre o golpe 419 (no qual foi tema de um post meu recentemente), sobre tocar áudio em Java, sobre obter ou atualizar o Debian GNU/Linux, sobre como gnhar moedas no Come2Play, sobre software para identificar números primos, sobre proteção de tela que gera falsas telas azuis, e mais uam infinidade de coisas. Tem até termos nos quais eu não me lembro de ter postado nada a respeito, como Miley Cyrus deletando conta no Twitter, comprar projetor que não seja caro e algoritmo em C# para traduzir do português para o inglês (e eu nem programo em C#).

Mas um termo de busca recorrente está me deixando intrigado: muitas pessoas chegam ao meu blog perguntando ao buscador para que serve banana com aveia. É espantoso o povo usar o Google para perguntar algo tão óbvio, algo que, teoricamente, todo mundo já sabe a resposta. Mas caso alguém não saiba pra que serve banana com aveia, eu respondo para que serve banana com aveia: serve para comer.

Este blog está cada vez tendo uma maior audiência, com cada vez mais pessoas acessando a cada dia. A média de acessos é de cerca de 25 acessos diários, chegando a 38 em alguns dias (pouco comparadoa grandes sites, mas bastante para os meus padrões). Meu outro blog, o dos Sonhos do Allan, tem bem menos acessos, cerca de 3 por dia, 50 por mês, em média. Mas teve um dia, o dia 6 de setembro, que houve 53 acessos a este blog, bem mais que costuma ocorrer neste meu blog principal em um dia. Acho que alguém deve ter gostado do blog e deve ter tuitado o link.

Por falar em Twitter, continuo não tendo Twitter, e nunca terei. E acredito que o Twitter será enclipsado pelo Facebook, que também possui um serviço de microblogging interno, que no qual possui recursos mais interessntes e não é limitados aos claustrofóbicos 140 caracteres. E o usuário ainda pode fazer com que as atualizações em seu Twitter apareçam em seu Facebook.

Com certeza, irá acontecer com o Twitter o mesmo que aconteceu com o ICQ e que está acontecendo com o Orkut. Há alguns anos atrás, todo mundo tinha Orkut. Hoje em dia, o que vejo é que um monte de conhecidos meus não têm mais Orkut ou não abrem mais seus perfis, além de comunidades do Orkut outrora badaladas passarem a ficar às moscas. E o ICQ então? Muita gente usava, era o “mensageiro padrão” do povo. Hoje, quem usa ICQ, tirando alguns russos? A mesma coisa irá ocorrer com o Twitter, que possui um único serviço apenas, que é o de microblogging, ao contário do Facebook, que possui alguns serviços vinculados, além dos famigerados aplicativos. E até o próprio Facebook acabará deixado de lado um dia, embora isso demorará mais para ocorrer.

Por hoje é só, até o próximo post, no qual abordará, provavelmente, mais erros irritantes cometidos por programadores Java.

Erros irritantes cometidos por programadores Java, parte 1

Postado em Atividades profissionais em 03/09/2011 por Allan Taborda

No post de hoje, eu irei falar sobre alguns erros muito comuns cometidos por programadores Java ao codificarem seus programas. São erros estúpidos que costumam me irritar bastante quando vejo um no meio do código. São erros que podem provocar desde o desperdício de recursos (memória, principalmente) até comportamentos inesperados que podem resultar em erros nos aplicativos.

A intenção era de colocar outros erros além desses seis, mas o post acabou ficando muito comprido e os outros erros ficarão para futuros posts. Então, acabei por colcar neste post apenas erros relacionados a comparações de igualdade.

Este post (e os próximos com a mesma temática deste) tem por finalidade alertar programadores (tantos os iniciantes como os experientes, que, como todo ser humano, também cometem erros) para que estes deixem de cometer esses erros. Seguem os erros abaixo:

1) Comparar Strings com dois sinais de igual (==): Esse é um dos erros muito comuns cometidos pelos programadores Java. Comparar Strings com == presumindo que comparações de Strings iguais (com a mesma sequencia de caracteres) feitas dessa maneira sempre retornará true (ou seja, que a condição é verdadeira) pode provocar erros de lógica, pois a comparação pode muito bem retornar false (ou seja, que a condição é falsa). Isto porque comparar Strings com dois sinais de igual (ou melhor, comparar qualquer objeto com dois sinais de igual) significa que você está verificando se as duas referências aos objetos apontam para o mesmo objeto, ou seja, você está verificando se os dois objetos (as duas Strings, neste caso) são, na verdade, o mesmo objeto. Como novas instâncias da classe String podem ser criadas com o comando new (assim como qualquer instâncias de qualquer classe), e o comando new sempre resulta na criação de um novo objeto, e como não dá para garantir que uma String vinda vai saber de onde é uma String declarada com um literal de String (uma String que é declarada com seu valor entre aspas) ou resultante de um comando new, então não é garantido que uma comparação com dois sinais de igual irá retornar true caso as Strings sejam iguais.

Ao invés de comparar Strings com dois sinais de igual, o correto é comparar as Strings com o método equals. Basicamente, pega-se uma das Strings e chama-se o método equals nessa String, passando como parâmetro a outra String, que vai ser comparada com a primeira a fim de verificar se ela é igual à outra. Caso as Strings sejam iguais, ainda que sejam objetos diferentes, o método equals retornará true.

Objetos String até podem ser comparados com dois sinais de igual, desde que tanto a String da esquerda do == quanto a String da direita, ou devem ser literais de String, ou devem ser String resultantes de uma chamada do método intern de outra String, ou então deve ser uma referência cujo valor foi sabidamente atribuído (e sem ter jeito de não ser) ou a um literal de String, ou a uma String resultante de uma chamada do método intern de outra String. O método intern sempre retorna uma String do pool de Strings da máquina virtual igual à String de onde o método foi chamado, ou a mesma String, caso ela seja uma String do pool de Strings.

2) Comparar números encapsulados por objetos numéricos wrappers com dois sinais de igual (==): É o mesmo problema de comparar Strings com dois sinais de igual, já que os objetos podem ser diferentes. Com números inteiros até o 128 não há problema, pois números até o 128 são armazenados num pool de inteiros pela máquina virtual (poucos programadores sabem disso), entretanto, como não é garantido que um objeto de uma classe wrapper de um tipo numérico representa um número menor ou igual a 128, é melhor não arriscar e fazer a comparação com o método equals. Ou então pegar os valores resultantes de chamadas aos métodos da própria classe wrapper que retornam o número propriamente dito (armazenado em um tipo primitivo, não em um objeto), como o método intValue, que retorna um número inteiro de 32 bits (o popular int), e fazer a comparação com dois sinais de igual, pois daí você estará comparando os valores numéricos em si, que não são objetos. Utilizar os métodos que retornam números em tipos primitivos permite que sejam feitas comparações entre objetos wrappers de tipos diferentes, como Integer e Long, por exemplo.

3) Comparar dois objetos de uma classe implementada pelo programador com o método equals, mas sem sobreescrever o mesmo: O método equals pode ser chamado a partir de qualquer objeto e tem por finalidade verificar se o conteúdo do objeto em questão é igual ao conteúdo do objeto passado como parâmetro. Em classes escritas pelo programador que estão sujeitas a terem seus objetos comparados entre si a fim de verificar se são iguais, o programador deve sempre sobreescrever o método equals, implementando um algoritmo que efetue a comparação dos atributos da classe em questão, verificando se o conteúdo dos atributos é igual ao conteúdo dos atributos do objeto a comparar.

Caso o programador não sobreescreva o método equals padrão que é herdado da classe Object (a classe mãe de todas as outras classes Java, que possui métodos comuns a todas elas), a comparação é feita com a implementação padrão provida pela classe Object, que… Adivinhem! Compara os objetos com dois sinais de igual! Ou seja, compara se os dois objetos são, na verdade, o mesmo objeto. Aí, caso os objetos tenham os mesmos valores em seus atributos, a comparação poderá retornar false, caso os objetos sejam diferentes.

4) Sobreescrever o método equals, mas não sobreescrever o método hashCode: caso desses métodos seja sobreescrito, o outro também deve ser, pois o contrato de ambos os métodos (não irei explicar aqui o que é um contrato de um método, caso não saiba, acho que o Google pode lhe ajudar, assim como me ajuda quando eu não sei algumas coisas) diz que, caso a comparação entre dois objetos pelo método equals retorne true, o retorno do método hashCode de ambos deve ser igual. Atenção: isto não significa que objetos com valores diferentes não devem ter o mesmo hashCode. Sobreescrever o método equals e não sobreescrever o método hashCode pode resultar em resultados imprevisíveis caso o objeto em questão seja utilizado em alguma classe que chame ambos os métodos internamente, como as classes do Java Collections Framework, que são as populares coleções do Java (classes ArrayList, LinkedList, HashSet, HashMap, etc).

5) Armazenar um objeto de uma classe implementada pelo programador em uma coleção ou um Map sem implementar os métodos equals e hashCode dessa classe: as classes do Java Collections Framework fazem uso massivo desses dois métodos a fim de saber se um objeto possui os mesmos valores de outro, principalmente as classes que implementam a interface Map (HashMap, TreeMap, LinkedHashMap, ConcurrentHashMap, etc), que usam o valor retornado pelo método hashCode para posicionar o objeto dentro do mapa de objetos que foram postos dentro do Map. Caso um dos dois métodos deixe de ser implementado, um objeto da classe em questão pode se perder dentro do Map (entrar e não sair mais), já que, na hora de recuperar o objeto, é verificado o retorno do método hashCode a fim de saber onde o objeto está em relação ao mapa, além de eventualmente (dependendo das implementações dos Maps e de quais métodos forem chamados) haver comparações com o método equals a fim de saber se um determinado objeto é igual a outro. Isso vale para todas as classes do Java Collections Framework, mesmo para Lists (ArrayList, LinkedList, Vector, etc), uma vez que alguns métodos fazem uso do equals e do hashCode em seus objetos armazenados, como o método contains, que verifica se um objeto está contido na lista comparando cada um com o método equals.

6) Comparar String ou números encapsulados por objetos numéricos wrappers ou qualquer objeto usando um ponto de exclamação e um sinal de igual (!=): um ponto de exclamação e um sinal de igual é o contrário de dois sinais de igual, ou seja, verifica se dois objetos (ou dois tipos primitivos) são diferentes. Do mesmo modo que comparações com == presumindo que isto faz comparar se o valor dos objetos é igual podem zicar com o funcionamento de um programa, comparações com != presumindo que isto faz comparar se o valor dos objetos é diferente também não é uma boa ideia, apesar de que objetos cujas comparações entre si com o método equals retornem false são sempre objetos diferentes. Isto porque, do mesmo modo, presume-se que comparações com != entre objetos iguais retornem false, quando podem acabar retornando true na hipótese dos objetos serem diferentes. Neste caso, usa-se o método equals com um ponto de exclamação à esquerda do objeto cujo método equals está sendo chamado. Isto faz com que o retorno do método equals seja “invertido”, ou seja, faz retornar false quando o método retorna true e vice-versa. Aliás, o ponto de exclamação à esquerda de qualquer método que retorne um valor boolean (true ou false) sempre “inverte” o retorno desse método.

Bom, por hoje é só, mas futuramente, irei escrever melo menos mais um post acerca de erros cometidos por programadores Java, que será a continuação deste aqui.

Golpe 419, agora em português do Brasil!

Postado em Idiotices em 22/08/2011 por Allan Taborda

Talvez você já tenha ouvido falar no golpe 419, um velho golpe aplicado por nigerianos inescrupulosos que, por incrível que pareça, muita gente ao redor do mundo ainda cai nessa, principalmente nos Estados Unidos, onde o povo costuma ser mais ganancioso. Houve até gente que foi até a Nigéria receber o suposto dinheiro a  receber e acabou sendo assassinado.

Não irei explicar a fundo o que seria o golpe 419 (vcê pode pesquisar no Google sobre “golpe 419″), mas basicamente seria algo semelhante ao golpe do bilhete premiado, onde a vítima tem que pagar não sei quanto para receber uma montanha de dinheiro, a diferença é que, ao invés de ser um prêmio de loteria, seria um dinheiro desviado de um ditador africano ou algo assim (há diferentes histórias contadas pelos golpistas).

Há anos e anos, desde que me conheço por internauta, venho recebendo e-mails com esse golpe, dizendo que eu posso ficar rico com dinheiro de algum país africano daqueles, tendo que, para isso seguir as instruções do e-mail. Os e-mails sempre vinham escritos em inglês. Mas, pela primeira vez, hoje recebi um e-mail desses, mas em português.

Segue o texto do golpe:

ESTOU PROCURANDO POR SUA AJUDA .

Quinta-feira, 26 de Setembro de 2002 20:53
De:
“Sr Salif Sanou” <salifsanou@hotmail.com>
Para:
salifsanou@hotmail.com
Da mesa de
Sr. Salif Sanou
Gestor do fundo e Auditoria na Conta  departamento de Banco Da Africa  Ouagadougou , Burkina Faso .
Caro amigo,
Eu sabia que este mail pode ser uma grande surpresa para voce e para a tentação de ignorar como nao graves poderia vir a sua mente, mas por favor tem uma maneira de considerar esta proposta de negocios e aceita-lo depois de le-lo com muito cuidado.
Eu tenho um negocio que vai ser benefico para nos dois , eu sou o gestor do fundo e auditoria  na departamento conta de Banco Da Africa , Ouagadougou  Burkina Faso , resolvi entrar em contato com voce sobre essa transacao comercial ,eu tenho devidamente organizadas para a melhoria da minha auto aqui no nosso banco , apos o meu antecessor no escritorio desviados fundos.
Bem,eu lidar com todos os nossos fundos de capital de clients investidores e pagamento do contrato investidores e eu secretamente extraida/removido a certa quantidade de nossos do cliente o máximo retorno e desviar o dinheiro para uma conta de cliente antigo, que também tem uma conta no nosso banco desde 2002 o total de dinheiro desviado para a conta do ex-cliente é um saldo de marginal de $ 6.6 milhoes (seis milhoes seiscentos mil )dalares americanos.
Eu procurar o seu consentimento para me ajudar a recuperar / transferir esse dinheiro para fora do nosso banco de seu país ,por aplicando como o parente mais proximo para herdar esse dinheiro porque assume que o dono do dinheiro é morto e nenhum corpo esta vindo para reclamar o dinheiro sob custodia e seu nome parecido com o nome no arquivo.
Voce vai aplicar-se um associado e parente do proprietario do dinheiro sob custodia .
Se voce aceitou a proposta, por favor responda para mais detalhes e qual será a sua propria quota de participacao como parente mais proximo para reivindicar esse dinheiro .
Estar ciente de que eu não sabia antes, eu tenho o seu contacto na minha busca por uma relacao de confiança / digno de confiança alguem que vai me ajudar a recuperar este dinheiro, Imediatamente eu  deparei com o seu perfil, meu mente e meu instinto  diz que você vai nao enganar ou trair-me quando esse dinheiro sera transferido para sua conta e entao eu uso espírito de compreensão para voce escolher.
Obrigado.
Sr. Salif Sanou
Gestor do fundo e Auditoria na Conta
departamento de  Banco Da Africa Ouagadougou , Burkina Faso
Por favor tenha paciência comigo para o idioma portugues pobre, esperando ouvir de voce.

Caso recebam e-mails como este, seja em inglês, português ou qualquer idioma, pode ter certeza que é golpe! E dos grandes!

PS: Percebi, um pouco antes de clicar no botão de postar este post, que a data do e-mail está como tivesse sido enviado em 2002, entretanto, eu recebi este e-mail hoje, em 22 de Agosto de 2011. Geralmente, quando a data do e-mail está errada, provavelmente o mesmo foi enviado em massa, através de um servidor que envia spam.

Software calculador de números primos

Postado em Idiotices, Lazer em 28/06/2011 por Allan Taborda

Numa quarta-feira, no intervalo do primeiro jogo da final da Taça Libertadores da América (eu assisti aos dois jogos, mesmo eu não torcendo para o Santos), desenvolvi um esboço de um software calculador de números primos em Java e, dias depois, dei uma aprimorada rápida no programa, melhorando seu algoritmo. Basicamente, ele verifica indefinidamente os números (apenas os ímpares, já que os pares, com exceção do 2, não são primos) a fim de saber se eles são primos e os salva numa coleção persistível. Ele apenas calcula, não permite visualizar os números primos encontrados (essa parte eu irei fazer posteriormente). O que farei com os primos encontrados eu ainda não sei, talvez eu faça cálculos para descobrir quais pares de números primos são gêmeos (os que a diferença entre eles é 2) ou algum gráfico bidimensional (com eixo X e Y), ou outra ideia qualquer que irei ter no futuro.

Esse programa é mais uma nerdice que eu fiz no meu tempo livre.

O código-fonte do programa (que é o mais rápido que eu já fiz até hoje, tirando uma calculadora furreca de IMC que fiz em 2005) pode ser visto em http://pastebin.com/QYVCskbm e a licença do código é a GPLv3.

Cocô ralado na tapioca?

Postado em Idiotices em 13/06/2011 por Allan Taborda

Minha mãe comprou um saco de massa de tapioca da marca Sabor à Brasileira, uma massa de colocar na frigideira e fazer tapioca. Aí eu fui dar uma olhada na embalagem do produto e percebi que o indivíduo que escreveu o texto da embalagem se confundiu e colocou o acento circunflexo no lugar errado…

Cocô ralado na tapioca?

Cocô ralado na tapioca?

Até enviei um e-mail para o fabricante acerca desse equívoco na embalagem. Eles têm que mudar esse rótulo aí. Vai que alguém, motivado pelo que está escrito no rótulo, acaba comendo tapioca com fezes!

A verdade sobre a cobra que morreu após morder seio de modelo israelense

Postado em Idiotices em 24/04/2011 por Allan Taborda

Há algum tempo atrás, começou a circular um vídeo (e cópias desse mesmo vídeo) no qual uma modelo israelense recauchutada e peituda chamada Orit Fox foi mordida no seio por uma cobra após a modelo encarar e lamber essa cobra. Na ocasião, Orit Fox estava participando de uma brincadeira num programa de rádio (ou algo assim) na qual ela tinha que beijar a cobra. Não irei colocar o vídeo aqui, mas cópias deste podem ser encontradas aos montes no Youtube após fazer uma pesquisa por “Orit Fox”.

Após o vídeo bombar na Internet, surgiram boatos de que a cobra, após morder o seio da mulher, morreu intoxicada pelo silicone. Inclusive, essa informação conta na notícia que foi veiculada no portal de notícias G1, na seção Planeta Bizarro. A notícia pode ser vista no link a seguir:

http://g1.globo.com/planeta-bizarro/noticia/2011/03/cobra-morde-peito-siliconado-de-modelo-em-programa.html

Entretanto, a cobra, ao contrário do que muitos pensam, não morreu, como pode ser visto neste vídeo onde a modelo Orit Fox reencontra a cobra que lhe mordeu (em hebraico, com legendas em inglês):

Neste vídeo, ela fala que a mordida não chegou a furar o implante de silicone. Além disso, a equipe de reportagem mostrou a cobra que mordeu o seio da Orit Fox à mesma e esta perguntou se é a mesma cobra que havia lhe mordido, e o homem disse que sim, disse também que não era para beijar a cobra dessa vez.

Desmentido o boato, o post termina aqui.

Tutorial de atualização do Debian 5.0 para a versão 6.0

Postado em Tutoriais em 07/03/2011 por Allan Taborda

No último fim de semana de Fevereiro, atualizei o Debian instalado no meu notebook para a versão 6.0, codinome Squeeze, lançada há um mês. Segui as instruções contidas no próprio site do Debian, que podem ser acessadas em http://www.debian.org/releases/stable/amd64/release-notes/ seções 4 e 5. Neste post, fazei um resumo das instruções de atualização da versão 5.0.8 para a versão 6.0, uma versão simplificada do tutoriala original, que é mais extenso e tem outros detalhes. Este tutorial foi testado na versão 64 bits do Debian (amd64), mas deve funcionar para a versão 32 bits (i386) também. Todos os comandos devem ser executados como root e recomenda-se não usar o aptitude no lugar do apt-get para rodar os comandos (isso consta no tutorial do site do Debian).

1 ) Tecle Ctrl+Alt+F1 para ir para o console em modo texto e logue-se como root.

2 ) Instale todas as atualizações lançadas para a versão 5.0 (codinome Lenny) até a versão 5.0.8:

apt-get update
apt-get upgrade

3 ) (Opcional) Caso possua um conjunto de DVDs do Debian (oito, no total), insira um dos DVDs no leitor de DVDs e use o comando abaixo para adicioná-lo à lista de repositórios:

apt-cdrom add

Repita o processo para todos os DVDs.

4 ) Edite o arquivo /etc/apt/sources.list com um editor de texto, alterando todas as referências a “lenny” para “squeeze”. Eu usei o nano como editor de texto.

5 ) Mate o modo gráfico (não sei sei isso é realmente necessário, mas o seguro morreu de velho):

killall gdm

6 ) Atualize os pacotes para os do Squeeze (isto não atualizará todos os pacotes, mas é assim mesmo):

apt-get update
apt-get upgrade

7 ) Instale o kernel do Debian Squeeze:

apt-get install linux-image-2.6.32-5-amd64

A linha acima é específica para a versão 64 bits do Debian. Para verificar o nome correto do pacote a ser instalado, use o comando:

apt-cache search linux-image-2.6

E instale a versão com nome semelhante à versão que já está instalada no sistema, que irá apacecer no comando acima também.

8 ) Instale a nova versão do udev (e atualize os pacotes antes, para instalar mais atualizações que puderem ser feitas após a atualização do kernel):

apt-get upgrade
apt-get install udev

No meu sistema Debian, ao tentar atualizar o udev, o apt acusou problemas de dependências com o pacote libc6-i386, que era dependência do Wine. Neste caso, desinstale o pacote (isso irá desinstalar todos os programas que dependem dele, como o Wine, mas estes podem depois serem reinstalados):

apt-get remove libc6-i386
apt-get install udev

9 ) Rode o comando abaixo, que irá, de fato, atualizar o Debian para a versão 6.0:

apt-get dist-upgrade

10 ) Substitua o GDM antigo para o novo GDM, que virá por padrão no futuro GNOME 3 e que é muito melhor do que o antigo:

apt-get install gdm3

Este comando não só instalará o novo GDM, mas também desinstalará o GDM antigo.

11 ) Aproveite para remover pacotes inúteis, que eram dependências de outros pacotes mas que agora não são mais necessários, e, novamente, verifique (antes e depois de remover os pacotes inúteis) se não há mais nenhum pacote a ser atualizado:

apt-get upgrade
apt-get autoremove
apt-get upgrade

12 ) (Opcional) Ao final do processo, quando abri o GNOME, achei a fonte usada na interface meio esquisita e resolvi instalar a fonte do Ubuntu, que é mais bonitinha. Entretanto, ela não está disponível nos repositórios do Debian. Aproveite para instalar a fonte do Ubuntu agora com os comandos:

wget -c http://ubuntu.mirror.cambrium.nl/ubuntu//pool/main/u/ubuntu-font-family-sources/ttf-ubuntu-font-family_0.69+ufl-0ubuntu1_all.deb
dpkg -i ttf-ubuntu-font-family_0.69+ufl-0ubuntu1_all.deb

Apesar o pacote ser para o Ubuntu, não há nenhum problema de instalá-lo no Debian, pois ele depende apenas de qualquer versão do pacote defoma (já instalado por padrão no Debian). Mas lembre-se de desinstalar este pacote caso, no futuro, você vá atualizar o Debian para a versão 7.0, codinome Wheezy, quando esta for lançada.

13 ) Reinicie o sistema, selecionando a opção do Grub para repassar para o Grub 2, que é o boot loader do Debian 6.0. Em seguida, selecione a opção para iniciar o Debian com o kernel 2.6.32-5, o kernel novo.

14 ) (Opcional) No GNOME, caso tenha instalado a fonte do Ubuntu, altere a fonte usada nas janelas, nas configurações de fontes do GNOME.

15 ) Repita o passo 1 e rode o comando abaixo para remover o antigo kernel da versão 5.0 do Debian:

apt-get remove linux-image-2.6.26-2-amd64

A linha acima é específica para a versão 64 bits do Debian. Para verificar o nome correto do pacote a ser removido, use o comando:

apt-cache search linux-image-2.6

E remova a versão com nome semelhante à nova versão que foi instalada no sistema, que irá apacecer no comando acima também.

16 ) Caso possua outros sistemas operacionais instalados no computador, teste o Grub 2 para ver se ele inicia estes outros sistemas, para isso, repita o passo 13, selecionando os outros sistemas ao invés do Debian.

17 ) Caso a inicialização dos outros sistemas tenha funcionado normalmente, atualize o Grub em definitivo para o Grub 2 com o comando:

upgrade-from-grub-legacy

Caso a inicialização de algum sistema tenha falhado, você pode tentar consertar a configuração do Grub 2 (isto está além do escopo deste tutorial) ou pode continuar usando o Grub antigo, ignorando a opção de repassar para o Grub 2.

E isso é tudo. Caso deseje consultar um tutorial mais detalhado acerca da atualização do Debian para a versão 6.0, consulte o manual oficial no link do início deste post, que é bem maior e tem outros detalhes.

Truque para embarcar mais rápido na estação Sé do metrô de SP na hora do rush

Postado em Idiotices em 25/01/2011 por Allan Taborda

Hoje eu irei ensinar um truque para embarcar mais rápido no metrô de São Paulo, mais precisamente na estação Sé (o truque funciona em outras estações também, citei a estação Sé porque esta é a pior de todas), nos horários onde mais pessoas estão usando o serviço metroviário, que são por volta das 8:00 mais ou menos (no caso dos que desejam embarcar na linha azul, sentido Jabaquara) e por volta das 18:00 (no caso dos que desejam embarcar na linha vermelha, sentido Corinthians-Itaquera).

O truque em si é bastante idiota, mas bastante eficiente. Consiste, basicamente, em pegar o metrô no sentido oposto ao sentido congestionado, andar uma estação (ou mais de uma, caso a estação seguinte também esteja lotada) e depois pegar o metrô no sentido desejado. Como o tempo gasto para andar uma ou mais estações no sentido contrário e voltar é menor do que o tempo de espera para conseguir embarcar no sentido congestionado, além do fato de não precisar passar tanto aperto ao embarcar,  acaba sendo mais vantajoso usar este truque.

No caso da hora do rush na parte da manhã, para embarcar na linha azul sentido Jabaquara, como a estação São Bento é bastante tranquila, então uma estação só no sentido contrário já basta. Já na hora do rush no fim do dia, para embarcar na linha vermelha sentido Corinthians-Itaquera, dependendo da sorte, pode ser que dê para embarcar na estação República, entretanto, essa estação costuma ser meio cheia, não tanto quanto a estação Sé, mas é meio lotada também. Neste caso, é melhor descer na estação Anhangabaú ou mesmo na estação Santa Cecília, caso a estação Anhangabaú também esteja meo cheia. Vale lembrar que o sentido oposto ao Corinthians-Itaquera também é um pouco congestionado, mas bem menos do que o sentido Corinthians-Itaquera.

Eu usei este truque no curto período que eu fiquei hospedado na casa da minha tia, um período de três semanas, em Julho de 2009, qaundo eu comecei a trabalhar em São Paulo. Essa minha tia mora na Zona Leste da capital paulista e eu tive que enfrentar a temida hora do rush para ir e voltar do trabalho, tanto na parte da manhã quanto ao fim do dia de serviço. E eu conseguia economizar um tempo com esse truque, ainda que o trajeto total (ônibus e metrô) ainda demorasse mais de uma hora. Depois das três semanas, a minha mãe e a minha tia se desentenderam e eu acabei pagando o Alexandre Pato, tendo que sair de lá. Então, durante alguns meses, fui ao serviço por meio de um ônibus fretado, viajando algumas vezes em pé quando este lotava. Depois, passei a alugar um quarto perto do serviço, onde estou hospedado até o presente momento.

Por hoje é só, e, caso precisem passar pela estação Sé na hora do rush, não deixem de utilizar esta dica!

Feliz Natal!

Postado em Uncategorized em 23/12/2010 por Allan Taborda

Venho, por meio deste post, desejar um Feliz Natal e um Próspero Ano Novo a todos os internautas que eventualmente acessam tanto este blog quanto o blog onde eu posto meus sonhos!

Aproveitando este post, vou aproveitar para informar algumas coisas.

A conta no Twitter twitter.com/allantaborda1 não pertence a mim. Alguma outra pessoa criou a conta com o meu nome, provavelmente algum homônimo meu. Ou então, alguém sem ter o que fazer.

Por falar em homônimo, descobri há algum tempo que eu possuo pelo menos um homônimo, que também se chama Allan Taborda dos Santos (ou só Allan Taborda, não me lembro), creio que no Rio Grande do Sul, o cara parece que faz parte de uma banda ou algo assim.

Estou implementando uma parte mais complicada do AOPT, a de persistir e recuperar objetos complexos. Por enquanto, já consigo persistir e recuperar tipos primitivos, objetos wrappers de tipos primitivos, datas, Strings e arrays desses mesmos tipos. Arrays de arrays o AOPT ainda possui alguns problemas, mas estou quase terminando. Após isso, começarei a implementar a recuperação de objetos dentro de objetos.

Por causa do desenvolvimento do AOPT, o Robowebert Player ficou um pouco para escanteio, mas pretendo retomar o desenvolvimento deste em breve, paralelamente ao AOPT. Pretendo também voltar a escrever textos com histórias do Superfred. Por falar nisso, irei, em breve, escrever um post sobre a minha carreira de escritor amador.

Comprei, como presente de Natal para mim mesmo, um dicionário de Alemão. Eu gostaria muito de aprender um pouco mais acerca deste idioma, ainda mais que eu curto as músicas da Nena, que são, em sua grande maioria, cantadas no idioma alemão. Comprei também uma câmera digital. Há um bom tempo eu pensava em comprar uma. Talvez eu poste umas fotos aqui neste blog. E já tirei algumas, inclusive da minha cachorrinha, a Pandora, que já está bem velhinha.

Então é isso! Feliz Natal!

Banana com aveia

Postado em Tutoriais em 15/11/2010 por Allan Taborda

Hoje, irei postar uma receita culinária bem simples e que eu costumo fazer sempre que estou com fome em alguma hora do dia que não seja a hora do almoço ou do lanche e quando há bananas sobrando: a receita da banana com aveia.

Essa receita, que não se resume a apenas pegar a banana e tacar aveia em cima, é feita por mim desde que eu era criança, ainda na época que eu morava em Curitiba, em 1990 (se bem que, essa época, era a minha mãe que preparava, eu mesmo passei a preparar sozinho a receita um tempo depois).

Seguem os ingredientes:

- De 2 a 5 bananas, dependendo do tipo de banana usado, se for nanica, 2 já bastam, se for banana prata, 5 devem bastar, e se a banana for muito pequena, talvez terá que colocar mais de 5, caso esteja com medo de fazer uma quantidade excessiva de banana com aveia, use 2 ou 3 e vá adicionando mais durante o preparo da receita;

- Aveia a gosto, pode ser qualquer tipo de aveia, mas eu recomendo a em flocos finos, a quantidade certa vai depender de como desejar a banana com aveia (paçoquenta ou mais líquida), ela também pode ser usada para fazer crescer a massa caso não tenha bananas suficientes;

- Achocolatado a gosto, creio que uma colher já deve bastar, esse ingrediente é opcional e foi introduzido na receita pela minha mãe a fim de fazer meu irmão comer banana com aveia quando este era menor e não queria comer quando a mamãe preparava para ele;

- Um pouco de leite (um pouco mesmo, um ou dois dedos já devem bastar), esse ingrediente também é opcional e serve para amolecer a massa no caso de ter adicionado aveia em excesso, também serve, em conjunto com a aveia, para fazer crescer a massa caso não tenha bananas suficientes;

- Um prato raso (fundo também serve, mas eu prefiro o raso) e um garfo;

Descasque as bananas e amasse-as em cima do prato raso utilizando o garfo, tomando cuidado para não entortar ou quebrar o mesmo.

Então, coloque a aveia e o achocolatado e misture. Caso a massa tenha ficado muito grossa, coloque um pouco de leite e misture até a massa ficar homogênea, a não ser que você goste de banana com aveia paçoquenta. Caso tenha escorregado no leite, coloque mais um pouco de aveia.

Caso deseje aumentar a quantidade de massa, coloque mais aveia e leite, e talvez mais uma banana, amassando esta e misturando tudo, obviamente.

Depois que estiver tudo misturado e que a massa estiver com a consistência e quantidade que você desejar, coma a banana com aveia utilizando o garfo usado para amassar as bananas e misturar os ingredientes, pois a receita está pronta.

Após terminar de comer, caso não vá lavar imediatamente o prato, deixe-o na pia com um pouco de água em cima ou mergulhado em algum recipiente com água, senão o resíduo de banana com aveia seca e fica mais difícil de lavar o prato.

AOPT – Ferramenta de persistência do Allan

Postado em Atividades profissionais em 19/10/2010 por Allan Taborda

Desde 2007, eu estava com um projeto em mente, mas que, até então, eu estava relutando em iniciá-lo e deixando-o indefinidamente para depois. É um projeto de uma ferramenta de persistência de dados em Java (que terá versão para C++ e outras linguagens no futuro) chamada AOPT (Allan’s Object Persistence Tool, ou ferramenta de persistência de objetos do Allan). Eu já tinha em mente mais ou menos como ele iria ser, embora alguns detalhes eu não tinha certeza de como seria feito Cheguei a citar a intenção de desenvolver o AOPT no meu TCC que fiz para a faculdade, ainda em 2007.

No último fim de semana, tive um momento de inspiração e tomei coragem para implementar o AOPT e definir o que estava faltando na especificação deste. Em pouco tempo, eu já tinha um código funcional com a primeira parte do AOPT já implementada, que salvava e recuperava dados em XML, de três formas diferentes: o XML bruto gravado no disco, o XML compactado com GZip e também gravado no disco e o XML armazenado num banco de dados relacional (eu usei o HSQLDB, mas pode ser qualquer banco).

O AOPT consiste numa ferramenta de persistência que salva os dados em arquivos XML (um arquivo para cada tabela/objeto) e que permite a recuperação desses dados posteriormente. Diferente da proposta inicial, que previa que apenas objetos pudessem ser persistidos, o AOPT permite também a inserção direta dos dados em mapas do tipo chave-valor (usando a interface java.util.Map, nesta implementação em Java). Na verdade, os objetos são traduzidos pelo AOPT em mapas chave-valor e então estes são salvos em XML. O salvamento dos dados pode ser feito de imediato (ao inserir um objeto), com uma chama explícita ao método de salvar todos os objetos ou de tempos em tempos (como no Prevayler). E a recuperação dos dados pode ser feita utilizando APIs semelhantes às do banco de dados orientado a objetos Db4o e das ferramentas de persistência Prevayler e Perola, permitindo, dependendo de como o AOPT estiver configurado, buscar os dados a partir dos XMLs salvos ou a partir da memória (o chamado modo de prevalência de dados, à la Perola e Prevayler).

Ou melhor, o AOPT consistirá nisso após tudo o que eu desejar implementar estiver implementado, por enquanto, há só um esqueleto básico funcional do AOPT. No futuro, eu implementarei mais algumas partes essenciais e então eu hospedarei o AOPT no Sourceforge.

Mais para o futuro, quando eu souber programar em C++ (estou estudando por conta própria a linguagem C, e depois estudarei C++), implementarei o AOPT nesta linguagem. O AOPT em C++ talvez não terá todos os recursos da versão Java (os que são específicos dessa linguagem, como o mapeamento automático de objetos, visto que isto faz uso de reflections, a não ser que exista reflections no C++), mas implementará, pelo menos, a especificação básica do AOPT e terá compatibilidade de banco de dados com a versão Java, visto que o formato XML é independente de linguagem, bastando um parser disponível para a linguagem desejada).

É possível que o AOPT seja usado na camada de persistência do Robowebert Player, o player de áudio que estou desenvolvendo e que já citei aqui neste blog. Vale lembrar (isto se eu já tiver falado disso aqui no blog, nos posts que fiz sobre o player) que o Robowebert Player permitirá a escolha de como será feita a persistência dos dados, se será com Db4o, banco relacional ou outra forma, como o AOPT.

Assim que tiver mais notícias acerca do desenvolvimento do AOPT, eu postarei aqui neste blog.

Dia 25, estarei mudando de emprego, a fim de obter uma maior experiência profissional, além de começar a trabalhar com carteira assinada. Estou bastante entusiasmado com esse meu novo emprego, que, assim como anterior, também fica situado na capital paulista e também é para ocupar um cargo de desenvolvedor Java.

Neste fim de semana, irei postar dois sonhos que tive no meu outro blog, o blog dos Sonhos do Allan.

Até o próximo post (ou o próximo post do outro blog)!

Mais sobre o Robowebert Player

Postado em Atividades profissionais, Lazer, Música em 12/07/2010 por Allan Taborda

Nesses meses nos quais fiquei sem postar no blog, eu não tive vontade e inspiração para escrever algo interessante aqui, então eu acabei não postando nada nesse tempo. Cheguei a iniciar um post acerca dos meus gostos musicais, mas não acabei concluindo-o, apesar dele já estar bem extenso.

Há um ano atrás, escrevi um post sobre o tocador de áudio em Java que eu estava desenvolvendo em meu tempo livre, o Robowebert Player. Eu ainda desenvolvo o player no meu tempo livre, e ele evoluiu bastante desde aquele post até agora, ainda mais que ele é o meu player principal para ouvir música.

Como eu havia adiantado no último post, ele já possui suporte ao preenchimento automático da playlist. Este é, na minha opinião, o recurso mais importante implementado até aqui, de grande importância nas vezes que eu escuto música, pois gosto de escutar músicas variadas, mas não gosto de ter que ficar populando a playlist com músicas manualmente ou com playlists pré-definidas. Este preenchimento automático consiste em sortear uma música contida em uma das pastas previamente cadastradas em um arquivo de configuração (que é editado manualmente, mas posteriormente eu irei implementar o suporte ao acesso ao banco de dados e então a lista de pastas passará a estar no banco). A cada vez que uma música termina, esta é removida da playlist e, caso a playlist tenha menos do que um determinado número de músicas (definido nas configurações do player), o randomizador (como é chamado o sistema que sorteia as músicas) sorteia uma ou mais músicas, até a playlist atingir o número estipulado de músicas. Na maioria das vezes, ao acabar uma música, esta música sai e outra é adicionada ao final da playlist.

Também adiantei no último post que o player passou a permitir configurações personalizadas. Algumas dessas configurações podem ser alteradas pela própria interface do player, clicando no checkbox correspondente, por exemplo. Outras só podem, pelo menos até o momento, serem alteradas editando manualmente o arquivo de configuração. Para gerenciar essas configurações, de início eu usei a classe Properties, do pacote java.util, mas depois fiz a minha própria implementação da classe que guarda as propriedades, com recursos extras, como o de salvar as propriedades no disco assim que uma propriedade é alterada e métodos próprios para salvar e recuperar valores numéricos e booleanos, além de manter as propriedades em ordem alfabética e usar a codifcação UTF-8 ao salvar o arquivo. Essa classe que gerencia as propriedades poderá ser usada em outros programas que por ventura eu possa desenvolver.

Por falar nas configurações, recentemente eu passei a separar as configurações referentes ao funcionamento do player das configurações referentes à interface gráfica, em arquivos diferentes.

Na interface, os botões, com exceção dos que servem para subir e descer uma música na playlist, foram todos para a parte de baixo da tela, num total de dez botões. O botão de tocar agora também é o de pausar e continuar e o botão de adicionar também adiciona playlists salvas, além das músicas. Há um botão também para ativar e desativar o randomizador de músicas. O analizador de espectro ganhou mais espaço com a saída dos botões da parte superior esquerda da tela. Além disso, o tamanho da tela foi ajustado para ficar do tamanho adequado para monitores maiores (se bem que estou pensando em alterar isso novamente, fazendo o tamanho da tela se adequar melhor ao tamanho do monitor) e a tabela que mostra a playlist na memória foi ligeiramente modificada, tendo sua última coluna diminuído de tamanho e centralizada.

Foram feitas modificações no suporte aos metadados das músicas (informações de artista, nome da música, álbum, ano, etc). Agora foi adicionada a biblioteca JAudioTagger, que é usada na leitura dos metadados dos arquivos de áudio no formato FLAC, que antes não havia suporte à leitura dos metadados. Na verdade, o JAudioTagger é usado para ler os metadados de qualquer arquivo de áudio, com exceção dos áudios em MP3, OGG e Monkey’s Audio (os dois primeiros porque o código antigo, baseado em um pedaço do JLGui, que é outro player de áudioem Java (ver o post publicado há um ano atrás para mais detalhes), possui uma performance melhor na leitura das informações, e o último pelo fato do JAudioTagger não possuir até o momento o suporte a este formato de áudio).

Houve também modificações internas no player, como a inclusão de um pool de threads (usado em todo o player sempre que uma thread é criada, com exceção do motor de execução de áudio, que gerencia a thread princial manualmente), a criação de uma classe com métodos estáticos contendo as rotinas mais usadas e de uma interface contendo valores constantes (e as classes que vão usar esses valores implementam a interface), além de outras alterações internas no código.

Outras coisas que foram implementadas: o suporte ao formato de playlist conhecido como SMIL, usado no Windows Media Player, a geração de logs com os erros ocorridos internamente, a possibilidade do “Look and Feel” do player ser alterado (só há duas opções, por enquanto), dois novos painéis modais para a escolha das músicas manualmente (que podem ser escolhidos pelas configurações do player), suporte ao salvamento do estado do player (ele pode ser fechado e reaberto posteriormente, sem que o conteúdo da playlist e o estado interno do randomizador sejam perdidos), o início da implementação de uma interface em modo texto para o tocador de áudio, uso do KJDSS 1.3 (última versão da biblioteca do analisador de espectro até o momento, com a possibilidade de usar o analizador de espectro antigo aterando uma configuração), modificações nessa biblioteca, dentre outras coisas implementadas.

Ainda faltam muitos recursos dos que eu gostaria de adicionar a este player, como cronômetro, a possibilidade de se voltar ou avançar para um ponto qualquer no meio da música e a alteração dos metadados das músicas. Pretendo também traduzir a interface do player para outros idiomas, usando uma biblioteca de gerenciamento de traduções também escrita por mim e que ainda não está pronta.

Estou pensando em, ainda esse ano, disponibilizar o código do player no Sourceforge.net, ainda não o fiz por falta de tempo, ainda mais que, para isso, terei que elaborar um texto em inglês apresentando o software. Mas, para aqueles que pedirem, eu posso estar enviando o código por e-mail.

Por hoje é só, até a próxima vez.

Primeiro post de 2010!

Postado em Lazer em 25/01/2010 por Allan Taborda

2010 é mais um ano que se inicia, e já inicia acumulando acontecimentos para a Retrospectiva 2010, da Rede Globo, a ser exibida daqui a 11 meses aproximadamente. Nem acabou o mês e já teve deslizamento de terra em Angra dos Reis, alagamentos diversos em São Paulo, terremoto no Haiti, avião etíope caindo no Mar Mediterrâneo, jogador paraguaio levando tiro na cabeça, emissoras venezuelanas de TV a cabo sendo fechadas e outras merdas acontecendo. E, pelo jeito, mais merdas irão acontecer ao longo do ano. Do jeito que anda a situação, a Retrospectiva 2010 terá maior tempo de duração do que a Retrospectiva 2009, ou terão que diminuir os intervalos comerciais, ou ainda, resumir bem resumido os acontecimentos do ano.

Minhas férias se encerraram no último dia 11, encerrando o período de três semanas de folga de Natal e Ano Novo. Com isso, voltei a passar a semana em São Paulo e retornar aos fins de semana a Praia Grande. Se bem que eu estou pretendendo, algumas vezes, passar duas semanas consecutivas em São Paulo a fim de diminuir os custos de viagem entre uma cidade e outra e também o cansaço gerado por estas viagens.

Meu computador pessoal que eu usava antes de comprar o notebook irá completar 6 anos no próximo dia 12 de Fevereiro. Mas, apesar de fazer aniversário, meu PC não tem muito o que comemorar, pois atualmente está com defeito, provavelmente na fonte. Amanhã, ele será mandado para o conserto.

Meu PC atualmente não está sendo muito utilizado, uma vez que eu passo atualmente a semana inteira em São Paulo e só retorno nos fins de semana e então eu o ligo. Pode ser que isso tenha agravado o problema do PC, mas eu não acredito muito nisso, acho que, mesmo se eu o usasse mais vezes, ainda assim ele iria pifar. Ele já tá bem velho. Mas ainda assim eu espero que ele complete 7 anos, ainda que sendo pouco utilizado.

Como meu PC não está funcionando, tive que trazer meu notebook de São Paulo e estou escrevendo através dele neste blog.

Em São Paulo, tenho usado meu notebook durante meu tempo livre, apesar de, por enquanto, eu não ter acesso à Internet (e nem sei quando irei ter, pois ainda não sei quando irei contratar um plano de Internet móvel, isso se eu contratar um, ainda irei pensar bastante acerca de ter ou não Internet móvel, e em caso de decidir por ter, qual provedor contratar). Tenho escutado música através do meu player em Java que eu desenvolvo, o Robowebert Player (já falei sobre ele neste blog), no qual venho tembém melhorando-o. Agora ele já possui suporte a algumas configurações e ao preenchimento automático de playlist, sorteando aleatoriamente músicas contidas nas pastas informadas em um arquivo de configuração. Este recurso, inclusive, é um dos mais importantes implementados até agora, pois me permite ouvir música pelo tempo que eu quiser sem me dar trabalho de adicionar mísicas à playlist do player ou carregar uma playlist já existente, sem contar que não fico preso a uma lista de reprodução fixa e posso ouvir músicas que faz tempo que eu não ouço e/ou ficaram esquecidas nas pastas de músicas.

Além de escutar música e de desenvolver meu player, dentre outras coisas, também tenho jogado alguns jogos que vem no Windows 7 (apesar de que eu prefiro o Debian GNU/Linux, no qual foi instalado nas férias) e formatado uns textos que eu mantenho nos meus arquivos, inclusive as antigas histórias do Superfred (as primeiras delas escritas em 2002, no antigo computador com 32 MB de memória RAM, já falecido e que não completou 6 anos de idade, mas chegou aos 5 anos) e o arquivo contendo o histórico de todos os sonhos postados no blog dos Sonhos do Allan, tanto os dos antigos endereços do blog até o endereço atual do blog, no WordPress (151 páginas até o momento, incluindo o último sonho postado). Aliás, estou pensando em postar aqui a história desse meu blog onde eu posto meus sonhos.

Por falar nesse meu blog dos sonhos, na última sexta-feira, eu falei acerca dele para o pessoal do serviço e ele fez um relativo sucesso por lá. Inclusive, foi postado no Twitter de um colega meu, o que fez o número de acessos aumentar consideravelmente naquele dia. Este blog onde eu escrevo também foi falado no meu ambiente de trabalho e também foi Twittado (acredito eu), mas aparentemente, fez menos sucesso do que o blog dos Sonhos do Allan.

Estou pensando em usar meu tempo livre em São Paulo para escrever uns textos, inclusive posts previamente preparados para serem postados nos meus dois blogs (este e o dos sonhos) e novas histórias do Superfred, ou ainda continuar uma história do Superfred que será maior do que as outras e que é inapropriada para menores de 18 anos, uma história um tanto quanto pesada, com muita violência, sexo e palavrões à vontade. Não sei se eu já comentei acerca dessa história nesse meu blog, se não comentei, irei comentar futuramente ou talvez fazer um post completo sobre essa história adulta. Ou talvez eu continue uma outra história sobre viagem no tempo que já faz uns anos que eu comecei a escrever (e não irei terminar tão cedo, visto que ela será comprida).

Hoje, o São Paulo ganhou a Copa São Paulo de Futebol Junior. Eu, como torcedor do Tricolor Paulista, estou feliz com esse novo título conquistado, apesar de eu não ter visto o jogo e de eu não ligar muito para futebol ultimamente, ainda mais agora que eu moro na capital e no meu quarto não tem TV para eu assistir (e as programações atuais das emissoras de TV não me incentivam muito a eu ter uma TV).

Hoje, a Mara me ligou. Estava com saudades de mim e aproveitou que hoje era feriado em São Paulo (e muito provavelmente eu estava de folga, aqui em Praia Grande) para me ligar. A gente não se falou muito, mas matamos a saudade um do outro, nem que seja só da voz. Depois, ela disse que estava on-line no MSN e eu fiquei deu uma entrada no MSN para continuar a conversa com ela, mas ela constava como off-line. Talvez ela tenha trocado de MSN. Fiquei meio frustrado, mas depois passou.

Por hoje é só. Até daqui a duas semanas, quando muito provavelmente, eu estarei postando outra vez, com um post previamente preparado no meu tempo livre.

Último post do ano…

Postado em História em 31/12/2009 por Allan Taborda

…e o primeiro sendo postado através do meu novo notebook!

Ainda em Novembro, mais precisamente no dia 29, eu adquiri um notebook no site da Dell, um Inspiron 1545. Peguei a configuração padrão que tinha lá e fiz algumas alterações, como um processador um pouco mais rápido e com suporte ao módulo de virtualização da Intel (Core 2 Duo P8700 2.53 GHz), um HD maior (500 GB) e outras menos importantes.

Antes de montar minha configuração no site da Dell, eu tirei algumas dúvidas com uma atendente do chat on-line (apesar de que, geralmente, o chat não está disponível no domingo, mas naquele dia, estava disponível). Depois, eu montei a configuração que eu achei que a melhor possível (leia-se “melhor possível dentro dos limites orçamentários e que tenha o melhor custo benefício possível”). Fiquei um bom tempo quebrando a cabeça para analisar que componentes seriam escolhidos, principalmente com relação ao processador.

A memória RAM eu mantive a padrão, 3 GB, não compensava alterar para 4 GB. O HD eu aumentei do padrão de 320 GB para 500 GB porque o preço a mais era pequeno e compensava a mudança (ainda mais que eu irei armazenar bastante arquivos nele, além de manter instalados dois sistemas operacionais). O processador eu escolhi o modelo descrito acima mais pelo módulo de virtualização da Intel, além dele ter mais cache e ser um pouco mais rápido (até acessei o site da Intel para saber a diferença entre os modelos). Por 20 reais a mais, eu alterei a placa de rede wireless pela da Intel, que suporta todos os protocolos wireless e, segundo alguns, é a melhor que existe. O suporte a Bluetooth eu não adicionei, apesar de ser 30 reais a mais, uma vez que não possuo nenhum dispositivo Bluetooth (caso eu venha a ter um dia, eu comprarei um Bluetooth Dongle, que é uma espécie de pendrive que adiciona o suporte ao Bluetooth ao computador no qual esteja conectado e que sai até mais barato do que um chip interno Bluetooth). A bateria eu mantive a padrão, de 6 células, uma de 9 células, segundo o site da Dell, iria proporcionar apenas mais duas horas a mais de autonomia, além de fazer o notebook ficar mais pesado, não compensa o preço pago a mais. O restante dos itens de hardware não havia opções de configuração.

Na parte de software, a única alteração que eu fiz foi alterar o Windows 7 da versão Home Basic para a Home Premium, o que encareceu o notebook em 69 reais. Pelo site da Microsoft, no qual eu achei meio confuso, vi que a versão Home Premium possui vários itens a mais com relação à Home Basic. De resto, mantive o padrão para todos os outros softwares, inclusive para o pacote Office, no qual escolhi o Microsoft Works (do qual eu irei usar somente a aplicação de calendário, uma vez que o BrOffice.org, no qual eu instelei após o notebook chegar, não possui uma aplicação similar). Veio junto uma versão de avaliação de 30 dias da versão mais básica do Microsoft Office 2007 que eu não irei usar e, assim que os 30 dias acabarem (serão contados provavelmente assim que eu usar pela primeira vez o coiso), removerei-o sem dó nem piedade, ainda mais que eu não gosto do MS Office. O notebook veio também com o McAfee Security Center com assinatura de 15 meses de atualizações, no qual não havia opção de tirar da configuração e ficar sem antivírus.

A cor do notebook eu estava pensando em configurar como roxo ou verde, mas quando eu vi o valor cobrado a mais para ter uma cor diferente de preto (70 reais, 130 reais caso eu quisesse botar um desenho feito por um artista plástico), decidi deixar o notebook preto mesmo. E até que ele ficou bonito sendo preto.

Junto com o notebook, vieram de brinde um pendrive de 8 GB (7,5 GB reais, pelo que eu verifiquei posteriormente) e uma mochila para notebook. Apesar de serem brindes, ambos constam na nota fiscal, a preço de custo.

Após fechado o negócio, demorou quase uma semana para confirmarem o pagamento e iniciarem a montagem do notebook. Dia 14 de Dezembro informaram que o notebook estava pronto e que havia sido enviado. Então, navegando pelo site da Dell, fiquei sabendo que eu teria que estar presente para receber o notebook, já que era um objeto de valor, e isso não iria ser possível na data de entrega do notebook, dia 16, já que eu estava em São Paulo trabalhando e agora eu passo a semana por lá, num quarto que eu aluguei. Daí eu liguei para a minha mãe e deixei o recado de que, caso apareça a transportadora e perguntarem por mim, pedir para entregar o notebook no dia 21, dia no qual eu entro de férias.

No dia 21, o notebook não foi entregue. Achei o telefone da transportadora no Google (o telefone até havia sido informado por SMS pela Dell, mas estava incompleto, com apenas os dois primeiros dígitos, aparentemente o número completo não coube na mensagem) e então eu liguei para esse número. Fui informado que o notebook chegaria no dia 22, de manhã.

No dia 22, fiquei esperando o notebook chegar de manhã, mas até a parte de tarde, ele não havia chegado. Liguei novamente para a transportadora e perguntei quando ia chegar o notebook. O atendente me informou que passaram para entregar ao meio-dia e não tinha ninguém em casa. Detalhe: ao meio-dia, eu estava no portão da minha casa. Ou seja: falaram que tentaram entregar mas não entregaram nada. Dei uma bronca no atendente dizendo que eu estava em casa o dia inteiro e nem tocaram a campainha quando chegaram. Com voz de quem estava com as orelhas abaixadas, o atendente me disse que o notebook iria chegar ainda no dia 22, à noite, às 20:00 (fora do horário de entrega informado pelo site da Dell). Chegando no horário, fui até a porta a fim de esperar pela chegada do notebook e vi o carro da transportadora passando direto pela minha rua. Liguei novamente para a transportadora informando que o carro passou direto e o atendente me disse que o carro ia chegar daqui a pouquinho, em 15 minutos. Minutos depois, chegou o carro e fez a entrega. Na hora de assinas os bagulhos, o motorista pediu uma caneta emprestada já que ele havia esquecido e eu assinei o que tinha que assinar. Então, o motorista foi embora levando consigo a caneta.

A transportadora em questão é a Transportadora Americana, que tem convênio com a Dell. É considerada uma das piores transportadoras do país, com várias reclamações constando no site Reclame Aqui e no Procon. As reclamações que eu vi no site Reclame Aqui vão desde atraso na entrega (a maioria delas são acerca de atraso) até mercadoria violada. Essa transportadora, na minha opinião e na opinião de algumas pessoas que eu vi no site de reclamações ciitado, está sujando o nome da Dell, no qual o atendimento foi completamente diferente.

No dia 23, liguei o notebook pela primeira vez (no dia anterior, quando recebi o notebook, estava muito tarde e resolvi ligá-lo com mais calma no dia seguinte) e li o EULA do Windows 7, com todas suas restrições, então eu vendi minha alma ao Diabo clicando no checkbox de aceitar os termos da licença e depois eu terminei de fazer as configurações iniciais. Posteriormente, instalei uns programas que eu quis, como o BrOffice.org, o Firefox e o Eclipse com o Java Development Kit (vulgo JDK), esses dois últimos em versão 64 bits. Por causa dos dois primeiros, tive que manter instalada uma máquina virtual Java de 32 bits, usada só pelo Firefox e pelo BrOffice.org, que são 32 bits.

Posteriormente, redimensionarei a partição do Windows 7 usando uma ferramenta contida nesse sistema operacional e instalarei o Debian 5.0 versão 64 bits (assim como o Windows, que também é versão 64 bits) e ficarei com os dois sistemas operacionais.

Como eu havia dito, desde o dia 21 eu estou de férias (desde o dia 19, na verdade). Minhas férias (que na verdade, é um recesso de fim de ano) terminarão no dia 11 de Janeiro. Pretendo viajar de volta para São Paulo no dia 10 a fim de levar meu notebook e outras coisas que irei levar para lá. Ainda nessas férias, talvez eu faça um review do Windows 7 Home Premium, ou talvez depois das férias eu faça, caso não dê tempo.

Por hoje é só. Até o ano que vem e um Feliz 2010 para quem estiver lendo este post!

PS: No momento em que escrevo isto, o relógio está marcando 22:43 do dia 31 de Dezembro, é possível que o WordPress marque horário errado no post devido a fuso horário e não sei mais o quê (cada vez que eu posto, a diferença de horário marcada para o horário real do post é diferente e às vezes até calha de marcar o horário certo. Então, caso marque o horário como sendo o primeiro post de 2010 deste blog, é mentira, ele é o último de 2009.

Fim de ano chegando…

Postado em Idiotices, Lazer, Música em 14/12/2009 por Allan Taborda

Ultimamente, não tenho tido muito tempo para escrever novos posts (e nem arranjar assunto para novos posts). Na verdade, até há tempo, mas venho fazendo outras coisas no meu tempo livre (principalmente por eu não ter Internet em São Paulo), como ler uns livros de bolso.

Recentemente, li uns de velho oeste e um do Perry Rhodan. (o número 4 de uma série de mais de 600 livros, mas é o único que eu tenho, me pareceu uma parte de uma história maior) O último que eu li é basicamente uma história que foi feita mais para dar a entender que os índios apaches são muito maus, matando mulheres, crianças e outros só para pegar a comida e pelo prazer de matar, foi um dos piores que eu já li até hoje. O personagem principal da história, um tal de Sablito, dá o nome ao livreco. Resumo da história: os índios estavam andando no deserto e alguns são mortos pelos mexicanos (e a história também dá a entender que os mexicanos também não valem nada), daí eles vingam a morte dos companheiros deles invadindo uma casa, comendo toda a comida e matando a mulher e as crianças, inclusive cortando a cabeça da mulher e jogando na frente dos filhos (e estes foram despidos e escalpelados). Daí, o Sablito, ao saber que os apaches acabaram com a família dele pela segunda vez (os coisos já haviam matado toda a família dele quando ele era criança), foi lá e matou os apaches. Fim.

Como eu adiantei no primeiro parágrafo do post, agora eu estou morando em São Paulo. Quer dizer, eu estou ficando em São Paulo de segunda a sexta-feira, num quarto alugado perto do serviço, e volto no fim de semana para Praia Grande a fim de ligar este computador que uso neste momento para escrever este post e fazer outras coisas, como assistir TV.

Ficando em São Paulo, eu estou tendo custos menores e estou tendo mais tempo para descansar e fazer outras coisas do que na época que eu viajava todo o dia de ônibus fretado, onde eu acordava 5 da madrugada e chegava às 21 horas, aí eu comia o lanche e ia dormir.

O desenvolvimento do meu player de áudio (que já foi apresentado aqui neste blog) está devagar, quase parando, mas eu já consegui implementar algumas coisas novas, como a nova interface em modo texto (ou parte dela), um mecanismo de sorteio aleatório de músicas (comecei a implementar hoje uma primeira parte, quando der, eu irei integrar ao resto do sistema e testar) e uma nova disposição dos botões na tela.

No caminho do restaurante que eu vou quando chega a hora do almoço do serviço, há uma farmácia onde tem uma balança e que não precisa botar moeda para saber o peso, então eu estou aproveitando para me pesar todos os dias. Estou percebendo que eu estou emagrecendo. Antes, eu estava com 83 kg, hoje eu estou com 79,5 kg aproximadamente. Creio que eu esteja emagrecendo devido a eu dormir mais ultimamente (dormir ajuda a queimar calorias) e pelo fato de não estar exagerando tanto na hora de comer, já que a comida é pesada na balança e, quanto mais comida no prato, maior é a facada no meu bolso. E também há o fato de eu estar comendo bastante vegetais e frutas, como o abacaxi e a manga (essas são as únicas frutas disponíveis no restaurante onde vou atualmente). Espero que eu emagreça mais nos próximos dias, pois eu ainda estou bastante gordo. Só para lembrar, eu pesava 63 kg em 2005.

No final de 2008, mais precisamente no dia 23 de Dezembro daquele ano, eu abri um tópico na PCDM (A Pior Comunidade do Mundo, uma comunidade bastante idiota do Orkut na qual eu participo) com o título “Previsão para 2009!” e contendo uma única frase: “Michael Jackson morrerá!” e, após o óbito do rei do pop, hoje em dia o pessoal me pergunta no Orkut os números da Mega Sena, que dia outras pessoas vão morrer e até falam que fui eu quem matou o Michael Jackson. Fui parar até no site Pérolas do Orkut (ainda que com a foto embaçada, não sei por quê).

O post em questão, na PCDM, é este aqui: http://www.orkut.com.br/Main#CommMsgs?cmm=50850&tid=5282741978028993760

O povo me pergunta como eu acertei a previsão da morte do Michael Jackson. Ao contrário do que alguns pensam, eu não tenho nenhum poder de adivinhação. O que aconteceu foi que eu deduzi que o Michael Jackson ia morrer. Desde aquela época, em 2008, ele já vinha apresentando várias doenças e estando um tanto quanto debilitado. Inclusive, algumas notícias da Internet (e fora dela) noticiavam o estado de saúde debilitado do rei do pop. Então, eu supus que ele não passaria deste ano e foi o que aconteceu. Ah, e se eu fosse mesmo vidente, eu teria previsto também as mortes do Luiz Carlos Alborghetti, do MC Pelé, da Mara Manzan e da Leila Lopes (haja gente indo para o andar de cima nessa época do ano).

Perto do Natal, lá para o dia 22 (ou 24 ou outra data próxima disso, ainda não se sabe), a empresa irá parar devido às festas de fim de ano, então eu terei meio que umas mini-férias. Então, eu crio que este não será o último post do ano neste blog, já que com certeza, haverá tempo para mais um post.

Para encerrar, irei postar um vídeo natalino bem velho, de 1987, onde aparece a Kim Wilde, uma cantora daquela época (e que canta até hoje) na qual venho escutado suas músicas nos dias atuais. Aparecem ela e o comediante Mel Smith. Abaixo, o vídeo:

Por hoje é só, até o próximo post, ainda esse ano. E agora, eu vou dormir, que eu estou morrendo de sono.

Por que eu não tenho Twitter

Postado em Idiotices, Temas polêmicos em 19/10/2009 por Allan Taborda

O Twitter é hoje um serviço muito popular na Internet, com milhões de usuários cadastrados. É considerado como uma verdadeira mania entre os internautas.

Vários conhecidos meus utilizam o Twitter e dão suas “twittadas”, além de acompanharem o Twitter de outras pessoas. Mas eu mesmo não possuo uma conta no Twitter (e nem pretendo ter uma).

O motivo principal de eu não ter uma conta neste serviço de microblogging é justamente o fato de ele ser baseado em posts de no máximo 140 caracteres, posts curtos. E eu, quando escrevo, sempre escrevo textos grandes, principalmente nos dias de hoje, já que meus textos atuais têm ficado bem maiores do que os textos que eu escrevia há anos atrás (isto pode ser percebido quando se compara o tamanho dos posts do meu antigo blog dos Sonhos do Allan, no Zip.net, em relação ao tamanho dos posts do meu atual blog dos Sonhos do Allan, no WordPress).

Mesmo quando eu tento fazer com que determinado texto caiba num determinado limite de caracteres, tenho um trabalho danado, uma vez que tenho que ficar cortando palavras, substituindo palavras por outras que têm menos letras, procurando no texto partes que eu possa suprimir, etc. Isto sem contar que eu tenho que tomar o cuidado para o texto não perder o sentido.

Mesmo limites bem maiores do que 140 caracteres acabam não sendo suficientes em algumas ocasiões. Tem vez que eu preciso dividir um post no Orkut em dois ou mais outros posts, uma vez que o que eu quero escrever possui mais de 2048 caracteres.

No mini-currículo de um serviço de currículos pela Internet no qual eu me cadastrei, o sofrimento para fazer caber o texto é ainda maior, já que o limite é de 255 caracteres e eu ainda tenho que escrever algo que descreva meu perfil profissional e que facilite nas buscas pelo meu currículo completo (que tem um limite de caracteres bem maior, ainda bem).

Ou seja, se já é um problema fazer caber texto em limites maiores do que 140 caracteres, por que eu participaria de um serviço onde mal dá para escrever qualquer coisa, por menor que seja (pelo menos, para mim)? E, se eu quiser escrever alguma coisa, escrevo no meu blog, que não tem esse limite sufocante de 140 caracteres.

Posts que cabem nesse limite geralmente são textos no estilo “hoje eu estou triste”, ou “briguei com minha namorada, estou arrasado, tenho vontade de me suicidar”, ou então “soltei um gás fétido pelo meu cu, está fedendo tudo por aqui”, ou seja, frases curtas. Se prolongar o post por mais que isso, já era.

A única diferença entre o Twitter e um serviço de blogs convencional é basicamente o limite de caracteres. Qualquer outra coisa que tenha no Twitter poderia estar contida num serviço de blogs convencionais, como o WordPress.

E por que tanta gente usa o Twitter? A resposta, na minha opinião, é a mesma da pergunta “por que tanta gente gosta de funk?” Sabem por quê? Por que é o serviço da moda na Internet. Assim como já foi o Orkut, na época em que o povão ficava dando F5 nas comunidades para ver se alguém havia postado alguma coisa. Hoje em dia, o Orkut ainda existe, mas já não é mais aquela moda de antes. Comunidades que antes eram badaladas, com muita gente participando, hoje perdem cada vez mais membros (os poucos que sobraram) e os posts, que antes eram aos montes, com tópicos que facilmente chegavam aos mais de 500 posts, hoje são bem menos frequentes. Algumas comunidades chegaram até a ficar às moscas, como umas que eu participava e que antes havia bastante gente participando.

O Second Life foi outra modinha da Internet. Esse serviço dispensa maiores comentários. Basicamente, era algo tido como revolucionário, onde até empresas chegaram a fazer suas instalações virtuais (como ocorre com o Twitter, onde empresas usam o serviço como um canal de comunicação), mas que hoje em dia está esquecido, com poucos perfis ativos em relação ao total de perfis cadastrados. Está tendo o mesmo destino do ICQ, que também foi outra moda da Internet, um software de bate papo, mas que hoje em dia nem é mais lembrado. O ICQ ainda existe, mas é bem menos usado do que antes.

Pode ser que o Twitter um dia acabe como o Orkut. Ou pior, acabe como o Second Life. Ou ainda pior, acabe como o Third Voice (uma moda da Internet de vários anos atrás, mas hoje em dia ninguém nunca ouve mais falar do serviço (que nem existe mais) e nem tem ideia do que seja tal serviço).

Já fiquei sabendo que o Twitter já está sendo usado por algumas pessoas para disseminar SPAM. Eu já vi este filme antes: hoje em dia, as salas de bate-papo como as do BOL (as poucas que ainda restaram) estão forradas de spammers que, ao serem contatados, disparam SPAM, com propagandas dos mais diversos tipos (e alguns dos spammers ficam passando de sala em sala e jogando propagandas para todos os que estão na sala de bate-papo ver).

Não há nenhum motivo em especial para eu ter uma conta no Twitter. Se eu quiser postar alguma coisa, eu posto neste blog, no WordPress. Ou ainda, posso criar quantos blogs eu quiser, se eu assim desejar (assim como eu criei o blog dos Sonhos do Allan, onde eu escrevo meus sonhos).

Se alguém quiser me “seguir”, como ocorre no Twitter, basta assinar o feed RSS do blog. Tá certo que eu não posto muito (isto é devido à falta de tempo), mas se eu tivesse postando no Twitter, eu também postaria pouco por lá, assim como a esmagadora maioria dos usuários do Twitter. Sabia que 10% dos usuários do Twitter são responsáveis por 90% dos tweets (posts no Twitter)? Vi essa estatística não sei em que lugar.

Pelos motivos apresentados acima, eu não tenho uma conta no Twitter. E, além do mais, se o Twitter fosse bom mesmo, a Miley Cyrus não teria deletado sua conta (e não foi por causa do namorado dela, como foi espalhado por aí). Não teria deletado a conta e não teria cantado rap no Youtube (este sim, um serviço útil na Internet e que não é apenas uma modinha).

Se o Twitter me for útil de alguma coisa um dia, pode ser que eu mude de ideia e abra uma conta naquele serviço. Mas creio que isto seja improvável de acontecer.

E, antes que alguém me pergunte, o Third Voice era um serviço que permitia aos que tinham uma conta (e que tinham que instalar um software cliente para usufruir do serviço) fazer “pichações” em sites da Internet, ou seja, escrever alguma coisa que quiser em algum canto do site desejado. Tais “pichações” só eram visíveis para usuários do Third Voice e residiam nos servidores da empresa responsável pelo serviço. O Third Voice, ainda que nem seja mais lembrado pelos internautas de hoje, foi o percursor das chamadas páginas Wiki, onde uma pessoa pode ir lá e editar.

Minha opinião sobre temas polêmicos, parte 1

Postado em Temas polêmicos em 16/08/2009 por Allan Taborda

Neste post, eu irei postar minha opinião sobre alguns temas polêmicos. Este faz parte de uma série de dois ou mais posts (no mínimo, serão dois) onde exponho as minhas opiniões e, assim como os futuros posts dessa série, estão no formato de perguntas e respostas.

Este primeiro post foi resultado do que eu postei em um tópico do Orkut, na comunidade Odeio Maconha (que já expressa a minha primeira opinião sobre algo polêmico, entretanto, a minha opinião mais completa sobre maconha e sua legalização ficará para um outro post dessa mesma série).

Religião:
Crenças políticas:
Como você vê o governo?
Como você vê os serviços públicos?
Como você vê a educação?
Você é a favor do aborto?
Você é a favor da pena de morte?
Você é a favor dos direitos das minorias em geral (gays, maconheiros, presidiários, negros)?
O que você acha das aplicações dos direitos humanos no Brasil?
O que você acha dos comportamentos e tendencias sociais?

Religião:

Não tenho religião, e creio que elas fazem mais mal do que bem. Se as religiões não existissem, haveria menos gente ignorante no mundo e menos gente teria morrido em massacres e guerras com motivações religiosas.

Crenças politicas:

Favorável ao atual governo, contrária ao PSDB e ao DEM, mas eu me considero apolítico, pelo fato de não seguir uma ideologia de um partido político específico ou a um grupo deles a risca. Por exemplo, no caso da lei anti-fumo, o PT foi contra, o PSDB foi a favor. Eu sou a favor também. Em cada projeto de lei, em cada “caso político”, eu tenho a minha opinião própria e não copio a opinião de um partido político.

Às vezes, eu me considero como “semi-comunista”, por ser favorável ao comunismo, mas mantendo o direito de propriedade privada e a democracia. Digamos que sou centro-esquerda, mas mais para a esquerda do que para o centro.

Como você vê o governo?

O governo Lula está sendo um bom governo. Ele não é perfeito (nenhum governo será), mas eu considero como um dos melhores (se não o melhor) governo que já existiu.

Como você vê os serviços públicos?

Devido à verba reduzida, principalmente na saúde e na educação, estes estão indo de mal a pior. Para piorar, uma boa parcela dos funcionários públicos, por terem estabilidade no emprego, não estão nem aí se fazem o serviço direito ou não. E não é porque eles ganham pouco não, alguns ganham até bastante, e mesmo se os que ganham pouco ganhassem um salário maior, por ter a maldita estabilidade, eles não estão nem aí e trabalham que nem um nariz.

Na minha opinião, funcionário público é o que menos deveria ter estabilidade no emprego, e o povo é quem deveria avaliar se o serviço está sendo prestado direito ou não, se o povo reclama que determinado funcionário não está trabalhando direito, este funcionário é demitido na semana seguinte e é aberta uma nova vaga para quem quer trabalhar de verdade.

Como você vê a educação?

Deficiente, principalmente no estado de São Paulo, onde existe progressão continuada. Eu, na época que eu estudava, não precisei decorar a tabela periódica ou os afluentes do Rio São Francisco, mas tive que, muitas vezes, copiar longos textos que, no final, não me serviram para nada, a não ser aumentar a quantidade de lixo no Lixão do Sambaiatuba (que hoje está desativado devido à sua saturação) e gastar as minhas canetas.

O modelo educacional, principalmente no estado de São Paulo, precisa ser revisto. Os alunos não são estimulados a pensar, estão condicionados à velha e falha prática de decorar tudo para a prova e depois esquecer.

No terceiro colegial (ou foi no segundo?), na aula de matemática, lembro-me que a professora ensinou uma conta (que eu nem me recordo qual era e não usei até agora para nada no mundo real) e eu havia entendido, mas alguns colegas não, inclusive minha amiga. Era uma conta simples, que usava uma fórmula, mas sua resolução era basicamente usando contas básicas nas quatro operações. Fiquei bobo do povão não entender aquilo. E mesmo eu explicando para minha amiga, ela não entendia (e nem fazia esforço para entender).

Lembro-me de quando a professora de Geografia ditou a prova para os alunos copiarem, mas acabou ditando a prova errada e ditou a da sexta série (estávamos na sétima). O povo começou a reclamar que não sabia nada daquilo e eu mesmo não sabia a resposta para a maioria das perguntas (mas eu me lembro que uma das perguntas era qual era o maior estado brasileiro, que é o Amazonas, mas eu acho que esse tipo de pergunta não acrescenta nenhum conhecimento realmente útil para a vida do discente (ainda mais que, para saber qual é o maior estado, é só olhar no mapa, pegar uma régua e ver qual é o maior). Depois, a professora percebeu o erro e ditou a da sétima série, na qual os alunos sabiam (nem todos, melhor dizendo).

Os alunos devem ser estimulados a raciocinar, não decorar fórmulas prontas e usar só na hora da prova. Os alunos devem ser conscientizados de que devem estudar para aprender e não para simplesmente passar de ano.

Para piorar a situação, no estado de São Paulo, existe a progressão continuada, que desestimula ainda mais o aluno a aprender, visto que ele já sabe que irá passar de ano e que só reprova por faltas. Basta ele responder “presente” que ele já está com meio caminho andado para passar de ano. Meu professor de história da oitava série já disse, em sala de aula: “Vocês vão passar mesmo! Não vou esconder isso de vocês!” E, se ficar de recuperação, é só fazer um trabalhinho de recorte de jornal que já recuperou a nota perdida. E, graças a essa progressão burra, há analfabetos na quinta série nas escolas públicas do estado de São Paulo, sobretudo nas estaduais.

Minha antiga professora Maria Diná contou em sala de aula (não sei em que ano foi) que, na época que ela dava aula para as séries iniciais, havia um aluno no qual ela era professora e que estava na quarta série (ou terceira, não me lembro) e que, em um dado momento, ela descobriu que ele não sabia ler e escrever, ele copiava tudo da lousa como estava e passava de ano copiando tudo. A professora, quando chegou o final do ano letivo, reprovou o aluno, mas antes, tentou ensinar o menino a ler e a escrever, com cartilha e mais não sei mais o quê, em vão. No ano seguinte, ela viu esse mesmo aluno na quinta série (ou quarta, sei la), ou seja, ele passou de ano mesmo assim. Sem saber ler e escrever.

E o pior é que não é só isso: também há o caso onde os professores não estão nem aí para o ensino dos alunos.

Na sexta série, a professora Sílvia (que depois acabou virando diretora de não sei que escola) ensinou uma conta que nunca me serviu para porra nenhuma até hoje: produtos notáveis. Até aí, tirando o fato do bagulho não servir para nada no mundo real, tudo bem, mas ela só jogou aquilo na lousa e tacou exercícios à beça, explicou que nem um nariz e queria que a gente decorasse produtos notáveis do terceiro grau e fizesse vários exercícios com este tipo de cálculo. O cálculo de produtos notáveis de terceiro grau é uma conta enorme. Posteriormente, provavelmente no ano seguinte (agora não me lembro), eu vi num livro uma explicação bem mais simples do que seriam produtos notáveis.

Este episódio se repetiu com relação a sistemas de equações de primeiro e segundo grau com uma e com duas incógnitas e com outras contas. Essa professora era extremamente impopular e vivia ameaçando os alunos de dar “zero de nota no bimestre” e “zero de quinto conceito” (quando o ano letivo estava terminando).

Agora eu pergunto: qual é a vantagem de uma professora ser impopular? Ela e muitos outros professores não estão nem aí para o sistema educacional, estão apenas querendo encostar o burro na sombra com um emprego estável e não se importar com mais nada (e ainda por cima, fazem greve pedindo melhores salários, como se merecessem). É aquilo que eu postei sobre funcionários públicos. Isto também contribui para o sistema educacional estar assim.

Você é a favor do aborto?

Somente nos casos previstos em lei, com exceção de quando a mulher engravida por estupro. Neste caso, o estuprador (ou a família dele, já que estupro dá cadeia) tinha que sustentar a criança como todo pai, pagando pensão, e indenizar a mãe da criança por ela ter engravidado em um momento obviamente não planejado, além de ser preso.

Na minha opinião, não faz sentido abortar um bebê simplesmente porque a mulher foi estuprada. Ela não quis ser estuprada, mas é como se a camisinha furasse numa relação sexual com o marido, caiu gozo na boceta dela e o bagulho fecundou. Agora, vai abortar porque a camisinha furou? É tão sem sentido quanto abortar porque engravidou acidentalmente.

O bebê originado de um estupro nada tem a ver com o crime do estuprador e não merece ser condenado à morte (ainda mais considerando que o estuprador terá uma pena bem mais branda do que a morte). É um ser inocente.

O pior é quando se considera os cruéis métodos utilizados para abortar o bebê. Um dos piores deles é quando o médico abortador suga o feto e o tritura (não necessariamente nesta ordem) como se ele fosse alguma gordura localizada.

O único caso onde o aborto faz algum sentido é quando há risco para a mãe. Qual situação é menos pior, abortar o bebê (um morto) ou morrer a mãe e, por consequência, o bebê (dois mortos)? E teve aquele caso da menina grávida de gêmeos que foi estuprada e os gêmeos não tinham chance de sobreviver. Pior: a gravidez era de altíssimo risco da mãe morrer. Neste caso, qual é menos pior: morrer dois ou morrer três?

Ou seja, sou contra o aborto, exceto no caso acima.

Você é a favor da pena de morte?

Da mesma forma que o assassinato comum é errado, a pena de morte (uma outra modalidade de assassinato) também é. Não se deve punir um crime cometendo outro.

Não só isso: morrendo, o criminoso, na minha opinião, não paga o que devia pelo crime, pois morrer, todo mundo vai, e o que ocorre na pena de morte é o cara não ficar preso e acontecer algo que já ia acontecer de qualquer forma. É melhor a prisão perpétua, na qual ele também morre (de velho), mas passa a vida toda preso, pagando pelo seu crime.

Sem contar que, caso descubram que o condenado não é o culpado, não tem como reverter a morte, uma vez que as esferas do dragão só existem no universo Dragon Ball.

Você é a favor dos direitos das minorias em geral (gays, maconheiros, presidiários, negros)?

Todos deveriam ter exatamente os mesmos direitos, nenhum grupo deveria ter direitos exclusivos.

Aposentado não deveria ter gratuidade no transporte, ele é uma pessoa como qualquer outra, apenas ficou mais velha que as demais, não faz sentido ele não pagar passagem porque o planeta Terra deu 65 voltas em torno do Sol desde que ele nasceu.

Negro não deveria ter cotas nas universidades e nem um outro privilégio só porque é negro, ele é igual ao branco, só muda a quantidade de melanina na pele, algo que não quer dizer nada. E na minha opinião, o negro só não está inserido nas universidades pelo mesmo motivo das mulheres não estarem inseridas no mercado de trabalho na área de desenvolvimento de software, porque possui um preconceito interno de que não vai conseguir.

Muitos podem dizer que o Brasil tem uma dívida histórica com relação aos afrodescendentes, que estes foram escravizados, mas o que os negros de hoje em dia têm a ver com os escravizados do passado (não apenas africanos, mas também índios), sendo que muitos deles nem são afrodescendentes, como a Daiane dos Santos, não qual foi provado que ela, apesar de negra, tem descendência europeia?

Maconheiro é contraventor penal, tem, assim como eu e você que está lendo isso, o dever de cumprir a lei. É como se os ladrões requererem o direito de roubar pessoas.

Presidiário é quem, por determinação judicial, deve ficar afastado da sociedade e, assim, ser privado de alguns dos nossos direitos de quem está do lado de fora dos presídios. Não há nenhuma razão para os presos terem algum direito especial.

Gay é opção sexual. Os homossexuais, assim como outras minorias e como todo mundo, têm o direito de não serem discriminados, mas veja bem, é um direito de todos, não de um grupo específico. Também não há nenhuma razão para os gays terem algum direito especial só porque são gays.

O que você acha das aplicações dos direitos humanos no Brasil?

Acho falha, assim como no mundo todo, ainda mais que não há como fiscalizar 100% o que acontece no Brasil e no mundo. Mas convenhamos que, hoje em dia, os direitos humanos não bem mais respeitados do que há décadas e séculos atrás.

O que você acha dos comportamentos e tendências sociais?

Depende muito de que tipo de tendência, em relação ao quê. Há comportamentos e tendências que eu concordo e há comportamentos e tendências que eu discordo. Cada caso é um caso. Mas de um modo geral, acho que o povo deveria pensar baseado mais no racional e menos na cultura popular e em interesses pessoais.

Meu novo emprego em São Paulo

Postado em Atividades profissionais em 27/07/2009 por Allan Taborda

Depois de meses procurando um emprego, enviando currículos e até participando de entrevistas, finalmente consegui um emprego como programador Java.

Logo no início desse mês, fui chamado para fazer umas provas a fim de averiguar se eu possuía o conhecimento teórico necessário para preencher a vaga. Fiz a prova em questão no dia 6.

Posteriormente, me chamaram para a segunda fase do processo de seleção, onde fiz uma entrevista de emprego e um teste prático. A entrevista e e este teste foram feitos no dia 10 de julho.

No dia 13, recebi um e-mail me convocando para ir no dia seguinte na empresa a fim de fazer a entrevista final de contratação. A essa altura, eu já estava com quase certeza que eu iria ser contratado. Em tal entrevista, me foram feitas algumas perguntas adicionais, me falaram como seria o cargo na empresa, as condições de trabalho e mais algumas outras coisas. Eu aceitei tais condições e fui informado que eu havia sido contratado para a vaga. Comecei a trabalhar no dia seguinte.

Nos três primeiros dias de trabalho, tive que ir e voltar de São Paulo, foi bastante corrido pelo fato de acordar de madrugada e voltar só de noite, pois o ônibus demora muito, principalmente o ônibus da volta.

Mas a partir dessa última semana, passei a ficar hospedado na casa da Tia Carmen, apesar dela morar um pouco longe do serviço (tenho que pegar ônibus e Metrô, inclusive com baldeação na estação Sé) e de não haver acesso à Internet na casa dela. Mas agora está sendo melhor do que subir e descer todo o dia, inclusive mais barato do que se eu tivesse contratado o ônibus fretado (que vai ficar mais caro do que já tá graças ao prefeito burro daquela cidade).

Nos fins de semana (ou melhor, ao término do expediente das sextas-feiras), eu retorno a Praia Grande para passar o fim de semana. Então, retorno a São Paulo na segunda-feira de manhã, já descansado.

Mas infelizmente, esta semana, acabei pegando uma gripe e passei este fim de semana meio mal, mas já estou recuperado para voltar ao trabalho. Por falar nisso, está havendo uma epidemia de gripe na capital paulista, pelo que vi no telejornal (também, né, com um monte de gente tossindo e espirrando nas estações do Metrô sem pôr a mão na boca e com todo aquele aperto principalmente na estação Sé, ainda mais com este clima frio, não tem como não pegar gripe).

Vou encerrando este post por aqui, ainda mais que eu já escrevi o que eu tinha que escrever e eu já deveria estar dormindo para amanhã eu acordar cedo para ir a São Paulo trabalhar. Até o próximo post (sabe-se lá quando será postado).

Observação: a Tia Carmen em questão é a mesma na qual eu sonhei no dia 30 de Março de 2004, sonho este postado no meu outro blog (o que eu escrevo meus sonhos) no dia 10 de Abril do mesmo ano, ainda no antigo endereço no Blig (ainda antes do blog ser transferido para o UOL Blog), na época que meus relatos de sonhos eram pequenos. Quem quiser conferir o sonho em questão, pode acessá-lo em http://sonhosdoallan.blig.ig.com.br/2004/04/ola-internautas-hoje-eu-irei.html

Robowebert Player, tocador de áudio em Java

Postado em Atividades profissionais, Lazer, Música em 03/07/2009 por Allan Taborda

Tenho desenvolvido nesses últimos meses (desde Fevereiro, para ser mais exato) um player de áudio escrito em Java no qual eu batizei de Robowebert Player. Ele reproduz áudio nos formatos MP3, OGG, Speex, FLAC e Monkey’s Audio, além dos formatos padrão do Java (AIFF, WAV e alguns outros). Suporta a leitura e salvamento de quatro formatos de playlists: M3U, PLS, XSPF e um formato próprio que estou desenvolvendo, chamado de RWPF. Além disso, possui um analizador de espectro, que é aquele monte de barrinhas que ficam subindo e descendo enquanto a música toca, além de controle de volume e de balanço, repetição de músicas, visualização dos metadados das músicas e uma barra de progresso meio capenga.

Tudo começou quando eu pesquisei pela Internet como fazer para tocar sons com Java. Encontrei um pequeno tutorial de como tocar arquivos MP3 usando a biblioteca JLayer, disponibilizada no site JavaZOOM.net e desenvolvi um minúsculo player que tocava apenas MP3 e que em sua interface possuía apenas três botões, um para selecionar a música, um para tocar a música e o último para parar de tocar a música. O player e mais a tela gráfica tinham cerca de umas cem linhas de código (ou nem isso). Com certeza, deve ser o menor player de MP3 da história.

Aí eu tive a idéia de desenvolver um player maior, que tocasse outros formatos de áudio além do MP3. Pensei em criar um subsistema para cada formato que o player fosse suportar. Entretanto, percebi o quanto isso iria ser difícil, pois a API da biblioteca JOrbis (biblioteca de suporte ao formato OGG) é completamente diferente da API do JLayer, além de mais complexa e de mais baixo nível.

Então, acessando o site do JavaZOOM acima citado, vi que os próprios desenvolvedores do JLayer desenvolveram um player em Java chamado JLGui, que suportava MP3, OGG e outros formatos de áudio. Era basicamente um clone do WinAmp e suportava os skins feitos para este. Resolvi testá-lo e não gostei muito de sua confusa interface, que além de confusa, a metade desta insistia em ficar na frente de todas as outras janelas. Para complicar, o player em si tinha uns bugs idiotas.

O JLGui é licenciado sob a LGPL, uma licença livre que me permite modificar o software de acordo com minhas necessidades. Entretanto, o código-fonte desse player é extremamente confuso, macarrônico e de extrema dificuldade de manutenção, além de ter sua camada de apresentação (o código responsável pela tela gráfica) colada na camada de negócios (o código responsável pela regra de negócios). Ou pior: todas as partes do player são coladas em várias outras partes.

Só para se ter uma idéia, se eu quisesse adicionar o suporte ao formato de playlist XSPF a este player, eu teria que fazer toda uma reengenharia no programa inteiro, praticamente.

A única parte que não era colada a nenhuma outra era o motor de execução de áudio, que foi concebido para ser aproveitado em outros softwares que desejassem tocar áudio com uma API de alto nível. Tal motor de execução era mantido em uma biblioteca separada chamada BasicPlayer.

O BasicPlayer utiliza uma API comum para todos os formatos de áudio baseada na API Java Sound, que usa Service Providers (bibliotecas especiais) que proveem o suporte aos formatos de áudio sem alterar o código-fonte que reproduz a música. Nas minhas pesquisas iniciais, eu já havia visto algo sobre a API Java Sound, entretanto, vi que ela era bastante confusa e de baixo nível. Já o BasicPlayer era de alto nível.

O que resolvi fazer? Criar um player que utilizasse o BasicPlayer como motor de execução de áudio. Aproveitei a interface simplória do minúsculo player que eu havia feito e a adaptei no BasicPlayer. A partir daí, fui implementando outras funcionalidades basicas, como controle de volume e de balanço e o botão de pausar e continuar a reprodução do áudio.

Aí o player foi evoluindo: passou a trabalhar com uma playlist na memória e a salvar e carregar um formato próprio de playlists baseado em XML, ganhou também botões de voltar à música anterior, voltar ao começo da música atual e ir para a próxima música.

Resolvi implementar o suporte à visualização dos metadados dos arquivos de áudio. O priemiro lugar onde pesquisei como fazer isso foi no macarrônico código do JLGui. Essa parte do código do JLGui não estava tão macarrônica e ligada às demais partes do player como as outras (só um pouco), então eu resolvi pegar este código e adapá-lo ao meu próprio player, fazendo alterações diversas a fim de retirar completamente a dependência das outras partes do JLGui.

Já com o suporte aos metadados das músicas e mesmo com a interface estando muito tosca, disponibilizei o player (ainda sem nome naquela época) para alguns membros da comunidade Linux versus Windows do Orkut para ver o que eles achavam. Eles emitiram suas opiniões e o que eles gostariam de ver no player.

Apartir daí, continuei a adicionar outros recursos ao player e a mudar um pouco sua interface (que ainda está tosca, mas menos do que antes). O último recurso adicionado até o momento foi o analizador de espectro, provido pela biblioteca KJ DSS.

O código-fonte do meu player, ao contrário do código do JLGui, é bastante claro e simples. O suporte à playlist na memória, por exemplo, é implementado por uma classe que gerencia um simples ArrayList contendo os objetos File, que provém acesso aos arquivos de áudio no HD. Já o JLGui implementa a mesma coisa com algumas classes, uma delas responsável por cada música na playlist (e que contém parte do código para manipular playlists no formato M3U – e manipular mal), outra cheia de métodos e mais uma interface gigantesca, além de mais algum código macarrônico colado na interface gráfica e em mais não sei onde.

Pelo fato da camada de apresentação ser completamente desacoplada da camada de negócios, será possível escrever telas gráficas alternativas ao visual atual do meu player. Inclusive, estou planejando para o futuro uma interface totalmente diferente e inovadora além da que já existe, além de uma interface alternativa usando a SwingWT, implementação alternativa (e mais leve) da API Swing baseada na biblioteca SWT.

No link abaixo, uma screenshot de como está o visual do meu player atualmente:

http://img30.imageshack.us/img30/4513/rwplayer.png

Ainda falta a grande maioria dos recursos que desejo implementar no meu player, como biblioteca de mídia, playlists dinâmicas, execução aleatória de músicas contidas numa playlist, edição de metadados das músicas, internacionalização e uma penca de outras coisas. O player vai ficar o bicho.

Entretanto, irei disponibilizar uma segunda versão pública com apenas alguns desses recursos, quando eu achar que ele está bom o suficiente para ser usado pelo público geral, ainda que incompleto. Irei disponibilizá-lo no SourceForge.net, onde já mantenho hospedado outro software que desenvolvo, o CapeTrivia.

Meu Player será licenciado sob a GPL 3, ou melhor, o código que escrevi está sob esta licença. O subsistema de leitura de metadados está sob a LGPL 2.0 pois não posso alterar a licença dessa parte, já que não fui eu que escrevi. E as demais bibliotecas estão nas suas respectivas licenças, todas compatíveis com a GPL 3.

Por falar em licenças, eu acabei tendo umas dúvidas com relação à compatibilidade destas, ainda mais por causa da bibblioteca que provê o suporte ao formato de playlist XSPF (JSpiff) estar na licença Apache 2.0 e haver código LGPL 2.0 no player. Resolvi mandar um e-mail para o Richard Stallman, presidente da Free Software Foundation (ou melhor, dois e-mails, o outro foi depois da resposta que ele me mandou). A troca de e-mails com o Stallman merece um post à parte (no próximo deste blog, quem sabe), mas resumidamente, ele respondeu que as licenças são todas compatíveis entre si.

Escolhi o nome Robowebert Player a fim de homenagear um antigo personagem das minhas histórias infantis de quando eu era criança e que eu mesmo inventei, o Robowebert. Este era um robô gigantesco ao estilo do Megazord dos Power Rangers que possuía vários componentes integrados e recursos diversos e que tinha a finalidade de lutar contra inimigos gigantescos que ameaçavam a cidade de Pret-a. O Robowebert era controlado pela Darker Webert, uma mulher que combatia o crime naquela cidade fictícia e que vivia cheia da grana. Ela também merece um post à parte, pois teve uma importância histórica na minha infância.

Não há uma previsão de quando a próxima versão pública (e desta vez disponível ao público geral e não só a alguns membros da Linux versus Windows) será disponibilizada, mas espero ver o Robowebert Player na próxima versão estável do Debian, codinome Squeeze, a ser lançada provavelmente no ano que vem.

Atualização: escrevi um novo post sobre o Robowebert Player, que pode ser visto em: http://irmaodamara.wordpress.com/2010/07/12/mais-sobre-o-robowebert-player/

Finalmente consegui a certificação SCJP 6.0!

Postado em Atividades profissionais, História em 05/05/2009 por Allan Taborda

Enfim, no último dia 15 de Abril, fiz a prova a fim de obter a certificação SCJP 6.0 e passei no exame, com um percentual de acertos de 81% (59 questões respondidas corretamente, das 72 questões da prova).

Meu resultado detalhado foi:

Declarações, Inicialização e Escopo: 91%

Controle de Fluxo: 81%

Conteúdo da API: 80%

Concorrência: 87%

Conceitos OO: 70%

Coleções / Genéricos: 80%

Fundamentos: 81%

Tudo começou há um ano atrás, quando o David Muinos, um dos principais desenvolvedores do Perola (uma ferramenta de persistência de dados), me deu a idéia de eu obter a SCJP. Então, eu procurei saber mais acerca dessa certificação e me informei numa página do site da Sun Microsystems o que era a ditacuja e o que caía na prova. Além disso, perguntei a um ex-colega de faculdade, o Roberto Tengan (que havia obtido a SCJP 5.0 há algum tempo atrás), como ele havia procedido a fim de obter a certificação e ele me respondeu por e-mail, com todos os detalhes.

No site da Sun, eu vi que já havia disponível uma nova versão da SCJP, a 6.0, e resolvi que esta seria a melhor escolha, pois era a versão mais atual, ainda que a prova só estava disponível no idioma inglês (ao contrário da versão 5.0, que estava disponível em português).

Na ância de fazer a prova o mais rápido possível, comprei logo o voucher (cupom que dá direito a fazer qualquer certificação de Java da Sun) por R$330,00 ligando no número 0800 55 78 63, daí a atendente dá as instruções de como proceder (basicamente, ela pergunta o e-mail e o resto é feito tudo por e-mail). Depois que chegou o boleto bancário, paguei-o e então me enviaram um e-mail com o número do voucher.

Eu pretendia fazer a prova em poucos meses, mas devido a meu estágio, esforços para conseguir um emprego e principalmente por causa dos meus estudos para esta certificação, a data da prova foi adiada por vários meses, até que o final do prazo se aproximou, faltando apenas dois meses para terminá-lo (depois do prazo, o voucher expira).

Então, eu decidi por marcar a data exata da prova para o dia 15 de Abril e intensifiquei ainda mais meus estudos, lendo a versão em inglês do famigerado livro da Kathy Sierra e do Bert Bates que eu peguei emprestado. Embora eu não fale inglês, eu consigo ler normalmente textos nesse idioma, inclusive entendendo o que está escrito.

Li o livro inteiro em cerca de três semanas. Era para eu ter terminado a leitura em menos tempo, mas aconteceram uns imprevistos que me desvirtuaram dos meus estudos, incluindo a confecção de um software que minha amiga Mara encomendou (que eu tive que parar o desenvolvimento no meio para poder prosseguir com meus estudos, mas depois da certificação eu consegui terminá-lo). Terminei de ler um dia antes da prova.

No dia seguinte, acordei cedo. Isso não significa que eu dormi o suficiente, uma vez que eu demorei muito a pegar no sono (isso sempre ocorre às vésperas de algo importante, como uma entrevista de emprego). Dormi apenas 3 horas.

A prova havia sido marcada para às 13:15, então eu vi que dava tempo de fazer mais um exame simulado (já havia feito dois, obtendo um bom íncice de acertos).

Mas aí minha mãe, que ia me levar de carro até a Tecnoponta (escola profissionalizante que aplica a prova aqui na Baixada Santista), em Santos, ficou me pressionando para eu ir logo, pois não sabia quanto tempo iria demorar para chegar ao local.

A metade das questões daquele simulado eu respondi de qualquer jeito e correndo, e eu acabei tirando uma nota ruim, errando questões fáceis. Tirei 60% de acertos, 5% abaixo do mínimo necessário para a aprovação. Fiquei um pouco preocupado e um pouco mais nervoso.

Engoli o almoço com medo de me atrasar, ainda mais que minha mãe me pressionava cada vez mais para ir mais rápido, pois segundo ela (que conhece o caminho até Santos e teoricamente sabia quanto tempo demorava a ida até aquela cidade), poderia não dar tempo de chegar no horário marcado. Eu e minha mãe saímos de carro às 10:20 e, antes do meio-dia, chegamos.

Entrei no prédio e subi até o sétimo andar, onde ficava a Tecnoponta, que estava em reforma, com uma sala de aula cheia de bugigangas e um pedreiro lixando e pintando o teto. Lá, me informaram que eu havia chegado cedo demais e que eu tinha que esperar até às 13:15. Minha mãe me apressou tanto para eu ter que esperar no espaço reservado aos alunos no intervalo das aulas (se bem que não tinha ninguém além de mim). Fiquei andando e tomando café expresso de uma máquina que tinha no local.

Chegando a hora marcada, procedi como havia sido informado no e-mail que recebi no dia que marquei a prova pela Internet, no site da Prometric (empresa que aplica a prova, sendo a Tecnoponta um local credenciado por esta), mostrando um documento com foto, no caso, meu RG.

Entretanto, a moça me informou que eu precisava também apresentar o CPF, ainda que não falava nada de CPF no e-mail que eu havia recebido. Naquela hora, fiquei bastante preocupado, uma vez que talvez eu não fizesse a prova por não ter apresentado o CPF. Já preparava meu discurso de que ia processar a Prometric e a Tecnoponta por não ter avisado sobre a necessidade de apresenta o CPF e pelo fato do RG ser suficiente para me identificar, quando me liberaram de apresentar o CPF, para meu alívio.

Então, a moça que havia me pedido o CPF (uma moça bonita, mas que estava com uma cara bastante séria, como se eu tivesse cometido um crime inafiançável) pediu para eu segui-la até o local da prova, que ficava em outro andar, em um “lugar secreto”, onde ficava umas salas de aula onde estava tendo aula de algum curso, com umas alunas muito bonitas, como deu para ver pela janela. Basicamente, o local do exame era outra sala de aula, só que um pouco menor.

Chegando lá, ela me falou como eu devia proceder, inclusive disse para eu não sair do local da prova sem o papel impresso com o resultado do exame e que, em caso de emergência, que era para usar um telefone que estava no canto e ligar para o ramal informado.

E então eu comecei a fazer o exame, que foi aplicada em um computador rodando o software da prova certificatória. No início, havia umas perguntas sobre se eu trabalhava para a Sun ou para a Prometric, se eu permitia que meus dados pessoais fossem usados não sei de que forma pela Sun com fins de não sei o quê, etc, perguntas que, segundo a prova, não contava no resultado do exame. Depois, havia um texto que explicava como interpretar as questões (por exemplo, não interpretar a numeração das linhas como parte do código). A partir desse texto, o cronômetro do tempo de prova começou a ser contado. Na minha opinião, deveriam contar a partir da primeira questão, e não a partir desse texto.

A prova poderia ser feita em, no máximo, três horas e meia, bastante tempo. Fiz a prova com calma (apesar de tudo o que aconteceu, inclusive momentos antes do exame), lendo as questões atenciosamente e só depois respondendo.

Eu esperava que a prova fosse mais difícil, mas no fim, a maioria das questões estava bem fácil, algumas com respostas óbvias, principalmente as de competar os espaços em branco. As questões com mais de uma resposta certa informavam o número de respostas certas que tinha que marcar (diferente das provas simuladas, que falavam para responder todas que se aplicam). E a única questão que eu marquei para revisão foi a questão 46, que era uma sobre qual o conteúdo da String após um monte de operações com StringBuilder.

Com 40 minutos sobrando, terminei a prova e confirmei as respostas (após rever a questão 46, gastando vários minutos nela). Daí, o software da prova certificatória tentou imprimir o resultado na impressora. E advinha o que aconteceu? A impressora deu pau!

Peguei o telefone de emergência e liguei para o ramal que estava escrito na folha de rascunho (que eu usei para calcular o resultado da questão 46 e mais a ordem de um array em outra questão sobre ordenação). Minutos depois, chegou aquela moça bonita que me pediu o CPF e eu expliquei o ocorrido. Ela tentou imprimir uma segunda via, mas a impressora continuou a se negar a funcionar.

Daí ela chamou o técnico que cuida dos equipamentos e, vários minutos depois, ele chegou e tentou descobrir o que havia acontecido. Instantes depois, ele descobriu o problema: a impressora estava desligada. Não só isso: o computador no qual a impressora estava conectada também estava desligado.

Depois de ligar os equipamentos, finalmente o resultado do exame foi impresso. E então, eu soube que eu havia sido aprovado (se bem que eu meio que já sabia durante a prova).

E moça falou para eu voltar ao sétimo andar para lá carimbarem o papel impresso. Entrei no elevador e acabei indo para o andar errado, pois havia me esquecido de apertar o botão 7. Fui parar no térreo. Mas depois eu subi de volta e carimbaram o resultado do exame.

Na volta para casa, minha mãe errou o caminho e o carro acabou preso num congestionamento no centro de São Vicente,, após andar em círculos. Mas depois de bastante tempo, finalmente conseguimos chegar em casa.

Durante o tempo que fiquei esperando, fazendo prova e esperando solucionarem o problema da impressora, minha mãe ficou no carro lendo livro e fazendo as unhas.

E essa foi a conturbada história da minha certificação SCJP 6.0 (história essa com final feliz). Futuramente, penso em fazer as certificações SCWCD, SCBCD, SCDJWS, SCEA e SCJD, não necessariamente nessa ordem, e ainda não escolhi qual eu vou fazer primeiro, mas muito provavelmente irei fazer a SCEA por último.

Por hoje é só! Até o próximo post, que provavelmente deve ser menor do que este!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.