A CMS framework in Erlang. Marc Worrell WhatWebWhat



Similar documents
PROJECT MANAGEMENT SYSTEM

English. Asema.com Portlets Programmers' Manual

Shop by Manufacturer Custom Module for Magento

9 Tried and Tested Tips to Increase the Power of your Magento Store

Table of contents. HTML5 Data Bindings SEO DMXzone

Lecture 6 Cloud Application Development, using Google App Engine as an example

User Manual. Version 1.0 Initial Public Release Build 327. Copyright Notice

PROPOSED SOLUTIONS FOR THE DESIGN & DEVELOPMENT OF COUPON WEBSITE

Elgg 1.8 Social Networking

Shipbeat Magento Module. Installation and user guide

MUNIS Leave Request System (Employee Self Service) Time Off Approver

alternative solutions, including: STRONG SECURITY for managing these security concerns. PLATFORM CHOICE LOW TOTAL COST OF OWNERSHIP

Novell Identity Manager

CORD Monitoring Service

Kentico CMS Web Parts

Large-Scale Web Applications

Drupal Performance Tuning

Google Trusted Stores Setup in Magento

Making Content Editable. Create re-usable templates with total control over the sections you can (and more importantly can't) change.

Site Store Pro. INSTALLATION GUIDE WPCartPro Wordpress Plugin Version

1: 2: : 3.1: 3.2: 4: 5: & CAPTCHA

Drupal CMS for marketing sites

ekomimeetsmage Manual for version 1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0

easy_review version BoostMyShop

CommonSpot Content Server Version 6.2 Release Notes

User Guide for Smart Former Gold (v. 1.0) by IToris Inc. team

eccharts: Behind the scenes

Simple Tips to Improve Drupal Performance: No Coding Required. By Erik Webb, Senior Technical Consultant, Acquia

WEB, HYBRID, NATIVE EXPLAINED CRAIG ISAKSON. June 2013 MOBILE ENGINEERING LEAD / SOFTWARE ENGINEER

Web Development using PHP (WD_PHP) Duration 1.5 months

This course provides students with the knowledge and skills to develop ASP.NET MVC 4 web applications.

The importance of Drupal Cache. Luis F. Ribeiro Ci&T Inc. 2013

CSCI110 Exercise 4: Database - MySQL

Table of Contents INTRODUCTION... 2 HOME Dashboard... 5 Reminders... 8 Announcements Preferences Recent Items REQUESTS...

NS DISCOVER 4.0 ADMINISTRATOR S GUIDE. July, Version 4.0

The Electronic Voting System - EVS

Web development... the server side (of the force)

ADMINISTRATOR GUIDE VERSION

The McGill Knowledge Base. Last Updated: August 19, 2014

Project Orwell: Distributed Document Integrity Verification

Getting Started with AWS. Hosting a Static Website

Analytics Configuration Reference

Jive Connects for Openfire

SAHARA FASHION15 RESPONSIVE MAGENTO THEME

Magento Theme EM0006 for Computer store

SMSNotify Extension. User Documentation. Automated SMS sender and customer relationship tool. SMSNotify User Documentation 1

Jan van Kuijk. Joomla webdesigner Joomla is my profession SEO specialist Google AdWords Partner

Sitecore Dashboard User Guide

Beyond The Web Drupal Meets The Desktop (And Mobile) Justin Miller Code Sorcery Workshop, LLC

Cofred Automated Payments Interface (API) Guide

Cloudfinder for Office 365 User Guide. November 2013

Order Manager Toolkit

CloudCall for Salesforce- Quick Start Guide. CloudCall for Act! CRM Quick Start Guide

Recruitment Management System (RMS) User Manual

Login/ Logout RMS Employer Login Go to Employer and enter your username and password in the Employer Login section. Click on the LOGIN NOW button.

Accelerating Wordpress for Pagerank and Profit

Version 1.0 January Xerox Phaser 3635MFP Extensible Interface Platform

Jim2 ebusiness Framework Installation Notes

Module Private Sales User Manual

INTRODUCING ORACLE APPLICATION EXPRESS. Keywords: database, Oracle, web application, forms, reports

PROJECT REPORT OF BUILDING COURSE MANAGEMENT SYSTEM BY DJANGO FRAMEWORK

Web Work Module User s Guide

DOSarrest Security Services (DSS) Version 4.0

Vector HelpDesk - Administrator s Guide

Using your content management system EXPRESSIONENGINE CMS DOCUMENTATION UKONS

7 The Shopping Cart Module

General principles and architecture of Adlib and Adlib API. Petra Otten Manager Customer Support

5 Mistakes to Avoid on Your Drupal Website

Course 20489B: Developing Microsoft SharePoint Server 2013 Advanced Solutions OVERVIEW

BASHO DATA PLATFORM SIMPLIFIES BIG DATA, IOT, AND HYBRID CLOUD APPS

DOSarrest Security Services (DSS) Version 4.0

MAGENTO THEME SHOE STORE

How to integrate Exoclick s conversions tracking with. tracking software voluum

Using WebLOAD to Monitor Your Production Environment

(An) Optimal Drupal 7 Module Configuration for Site Performance JOE PRICE

Cloudwords Drupal Module. Quick Start Guide

MAGENTO TRAINING PROGRAM

IIS SECURE ACCESS FILTER 1.3

BT MEDIA JOOMLA COMPONENT

Certified PHP/MySQL Web Developer Course

[Jet-Magento Integration]

Microsoft TMG Replacement with NetScaler

Portals and Hosted Files

Integrity Checking and Monitoring of Files on the CASTOR Disk Servers

SOA, case Google. Faculty of technology management Information Technology Service Oriented Communications CT30A8901.

Configuration Manual

Open Source Content Management System for content development: a comparative study

Virtual Communities Operations Manual

Using WhatCounts Publicaster Edition To Send Transactional s

Delegated Administration Quick Start

Category: Business Process and Integration Solution for Small Business and the Enterprise

A Web- based Approach to Music Library Management. Jason Young California Polytechnic State University, San Luis Obispo June 3, 2012

Bucks PSN. Updata Self-Service Portal User Guide. Version 1.0

Transcription:

A CMS framework in Erlang Marc Worrell WhatWebWhat

Overview Yet another CMS? Why Erlang? Inside Zotonic Future directions

Websites: a history First generation Static text, images. Second generation Database driven, templates, CMS. And now. Highly interactive, realtime, data exchange, personalization

Our wish list CMS Framework Connectivity Fast Front-ender friendly Efficient use of hardware

Now: <? PHP?> Slow more code = slower Shared nothing amnesia doesn t make it faster Big non threaded web server forget long living connections

Now: Python et al One process per core Multithreading? Better Not No sharing of state and data Memcache is common state On failure your server crashes

Erlang? Website is communication hub Many kinds of data streams Many parallel connections Lots of short requests Long living connections This looks like a phone switch!

Why not Erlang? Esoteric language? Great error/failure handling Smallest language I ve ever used Mature String processing? Not needed

Demo time!

What is in the box? Admin interface Member administration Log on/off, register, password reminder Page creation Comment system Easy menu creation Calendar Image/video handling Image manipulation Atom feeds XMPP PubSub API SEO, Solr, Twitter

Getting technical Where we started Our data model Open source puzzle OTP hierarchy Modules URL dispatching The building blocks

Where we started We created the social network/ information management system Anymeta Frustration with PHP and MySQL Fast experience in low level stuff Rediscovered Erlang Inspired by Nitrogen

Simplified data model

Complete data model

Open source puzzle Webmachine Nitrogen ErlyDTL Mochiweb, exmpp, erlang-gettext, erlang-oauth, esmtp PostgreSQL driver: epgsql

Simplistic diagram

OTP Hierarchy

Modules gen_server building blocks in directories dispatch rules, resources, templates, css, javascript, images, translations, template filters, actions, validations, scomps, api services, models hooks into event system a site is a module

Notification system Is how modules extend and offer functionality Observe notifications Primitives: notify, notify1, fold, map, first

URL Dispatching Dispatch rules per site Modules extend dispatch rules Dispatch rules have names {page, ["page", id, slug], resource_page, [ {template, {cat, "page.tpl"}} ]}

The page resource Webmachine resource 404 check Authorization check and redirect Template selection

Templates Extended ErlyDTL Expressions: {% if a + b > c %} Data types: {latest cat= news } [a,value,list] Data access: m.rsc.[id].title Templates can be included by category Higher priority modules overrule

Template example <ul>! {% for id in m.search[{fulltext cat='news' text=q.qs}] %} <li> <h3> <a href= {{ m.rsc[id].page_url }} >{{m.rsc[id].title}}</a> </h3> <p>{{ m.rsc[id].summary }}</p> </li> {% empty %} <li>no news today.</li> {% endfor %} </ul>

Scomps - screen components For when you need more logic than a template can handle Erlang module Cacheable Example: {% menu id=id %}

Event (Ajax) handling Ajax postbacks Form submits Calls event/2 function {% button postback={click foo= bar } text= click me %} event({postback, {click, Args}, _Trigger, _Target}, Context) -> z_render:wire({alert, [{text, hello }]}, Context).

Push connections Uses either Comet or WebSockets Attaches to the page process Transports Javascript to the UA

API Services API method is an Erlang module /api/mymodule/mymethod in /services module directory -module(service_mymodule_mymethod). -svc_title("say hello to the world."). -svc_needauth(false). -export([process_get/2]). process_get(_reqdata, Context) -> z_convert:to_json([{message, Hello World! }]).

Performance optimizations Caching (do not hit the database) Prevent copying data Memo caching in process dictionary Pre-compute, store publishable html Share computations between requests

Compute less Parallel requests have similar computations Only one time calculated Lightweight and simple optimization against /. effect Uses memo functionality of depcache Kind of caching, with 0 expire

Future directions Scaling up Elastic Zotonic Distributed Fault tolerant Buzz word compliancy Information exchange hub Publish & subscribe (XMPP, PubSubH )

Elastic Zotonic x ma class Who: Maximonster Interactive Things What: MaxClass, a social network for education Different from what you know

Elastic Zotonic Goals Scalable Robust Fault tolerant Low maintenance Low cost, less hardware Keep it simple s

Elastic Zotonic Solution Direction Homogeneous boxes Distributed store Files in store Queues everywhere Dynamic indices Range queries Next/prev queries Full text queries Process request near the session Simple load balancing

Elastic Zotonic Software? Riak (cap) & Riak Search Hibari (CAp) RabbitMQ ElasticSearch Sphinx Solr

Elastic Zotonic When? Release in Q4 2010 Help will be welcome :-)

Thanks To Tim Benniks, Arjan Scherpenisse, Peet Sneekes Basho, Mochi Media, Rusty Klophaus, Will Glozer, Evan Miller, Roberto Saccon, Geoff Cant and many many others.

Questions?