SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Midgard2
Content repository for mobile applications
Henri
Bergius



          Microblogs: @bergie
              http://bergie.iki.fi
Content Repository


Don't invent your own file formats
Content Repository


Objects instead of SQL
Content Repository


            Objects instead of SQL




http://xkcd.com/327/
Content Repository


Signals about changes
Content Repository


Data model is scriptable
Content Repository


Synchronization and sharing
With a content repository
incredible power is at your disposal
Free Content Repositories


•   Schema-based, relational   •   Schema-free
•   Query Builder              •   Javascript map/reduce
•   C, glib, libgda            •   Erlang
•   LGPL                       •   Apache License
•   D-Bus signals              •   JSON polling via HTTP
•   Library                    •   Daemon
          midgard2.org              couchdb.apache.org
...and they talk to each other
The Midgard Project
•   Free software project    •   Object-Relational
    since 1999                   Mapping, trees, D-Bus
                                 signals
•   Contributors from most
    European countries       •   APIs for C, PHP, Python,
                                 Vala, Objective-C, ...
•   Synchronized release
    model, every 6 months    •   Linux, Mac, Maemo
Midgard on Maemo 5




Conboy: notes on your phone
Midgard on Maemo 5




Workstreamer: project tracking for N900
Midgard on the web




Qaiku.com: conversational microblogging
Getting started with Midgard
Installation
•   Linux distribution repositories (Ubuntu, Debian, RHEL,
    OpenSuse etc) on OBS:
    http://download.opensuse.org/repositories/home:/midgardproject:/mjolnir/
•   After that Midgard is just an apt-get install python-
    midgard2 or apt-get install
    php5-midgard2 away
•   Maemo 4 and 5 available
    in Extras Devel (soon
    Extras)
•   On OS X use MacPorts
    or the ObjC bundle
Objects are defined by MgdSchema
<!-- This will be installed to /usr/share/midgard2/schema/ -->
<type name="midgard_person">
   <property name="id" type="unsigned integer" primaryfield="id">
      <description>Local non-replication-safe database identifier</description>
   </property>
   <property name="firstname" type="string" index="yes">
      <description>First name of the person</description>
   </property>
   <property name="lastname" type="string" index="yes">
      <description>Last name of the person</description>
   </property>
   <property name="birthdate" type="datetime">
      <description>Birth date of the person</description>
   </property>
   <property name="email" type="string" index="yes">
      <description>Email address of the person</description>
   </property>
</type>
Midgard API for PHP
<?php
// Load the Midgard2 API extension
dl('midgard2.so');

// Set up the repository config
$config = new midgard_config();
$config->dbtype = 'SQLite';
$config->database = 'midgardexample';
// this will store to SQLite in ~/.midgard2/data/midgardexample.db

// Open a Midgard repository connection
$midgard = midgard_connection::get_instance();
$midgard->open_config($config);

// Prepare storage for your data
midgard_storage::create_base_storage();
midgard_storage::create_class_storage('midgard_person');
Midgard API for PHP
// Create a new person object
$person = new midgard_person();
$person->firstname = 'Leif';
$person->lastname = 'Eriksson';
$person->create();

// Query system for all persons with lastname "Eriksson"
$qb = new midgard_query_builder('midgard_person');
$qb->add_constraint('lastname', '=', 'Eriksson');
$persons = $qb->execute();
foreach ($persons as $person)
{
   echo "{$person->lastname}, {$person->firstname} has GUID {$person-
>guid}n";
   // Add an email address and update
   $person->email = 'leif@vinland.no';
   $person->update();
}
import antigravity




http://xkcd.com/353/
import antigravity
# Load the Midgard2 API extension
import _midgard as midgard

# Set up the repository config
configuration = midgard.config()
configuration.dbtype = 'SQLite'
configuration.database = 'midgardexample'
# this will store to SQLite in ~/.midgard2/data/midgardexample.db

# Open a Midgard repository connection
connection = midgard.connection()
connection.open_config(configuration)

# Prepare storage for your data
midgard.storage.create_base_storage()
midgard.storage.create_class_storage('midgard_person')
Midgard API: PHP vs. Python
// Create a new person object              # Create a new person object
$person = new midgard_person();            person = midgard.mgdschema.midgard_person()
$person->firstname = 'Leif';               person.firstname = 'Leif'
$person->lastname = 'Eriksson';            person.lastname = 'Eriksson'
$person->create();                         person.create()

