-
Recent Tweets
-
@Windows don´t you think this is a not important question? please, use twitter to send important things about my OS 6 months ago
-
@Twuris @virginiabarbosa @bella_calcados bom saber, Abração! 6 months ago
-
@Twuris outro dia fui na bella calçados do itaú. Os vendedores não sabiam quem era você :-( 6 months ago
-
-
Artigos recentes
Tags
Feed
Category Archive: Software Livre
Subcategories: Sem categorias
Introdução sobre o MongoDB
Durante algumas décadas, investiu-se na construção de bancos de dados orientados a objetos. A perspectiva era de que com um banco de dados orientado a objeto o mapeamento entre os dados e o banco, algo extremamente oneroso em bancos relacionais, pudesse ser transparente. De fato, muitos bancos foram criados durante as últimas décadas para atender à perspectiva orientada a objetos, no entanto sem muito sucesso. Uma das causas desse insucesso é porque cada linguagem trabalha com objetos de maneira diferente, sendo assim, seria necessário adaptar o banco para a linguagem específica que estivesse sendo utilizada. Outro problema é que as linguagens evoluem muito rapidamente, podendo transformar em obsoleto o mapeamento de dados pensado a 2, 3 anos. Com o amadurecimento de linguagens, como é o caso do C++ ou, mais recentemente, do JAVA, pode ser que bancos orientados a objeto voltem a ganhar força.
A tendência de criação de bancos NoSQL fez com que uma nova categoria de bancos surgisse. O document-oriented MongoDB é uma nova possibilidade que trabalha com o armazenamento de documentos no formato BSON, uma extensão do JSON que é muito conhecido entre os desenvolvedores JavaScript e largamente utilizado para a troca de informações na web. A principal diferença entre um documento JSON e um objeto em uma linguagem de programação orientada a objeto é que no JSON não é possível guardar métodos, no entanto permite guardar objetos e vetores – arrays – dentro de um objeto JSON.
Uma das grandes vantagens do MongoDB é justamente essa flexibilidade que o padrão BSON possibilita de se criar objetos dentro de outros objetos. Um exemplo de objeto armazenado no MongoDB é apresentado a seguir:
aluno = {“nome”:”Kelvin Santana”,”período”:5,”nascimento”:”1991-02-07”}
Como o formato BSON pode ser estendido, é possível acrescentar outras informações ao objeto aluno, de maneira que ele incorpore mais informações n o objeto criado, como um array de dados por exemplo.
aluno =
{
“nome”:”Kelvin Santana”,
”período”:5,
”nascimento”:”1991-02-07”,
“disciplinas pendentes”:[“Padrões de projeto”,”Administração de banco de dados”]
}
Também a adição de objetos completos é possível:
aluno =
{
“nome”:”Kelvin Santana”,
”período”:5,
”nascimento”:”1991-02-07”,
“celular”:{“ddd”:”31”,“numero”:”91233342”},
“residencial”:{“ddd”:”31”,”numero”:”25526123”}
}
Ou mesmo um array com objetos:
aluno =
{
“nome”:”Kelvin Santana”,
”período”:5,
”nascimento”:”1991-02-07”,
“telefone”:[
{“celular”:{“ddd”:”31”,“numero”:”91233342”}},
{“residencial”:{“ddd”:”31”,”numero”:”25526123”}},
{“empresa”:{“ddd”:”31”,”numero”:”37526137”}}
]
}
Todas essas estruturas são possíveis para o objeto aluno e elas podem coexistir em uma mesma Collection. A Collection é um conceito que se assemelha a uma Tabela em um banco de dados relacional. Uma Collection “alunos” pode receber todos os objetos “aluno” listados acima, mesmo que possuam características estruturais diferentes. Isso é possível por que cada Collection armazena documentos independentemente, ou seja, cada documento é independente de uma estrutura pré-fixada. O único item obrigatório para cada elemento é a chave “_id”, que é responsável por indexar todos os elementos de uma Collection e que é inserida automaticamente pelo MongoDB e que também pode ser inserida pelo desenvolvedor manualmente caso seja de interesse do mesmo.
Assim como uma tabela, é uma boa prática que a Collection armazene itens de um mesmo tipo básico, ou seja, a Collection “alunos” deve armazenar todos os alunos, sejam eles de graduação, ensino médio, básico ou pré-escola. Cada um desses tipos de alunos terá uma estrutura específica, como a divisão de notas e ou estrutura do curso – em semestres, anos, módulos –, mas também possuirá itens em comum. Ao procurar itens dentro de “alunos”, serão apresentados os Documents de todos os alunos cadastrados no banco. O Document é o equivalente a linhas em uma tabela de um banco relacional.
Quando usar?
Muitas pessoas entendem o conceito do MongoDB, mas ficam em dúvida sobre quando utilizá-lo. Os desenvolvedores do MongoDB – o pessoal da 10gen – pensaram o banco para ser algo dinâmico, em que cada Collection possa ser composta por diversos outros objetos. O exemplo clássico de quando utilizar o Mongo é um blog. Mas espera aí, quem é que constrói um blog hoje em dia? Algo pouco usual, ainda mais com o WordPress disponível. Então onde? Nesta sessão você verá alguns exemplos de quando usar e quando não usar.
Primeiramente será apresentado onde não usar o MongoDB. Se você precisa de um sistema que realiza várias ações atomicamente, como, por exemplo, uma conta no banco em que o dinheiro precisa ser creditado numa conta e automaticamente debitado em outra, não utilize o MongoDB. Ele não aceita ações atômicas em mais de uma Collection ao mesmo tempo. O mesmo serve se você está implantando uma loja virtual e precisa fazer o controle no estoque que está em outra tabela de maneira atômica em um não pode ser feito sem o outro. Neste caso, opte por outros tipos de banco, de volta aos famosos relacionais. Não entenda o fato do MongoDB não aceitar operações atômicas para múltiplas Collections – tabelas – ao mesmo tempo, como se o MongoDB não oferecesse atomicidade. Ele oferece sim, sempre que uma Collection for alterada e acontecer uma inserção, atualização ou deleção de quaisquer Documents no Mongo, esse processo será atômico.
Mas se a realidade do projeto é distinta da apresentada anteriormente, especialmente se você estiver em um projeto de software social – desenvolvido para suportar a interação entre diversas pessoas – como são os casos do Facebook, Twitter e de quase todas as empresas que querem que seus visitantes interajam com o seu site, o MongoDB foi feito para o projeto. Isso por que o mongo permite objetos multiestruturados. Sendo assim, se o seu sistema possui uma página e esta página possuir comentários ou seguidores ou pessoas associadas, provavelmente a solução em MongoDB será melhor projetada. Vale também para sistemas desktop que possuam estruturas de dados complexas e não requerem atomicidade entre diversas transações.
Um exemplo será apresentado a seguir. Imagine um sistema de organização de horário de uma faculdade em que será necessário distribuir as disciplinas entre os diversos professores e os professores entre os diversos horários. Em um sistema desses é muito comum possuir professores que tem restrições de dia, por exemplo, só podem dar aula às segundas e terças feiras e também possuem restrição de horários, nas segundas apenas no terceiro e quarto horários. As disciplinas possuem cargas horárias semanais, então certo número de aulas têm que serem ministradas durante a semana e cada disciplina pode ser ministrada por alguns professores, sendo que apenas um será escolhido para fazê-lo.
Uma organização para resolver este problema em um banco de dados relacional seria algo assim:
Esta solução foi feita da maneira mais simples possível para atender todos os requisitos listados acima. Em uma estrutura JSON, a solução seria um pouco mais simples, com apenas duas Collections.
Este é um tipo de sistema em que vale a pena optar pelo MongoDB.
Sistemas que necessitam fazer versionamento, ou seja, alguns usuários utilizam uma versão e outras utilizam uma nova, encontram no MongoDB uma alternativa perfeita para suportar o sistema. Isso por que como os Documents não precisam de estrutura fixa, os utilizadores de uma versão podem ter uma estrutura de dados e os de outra uma estrutura diferente, sem que isso cause qualquer inconsistência no banco e sem que você precise trabalhar com uma série de NULLS no tratamento de dados de qualquer uma das versões que estão no servidor. Basta disponibilizar a nova versão, atualizar os dados dos usuários que a utilizarão e pronto. Seu sistema já estará funcionando em modo multiversionado.
Por fim, o Mongo também oferece muita rapidez no acesso e a possibilidade de criar Shards de maneira muito otimizada.
Posteriormente será apresentado um pouco mais sobre o mecanismo de armazenamento de dados do MongoDB, como instalá-lo e utilizá-lo em aplicações cotidianas.
Tagged bancos de dados, JSON, MongoDB, MySQL, SGBD
Gramática de Livre Contexto – BNF
As gramáticas de livre contexto, também conhecidas como BNF (Backus-Naur form) foram essênciais para a descrição das linguagens de programação. Criada inicialmente para descrever o Algol 58 e aperfeiçoada para o Algol 60, a BNF permite muita expressividade ao dar forma a uma linguagem de programação (LP).
Na disciplina de LP que ministro na PUC Minas é utilizada uma BNF para que os alunos tenham uma idéia de como ocorre o processo de análise de uma linguagem. Como parte da disciplina foi desenvolvido um Analisador de Sintaxe em JavaScript que pode ser utilizado para explicar o conceito e facilitar o processo de entendimento da Teoria.
O projeto é liberado para uso pedagógico, quem quiser acessá-lo, basta clicar no link do analisador.
Lançado site www.escoladetodos.com.br
Já está no ar o site www.escoladetodos.com.br. O site é uma proposta inovadora para o ensino de cursos profissionalizantes pela internet. Baseado em um sistema próprio, o site consiste em cursos profissionalizantes que podem ser realizados através do cartão Escola de Todos (ao preço de R$ 15,00). Este projeto piloto pretende disponibilizar cursos de formação profissional a baixo custo para pessoas que não tem acesso a esse tipo de formação.
Mais informações podem ser obtidas no site www.escoladetodos.com.br.
Até mais!
Acessando Banco Access com PHP
Olá pessoal. Hoje vamos falar de uma coisa pouco comum e também por isso, meio chato de se encontrar informações sobre. Esta semana tivemos uma demanda que era converter alguns curso que funcionavam a partir do seguinte tripé:
HTML >> ASP >> Access
Este acesso era feito dentro de um curso para EAD. Como muitos servidores são desenvolvidos em Linux era necessário retirar o ASP e o ACCESS e transformálos em um acesso mais amigável como o XML ou JS.
Optamos por transportar os dados do Access para o JS pois iria requerer menos tempo de desenvolvimento (tendo em vista que muitas informações do HTML já são processadas por JSs inclusive a gravação de dados no padrão SCORM). A partir dessa definição inicial, o que precisávamos era transpor o banco Access para o JS. Para que isso fosse possível tínhamos duas opções:
1. Copiar os valores manualmente
2. Desenvolver um aplicativo que fizesse isso automaticamente
Optamos pela segunda opção e resolvemos desenvolver um aplicativo em PHP para isso. Mas como acessar o Access a partir do PHP?
A parte prática é bem simples. Basta abrir a conexão com o banco, executar o SQL que irá extrair os dados e imprimir na tela. Veja abaixo um exemplo do código necessário:
<?php
$con = odbc_connect(‘questoes’,”,”);
if (!$con)
{
exit(“Connection Failed: ” . $conn);
}
$query = “SELECT * FROM questoes”;
$exec = odbc_exec($con,$query);
$i = 0;
while(odbc_fetch_row($exec))
{
$campo1 = odbc_result($exec,1);
echo $campo1;
}
?>
Bem, na teoria seria apenas fazer isso e pronto. Verificamos o código e o mesmo está certo. Irá imprimir o conteúdo da primeira coluno (neste caso, o Access é One based, ou seja, a sua primeira coluna começa no 1). Mas no Windows XP isso simplesmente não funcionava. Fui pesquisar e descobri que era necessário utilizar a ferramenta “Fontes de ODBC” presente dentro das ferramentas administrativas (Painel de Controle / Ferramentas Administrativas / Fontes de Dados ODBC) e linkar o banco que se quer acessar para que o PHP possa reconhecer o banco.
O passo a passo é descrito abaixo:
1. Abra o Administrador de Fontes de Dados (ODBC).
2. Selecione a aba Fonte de dados de sistema
4. Selecione Microsoft Access Driver e clique em Concluir
5. Dê um nome para a fonte de dados, no nosso caso, “questoes” e então clique em Selecionar e selecione o banco de dados.
6. Clique em OK e tente acessar o sistema novamente. Agora você já será capaz de acessar o Access através do PHP.
Espero ter te ajudado. Abraços e até a próxima.




