Coisas De Web

Nome:
Local: Rio de Janeiro, RJ, Brazil

Que perguntinha hein?! Mas vamos lá, adoro estudar assuntos relacionados à web, sempre que posso aprendo uma tecnologia, técnica ou linguagem nova. Tento sempre ver quais são as tendências e acompanha-las, enfim eu sou um eterno aprendiz. Deixando o lado profissional, entrando no lado pessoal, sou uma pessoa super gente-boa (pelo menos eu me acho. rs), adoro curtir a night, sair com os amigos, fazer novas amizades e viajar (tem coisa melhor do que isso?) Acho que você já está sabendo demais sobre mim. Fuiii...

sexta-feira, 29 de junho de 2007

COMMIT e ROLLBACK no SQL

Sql é um assunto do qual gosto bastante, então sempre que posso dou uma pincelada no tema. Pois bem, no sql tem duas cláusulas muito interessantes COMMIT e ROLLBACK.

COMMIT - Responsável por efetivar a transação corrente, pois quando se trabalha com um banco de dados em que vários usuários vão utilizá-lo ao mesmo tempo, tem que se efetivar a operação, pois sem o COMMIT a alteração não será visualizada para as outras "sessões", salvo se a sessão em que fez a alteração for fechada, o que por sua vez, traria muitos prejuízos, pois outros usuários iriam trabalhar com um banco de dados desatualizado e podendo até causar redundância de dados.

ROLLBACK - Desfaz a última alteração.

Quando desenvolvemos um sistema, tentamos fazer todos os tratamentos de erros possíveis, mas não podemos esquecer da astúcia do usuário, ele sempre consegue arranjar um jeito de fazer m... no sistema e descobri um bug que você nem imaginava ser possível, por isso existe os tratamentos de erros e se tratando de um banco de dados essa preocupação tem que triplicar. Como mencionei anteriormente essas duas cláusulas são muito interessantes, ainda mais utilizando Stored Procedure, Quando se faz uma operação no BD (INSERT, UPDATE, DELETE), este por sua vez retorna se a operação foi ou não bem sucedida. A partir daqui podemos imaginar como podem nos ser úteis as cláusulas. Exemplo:


SQL>insert into alunos (matricula, nome) values (4, 'Yusuke Urameshi');

1 row created.
SQL>IF @@ERROR <> 0 ROLLBACK ELSE COMMIT
Commit complete.


No código acima verificamos, se a inserção foi bem-sucedida, se for efetiva a inserção no bd, senão desfaz a inserção.

Agora vem aquele apelo básico, para você comentar.

Fuiii...

Marcadores:

terça-feira, 26 de junho de 2007

Comportamento Fora Da Estrutura

"Verdade é algo temporal e pessoal", essa é a minha versão da verdade, pois de tempos em tempos quando achamos que algo é a verdade absoluta e não tem como mudar, descobrimos que estávamos enganado a respeito disso e nos perguntando como poderiamos ser tão tolos.

Depois dessa introdução (um tanto quanto, nada haver) vamos ao que interessa, pois bem outro dia estava lendo os meus feeds quando vi esse post, lá no Refatorando Padrões. Onde o Carlos afirmava que não concordava com todas as chamadas de funções no javascript, de início achei a idéia absurda e se já não tivesse lido alguns posts dele, com certeza não iria ler o post até o fim, pois para mim, até aquele momento, fazer as chamadas de funções pelo javascript é senso comum.Logo após a leitura do post começou uma pequena discussão (diga-se de passagem, bem proveitosa), onde cada um defendeu o seu ponto de vista e no final das contas ficamos onde começamos, eu defendendo a chamada de funções pelo javascript e ele chamar a função pelo html. Como disse anteriormente, a verdade é algo relativo e cada um tem a sua versão da verdade, dentro de um limite e razões para tal. Agora tentarei defender a minha verdade. Let's Go:

Chamada da função pelo html:

<input type="button" value="botão" id="meuBotao" onclick="meuEventoAqui()" />


Chamada da função pelo Javascript:

Arquivo HTML:

<input type="button" value="botão" id="meuBotao" />


Arquivo Javascript:

window.onload () {
document.getElementById("meuBotao").onclick = function () {
meuEventoAqui(); //ou o meu código, não preciso fazer a chamada de outra função posso programar diretamente aqui.
}
}


Olhando esse pequeno trecho, talvez você esteja me achando um louco em pensar que defendo a forma de atribuir eventos pelo javascript, pois dessa forma gerou 5 linhas à mais no meu código e da forma que o Carlos defende, chamo a função diretamente no evento e pronto problema resolvido! Pois bem, vamos às razões que me levam a preferir chamar pelo javascript:


  • Chamando todas as funções pelo javascript, não se mistura comportamento com estrutura.

  • Para fazer a manutenção de código, vc não precisa modificar estruturalmente (html), pois está tudo no javascript e dessa forma não é necessário fazer a mudança de dois arquivos, é necessário apenas a mudança no javascript (o que é mais coerente)

  • No final das contas o seu código não irá crescer tanto assim, mas as poucas linhas que geram a mais, com certeza é compensado com a facilidade da manutenabilidade (nem sei se essa palavra existe. rs)

  • Você pode usar a sua estrutura (html), em várias páginas, pois como só tem a estrutura, sendo necessário apenas trocar o javascript, sem maiores problemas.

  • Todos os eventos (ou a maioria deles) estarão no window.onload, portanto não é necessário ficar caçando elementos no seu html, para colocar as funções, tudo estará mais organizado para adicionar código, ou mudá-lo

  • Porque eu gosto desse jeito, talvez essa seja a mais importante ;).



Bom, essas são as minhas razões à acreditar que chamando as funções pelo javascript é melhor, mas a verdade não é absoluta e cabe à você decidir isso, então o que proponho é estudar ver as diferenças entre cada forma e escolhe-la, de acordo com a sua necessidade e depois me contar qual foi a escolha e me dizer as razões. Talvez, até possa mudar de opinião.

fuiii...

Marcadores: , ,

terça-feira, 19 de junho de 2007

Função eval()

Função extremamente interessante do Javascript e no entanto não vejo ela sendo muito explicada por aí e ela é uma daquelas funções que você sempre precisou, mas vc não sabia disso.

Definição:
Converte uma string em código JavaScript e executa-o, claro se for um comando válido.


Código:
eval('comando_string')

Conheci-a há pouco tempo, porém estou apaixonado, ela é uma poderosa ferramenta para códigos bem dinâmicos e códigos que possuam poucos kbs. Vamos à um exemplo de aplicação bem simples e com isso já dá para notar como é legal:

Tenho um menu com vários itens (Home, Contatos, Portifólio, Fotos, Blog, Quem Somos e por ai vai) esses links são carregado por AJAX e em cada um desses links existe um botão voltar existe uma rotina da chamada de página correspondente (vamos supor também que não conheço a solução do problema de histórico do Bernardo Rufino, nem a do JulioGreff) e para efetuar essa volta, tive a "brilhante" idéia de quando um item do menu é clicado, armazeno o valor desse item à uma variável, e esta por sua vez só vai armazenar o valor de um item (histórico de um), então quando pressiono o voltar ele testa o valor dessa variável e chama a função correspondente ao item, ou seja, a variável recebe o valor do penúltimo item clicado e carrega a página (penúltimo item, porque o último é o link em que estamos :)), E assim ficou meu código:

document.getElementById("meubotaovoltar").onclick = function () {
if (historicode1 == "home") { //historicode1 é minha variável que recebe o valor do último item clicado
location.href="home.htm"; //faz a chamada da página
} else if (historicode1 == "contatos") {
location.href="contatos.htm"
}
// E assim sucessivamente...
}


Aí em cima nenhum mistério, fiz um teste para cada um dos valores depois faço um location para a página correspondente.

Já com o uso do eval() todas essas linhas são substituídas por apenas uma (pode acreditar). Como disse anteriormente a função eval() Converte uma string em código JavaScript e executa. Como se pode notar o valor que a variável armazena é similar ao valor da página em que vai ser redirecionada, a única alteração é o sufixo (viu como as aulas de português são importantes, sei até falar bonito) ".htm". Let's Go:


document.getElementById("meubotaovoltar").onclick = function () {
eval("location.href="+historicode1+".htm");
}


