Páginas

17 de dezembro de 2012

Criando um metrônomo em Java com a IDE NetBeans

Esse é um tutorial cujo objetivo é criar um simulador de metrônomo em Java e analisar seu código fonte. Estarei utilizando como base o software criado por mim chamado JMetrônomo, lançado em 23/07/2012.

Usaremos a versão 7 do Java Development Kit e também o NetBeans. Este último não é essencial, mas ajuda na criação de formulários e na compilação.Você pode baixar o código fonte do JMetrônomo nesse link.

É importante saber um pouco de Java e Orientação a Objetos para não ficar totalmente perdido no código, porém, creio ter deixado comentários e análises suficientes para a compreensão. Não deixe ler o tutorial se ainda não dominar o assunto, pois assim já estará estudando esse modelo de programação de maneira prática.

Para começar, vamos primeiro entender o funcionamento de um metrônomo, utilizando um texto da Wikipédia e um vídeo no Youtube.

 "O metrônomo é um relógio que mede o tempo (andamento) musical. Produzindo pulsos de duração regular, ele pode ser utilizado para fins de estudo ou interpretação musical."



Fica definido que a função do metrônomo é medir o tempo musical e que existem dois tipos de metrônomo: o mecânico e o eletrônico. Seus pulsos são regulares, isto é, têm uma duração e intervalo constante. Essa informação será fundamental para a realização do nosso software, afinal, também é a base do funcionamento do metrônomo.

Um ponto importante presente no vídeo é que há batidas fortes e fracas, que dependem do tipo de compasso da música. Apesar de serem sons diferentes, eles não deixam de formar pulsos regulares.

O metrônomo que vamos criar terá duas classes básicas:
  1. a classe frmMetronomo do formulário, onde o usuário insere a velocidade das batidas em BPM(batidas por minuto) e a quantidade de tempos em um compasso(o primeiro tempo do compasso é o tempo forte e os outros serão tempos fracos);
  2. a classe metronomo, onde o computador irá simular um metrônomo de acordo com as informações fornecidas.

Formulário do JMetrônomo, criado com auxílio da ferramenta NetBeans:

Tela principal do JMetrônomo

Nesta janela, o usuário pode tanto selecionar a velocidade pelo slidebar como especificar na caixa de texto. Depois, ele seleciona o compasso X por X, sendo que o segundo número não altera o funcionamento do compasso, servindo apenas de referência. O usuário pode iniciar ou parar a execução do metrônomo. Há ainda botões que enviam para a minha página na internet, exibem informações sobre o software e saem do mesmo.

Ainda não vamos programar esta janela. Julgo ser melhor trabalhar primeiro a classe metronomo.

Classe metronomo:

package jmetronomo;

import java.util.Timer;
import java.util.TimerTask;

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.File;

import sun.audio.*;  


//classe metrônomo
public class metronomo{
    //atributos que serão enviados pelo formulário ou por outro lugar
    private int BPM;
    private int Tempos;
    private int Nota;
  
    //atributos que serão usados apenas nessa classe
    private double sleep_timer;
    private int tempoatual;
  
    //cria um novo objeto Timer da classe que foi importada importado
    Timer timer = new Timer();
  
    //Construtor que 'pede' parâmetros
    public metronomo(int BPM, int Tempos, int Nota) {
    setBPM(BPM);
    setTempos(Tempos);
    setNota(Nota);
    }
  
  
    //Métodos GET e SET
    public int getBPM() {
        return BPM;
    }
  
    public void setBPM(int BPM) {
        this.BPM = BPM;
    }

    public int getTempos() {
        return Tempos;
    }

    public void setTempos(int Tempos) {
        this.Tempos = Tempos;
    }

    public int getNota() {
        return Nota;
    }

    public void setNota(int Nota) {
        this.Nota = Nota;
    }
 
    public double getSleep_timer() {
        return sleep_timer;
    }

