SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
GLASS 2.0



Dale Henrichs
  VMware, Inc.

  ESUG 2011
Edinburgh, Scotland
   August 22, 2011
GLASS 2.0
●   Overview of GLASS
●   VMware Cloud Foundry
●   tODE demo
What is GLASS?
●   A platform for deploying web-based Smalltalk
    applications in GemStone/S
       –   Develop in Squeak/Pharo, Deploy in GemStone
               ●   OmniBrowser-based development tools
               ●   Compatibility layer for the Squeak and Pharo
                    code base
               ●   Many popular projects ported to GemStone/S
Why use GLASS?
●   GemStone/S is a high performance, high
    reliability alternative when your web application
    outgrows a single vm
        –   With the “transparent persistence” and
             “transparent concurrency” features of GLASS
                ●   Add multi-vm persistence to web app without
                     changes to your source code
        –   Free for commercial use
Transparent Persistence
●   GemStone is based on same persistence
    model used in Squeak/Pharo
       –   Objects rooted in “Smalltalk” are considered
            persistent
●   GemStone uses transactions instead of “save
    image” in Squeak/Pharo
       –   commit
               ●   Changed objects in vm saved to repository
       –   abort
               ●   Entire object graph in vm updated to current view
                       –   Dropping any changes on the floor
Transparent Persistence (cont'd)
●   GemStone transaction logic is embedded in the
    web framework
       –   Abort/Commit on HTPP request boundaries
               ●   Fresh view at start, changes saved to disk before
                    user sees response
●   No additional application-level code needed
Transparent Concurrency
●   On commit, GemStone merges changes to
    object graph with latest view in repository
        –   if two vms concurrently update same object
                ●   Commit conflict thrown
●   Conflict management code embedded web
    framework
        –   On conflict HTTP request is retried
                ●   As if request had been delayed in arriving
●   No additional application-level code needed
VMware Cloud Foundry
●   Cloud Foundry is a platform for building,
    deploying, and running cloud-based apps
       –   CloudFoundry.com is a complete, hosted
            environment offered by VMware
       –   CloudFoundry.org is an open source project
Cloud Foundry and GLASS
●   We are actively integrating GemStone/S and
    Maglev into Cloud Foundry framework
●   Plans to include support for
    Seaside/Aida/Iliad/Pier
●   When finished we'll have cloud-based hosting
    service for GLASS
        –   Will make deploying to GemStone/S even easier
tODE
      the Object-centric Development
               Environment
●   A Proof of Concept for a Smalltalk IDE that runs
    in a web browser
        –   Written in Seaside
        –   Ported to Pharo and GemStone
        –   MIT license
●   A small, powerful framework that is easy to
    customize
Why tODE?
●   tODE was created to provide the Smalltalk IDE
    for deployed web-applications
       –   The traditional Smalltalk GUI is too slow when
            used across the WAN
       –   Limited access to machines running in cloud
               ●   HTTP access only in Cloud Foundry
●   Smalltalk without an IDE?
       –   No way!
tODE paradigm
●   Modeled on a web browser – tODE is an
    “Image Browser”
       –   URL is a Smalltalk expression
       –   LINKs follow object references
       –   HISTORY is a stack of object references
       –   PAGE is a set of tabbed PANES for an object
       –   PANE contains a rendered aspect of the object
Navigation Pane
History Pane
SidebarPane
Pane contents
Frame Pane
 - Evaluate Smalltalkaspect of the current object
   History by when frames/objects
   List pane, a renderer
   Select tab visitedneeded
   Drawn of to view Expressions
 - - View, Help, Inspect, Class and Method
   Back button is derived from a specification in a pragma method
   The renderer
 - Search
 - etc.
tODE Demo
Conclusion
●   Successful Proof of Concept
       –   Functional ...
       –   Simple, extensible framework
       –   Need a (web framework) neutral rendering
            language
       –   Need a bit of CSS and javascript polish
Future work
●   tODE
       –   Head towards alpha release
●   GemStone/S for Cloud Foundry
       –   Keep an eye out for further info
●   For more info
       –   http://seaside.gemstone.com/
       –   http://cloudfoundry.org/
       –   http://code.google.com/p/tode/
       –   http://gemstonesoup.wordpress.com

Contenu connexe

Tendances

OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...Alkacon Software GmbH & Co. KG
 
Webkit Chromium Contribution Process
Webkit Chromium Contribution ProcessWebkit Chromium Contribution Process
Webkit Chromium Contribution ProcessGyuyoung Kim
 
Surviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-studySurviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-studypeter_ibuildings
 
HWIOS Websocket CMS explained
HWIOS Websocket CMS explainedHWIOS Websocket CMS explained
HWIOS Websocket CMS explainedphrearch
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...mfrancis
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...mfrancis
 
GitBucket: Git Centric Software Development Platform by Scala
GitBucket:  Git Centric Software Development Platform by ScalaGitBucket:  Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scalatakezoe
 
[1C5]Lessons from developing a web browser for raspberry pi
[1C5]Lessons from developing a web browser for raspberry pi[1C5]Lessons from developing a web browser for raspberry pi
[1C5]Lessons from developing a web browser for raspberry piNAVER D2
 
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"GeeksLab Odessa
 
Solving the MariaDB and MySQL High Availability Puzzle Webinar
Solving the MariaDB and MySQL High Availability Puzzle WebinarSolving the MariaDB and MySQL High Availability Puzzle Webinar
Solving the MariaDB and MySQL High Availability Puzzle WebinarRobert Silén
 
WebDAV - April 15 2008
WebDAV - April 15 2008WebDAV - April 15 2008
WebDAV - April 15 2008sullis
 
EclipseCon Europe 2011 Virgo 3.0
EclipseCon Europe 2011 Virgo 3.0EclipseCon Europe 2011 Virgo 3.0
EclipseCon Europe 2011 Virgo 3.0Christopher Frost
 
Kubernetes best practices.odf
Kubernetes best practices.odfKubernetes best practices.odf
Kubernetes best practices.odfAkash Agrawal
 
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by ScalaGitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scalatakezoe
 
Drupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.xDrupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.xWong Hoi Sing Edison
 
Microservices Architecture and Containers.
Microservices Architecture and Containers.Microservices Architecture and Containers.
Microservices Architecture and Containers.imjacobclark
 
Building Large Scale Web Apps And Platforms
Building Large Scale Web Apps And PlatformsBuilding Large Scale Web Apps And Platforms
Building Large Scale Web Apps And PlatformsAnurag Sinha
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa InitiativeNuvole
 
Revisit Dependency Injection in scala
Revisit Dependency Injection in scalaRevisit Dependency Injection in scala
Revisit Dependency Injection in scalatakezoe
 

Tendances (20)

Vue js 2.x
Vue js 2.xVue js 2.x
Vue js 2.x
 
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
 
Webkit Chromium Contribution Process
Webkit Chromium Contribution ProcessWebkit Chromium Contribution Process
Webkit Chromium Contribution Process
 
Surviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-studySurviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-study
 
HWIOS Websocket CMS explained
HWIOS Websocket CMS explainedHWIOS Websocket CMS explained
HWIOS Websocket CMS explained
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
 
GitBucket: Git Centric Software Development Platform by Scala
GitBucket:  Git Centric Software Development Platform by ScalaGitBucket:  Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
 
[1C5]Lessons from developing a web browser for raspberry pi
[1C5]Lessons from developing a web browser for raspberry pi[1C5]Lessons from developing a web browser for raspberry pi
[1C5]Lessons from developing a web browser for raspberry pi
 
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
 
Solving the MariaDB and MySQL High Availability Puzzle Webinar
Solving the MariaDB and MySQL High Availability Puzzle WebinarSolving the MariaDB and MySQL High Availability Puzzle Webinar
Solving the MariaDB and MySQL High Availability Puzzle Webinar
 
WebDAV - April 15 2008
WebDAV - April 15 2008WebDAV - April 15 2008
WebDAV - April 15 2008
 
EclipseCon Europe 2011 Virgo 3.0
EclipseCon Europe 2011 Virgo 3.0EclipseCon Europe 2011 Virgo 3.0
EclipseCon Europe 2011 Virgo 3.0
 
Kubernetes best practices.odf
Kubernetes best practices.odfKubernetes best practices.odf
Kubernetes best practices.odf
 
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by ScalaGitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
 
Drupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.xDrupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.x
 
Microservices Architecture and Containers.
Microservices Architecture and Containers.Microservices Architecture and Containers.
Microservices Architecture and Containers.
 
Building Large Scale Web Apps And Platforms
Building Large Scale Web Apps And PlatformsBuilding Large Scale Web Apps And Platforms
Building Large Scale Web Apps And Platforms
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa Initiative
 
Revisit Dependency Injection in scala
Revisit Dependency Injection in scalaRevisit Dependency Injection in scala
Revisit Dependency Injection in scala
 

En vedette

Air Pressure and Weather
Air Pressure and WeatherAir Pressure and Weather
Air Pressure and Weatherzionbrighton
 
Cyclones, anticyclones and volcanoes
Cyclones, anticyclones and volcanoesCyclones, anticyclones and volcanoes
Cyclones, anticyclones and volcanoesKalyan Komati
 
seaBreeze 5.0
seaBreeze 5.0seaBreeze 5.0
seaBreeze 5.0ESUG
 
Pg class27-midlat cyclones and anti, hurricanes
Pg class27-midlat cyclones and anti, hurricanesPg class27-midlat cyclones and anti, hurricanes
Pg class27-midlat cyclones and anti, hurricanesSUNY Ulster
 
The Earth's Atmosphere: Composition and Structure
The Earth's Atmosphere: Composition and StructureThe Earth's Atmosphere: Composition and Structure
The Earth's Atmosphere: Composition and StructureMa. Jasmine Aliling
 
Cyclones and anticyclones
Cyclones and anticyclonesCyclones and anticyclones
Cyclones and anticyclonesNaveenpadukone
 
Cyclone and anticyclone
Cyclone and anticycloneCyclone and anticyclone
Cyclone and anticycloneYenyen H
 
Cyclones
CyclonesCyclones
Cyclonesaloksir
 
Sea breeze and land breeze
Sea breeze and land breezeSea breeze and land breeze
Sea breeze and land breezejonesco1
 
Sea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPoint
Sea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPointSea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPoint
Sea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPointwww.sciencepowerpoint.com
 
Land and sea breeze
Land and sea breezeLand and sea breeze
Land and sea breezechampa1
 
Weather and clothes powerpoint
Weather and clothes powerpointWeather and clothes powerpoint
Weather and clothes powerpointCláudia Tavares
 
Weather, clothes and seasons
Weather, clothes and seasonsWeather, clothes and seasons
Weather, clothes and seasonspaulaloga
 
weather and climate ppt for students..
weather and climate ppt for students..weather and climate ppt for students..
weather and climate ppt for students..Aditya Ghosh
 

En vedette (15)

Air Pressure and Weather
Air Pressure and WeatherAir Pressure and Weather
Air Pressure and Weather
 
Cyclones, anticyclones and volcanoes
Cyclones, anticyclones and volcanoesCyclones, anticyclones and volcanoes
Cyclones, anticyclones and volcanoes
 
seaBreeze 5.0
seaBreeze 5.0seaBreeze 5.0
seaBreeze 5.0
 
Pg class27-midlat cyclones and anti, hurricanes
Pg class27-midlat cyclones and anti, hurricanesPg class27-midlat cyclones and anti, hurricanes
Pg class27-midlat cyclones and anti, hurricanes
 
The Earth's Atmosphere: Composition and Structure
The Earth's Atmosphere: Composition and StructureThe Earth's Atmosphere: Composition and Structure
The Earth's Atmosphere: Composition and Structure
 
Cyclones and anticyclones
Cyclones and anticyclonesCyclones and anticyclones
Cyclones and anticyclones
 
Cyclone and anticyclone
Cyclone and anticycloneCyclone and anticyclone
Cyclone and anticyclone
 
Cyclones
CyclonesCyclones
Cyclones
 
Types of breezes
Types of breezesTypes of breezes
Types of breezes
 
Sea breeze and land breeze
Sea breeze and land breezeSea breeze and land breeze
Sea breeze and land breeze
 
Sea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPoint
Sea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPointSea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPoint
Sea Breeze and Land Breeze, Weather and Climate Unit, Earth Science PowerPoint
 
Land and sea breeze
Land and sea breezeLand and sea breeze
Land and sea breeze
 
Weather and clothes powerpoint
Weather and clothes powerpointWeather and clothes powerpoint
Weather and clothes powerpoint
 
Weather, clothes and seasons
Weather, clothes and seasonsWeather, clothes and seasons
Weather, clothes and seasons
 
weather and climate ppt for students..
weather and climate ppt for students..weather and climate ppt for students..
weather and climate ppt for students..
 

Similaire à Glass 2.0

Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...
Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...
Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...Phil Wilkins
 
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudMeet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudLyzun Oleksandr
 
WebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the FutureWebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the FutureFrank Greco
 
OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...
OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...
OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...NETWAYS
 
OpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar Neelamegam
OpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar NeelamegamOpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar Neelamegam
OpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar NeelamegamOpenNebula Project
 
RIA front-ends: Flex, GWT integration in Nuxeo
RIA front-ends: Flex, GWT integration in NuxeoRIA front-ends: Flex, GWT integration in Nuxeo
RIA front-ends: Flex, GWT integration in NuxeoNuxeo
 
OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)David Bosschaert
 