// Query system for all persons with       # Query system for all persons with
// lastname "Eriksson"                     # lastname "Eriksson"
$qb = new                                  qb = midgard.query_builder('midgard_person')
midgard_query_builder('midgard_person');   qb.add_constraint('lastname', '=', 'Eriksson')
$qb->add_constraint('lastname', '=',       persons = qb.execute()
       'Eriksson');                        for person in persons:
$persons = $qb->execute();                    print "%s, %s has GUID %s" 
foreach ($persons as $person)                    % (person.lastname, person.firstname, 
{                                                person.guid)
    echo "{$person->lastname},”               # Add an email address and update
       . ” {$person->firstname}”              person.email = 'leif@vinland.no'
       . “ has GUID {$person->guid}n";       person.update()
    // Add an email address and update
    $person->email = 'leif@vinland.no';
    $person->update();
}
Oh, and Vala too!
/* valac --debug --pkg midgard2 -o midgard-vala-example example.vala --vapidir=./ */
using GLib;
using Midgard;
namespace MidgardValaExample {
     void main() {
         Midgard.init();

       Midgard.Config config = new Midgard.Config();
       config.read_file ("midgard_test", true);
       Midgard.Connection cnc = new Midgard.Connection();
       cnc.open_config (config)

       Midgard.Object person = new Midgard.Object (cnc, "midgard_person", null);
       person.set ("firstname", "Leif");
       if (person.create()) {
            string guid;
            person.get ("guid", out guid);
            GLib.print ("Created new person identified by GUID %s n", guid);
       }
any tools you use, Midgard is there
...maybe even in your finger
How about Qt?
•   Midgard already
    works in PySide
    applications
•   Would be great to
    have proper Qt
    support
•   Anybody want to
    help with this?
Tree access

•   Parent-child relations
    •   get_parent()
    •   list_children()
•   Access via named paths
    •   get_by_path()
Extending objects
•   Subclasses in MgdSchema
    <type name="bossa_attendee" extends="midgard_person">
       <property name="likesbeer" type="boolean" default="true" />
    </type>
•   Ad-hoc additional properties
    object.set_parameter('bossa', 'key', 'value')
    value = object.get_parameter('bossa', 'key')
•   Binary attachments are also supported
    •   Metadata in repository, file in filesystem
    •   API provides access to filehandles
Midgard MVC

Put your content repository on the web
Midgard MVC
•   Very efficient MVC
    framework for PHP
•   Python and D-Bus for
    background processing
•   Gettext + intl i18n
•   TAL templating
•   Full WebDAV support
•   Git for packaging and
    deployment
Midgard MVC




Tomboy web synchronization with Midgard
Midgard Runtime
Explore the possibilities
           of content repositories




midgard2.org   #midgard on FreeNode   @MidgardProject

Weitere ähnliche Inhalte

Was ist angesagt?

10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data ModelingDATAVERSITY
 
MongoDB 3.2 - Analytics
MongoDB 3.2  - AnalyticsMongoDB 3.2  - Analytics
MongoDB 3.2 - AnalyticsMassimo Brignoli
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsMongoDB
 
An introduction to CouchDB
An introduction to CouchDBAn introduction to CouchDB
An introduction to CouchDBDavid Coallier
 
Conceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation Framework
Conceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation FrameworkConceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation Framework
Conceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation FrameworkMongoDB
 
Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014MongoDB
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring DataAnton Sulzhenko
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...MongoDB
 
Back to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationBack to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationMongoDB
 
Learn Learn how to build your mobile back-end with MongoDB
Learn Learn how to build your mobile back-end with MongoDBLearn Learn how to build your mobile back-end with MongoDB
Learn Learn how to build your mobile back-end with MongoDBMarakana Inc.
 
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphSocialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphMongoDB
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkMongoDB
 
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB
 
Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...
Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...
Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...MongoDB
 
2014 bigdatacamp asya_kamsky
2014 bigdatacamp asya_kamsky2014 bigdatacamp asya_kamsky
2014 bigdatacamp asya_kamskyData Con LA
 
Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework MongoDB
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Tobias Trelle
 

Was ist angesagt? (19)

10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling
 
MongoDB 3.2 - Analytics
MongoDB 3.2  - AnalyticsMongoDB 3.2  - Analytics
MongoDB 3.2 - Analytics
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in Documents
 
An introduction to CouchDB
An introduction to CouchDBAn introduction to CouchDB
An introduction to CouchDB
 
Conceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation Framework
Conceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation FrameworkConceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation Framework
Conceptos bĂĄsicos. Seminario web 5: IntroducciĂłn a Aggregation Framework
 
Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014Hadoop - MongoDB Webinar June 2014
Hadoop - MongoDB Webinar June 2014
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring Data
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
 
Back to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationBack to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB Application
 
Learn Learn how to build your mobile back-end with MongoDB
Learn Learn how to build your mobile back-end with MongoDBLearn Learn how to build your mobile back-end with MongoDB
Learn Learn how to build your mobile back-end with MongoDB
 
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphSocialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation Framework
 
Doctrine and NoSQL
Doctrine and NoSQLDoctrine and NoSQL
Doctrine and NoSQL
 
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
 
Doctrine for NoSQL
Doctrine for NoSQLDoctrine for NoSQL
Doctrine for NoSQL
 
Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...
Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...
Conceptos bĂĄsicos. Seminario web 4: IndexaciĂłn avanzada, Ă­ndices de texto y g...
 
2014 bigdatacamp asya_kamsky
2014 bigdatacamp asya_kamsky2014 bigdatacamp asya_kamsky
2014 bigdatacamp asya_kamsky
 
Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
 

Andere mochten auch

Proggis - Business Analytics with Linked Data
Proggis - Business Analytics with Linked DataProggis - Business Analytics with Linked Data
Proggis - Business Analytics with Linked DataHenri Bergius
 
Kevin Kelly Capitulo 7
Kevin Kelly Capitulo 7Kevin Kelly Capitulo 7
Kevin Kelly Capitulo 7Raul Cordova
 
Location-aware applications with GeoClue
Location-aware applications with GeoClueLocation-aware applications with GeoClue
Location-aware applications with GeoClueHenri Bergius
 
Semantic editor
Semantic editorSemantic editor
Semantic editorHenri Bergius
 
Nemein ja Midgard - yritys open source -projektin keskipisteessä
Nemein ja Midgard - yritys open source -projektin keskipisteessäNemein ja Midgard - yritys open source -projektin keskipisteessä
Nemein ja Midgard - yritys open source -projektin keskipisteessäHenri Bergius
 
NoFlo - Flow-Based Programming for Node.js
NoFlo - Flow-Based Programming for Node.jsNoFlo - Flow-Based Programming for Node.js
NoFlo - Flow-Based Programming for Node.jsHenri Bergius
 
CreateJS hackathon in Zurich
CreateJS hackathon in ZurichCreateJS hackathon in Zurich
CreateJS hackathon in ZurichHenri Bergius
 
Decoupling Content Management with Create.js
Decoupling Content Management with Create.jsDecoupling Content Management with Create.js
Decoupling Content Management with Create.jsHenri Bergius
 

Andere mochten auch (9)

Proggis - Business Analytics with Linked Data
Proggis - Business Analytics with Linked DataProggis - Business Analytics with Linked Data
Proggis - Business Analytics with Linked Data
 
Kevin Kelly Capitulo 7
Kevin Kelly Capitulo 7Kevin Kelly Capitulo 7
Kevin Kelly Capitulo 7
 
Location-aware applications with GeoClue
Location-aware applications with GeoClueLocation-aware applications with GeoClue
Location-aware applications with GeoClue
 
Semantic editor
Semantic editorSemantic editor
Semantic editor
 
Nemein ja Midgard - yritys open source -projektin keskipisteessä
Nemein ja Midgard - yritys open source -projektin keskipisteessäNemein ja Midgard - yritys open source -projektin keskipisteessä
Nemein ja Midgard - yritys open source -projektin keskipisteessä
 
NoFlo - Flow-Based Programming for Node.js
NoFlo - Flow-Based Programming for Node.jsNoFlo - Flow-Based Programming for Node.js
NoFlo - Flow-Based Programming for Node.js
 
CreateJS hackathon in Zurich
CreateJS hackathon in ZurichCreateJS hackathon in Zurich
CreateJS hackathon in Zurich
 
Decoupling Content Management with Create.js
Decoupling Content Management with Create.jsDecoupling Content Management with Create.js
Decoupling Content Management with Create.js
 
200531063exam
200531063exam200531063exam
200531063exam
 

Ähnlich wie Midgard2 - Content Repository for mobile applications

Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016Glynn Bird
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVCAlive Kuo
 
MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)Uwe Printz
 
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaSolutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaGuido Schmutz
 
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...confluent
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaGuido Schmutz
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsMykyta Protsenko
 
Webinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and JavaWebinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and JavaMongoDB
 
Multilingualism makes better programmers
Multilingualism makes better programmersMultilingualism makes better programmers
Multilingualism makes better programmersAlexander Varwijk
 
Mongodb intro
Mongodb introMongodb intro
Mongodb introchristkv
 
Eagle6 mongo dc revised
Eagle6 mongo dc revisedEagle6 mongo dc revised
Eagle6 mongo dc revisedMongoDB
 
Eagle6 Enterprise Situational Awareness
Eagle6 Enterprise Situational AwarenessEagle6 Enterprise Situational Awareness
Eagle6 Enterprise Situational AwarenessMongoDB
 
Big Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-FormatsBig Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-FormatsGuido Schmutz
 
Getting Started with DrupalGap
Getting Started with DrupalGapGetting Started with DrupalGap
Getting Started with DrupalGapAlex S
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMCIcinga
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developersSergio Bossa
 
Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala - Open Source Bridge 2012Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala - Open Source Bridge 2012sullis
 
How to develop Big Data Pipelines for Hadoop, by Costin Leau
How to develop Big Data Pipelines for Hadoop, by Costin LeauHow to develop Big Data Pipelines for Hadoop, by Costin Leau
How to develop Big Data Pipelines for Hadoop, by Costin LeauCodemotion
 

Ähnlich wie Midgard2 - Content Repository for mobile applications (20)

Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016Offline first development - Glasgow PHP - January 2016
Offline first development - Glasgow PHP - January 2016
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)
 
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaSolutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
 
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
Webinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and JavaWebinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and Java
 