    public void setSleep_timer(double sleep_timer) {
        this.sleep_timer = sleep_timer;
    }

    public int getTempoatual() {
        return tempoatual;
    }

    public void setTempoatual(int tempoatual) {
        this.tempoatual = tempoatual;
    }
  
    //fim dos métodos GET e SET
  
    //método principal que será usado para iniciar o metrônomo
    public void run() {
       
        //fórmula usada para transformar as Batidas por Minuto em um número compatível com o timer
        setSleep_timer( 1.0 / getBPM() * 60000.0);
      
        //iniciando o timer pela classe BEEP, que executará o som a cada intervalo de tempo definido no comando acima
        timer.schedule(new beep(), 0, (long) getSleep_timer());
    }
  
    //classe do beep
    public class beep extends TimerTask {
        public void run() {
              
                //se a variável tempoatual for 0, some um tempo (começa no 1º) e termine o método
                if (getTempoatual() == 0) {
                    setTempoatual(getTempoatual() + 1);
                    return;
                }
              
                // se for o primeiro tempo, o beep será forte, caso o contrário, fraco
                if (getTempoatual() == 1) {
                    //chama o método do beep forte(ver abaixo)
                    BeepForte();
                }
                else {
                    //chama o método do beep fraco(ver abaixo)
                    BeepFraco();
                }
              
                //se o tempo atual atingir a quantidade de tempos de compasso definida pelo usuário, é zerado o compasso
                if (tempoatual == getTempos()) {
                    // zerando o tempo
                    setTempoatual(0);
                }
              
                // avancar um tempo
        setTempoatual(getTempoatual() + 1);

        }
    }

    //método para terminar a execução do programa, simplismente cancela o timer declarado no início e ligado no método run()
    public void encerrar() {
        timer.cancel();
    }

  
    //método do beep forte
    public void BeepForte() {
      
        try{
            //comandos necessários para tocar o som presente no arquivo 'beepforte.wav'
            //obs: acho que este arquivo fica fora do pacote .jar, o que está dentro não consegui executar ainda.
            File diretorio = new File("beepforte.wav");
            InputStream in = new FileInputStream(diretorio);
            AudioStream as = new AudioStream(in);
            AudioPlayer.player.start(as);    
       }
          
       catch(java.io.IOException e) { System.out.println(e); }  
    }
  
    public void BeepFraco() {
      
        try{
            //comandos necessários para tocar o som presente no arquivo 'beepfraco.wav'
            //obs: acho que este arquivo fica fora do pacote .jar, o que está dentro não consegui executar ainda.
            File diretorio = new File("beepfraco.wav");
          
            InputStream in = new FileInputStream(diretorio);
            AudioStream as = new AudioStream(in);   
            AudioPlayer.player.start(as);    
        }
          
       catch(java.io.IOException e) { System.out.println(e); }  
    }
  
}
Fazendo uma rápida leitura, 'metronomo' é uma classe que têm como atributos:
  • BPM: Velocidade em Batidas por Minuto
  • Tempos: Quantidade de tempos no compasso.
  • Nota: Nota equivalente ao tempo. Não tem utilidade nessa classe, ficando aberto à possíveis implementações.
  • Sleep_timer: Valor que indica o intervalo de tempo entre os beeps. É gerado pela conversão do BPM.
  • tempoatual: Indica em qual tempo está o compasso durante a execução.
O método construtor pede BPM, Tempos e Nota. Isso significa que você só poderá criar um objeto da classe 'metronomo' se passar esses atributos. Faz sentido, pois para iniciar o metrônomo precisaremos deles.

Após o construtor, estão os métodos GET/SET. É comum na programação orientada a objetos 'encapsular' os atributos da classe dentro desses métodos. Nesse exemplo esses métodos são praticamente 'inúteis', porém, poderia usá-los para limitar a velocidade BPM e os  Tempos no compasso.