Entendeu?! Independente do valor da variável historicode1 o Javascript irá chamar a página certa (claro, se a página existir e se atribuiu o valor correto da variável).

Agora é fácil perceber o potencial dessa instrução, sempre onde tiver uma lista de coisas similares à fazer, essa instrução te ajuda muito, pois normalmente quando se tem uma lista dessa você atribui o valor das funções, ou seja lá o que esteja atribuindo, de forma semelhante, diferenciando apenas um pedaço do nome e esse por sua vez pode ser passado por parâmetro, não tendo mais a necessidade de você testar cada valor.

Fuiii...

Dúvidas, Críticas, Sugestões... Estou aqui para isso!

Marcadores:

sexta-feira, 15 de junho de 2007

Submeter com a tecla Enter no Internet Explorer

Amigos e amigas, mais uma vez aqui estou para falar de um, dos vários "bugs" do IEca, pois bem estava feliz da vida de ter resolvido algumas coisas chatas em relação ao IEca, estava tudo funfando legal, mas você sabe, alegria de pobre dura pouco, e alegria de desenvolvedor testando o seu código no IEca, dura menos ainda.

Fui submeter uma pesquisa teclando o Enter e o IEca não submetia, aliás ele submetia, mas não interpretava o que tinha que ser feito. Estranho não?! Ainda bem que para resolver esse problema é bem simples, existe um elemento html que se chama button, não estou falando do input, ele funciona de forma semelhante ao input, com muito mais opções e é a solução do meu problema.

Características:

  • Aceita três tipos de botões button, submit e reset.

  • Tem que abrir e fechá-lo

  • Pode-se colocar uma imagem

  • É imprencídivel que coloque algum texto no botão, pois é ilegal (segundo a W3C), que coloque apenas uma imagem

  • Semelhante ao input coloca-se o value, para submeter os dados



Uso do elemento:

<button type="submit" name="submit" value="submit">Enviar<img src="http://www.blogger.com/icons/send.gif" alt="Enviar" /></button>


Existem outras formas de fazer essa submssão funcionar, fica a seu critério escolher uma, mas eu gosto dessa solução e vc?

Fuiii...

Marcadores: ,

quinta-feira, 14 de junho de 2007

E se os sistemas Operacionais fosse linhas aereas?

Muito divertido, uma analogia de que se os SO's fossem aviões.

Link

ps: Está em inglês.

fuiii...

Marcadores:

sexta-feira, 8 de junho de 2007

JSON e AJAX uma dupla do barulho II

Esse post, vai ser só pra ilustrar uma das várias formas de montar a
estrutura de JSON, no lado do server-side, como exemplo vou usar php.
Existe frameworks para isso, então fica a seu critério se vai usar um framework ou desenvolver um code para isso (o que é bem simples e acredito que não há necessidade de um framework). Pois bem, como disse
anteriormente, JSON, até o uso eval, é apenas uma string, logo é só
montar uma string com os padrões. Relembrando o padrão:

var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};


Então agora é só montar a estrutura, no meu caso não vou me guiar pelo nome
da propriedade e sim pelo número da coluna, logo o nome das minhas
propriedades são, coluna1, coluna2, coluna3..., . Vamos lá.

$tot ='';
foreach ($arr_sql as $row){
$linha = '';
$i=0;
foreach($row as $col) {
if (! empty($linha)) {
$linha .= ", ";
}
$linha .= "\"coluna$i\":\"$col\"";
$i ++;
}
if (! empty($tot)) {
$tot .= ", ";
}
$tot .= "{ $linha }";
}
$tot .= "{\"meuRet\": [$tot] }";
echo $tot;
}


Utilizei o foreach, pois a minha resposta do bd, retorna um array. Código feito, Viu como é simples, agora faça da maneira que lhe der na telha :).

Agora a forma que vc vai usar o retorno é simples. Provavelmentes esse JSON retornou algumas linhas, então, especifique a linha e a propriedade que deseja exibir.

var MyObjJson = eval ('('+http.responseText+')'); //Vai pegar o valor de retorno e transforma-lo em um objeto
alert (MyObjJson.meuRet[0].coluna0); // Mostra o valor da propriedade da coluna0, da linha 0 do objeto meuRet


