Assunto Aleatorio

Um pouco de tudo….coisas de computeiro…politica….livros

Gravadoras X Pirataria - Mais um tiro no pé das gravadoras

Posted by admin on August 20th, 2008

O fundador da radio online Pandora - Tim Westergren - anunciou que a mesma deve falir até o fim do ano devido ao valor exageradamente alto pago pelo copyright.

O valor definido pelo Copyright Royalty Board, de U$0,19 por música, por usuário, faz com que a Pandora gaste U$17 milhões anualmente com os direitos. Considerando que o faturamento da rádio no ano passado foi de U$25 milhões, isso corresponde a um valor praticamente impagável, e que afugenta os investidores.
(fonte: aqui e aqui)

Agora fica a seguinte questão:

Onde os usuários do Pandora vão procurar por músicas:

  • Comprando CDs (huahauhauhauhau);
  • Em outra rádio online que deve falir rápidamente devido ao alto valor dos direitos autorais;
  • eMule;
  • bitTorrent;
  • rapidShare;
  • (outra fonte de download pirata)

Posted in Coisas de Computeiro, O mundo a nossa volta | No Comments »

Java Básico - Collections

Posted by admin on August 13th, 2008

Trabalhar com conjutos de dados é um dos conceitos mais importantes quando se trata de programação. Quem nunca teve que implementar listas ligadas, filas, pilhas, arvores, etc…, nem que fosse na aula da faculdade, para manipular dados convenientemente.

Em Java nos temos o auxílio do Framework de Collections para ajudar nesse sentido. Esse framework tem muitas classe e interfaces específicas, e por isso mesmo pode ser tão bom ou ruim, conforme utilizado.

A estrutura básica de interfaces do framework Collections é a seguinte:

  • Collection
    • Set
    • List
    • Queue
  • Map

Repare que Map não é uma Collection (a interface Map não extende a interface Collection) , mas ela está aqui por se tratar de uma interface que define objetos para tratar grupos de objetos.

Cada uma dessas interfaces define coleções com características diferentes, vamos a alguns detalhes delas:

Collection

A interface mais básica do framework collections. Todo Set, List e Queue é uma Collection. Os pricipais metodos definidos por essa interface, e implementados por todas as Collections são:

  • add - Adiciona um elemento à collection;
  • addAll - Adiciona todos os elementos da collection de origem à collection de destino;
  • contains - verifica se a collection tem o elemento em questão;
  • iterator - retorna um Iterator para os elementos dessa Collection;
  • size - retorna a quantidade de elementos na Collection.

Set

Define uma coleção em que não podem haver elmentos repetidos. Essa interface não define nenhum método diferente da interface Collection, mas ela é importante por definir que os elementos não podem ser repetidos.

List

uma coleção ordenada, que permite elementos duplicados e que dá controle ao usuario do lugar onde ele quer inserir os elementos. Podemos destacar os seguintes metodos da interface list (fora os ja destacados da interface Collection):

  • add(int index, E element) - insere um elemento na List na posição indicada;
  • get(int index) - retorna o elemento na posição indicada;
  • remove(int index) - remove o elemento da posição indicada;
  • set(int index, E element) - substitui o elemento da posição indicada pelo novo elemento.

Queue

Define um fila. O foco dessa interface é o processamento e não o armazenamento da informação. Os pricipais metodos definidos são:

  • add - insere um elemento se possível, se não, lança uma Exception;
  • offer - mesmo funcionamento do add, exceto pelo fato de não lançar Exception, mas sim retornar true ou false, conforme seu funcionamento;
  • remove - remove o primeiro elemento da Fila, lança uma exception se a fila estiver vazia;
  • poll - mesmo funcionamento de remove, porem, retorna null se a fila estiver vazia;
  • element - recupera (sem remover) o primeiro elemento da fila, lança uma exception se a fila estiver vazia;
  • peek - mesmo funcionamento de element, porem retorna null se a fila estiver vazia.

Map

um objeto que armazena relacionamentos chave/valor. Maps não permitem chaves duplicadas. Os principais metodos definidos pela interface são:

  • containsKey - verifica se o mapa contem a chave determinada;
  • containsValue - verifica se o mapa contém o valor determinado;
  • entrySet - retorna um Set com os elementos do mapa;
  • get - retorna o elemento dada a sua chave;
  • keySet - retorna um Set com as chaves do mapa;
  • put - adiciona uma chave e seu valor ao mapa;
  • remove - remove um elemento do mapa dada a sua chave;
  • size - retorna o numero de pares chave/valor no mapa;
  • values - retorna uma Collection com os valores do mapa.