Após os métodos GET/SET, temos o método run(), que começa a executar o metrônomo. Ele possui dois comandos: o primeiro, que converte BPM para o intervalo de tempo que o timer irá usar, e o segundo, que configura o timer para executar a cada intervalo de tempo o beep(presente na classe 'beep').

Sobre o timer: é um recurso presente na maioria das linguagens de programação (talvez todas, não tenho ciência) que funciona executando uma determinada tarefa a cada período de tempo. Por isso, se enquadra perfeitamente em nosso projeto. O timer nesse caso para com o método encerrar()

A classe 'beep' está contida dentro da classe 'metronomo'. Ela extende da classe TimerTask (algo como tarefa do timer), isso quer dizer que ela é um TimerTask com algo a mais: o nosso código. Há uma sobreescrita* do método run().

 *Sobreescrita é uma substituição do método original por um novo. Nesse caso, o método run() que provavelmente não faria nada, agora irá gerar nossos beeps.

Dentro do método run() temos vários comandos: 
  • O primeiro é uma condição que se o tempo atual for 0, ele não executa mais nada e soma um tempo. Isso acontecerá apenas na primeira passagem do método beep.
  • O segundo é outra condição que se o tempo atual for 1, ele exeuta o beep forte, senão, o fraco.
  • O terceiro é outra condição que se o tempo for igual à quantidade informada pelo usuário, é zerado a quantidade atual de tempos.
  • O quarto comando adiciona um tempo.
Vale lembrar que o timer criado funciona como um loop: é executado várias vezes e só para quando alcançar uma determinada condição. Nesse caso, só irá parar quando for executado o método encerrar().

Por fim, os métodos BeepForte() e BeepFraco() executam o arquivo de som correspondente. Infelizmente não consegui rodar o arquivo dentro do pacote .jar, quando for executar é necessário que os dois arquivos de som estejem fora do arquivo .jar. Caso você saiba chamar um arquivo dentro do pacote .jar por favor comente.

Voltando para o nosso formulário, vamos programar o botão Iniciar. No NetBeans basta clicar duas vezes no botão e ele prepará automaticamente o método.

Início da classe frmMetrônomo:
public class frmMetronomo extends javax.swing.JFrame {

    metronomo metro;
    int rodando = 0;


// ........
Botão Iniciar:
private void btnIniciarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       
        //'declarando' variáveis e lendo-as
        int bpm;
        int nota;
        int tempos;
       
        //se o radio button estiver selecionado para selecionar
        if (rdbSelecionar.isSelected()) {
            bpm = slideVelo.getValue();
        }
        //se estiver selecionado para especificar
        else {
            bpm = Integer.parseInt(txtVelocidade.getText());
        }
       
        //lendo os tempos e a nota
        tempos = Integer.parseInt( (String) cboTempos.getSelectedItem());
        nota = Integer.parseInt( (String) cboNota.getSelectedItem());
       
        if (rodando == 1) {
            metro.encerrar();
        }
               
        metro = new metronomo(bpm, tempos,nota);
        metro.run();
        rodando = 1;
    } 
A classe do formulário possui muito código gerado automaticamente pelo NetBeans. Logo após a declaração da classe, criei o objeto metro da classe metronomo (se fosse criado no método do botão iniciar, poderiam rodar vários metronomos ao mesmo tempo e também seria impossível pará-los, o que não é desejado).

No método do botão iniciar declaramos as variáveis que iremos enviar para a nossa classe 'metronomo'. A condição que vem logo após verifica qual modo de inserção do BPM está selecionado: se é pelo slidebar ou pela caixa de texto. Após isso ele lê, convertendo se necessário. Os tempos e a nota serão retirados de um combobox, por isso o comando está grande: nele, primero o objeto é convertido para string e depois para inteiro.

Antes de executar o metrônomo, ele verica se o mesmo já está sendo executado e, se sim,  para-o. Após isso ele instancia o metrônomo passando os valores recebidos no formulário. Executamos assim o método run() e a variável rodando recebe 1.

