» Archive for Setembro, 2007

Mercado fechado: idéia de gênio

Quinta-feira, Setembro 20th, 2007 by micox

Pergunte-se: qual um dos maiores problemas de fazer uma compra no Mercado Livre atualmente?
Você não conhece o vendedor e não tem confiança nele.

Você confia em seus amigos? Sim? Ummm, então que tal comprar e vender coisas apenas através de seus amigos? Como um orkut para vendas e compras? Idéia de gênio.

Esta é a proposta do site que eu acabei de descobrir graças ao Rafael: o Mercado Fechado.

De acordo com a descrição do próprio site:

O MercadoFechado é um serviço on-line totalmente gratuito que tem como objetivo ser um portal para anúncios entre amigos.

Com certeza você já perguntou para algum amigo se ele conhecia alguma pessoa interessada em seu carro. Ou ainda se conhecia alguém que gostaria de vender um violão já que você estava aprendendo a tocar. O MercadoFechado é para isto!

Nossa idéia é proporcionar o encontro de interesses. Amigos que compram encontram amigos que vendem, e vice-versa.

Nele você pode ainda configurar se também quer ver os anúncios dos amigos dos seus amigos, pode dizer o que quer comprar (pra fazerem um mini-leilão) e outras coisas que não fuçei muito.

Este não é um post patrocinado ou nada do tipo. É apenas um post “invejoso”: por que eu não tive esta idéia antes? hhahaha

Acabei de receber o email do convite e decidi postar imediatamente.
A base de usuários ainda está baixa pelo que eu ví, mas deve crescer bastante.

[edit]Ah sim, como o Jader bem lembrou no comment abaixo, meu perfil lá é este aqui.[/edit]

Eu acho que essa parada aí tem futuro. Parabéns pra quem teve a idéia e implantou.

geraOptions - populando selects com praticidade - PHP

Quinta-feira, Setembro 20th, 2007 by micox

Hoeeepáa

Bom, sabe toooda aquela burocracia que agente faz tooooda vez que vai gerar um select-option via PHP?

Pois é, vai parecer óbvio pra maioria dos meus leitores, mas pode ser de ajuda pra alguns: que tal reduzir esta complexidade em apenas uma funçãozinha simples pra chamar rapidamente e não ter que ficar se preocupando com executar a SQL, fazer o while do recordset, fazer o IF pra ver qual option vai ter o selected, etc??

Acredite: isto facilita pra caramba. Reduz a complexidade e o tamanho do código.

A função que gera os options. Guarde em sua biblioteca de funções:


function geraOptions($sql,$campo_valor,$campo_label,$valor_selecionado,$tabs='    '){
//by Nairon JCG - Micox - elmicox.blogspot.com - micoxjcg@yahoo.com.br - 12/01/07

    $reca = mysql_query($sql);
    $opts = "\r\n";
    if($reca){
        while($row = mysql_fetch_assoc($reca)){
        if($row[$campo_valor]==$valor_selecionado){
        $selected = "selected='selected'";
        }else{
        $selected = "";
        }
            $opts .= $tabs."    \r\n”;
        }
    }
    return $opts;
}

$sql - é a sql pra gerar os options
$campo_valor - o campo na sua tabela do BD que irá doar os valores para os VALUES dos options.
$campo_label - o campo na sua tabela do BD que irá doar os valores para os TEXTOS dos options.
$valor_selecionado - Se tal option tiver o value igual ao $valor_selectionado, ele ficará com selected=selected
$tabs - pra deixar seu código fonte que será gerado mais bonitim…

Exemplo de uso:


echo "<select id='estado' name='estado'>";
    echo geraOptions('SELECT * FROM estados','id_estado','nome_estado',$cod_estado_cliente,'    ');
echo "</select>";

Dúvidas?

PS.:Esta é mais uma funçãozinha que eu tinha feito e esquecido de postar. Como este blog é minha ‘guardadora’ de funções pessoais, esta não podia ficar de fora né? hehe

Ativando options disabled no IE

Quinta-feira, Setembro 20th, 2007 by micox

Ops, uma funçãozinha que eu tinha feito a tempos mas tinha esquecido de postar aqui heheh. Só tinha postado no Webly.

Se você colocar um atributo “disabled” em um option ele deverá ficar desabilitado, ou seja, indisponível. Exemplo:


<select>
    <option>opt 1</option>

    <option disabled='disabled'>opt 2</option>
    <option>opt 3</option>
</select>

Isto acontece bem nos navegadores padrão.
No nosso velho amigo IE (Internet Explorer) não acontece. Teste e veja.

Inspirado pela dúvida do nosso amigo Rafael, fui atrás do problema e não achei solução a não ser fazer uma função pra fazer o serviço completo.
Está abaixo:


<!--[if lte IE 7]>
<script>
function ativaOptionsDisabled(){
    var sels = document.getElementsByTagName('select');
    for(var i=0; i < sels.length; i++){
        sels[i].onchange= function(){ //pra se mudar pro desabilitado
            if(this.options[this.selectedIndex].disabled){
                if(this.options.length<=1){
                    this.selectedIndex = -1;
                }else if(this.selectedIndex < this.options.length - 1){
                    this.selectedIndex++;
                }else{
                    this.selectedIndex--;
                }
            }
        }
        if(sels[i].options[sels[i].selectedIndex].disabled){
            //se o selecionado atual é desabilitado chamo o onchange
            sels[i].onchange();
        }
        for(var j=0; j < sels[i].options.length; j++){ //colocando o estilo
            if(sels[i].options[j].disabled){
                sels[i].options[j].style.color = '#CCC';
            }
        }
    }
}
window.attachEvent("onload", ativaOptionsDisabled)