Posted in Coisas de Computeiro, Java Básico | 3 Comments »

Tip - window.open(…)

Posted by admin on August 11th, 2008

Pergunta

Porque o código javaScript abaixo funciona no Firefox(3) mas não funciona no IE(6)?

window.open(’somePage.html’, ‘Window Name’, ‘height=430,width=430′);

Resposta

Porque o IE não aceita espaços em branco no nome da janela. No caso a melhor solução seria:

window.open(’somePage.html’, ‘WindowName‘, ‘height=430,width=430′);

Posted in Coisas de Computeiro, Tips | No Comments »

O mundo à nossa volta - 3

Posted by admin on August 7th, 2008

Aeiou - Esse é o nome da nova operadora de Celular de São Paulo. Eu pensei, pensei, pensei de novo e não consegui imaginar o  motivo de a Unicel ter escolhido esse nome. Resta esperar a primeira campanha publicitária pra saber o porque do nome. Pode ser uma grande sacada, ou uma grande furada (Não sei porque, mas eu aposto na segunda opção). A operadora promete preços agressivos nos serviços (de R$0,14 a R$0,63 por minuto), em contraponto à ausência de subsídios para a venda de aparelhos. Pelo menos nessa parte eu acho que eles acertaram.

08/08/08 - Nessa data se iniciam os jogos mundiais do desrespeito aos direitos humanos. Até algum tempo atrás eu me perguntava qual a graça que os romanos via em ir ao coliseu pra ver pessoas se matando em homenagem ao César nos tempos antigos. Agora a historia vai ser um pouco diferente: algumas pessoas vão distrair o mundo inteiro pra que os pobres idiotas esqueçam que o César está matando muitas pessoas no seu império. Não faço questão nenhuma de assistir ou saber os resultados.

Eleições - Já começou também a festa da propaganda estúpida. Vão ser santinhos (o termo santinho, usado para o panfletinho dos candidatos, carrega uma ironia sem tamanho), carros de som, bandeiras em postes, faixas em semáforos e o que mais se possa imaginar quetransmita um número para os eleitores. Pena que nenhum desse meios de propaganda transmita as ideias dos candidatos pra cidade. Talvez porque algum deles não tenha nem ideia do que estão fazendo ali, nem do que eles vão fazer se forem eleitos.

Posted in Aleatorio, O mundo a nossa volta | No Comments »

Cuil X Google - Ainda da Google

Posted by admin on July 29th, 2008

Hoje (ou nesse fim de semana) surgiram várias notícias à respeito do cuil que seria o buscador que vai desbancar o google. O google aliás é o segundo maior alvo de matadores - o primeiro é o iPod, afinal surge um novo “matador” de iPod por semana, mas eu acho que o aparelhinho é Highlander.

Na primeira noticia que eu eu ignorei. É meu comportamento padrão ao ver uma noticia de matador de …/o concorrente que vai desbancar o …/o sucessor do …, porque até agora, sinceramente, eu nunca vi um aparelho/tecnologia, que se divulga como o matador de outro cumprir com o prometido (vide Zune, n celulares que prometeram matar o iPhone, n buscadores que se disseram melhores que o google).

Mas como eu fui bombardeado pelas noticias do cuil o dia inteiro, falando sobre sua divisão por contexto, busca inteligente, etc… eu acabei cedendo e acessando o dito endereço.

Por falta de criatividade minha primeira (e única) busca no cuil foi a palavra “brasil“. Considerando que nosso país é destaque internacional em algumas áreas (futebol, bio-combustível, carnaval), achei que os resultados separados por contexto seriam interessantes. O resultado porém me decepcionou bastante.

Primeiramente, no conteúdo principal da página os links de mais destaque são:

  • um mestre de capoeira;
  • embaixada dos EUA no Brasil;
  • Error;
  • LG Brasil;
  • MTV Brasil;
  • embaixada do Brasil nos EUA;
  • cantor Sergio Mendes;
  • banco do brasil (com o logotipo do Santander);
  • Radiobras;
  • Untitled document.

Nas abas de contexto, os temas são:

  • Banco do Brasil;
  • Jornal do Brasil;
  • Big Brother Brasil.

Nossa, quanta informação!!! Mas o que faltou? O que todos esses contextos têm em comum(sem contar o Error e o untitled document)? Cade um link pra uma página ou artigo que falasse sobre um tal de país chamado Brasil? É muito aperitivo, mas sem prato principal.