Há ainda alguns outros métodos da classe frmMetronomo:

Parar:
private void btnPararActionPerformed(java.awt.event.ActionEvent evt) {                                        
         if (rodando == 1) {
            metro.encerrar();
            rodando = 0;
         }
    }
Simplismente: se estiver rodando, chame o método encerrar do objeto metro.

slideVeloStateChanged:
private void slideVeloStateChanged(javax.swing.event.ChangeEvent evt) {                                      
        // atualizando lblvelocidade
        lblVelocidade.setText(Integer.toString(slideVelo.getValue()));
    }
Esse é um evento que diz: quando o valor do slideVelo mudar, ou seja, quando o usuário arrastar o slidebar, o sistema irá atualizar o texto que está logo abaixo indicano a velocidade.

Botão Página na Web:
private void btnWebActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        Desktop d = Desktop.getDesktop(); 
        try { 
           d.browse( new URI( "http://www.jonasweb.orgfree.com/softwares" ) ); 
        } 
        catch ( IOException e ) { 
            System.out.println(e); 
         } 
         catch ( URISyntaxException e ) { 
            System.out.println(e); 
         } 
    }                                     
Este código abre a página indicada no navegador padrão.  

Botão Sair:
 private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {                                       
        System.exit(0);
    }
System.exit(0) fecha todo o software.

Botão Sobre:
private void btnSobreActionPerformed(java.awt.event.ActionEvent evt) {                                        
        JOptionPane.showMessageDialog(rootPane, "JMetrônomo versão 0.9 BETA. \n"
                + "Desenvolvido por Jonas Oliveira Francisco em 23/07/2012. \n"
                + "Visite a página na web para mais informações");
 }   
Exibe uma JOptionPane com meu texto.

Bem, acredito que isto seja o suficiente para o nosso projeto. Após compilar e empacotar o programa, o resultado será esse:

Download

Também fiz uma versão para web, apenas criando um formulário parecido só que para web. No NetBeans basta procurar por "Form Applet" para o software rodar no navegador como se fosse um programa em flash. Neste caso, o resultado será este.

Assim termina o nosso software de metrônomo e espero que tenham não só aprendido a programar um metrônomo, mas também adquirido mais experiência com programação em java e programação orientada a objetos. Ainda sou iniciante em java e não só aceito, como peço sugestões para melhorar o software.

Detalhes finais:
  • A ideia de criar o metrônomo surgiu nas aulas de VB.NET do curso de Informática. Estava testando a funcionalidade Timer e coloquei para executar um beep(). Percebi a semelhança com o metrônomo e decidi programar um em Java, pois queria conhecer mais essa linguagem de programação.
  • Se fisesse em VB.NET seria muito mais fácil, mas em Java aprendi muito sobre orientação a objetos, como por exemplo na hora de criar o timer: precisei criar uma classe que extende da TimerTask e sobreescreve o método run() da mesma. Considerando também que toda a programação em Java ocorre nesse modelo de programação, foi muito útil ter criado o software nessa linguagem. É mais difícil porém aprende-se mais.
  • Se alguém poder me enviar sons melhores eu aceito. Eu queria executar um som de percursão MIDI, acho que ficaria melhor nesse programa.
  • Eu criei outros softwares e também alguns jogos. Basta acessar meu site.

14 de fevereiro de 2012

Libre Office: Versão 3.5



Foi lançado hoje, 14/02/2012, a versão 3.5 do Libre Office, a melhor alternativa gratuita ao Microsoft Office. Entre as novidades estão:
  • Um filtro de importação de documentos do Microsoft Visio, permitindo que eles sejem usados na ferramenta Draw.
  • PostgreSQL (sistema gerenciador de banco de dados) nativo.
  • Melhor compatibilidade com arquivos de outros editores.
  • Agora o usuário será informado de novas versões.

8 de fevereiro de 2012

Windows 8 pode não ter o menu iniciar