Multilingualism makes better programmers
Multilingualism makes better programmersMultilingualism makes better programmers
Multilingualism makes better programmers
 
Mongodb intro
Mongodb introMongodb intro
Mongodb intro
 
Eagle6 mongo dc revised
Eagle6 mongo dc revisedEagle6 mongo dc revised
Eagle6 mongo dc revised
 
Eagle6 Enterprise Situational Awareness
Eagle6 Enterprise Situational AwarenessEagle6 Enterprise Situational Awareness
Eagle6 Enterprise Situational Awareness
 
Drupal 8 migrate!
Drupal 8 migrate!Drupal 8 migrate!
Drupal 8 migrate!
 
Deploying Machine Learning Models to Production
Deploying Machine Learning Models to ProductionDeploying Machine Learning Models to Production
Deploying Machine Learning Models to Production
 
Big Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-FormatsBig Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-Formats
 
Getting Started with DrupalGap
Getting Started with DrupalGapGetting Started with DrupalGap
Getting Started with DrupalGap
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMC
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developers
 
Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala - Open Source Bridge 2012Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala - Open Source Bridge 2012
 
How to develop Big Data Pipelines for Hadoop, by Costin Leau
How to develop Big Data Pipelines for Hadoop, by Costin LeauHow to develop Big Data Pipelines for Hadoop, by Costin Leau
How to develop Big Data Pipelines for Hadoop, by Costin Leau
 

