REPLACE no PostgreSQL

Posted in SQL on 20 de outubro de 2009 by alexandrems

Precisei eliminar um caracter (-) que foi utilizado somente para poder passar pela validação do formulário de entrada, esse caracter não poderia sair em um relatório, que deverá retornar em uma única coluna as infromações concatenadas de outras tres colunas. Então foi utilizado a função REPLACE com a concatenação ||.


SELECT REPLACE( coluna_1 | | ' ' || coluna_2 || '' coluna_3 , '-', ' ' ) as retorno FROM tabela

Por que o bocejo é contagioso

Posted in Curiosidades with tags , , on 14 de agosto de 2009 by alexandrems

bocejo_nJa faz um bom tempo que estava pensando o pq que bocejar é contagioso, até qdo minhas cachorrinahas bocejam me da vontade de bocejar tbm xD.. Então graças a internet (google) resolvi dar uma boa googlada e achei uma matéria que explica o motivo. Abaixo segue um trecho da matéria.

A gente só não vive imitando todos os gestos dos outros graças à ação de outro pedaço do cérebro, o córtex pré-frontal. Ele impede que a imitação feita pelos neurônios-espelho seja executada e vire um gesto, muitas vezes ridículo.

Mas se todas as outras imitações podem ser bloqueadas, por que o bocejo é irresistível? Porque quando você vê um bocejo, ou simplesmente ouve a palavra bocejo, além dos neurônios-espelho, seu cérebro aciona também a amígdala e o hipotálamo. São esses dois que provocam as alterações que acompanham o bocejo: a pressão arterial sobe, você se estica, inspira fundo e fica mais acordado.

Só que a amígdala e o hipotálamo escapam ao controle do córtex pré-frontal e não podem ser bloqueados. Por isso, quando seus neurônios-espelho decidem imitar o bocejo alheio e o programa do bocejo chega ao hipotálamo e à amígdala, a neurociência tem apenas um conselho a dar: tente ser discreto!

Quem quiser ver ela por inteiro : link

Quantas vezes você bocejou lendo esta matéria? 😛

Quiser bocejar mais só clicar aqui: link

Minutos para Dias em Javascript

Posted in JavaScript on 12 de maio de 2009 by alexandrems

Precisei de uma função para transformar um total de minutos em dias / horas / minutos. Ficou bem simples mas bem funcional, ela não retorna os segundo, e o parametro de entrada é em minutos.

function getTempo(tempo){

if(parseInt(tempo) >= 60){
var hra = Math.floor(parseInt(tempo) / 60);
var min = Math.floor(parseInt(tempo) % 60);
var dia = "";
if(hra >= 24){
dia = Math.floor(parseInt(hra) / 24);
hra = Math.floor(parseInt(hra) % 24);
}
min = (min > 0) ? min+" min" : "";
hra = (hra > 0) ? hra+" hrs " : "";
dia = (dia > 0) ? dia+" dias " : "";
tempo = dia + hra + min;
}else{
tempo = tempo + " min";
}
return tempo;

}
Exemplo:
var tempo = getTempo(3460);
document.write(tempo);
/* tempo = 2 dias 9 hrs 40 min */

GoogOrion´s

Posted in Game, PHP on 6 de maio de 2009 by alexandrems

Apartir do xml que é desponibilizado pelo pessoal do Orion´s Belt, desenvolvi uma ferramenta para fazer buscas pelo universo do jogo. É possível encontrar mercados, armadas, planetas, combates, entre outros corpos celestes ehehehe.

Segue abaixo o link, o xml é atualizado todos os dias a partir das 10:05 AM.

googorion´s

Codificação nos posts

Posted in Ajax, Geral, JavaScript, PHP with tags on 15 de abril de 2009 by alexandrems

A tempos que estava atraz disso, colocar codificação do php nos posts, recebi um comentário do edipo dizendo como fazer, mas estava um pouquinho errado eheheh. Dai deu uma googlada e achei essa página, Support Code (Bem sujestivo :P).

