Image Image Image Image Image
Scroll to Top

Topo

Dados

17

maio
2012

Sem Comentários

Em Blog
Dados

Por Allison

PostgreSQL 9.2 beta melhora escalabilidade e adiciona JSON

Em 17, maio 2012 | Sem Comentários | Em Blog, Dados | Por Allison

Fonte: IMasters

Com informações de The H

O beta da versão 9.2 do PostgreSQL foi liberado. A promessa é de que a nova versão traga melhorias em desempenho que habilitem melhor escalabilidade horizontal e vertical. Além disso, uma nova otimização – varredura apenas de índex permite que pesquisas evitem a leitura de tabelas subjacentes e apenas busque pelos índices. A nova funcionalidade acontece automaticamente, mas há vários problemas para sua efetividade.

De acordo com os desenvolvedores, melhorias em lidar com cargas de trabalho somente de leitura permitiram que o banco de dados escalasse usando 64 cores e atuasse em 300 mil consultas por segundo. Também houve mudanças para reduzir o consumo de energia do CPU e melhorias em escalabilidade horizontal incluem suporte para replicação em cascata, considerando cadeias de servidores de replicação e reduzindo requerimentos de transferência de dados entre data centers.

Novas funcionalidades foram adicionadas, incluindo suporte para JSON data type, levando em conta bancos de dados relacionais híbridos que podem armazenar documentos em JSON, e JSON functions, que pode converter array e dados de fila em JSON.

O uso do beta não é recomendado em ambientes de produção e em sistemas de missão crítica. Aqueles dispostos a testá-lo são encorajados a fornecer feedback e a reportar bugs. De acordo com o cronograma do projeto, a versão final do PostgreSQL 9.2 será lançada no terceiro trimestre deste ano.

Mais informações sobre o beta podem ser encontradas nas notas de lançamento de na documentação atualizada. Ele está disponível para download para Windows, Mac OS X, Linux, FreeBSD e Solaris.

Tags | , ,

14

maio
2012

Sem Comentários

Em Blog
Dados
Wordpress

Por Allison

Puxar informações de comentários do banco de dados do WordPress

Em 14, maio 2012 | Sem Comentários | Em Blog, Dados, Wordpress | Por Allison

Fonte: IMasters/Paulo Faustino

Uma das melhores formas de coletar e-mails dos usuários é através do formulário de comentários do WordPress. Ao invés de usar um plugin, é possível criar uma função customizada para criar uma listagem de e-mails a partir dos dados submetidos pelos usuários. O truque é conseguir puxar a informação dos comentários do banco de dados do WordPress e fornecer, por exemplo, uma caixa de submissão de comentário com subscrição por e-mail.

Essa tática pode ser usada para várias funcionalidades além de coletar e-mails dos usuários, como puxar a informação dos comentários, a data, o URL do comentador, e basicamente toda a informação que esteja na tabela wp_comments do WordPress. Recentemente, os colegas do blog digwp realizaram alguns testes interessantes com essa tabela, e você poderá fazer o mesmo, caso pretenda puxar informações de comentários do banco de dados do seu WordPress.

Você pode puxar e mostrar qualquer tipo de informação dessa tabela em qualquer página ou artigo do seu site. O que você necessita é uma página não-pública (ou outra localização) para mostrar os resultados (“não-pública” especialmente se você quiser puxar e-mails dos usuários). O ideal é você criar uma página privada ou selecionar um template customizado que tenha disponível. Ao carregar a página, aparecem todos os e-mails dos usuários, por exemplo.

Puxar informações do banco de dados

Se você tem uma página com formulário de captura de e-mails e pretende coletar a informação num local específico, para depois contatar esses usuários por e-mail, terá forçosamente que usar algumas funções customizadas do WordPress. Para puxar a informação, teremos que realizar algumas queries no banco de dados do WordPress, selecionar as nossas colunas da tabela wp_comments e depois mostrar essas informações em uma página personalizada/privada.

A respeito das queries SQL, puxar informações da tabela de comentários é muito básico e simples, mas puxar informações de comentários de um artigo em específico, por exemplo, já é bem mais complexo. Para fazê-lo, iremos necessitar da seguinte query:

SELECT DISTINCT comment_author, comment_author_email, comment_author_IP
FROM (
SELECT DISTINCT comment_author, comment_author_email, comment_author_IP
FROM wp_comments WHERE comment_post_ID = 1
) AS WHATEVER

Como pode ver, com essa query podemos puxar qualquer coluna da tabela wp_comments. Na query de exemplo, estamos selecionando as colunas comment_author, comment_author_email, e comment_author_IP.

Se você tiver acesso ao seu banco de dados, você pode usar programas como o phpMyAdmin para executar a query automaticamente. Caso não tenha acesso, teremos que usar uma página privada do WordPress para o efeito. Abra um template de página do WordPress e coloque o seguinte código depois da função the_content():