O famoso menu iniciar, característica marcante do Windows a partir da versão 95, pode não estar mais disponível na oitava versão, como demonstram algumas fotos da última compilação, embora não se tenha certeza da autenticidade das imagens.


O Windows 8 não virá com grandes mudanças na interface gráfica, apenas mesclará alguns conceitos do Windows Phone 7 e do Windows 7, a fim de tornar o sistema bom não somente em PCs, mas também em dispositivos portáteis.

Quem acompanhou as novas distribuições Linux, como o Ubuntu e as que utilizam Gnome 3, percebeu uma grande rejeição dos usuários mais experientes às novas interfaces gráficas. As mudanças nesse caso foram muito agudas e de modo repentino, pois além do fato de que várias pessoas não gostararam do novo design, muitas funções do sistema foram removidas (como a personalização). Com isso muitos mudaram para ambientes XFCE, LXDE e KDE4. 

Por fim, como as mudanças no Windows estão sendo executadas aos poucos, é provável a rejeição seja menor que a das novas interfaces do Linux, embora as inovações também possam desagradar muitas pessoas.

Baseado em: Hardware

1 de fevereiro de 2012

Firefox 10: compatibilidade com complementos antigos



Foi lançado ontem, terça-feira 31, a décima versão do navegador Firefox. Ela resolve dois problemas que começaram quando o navegador passou a receber atualizações de 6 semanas. O primeiro problema é que as empresas teriam que ficar atualizando o navegador nesse período de tempo, o que gera muito trabalho não só pelas atualizações, mas também pela necessidade de tornar compatíveis os plugins e complementos. Assim a versão 10 terá suporte durante 1 ano e nesse tempo receberá apenas atualizações de segurança.

O segundo problema era a compatibilidade com complementos antigos. Agora o Navegador terá um sistema de suporte automático dos complementos mais velhos. Há ainda algumas mudanças menos importantes como a correção ortográfica e melhorias de desempenho.


Download Firefox 10

25 de janeiro de 2012

Entendendo a lei SOPA


Nos últimos dias surgiu o projeto de lei apresentado no congresso dos Estados Unidos chamado SOPA ou Stop Online Piracy Act. A lei consiste na liberdade do governo americano de fechar qualquer site que viole direitos autorais ou propriedade intelectual, o que inclui músicas, filmes, livros, jogos e etc. A lei é apoiada  principalmente pelas grandes gravadoras, estúdios cinematográficos e editoras, pois são elas que mais sofrem com a pirataria.

O problema é que muitos sites permitem o compartilhamento de arquivos e vídeos, como por exemplo, o Youtube, que apesar de conter muitos vídeos que violam os direitos autorais, é um lugar onde as pessoas podem se expressar em vídeos amadores. Outros sites como Facebook e Twitter e LinkedIn também estariam comprometidos. Por isso, muitos sites protestaram contra a lei SOPA. 

Página do Google no dia 18/01, com o logotipo censurado
 
A lei é considerada um ataque à democracia e à liberdade de expressão. Muitos questionam: por que um país caracterizado pela democracia precisa de uma lei baseada na censura? Esse tipo de lei está de certa forma ligado à crise financeira mundial.

Em 1930, quando ocorreu o período chamado de Grande Depressão que afetou completamente o mundo ocidental, a União Soviética, comandada por uma ditadura comunista, cresceu e se tornou uma grande potência. Outros países como Alemanha e Itália encontraram no Nazismo e no Fascismo a solução para a crise econômica. Os Estados Unidos por sua vez criaram várias leis e planos para recuperar sua economia.

Em geral, percebe-se que em tempos de dificuldades econômicas, a intervenção do Estado é mais presente na sociedade. A Lei SOPA pode ser vista como um reflexo da crise atual. As gravadoras e indústrias cinematográficas têm um grande papel na economia norte-americana, só que elas têm perdido muito lucro com a pirataria pela internet. A criação dessa lei resolveria grande parte do problema e traria de volta o lucro dessas indústrias.
 