Mehr von Henri Bergius

Decoupling Content Management
Decoupling Content ManagementDecoupling Content Management
Decoupling Content ManagementHenri Bergius
 
Create.js - Inline editing for any website
Create.js - Inline editing for any websiteCreate.js - Inline editing for any website
Create.js - Inline editing for any websiteHenri Bergius
 
Decoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCRDecoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCRHenri Bergius
 
Bisnesdata - Tietojärjestelmien kätkÜistä tableteille
Bisnesdata - Tietojärjestelmien kätkÜistä tableteilleBisnesdata - Tietojärjestelmien kätkÜistä tableteille
Bisnesdata - Tietojärjestelmien kätkÜistä tableteilleHenri Bergius
 
Create - Decoupled CMS interface
Create - Decoupled CMS interfaceCreate - Decoupled CMS interface
Create - Decoupled CMS interfaceHenri Bergius
 
Create JS - A new kind of web editing interface
Create JS  - A new kind of web editing interfaceCreate JS  - A new kind of web editing interface
Create JS - A new kind of web editing interfaceHenri Bergius
 
PHPCR - Standard Content Repository for PHP
PHPCR - Standard Content Repository for PHPPHPCR - Standard Content Repository for PHP
PHPCR - Standard Content Repository for PHPHenri Bergius
 