<?php //grab the data
$comment_info = $wpdb->get_results("SELECT DISTINCT comment_author, comment_author_email, comment_author_IP
FROM (SELECT DISTINCT comment_author, comment_author_email, comment_author_IP
FROM wp_comments
WHERE comment_post_ID = 1
) AS WHATEVER");
// display the results
echo '<ul>';
foreach($comment_info as $info) {
echo '<li><strong>'. $info->comment_author .'</strong> - '. $info->comment_author_email .' - <small>'. $info->comment_author_IP .'</small></li>';
}
echo '</ul>';
?>

Selecione apenas o ID do artigo e voilá! Quando você visita a sua página privada no browser, você irá ver uma listagem similar a esta:

  • Guilherme – gui@hotmail.com – 123.456.789
  • Antônio – max@gmail.com – 987.654.321
  • Salvador Dali – dali@email.com – 456.789.123

Até já!

Tags | , , ,

27

abr
2012

Sem Comentários

Em Blog
Dados

Por Allison

Versão 5.5.23 do MariaDB é liberada e traz melhorias de desempenho

Em 27, abr 2012 | Sem Comentários | Em Blog, Dados | Por Allison

Fonte: IMasters

Com informações de The H

A versão 5.5.12 do MariaDB, um substituto drop-in para o MySQL, foi publicada pelos desenvolvedores no Monty Program. O primeiro release estável para o banco de dados open source inclui melhorias de desempenho e a adição de novas funcionalidades em relação ao MySQL 5.5.23, no qual foi baseado.

De acordo com os desenvolvedores, a funcionalidade thread pool agora está significativamente mais eficiente, tornando-se comparável à mesma funcionalidade de fonte fechada no MySQL Enterprise. Outras mudanças incluem uma opção @@skip_replication e atualizações para o mysql_real_connect(), assim como a adição de um novo argumento INSTALL SONAME e otimizações em LIMIT ROWS EXAMINED.

Os desenvolvedores ressaltaram que, como o MariaDB 5.5.23 inclui o MariaDB 5.3.6, a atualização corrige um problema sério de segurança que poderia permitir que um usuário se conectasse com uma senha inválida em certas circunstâncias. Usuários com versões mais antigas são alertados para realizarem a atualização o mais rápido possível.

Mais detalhes sobre a nova versão, incluindo uma lista completa de mudanças, podem ser encontrados neste link, nas notas de lançamento e no change log. O MariaDB 5.5.23 está disponível para download para sistemas de 32 e de 64 bits.

Tags | , , , ,

25

abr
2012

Sem Comentários

Em Blog
Dados

Por Allison

Apache Cassandra 1.1 está disponível para download

Em 25, abr 2012 | Sem Comentários | Em Blog, Dados | Por Allison

Fonte: IMasters

Com informações de The H

A Apache Software Foundation anunciou a disponibilidade da versão 1.1 do Apache Cassandra, o banco de dados distribuído “NoSQL” de código aberto e altamente escalável. A versão traz melhorias em seu cache, na integração do Hadoop, no controle de armazenamento e de diretório de dados, e na escalabilidade.

O CQL, Cassandra Query Language, também foi revisto e passou a figurar como a versão 3.0, com um evoluído modelo de esquema e a capacidade de criar tabelas com várias colunas de chaves primárias e outras alterações.

O Cassandra 1.1 foi liberado sob a licença Apache 2.0 e releases binários estão disponíveis para download a partir do site do projeto.

Tags | ,

22

abr
2012

Sem Comentários

Em Blog
Dados

Por Allison

O que é e como usar o MySQL?

Em 22, abr 2012 | Sem Comentários | Em Blog, Dados | Por Allison

Fonte: Pedro Pisa/TechTudo


O MySQL é um sistema gerenciador de banco de dados relacional de código aberto usado na maioria das aplicações gratuitas para gerir suas bases de dados. O serviço utiliza a linguagem SQL (Structure Query Language – Linguagem de Consulta Estruturada), que é a linguagem mais popular para inserir, acessar e gerenciar o conteúdo armazenado num banco de dados.

Na criação de aplicações web abertas e gratuitas, o conjunto de aplicações mais usado é o LAMP, um acrônimo para Linux, Apache, MySQL e Perl/PHP/Python. Nesse conjunto de aplicações, inclui-se, respectivamente, um sistema operacional, um servidor web, um sistema gerenciador de banco de dados e uma linguagem de programação. Assim, o MySQL é um dos componentes centrais da maioria das aplicações públicas da Internet.

O sistema foi desenvolvido pela empresa sueca MySQL AB e publicado, originalmente, em maio de 1995. Após, a empresa foi comprada pela Sun Microsystems e, em janeiro de 2010, integrou a transação bilionária da compra da Sun pela Oracle Corporation. Atualmente, a Oracle, embora tenha mantido a versão para a comunidade, tornou seu uso mais restrito e os desenvolvedores criaram, então, o projeto MariaDB para continuar desenvolvendo o código da versão 5.1 do MySQL, de forma totalmente aberta e gratuita. O MariaDB pretende manter compatibilidade com as versões lançadas pela Oracle.

Como usar o MySQL

Para utilizar o MySQL, é necessário instalar um servidor e uma aplicação cliente. O servidor é o responsável por armazenar os dados, responder às requisições, controlar a consistência dos dados, bem como a execução de transações concomitantes entre outras. O cliente se comunica com o servidor através da SQL. A versão gratuita do MySQL é chamada de Edição da Comunidade e possui o servidor e uma interface gráfica cliente.

Interface inicial do MySQL Workbench

O servidor deve ser instalado e configurado para receber conexões dos clientes. No MySQL, o principal cliente é a interface gráfica cliente fornecida pela Oracle, denominada MySQL Workbench. Através do MySQL Workbench, pode-se executar consultas SQL, administrar o sistema e modelar, criar e manter a base de dados através de um ambiente integrado. O MySQL Workbench está disponível para Windows, Linux e Mac OS.

Na interface de modelagem de base de dados do MySQL Workbench, pode-se definir as entidades da base de dados, seus atributos e relacionamentos. Em banco de dados, deve-se definir configurações importantes para os bancos de dados, como as chaves primárias e estrangeiras e os atributos que devem ser indexados. Todas essas configuras são definidas nessa interface.

Interface de modelagem da base de dados do MySQL Workbench

Na figura abaixo, apresenta-se a interface de administração do aplicativo, a qual consiste de informações sobre o status do sistema, como uso de processamento, memória e conexões simultâneas, e de configurações do sistema de gerenciamento e das bases de dados.

Configurações do sistema gerenciador consistem, entre outras mais complexas, da porta TCP, que deve ser conectada, e da pasta onde os arquivos das bases de dados são salvos no disco. As configurações específicas das bases de dados consistem na codificação dos dados, nas permissões de acesso, por exemplo.

Interface de administração do MySQL Workbench

No editor genérico de consultas, ilustrado na imagem abaixo, o administrador pode executar consultas para buscar informações especificas ou testes. Basta inserir a consulta SQL, na parte superior da janela, e os resultados são exibidos na guia “Output” da metade inferior da janela. Na guia “Overview”, o administrador pode obter os nomes das tabelas, visões e rotinas de cada base de dados criada no sistema.

Editor genérico de consultas SQL do MySQL Workbench

Tags | , ,

17

abr
2012

Sem Comentários

Em Blog
Dados

Por Allison

MySQL 5.6.2 introduz a interface NoSQL

Em 17, abr 2012 | Sem Comentários | Em Blog, Dados | Por Allison

Fonte: IMasters

Com informações de The H

A Oracle lançou a versão 5.6.2 do MySQL, que ganhou melhorias no recurso de replicação e a capacidade de passar do framework SQL para um acesso mais rápido a dados e para performace parecida com NoSQL.

Reagindo às demandas dos clientes para a melhoria da velocidade de transação, o MySQL 5.6.2 introduz uma interface NoSQL usando a API memcached, que permite aos usuários acessar diretamente o mecanismo de armazenamento InnoDB, ignorando completamente o SQL, mantendo a compatibilidade com o modelo de banco de dados relacional. Os recursos do NoSQL foram originalmente vistas em um “laboratório instantâneo” em abril de 2011. A replicação também tem recebido vários novos recursos no MySQL 5.6.2, incluindo melhorias de desempenho e melhorias de integridade de dados, tais como novas replicações de checksums e a recuperação automática de escravos de banco de dados com falhas.

Mais informações sobre o lançamento você encontra aqui. O software experimental está licenciado sob a GPLv2 e pode ser baixado do site do MySQL Labs. Como acontece com todo o software experimental, os usuários são lembrados de que o objetivo é usá-los em teste e não deve ser usados em ambientes de produção.

Tags | , ,

11

abr
2012

Sem Comentários

Em Blog
Dados
Redes Sociais

Por Allison

Twitter abre código de melhorias que promoveu no MySQL

Em 11, abr 2012 | Sem Comentários | Em Blog, Dados, Redes Sociais | Por Allison

Fonte: IMasters

Com informações de The H

O Twitter anunciou que está abrindo o código do trabalho que fez para melhorar o MySQL em seus sistemas de produção. O microblog é um grande usuário do MySQL – utiliza-o para timeline, dados do usuário, gráfico de interesse e armazenamento de tweets – e vem adaptando-o às suas necessidades.

As mudanças incluem tornar o MySQL mais monitorável ao exportar mais informações da engine de armazenamento InnoDB e fazer com que o MySQL se torne mais previsível ao alocar buffers na inicialização em máquinas com muita quantidade de memória, além de melhorar intervalos e cancelamentos em consultas.

Outras modificações otimizam o MySQL para sistemas baseados em SSD ao mudar o comportamento para reduzir o número de escritas no disco, o que deveria melhorar a expectativa de vida dos drives SSD. Além disso, o Twitter desenvolveu uma técnica para exportar e restaurar o pool buffer InnoDB, que é usado como parte de suas ferramentas de construção para fornecer restaurações contínuas para sistemas.

As alterações foram publicadas no GitHub sob a licença New BSD e estão documentadas. Além disso, o histórico de mudanças está disponível.

Tags | , , ,

10

abr
2012

Sem Comentários

Em Blog
Dados

Por Allison

Apache CouchDB 1.2 aumenta velocidade e comprime mais

Em 10, abr 2012 | Sem Comentários | Em Blog, Dados | Por Allison

Fonte: IMasters

Com informações de The H

Os desenvolvedores do Apache CouchDB anunciaram melhorias em desempenho e em segurança na versão 1.2 do banco de dados NoSQL. A atualização também traz uma nova implementação de replicação e o padrão para habilitar compressão de arquivos para o banco de dados e para os arquivos do index view.

Além disso, a nova versão foi lançada junto com uma reforçada presença do banco de dados na Apache Software Foundation.

O CouchDB faz muito uso do format de dados JSON e, na 1.2, os desenvolvedores moveram partes críticas do parser do JSON para o Com (usando a biblioteca yail), que, segundo eles, melhorou a latência e a taxa de transferência do sistema. Bancos de dados e índices para views agora são passados através do sistema de compressão Snappy, do Google, reduzindo a quantidade de dados transferida para e a partir do disco; essa redução em I/O também melhorou o desempenho do banco de dados e permitiu vários aprimoramentos em algoritmos, o que resultou na melhoria de operações comuns, como a construção de views.

A segurança também foi modificada no Apache CouchDB 1.2, o que levou a algumas rupturas de compatibilidade com versões anteriores. Agora, o banco de dados dos usuários não está legível para todos e, ao acessar os dados no replicador do banco de dados, irá retornar documentos retirados de informações confidenciais, como senhas e tokens OAuth. O CouchDB agora gerencia, de forma consistente, o hashing de senhas antes de seu armazenamento, em vez de confiar nos aplicativos do cliente para isso. Além disso, segredos do OAuth dentro do banco de dados e cookies de autenticação persistente também são suportados pelo CouchDB.

Outras mudanças incluem um novo sistema replicador, que, segundo os desenvolvedores, é mais confiável e rápido que o anterior; maior abrangência de opções de configuração para permitir melhor tuning para ambientes particulares; e melhorias no sistema de building e de logging, além de várias correções de bugs.

Detalhes estão disponíveis aqui. O Apache CouchDB 1.2 pode ser baixado neste link, e uma versão para Mac OS X chegará em breve.

Tags | , , ,

10

abr
2012

Sem Comentários

Em Blog
JavaScript
JSON

Por Allison

Como obter e tratar um retorno em JSON com o Wrapper .Net

Em 10, abr 2012 | Sem Comentários | Em Blog, JavaScript, JSON | Por Allison

Fonte: Buscapé Developer/IMasters

Veremos, neste artigo, uma das formas que temos de tratar os dados de um retorno em JSON utilizando o wrapper .Net.

Para começar, faça o download do Wrapper .Net direto do nosso perfil no GitHub e inclua seus arquivos em seu projeto para utilizar a classe Apiki_Buscape_API.

Com os arquivos do Wrapper .Net devidamente inseridos no projeto, vamos instanciar um objeto da classe, que servirá como nosso objeto de negócio principal. Como já estamos acostumados, devemos informar ao construtor da classe o nosso ApplicationId, para identificar a aplicação na requisição ao Buscapé. Pórem, neste exemplo também devemos sobreescrever o formato padrão de retorno dos dados para o JSON. Portanto, temos que informar valores default para os outros parâmetros do construtor da classe e informar o formato como JSON.

Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d", string.Empty, "BR", "json");

Para este artigo, vamos utilizar o método FindCategoryList, porque ele tem uma estrutura de retorno menos complexa. Consulte a documentação desse serviço na API do Buscapé, se desejar mais informações sobre os campos de resposta.

Vamos, então, invocar o método FindCategoryList com a palavra-chave LG e salvar o seu retorno em uma string.

string categoryList = apiBuscape.FindCategoryList(null, "LG", string.Empty);
Response.Write(categoryList);

Exibindo a resposta na tela, podemos ver o objeto JSON que foi retornado pelo método:

{"details":{"message":"success","elapsedtime":31,"status":"success","code":0,"applicationversion":"1.0.0.0","date":{"minute":2,"valid":true,"timezone":-120,"second":30,"millisecond":770,"month":2,"year":2012,"hour":10,"day":13,"xmlschematype":{"namespaceuri":"http://www.w3.org/2001/XMLSchema","prefix":"","localpart":"dateTime"},"eonandyear":{"lowestsetbit":2}},"applicationpath":"http://bws-apps.buscape.com/mobile/update","applicationid":"564771466d477a4458664d3d"},"schk":true,"subcategory":[{"subcategory":{"id":2852,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/2852.jpg"},"hasoffer":false,"name":"TV","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/tv.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=2852&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":77,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/77.jpg"},"hasoffer":false,"name":"Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=77&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3661,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3661.jpg"},"hasoffer":false,"name":"Ar Condicionado","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/ar-condicionado.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3661&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":6424,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/6424.jpg"},"hasoffer":false,"name":"Notebook","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/notebook.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=6424&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":36,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/36.jpg"},"hasoffer":false,"name":"Monitor","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/monitor.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=36&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3673,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3673.jpg"},"hasoffer":false,"name":"Geladeira / Refrigerador","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/geladeira-refrigerador.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3673&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3643,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3643.jpg"},"hasoffer":false,"name":"Home Theater","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/home-theater.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3643&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3601,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3601.jpg"},"hasoffer":false,"name":"Micro System / Mini System","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/micro-system-mini-system.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3601&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":5,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/5.jpg"},"hasoffer":false,"name":"DVD Player","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/dvd-player.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=5&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3671,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3671.jpg"},"hasoffer":false,"name":"Máquina de Lavar Roupas","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/maquina-de-lavar-roupas.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3671&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":6168,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/6168.jpg"},"hasoffer":false,"name":"Gravador","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/gravador.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=6168&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9754,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9754.jpg"},"hasoffer":false,"name":"Blu-Ray Player / HD-DVD Player","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/blu-ray-player-hd-dvd-player.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=9754&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":126,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/126.jpg"},"hasoffer":false,"name":"Microondas","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/microondas.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=126&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":37,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/37.jpg"},"hasoffer":false,"name":"Projetor Multimídia","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/projetor-multimidia.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=37&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":5839,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/5839.jpg"},"hasoffer":false,"name":"Auto-Rádio CD Player","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/auto-radio-cd-player.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=5839&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":119,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/119.jpg"},"hasoffer":false,"name":"Aspirador de Pó / Água","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/aspirador-de-po-agua.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=119&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":145,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/145.jpg"},"hasoffer":false,"name":"Forno Elétrico","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/forno-eletrico.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=145&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":6507,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/6507.jpg"},"hasoffer":false,"name":"Adega Climatizada","parentcategoryid":116,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/adega-climatizada.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=6507&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3737,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3737.jpg"},"hasoffer":false,"name":"HD","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/hd.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3737&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":8727,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/8727.jpg"},"hasoffer":false,"name":"Pen Drive","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/pen-drive.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=8727&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3429,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3429.jpg"},"hasoffer":false,"name":"Mouse","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/mouse.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3429&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":22,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/22.jpg"},"hasoffer":false,"name":"PC","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/pc.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=22&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3482,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3482.jpg"},"hasoffer":false,"name":"Livros","parentcategoryid":3482,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/livros.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3482&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":80,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/80.jpg"},"hasoffer":true,"name":"Outros Acessórios para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/outros-acessorios-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=80&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4699,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4699.jpg"},"hasoffer":true,"name":"Carregador para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/carregador-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4699&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9937,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9937.jpg"},"hasoffer":true,"name":"Fonte para Notebook","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/fonte-para-notebook.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=9937&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":6359,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/6359.jpg"},"hasoffer":true,"name":"Jaqueta Feminina","parentcategoryid":2468,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/jaqueta-feminina.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=6359&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4666,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4666.jpg"},"hasoffer":true,"name":"Bateria para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/bateria-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4666&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":2921,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/2921.jpg"},"hasoffer":true,"name":"CDs","parentcategoryid":2921,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/cds.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=2921&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9938,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9938.jpg"},"hasoffer":true,"name":"Bateria para Notebook","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/bateria-para-notebook.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=9938&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9941,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9941.jpg"},"hasoffer":true,"name":"Outros Acessórios para Notebook","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/outros-acessorios-para-notebook.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=9941&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4671,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4671.jpg"},"hasoffer":true,"name":"Fone de Ouvido para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/fone-de-ouvido-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4671&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4667,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4667.jpg"},"hasoffer":true,"name":"Capa para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/capa-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4667&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9469,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9469.jpg"},"hasoffer":true,"name":"Cabo de Dados para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/cabo-de-dados-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=9469&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7918,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7918.jpg"},"hasoffer":true,"name":"Câmera de Segurança","parentcategoryid":2701,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/camera-de-seguranca.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7918&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":10800,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/10800.jpg"},"hasoffer":true,"name":"Óculos 3D","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/oculos-3d.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=10800&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":18,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/18.jpg"},"hasoffer":false,"name":"MP3 Player / MP4 Player","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/mp3-player-mp4-player.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=18&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":8241,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/8241.jpg"},"hasoffer":true,"name":"Outros Serviços em Construção Civil","parentcategoryid":5845,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/outros-servicos-em-construcao-civil.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=8241&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":16,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/16.jpg"},"hasoffer":false,"name":"Fone de Ouvido / Headset","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/fone-de-ouvido-headset.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=16&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":103,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/103.jpg"},"hasoffer":false,"name":"WebCam","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/webcam.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=103&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4669,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4669.jpg"},"hasoffer":true,"name":"Kit Viva Voz para Celular e Smartphone","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/kit-viva-voz-para-celular-e-smartphone.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4669&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":2947,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/2947.jpg"},"hasoffer":false,"name":"Mochila","parentcategoryid":1328,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/mochila.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=2947&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4632,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4632.jpg"},"hasoffer":true,"name":"Outros Acessórios para Áudio / Vídeo","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/outros-acessorios-para-audio-video.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4632&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":75,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/75.jpg"},"hasoffer":false,"name":"Roteador","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/roteador.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=75&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7356,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7356.jpg"},"hasoffer":true,"name":"Assistência Técnica de Equipamentos de Informática","parentcategoryid":5845,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/assistencia-tecnica-de-equipamentos-de-informatica.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7356&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":6399,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/6399.jpg"},"hasoffer":false,"name":"Auto-DVD Player","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/auto-dvd-player.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=6399&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":3772,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/3772.jpg"},"hasoffer":false,"name":"Aparelho Telefônico","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/aparelho-telefonico.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=3772&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":172,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/172.jpg"},"hasoffer":true,"name":"Leitor de Cartão de Memória","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/leitor-de-cartao-de-memoria.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=172&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9532,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9532.jpg"},"hasoffer":true,"name":"Imóveis Residenciais","parentcategoryid":9549,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/imoveis-residenciais.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=9532&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7985,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7985.jpg"},"hasoffer":true,"name":"Serviços em Pisos","parentcategoryid":5845,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/servicos-em-pisos.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7985&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7349,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7349.jpg"},"hasoffer":true,"name":"Assessoria Contábil","parentcategoryid":5845,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/assessoria-contabil.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7349&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7334,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7334.jpg"},"hasoffer":true,"name":"Aluguel de Automóvel","parentcategoryid":5845,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/aluguel-de-automovel.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7334&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":52,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/52.jpg"},"hasoffer":false,"name":"Cartão de Memória","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/cartao-de-memoria.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=52&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":62,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/62.jpg"},"hasoffer":false,"name":"Caixa de Som para PC","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/caixa-de-som-para-pc.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=62&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":111,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/111.jpg"},"hasoffer":false,"name":"Vídeo Cassete","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/video-cassete.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=111&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":2782,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/2782.jpg"},"hasoffer":true,"name":"Controle Remoto","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/controle-remoto.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=2782&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":4029,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/4029.jpg"},"hasoffer":true,"name":"Suplementos Nutricionais Esportivos","parentcategoryid":1328,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/suplementos-nutricionais-esportivos.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=4029&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":2794,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/2794.jpg"},"hasoffer":true,"name":"Massageador Elétrico","parentcategoryid":249,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/massageador-eletrico.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=2794&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7606,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7606.jpg"},"hasoffer":true,"name":"Música Digital","parentcategoryid":7606,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/musica-digital.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7606&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7157,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7157.jpg"},"hasoffer":true,"name":"Apostila para Concursos / Cursos","parentcategoryid":6108,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/apostila-para-concursos-cursos.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7157&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":6976,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/6976.jpg"},"hasoffer":false,"name":"Mala","parentcategoryid":2468,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/mala.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=6976&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":10369,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/10369.jpg"},"hasoffer":true,"name":"Lâmpada para Projetor","parentcategoryid":2,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/lampada-para-projetor.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=10369&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":9825,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/9825.jpg"},"hasoffer":false,"name":"Carros","parentcategoryid":3841,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/carros.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findProductList/564771466d477a4458664d3d/br/?categoryId=9825&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":10586,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/10586.jpg"},"hasoffer":true,"name":"Outros Acessórios para Aparelhos Telefônicos","parentcategoryid":6420,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/outros-acessorios-para-aparelhos-telefonicos.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=10586&keyword=lg&format=json"}}],"isfinal":true}},{"subcategory":{"id":7444,"thumbnail":{"url":"http://imagem.buscape.com.br/bp5/categorias/7444.jpg"},"hasoffer":true,"name":"Tela de Projeção","parentcategoryid":1,"links":[{"link":{"type":"category","url":"http://compare.buscape.com.br/tela-de-projecao.html?mdapp=100&mddtn=69672797"}},{"link":{"type":"xml","url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?categoryId=7444&keyword=lg&format=json"}}],"isfinal":true}}],"totalresultsavailable":65,"totalresultsreturned":65}