Resumindo, soh utilizar o código dentro das tags.

[sourcecode language=’php’]

Código

[/sourcecode]

Algumas linguagens que ele “estiliza”:

  • cpp
  • csharp
  • css
  • delphi
  • html
  • java
  • jscript
  • php
  • python
  • ruby
  • sql
  • vb
  • xml

Objetos Literais com JavaScript

Posted in JavaScript on 15 de abril de 2009 by alexandrems

Objetos Literais são conjuntos de propriedades com um ou mais elementos que contem valores préviamente setados, esses valores podem ser tipos primitivos da linguagem (inteiro, string,  array) ou objetos e variaves.
Resumindo, Objetos Ligerais = JSON.

No exemplo abaixo foi criado o objeto Data com algumas propriedades.

var Data = {
	semana : ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado'],
	dia : new Date().getDate(),
	mes : new Date().getMonth()+1,
	ano : new Date().getFullYear(),
	dsemana : new Date().getDay(),
	hora : new Date().getHours(),
	min : new Date().getMinutes(),
	seg : new Date().getSeconds(),
	getDia : function(){
		return this.semana[this.dsemana] +","+ this.dia +"/" +this.mes+"/"+this.ano;
	},
	getHora : function(){
		return this.hora+":"+this.min+":"+this.seg;
	}
}
// Retorna o dia atual
alert(Data.dia);
// Retorna o dia-semana,dia/mes/ano
alert(Data.getDia());
// Retorna Hora:Minuto:Segundo
alert(Data.getHora());

19 de maio

Posted in Sem categoria on 19 de maio de 2008 by alexandrems

Hoje é um dia muito importante, pelomenos para hindus, budistas, devótos das região da Índia e outros espalhados pelo mundo.
Neste dia nascia Krishana a mais de 5000 anos atraz, nascia também Buda a pouco mais de 2500 anos atraz e mais recentemente () Babá. Ambos nasceram no mesmo dia, hora, segundo e local.

Frase do dia

Posted in Saúde with tags , , on 28 de abril de 2008 by alexandrems

“Nada beneficiará tanto a saúde humana e aumentará as chances de sobrevivência da vida na terra quanto a evolução para uma dieta vegetariana. A ordem de vida vegetariana, por seus efeitos físicos, influenciará o temperamento dos homens de uma tal maneira que melhorará em muito o destino da humanidade.”
(Albert Einstein)

SAÚDE + INTELIGÊNCIA = VEGETARIANISMO

Persitência em PHP – I

Posted in PHP with tags , , on 18 de abril de 2008 by alexandrems

Persistência – s.f. Ato de persistir. / Qualidade do que dura.

Bom hoje vou falar de um assunto que particularmente entendo bem, pois fiz para meu trabalho de conclusão de curso, um framework de persistência web para PHP ( mais pra frente posso disponibilza-lo aqui). Vou escrever 3 artigos sobre esse assunto, que juntos nos trará um mini-framework para persistência de dados em PHP.

Introdução

Bom todo o sistema ou até mesmo web sites, necessitam armazer as informações inseridas neles, ou seja as informações deverão ser persistentes. Para isso sempre é utilizado um mecanismo de persistencia, que pode ser, um arquivo xml, texto, banco de dados orientado a objetos, banco de dados relacional, entre outros tipos possiveis de armazenar uma informação. O mais utilizado é o banco de dados relacional, que são bancos com varios padrões estabelecidos e anos de experiencia armazenando informações relacionalmente, além de terem sistemas que fazem a gerência das informações relacionais (SGBD – Sistema Gerenciador de Banco de Dados) de fabricantes, preços e objetivos diferentes. Um banco de dados relacional, como o nome já diz, armazena as informações relacionalmente dentro de tabelas. No caso um conjunto de registros ou informações de uma tabela podem estar relacionados com outros registros de outra tabela e assim por diante. Mas temos um problema ai, pois o banco de dados é relacional e a aplicação é orientada a objetos. Dois paradigmas diferentes, como tratar as informações entre esses dois caras? Ai que entra o framework de persistência.