Glassfish An Introduction
Glassfish An IntroductionGlassfish An Introduction
Glassfish An IntroductionJumping Bean
 
Conf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with StencilConf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with StencilTechExeter
 
Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021alinalexandru
 
OSGi Cloud Ecosystems (OSGi Users Forum Germany)
OSGi Cloud Ecosystems (OSGi Users Forum Germany)OSGi Cloud Ecosystems (OSGi Users Forum Germany)
OSGi Cloud Ecosystems (OSGi Users Forum Germany)David Bosschaert
 
X plat dev - part ii publish
X plat dev - part ii publishX plat dev - part ii publish
X plat dev - part ii publishTekObserver
 
OSGi Cloud Ecosystems - David Bosschaert
OSGi Cloud Ecosystems - David BosschaertOSGi Cloud Ecosystems - David Bosschaert
OSGi Cloud Ecosystems - David Bosschaertmfrancis
 
Normalizing x pages web development
Normalizing x pages web development Normalizing x pages web development
Normalizing x pages web development Shean McManus
 
Working with Portlets in ADF and Webcenter
Working with Portlets in ADF and WebcenterWorking with Portlets in ADF and Webcenter
Working with Portlets in ADF and WebcenterDataNext Solutions
 
Get the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - OverviewGet the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - OverviewForgeRock
 
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...Igalia
 

