O documento descreve um projeto para analisar e modelar os dados da Open Library usando MongoDB. Ele discute a conversão e importação dos dados, análise com o framework de agregação e Map/Reduce, e refatoração do modelo de dados para MongoDB.
Apresentação realizada no dia 8/11/2014 no evento TchêLinux Bento Gonçalves edição 2014 - http://bento.tchelinux.org
Falei sobre os conceitos de bases de dados NoSQL, cases, comparações com o modelo relacional, expressões SQL x MongoDB (orientado à documentos), instalação, recursos do MongoDB, operações via console, modelagem (abordagem embedded), driver PHP, anatomia do código PHP, CRUD (Create, Read, Update and Delete), ObjectId, operadores, segurança, persistência de objetos, tratamento de arrays (documentos aninhados), índices (performance), projeção, agregação, hospedagem, ferramentas de administração e programa de certificação.
O documento apresenta uma introdução ao banco de dados MongoDB, descrevendo-o como um banco de dados não relacional orientado a documentos, de alto desempenho, flexível e open source. Também discute porque Python e Django são boas opções para trabalhar com MongoDB, demonstrando alguns de seus recursos como modelagem de documentos, agregações e map reduce.
1) O documento apresenta uma introdução sobre MongoDB com PHP, incluindo links relevantes e casos de uso de empresas que utilizam MongoDB em produção.
2) É descrito os principais tipos de bancos de dados NoSQL (key-value stores, wide column stores, document stores, graph stores e column oriented stores), com exemplos de cada um.
3) São apresentados comandos e conceitos básicos para trabalhar com MongoDB via PHP, como conexão, inserção, consulta, alteração e exclusão de dados.
O documento resume as principais informações sobre MongoDB: (1) Sua origem vem da palavra "humongous"; (2) Foi criado pelos fundadores da Doubleclick e a 10gen foi fundada em 2007; (3) MongoDB pode substituir bancos relacionais em alguns casos quando há necessidade de escalabilidade e desempenho.
O documento fornece uma introdução sobre MongoDB, incluindo como instalá-lo, os principais conceitos como coleções e documentos, e comandos básicos como inserir, buscar e atualizar documentos.
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
Christiano Anderson apresenta MongoDB, um banco de dados não relacional e orientado a documentos. Ele discute as características e vantagens do MongoDB como alta performance, ser open source e schema free. Exemplos mostram como utilizar MongoDB com linguagens como Python.
Este documento resume um slideshow sobre recomendadores. Discute o uso de computação distribuída e frameworks como Hadoop e MapReduce para processar grandes quantidades de dados. Também aborda a biblioteca Mahout para algoritmos de aprendizado de máquina e como gerar recomendações com base em uma matriz de co-ocorrência.
Apresentação realizada no dia 8/11/2014 no evento TchêLinux Bento Gonçalves edição 2014 - http://bento.tchelinux.org
Falei sobre os conceitos de bases de dados NoSQL, cases, comparações com o modelo relacional, expressões SQL x MongoDB (orientado à documentos), instalação, recursos do MongoDB, operações via console, modelagem (abordagem embedded), driver PHP, anatomia do código PHP, CRUD (Create, Read, Update and Delete), ObjectId, operadores, segurança, persistência de objetos, tratamento de arrays (documentos aninhados), índices (performance), projeção, agregação, hospedagem, ferramentas de administração e programa de certificação.
O documento apresenta uma introdução ao banco de dados MongoDB, descrevendo-o como um banco de dados não relacional orientado a documentos, de alto desempenho, flexível e open source. Também discute porque Python e Django são boas opções para trabalhar com MongoDB, demonstrando alguns de seus recursos como modelagem de documentos, agregações e map reduce.
1) O documento apresenta uma introdução sobre MongoDB com PHP, incluindo links relevantes e casos de uso de empresas que utilizam MongoDB em produção.
2) É descrito os principais tipos de bancos de dados NoSQL (key-value stores, wide column stores, document stores, graph stores e column oriented stores), com exemplos de cada um.
3) São apresentados comandos e conceitos básicos para trabalhar com MongoDB via PHP, como conexão, inserção, consulta, alteração e exclusão de dados.
O documento resume as principais informações sobre MongoDB: (1) Sua origem vem da palavra "humongous"; (2) Foi criado pelos fundadores da Doubleclick e a 10gen foi fundada em 2007; (3) MongoDB pode substituir bancos relacionais em alguns casos quando há necessidade de escalabilidade e desempenho.
O documento fornece uma introdução sobre MongoDB, incluindo como instalá-lo, os principais conceitos como coleções e documentos, e comandos básicos como inserir, buscar e atualizar documentos.
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
Christiano Anderson apresenta MongoDB, um banco de dados não relacional e orientado a documentos. Ele discute as características e vantagens do MongoDB como alta performance, ser open source e schema free. Exemplos mostram como utilizar MongoDB com linguagens como Python.
Este documento resume um slideshow sobre recomendadores. Discute o uso de computação distribuída e frameworks como Hadoop e MapReduce para processar grandes quantidades de dados. Também aborda a biblioteca Mahout para algoritmos de aprendizado de máquina e como gerar recomendações com base em uma matriz de co-ocorrência.
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
Apresentação sobre MongoDB, seus recursos, exemplos de uso e um comparativo de performance. Apresenta modelos e comandos básicos, porém úteis, comparando-os com comandos de bancos de dados relacionais, trazendo um comparativo básico de desempenho.
O documento discute a integração do MongoDB com PHP. Ele explica como instalar o driver MongoDB para PHP em diferentes sistemas operacionais e como realizar operações básicas como conexão, seleção de banco de dados e coleção, inserção e busca de dados. Também apresenta alguns frameworks PHP que oferecem suporte nativo ao MongoDB.
Este documento fornece uma introdução a bancos de dados NoSQL e ao MongoDB. Ele discute as limitações dos bancos de dados relacionais SQL, as características e tipos de bancos de dados NoSQL, e fornece detalhes sobre como instalar e usar o MongoDB, incluindo como criar bancos de dados, coleções e documentos, e executar consultas e operações.
O documento discute o movimento NoSQL e bancos de dados orientados a documentos. Ele resume brevemente a história dos bancos de dados, caracteriza o movimento NoSQL e seus modelos de dados, como chave-valor, grafos, documentos e colunas. Explica conceitos-chave como escalabilidade, persistência e distribuição em bancos NoSQL. Por fim, faz uma análise comparativa entre bancos de dados relacionais e não relacionais, com foco no CouchDB como exemplo de banco orientado a documentos.
Modelando aplicação em documento - MongoDBThiago Avelino
O documento resume as principais características e funcionalidades do banco de dados MongoDB. Ele descreve como o MongoDB é um banco de dados não relacional orientado a documentos, de alto desempenho, escalável e com esquema aberto. Também lista alguns usuários notáveis e casos de uso comuns.
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo:
1) Objetos Python possuem atributos (dados) e métodos (comportamentos);
2) Classes definem tipos de objetos com atributos e métodos comuns;
3) Instâncias de classes são objetos concretos que herdam atributos e métodos da classe.
O documento descreve as etapas de desenvolvimento de uma classe em Python para representar itens de pedidos, com o objetivo de controlar o acesso aos atributos das instâncias de forma a garantir a integridade dos dados. Inicialmente é implementada uma classe simples, porém com acesso irrestrito aos atributos (➊). Posteriormente são acrescentadas propriedades para validar os valores atribuídos (➋) e descritores de classe para reutilizar a lógica de validação (➌). Por fim, são definidos nomes descritivos para
O documento discute a evolução e o potencial de JavaScript como linguagem séria para desenvolvimento. Apresenta o histórico da linguagem, suas características como tipagem fraca e funções de primeira classe, e novos usos em aplicações web, mobile e servidores como Node.js.
Este documento discute as aplicações de wikis em empresas. Apresenta as cinco leis da gestão de conteúdo e explica o funcionamento de wikis, dando exemplos como a Wikipédia. Também aborda aspectos como interatividade, revisão, inteligência coletiva e como wikis podem melhorar a troca de conhecimento em empresas.
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
O documento discute as vantagens de bancos NoSQL em relação a bancos de dados relacionais tradicionais para armazenar grandes quantidades de dados. O autor apresenta exemplos de bancos NoSQL como MongoDB, orientado a documentos, e Riak, baseado em chave-valor, e discute como cada um pode ser usado para diferentes casos. O autor também fornece exemplos de código para inserir e consultar dados nesses bancos usando Python.
O documento apresenta Christiano Anderson, um especialista em MongoDB. Ele descreve o que é MongoDB, como é usado por empresas, as linguagens de programação suportadas, e como trabalhar com MongoDB usando Python e Django.
Este documento apresenta uma introdução ao MongoDB, incluindo: (1) o que é NoSQL e MongoDB, (2) tipos de dados NoSQL, (3) modelagem de dados no MongoDB, (4) operações CRUD e (5) operadores lógicos. O documento também fornece instruções sobre como inicializar e usar o MongoDB.
O documento apresenta uma palestra sobre NoSQL e bancos de dados não relacionais. Em três frases: (1) Discutiu os tipos de bancos NoSQL orientados a documentos, grafos e chave-valor; (2) Explicou como o MongoDB pode ser usado para substituir ou trabalhar com bancos relacionais; (3) Apresentou exemplos de desenvolvimento com MongoDB e Riak usando a linguagem Python.
O documento resume as principais características e funcionalidades do MongoDB, um banco de dados não relacional, e como utilizá-lo junto com a linguagem Python. O documento discute como modelar e realizar consultas de dados no MongoDB usando Python e módulos como PyMongo e MongoEngine.
O documento apresenta um manual prático sobre PostgreSQL, abordando tópicos como instalação, modelagem de dados, linguagens SQL e PL/pgSQL, administração e ferramentas. O PostgreSQL é introduzido como um SGBD objeto-relacional de código aberto que oferece recursos como transações, views, triggers e suporte a várias linguagens de programação. O autor também resume a história e evolução do PostgreSQL desde seu desenvolvimento na década de 1980.
O documento discute o projeto Sloan Digital Sky Survey (SDSS), que mapeia o céu e mede distâncias e propriedades de objetos celestes. Os dados do SDSS precisam ser processados rapidamente usando Big Data para direcionar telescópios. O framework Hive é usado para armazenar e analisar os dados do SDSS usando a linguagem HiveQL.
O documento discute bancos de dados NoSQL, que são bancos de dados não-relacionais que rompem com propriedades ACID dos bancos de dados relacionais. Apresenta os principais tipos de bancos NoSQL orientados a documentos, chave-valor, clones do BigTable do Google e orientados a grafos, além de produtos populares como CouchDB, MongoDB, Cassandra e Redis.
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
Apresentação sobre MongoDB, seus recursos, exemplos de uso e um comparativo de performance. Apresenta modelos e comandos básicos, porém úteis, comparando-os com comandos de bancos de dados relacionais, trazendo um comparativo básico de desempenho.
O documento discute a integração do MongoDB com PHP. Ele explica como instalar o driver MongoDB para PHP em diferentes sistemas operacionais e como realizar operações básicas como conexão, seleção de banco de dados e coleção, inserção e busca de dados. Também apresenta alguns frameworks PHP que oferecem suporte nativo ao MongoDB.
Este documento fornece uma introdução a bancos de dados NoSQL e ao MongoDB. Ele discute as limitações dos bancos de dados relacionais SQL, as características e tipos de bancos de dados NoSQL, e fornece detalhes sobre como instalar e usar o MongoDB, incluindo como criar bancos de dados, coleções e documentos, e executar consultas e operações.
O documento discute o movimento NoSQL e bancos de dados orientados a documentos. Ele resume brevemente a história dos bancos de dados, caracteriza o movimento NoSQL e seus modelos de dados, como chave-valor, grafos, documentos e colunas. Explica conceitos-chave como escalabilidade, persistência e distribuição em bancos NoSQL. Por fim, faz uma análise comparativa entre bancos de dados relacionais e não relacionais, com foco no CouchDB como exemplo de banco orientado a documentos.
Modelando aplicação em documento - MongoDBThiago Avelino
O documento resume as principais características e funcionalidades do banco de dados MongoDB. Ele descreve como o MongoDB é um banco de dados não relacional orientado a documentos, de alto desempenho, escalável e com esquema aberto. Também lista alguns usuários notáveis e casos de uso comuns.
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo:
1) Objetos Python possuem atributos (dados) e métodos (comportamentos);
2) Classes definem tipos de objetos com atributos e métodos comuns;
3) Instâncias de classes são objetos concretos que herdam atributos e métodos da classe.
O documento descreve as etapas de desenvolvimento de uma classe em Python para representar itens de pedidos, com o objetivo de controlar o acesso aos atributos das instâncias de forma a garantir a integridade dos dados. Inicialmente é implementada uma classe simples, porém com acesso irrestrito aos atributos (➊). Posteriormente são acrescentadas propriedades para validar os valores atribuídos (➋) e descritores de classe para reutilizar a lógica de validação (➌). Por fim, são definidos nomes descritivos para
O documento discute a evolução e o potencial de JavaScript como linguagem séria para desenvolvimento. Apresenta o histórico da linguagem, suas características como tipagem fraca e funções de primeira classe, e novos usos em aplicações web, mobile e servidores como Node.js.
Este documento discute as aplicações de wikis em empresas. Apresenta as cinco leis da gestão de conteúdo e explica o funcionamento de wikis, dando exemplos como a Wikipédia. Também aborda aspectos como interatividade, revisão, inteligência coletiva e como wikis podem melhorar a troca de conhecimento em empresas.
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
O documento discute as vantagens de bancos NoSQL em relação a bancos de dados relacionais tradicionais para armazenar grandes quantidades de dados. O autor apresenta exemplos de bancos NoSQL como MongoDB, orientado a documentos, e Riak, baseado em chave-valor, e discute como cada um pode ser usado para diferentes casos. O autor também fornece exemplos de código para inserir e consultar dados nesses bancos usando Python.
O documento apresenta Christiano Anderson, um especialista em MongoDB. Ele descreve o que é MongoDB, como é usado por empresas, as linguagens de programação suportadas, e como trabalhar com MongoDB usando Python e Django.
Este documento apresenta uma introdução ao MongoDB, incluindo: (1) o que é NoSQL e MongoDB, (2) tipos de dados NoSQL, (3) modelagem de dados no MongoDB, (4) operações CRUD e (5) operadores lógicos. O documento também fornece instruções sobre como inicializar e usar o MongoDB.
O documento apresenta uma palestra sobre NoSQL e bancos de dados não relacionais. Em três frases: (1) Discutiu os tipos de bancos NoSQL orientados a documentos, grafos e chave-valor; (2) Explicou como o MongoDB pode ser usado para substituir ou trabalhar com bancos relacionais; (3) Apresentou exemplos de desenvolvimento com MongoDB e Riak usando a linguagem Python.
O documento resume as principais características e funcionalidades do MongoDB, um banco de dados não relacional, e como utilizá-lo junto com a linguagem Python. O documento discute como modelar e realizar consultas de dados no MongoDB usando Python e módulos como PyMongo e MongoEngine.
O documento apresenta um manual prático sobre PostgreSQL, abordando tópicos como instalação, modelagem de dados, linguagens SQL e PL/pgSQL, administração e ferramentas. O PostgreSQL é introduzido como um SGBD objeto-relacional de código aberto que oferece recursos como transações, views, triggers e suporte a várias linguagens de programação. O autor também resume a história e evolução do PostgreSQL desde seu desenvolvimento na década de 1980.
O documento discute o projeto Sloan Digital Sky Survey (SDSS), que mapeia o céu e mede distâncias e propriedades de objetos celestes. Os dados do SDSS precisam ser processados rapidamente usando Big Data para direcionar telescópios. O framework Hive é usado para armazenar e analisar os dados do SDSS usando a linguagem HiveQL.
O documento discute bancos de dados NoSQL, que são bancos de dados não-relacionais que rompem com propriedades ACID dos bancos de dados relacionais. Apresenta os principais tipos de bancos NoSQL orientados a documentos, chave-valor, clones do BigTable do Google e orientados a grafos, além de produtos populares como CouchDB, MongoDB, Cassandra e Redis.
1) O documento apresenta um workshop sobre MongoDB, um banco de dados não-relacional, discutindo seus principais recursos e como implementá-lo;
2) MongoDB armazena dados em formato de documentos JSON e é uma alternativa ao MySQL para casos que demandem alta performance, escalabilidade e flexibilidade de esquema;
3) O documento mostra como modelar dados, fazer operações básicas e implementar um sistema de blog usando MongoDB e PHP.
Rogério Fontes apresenta sobre MongoDB, incluindo: (1) Quem é Rogério Fontes e suas experiências com desenvolvimento de código; (2) Uma introdução ao MongoDB, comparando-o com bancos de dados relacionais e discutindo onde e como usá-lo; (3) Demonstração prática do uso de comandos básicos do MongoDB.
O documento apresenta MongoDB, seu modelo de dados, o Aggregation Framework e como ele pode ser usado para agregar e resumir dados armazenados no banco de dados de forma flexível e eficiente. O documento também discute replicasets e sharding para disponibilidade e escalabilidade.
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
O documento resume as principais características e conceitos da linguagem de programação Ruby e do framework web Ruby on Rails. Foi lançado em 1995 e projetado para tornar os programadores felizes, com sintaxe enxuta e tudo como objeto. Rails facilita o desenvolvimento web ágil com convenções sobre configuração, DRY e simplicidade.
MongoDB é um banco de dados NoSQL baseado em documentos, sem esquema, escalável e lançado como open source em 2009. Ele armazena dados em formato JSON em coleções e é usado por muitas empresas. Java pode se conectar ao MongoDB usando o driver oficial ou bibliotecas como Morphia e Spring Data para trabalhar com documentos em vez de tabelas relacionais.
O documento apresenta uma introdução ao banco de dados MongoDB, descrevendo suas principais características como armazenamento de documentos JSON, consulta por documento, particionamento em shards e suporte a operações MapReduce.
Fazendo barba, cabelo e bigode com REDISArrayOf.io
REDIS é um poderoso "storage in-memory" que pode ser utilizado em diversas situações. O benefício mais evidente é o de liberar o banco de dados principal.
Nesta apresentação vemos três casos de uso:
- Cacheamento Lado Servidor
- Mensageria entre processos
- Dashboard em tempo real
O vídeo da apresentação está em: https://youtu.be/iyAoKLw1HbY
Quer aprender tudo sobre REDIS? Acesse nosso site: https://arrayof.io
1) O documento apresenta uma proposta de arquitetura para sistemas multiagentes baseados em ontologias, abordando questões de persistência e acesso concorrente às bases de conhecimento.
2) A arquitetura inclui um Agente Bibliotecário responsável por persistir as ontologias de forma centralizada e distribuir atualizações para as cópias locais mantidas pelos demais agentes.
3) A implementação do protótipo utilizou o framework DiSEN Agency e o triple store Jena TDB para avaliar a viabilidade da proposta.
Ruby on Rails + MongoDB - GURU SorocabaLucas Renan
O documento discute as ferramentas Ruby on Rails, MongoDB, Mongoid e Dragonfly para desenvolvimento web com banco de dados NoSQL. Explica brevemente como MongoDB armazena e consulta dados de forma flexível e como Rails e Mongoid facilitam a integração com bancos NoSQL.
Este documento discute a implementação de acesso a múltiplos bancos de dados no Django 1.1. O autor apresenta uma solução que estende as classes existentes no Django para permitir que modelos acessem mais de um banco de dados, permitindo consultas em bancos legados. Ele demonstra como configurar e usar a extensão e discute limitações e melhorias futuras.
Este documento apresenta uma palestra sobre a linguagem de programação Python. As principais ideias apresentadas são:
1) Python é uma linguagem de uso geral amplamente utilizada em diversas áreas como internet, computação gráfica, desktop, operações de empresas e computação científica.
2) Existem diversas implementações de Python como CPython, Jython, IronPython e PyPy. CPython é a implementação principal escrita em C.
3) Python tem evoluído gradualmente ao longo dos anos com novas versões lançadas a cada alguns anos que trazem melhor
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
O documento apresenta três partes principais:
1) A primeira parte introduz o uso de atributos protegidos em Python para validar valores de atributos de objetos, mantendo a interface de programação existente.
2) A segunda parte mostra como implementar propriedades em Python para realizar validações nos valores de atributos, preservando a lógica de negócio.
3) A terceira parte demonstra como usar descritores em Python para gerenciar o acesso a atributos, permitindo a reutilização da lógica de validação entre diferentes atributos
O documento discute iteração em diferentes linguagens de programação como C, Java e Python. Ele apresenta exemplos de como iterar sobre argumentos da linha de comando, strings e outros iteráveis em cada linguagem. O documento também explica conceitos-chave relacionados à iteração em Python como iteráveis, iteradores, geradores e o uso do método enumerate().
O documento descreve o Arduino, uma plataforma de hardware livre para computação física. Ele discute como o Arduino permite "hardware hacking" para todos através de pinos genéricos, microcontroladores baratos e código aberto. Também apresenta exemplos de uso do Arduino na educação e projetos, assim como o Coding Dojo, um treino de programação coletivo e divertido usando o Arduino.
O documento discute iteráveis, geradores e iteração em Python. Em três frases:
1) Iteráveis são objetos que podem ser iterados, como listas, strings e arquivos.
2) Geradores são funções e expressões que produzem iteráveis sem necessariamente acessar uma coleção externa, podendo gerar itens por conta própria.
3) O documento compara iteração em Python, C e Java e mostra exemplos de uso de iteráveis, geradores, compreensões de lista/conjunto/dicionário e módulo itertools
Coding Dojo é um treino coletivo de programação onde duplas se alternam resolvendo problemas usando Test Driven Development (TDD) e passos pequenos. O processo envolve escrever testes antes de implementar novas funcionalidades e só avançar quando os testes são aprovados, enquanto a platéia não pode se manifestar exceto quando solicitada. O objetivo é treinar boas práticas de programação e aprender novas habilidades de forma divertida e eficiente.
O documento descreve um treinamento de programação chamado Coding Dojo com Arduino, no qual participantes trabalham em duplas para resolver problemas de programação usando testes guiados (TDD) e pequenos passos incrementais (baby steps). O objetivo é praticar boas técnicas de programação ao mesmo tempo em que se aprende novas linguagens. O problema proposto para o exercício é fazer uma animação com LEDs em um display de 7 segmentos controlada por um potenciômetro.
Este documento fornece um resumo de uma palestra sobre iteráveis, geradores e interfaces em Python. O palestrante discute:
1) Como iterar sobre diferentes tipos de objetos em Python usando laços for;
2) A diferença entre iteradores e geradores;
3) Como criar objetos iteráveis e iteradores em Python usando interfaces como Iterable e protocolos como sequência.
O documento apresenta exemplos de como usar a linguagem Python para desenvolvimento de aplicações Java EE, incluindo um relógio em Swing e acesso a atributos privados de objetos Java usando reflexão.
Este documento apresenta uma introdução à orientação a objetos em Python. Resume os principais tópicos abordados:
1) Python suporta herança múltipla, sobrecarga de operadores e tipagem dinâmica, mas não obriga a criação de classes;
2) Em Python, tudo é objeto e variáveis podem ser associadas a objetos de qualquer tipo em tempo de execução (tipagem dinâmica forte);
3) Classes devem herdar de object e métodos devem declarar self como primeiro parâmetro; propriedades permitem encaps
O documento discute ensinar programação orientada a objetos com Python usando frameworks como Django e PyGame. Ele apresenta exemplos de sistemas que podem ser desenvolvidos com essas bibliotecas, como um sistema de entrega de pizza usando Django. Além disso, defende que jogos são um bom contexto para aprender programação orientada a objetos e recomenda o livro "Game Programming" para esse fim.
Alex Martelli's 45' talk about Design Patterns translated to Brazilian Portuguese under permission from the author.
PT-BR:
A palestra de 45 min sobre Padrões de Projeto do Alex Martelli traduzida para o português do Brasil, com a permissão do autor.
DSpace é um software de código aberto que permite compartilhar conteúdo digital entre instituições, como livros, teses, fotos e filmes, por meio da criação de repositórios institucionais onde os recursos são organizados em comunidades e coleções e disponibilizados online de forma aberta.
Luciano Ramalho apresenta sobre a evolução do JavaScript, incluindo seu uso fora do navegador com Node.js e como as funções de primeira classe e de ordem superior ampliaram suas capacidades. A tipagem dinâmica e fraca causou problemas no passado, mas boas práticas como o uso de === ajudam. Frameworks modernos como jQuery também aproveitam recursos como expressões de função.
Luciano Ramalho apresenta uma introdução sobre JavaScript, destacando que: (1) o nome é um equívoco de marketing que dificultou a compreensão da linguagem; (2) há uma distinção entre JavaScript e ECMAScript, sendo este o padrão definido pela norma; (3) a pragmática moderna, como uso de frameworks, mudou a percepção sobre a linguagem.
O documento discute a aplicação de wikis em empresas, apresentando os princípios das 5 leis da gestão de conteúdo e descrevendo as características e funcionalidades básicas de wikis, como sua edição colaborativa e hipertextual.
Porque bibliotecários usam bancos de dados esquisitosLuciano Ramalho
Este documento descreve a migração de bases de dados bibliográficas do sistema ISIS para bancos de dados não relacionais, analisando as vantagens do modelo de dados semiestruturado e selecionando o Apache CouchDB como sistema alvo por oferecer replicação distribuída e instalação simples, adequado para bases públicas.
The document describes different methods for I Ching divination, including yarrow stalks and coins. It then introduces a binary divination method using a single coin flipped 4 times to generate numbers from 1 to 16 corresponding to hexagrams, in a way that replicates the probabilities of yarrow stalk divination. The binary method associates coin flip sequences like 0110 with hexagram 6 to aid memorization.
1. Luciano Ramalho
luciano@ramalho.org
@ramalhoorg
Open Library no MongoDB
Usando Map/Reduce e o Aggregation Framework
para análise e modelagem de dados
Tuesday, July 17, 12
2. Temas
• Sobre o projeto Open Library
• Conversão e importação da massa de dados
• Análise dos dados com o framework de agregação
• Análise dos dados com Map
/Reduce
• Refatoração do modelo de dados para o
MongoDB
• Encerramento
@ramalhoorg
Tuesday, July 17, 12
3. Sobre o projeto
Open Library
@ramalhoorg
Tuesday, July 17, 12
4. Sobre a Open Library
• Missão:
“One web page for every book”
• Um projeto do Internet Archive
• 117.439.126 registros bibliográficos em jun/2012
• Mais de 1.000.000 de e-books gratuitos para
baixar (livres, CC, domínio público etc.)
@ramalhoorg
Tuesday, July 17, 12
5. A Tecnologia da
Open Library
• Infobase: uma API Python para bases de dados
semi-estruturadas sobre tabelas normalizadas
• também conhecida como ThingDB
• Inclui versionamento de registros
• Muitos join para recuperar uma entidade conceitual
• Fortemente depenente do SOLR/Lucene para
exibir suas páginas
@ramalhoorg
Tuesday, July 17, 12
6. Modelo de dados
semi-estruturado
• Base teórica existe!
• Palavras-chave para pesquisa:
semistructured ou semi-structured database
“The semistructured data model is designed as an
evolution of the relational data model that allows the
representation of data with a flexible structure. ”
SUCIU, Dan. SemiStructured Data Model.
In: LIU, L. Encyclopedia of Database Systems
@ramalhoorg
Tuesday, July 17, 12
7. Data on the
Web (1999)
• From Relations to
Semistructured Data
and XML
• Autores: Abiteboul,
Buneman & Suciu
• Notação apresentada:
semelhante a JSON
@ramalhoorg
Tuesday, July 17, 12
8. Semistructured
Database Design
(2004)
• Autores: Ling, Lee & Dobbie
• Algoritmos de normalização
sem a 1ª Forma Normal
(N1NF = Non First Normal
Form)
@ramalhoorg
Tuesday, July 17, 12
9. Conversão e
importação da
massa de dados
@ramalhoorg
Tuesday, July 17, 12
10. Massa de dados
• OL Complete Dump: ol_cdump_latest.txt.gz*
• 118.598.056 linhas em 1/jun/2012
• 16 GB comprimidos (.gz), 91 GB sem compressão
• 32 tipos diferentes de registros
• 1.158.930 (~1%) não são registros bibliográficos
• Inclui todas as revisões de todos os registros
* http://openlibrary.org/developers/dumps
@ramalhoorg
Tuesday, July 17, 12
11. Converter para carregar
• Escolha de uma chave primária (campo _id)
• Chave composta: key+"-"+revision
• /books/OL1656964M-1
• Opção adotada: a conversão mais simples possível
• Usar JSON do dump, acrescido de campo _id
@ramalhoorg
Tuesday, July 17, 12
12. Carga: conversor_ol.py
import sys
import json
import io
def conv_linha(lin, indent=None):
rec_type, rec_key, rec_revision, rec_modified, rec_json = lin.split(u't')
rec = json.loads(rec_json)
rec[u'_id'] = rec_key + u'-' + rec_revision
return json.dumps(rec, indent=indent)
def conv_arquivo(nome_arq, max_lin=sys.maxsize, indent=None):
with io.open(nome_arq, encoding='utf-8') as arq:
for num_lin, lin in enumerate(arq, 1):
if not lin.strip():
continue
saida = conv_linha(lin, indent)
print saida.encode('utf-8')
if num_lin >= max_lin:
break
if __name__=='__main__':
if len(sys.argv) == 2:
converte_arquivo(sys.argv[1])
else:
print 'Modo de usar: %s <ol_dump_file>' % __name__
* https://github.com/ramalho/mongosp
@ramalhoorg
Tuesday, July 17, 12
13. Usando mongoimport
python conversor_ol.py $1 |
mongoimport -d openlibrary -c complete --stopOnError
• -d: database
• -c: collection
• --stopOnError: interromper se houver erro
• --upsert: sobrescrever ao importar _id duplicado
(default: ignorar o novo registro)
• --file: arquivo a inserir (default: stdin)
@ramalhoorg
Tuesday, July 17, 12
14. Análise dos dados usando
o framework de agregação
@ramalhoorg
Tuesday, July 17, 12
15. Indexação para análise
• Criar índices esparsos para:
• key
• revision
• type
• outros...
@ramalhoorg
Tuesday, July 17, 12
16. Aggregation Framework:
o básico
• Novidade no MongoDB 2.1/2.2
• Alternativa ao Map/Reduce
• Mais fácil de usar
• Melhor desempenho
• implementado em C++, usa threads
(Map/Reduce depende do interpretador
JavaScript Spidermonkey, mono-thread)
@ramalhoorg
Tuesday, July 17, 12
18. Exemplo: group_types.js
$ time mongo2.1
• O primeiro lote
group_types.js
MongoDB shell version: 2.1.2
de 1.000.000 de connecting to: test
605781! /type/edition
registros tem 9 382428! /type/author
tipos diferentes 9211!/type/work
1935!/type/redirect
• Os três primeiros 623! /type/delete
7! /type/template
são os mais 7! /type/page
importantes: 5! /type/doc
edition, author, 3! /type/macro
work real!0m23.658s
user!0m0.030s
sys! 0m0.004s @ramalhoorg
Tuesday, July 17, 12
19. Agregação em estágios
• Estágios: etapas em um fluxo (steps in a pipeline)
• Estágios são executados em ordem, na ordem dos
parâmetros da invocação de mapReduce
• Cada estágio aplica um operador especial
• O mesmo operador pode ser usado várias vezes
em estágios diferentes
@ramalhoorg
Tuesday, July 17, 12
23. O que não dá para fazer
(atualmente)
• Conjunto limitado de operadores
• Para lidar com strings, por exemplo:
• $substr, $toLower, $toUpper, $strcasecmp
• não tem length, regex, startswith, etc.
• O framework foi feito para ser extensível
• Mas não tem uma arquitetura de plug-ins
@ramalhoorg
Tuesday, July 17, 12
25. O problema do
“schema after”
• Conceito: “schema before” x “schema after”
• Michael Stonebraker (criou Ingres,VoltDB etc):
• MongoDB é “schema after”
• Em uma base “schema after” em produção, o
esquema real quase nunca é exatamente o
planejado
@ramalhoorg
Tuesday, July 17, 12
26. Análise profunda
dos dados
• Estatísticas sobre a estrutura dos registros
• para cada tipo de registro, quais campos
ocorrem, e em qual frequência
• Estatísticas sobre estrutura dos campos
• valores simples, arrays e documentos aninhados
(objetos)
@ramalhoorg
Tuesday, July 17, 12
27. Map/Reduce: o básico
• Executado através do método mapReduce:
db.complete.mapReduce(map, reduce,
{out: { inline : 1}, jsMode: true})
• Função map deve processar cada item (this) e
emitir um par de chave: valor
• Função reduce deve aceitar chave e um array de
valores, e devolver apenas um valor agregado
@ramalhoorg
Tuesday, July 17, 12
29. Map/Reduce
me lembra
Pacman
• Jogador faz reduce
dos pontinhos
• Resultado do reduce
é o score
@ramalhoorg
Tuesday, July 17, 12
30. Exemplo 284396!
251678!
subtitle
subject_place
592707! lc_classifications
264695! contributions
605777! title
604455! languages
• Obter lista de todos 475865!
598671!
subjects
publish_country
os campos e quantas 193955! series
vezes cada um 113818! title_prefix
605781! type
ocorre nos registros 538357! by_statement
de edition 605781! revision
600934! publishers
605781! last_modified
605781! key
@ramalhoorg
Tuesday, July 17, 12
31. Map
• Se o registro é do tipo edition, emitir um par de
(«nome_do_campo», 1) para cada campo
var map = function () {
if (this.type.key === "/type/edition") {
for (field_name in this) {
emit(field_name, 1);
}
}
}
@ramalhoorg
Tuesday, July 17, 12
32. Reduce
• Todos os pares de («chave», «valor»)
são agrupados em pares pela «chave»:
(«chave»: [«valor0», «valor1», «valor2»])
• A função reduce deve reduzir cada
«array_de_valores» a um único valor
var reduce = function (key, values) {
var total = 0;
values.forEach(function(n) { total += n; });
return total;
}
@ramalhoorg
Tuesday, July 17, 12
33. Executar mapReduce
var res = db.complete.mapReduce(map, reduce, {
"out": { "inline" : 1},
"jsMode": true
});
//exibir resultado
res.results.forEach(function (r) {
print(r.value+"t"+r._id);
});
print("-----");
for (var chave in res.counts) {
if (chave !== "_id") {
print(chave+"t"+res.counts[chave]);
}
}
print("-----");
print("tempo (s)t"+res.timeMillis/1000);
@ramalhoorg
Tuesday, July 17, 12
40. Refatoração do esquema
• Usar key+revision como chave primária _id
• Manter campos key e revision separados
• Para fazer pseudo-auto join recuperando o
histórico de um registro bibliográfico
• Embutir (embed) campo nome do autor no
documento
"authors": [
{
"key": "/authors/OL45038A",
"name": "W. A. Mozart"
}
], @ramalhoorg
Tuesday, July 17, 12
41. Representação do
histórico de versões
• Embutir pode ser uma boa opção para os tipos de
registros que são raramente atualizados
• Versões antigas embutidas
• Para registros que sofrem muitas atualizações, a
melhor opção é uma sequência de referências
(“chaves estrangeiras”)
• Um “pseudo self-join” pode ser feito pelo
atributo key para recuperar o histórico
@ramalhoorg
Tuesday, July 17, 12
42. Integridade referencial
• Identificação de problemas atuais
• Ferramentas de suporte
• Índices
• Uso de um framework com ODM (object-
document mapper)
• Tarefas de monitoração assíncrona
@ramalhoorg
Tuesday, July 17, 12
43. Algumas dicas
• Todo registro deve ter campos identificando:
• seu tipo
• a versão do esquema usada naquele registro
• Mudanças no esquema podem ser feitas de modo
incremental, quando um documento é alterado
• Use um ODM (Object-Document Mapper) para
aumentar a consistência dos dados armazenados
@ramalhoorg
Tuesday, July 17, 12
45. Excelente opção para
hospedagem de MongoDB.
Pequenas instâncias gratuitas,
instâncias maiores por preços
acessíveis, sem você precisar
gerenciar o servidor, sistema
operacional, storage etc.
Tuesday, July 17, 12