Para converter os dados do retorno, vamos utilizar a classe JavaScriptSerializer presente no namespace System.Web.Script.Serialization do .NET, portanto não esqueçam de utilizar a diretiva using com esse namespace antes de iniciar.

Após instanciar um objeto da classe JavaScriptSerializer, vamos utilizar o método Deserialize<T>() para transformar o objeto JSON principal em um objeto do tipo Dictionary<string, object>. Depois vamos pegar o nó subcategory do JSON, indexando o objeto Dictionary criado.

JavaScriptSerializer deserializer = new JavaScriptSerializer();
Dictionary<string, object> data = deserializer.Deserialize<Dictionary<string, object>>(categoryList);
ArrayList subcategories = (ArrayList)data["subcategory"];

Como temos vários objetos JSON dentro de subcategory, ele nos retorna um tipo ArrayList com todas as categorias retornadas. Devemos, então, percorrer esse objeto para tratar cada atributo das categorias.

foreach (Dictionary<string, object> sub in subcategories)
{
// Aqui pegamos cada um dos atributos
}

A primeira coisa que vamos fazer é instanciar um objeto do tipo Dictionary<string, object> para receber os dados da categoria.

Dictionary<string, object> subData = (Dictionary<string, object>)sub["subcategory"];

A forma que acessamos os atributos do objeto convertido é indexanda ao objeto com o nome do atributo que desejamos – por exemplo para recuperar o nome da categoria usamos subData[“name”]. Simples, não?