Se você teve a paciência de ler até aqui, lanço-lhe um desafio, existem duas maneiras de montar uma estrutura JSON, aqui fiz uma que é propriedade, valor, quero saber se você consegue fazer da outra forma, OK?! O desafio está lançado.

Referência:
JSON.org

fuiii...

domingo, 3 de junho de 2007

JSON e AJAX - Uma dupla do barulho

JSON(Javascript Notation Object), é muito legalzinho, imagina só todos os browsers dão suporte sem precisar hackear nada, isso é uma magavilha, ele também é suportado por várias linguagens,.Provavelmente se nunca usou JSON, deve estar perguntando o porque de usá-lo? E quando?

Suponhamos:
Quando fazemos qualquer aplicação em AJAX, aplicação que de fato necessite de AJAX e não por modismo, e queremos pegar o retorno da requisição temos duas opções, ou podemos fazer que o javascript retorne uma array, ou podemos fazer um XML, para estrutura dos dados. Porém nenhuma das duas formas me satisfaz muito, pois se eu fizer um array, eu tenho que separar linhas das colunas com separadores e essa idéia de fazer separadores não é muito legal e com XML é até uma boa opção, mas ele é um pouco pesado em relação ao JSON, ou podemos fazer de outra forma que desconheço, mas deve existir. Vou usar um exemplo de JSON com AJAX, então vamos nessa.

JSON é uma estrutura de fácil entendimento, tanto para o humano quando para a máquina, é leve e como disse anteriormente é suportado por todos os browsers. Podemos construir uma estrutura JSON de duas formas.

Um coleção de nomes e valores. Objeto

var myJSONObject = {"aluno": [
{"nome":"Yusuke", "nota1": 8.5, "nota2": 4},
{"nome":"Kuabara", "nota1": 7, "nota2": 3},
{"nome":"Ryei", "nota1": 7.5, "nota2": 6}
]
};


Uma coleção de valores. Array

Var myJSONArray =[8.5, 7, 7.5]

Sabido essas duas formas de construir um JSON, basta você adaptar à sua necessidade de uso, ou array, ou objeto. Outra coisa que esqueci de mencionar, quando usa a notação de objeto (primeiro exemplo), o javascript ainda não interpreta como tal, por isso tem que fazer uso da função eval().

var jsonObject = eval('(' + myJSONObject + ')');

Agora você tem um Objeto.

Exemplo com AJAX, não vou colocar a estrutura toda do AJAX, pois esse não é o foco, mas se você não sabe montar ou não entende a estrutura é só comentar, que volto no tema. OK?! Pois bem:

Estrutura dos dados retornados

{"aluno": [
{"aluno":”Yusuke”, "nota1": 8.5, “nota2”: 4},
{"aluno":”Kuabara”, "nota1": 7, “nota2”: 3},
{"aluno":”Ryei”, "nota1": 7.5, “nota2”: 6}
]
};


Função retorno do AJAX:


function retorno(){
container = document.getElementById("container"); // o elemento que vai exibir o resultado

if (request.readyState == 4) {//verifica se o estado de completo

if (request.status == 200) {//verifica o status da requisição


var myJSONObject = eval('(' + request.responseText + ')');

//joga o retorno para o elemento que vai exibi-lo

conatiner.innerHTML = "Nome : " + myJSONObject.aluno[0].nome +"\nNota1 : "+ myJSONObject.aluno[0].nota1+"\nNota2 : "+ myJSONObject.aluno[0].nota2;
container.innerHTML += "Nome : " + myJSONObject.aluno[1].nome +"\nNota1 : "+myJSONObject.aluno[1].nota1+"\nNota2 : "+myJSONObject.aluno[1].nota2;
container.innerHTML += "Nome : " + myJSONObject.aluno[2].nome +"\nNota1 : "+myJSONObject.aluno[2].nota1+"\nNota2 : "+myJSONObject.aluno[2].nota2;
}
}
}


Viu como é simples, porém há ainda uma questão e ela é. Como vou fazer com que o meu código server-side (php, asp, ...) monte a estrutura de dados retornados?

To be Continued...


Update
Quando falei em notação de array, foi só para ilustrar como iria ficar os objetos, pois no exemplo de array ele se torna um objeto também, após o usa da function eval()

Marcadores: ,