Os benefícios dessa lei para os Estados Unidos seria tão grande que, mesmo após ela ser adiada por tempo indeterminado no dia 24 de janeiro, o Deputado Lamar Smith afirmou que “Para aprovar uma legislação que protege os consumidores, empresas e empregos de estrangeiros que roubam propriedade intelectual dos Estados Unidos, vamos continuar a reunir representantes da indústria para encontrar formas de combater a pirataria online”.

O fechamento do MegaUpload, embora não esteja inteiramente ligado com a lei SOPA, é uma demonstração do que ela significa. A maior parte dos usuários desse site não era de Norte-Americanos, mas sim de Franceses e Brasileiros, que compartilhavam conteúdos protegidos por direitos autorais. É justamente esse tipo de problema que a lei SOPA quer resolver: impedir que o conteúdo intelectual gerado nos Estados Unidos seja pirateado em outros países.

A China, o país que mais cresce em termos econômicos, controla a internet principalmente contra os sites norte-americanos. Ela possui sites alternativos a quase todos os grandes sites acessados no mundo ocidental. Facebook, Youtube, Google, nenhum grande site estrangeiro é aceito no Pais. São apenas alguns cabos de fibra óptica que unem a China e o resto do mundo. O país procura controlar todos os blogs por meio de um cadastro que solicita dados reais da pessoa. Se algum conteúdo é considerado ofensivo para o partido comunista, é imediatamente excluído.

A internet da China
Por fim, embora a lei SOPA tenha sido arquivada principalmente por causa dos protestos, a indústria cinematográfica e gravadoras continuarão pressionando a criação de leis parecidas e provavelmente, surgirão novas propostas semelhantes em vários países.

21 de janeiro de 2012

Facebook supera o Orkut no Brasil



A rede social Orkut foi muito usada pelos brasileiros, mas foi superada pelo Facebook em outubro de 2011. Motivos:

Inovação: Apesar de a interface do Orkut ter recebido algumas atualizações, o sistema em si é o mesmo de muitos anos atrás.

Abandono: O próprio Google criou uma nova rede social: Google+. Isso significa que o Orkut não será mais atualizado e corre o risco de brevemente sair do ar.

Internacional: Muitas pessoas mantém contatos em outros países. Como o Orkut só é bastante usado pelos brasileros, as pessoas que mantém contatos internacionais geralmente utilizam o Facebook.

Dispositivos Portáteis: O crescimento desses pequenos dispositivos acabou prejudicando o Orkut, pois, diferentemente do Facebook, o Orkut só foi lançar um aplicativo móvel para Android e iOS dias atrás.

15 de janeiro de 2012

Windows 8: Troca do sistema operacional somente no PC

Tudo começou com o anúncio do UEFI secure boot para Windows 8, que será incluído nos computadores que vierem com ele instalado de fábrica. É um recurso que garantirá a inicialização correta do sistema operacional, impedindo que malwares sejam instalados. O problema é que ele poderia também impedir a instalação de outros sistemas operacionais (Linux e semelhantes). 


Após muitos boatos a Microsoft se pronunciou acerca do assunto. Na tradicional versão de PC, o recurso pode ser desativado pelo menu SETUP (geralmente acessado pela tecla delete, logo após o boot), mas a versão para processadores ARM, principalmente em Tablets, terá esse recurso bloqueado.

Parece um final justo, afinal, como os PCS são "multiuso" e personalisáveis, é fundamental que outros sistemas operacionais possam ser instalados, pois o Windows 8 pode não atender todas as necessidades. Um servidor Linux geralmente é mais vantajoso do que o Windows, por motivos de segurança e acesso completo aos recursos do sistema operacional. Muitas pessoas preferem usar alguma distribuição Linux por ser gratuito ou pelo maior contato com a programação, pois, embora esse sistema possua ferramentas gráficas para instalação e manipulação de programas, a linha de comando, usada pela maioria dos usuários de linux, é muitas vezes um meio mais eficiente e personalisável de realizar algumas tarefas. Um usuário que sabe lidar com a linha de comando acaba conhecendo um pouco de programação.