Similaire à Glass 2.0 (20)

Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...
Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...
Fluentd – Making Logging Easy & Effective in a Multi-cloud & Hybrid Environme...
 
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudMeet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento Cloud
 
WebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the FutureWebSocket Perspectives and Vision for the Future
WebSocket Perspectives and Vision for the Future
 
OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...
OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...
OpenNebula Conf 2014 | Cloud Automation for OpenNebula by Kishorekumar Neelam...
 
OpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar Neelamegam
OpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar NeelamegamOpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar Neelamegam
OpenNebulaConf 2014 - Cloud Automation for OpenNebula - Kishorekumar Neelamegam
 
RIA front-ends: Flex, GWT integration in Nuxeo
RIA front-ends: Flex, GWT integration in NuxeoRIA front-ends: Flex, GWT integration in Nuxeo
RIA front-ends: Flex, GWT integration in Nuxeo
 
OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)
 
Glassfish An Introduction
Glassfish An IntroductionGlassfish An Introduction
Glassfish An Introduction
 
Conf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with StencilConf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with Stencil
 
OSGi Cloud Ecosystems
OSGi Cloud EcosystemsOSGi Cloud Ecosystems
OSGi Cloud Ecosystems
 
Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021
 
OSGi Cloud Ecosystems (OSGi Users Forum Germany)
OSGi Cloud Ecosystems (OSGi Users Forum Germany)OSGi Cloud Ecosystems (OSGi Users Forum Germany)
OSGi Cloud Ecosystems (OSGi Users Forum Germany)
 