Symfony2 for Midgard Developers
Symfony2 for Midgard DevelopersSymfony2 for Midgard Developers
Symfony2 for Midgard DevelopersHenri Bergius
 
VIE - Using RDFa to make content editable
VIE - Using RDFa to make content editableVIE - Using RDFa to make content editable
VIE - Using RDFa to make content editableHenri Bergius
 
Midgard Create and VIE
Midgard Create and VIEMidgard Create and VIE
Midgard Create and VIEHenri Bergius
 
Location awareness in MeeGo
Location awareness in MeeGoLocation awareness in MeeGo
Location awareness in MeeGoHenri Bergius
 
Midgard Create and editing content via RDFa
Midgard Create and editing content via RDFaMidgard Create and editing content via RDFa
Midgard Create and editing content via RDFaHenri Bergius
 
Midgard2 Content Repository at FSCONS 2009
Midgard2 Content Repository at FSCONS 2009Midgard2 Content Repository at FSCONS 2009
Midgard2 Content Repository at FSCONS 2009Henri Bergius
 
Midgard & Nemein - when an open source project and company evolve together
Midgard & Nemein - when an open source project and company evolve togetherMidgard & Nemein - when an open source project and company evolve together
Midgard & Nemein - when an open source project and company evolve togetherHenri Bergius
 
Location-aware desktop
Location-aware desktopLocation-aware desktop
Location-aware desktopHenri Bergius
 
Midgard2: Content repository for desktop and the web
Midgard2: Content repository for desktop and the webMidgard2: Content repository for desktop and the web
Midgard2: Content repository for desktop and the webHenri Bergius
 
Midgard and the Interactive Knowledge System
Midgard and the Interactive Knowledge SystemMidgard and the Interactive Knowledge System
Midgard and the Interactive Knowledge SystemHenri Bergius
 
Midgard 2 - The cloud you can control
Midgard 2 - The cloud you can controlMidgard 2 - The cloud you can control
Midgard 2 - The cloud you can controlHenri Bergius
 
Attention Profiling for smarter web services
Attention Profiling for smarter web servicesAttention Profiling for smarter web services
Attention Profiling for smarter web servicesHenri Bergius
 

Mehr von Henri Bergius (20)

Decoupling Content Management
Decoupling Content ManagementDecoupling Content Management
Decoupling Content Management
 
Create.js - Inline editing for any website
Create.js - Inline editing for any websiteCreate.js - Inline editing for any website
Create.js - Inline editing for any website
 
Decoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCRDecoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCR
 
Bisnesdata - Tietojärjestelmien kätkÜistä tableteille
Bisnesdata - Tietojärjestelmien kätkÜistä tableteilleBisnesdata - Tietojärjestelmien kätkÜistä tableteille
Bisnesdata - Tietojärjestelmien kätkÜistä tableteille
 
Create - Decoupled CMS interface
Create - Decoupled CMS interfaceCreate - Decoupled CMS interface
Create - Decoupled CMS interface
 
Create JS - A new kind of web editing interface
Create JS  - A new kind of web editing interfaceCreate JS  - A new kind of web editing interface
Create JS - A new kind of web editing interface
 
PHPCR - Standard Content Repository for PHP
PHPCR - Standard Content Repository for PHPPHPCR - Standard Content Repository for PHP
PHPCR - Standard Content Repository for PHP
 
Symfony2 for Midgard Developers
Symfony2 for Midgard DevelopersSymfony2 for Midgard Developers
Symfony2 for Midgard Developers
 
