Novo iGoogle – ainda em testes

A nova versão do iGoogle está sendo testada já. Eu gostaria de testar… comofas?
Não faz. Algumas contas foram escolhidas aleatoriamente e possuem na lateral esquerda da página uma área onde o usuário pode escolher gadgets do tipo social applications)que serão adicionadas à sua página

Printscreen de uma página do iGoogle da nova versão

Alguns gadgets já disponíveis possibilitam acesso direto ao Gmail, possibilidade de chat com contatos seus do address book do Gmail se eles estiverem usando o iGoogle, e ver o que seus contatos do Gmail andaram fazendo nos últimos tempos em serviços como Google Reader (feeds que assinaram, por exemplo), Picasa (fotos que ele subiu) e diversos outros serviços do Google.

Acho que vale a pena esperar pra ver o que vai acontecer quando eles liberarem para todo mundo. Inclusive, será que vai acontecer nao mesmo tempo em que vão liberar os gadgets no Orkut? 🙄

Mais informações: http://googlesystem.blogspot.com/2008/06/google-tests-new-igoogle.html

PS: para quem quiser saber mais sobre o iGoogle, escrevi um post tempos atrás comparando-o com o Netvibes.

Selects aninhados – fazendo uma busca

Provavelmente já existem muitos tutoriais na net de como fazer uma busca por selects aninhados usando (a metodologia) ajax. Mas, como na web sempre tem gente nova chegando, e novas abordagens são sempre bem-vindas, vou mostrar como fazer uma dessas buscas de uma forma bem simples.

O que é necessário: um banco MYSQL rodando, PHP (versão 4 já da conta) e a biblioteca javascript prototype.

Tendo os ingredientes à mão, vamos criar um banco de dados com duas tabelas:

bandas: campos ID e NOME

discos: campos ID, ID_BANDA, NOME



A idéia é que a tabela bandas liste várias bandas (sendo ID chave primária), e a tabela discos vai guardar uma lista de discos referentes às bandas inseridas na outra tabela (usando ID_BANDA para referenciar a qual a banda o disco pertence).

Segue um dump do banco:

CREATE TABLE `bandas` (
  `id` int(11) NOT NULL auto_increment,
  `nome` varchar(128) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Extraindo dados da tabela `bandas`
--
INSERT INTO `bandas` VALUES (1, ´Iron Maiden´);
INSERT INTO `bandas` VALUES (2, ´Metallica´);
INSERT INTO `bandas` VALUES (3, ´Sepultura´);
-- --------------------------------------------------------
--
-- Estrutura da tabela `discos`
--
CREATE TABLE `discos` (
  `id` int(11) NOT NULL auto_increment,
  `id_banda` int(11) NOT NULL,
  `nome` varchar(128) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Extraindo dados da tabela `discos`
--
INSERT INTO `discos` VALUES (1, 1, ´Fear of the Dark´);
INSERT INTO `discos` VALUES (2, 1, ´The Number of the Beast´);
INSERT INTO `discos` VALUES (3, 2, ´Load´);
INSERT INTO `discos` VALUES (4, 2, ´Master of Puppets´);
INSERT INTO `discos` VALUES (5, 3, ´Chaos AD´);
INSERT INTO `discos` VALUES (6, 3, ´Arise´);





Tendo feito isso, monta-se uma página com um formulário que possui dois selects. Através de uma consulta SQL feita pelo PHP ,todos os registros da tabela bandas são retornados e o primeiro select é populado, colocando o value de cada option igual ao id da banda (ele será usado para fazer a consulta SQL na tabela discos de uma banda específica).

No onchange desse select, se chama uma função javascript:

– ela vai fazer uma requisição utilizando o objeto Ajax da (biblioteca) prototype, a uma página php chamada discos.php

– discos.php consulta a tabela discos e procura os discos de uma banda específica, retornando uma string no formato registro1|registro2|registro3…

– no retorno da função, por javascript é feito um split na string retornada e, com isso, recupera-se num vetor a lista de discos. Com isso, só é necessário apagar os ítens anteriores da lista, percorrer o vetor gerado pelo split e criar para cada item dessa lista uma option e adicioná-la (appendChild()) ao select.



Segue o código da página principal:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Exemplo de select aninhado</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>
<script type="text/javascript">
    function buscadiscos(field){
        //requisita o serviço PHP que vai listar os discos de uma banda, pelo id
        new Ajax.Request(´discos.php?id=´ + $F(field), {
            onSuccess: function(transport) {
                //alert(transport.responseText);
                $("discos").innerHTML = "";
                var discos = transport.responseText.split("|");
                for(var i=0; i<discos.length; i++) {
                    if(discos[i]=="")
                        continue;
                    var li = new Element("li").update(discos[i]);
                    $("discos").appendChild(li);
                }
            }
        });
       
    }
</script>
</head>
<body>
<h1>Exemplo - select aninhado</h1>
<form id="busca_discos" name="busca_discos" method="POST" action="#">
    <label>banda:</label>
    <select id="bandas" onchange="buscadiscos(this);">
        <option value="-1">selecione...</option>
    <?php
        //conecta ao banco
        $link = mysql_connect(´localhost´, ´root´, ´´);
        mysql_select_db(´exemplo_select´, $link);
        //monta string que seleciona todas as bandas
        $sql = "SELECT * FROM bandas";
        $result = mysql_query($sql);
        while ($row = mysql_fetch_array($result)) {
            echo("<option value=´" . $row["id"] . "´>" . $row["nome"] . "</option>");
        }
    ?>
    </select>
    <br /><br /><br />
    <label>discos:<label>
    <select id="discos"></select>
   
</form>
</body>
</html>





Segue o código da página discos.php:

<?php
    //conecta ao banco
    $link = mysql_connect(´localhost´, ´root´, ´´);
    mysql_select_db(´exemplo_select´, $link);
    //monta string que seleciona todos os discos de uma determinada banda
    $sql = "SELECT * FROM discos WHERE id_banda=" . $_GET["id"];
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        echo($row["nome"] . "|");
    }
?>

 

Vale ressaltar que a maneira de discos.php retirnar os dados foi a mais simples possível – e de menor qualidade. Para melhorar o código, seria interessante retornar um XML ou retornar os dados no formato JSON (tanto o PHP5 tem métodos nativos para codificar dados em formato JSON, quando a biblioteca JSON tem para decodificar os mesmos).

Nerdgirls – reality show para os nerds

Cansado de reality shows com pessoas burras, sem inteligência e sem noção? Ou não acredita que pode haver vida bonita dentro do mundo Geek?
Seus problemas acabaram (okey, não é pra tanto). Um reality show com moças estudantes de engenharia onde o primeiro objetivo é construir um carro movido a energia solar; é o que promete o http://www.nerdgirls.org/

Ainda não se sabe qual será a TV que passará o evento, quais os moldes do programa nem foi divulgado qual será o prêmio final para a vencedora. Mas se sabe que com a exposição que elas terão, os salários quando se graduarem serão altos; independente se trabalharem como engenheiras ou mudem de ramo!

Algumas das moças:

 

Referência: http://uoltecnologia.blog.uol.com.br/arch2008-06-15_2008-06-21.html#2008_06-16_15_16_45-130772099-26

Vício em Internet: uma doença?

Num artigo do American Journal of Psychiatry, o pesquisador Jerald Block sugere que o abuso no uso da internet deverá ser adicionado ao seu livro Diagnostic and Statistical Manual of Mental Disorders (algo como Manual e Estatísticas de Diagnósticos dos Distúrbios Mentais, uma referência muito usada por médicos e afins). Segundo o mesmo, estudos em cidades da Coréia do Sul apontam que quase 170 mil crianças estão fazendo uso de remédios psicotrópicos para tratar efeitos do uso excessivo da Internet.

Segundo ele, os sintomas do vício em internet são os mesmos de qualquer outro vício: irritabilidade, necessidade de estar sempre usando, diminuição da vida social, e todos os outros.

E você, é um viciado em internet? 😛

 

Referência: http://feeds.wired.com/~r/wired/index/~3/310891079/st_wtf