Modelo Relacional x Modelo Orientado a Objetos

Se existe esse problema, então porque não utilizar um banco de dados orientado a objetos? Bom primeiro que o custo seria aumentado, pois eu nunca vi um desses ao vivo, mas sei que existe, então provavelmente arranjar pessoal para mexer com esse treco não deve ser tão facil. Segundo os bancos relacionais estão mais maduros que os OO. A orientação a objetos trabalha as informações como classes, atributos, métodos, etc… Enquanto os bancos de dados relacionais tratam as informações com tabelas, registros, indices, relacionamentos, etc… Então para que o programador trabalhe somente Orientado a objetos e o DBA (Administrador do banco de dados) cuide do banco relacional, é proposto um framework que ficará “no meio” desses dois cara (aplicação e banco), ele irá traduzir as informações OO para Relacional e Relacional para OO.

Classe de Conexão

Bom vamos para o que interessa, primeiramente vamo criar uma classe de conexão com o banco.
Descrição:
Como de praxe, vou utilizar o pattern Singleton para fazer a classe de conexão, onde somente existirá uma única instância da classe. Essa classe terá conexão com o banco MySQL (prometo postar uma classe com o PDO para vários bancos), e terá métodos para facilitar a manipulação das informações no banco (insert, delete, update).

conecta.php