VIE - Using RDFa to make content editable
VIE - Using RDFa to make content editableVIE - Using RDFa to make content editable
VIE - Using RDFa to make content editable
 
Midgard Create and VIE
Midgard Create and VIEMidgard Create and VIE
Midgard Create and VIE
 
Location awareness in MeeGo
Location awareness in MeeGoLocation awareness in MeeGo
Location awareness in MeeGo
 
Midgard Create and editing content via RDFa
Midgard Create and editing content via RDFaMidgard Create and editing content via RDFa
Midgard Create and editing content via RDFa
 
Midgard2 Content Repository at FSCONS 2009
Midgard2 Content Repository at FSCONS 2009Midgard2 Content Repository at FSCONS 2009
Midgard2 Content Repository at FSCONS 2009
 
Midgard & Nemein - when an open source project and company evolve together
Midgard & Nemein - when an open source project and company evolve togetherMidgard & Nemein - when an open source project and company evolve together
Midgard & Nemein - when an open source project and company evolve together
 
OSM2Go
OSM2GoOSM2Go
OSM2Go
 
Location-aware desktop
Location-aware desktopLocation-aware desktop
Location-aware desktop
 
Midgard2: Content repository for desktop and the web
Midgard2: Content repository for desktop and the webMidgard2: Content repository for desktop and the web
Midgard2: Content repository for desktop and the web
 
Midgard and the Interactive Knowledge System
Midgard and the Interactive Knowledge SystemMidgard and the Interactive Knowledge System
Midgard and the Interactive Knowledge System
 
Midgard 2 - The cloud you can control
Midgard 2 - The cloud you can controlMidgard 2 - The cloud you can control
Midgard 2 - The cloud you can control
 
Attention Profiling for smarter web services
Attention Profiling for smarter web servicesAttention Profiling for smarter web services
Attention Profiling for smarter web services
 

KĂźrzlich hochgeladen

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vĂĄzquez
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 

KĂźrzlich hochgeladen (20)

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

