SlideShare a Scribd company logo
1 of 55
Download to read offline
Hacking
Movable
Type
    A
guide
for
developers




      Six
Apart
Ltd.

                             Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  – Plugin
Structure
  – The
Registry
  – ConfiguraEon
DirecEves
  – Template
Tags
  – Objects
  – Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                       2
                                    Page

Course
Prerequisites
• This
course
requires
that
you
have
access
to
a

  working
Movable
Type
installa:on.
• This
course
also
assumes
that
you
are
familiar

  with
basic
system
administra:on
tasks,
such

  as
copying
and
ediEng
files.
• Finally,
this
course
requires
knowledge
of
the

  Perl
programming
language.



                                               Page

About
Hacking
• What
makes
a
good
programmer?
• Use
the
source
Luke.
• Copy
and
paste
is
your
friend.




                                   Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  ➡ Plugin
Structure
  – The
Registry
  – ConfiguraEon
DirecEves
  – Template
Tags
  – Objects
  – Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                       5
                                    Page

Plugin
Structure
• Your
config
file
  – plugins/MyPlugin/config.yaml
• Your
library
files
  – plugins/MyPlugin/lib/*
• Your
templates
  – plugins/MyPlugin/tmpl/*
• Your
staEc
images,
javascript
and
CSS
files
  – mt-static/plugins/MyPlugin/*



                                               Page

Plugin
Structure
• Other
important
files
and
directories
  –   MyPlugin-README.txt
  –   MyPlugin-LICENSE.txt
  –   plugins/MyPlugin/t/*
  –   plugins/MyPlugin/extlib/*
  –   plugins/MyPlugin/php/*




                                         Page

Plugin
Packaging
• Files
that
really
help
with
the
packaging
and

  distribuEon
of
an
enEre
plugin:
  – Makefile.PL
  – MANIFEST.SKIP




                                                   Page

Makefile.PL
use ExtUtils::MakeMaker;
WriteMakefile(
    NAME         => quot;My Plugin's Display Namequot;,
    VERSION      => '1.1',
    DISTNAME     => 'MyPlugin',
);




                                              Page

MANIFEST.SKIP
# version control
bCVS
(^|/).

# CPAN chain files
^MANIFEST
^Makefile
^META.yml$
^blib/
~$

# packages
.zip$
.tar.gz$


                               Page

CreaEng
a
Plugin
Zip
File
These
simple
sequence
of
commands:
> perl Makefile.PL
> make manifest
> make zipdist


Will
produce
the
perfect
MT
Plugin
zip
file:
• MyPlugin‐1.1.zip




                                              Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  – Plugin
Structure
  ➡ The
Registry
  – ConfiguraEon
DirecEves
  – Template
Tags
  – Objects
  – Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                     12
                                    Page

The
Movable
Type
Registry
• Movable
Type
is
a
config‐driven
applicaEon.
• The
“registry”
is
where
Movable
Type
stores
its

  configuraEon.
• Each
plugin
provides
a
mini‐registry
file,
config.yaml,

  that
defines
its
feature
set.
• The
config.yaml
file
is
then
merged
into
Movable

  Type’s
main
registry.
• Every
plugin
therefore
is
50%
configuraEon
and
50%

  code.

                                                      Page

config.yaml
name: Fluid App
id: FluidApp
author_link: http://www.majordojo.com/
author_name: Byrne Reese
description: This plugin provides enhanced support for Fluid.
version: 0.90
plugin_link: http://www.majordojo.com/projects/mt-fluid-app.php

applications:
  cms:
    methods:
       fluid_update: $FluidApp::FluidApp::Plugin::cms_update
callbacks:
  MT::App::CMS::template_source.header: $FluidApp::…::Plugin::xfrm




                                                                  Page

Yikes
What
is
all
that?




                    Page

A
YAML
Primer
•   YAML
==
“Yet
Another
Markup
Language”
•   XML
AlternaEve
•   Less
verbose
•   Human
readable
and
writable




                                            Page

XML
vs.
YAML
<?xml version=quot;1.0quot;>
<address>

 <first_name>Byrne</first_name>

 <last_name>Reese</last_name>

 <email>byrne@majordojo.com</email>

 <company>

 
 <name>Six Apart, Ltd.</name>

 
 <street_address>

 
    548 4th Street, San Francisco, CA 94107

 
 </street_address>

 </company>
</address>



                                                 Page

XML
vs.
YAML
address:

 
 first_name: Byrne

 
 last_name: Reese

 
 email: byrne@majordojo.com

 
 company:

 
 
 name: Six Apart, Ltd.

 
 
 street_address: 548 4th Street, 

 
 
 
 San Francisco, CA 94107




                                          Page

Your
First
Plugin
Place
this
in:
plugins/Good4Nothing/config.yaml
  name: Good for Nothing Plugin for Movable Type
  id: Good4Nothing
  key: Good4Nothing
  author_link: http://www.yourwebsite.com/
  author_name: Your Name Here
  description: This plugin is an example plugin.
  version: 1.0




                                                   Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  – Plugin
Structure
  – The
Registry
  ➡ Configura:on
Direc:ves
  – Template
Tags
  – Objects
  – Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                     20
                                    Page

Adding
a
Config
DirecEve
• What
is
a
configuraEon
direcEve?
• When
should
you
use
a
config
direcEve?
• What
are
the
alternaEves?




                                          Page

Adding
a
Config
DirecEve
name: Good for Nothing Plugin for Movable Type
id: Good4Nothing
key: Good4Nothing
author_link: http://www.yourwebsite.com/
author_name: Your Name Here
description: This plugin is an example plugin.
version: 1.0
config_settings:

 MyImageURL:
    default: http://path.com/images/foo.jpg




                                                 Page

Config
DirecEve
ProperEes
• Registry
properEes:
  – path
  – handler
  – alias




                                 Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  – Plugin
Structure
  – The
Registry
  – ConfiguraEon
DirecEves
  ➡ Template
Tags
  – Objects
  – Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                     24
                                    Page

Adding
a
Template
Tag
• What
is
a
template
tag?
• Where
are
template
tags
used?
• What
are
the
various
types
of
template
tags?




                                                 Page

Adding
a
Template
Tag
‐
config.yaml
name: Good for Nothing Plugin for Movable Type
id: Good4Nothing
key: Good4Nothing
author_link: http://www.yourwebsite.com/
author_name: Your Name Here
description: This plugin is an example plugin.
version: 1.0
config_settings:

 MyImageURL:
    default: http://path.com/images/foo.jpg
tags:
  function:
    MyImageURL: $Good4Nothing::Good4Nothing::Plugin::tag




                                                           Page

Adding
a
Template
Tag
‐
Handler
#   Good for Nothing Plugin for Movable Type
#   Author: Your Name Here, your.email@address.com
#   Copyright (C) 2008 Your Name Here
#   This file is licensed under the Artistic License,
#   or the same terms as Perl itself.

package Good4Nothing::Plugin;
use strict;

sub tag {
    my ($ctx) = @_;
    my $cfg = $ctx->{config};
    return $cfg->MyImageURL;
}

1; # Every module must return true


                                                        Page

More
about
Template
Tags
• Types
of
Tags
  – funcEon
  – block
  – modifiers
• CondiEonal
Tags
• Loops
• Template
Context


                                 Page

More
about
Template
Tags
tags:
  function:
    'SaySomething': $Example::Example::Plugin::SaySomething

    'SayWhatever': $Example::Example::Plugin::SayWhatever
  block:
      'LoopTenTimes': $Example::Example::Plugin::LoopTenTimes
      'IfOdd?': $Example::Example::Plugin::IfOdd




                                                         Page

More
about
Template
Tags
# Example: <mt:SaySomething>
sub SaySomething {
  my ($ctx, $args) = @_;
  return quot;Somethingquot;quot;;
}

# Example: <mt:SayWhatever say=”Hello”>
sub SayWhatever {
  my ($ctx, $args) = @_;
  # What the person passed in through the
  #   argument 'say'
  my $input = $args->{'say'};
  return $input;
}



                                            Page

More
about
Template
Tags
# Example: <mt:LoopTenTimes>...</mt:LoopTenTimes>
sub LoopTenTimes {
  my ($ctx, $args, $cond) = @_;
  my $out = quot;quot;;
  my $builder = $ctx->stash('builder');
  my $tokens = $ctx->stash('tokens');
  for (my $i = 1; $i <= 10; $i++) {

   $ctx->stash(quot;current_loop_numberquot;,$i);

 
      $out .= quot;$i * quot; . $builder->build($ctx,$tokens,$cond);
  }
  return $out;
}

# Example: <mt:IfOdd>do this</mt:IfOdd>
sub IfOdd {
  my ($ctx, $args, $cond) = @_;
  my $num = $ctx->stash('current_loop_number');
  if ($num % 2 == 0) {
    return 0;
  } else {

 
      return 1;
  }
}

                                                                  Page

Adding
a
Tag
Modifier
• What
is
a
tag
modifier?
• Example
modifiers:
  –   <mt:block capitalize=“1”>abc</block>
  –   <mt:block ltrim=“1”>         foo</mt:block>
  –   <mt:block regex_replace=“/foo/gi”,”bar”>
          foo
      </mt:block>
  –   <mt:block count_words=“1”>Hello World</mt:block>




                                                         Page

Adding
a
Template
Tag
‐
config.yaml
name: Good for Nothing Plugin for Movable Type
id: Good4Nothing
key: Good4Nothing
author_link: http://www.yourwebsite.com/
author_name: Your Name Here
description: This plugin is an example plugin.
version: 1.0
config_settings:

 MyImageURL:
    default: http://path.com/images/foo.jpg
tags:
  modifier:
    lolcats: $Good4Nothing::Good4Nothing::Plugin::lolcats




                                                        Page

Adding
a
Modifier
‐
Handler
#   Good for Nothing Plugin for Movable Type
#   Author: Your Name Here, your.email@address.com
#   Copyright (C) 2008 Your Name Here
#   This file is licensed under the Artistic License,
#   or the same terms as Perl itself.

package Good4Nothing::Plugin;
use strict;

sub lolcats {
  my ($str, $val, $ctx) = @_;
  return quot;CAN I HAZ “. uc($str);
}

1; # Every module must return true



                                                        Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  – Plugin
Structure
  – The
Registry
  – ConfiguraEon
DirecEves
  – Template
Tags
  ➡ Objects
  – Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                     35
                                    Page

Objects
and
Data
Persistence
• An
overview
of
Movable
Type
Objects
  – MT::Entry
  – MT::Comment
  – Etc.
• Before
and
afer
a
record
is
modified
in
the

  Movable
Type
database,
an
event
is
fired.
• Plugins
can
register
callbacks
for
those
events.


                                                 Page

About
MT
Objects
• Movable
Type’s
Data
AbstracEon
Layer
  – Data::ObjectDriver
  – MT::ObjectDriver
  – MT::Object
• Memcached
Support
• Event
PropagaEon
• Gegers/Segers


                                         Page

InteracEng
with
MT::Objects
•   MT::MyObject‐>new()
•   $obj‐>save()
•   MT::MyObject‐>load($terms,
$arguments)
•   MT::MyObject‐>load_iter($terms,
$arguments)
•   $obj‐>remove($terms,
$arguments)
•   MT::MyObject‐>remove_all
•   MT::MyObject‐>count($terms)
•   MT::MyObject‐>exists($terms)
•   $obj‐>clone()

                                                  Page

new()
and
save()
my $foo = MT::Foo->new;
$foo->first_name(’Byrne');
$foo->last_name(‘Reese’);
$foo->save()
    or die quot;Saving foo failed: quot;, $foo->errstr;




                                              Page

load()
my @objects = MT::Foo->load(

 
 {

 
 
 title => quot;Hello Worldquot;,

 
 
 foo => quot;barquot;,

 
 }, {

 
 
 sort => 'created_on',

 
 
 direction => 'ascend',

 
 }
);

foreach my $obj (@objects) {

 print $obj->baz();

 # do something
}


                                Page

load_iter()
my $iter = MT::Foo->load_iter(

 
 {

 
 
 title => quot;Hello Worldquot;,

 
 
 foo => quot;barquot;,

 
 }, {

 
 
 sort => 'created_on',

 
 
 direction => 'ascend',

 
 }
);

while (my $obj = $iter->()) {

 print $obj->baz();

 # do something
}


                                 Page

load
and
load_iter
OpEons
•   sort
•   direcEon
•   limit
•   lastn
•   offset
•   start_val
•   range
•   range_incl
•   join

•   unique
                                    Page

CreaEng
Your
Own
Object
•   Schema
definiEon
•   Registering
database
indexes
•   Record
audiEng
•   Primary
keys
•   Meta
Data




                                   Page

MT::MyObject
package Example::MyObject;

use strict;
use base qw( MT::Object );

__PACKAGE__->install_properties({

   column_defs => {

      'id'            => 'integer not null auto_increment',

      'blog_id'       => 'integer',

      'some_property' => 'string(100) not null',

   },

   audit => 1,

   indexes => {

      id => 1,
     },
     datasource => 'myplugin_myobject',
     primary_key => 'id',
});


                                                          Page

MT::Object
Database
Data
Types
•   string
•   integer
•   boolean
•   smallint
•   dateEme
•   blob
•   text
•   float



                                     Page

Extending
ExisEng
Objects
• Extending
exisEng
objects
• schema_version
registry
property




                                     Page

Extending
ExisEng
Objects

name: Example Plugin for Movable Type
id: Example
key: Example
description: This plugin is an example plugin
version: 1.0
schema_version: 2
object_types:
    entry:
       
is_featured: smallint



                                          Page

Extending
ExisEng
Objects

• Which
then
let’s
you
do
this:

use MT::Entry;
my $entry = MT::Entry->load($id);
$entry->is_featured(1);
$entry->save;




                                     Page

Developing
for
Movable
Type
in
2
Days

• Day
1:
The
Basics
  – Plugin
Structure
  – The
Registry
  – ConfiguraEon
DirecEves
  – Template
Tags
  – Objects
  ➡ Callbacks

• Day
2:
Building
User
Interfaces
  – Menus
  – New
ApplicaEon
Screens
  – Dialogs
  – LisEng
Screens

                                     49
                                    Page

Movable
Type
Callbacks
• Nomenclature:
  – Event,
Callback,
Fire,
Listening
• Event
Types
  – Object
Level
  – ApplicaEon
Level
  – TransformaEon




                                       Page

Object‐Level
Callbacks
• Events:
  – MT::ObjectName::pre_save
  – MT::ObjectName::post_save
  – MT::ObjectName::pre_load
  – MT::ObjectName::post_load
  – MT::ObjectName::pre_remove
  – MT::ObjectName::pre_remove_all
  – MT::ObjectName::post_remove_all


                                      Page

Adding
a
Callback
‐
config.yaml
name: Good for Nothing Plugin for Movable Type
id: Good4Nothing
key: Good4Nothing
author_link: http://www.yourwebsite.com/
author_name: Your Name Here
description: This plugin is an example plugin.
version: 1.0
callbacks:
  MT::Entry::pre_save: $Example::Example::Plugin::pre_save




                                                        Page

Adding
a
Callback
‐
Handler
package Example::Plugin;
use strict;

sub pre_save {
  my ($cb, $obj) = @_;
  # $cb - holds a reference to the callback object
  # $obj - holds a reference to the object about
  #   to be saved
  # do your thing
  if ($error) {
    return $cb->error(“Error Message”);
  }
}


                                                     Page

Exercise:
Add
a
Callback
• Your
Mission:
Add
a
record
to
the
Movable

  Type
AcEvity
Log,
just
afer
an
entry
is
saved.
• About
Logging:

MT->log({
  message => quot;DemoPlugin: an object was saved.quot;,
  class => 'system',
  level => MT::Log::INFO() });
});




                                                   Page

End
Day
1
    Byrne
Reese
byrne@sixapart.com




                     Page


More Related Content

What's hot

User Experience is dead. Long live the user experience!
User Experience is dead. Long live the user experience!User Experience is dead. Long live the user experience!
User Experience is dead. Long live the user experience!Greg Bell
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basiclittlebtc
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Juliano Martins
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoJuliano Martins
 
Essential html tweaks for accessible themes
Essential html tweaks for accessible themesEssential html tweaks for accessible themes
Essential html tweaks for accessible themesMartin Stehle
 
关于 Html5 那点事
关于 Html5 那点事关于 Html5 那点事
关于 Html5 那点事Sofish Lin
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next webIan Forrester
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?brynary
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Maurizio Pelizzone
 
Developers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLIDevelopers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLIWP Engine
 
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet VikingAndrew Collier
 
In some simple steps, your site can stand out from the rest. Here's how...
In some simple steps, your site can stand out from the rest. Here's how... In some simple steps, your site can stand out from the rest. Here's how...
In some simple steps, your site can stand out from the rest. Here's how... British Council
 
JSUG - Spring by Christoph Pickl
JSUG - Spring by Christoph PicklJSUG - Spring by Christoph Pickl
JSUG - Spring by Christoph PicklChristoph Pickl
 
The Structure of Web Code: A Case For Polymer, November 1, 2014
The Structure of Web Code: A Case For Polymer, November 1, 2014The Structure of Web Code: A Case For Polymer, November 1, 2014
The Structure of Web Code: A Case For Polymer, November 1, 2014Tommie Gannert
 
Optaros Surf Code Camp Dispatcher
Optaros Surf Code Camp DispatcherOptaros Surf Code Camp Dispatcher
Optaros Surf Code Camp DispatcherJeff Potts
 
Optaros Surf Code Camp Lab 3
Optaros Surf Code Camp Lab 3Optaros Surf Code Camp Lab 3
Optaros Surf Code Camp Lab 3Jeff Potts
 

What's hot (20)

User Experience is dead. Long live the user experience!
User Experience is dead. Long live the user experience!User Experience is dead. Long live the user experience!
User Experience is dead. Long live the user experience!
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basic
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile Híbrido
 
Essential html tweaks for accessible themes
Essential html tweaks for accessible themesEssential html tweaks for accessible themes
Essential html tweaks for accessible themes
 
EPiServer Web Parts
EPiServer Web PartsEPiServer Web Parts
EPiServer Web Parts
 
Seven Reasons for Code Bloat
Seven Reasons for Code BloatSeven Reasons for Code Bloat
Seven Reasons for Code Bloat
 
关于 Html5 那点事
关于 Html5 那点事关于 Html5 那点事
关于 Html5 那点事
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next web
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Developers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLIDevelopers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLI
 
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
 
In some simple steps, your site can stand out from the rest. Here's how...
In some simple steps, your site can stand out from the rest. Here's how... In some simple steps, your site can stand out from the rest. Here's how...
In some simple steps, your site can stand out from the rest. Here's how...
 
JSUG - Spring by Christoph Pickl
JSUG - Spring by Christoph PicklJSUG - Spring by Christoph Pickl
JSUG - Spring by Christoph Pickl
 
Html5
Html5Html5
Html5
 
PHP
PHPPHP
PHP
 
The Structure of Web Code: A Case For Polymer, November 1, 2014
The Structure of Web Code: A Case For Polymer, November 1, 2014The Structure of Web Code: A Case For Polymer, November 1, 2014
The Structure of Web Code: A Case For Polymer, November 1, 2014
 
Optaros Surf Code Camp Dispatcher
Optaros Surf Code Camp DispatcherOptaros Surf Code Camp Dispatcher
Optaros Surf Code Camp Dispatcher
 
Optaros Surf Code Camp Lab 3
Optaros Surf Code Camp Lab 3Optaros Surf Code Camp Lab 3
Optaros Surf Code Camp Lab 3
 

Similar to Hacking Movable Type Training - Day 1

Yakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep DiveYakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep Dive360|Conferences
 
Fedora App Slide 2009 Hastac
Fedora App Slide 2009 HastacFedora App Slide 2009 Hastac
Fedora App Slide 2009 HastacLoretta Auvil
 
Tesi Laurea Specialistica
Tesi Laurea SpecialisticaTesi Laurea Specialistica
Tesi Laurea Specialisticalando84
 
Robert Crawford Web Resume
Robert Crawford Web ResumeRobert Crawford Web Resume
Robert Crawford Web Resumerkcrawf
 
Roll-out of the NYU HSL Website and Drupal CMS
Roll-out of the NYU HSL Website and Drupal CMSRoll-out of the NYU HSL Website and Drupal CMS
Roll-out of the NYU HSL Website and Drupal CMSChris Evjy
 
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...Alpen-Adria-Universität
 
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909Yusuke Wada
 
The Yahoo Open Stack
The Yahoo Open StackThe Yahoo Open Stack
The Yahoo Open StackMegan Eskey
 
Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009Ricardo Varela
 
Really Simple Document Management - 2009 Update
Really Simple Document Management - 2009 UpdateReally Simple Document Management - 2009 Update
Really Simple Document Management - 2009 UpdateAlfresco Software
 
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...Atlassian
 
Plugins 2.0: The Overview
Plugins 2.0: The OverviewPlugins 2.0: The Overview
Plugins 2.0: The OverviewAtlassian
 
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)jjhuff
 
Agilebuddy Users Guide
Agilebuddy Users GuideAgilebuddy Users Guide
Agilebuddy Users Guideagilebuddy
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developerslisab517
 

Similar to Hacking Movable Type Training - Day 1 (20)

Yakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep DiveYakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep Dive
 
Fedora App Slide 2009 Hastac
Fedora App Slide 2009 HastacFedora App Slide 2009 Hastac
Fedora App Slide 2009 Hastac
 
Tesi Laurea Specialistica
Tesi Laurea SpecialisticaTesi Laurea Specialistica
Tesi Laurea Specialistica
 
Mobile Marketing Forum - MOOGA
Mobile Marketing Forum - MOOGAMobile Marketing Forum - MOOGA
Mobile Marketing Forum - MOOGA
 
Robert Crawford Web Resume
Robert Crawford Web ResumeRobert Crawford Web Resume
Robert Crawford Web Resume
 
Grails Overview
Grails OverviewGrails Overview
Grails Overview
 
Roll-out of the NYU HSL Website and Drupal CMS
Roll-out of the NYU HSL Website and Drupal CMSRoll-out of the NYU HSL Website and Drupal CMS
Roll-out of the NYU HSL Website and Drupal CMS
 
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont...
 
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
 
The Yahoo Open Stack
The Yahoo Open StackThe Yahoo Open Stack
The Yahoo Open Stack
 
Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009
 
Really Simple Document Management - 2009 Update
Really Simple Document Management - 2009 UpdateReally Simple Document Management - 2009 Update
Really Simple Document Management - 2009 Update
 
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ...
 
Plugins 2.0: The Overview
Plugins 2.0: The OverviewPlugins 2.0: The Overview
Plugins 2.0: The Overview
 
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
 
Agilebuddy Users Guide
Agilebuddy Users GuideAgilebuddy Users Guide
Agilebuddy Users Guide
 
Cutbots - Presentation
Cutbots - PresentationCutbots - Presentation
Cutbots - Presentation
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
 
Rich Web Clients 20081118
Rich Web Clients 20081118Rich Web Clients 20081118
Rich Web Clients 20081118
 
HTML Parsing With Hpricot
HTML Parsing With HpricotHTML Parsing With Hpricot
HTML Parsing With Hpricot
 

More from Byrne Reese

Advanced RingCentral API Use Cases
Advanced RingCentral API Use CasesAdvanced RingCentral API Use Cases
Advanced RingCentral API Use CasesByrne Reese
 
Melody Designer Training
Melody Designer TrainingMelody Designer Training
Melody Designer TrainingByrne Reese
 
Building Web Sites With Movable Type
Building Web Sites With Movable TypeBuilding Web Sites With Movable Type
Building Web Sites With Movable TypeByrne Reese
 
Online Communities
Online CommunitiesOnline Communities
Online CommunitiesByrne Reese
 
Timespeople Community Features
Timespeople Community FeaturesTimespeople Community Features
Timespeople Community FeaturesByrne Reese
 
Evolution Of Open
Evolution Of OpenEvolution Of Open
Evolution Of OpenByrne Reese
 

More from Byrne Reese (6)

Advanced RingCentral API Use Cases
Advanced RingCentral API Use CasesAdvanced RingCentral API Use Cases
Advanced RingCentral API Use Cases
 
Melody Designer Training
Melody Designer TrainingMelody Designer Training
Melody Designer Training
 
Building Web Sites With Movable Type
Building Web Sites With Movable TypeBuilding Web Sites With Movable Type
Building Web Sites With Movable Type
 
Online Communities
Online CommunitiesOnline Communities
Online Communities
 
Timespeople Community Features
Timespeople Community FeaturesTimespeople Community Features
Timespeople Community Features
 
Evolution Of Open
Evolution Of OpenEvolution Of Open
Evolution Of Open
 

Recently uploaded

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Recently uploaded (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

Hacking Movable Type Training - Day 1