dBASE e MySQL

O dBASE foi criado em 1978 e a algum tempo atrás o dBASE era o SGBD mais utilizado por quem tinha um IBM-PC e utilizava o MS-DOS ou por outros computadores como o Apple II ou o Apple Macintosh. A popularidade deste banco de dados era tão grande porque a sua linguagem possuia algumas vantagens frente aos seus concorrentes. Vale citar como exemplo o fato do usuário poder digitar os comandos de manipulação de dados em uma linha de comando, a manipulação automática de memória e a inexistência da notação hexadecimal para a identificação dos espaços de memória.

Infelizmente nem tudo é só sucesso, o dBASE foi perdendo popularidade quando houve o início da comercialização dos sistemas com interface gráfica mais arrojadas, como o sistema de janelas Windows. A diminuição da utilização deste banco de dados abriu caminho para que novas ferramentas ganhassem mercado.

Em geral estas ferramentas de banco de dados funcionavam bem em um único computador quando foram surgindo problemas de disponibilidade da informação. Diversas máquinas precisavam manipular o mesmo conjunto de informações ao mesmo tempo e as ferramentas foram evoluindo.

O MySQL foi criado em 1994 e é atualmente um dos bancos de dados mais utilizados no mundo. É utilizado principalmente na computação em  nuvem, isto é, no modelo em que os dados não são processados por apenas um computador, mas por um cluster personalizado de máquinas interligadas e disponíveis na internet.

A alguns anos muitas pessoas diriam que o MySQL era um SGBD de segunda linha, voltado a projetos mais “simples” pois diversas características consideradas essenciais a um sistema de grande porte ainda não estavam presentes no MySQL. Hoje em dia a situação já é bem diferente e este tipo de banco de dados tem cada dia mais espaço.

De vez em quando, na vida de programador, surge um banco de dados antigo e esquisito que precisa ter as informações validadas e transferidas para um banco de dados mais novo. Quantos anos faltam para que o MySQL torne-se obsoleto? Será que ele vai ser considerado esquisito quando alguém estiver atualizando conteúdo no seu formato? O que virá para substituir o MySQL? Difícil prever estas coisas, mas é certo que os SGBDs evoluirão.

setembro 24, 2009 at 10:15 am 1 comentário

A opção “template da página” sumiu do WordPress

Utilizar o WordPress como CMS requer conhecimento das funcionalidades e ferramentas que o WordPress dispõe mas e quando uma coisa não funciona como esperado? Em um projeto deparei-me com a falta do campo Modelo que deveria estar na lateral do formulário de edição de páginas.

Procurei solucionar o erro e quase modifiquei o arquivo edit-page-form.php para exibir as opções que eu definisse, mas verificando melhor a estrutura do WordPress percebi que o meu problema era muito mais simples de resolver. Era um erro com o modelo ativo. Então fica a dica: conheça a ferramenta e estude o seu funcionamento antes de colocar a culpa no código do CMS.

setembro 21, 2009 at 3:50 pm 4 comentários

Criando um web service básico usando PHP, MySQL, XML e JSON

Os web services estão dominando todo o mundo. Algumas pessoas creditam o vertiginoso crescimento do Twitter a disponibilização de uma simples, mas rica, API. Por que não utilizar este mesmo modelo para os seus próprios sites?

Segue um exemplo de como criar um web service básico que provê uma resposta XML ou JSON usando apenas PHP e MySQL. O objetivo deste webservice é listar os últimos artigos de determinado autor em um blog do WordPress, mas entendendo a idéia, você poderá criar qualquer outra coisa.