Para não dizer que é tão simples assim, temos dois atributos que vamos ter um pouco mais de trabalho para recuperar seu valor: o thumbnail e a url. Para o thumbnail, com apenas mais um índice conseguimos seu valor. Já para a URL teremos algumas linhas a mais para conseguir:

// Recuperando o link para imagem da categoria
Dictionary<string, object> thumbnail = (Dictionary<string, object>)subData["thumbnail"];

// Recuperando a URL para os produtos da categoria
ArrayList links = (ArrayList)subData["links"];
Dictionary<string, object> productLink = (Dictionary<string, object>)links[1];
Dictionary<string, object> link = (Dictionary<string, object>)productLink["link"];

Pronto, com esses dois últimos atributos setados, podemos exibir os dados de retorno:

Response.Write(string.Format("<img src=\"{0}\" alt=\"{1}\" /> <br />", thumbnail["url"], subData["name"]));
Response.Write(string.Format("Categoria: {0} - {1} <br />", subData["id"], subData["name"]));
Response.Write(string.Format("Link para os produtos: <a href=\"{0}\">{0}</a> <br />", link["url"]));
Response.Write(string.Format("Tem Oferta: {0} - ID categoria pai: {1} - é final? {2} <br />", subData["hasoffer"], subData["parentcategoryid"], subData["isfinal"]));
Response.Write("<hr />");