</script>
<![endif]-->

Pronto! :)
Obs.: Esta Esta função substitui algum outro evento ONCHANGE que tenha sido colocado antes pra algum option.

Code contest: Mega Sena acumulada

Quinta-feira, Setembro 20th, 2007 by micox

Vindo do blog do Bermon (que provavelmente vai ser o vencedor), eu tinha que dar uma contribuição JavaScript para o desafio do Macaco chefe né? (Por favor, sem piadinhas. Ele não é chefe do mico hehehehh)

Mesmo sabendo que não ia nem chegar perto dos vencedores, não podia deixar o Javascript de fora da brincadeira hehe.

O desafio:

“Escrever em qualquer linguagem de programação um programa que realize 100.000 sorteios de um numero entre 1 e 60 e mostre na tela os 6 mais freqüentes.

Ganha quem fizer o programa com o menor numero de linhas possíveis, lembrando que a linha considerada é a linha da unidade léxica da linguagem, portanto a seguinte linha em Java seria considerada duas: int i =0; sysout(i); ”

Os malucos do Ruby conseguiram fazer em 1 linha (incluindo o bermon nos ‘malucos’).
Com javascript eu tentei de várias formas porém eu só consegui fazer com 2 linhas:


for(var i,ra=new Array(),j=0 ; j<10000 ; j++,i=Math.round(59*Math.random())+1,ra[i]= (typeof(ra[i])=='undefined') ? ra[i]=i+" "+1  :  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1)) {  }
document.write(ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]}).slice(0,6).join(' vez(es)\n<br />'));

Se não valer assim, aumento um pouquinho (também é bom pra verem melhor o que foi feito).


for(var i,ra=new Array(),j=0 ; j<10000 ; j++, i = Math.round(59*Math.random())+1)
    ra[i] = (typeof(ra[i])=='undefined') ? ra[i]=i+" "+1  :  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1);
document.write(ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]}).slice(0,6).join(' vez(es)\n<br />'));

Caso não seja aceito da maneira acima, há também uma forma mais extendida que ficaria com 6 linhas (esta já está beeeem mais entendível pra qualquer um, caso queiram explicações é só perguntar).


var ra = new Array();
for(j=0;j<10000;j++){
 i = Math.round(59*Math.random())+1;
 ra[i] = (typeof(ra[i])=='undefined') ? ra[i]=i+" "+1  :  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1);
}
document.write(ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]}).slice(0,6).join(' vez(es)\n<br />'));

Agora é pra todo mundo entender.



var ra = new Array(); //declaro o array
for(j=0;j<10000;j++){ //loop 10000 vezes
 i = Math.round(59*Math.random())+1; //faço o sorteio de 1 até 60 e jogo no 'i'
 //abaixo vou incrementar quem foi o índice do array sorteado
 //devido a deficiências de pegar o indice de um array em javascript
 //vou ter que guardar o índice no primeiro caractere pra splitar depois
 if(typeof(ra[i])=='undefined'){
  ra[i]=i+" "+1; //se ra[i] ainda não existir crio ele

 }else{ //se já existir, incremento ele
  ra[i]=i+' '+(parseInt(ra[i].split(' ')[1]) + 1);
 }
}
//faço a ordenação de acordo com uma função específica
//que pega só o que tem depois do espaço
ra.sort(function(a,b){return b.split(' ')[1] - a.split(' ')[1]})
//dou um slice pra pegar os 6 primeiros e uno eles com o join.
//jogo o resultado na tela
document.write(ra.slice(0,6).join(' vez(es)\n<br />'));

hehe, Engraçado. Viram como um código de 11 linhas pode virar só 2? hehe
Será que alguém consegue fazer com menos linhas aí no javascript? Bora ae, cai pra dentro. heheheahe

PS.: O engraçado é que ontem eu só consegui chegar a 7 linhas. Hoje que vieram umas inspirações heheh.

PS.2.: Este ainda não é o último post do elmicox.blogspot antes de migrar para o elmicox.com. Vocês não precisam mudar seus feeds. Eu vou alterar pelo feedburner.

Atenção com a tag button

Quinta-feira, Setembro 20th, 2007 by micox

Todos sabem que eu curto muito a tag button em detrimento de input-type-submit ou input-type-button.
Afinal, a tag input é usada pra um pá de outras coisas enquanto a button é só button e pronto (além de ainda aceitar HTML dentro dela).
Com a button fica muito mais fácil estilizar, ’scriptar’, pá e talz.

Mas hoje, durante o dia, passei por um estranho bug que eu não sabia o que era no site que tô finalizando. Agora à noite mim descobrir qual ser o problema: Pra tag button, ao submeter um formulário, o IE manda como value da tag button o que está dentro dela e não o que está no atributo value.

Um código vale mais que 10 palavras:


<form action='' method='get'>
    <button type='submit' name='teste' value='FF e OF vao enviar este value'>O IE vai enviar este value</button>
</form>

Apesar disto, continuo preferindo o button.