<?php

	/* Solicita o parâmetro "usuario"  */
	if(isset($_GET['usuario']) and intval($_GET['usuario'])) {
	
		/* verifica se a variável foi passada, ou define o valor das variáveis */
		$numero_de_artigos = isset($_GET['artigos']) ? intval($_GET['artigos']) : 10; //10 é o padrão
		$formato = (isset($_GET['formato']) and strtolower($_GET['formato']) == 'json') ? 'json' : 'xml'; //xml é o padrão
		$id_do_usuario = intval($_GET['usuario']); //sem valor padrão
		
		/* conecta ao banco de dados */
		$conexao = mysql_connect('servidor','usuario','senha') or die('Não foi possível conectar ao banco de dados');
		mysql_select_db('banco',$conexao) or die('Não foi possível selecionar o banco de dados');
		mysql_set_charset('utf8', $conexao); //se o seu servidor suporta, é uma boa prática. Veja: http://bit.ly/W38Xy
		
		/* seleciona os artigos do banco de dados */
		$consulta = "SELECT post_title, guid FROM wp_posts WHERE post_author = $id_do_usuario AND post_status = 'publish' 
		ORDER BY ID DESC LIMIT $numero_de_artigos";
		
		$resultado = mysql_query($consulta,$conexao) or die('Consulta com problemas:  '.$consulta);
		
		/* cria um array mestre com os registros */
		$artigos = array();
		if(mysql_num_rows($resultado)) {
			while($artigo = mysql_fetch_assoc($resultado)) {
				$artigos[] = array('post'=>$artigo);
			}
		}
		
		/* extrai os dados no formato expecificado */
		if($formato == 'json') {
			header('Content-type: application/json');
			echo json_encode(array('artigos'=>$artigos));
		}
		else {
			header('Content-type: text/xml');
			echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
			echo '<posts>'."\n";
			foreach($artigos as $indice => $artigo) {
				if(is_array($artigo)) {
					foreach($artigo as $chave => $valor) {
						echo "\t<",$chave,'>'."\n";
						if(is_array($valor)) {
							foreach($valor as $tag => $val) {
								echo "\t\t".'<',$tag,'>',$val,'</',$tag,'>'."\n";
							}
						}
						echo "\t".'</',$chave,'>'."\n";
					}
				}
			}
			echo '</posts>'."\n";
		}
		
		/* desconecta do banco de dados */
		@mysql_close($conexao);
	}

?>

Com o aumento do número de pessoas que acessam seu web service ( que felicidade! ), você precisará adequar a validação antes de se conectar ao banco de dados para evitar ataques de injeção SQL.

Este web service funciona assim: Quando tivermos os resultados desejados do banco de dados, ciclicamente pegamos os resultados e preencheos nosso vetor de resultados. Dependendo do tipo de resposta desejada, nós enviamos os cabeçalhos adequados e o resultado no formato solicitado.

Segue um exemplo de URL que pode ser utilizada para se obter o resultado deste web service:

http://enderecodomeusite.com/web-service.php?usuario=2&artigos=15

setembro 16, 2009 at 3:32 pm Deixe um comentário

O padrão MVC

Lembro-me que quando iniciei-me com programação o modelo de arquitetura de softwares utilizados didaticamente não era muito bem refinado para a produção de “peças” bem alinhadas e organizadas como as que eu deseja produzir. Todos os cálculos ficavam misturados nos códigos ao preenchimento de objetos que exibiam os dados. Ficava complicado tratar os dados antes de entregá-los e ficava tudo uma bagunça. Quando conheci o padrão MVC, através de códigos de páginas da web em PHP, apaixonei-me por ele.

Como funciona o padrão MVC?

Através do padrão MVC, Model-View-Controller, o processo de criação fica muito mais facilitado. A estrutura dos softwares é separada em camadas lógicas e bem simples de entender.

Camada Controller / Ferramentas

A primeira camada, que é a base do sistema, é a camada Controller que, como você já deve ter percebido pelo nome, é quem controla todo o sistema.

Esta camada contém as instruções que irão ligar os Models aos Views, você pode simplificar a construção de Views e Models com a inclusão de procedimentos nesta camada, você deverá tratar nesta camada das questões de segurança do seu sitema, por exemplo, incluindo rotinas que analisem os dados antes de entregá-los aos Models, ou que podem ser chamadas pelos Models para análise das informações recebidas.

Exemplos de conteúdo da camada Controller:

  • Funções para conexão e manipulação de banco de dados;
  • Funções para inclusão de elementos em uma view;
  • Funções de tratamento de dados, por exemplo, removendo caracteres de controle;
  • Chamada ao Model solicitado entregando todas as funções necessárias.

Camada Model / Trabalho