Midgard2 - Content Repository for mobile applications

  • 1. Midgard2 Content repository for mobile applications
  • 2. Henri Bergius Microblogs: @bergie http://bergie.iki.fi
  • 3. Content Repository Don't invent your own file formats
  • 5. Content Repository Objects instead of SQL http://xkcd.com/327/
  • 9. With a content repository incredible power is at your disposal
  • 10. Free Content Repositories • Schema-based, relational • Schema-free • Query Builder • Javascript map/reduce • C, glib, libgda • Erlang • LGPL • Apache License • D-Bus signals • JSON polling via HTTP • Library • Daemon midgard2.org couchdb.apache.org
  • 11. ...and they talk to each other
  • 12. The Midgard Project • Free software project • Object-Relational since 1999 Mapping, trees, D-Bus signals • Contributors from most European countries • APIs for C, PHP, Python, Vala, Objective-C, ... • Synchronized release model, every 6 months • Linux, Mac, Maemo
  • 13. Midgard on Maemo 5 Conboy: notes on your phone
  • 14. Midgard on Maemo 5 Workstreamer: project tracking for N900
  • 15. Midgard on the web Qaiku.com: conversational microblogging
  • 17. Installation • Linux distribution repositories (Ubuntu, Debian, RHEL, OpenSuse etc) on OBS: http://download.opensuse.org/repositories/home:/midgardproject:/mjolnir/ • After that Midgard is just an apt-get install python- midgard2 or apt-get install php5-midgard2 away • Maemo 4 and 5 available in Extras Devel (soon Extras) • On OS X use MacPorts or the ObjC bundle
  • 18. Objects are defined by MgdSchema <!-- This will be installed to /usr/share/midgard2/schema/ --> <type name="midgard_person"> <property name="id" type="unsigned integer" primaryfield="id"> <description>Local non-replication-safe database identifier</description> </property> <property name="firstname" type="string" index="yes"> <description>First name of the person</description> </property> <property name="lastname" type="string" index="yes"> <description>Last name of the person</description> </property> <property name="birthdate" type="datetime"> <description>Birth date of the person</description> </property> <property name="email" type="string" index="yes"> <description>Email address of the person</description> </property> </type>
  • 19. Midgard API for PHP <?php // Load the Midgard2 API extension dl('midgard2.so'); // Set up the repository config $config = new midgard_config(); $config->dbtype = 'SQLite'; $config->database = 'midgardexample'; // this will store to SQLite in ~/.midgard2/data/midgardexample.db // Open a Midgard repository connection $midgard = midgard_connection::get_instance(); $midgard->open_config($config); // Prepare storage for your data midgard_storage::create_base_storage(); midgard_storage::create_class_storage('midgard_person');
  • 20. Midgard API for PHP // Create a new person object $person = new midgard_person(); $person->firstname = 'Leif'; $person->lastname = 'Eriksson'; $person->create(); // Query system for all persons with lastname "Eriksson" $qb = new midgard_query_builder('midgard_person'); $qb->add_constraint('lastname', '=', 'Eriksson'); $persons = $qb->execute(); foreach ($persons as $person) { echo "{$person->lastname}, {$person->firstname} has GUID {$person- >guid}n"; // Add an email address and update $person->email = 'leif@vinland.no'; $person->update(); }
  • 22. import antigravity # Load the Midgard2 API extension import _midgard as midgard # Set up the repository config configuration = midgard.config() configuration.dbtype = 'SQLite' configuration.database = 'midgardexample' # this will store to SQLite in ~/.midgard2/data/midgardexample.db # Open a Midgard repository connection connection = midgard.connection() connection.open_config(configuration) # Prepare storage for your data midgard.storage.create_base_storage() midgard.storage.create_class_storage('midgard_person')
  • 23. Midgard API: PHP vs. Python // Create a new person object # Create a new person object $person = new midgard_person(); person = midgard.mgdschema.midgard_person() $person->firstname = 'Leif'; person.firstname = 'Leif' $person->lastname = 'Eriksson'; person.lastname = 'Eriksson' $person->create(); person.create() // Query system for all persons with # Query system for all persons with // lastname "Eriksson" # lastname "Eriksson" $qb = new qb = midgard.query_builder('midgard_person') midgard_query_builder('midgard_person'); qb.add_constraint('lastname', '=', 'Eriksson') $qb->add_constraint('lastname', '=', persons = qb.execute() 'Eriksson'); for person in persons: $persons = $qb->execute(); print "%s, %s has GUID %s" foreach ($persons as $person) % (person.lastname, person.firstname, { person.guid) echo "{$person->lastname},” # Add an email address and update . ” {$person->firstname}” person.email = 'leif@vinland.no' . “ has GUID {$person->guid}n"; person.update() // Add an email address and update $person->email = 'leif@vinland.no'; $person->update(); }
  • 24. Oh, and Vala too! /* valac --debug --pkg midgard2 -o midgard-vala-example example.vala --vapidir=./ */ using GLib; using Midgard; namespace MidgardValaExample { void main() { Midgard.init(); Midgard.Config config = new Midgard.Config(); config.read_file ("midgard_test", true); Midgard.Connection cnc = new Midgard.Connection(); cnc.open_config (config) Midgard.Object person = new Midgard.Object (cnc, "midgard_person", null); person.set ("firstname", "Leif"); if (person.create()) { string guid; person.get ("guid", out guid); GLib.print ("Created new person identified by GUID %s n", guid); }
  • 25. any tools you use, Midgard is there
  • 26. ...maybe even in your finger
  • 27. How about Qt? • Midgard already works in PySide applications • Would be great to have proper Qt support • Anybody want to help with this?
  • 28. Tree access • Parent-child relations • get_parent() • list_children() • Access via named paths • get_by_path()
  • 29. Extending objects • Subclasses in MgdSchema <type name="bossa_attendee" extends="midgard_person"> <property name="likesbeer" type="boolean" default="true" /> </type> • Ad-hoc additional properties object.set_parameter('bossa', 'key', 'value') value = object.get_parameter('bossa', 'key') • Binary attachments are also supported • Metadata in repository, file in filesystem • API provides access to filehandles
  • 30. Midgard MVC Put your content repository on the web
  • 31. Midgard MVC • Very efficient MVC framework for PHP • Python and D-Bus for background processing • Gettext + intl i18n • TAL templating • Full WebDAV support • Git for packaging and deployment
  • 32. Midgard MVC Tomboy web synchronization with Midgard
  • 34. Explore the possibilities of content repositories midgard2.org #midgard on FreeNode @MidgardProject