Resultado do cuil para brasil

Enquanto isso, no google:

No inicio da página aparecem três fotos que definem o Brasil:

  • A bunda de uma mulata;
  • Uma bandeira do Brasil;
  • um mapa politico do Brasil;

Em seguida, o primeiro link de texto é um artigo da wikipedia sobre o Brasil, em seguida temos todo o tipo de conteúdo relacionado ao Brasil, mas a informação principal estava lá, logo no começo.

Resultado do google para brasil

Com isso eu acho (e isso é só uma opinião sem valor científico ou vínculo eleitoral com qualquer candidato) que o cuil é sem dúvida muito promissor, mas ainda precisa melhor muito pra se chamar de sucessor do Google.

Posted in Coisas de Computeiro | 1 Comment »

Java Básico: Comparando objetos em Java

Posted by admin on July 7th, 2008

Qual numero é maior, 1 ou 928? Que palavra vem primeiro no dicionário “abacate” ou “banana”?
Pra essas perguntas as respostas são fáceis, mas dado dois objetos do tipo Carro, qual deve ser colocado primeiro que o outro em uma ordenação?

Pra essas situações, em que um objeto deve ser comparável, Java define abordagens diferentes, são elas o uso da interface Comparable no objeto que se deseja comparar, ou o implementação da interface Comparator para os objetos que se deseja declarar.

Ambas as interfaces são extremamente simples. A interface comparable define o método int compareTo(T o). Quando um objeto que implementa Comparable vai ser comparado com outro, o método compareTo daquele objeto é invocado passando como argumento o objeto com que se quer comparar. Se o retorno da chamada for um número maior que zero, é considerado que o objeto em que está se chamando o método é maior que o objeto que está sendo passado como parâmetro, se o retorno for menor que zero, quer dizer que o objeto passado como parâmetro é maior que o objeto em que esta sendo feita a chamada, se os dois objetos forem considerados iguais, então o retorno deve ser zero.

Já a interface Comparator define o método int compare(T1 o1, T2 o2). Um objeto que implementa comparator, deve fazê-lo de tal forma que se o1 for maior que o2, o retorno deve ser um valor positivo, se o1 for menor que 02, o retorno deve ser um valor negativo, e se os objetos forem iguais, os dois objetos são iguais.

Vamos a um exemplo para demonstrar os usos dos dois:
Considere a classe carro a seguir:


public class Carro {

     public String marca;
     public String modelo;
     public String cor;
     public Integer ano;
     public Integer valorTabela;
     public Integer quilometragem;
     public Short velocidadeMaxima;

     @Override
     public String toString() {
         return marca + ” “ + modelo + ” “ + cor + ” “ + ano;
     }

}



Queremos agora fazer com que a ordem natural desses carros seja dada pelas marcas em ordem alfabética, e em caso de carros da mesma marca a ordenação deve ser dada pelo modelo, também em ordem alfabética, e em caso de carros do mesmo modelo, a ordem é dada pelo Ano, do mais antigo para o mais novo.
Como estamos falando da ordem natural dos Objetos, devemos implementar a interface Comparable, e com isso o método compareTo na nossa classe Carro:

public int compareTo(Carro carro) {
         if (this.marca.compareTo(carro.marca) != 0) {
             return this.marca.compareTo(carro.marca);
         }
         if (this.modelo.compareTo(carro.modelo) != 0) {
             return this.modelo.compareTo(carro.modelo);
         }
         return this.ano.compareTo(carro.ano);
     }




A segunda coisa que queremos é ter uma lista com os carros ordenados por seu valor de venda, esse valor é dado primeiro pelo valor de tabela, caso esse seja o mesmo, é dado pelo ano, do mais novo para o mais velho, e caso sejam do mesmo ano, pela quilometragem, do menos rodado para o mais rodado. Como o nosso objeto carro já implementa o método compareTo para definir sua ordem natural, não podemos usá-lo para definir a ordem por valor venal, mas podemos implementar um Comparator que faça essa comparação:

private class ValorVenalComparator implements Comparator {

         public int compare(Carro o1, Carro o2) {
             if (o1.valorTabela.compareTo(o2.valorTabela) != 0) {
                 return -1 * o1.valorTabela.compareTo(o2.valorTabela);
             }
             if (o1.ano.compareTo(o2.ano) != 0) {
                 return -1 * o1.ano.compareTo(o2.ano);
             }
             return o1.quilometragem.compareTo(o2.quilometragem);
         }

     }