class Conecta {

// atributo static para o singletom
static private
$_instancia = null;

// variavel de conexão
private $_conexao = null;

// Construtor só é chamado quando não existir a instância
private function __construct(){

$_host = “localhost”;
$_database = “base”;
$_user = “usuario”;
$_password = “senha”;

$this->_conexao = mysql_connect($_host, $_user, $_password) or die(‘Não foi possível abrir uma conexão’ );
mysql_select_db($_database, $this->_conexao) or die(‘Base de dados nao encontrada.’);

}

// Método chamado para instânciar a classe
public static function getConexao() {

if (!self::$_instancia instanceof self) {
self::$_instancia = new self();
}
$con = self::$_instancia;
return $con;
}

// Fecha a conexão
public function close(){
if($this->_conexao)
mysql_close($this->_conexao);
}

/* Executa uma select
public function select($sql){

$resultado = mysql_query($sql,$this->_conexao);
// Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql ) no banco de dados: “ . mysql_error());
}
// Não existe erros
else{
// Recebe os resultados da consulta
while($row=mysql_fetch_assoc($resultado)) {
$retorno->result[] = $row;
}
// Recebe a quantidade de registros encontrados
$retorno->count= mysql_num_rows($resultado);
}
return $retorno;
}

// Executa a inserção no banco
public function
insert($sql){

$resultado = mysql_query($sql,$this->_conexao);
//Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql) no banco de dados: ” . mysql_error());
}else{
// Retorna o id cadastrado se foi executado com sucesso
// Retorna false se não foi possivel fazer a execução

return (mysql_insert_id()) ? mysql_insert_id() : false;
}
}

// Executa a alteração no banco
public function update($sql,$unicos=null){

$resultado = mysql_query($sql,$this->_conexao);
//Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql) no banco de dados: ” . mysql_error());
}
//Retorna 1 (true) se foi executado com sucesso
return $resultado;
}
}

// Executa a exclusão no banco
public function delete($sql,$unicos=null){
$resultado = mysql_query($sql,$this->_conexao);
//Erro na sql
if(!$resultado){
die(“Não foi possível executar a consulta ($sql) no banco de dados: ” . mysql_error());
}
//Retorna 1 (true) se foi executado com sucesso
return $resultado;
}

}

Para fazer executar esse camarada ai.

$conn = Conecta::getConexao();
$rs = $conn->select(“SELECT nome,telefone FROM dados WHERE cidade=’cascavel'”);
if($rs->count > 0){
foreach($rs->result as $v){
echo $v[‘nome’] . “-“. $v[‘telefone’]. “<br>”;
}
}else{
echo “Não foi encontrado nenhum registro”;
}

A primeira parte é isso ai, próximo passo vou mostrar como criar as classes que serão manipuladas pela persistência. Qualquer coisa só entrar em contato =).

PS: SE ALGUEM TIVER UM TEMPLATE QUE FORMATE CÓDIGOS FONTES, POR FAVOR ME AVISEEEE.

Hash para validação de arquivos

Posted in PHP with tags , , on 11 de abril de 2008 by alexandrems

Saudações, hoje vou falar sobre uma questão muito importante sobre segurança e confiabilidade de informações, principalmente para arquivos que são gerenciados por um sistema web. Para intender melhor vamos imaginar a seguinte situação.

Seu sistema gerencia laudos de exames de sangue em pdf para pacientes de uma clinica. E um desses pacientes ta precisando de grana e inventa de burlar o laudo botando um positivo no seu exame de HIV para ver se consegue uma indenização milionária.

Bom é possivel colocar senha para a edição e visualização de um arquivo em PDF, mas todo nós sabemos que mesmo assim tem como burlar isso. Então para a clinica escapar dessa indenização e consecutivamente seu sistema continuar no mercado, o paciente terá que apresentar o PDF com o resultado falso positivo HIV, e tera que ser comparado o arquivo gerado pelo sistema com o do safado paciente. Para fazer isso, acredito eu que a melhor forma é comparar o Hash dos arquivos. Existem vários algoritmos de hash, o que vou utilizar aqui será o MD5. Para isso o PHP tem uma função pronta md5_file, neste exemplo vou fazer genérico para qualquer tipo de arquivo.

O que irá fazer

Vamos fazer um script para um gerenciador de arquivos, ou seja, será enviado varios tipos de arquivos, o sistema ira gerar um hash do mesmo e ira salvar em uma base para futuras comparações. Não vou entrar em detalhes como validar o arquivo enviado, restringir um tipo de dado, tamanho, etc. e nem sobre banco de dados, como armazenar as informações, existem varios tutoriais bons sobre isso, minha idéia é mostrar sobre hash.

Primeiro vamos receber o dowload, copia-lo e ver o hash.

$uploaddir = 'local/';
$uploadfile = $uploaddir . $_FILES['arquivo']['tmp_name'];
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)) {
$hash = md5_file($uploadfile);
$sql = sprintf("INSERT INTO arquivos ( arq_file, arq_hash) VALUES ('%s','%s')",$uploadfile,$hash);
} else {
echo "Arquivo não foi enviado";
}

É muito interessante que tenha algum código unico para identificar o arquivo no sistema, pois irá facilitar uma busca para comparações.

Agora o trecho de código para comparar os arquivos. A idéia e ter duas entradas. Uma para identificar ou escolher o arquivo que esta no sistema e outra para enviar o arquivo que será comparado. Nesse exemplo vou usar o nome do arquivo para achar ele no sistema. O código a baixo está recebendo essas informações.
* A instancia $conexao é ficticia, utilize o seu método favorito para retornar uma SQL.

$hashSis = $conexao->select("SELECT arq_hahs FROM arquivos WHERE arq_file='".$_POST['nome']."'");
$hashArq =md5_file($_FILES['arquivo']['tmp_name']);
if($hashSis == $hashArq){
echo "Arquivos iguais";
}else{
echo "Arquivos diferente";
}

Esse tipo de válidação é, na minha opnião obrigatória para garantir a segurança das informações em sistemas que gerenciam documentos. Bom a principio é isso ai, qualquer dúvida só entrar em contato.