É isso aí pessoal! Dessa forma, conseguimos trabalhar com o retorno em JSON da API do Buscapé utilizando somente as classes padrões do framework .NET, sem a necessidade de um componente extra. Abaixo, deixo o código completo utilizado neste artigo para não ficar nenhuma dúvida.

// Recuperando os dados em JSON
Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d", string.Empty, "BR", "json");
string categoryList = apiBuscape.FindCategoryList(null, "LG", string.Empty);

// Convert o JSON em uma coleção do tipo Dictionary e separa somente o nó subcategory em um array list
JavaScriptSerializer deserializer = new JavaScriptSerializer();
Dictionary<string, object> data = deserializer.Deserialize<Dictionary<string, object>>(categoryList);
ArrayList subcategories = (ArrayList)data["subcategory"];

foreach (Dictionary<string, object> sub in subcategories)
{
Dictionary<string, object> subData = (Dictionary<string, object>)sub["subcategory"];

// Recuperando o link para imagem da categoria
Dictionary<string, object> thumbnail = (Dictionary<string, object>)subData["thumbnail"];

// Recuperando a URL para os produtos da categoria
ArrayList links = (ArrayList)subData["links"];
Dictionary<string, object> productLink = (Dictionary<string, object>)links[1];
Dictionary<string, object> link = (Dictionary<string, object>)productLink["link"];

Response.Write(string.Format("<img src=\"{0}\" alt=\"{1}\" /> <br />", thumbnail["url"], subData["name"]));
Response.Write(string.Format("Categoria: {0} - {1} <br />", subData["id"], subData["name"]));
Response.Write(string.Format("Link para os produtos: <a href=\"{0}\">{0}</a> <br />", link["url"]));
Response.Write(string.Format("Tem Oferta: {0} - ID categoria pai: {1} - é final? {2}

Tags | , , , ,

28

mar
2012

Sem Comentários

Em Blog
NoSQL

Por Allison

Um olhar sobre alguns bancos de dados NoSQL

Em 28, mar 2012 | Sem Comentários | Em Blog, NoSQL | Por Allison

Fonte: Mikayel Vardanyan/IMasters

Texto original disponível em http://blog.monitis.com/index.php/2011/06/06/a-look-at-some-nosql-databases-mongodb-redis-and-basho-riak/

Em um artigo anterior, falei sobre o NoSQL e algumas ferramentas para serem usadas com ele. Neste artigo, daremos uma olhada no MongoDB, no Redis e no Riak.

O MongoDB combina o melhor dos armazenamentos chave-valor, documentos de bancos de dados, bancos de dados (ou database?) de objeto e sistemas de gerenciamento de bancos de dados relacionais (RDBMS). Isso significa que o MogoDB executa o sharding automaticamente (como com armazenamentos chave-valor), permite documentos de schema dinâmicos baseados em JSON, e oferece uma rica linguagem de query na forma de RDBMS. Além disso, o MongoDB oferece auto-sharding (o sharding de dados novos e pré-existentes é feito automaticamente) e um recurso de implementação MapReduce.

Dê uma olhada mais de perto no cluster MongoDB, e você verá que ele é feito de vários tipos de servidores:

  • Servidores shard que armazenam dados
  • Servidores de configuração que armazenam a configuração
  • Servidores router que recebem e roteiam as solicitações
  • Uma thread de servidor usando MapReduce

Alguns fatos adicionais sobre MongoDB: é uma ferramenta de armazenagem distribuída orientada a documentos e usa a linguagem de implementação C++. Com o progresso do schema, documentos do tipo JSON são armazenados, e schemas dinâmicos podem ser usados. Entre as companhias que usam o MongoDB encontramos: Shutterfly, Evite e The New York Times. Impressionante! Uma das coisas bacanas das quais gosto a respeito desse produto é a existência de uma interface web bastante boa, que permite testar o MongoDB em seu browser – mas usando uma shell JavaScript.

O Redis não é um simples armazenamento chave-valor, porque suporta uma variedade de valores em diferentes estruturas de dados, tais como listas e conjuntos de binary-safe strings, bem como conjuntos ordenados, que contêm uma pontuação de números float. No ano passado, o VMWare se tornou patrocinador do Redis.

Ele possui uma orientação chave-valor, e sua linguagem de implementação é ANSI C. Entretanto, o Redis não é distribuído. Sob seu schema, Redis oferece um armazenamento chave-valor, usando um nome-chave de servidor para armazenar e recuperar valores. Como MongoDB, o Redis tem uma lista impressionante de clientes – incluindo Python, Twisted Python e a nova linguagem do Google, Go. O Redis é open source, e há uma página muito bacana que oferece um tutorial Redis que permite experimentá-lo diretamente de seu browser usando JavaScript. Descubra-a em http://try.redis-db.com.

Riak é um banco de dados híbrido fabricado pela BashoTecnologies, mas é baseado no Amazon Dynamo. Funciona como um banco de dados (tradução de database?) orientado para documentos, e também com um armazenamento chave-valor distribuído. É tolerante a falhas e faz escalas linearmente. É direcionado para uso em aplicativos web. Como o Cassandra, não tem um controlador central, e assim não tem um ponto único de falhas.

O Riak é um armazenamento de chaves/valor plenamente distribuído, e implementa o MapReduce.

O design do Riak inclui três elementos básicos: buckets, chaves e valores. Os dados são organizados em buckets, que são pouco mais do que flat namespaces para agrupar logicamente pares chave/valor. Os buckets podem armazenar os dados diretamente ou através de links para outro bucket. Todos os nós no cluster têm o mesmo papel. O sharding de dados (existentes ou novos) é feito automaticamente entre os nós.

O Riak vem tanto em versão comercial quanto em versão open source. Roda em Unix, mas não em sistemas Windows. Ele é distribuído, um sistema tanto de documento quanto de armazenamento chave-valor, e sua linguagem de implementação é Erland, juntamente como alguma coisa de C e de JavaScript.

O Riak tem uma estrutura simples e não usa tipos de dados específicos. Os valores associados às chaves são objetos. O Riak interage com clientes via JSON sobre a interface HTTP; tem drivers para Erlang, Python, Java, PHP, JavaScript e Ruby; e, finalmente, uma interface de cliente que suporta o Protocol Buffers, do Google. A base de clientes do Riak inclui a Comcast.

Tags | , , , ,

27

mar
2012

Sem Comentários

Em Blog
SQL

Por Allison

SQL Server 2012: Grandes melhorias no T-SQL

Em 27, mar 2012 | Sem Comentários | Em Blog, SQL | Por Allison

Fonte: Jonathan Allen , traduzido por Mário Henrique/InfoQ

O dialeto SQL do SQL Server 2012, o Transact-SQL, vem com melhorias importantes, incluindo suporte para funções ANSI FIRST_VALUE e LAST_VALUE, paginação de resultados de alto nível usando FETCH e OFFSET e suporte a funções de parsing e de formatação do .NET.

Fetch e Offset

Atualmente, muitos desenvolvedores de SQL Server que desejam implementar paginação de resultados no lado do servidor precisam utilizar técnicas “imperativas” de programação, como carregar os resultados em uma tabela temporária, numerar as linhas e então selecionar o intervalo de interesse. Há também desenvolvedores que utilizam ROW NUMBER e OVER; outros utilizam cursores.

O SQL Server 2012 resolve essa limitação e permite mais consistência no uso, adicionando suporte declarativo para a paginação de resultados, através das novas opções OFFSET e FETCH NEXT do Transact-SQL. Mas note que atualmente não há otimização de performance; o SQL Server está fazendo a mesma coisa que os desenvolvedores fariam manualmente.

Clause Windowing

Às vezes, os desenvolvedores precisam escrever consultas que identificam diferenças entre linhas. Por exemplo, pode-se estar interessado na quantidade de tempo entre o timestamp de uma linha e outra. Isso é fácil de fazer utilizando cursores, mas o desempenho e elegância dessa solução deixam a desejar. É possível ainda utilizar uma subquery executada linha a linha, mas isso é extremamente custoso. Pode-se ainda implementar tudo no lado do cliente mas isso não funcionaria se o cliente for uma ferramenta de geração de relatórios, por exemplo.

No SQL Server 2012, agora é possível acessar diretamente a linha anterior utilizando a função LAG. O analisador de consultas SQL retém a linha anterior na memória, de forma que não há necessidade de uma subquery. Isso resulta em melhor desempenho. A função LAG aponta para a linha anterior, mas é possível utilizar um offset para ter acesso a linhas anteriores. A função LEAD é equivalente a LAG, mas trabalha com linhas posteriores à que está sendo lida. As funções LAG e LEAD, que são parte do padrão ANSI, eram um pedidas pelos desenvolvedores desde a implementação da sintaxe OVER no SQL Server 2005. As funções FIRST VALUE e LAST VALUE também estão disponíveis no SQL Server 2012.

Reflection

Anteriormente, para testar quais os resultados seriam retornados por stored procedures ou consultas SQL, utilizava-se o comando SET FMTONLY. Esse comando permitia aos desenvolvedores visualizar as colunas retornadas, sem a necessidade de executar uma consulta SQL. Mas a informação se limitava apenas às definições das colunas resultantes da execução da consulta.

Com a nova procedure sp describe first result set, os desenvolvedores podem obter informações detalhadas a respeito de quais resultados seriam retornados pela consulta. Essas informações incluem tipos de dados, tabelas ou colunas-fonte e outras informações importantes, também disponíveis nas telas de gerenciamento dinâmico, sys.dm exec describe first result e sys.dm exec describe first result set.

Código Defensivo

Tradicionalmente, os desenvolvedores ficam à mercê de seus colegas quando utilizam stored procedures. Sem garantias em relação ao que será retornado, falhas acidentais se tornam uma preocupação. O T-SQL não oferece formas de prevenir esses erros, mas é possível minimizá-los utilizando a opção RESULT SETS.

Quando usada, a opção RESULT SETS faz com que a procedure armazenada retorne uma estrutura específica de dados. Se os resultados da procedure forem diferentes do requisitado, a opção retorna um erro. Considerando que se trata de um erro em tempo de de execução, recomenda-se aos desenvolvedores que utilizarem essa opção se assegurem de que os erros sejam depurados antes do código ir para produção.

Tratamento de Erros

O T-SQL tem suporte para TRY-CATCH desde 2005, porém o suporte THROW não existia até agora. Sem argumentos, THROW funciona da mesma maneira que em C# ou VB. Isto é, THROW retorna uma exceção e mantém o log de informação capturada sobre o erro, o que é muito útil.

Quando utilizada com argumentos, THROW é similar à RAISERROR, exceto por não suportar números de erros em sys.messages e a severidade é sempre 16. Além disso, os erros não detectados por THROW sempre terminam a execução.

Parsing e Conversões

O T-SQL agora suporta a função PARSE que inclui a opção de especificar uma “culture”. Esta deve contar com suporte pelo framework .NET. Há também uma nova função TRY_CONVERT que, assim como TRY_PARSE, retorna null quando a conversão falha. Já a função FORMAT utiliza a formatação de strings do .NET. Apesar de mais lenta que as funções nativas como STR, é mais flexível.

Funções de Data e Hora

O processamento de data e hora no T-SQL recebeu melhorias. A função EOMONTH retorna o último dia do mês, dado importante para relatórios. As funções xxxFROMPARTS permitem construir valores de data/hora utilizando um conjunto de parâmetro em vez de apenas uma string. Há suporte para os tipos de dados Date, DateTime, DateTime2, DateTimeOffset, SmallDate e Time.

Outras funções

A função Choose do Access e Visual Basic agora está presente no T-SQL. Sob determinadas circunstâncias, pode ser utilizada como uma versão simplificada de CASE. Também está presente a função IIF.

A função CONCAT pode ser utilizada para concatenar strings. Além de tornar mais fácil a portabilidade de código de outras linguagens, essa função possui um tratamento de exceção diferente do operador +. Itzik Ben-Gan escreve:

O operador + de concatenação devolve NULL para inputs NULL. A função CONCAT converte inputs NULL em strings vazias antes da concatenação. Embora esta não seja uma boa solução, é possível fazer a mesma coisa utilizando a função COLAESCE, substituindo entradas NULL por strings vazias.

Tags | , , , ,

19

mar
2012

Sem Comentários

Em Blog
SQL

Por Allison

Microsoft disponibiliza SQL Server 2012 RC0

Em 19, mar 2012 | Sem Comentários | Em Blog, SQL | Por Allison

Com informações de Porta 25

Fonte: IMasters

A Microsoft disponibilizou o SQL Server 2012 RC0, que já pode ser baixado no site oficial do SQL Server 2012. A liberação ocorreu cinco meses depois do TechEd 2011, quando a empresa convidou desenvolvedores e profissionais de TI a fazerem o download do CTP3 do SQL Server 2012, de codinome Denali.

O SQL Server 2012 viabiliza uma plataforma de informação pronta para a nuvem, capaz de ajudar as organizações a tirar melhor proveito de informações extraídas de dados estruturados, não-estruturados e de fontes de dados em cloud gerenciadas por um serviço de BI gerenciado pelo próprio usuário.

Além disso, ele traz novas ferramentas para desenvolvedores, recursos para otimização do seu uso em cloud pública ou privada, novos recursos de relatórios, melhorias nas ferramentas de integração de dados com qualquer tipo de fonte para análises de business intelligence, entre outras novidades.

A versão final do produto será lançada ainda neste semestre, e a Microsoft realiza um evento online no dia 7 de março para detalhar melhor as inovações do lançamento.

Tags | , , ,