O código final para a exibição da lista de carros ordenada das duas formas é o seguinte:

public class OrdenadorDeCarros {

     List lista = new ArrayList();

     public void listarOrdemNatural() {
         Collections.sort(lista);
         for (Carro carro : lista) {
             System.out.println(carro);
         }
     }

     public void ordenarValorVenal() {
         Collections.sort(lista, new ValorVenalComparator());
         for (Carro carro : lista) {
             System.out.println(carro);
         }
     }

     public static void main (String[] args) {
         OrdenadorDeCarros ordenador = new OrdenadorDeCarros();

         Carro fusca = new Carro();
         fusca.marca = “Volks”;
         fusca.modelo = “Fusca”;
         fusca.cor = “Laranja”;
         fusca.ano = 1976;
         fusca.quilometragem = 1800000;
         fusca.valorTabela = 4300;
         fusca.velocidadeMaxima = 100;
         ordenador.lista.add(fusca);

         Carro fusca2 = new Carro();
         fusca2.marca = “Volks”;
         fusca2.modelo = “Fusca”;
         fusca2.cor = “Azul”;
         fusca2.ano = 1989;
         fusca2.quilometragem = 128000;
         fusca2.valorTabela = 5600;
         fusca2.velocidadeMaxima = 103;
         ordenador.lista.add(fusca2);

         Carro _147 = new Carro();
         _147.marca = “Fiat”;
         _147.modelo = “147″;
         _147.cor = “Cinza”;
         _147.ano = 1989;
         _147.quilometragem = 109000;
         _147.valorTabela = 4200;
         _147.velocidadeMaxima = 70;
         ordenador.lista.add(_147);

         Carro monza = new Carro();
         monza.marca = “GM”;
         monza.modelo = “Monza”;
         monza.cor = “Branco”;
         monza.ano = 1989;
         monza.quilometragem = 95000;
         monza.valorTabela = 5600;
         monza.velocidadeMaxima = 140;
         ordenador.lista.add(monza);

         ordenador.listarOrdemNatural();

         System.out.println();
         System.out.println(” — Ordena Por Valor”);
         System.out.println();

         ordenador.ordenarValorVenal();
     }
}

Posted in Coisas de Computeiro, Java Básico | No Comments »

O mundo à nossa volta: Trânsito

Posted by admin on July 1st, 2008

Efeito Borboleta

Nessa segunda feira entrou um vigor na cidade de São Paulo uma medida que restringe a circulação de caminhões em uma área de 100km2 das 5 da manhã às 9 da noite. Eu que não tenho nada a ver com isso e nem passo por perto de São Paulo pude sentir o efeito. No trajeto que faço todo dia de Tatuí para Sorocaba, pude perceber uma enorme redução no número de caminhões. Isso porque a estrada em questão tem destino final na cidade de São Paulo.

Prevendo o futuro

A redução do número de caminhões no centro expandido de São Paulo, e consequentemente nas estradas que dão acesso à cidade de São Paulo deve provocar uma redução no número de acidentes. Algo me diz que vai ter governante querendo associar essa redução à lei de tolerância zero ao consumo de alcool. É claro que a tolerância zero vai provocar alguma redução, mas que cada esfera do governo vai querer puxar o indicador pro seu lado, isso vai.

O lucro é da Sociedade

No Jornal Nacional de segunda feira(30/06) em uma das matérias um policial dava uma declaração dizendo que o lucro com a lei seca era da sociedade, logo em seguida foram dados os seguintes dados estatísticos: em 10 dias de lei seca 296 motoristas foram detidos e outros 369 foram multados. Considerando que a multa é de 955 reais, e que ao todo 765 (296 + 369) motoristas foram autuados, chega-se a uma arrecadação de R$730.575.00 em 10 dias. Com isso chega-se a uma estimativa de R$ 26.665.987.50 em um ano, isso sem contar a fiança dos que forem presos, que pode variar de R$200.00 a R$1.200,00. Parece que não é só a sociedade que vai ter lucro.

Posted in O mundo a nossa volta | No Comments »

Plugins: CheckStyle para Eclipse

Posted by admin on June 30th, 2008

Um plugin bastante interessante que tenho usado no Eclipse é o checkstyle.

O que esse plugin faz é muito simples (ou não), ele coloca um warning em cada ponto em que você cometeu um erro com relação ao que está configurado como boa prática de programação no plugin.

Na verdade é faz um pouco mais do que isso, o plugin também indica algumas falhas que podem implicar em erros, o que só o torna mais útil.