Linha de Comando Linux
Já no caso dos dispositivos ARM, seria um grande tiro no pé a Microsoft permitir a instalação de outros sistemas operacionais, pois muitos poderiam instalar o sistema Android. Não há motivos para que Microsoft permita isso pois Tablets e Smartphones são feitos para serem ágeis e totalmente compatíveis com o sistema operacional, a troca deste poderia torná-lo lento e incompatível, podendo até corromper o dispositivo, gerando um grande número de reclamações dos clientes.


Baseado em:
Hardware
Tecmundo

5 de janeiro de 2012

Chega o fim do IPv4

Para que os computadores da internet possam se comunicar é preciso que haja um protocolo comum, ou em outras palavras, uma mesma língua. Assim, foi criado o TCP-IP, que se encontra na versão 4 (IPv4), mas será substituído pela sexta versão em 2012.


Para entender o motivo da mudança, é necessário conhecer as bases do IP. Ele atribui a cada computador na internet um endereço único, de maneira bem semelhante aos números de telefone.

O IPv4 utiliza um número de 32 bits para identificar os computadores na internet. Exemplo:
 
255.255.255.255                 
8   + 8 + 8 + 8   = 32bits

Um número binário de 8 bits 11111111 equivale a 255 em decimal.

O problema é que com essa combinação pode gerar 4.294.967.296 de endereços. Pode até parecer um número grande, mas existem 7 bilhões de pessoas na terra e com a chegada de smartphones e tablets, este número está cada vez mais próximo do limite.

A solução para o problema é a mudança para o IPv6, um protocolo já suportado pela maioria dos novos sistemas operacionais. Ele, a partir de um endereço de 128 bits, permite a inclusão de 340.282.366.920.938.463.463.374.607.431.768.211.456 endereços. Exemplo:

464f:bce4:5641:3412:341:45ae:fe32:65ae 
16  + 16 + 16  + 16 + 16+ 16 + 16+ 16  = 128bits

Agora são usados números hexadecimais. o número hexadecimal FFFF, o máximo possível com 4 dígitos, equivale a um número binário de 16 bits (1111111111111111), que por sua vez equivale a 65535 em decimal.

A mudança para esse protocolo permitirá a inclusão de muitos dispositivos na internet. Acredito que vai demorar um pouco pra completar todos os endereços, mas do jeito que as coisas estão andando, quem sabe.

4 de janeiro de 2012

Internet Explorer 6 é finalmente aposentado


A Microsoft comemora com bolo o fim do suporte ao navegador Internet Explorer 6. A China é o país mais afetado, pois lá o Internet Explorer 6 tem 25% de utilização.

O Internet Explorer 6 era famoso por não suportar diversos recursos, forçando desenvolvedores de páginas a criarem "gambiarras" para suportar este navegador. O HTML5, que irá substituir o Adobe Flash Player, também não era suportado por este navegador.

Se você ainda têm o Internet Explorer 6, baixe algum navegador mais novo.

Internet Explorer 8 (a nona versão não funciona no Windows XP)

China pretende enviar homem à lua


Após cerca de 40 anos da missão Apolo 11 de enviar um homem ao espaço, a China pretende repetir o mesmo feito: enviar um astronauta na lua até 2020. enquanto os EUA encerraram seu programa de ônibus espaciais, a China investe em tecnologias de veículos espaciais tripulados. Outros países asiáticos como a Coréia do Sul e Japão também procuram entrar nessa corrida espacial asiática.

Uma viagem à lua envolve gastos de bilhões de dólares e gera pouco retorno econômico. Então qual é o sentido de realizar tal viagem? Simples: a demonstração de poder faria com que as outras nações respeitassem a China como super potência mundial e melhoraria a imagem do partido comunista no país.