É a camada intermediária do sistema que armazena as informações de como o sistema deve funcionar.

Exemplos de conteúdos desta camada:

  • Consultas ao banco de dados, através das funções disponibilizadas pelo Controller;
  • Cálculos, por exemplo, de porcentagem ou soma de totais;
  • Tratamento de tipos de dados, através das funções disponibilizadas pelo Controller.
  • E todo tipo de preparação de informações para entregar a camada View;
  • Chamada ao View solicitado entregando as informações totalmente trabalhadas.

Camada View / Apresentação

Esta é a camada final, onde os dados deverão ser organizados e entregues ao destinatário de uma forma visualmente organizada. Nesta estrutura monta-se os menus e botões, preenche-se as tabelas e exibe-se os conteúdos.

Visão retrovisora

Agora que a gente já conhece o padrão MVC, a gente pensa: Todos os problemas foram resolvidos! Pouquísima programação na Apresentação, um pouco mais na camada de Trabalho, e programação pesada com atualizações menos frequentes na camada de Ferramentas. E é isso mesmo!

UPDATE: E é isso mesmo a não ser que você pegue um projeto MVC em que a equipe anterior não sabia o que é MVC e misturou a bagunça toda :( .

setembro 3, 2009 at 1:23 pm Deixe um comentário

Funções recursivas no PHP

Sempre gostei de fazer funções recursivas e quando posso tento utilizá-las pois acho charmosas e economizam código mas elas requerem um pouco mais de raciocíonio e atenção devido a facilidade de se criar loop/laço infinito.

( Noel Rocha )

<?php
function escape($var)
{
	if (!is_array($var)) {
		if(get_magic_quotes_gpc() == 1)
			$var = stripslashes($var);
		return mysql_escape_string($var);
	}
 
	foreach ($var as $chave => $valor)
		$var[$chave] = escape($valor);
 
	return $var;
}
?>
— Função recursiva criada pelo Noel para o escape, isto é, a anulação dos caracteres de controle de texto que uma variável de texto possuí como contra-barras, apóstrofo, aspas e aspas duplas.

Pessoalmente eu não utilizava funções recursivas pois é verdade que devemos ter muito cuidado com a criação de loops infinitos, mas a devida utilização das funções recursivas é muito importante de se compreender.

A função acima também poderia ser dividida em duas, mas neste caso teríamos mais um procedimento criado e talvez nós não o utilizássemos mais no nosso projeto. Determinadas vezes é chato ver procedimentos e mais procedimentos em alguns scripts. Crie-os quando for necessário. Se for possível, use as funções recursivas.

Além da forma apontada é claro que existem outras alternativas para o tratamento de strings no PHP para evitar uma Injeção SQL, mas este não é o nosso assunto de hoje, ok?

junho 1, 2009 at 6:10 pm Deixe um comentário

IDE NetBeans

A IDE NetBeans é muito utilizada para o desenvolvimento de scripts em Java. Em busca de ferramentas para aumentar a minha produtividade fiz o download do sistema e analisei como ele se comporta no desenvolvimento em PHP.

Pensei ter encontrado um Microsoft Visual Studio para PHP. A ferramenta pesada e perfeita… mas de perfeita ela não tem muita coisa e acredito que o Eclipse continua sendo mais produtivo. O Kate quebra o galho quando se precisa de mais velocidade.

Funcionou bem no meu Open Solaris. No Ubuntu eu tive que instalar o Java SE Development Kit (JDK) com o Java Runtime Environment (JRE).

No Windows eu não testei. Por quê? Porque a Sun não envia mais CDs com o conteúdo do sistema e eu teria que baixar todo o executável para Windows com a certeza de que não usaria esta IDE.

setembro 1, 2008 at 11:35 pm 2 comentários

RSS? Minha tia morreu disso!

Hoje, no Google Zeitgeist, que mostra os termos mais buscados no Google encontrei os seguintes resultados nas três primeiras posições da lista de definições buscadas em 2007:

  1. what is love
  2. what is autism
  3. what is rss

    Não pude deixar de notar que nesta ferramenta o terceiro termo mais procurado é sobre a definição de RSS. Procurei uma comparação no Google Trends sobre RSS e Autismo e me surpreendi em ver o RSS mais bem colocado. Hora! Que bicho é esse?

    RSS? Minha tia morreu disso!

    Bricadeira, RSS é a sigla de Really Simple Syndication (v 2.0) e é um sistema de alimentação de informações muito utilizado na Internet atual. Sistemas de blogs e portais disponibilizam as suas informações neste formato para que as mesmas sejam lidas em diversos sistemas da web ou do seu desktop.

    Existem diversos componentes e bibliotecas, em quase todas as linguagens para trabalhar com este formato. Para quem gosta de ASP.Net, acho interessante dar uma olhada no RSS Toolkit, ou para quem programa PHP no manual do PHP sobre o DOM XML.

    Feliz Natal!

    dezembro 25, 2007 at 6:00 pm Deixe um comentário

    Programador tem que concluir ensino superior

    Você lembra do Termo Geral da Progressão Aritmética? E da somas dos termos de uma P.A ?

    Pois bem, muita gente se esquece das coisas mais fundamentais na matemática e demais informações que aprendemos na escola e são congruentes a lógica de programação.

    Por exemplo: Se quiséssemos a soma dos 50 primeiros números pares e inteiros do sistema decimal alguém poderia criar o código abaixo:

    para variavel_de_controle = 1 até 50 passo 2 faça
    variavel_soma = variavel_soma + 1
    fim-para
    imprima variavel_soma

    Porém se pararmos para analisar podemos utilizar a fórmula do termo geral Termo geral da progressão geométrica a_n=a_1+(n-1).r e da soma Soma dos termos de uma progressão geométrica S_n=frac{n.(a_1+a_n)}2 para ter um trabalho mais rápido e que não consuma muitos recursos de processamento. Seria muito mais simples fazer:variavel_ultima = 2 + (50-1) * 2O que nos retornaria 98 + 2 = 100

    variavel_soma = (50(2+100))/2

    O que nos retornaria 5100 / 2 = 2550

    Muito mais simples, porém muita gente não sabe e fica fazendo loops que gravam e efetuam leitura da memória 50 vezes gastando mais memória e processamento do que deveria e se estive estruturado corretamente. Muita gente tem preguiça de pensar.

    novembro 24, 2007 at 10:59 am 5 comentários

    Porque ninguém usa o &= ?

    No VB.Net raramente vi códigos que utilizem o operador de atribuição com concatenação &= de modo que tem gente que repete milvezes o nome da variável em atribuições em que precisa preservar o início da variável de texto.

    Tem uma forma mais fácil o &= está ae disponível para utilização.

    Sabendo que você é uma boa pessoa me ajuda a esclarecer essa dúvida. Porque ninguém usa?

    novembro 20, 2007 at 11:28 pm

    PHP tem sintaxe alternativa da discórdia

    O PHP é muito interessante, existem formas alternativas de se efetuar a mesma operação, um exemplo disso é a sintaxe do if por exemplo, que pode ser a tradicional:

    if (expressão) { <operações>} else { <operações>}

    Ou:

    if (expressão) : <operações> else: <operações> endif

    Para quem está acostumado com VB a sintaxe alternativa é bem fácil de gravar, mas isso gera muita polêmica, tem gente que nem intende de uma forma, quanto mais tendo duas ou três. O bom é que está ae, e isso que importa.

    <?php
    $variavel = "cassio";
    if ($variavel == 2):
    echo "variavel = 2";
    elseif ($variavel == 7):
    echo "variavel é 7";
    elseif ($variavel == "cassio"):
    echo "variavel =cassio";
    else:
    $variavel = "abracadabra! a variavel nao possui nenhum dos valores definidos.";
    echo $variavel;
    endif
    ?>
    

    novembro 17, 2007 at 7:37 pm

    Posts mais Antigos


    RSS Cassio Santos

    • Ocorreu um erro. É provável que o feed esteja indisponível. Tente mais tarde.

    Categorias

    Calendário

    janeiro 2012
    S T Q Q S S D
    « set    
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  

    Feeds


    Seguir

    Obtenha todo post novo entregue na sua caixa de entrada.