O checkstyle aceita várias configurações de estilo, a default é a ‘Sun Checs‘, que reclame de tudo, por isso eu gosto mais, e recomendo, a ‘Sun Checks (Eclipse)’ que é um pouco menos rígida.

Mas como nem tudo são flores, e como eu sou chato, eu vou criticar um pouquinho. As vezes as checagens são um pouco exageradas. Vou citar 3 exemplos e depois o que fazer pra “corrigir”:

  • Métodos abstract, final, ou empty - O plugin indica com um warning todo método public que não seja final ou abstract, ou em ultimo caso, que não esteja vazio. A justificativa é que o método deve ter sua funcionalidade definida: ou ele foi feito para ser sobrescrito (abstract ou empty) ou ele foi feito para não ser sobrescrito (final). Mas eu acho que o método é meu, e eu tenho o direito de achar que ele pode servir bem para as duas coisas, e assumo o risco que eu corro com isso;
  • Nome de variável local sobrepondo o nome de um atributo da classe - Essa é simples, sabe aqueles settergettter e setters para um java bean com 20 atributos que o eclipse gera sozinho pra você, economizado o tempo enorme, e que coloca no parâmetro um variável do mesmo tipo, com o mesmo nome que o atributo para o qual foi criado o setter? Então, o plugin fala que não pode. Mas nesses casos, existe a abençoada palavra this pra diferenciar os dois, e o gerador de setters do eclipse sabe disso (e qualquer programador Java deveria saber também);
  • Limitação do número de linhas a 80 caracteres - Quando a indentação do seu código vai crescendo, chega a absurdos de não caber quase nada em uma linha. Além disso, hoje em dia, 80 caracteres é praticamente nada levando em consideração a resolução dos monitores padrão.


Eu resolvi os meus problemas clonando a configuração ‘Sun Checks (Eclipse)’ e editando as características que eu não gosto (Não é possível editar as configurações que vêm com o plugin). Dessa forma eu removi as seguintes checagens:

  • Class Design -> Design For Extension
  • Coding Problems -> Hidden Field

E editei a checagem:

  • Size Violations -> Maximum Line Length, diminuindo o atributo tabWidth de 8 pra 4, além disso você pode mudar a constante de tamanho máximo da linha para um valor maior que 80, mas use esse recurso com moderação.


Existem muitas outras opções, mas é bom pensar bem antes de mudar pra ver se o que você está mudando não pode vir a ser uma checagem importante.

O checkstyle pode ser instalado através do Eclipse Update, adicionando um repositório com a seguinte url: http://eclipse-cs.sourceforge.net/update

Posted in Coisas de Computeiro | No Comments »

O mundo à nossa volta: Na estrada, o que é mais perigoso?

Posted by admin on June 25th, 2008

Pergunta simples e direta: Qual dos itens abaixo é mais perigoso na estrada?

  • Buraco:  Buracos na pista
  • Falta de sinalização: Falta de Sinalização
  • Acostamento irregular: Acostamento com buracos e sujeira
  • Travessia de pedestres: travessia de pedestres pela estrada
  • Animais na pista: Animais soltos na pista
  • Bombom de licor: Perigoso bombom de licor

Para o nosso governo (e aqui eu não faço distinção de oposição ou situação) parce que o bombom de licor é o mais perigoso. Eu tenho viajado 60 km todo dia para ir ao trabalho, e encontro todas as situações acima (menos o bombom), além de caminhão com excesso de carga, veiculos mal conservados, motos com aquele mini-retrovisor que não da pra ver nada, falta de fiscalização e outras coisa.

Não estou dizendo que o consumo de alcool não seja um causador de acidente, mas a nossa legislação anterior já era suficiente, desde que a fiscalização fosse feita efetivamente.

A única diferença é que para consertar os buracos, regularizar os acostamentos, colocar sinalização, construir passarelas para pedestres, recolher os animais da pista, fiscalizar o estado de conservação dos veículos e a quantidade de carga, o governo vai precisar gastar dinheiro, enquanto que as multas (de 955 reais) pelo consumo de alcool vão colocar dinheiro nos cofres.

Está na cara que quando o assunto é a vida da população, os cofres estão fechados. Mas fazer o que, democracia á assim, não pensou pra votar, escolheu quem não vai pensar em você depois da eleição

Posted in O mundo a nossa volta | No Comments »

Promoção do Efetividade e BR-Linux

Posted by admin on June 25th, 2008

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!

Posted in Coisas de Computeiro, O mundo a nossa volta | No Comments »