Getting Started with ASP.NET vNext
Getting Started with ASP.NET vNextGetting Started with ASP.NET vNext
Getting Started with ASP.NET vNext
 
X plat dev - part ii publish
X plat dev - part ii publishX plat dev - part ii publish
X plat dev - part ii publish
 
OSGi Cloud Ecosystems - David Bosschaert
OSGi Cloud Ecosystems - David BosschaertOSGi Cloud Ecosystems - David Bosschaert
OSGi Cloud Ecosystems - David Bosschaert
 
Normalizing x pages web development
Normalizing x pages web development Normalizing x pages web development
Normalizing x pages web development
 
Sam2
Sam2Sam2
Sam2
 
Working with Portlets in ADF and Webcenter
Working with Portlets in ADF and WebcenterWorking with Portlets in ADF and Webcenter
Working with Portlets in ADF and Webcenter
 
Get the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - OverviewGet the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - Overview
 
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
 

Plus de ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Plus de ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Dernier

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 

Glass 2.0

  • 1. GLASS 2.0 Dale Henrichs VMware, Inc. ESUG 2011 Edinburgh, Scotland August 22, 2011
  • 2. GLASS 2.0 ● Overview of GLASS ● VMware Cloud Foundry ● tODE demo
  • 3. What is GLASS? ● A platform for deploying web-based Smalltalk applications in GemStone/S – Develop in Squeak/Pharo, Deploy in GemStone ● OmniBrowser-based development tools ● Compatibility layer for the Squeak and Pharo code base ● Many popular projects ported to GemStone/S
  • 4. Why use GLASS? ● GemStone/S is a high performance, high reliability alternative when your web application outgrows a single vm – With the “transparent persistence” and “transparent concurrency” features of GLASS ● Add multi-vm persistence to web app without changes to your source code – Free for commercial use
  • 5. Transparent Persistence ● GemStone is based on same persistence model used in Squeak/Pharo – Objects rooted in “Smalltalk” are considered persistent ● GemStone uses transactions instead of “save image” in Squeak/Pharo – commit ● Changed objects in vm saved to repository – abort ● Entire object graph in vm updated to current view – Dropping any changes on the floor
  • 6. Transparent Persistence (cont'd) ● GemStone transaction logic is embedded in the web framework – Abort/Commit on HTPP request boundaries ● Fresh view at start, changes saved to disk before user sees response ● No additional application-level code needed
  • 7. Transparent Concurrency ● On commit, GemStone merges changes to object graph with latest view in repository – if two vms concurrently update same object ● Commit conflict thrown ● Conflict management code embedded web framework – On conflict HTTP request is retried ● As if request had been delayed in arriving ● No additional application-level code needed
  • 8. VMware Cloud Foundry ● Cloud Foundry is a platform for building, deploying, and running cloud-based apps – CloudFoundry.com is a complete, hosted environment offered by VMware – CloudFoundry.org is an open source project
  • 9. Cloud Foundry and GLASS ● We are actively integrating GemStone/S and Maglev into Cloud Foundry framework ● Plans to include support for Seaside/Aida/Iliad/Pier ● When finished we'll have cloud-based hosting service for GLASS – Will make deploying to GemStone/S even easier
  • 10. tODE the Object-centric Development Environment ● A Proof of Concept for a Smalltalk IDE that runs in a web browser – Written in Seaside – Ported to Pharo and GemStone – MIT license ● A small, powerful framework that is easy to customize
  • 11. Why tODE? ● tODE was created to provide the Smalltalk IDE for deployed web-applications – The traditional Smalltalk GUI is too slow when used across the WAN – Limited access to machines running in cloud ● HTTP access only in Cloud Foundry ● Smalltalk without an IDE? – No way!
  • 12. tODE paradigm ● Modeled on a web browser – tODE is an “Image Browser” – URL is a Smalltalk expression – LINKs follow object references – HISTORY is a stack of object references – PAGE is a set of tabbed PANES for an object – PANE contains a rendered aspect of the object
  • 13. Navigation Pane History Pane SidebarPane Pane contents Frame Pane - Evaluate Smalltalkaspect of the current object History by when frames/objects List pane, a renderer Select tab visitedneeded Drawn of to view Expressions - - View, Help, Inspect, Class and Method Back button is derived from a specification in a pragma method The renderer - Search - etc.
  • 15. Conclusion ● Successful Proof of Concept – Functional ... – Simple, extensible framework – Need a (web framework) neutral rendering language – Need a bit of CSS and javascript polish
  • 16. Future work ● tODE – Head towards alpha release ● GemStone/S for Cloud Foundry – Keep an eye out for further info ● For more info – http://seaside.gemstone.com/ – http://cloudfoundry.org/ – http://code.google.com/p/tode/ – http://gemstonesoup.wordpress.com