Hacking Movable Type Training - Day 1

Byrne Reese
Byrne ReesePrincipal at Endevver, LLC
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

1 of 55

Recommended

Hacking Movable Type Training - Day 2 by
Hacking Movable Type Training - Day 2Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2Byrne Reese
1.8K views34 slides
Plone Interactivity by
Plone InteractivityPlone Interactivity
Plone InteractivityEric Steele
748 views194 slides
Bringing "real life" relations to Plone by
Bringing "real life" relations to PloneBringing "real life" relations to Plone
Bringing "real life" relations to PloneMassimo Azzolini
1.1K views71 slides
Plone Konferenz 2012 by
Plone Konferenz 2012Plone Konferenz 2012
Plone Konferenz 2012Massimo Azzolini
1.7K views63 slides
Joomla Template Development by
Joomla Template DevelopmentJoomla Template Development
Joomla Template DevelopmentLinda Coonen
1.8K views37 slides
Taking your Web App for a walk by
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walkJens-Christian Fischer
3.5K views93 slides

More Related Content

What's hot

User Experience is dead. Long live the user experience! by
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
1.5K views67 slides
Mozilla Firefox Extension Development, Course 1: Basic by
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basiclittlebtc
2.8K views117 slides
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces... by
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
13.7K views32 slides
Desenvolvimento Mobile Híbrido by
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoJuliano Martins
3.4K views43 slides
Essential html tweaks for accessible themes by
Essential html tweaks for accessible themesEssential html tweaks for accessible themes
Essential html tweaks for accessible themesMartin Stehle
1.2K views86 slides
EPiServer Web Parts by
EPiServer Web PartsEPiServer Web Parts
EPiServer Web PartsEPiServer Meetup Oslo
6.4K views19 slides

What's hot(20)

User Experience is dead. Long live the user experience! by Greg Bell
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 Bell1.5K views
Mozilla Firefox Extension Development, Course 1: Basic by littlebtc
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basic
littlebtc2.8K views
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces... by Juliano Martins
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 Martins13.7K views
Desenvolvimento Mobile Híbrido by Juliano Martins
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile Híbrido
Juliano Martins3.4K views
Essential html tweaks for accessible themes by Martin Stehle
Essential html tweaks for accessible themesEssential html tweaks for accessible themes
Essential html tweaks for accessible themes
Martin Stehle1.2K views
关于 Html5 那点事 by Sofish Lin
关于 Html5 那点事关于 Html5 那点事
关于 Html5 那点事
Sofish Lin938 views
plumbing for the next web by Ian Forrester
plumbing for the next webplumbing for the next web
plumbing for the next web
Ian Forrester1.2K views
What's new in Rails 2? by brynary
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
brynary6.8K views
Use Symfony2 components inside WordPress by Maurizio Pelizzone
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
Maurizio Pelizzone9.5K views
Developers, Be a Bada$$ with WP-CLI by WP Engine
Developers, Be a Bada$$ with WP-CLIDevelopers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLI
WP Engine1.1K views
[PyConZA 2017] Web Scraping: Unleash your Internet Viking by Andrew Collier
[PyConZA 2017] Web Scraping: Unleash your Internet Viking[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
Andrew Collier322 views
In some simple steps, your site can stand out from the rest. Here's how... by British Council
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 Council757 views
JSUG - Spring by Christoph Pickl by Christoph Pickl
JSUG - Spring by Christoph PicklJSUG - Spring by Christoph Pickl
JSUG - Spring by Christoph Pickl
Christoph Pickl639 views
The Structure of Web Code: A Case For Polymer, November 1, 2014 by Tommie Gannert
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
Tommie Gannert816 views
Optaros Surf Code Camp Dispatcher by Jeff Potts
Optaros Surf Code Camp DispatcherOptaros Surf Code Camp Dispatcher
Optaros Surf Code Camp Dispatcher
Jeff Potts580 views
Optaros Surf Code Camp Lab 3 by Jeff Potts
Optaros Surf Code Camp Lab 3Optaros Surf Code Camp Lab 3
Optaros Surf Code Camp Lab 3
Jeff Potts1K views

Similar to Hacking Movable Type Training - Day 1

Yakov Fain - Design Patterns a Deep Dive by
Yakov Fain - Design Patterns a Deep DiveYakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep Dive360|Conferences
562 views32 slides
Fedora App Slide 2009 Hastac by
Fedora App Slide 2009 HastacFedora App Slide 2009 Hastac
Fedora App Slide 2009 HastacLoretta Auvil
610 views27 slides
Tesi Laurea Specialistica by
Tesi Laurea SpecialisticaTesi Laurea Specialistica
Tesi Laurea Specialisticalando84
335 views21 slides
Mobile Marketing Forum - MOOGA by
Mobile Marketing Forum - MOOGAMobile Marketing Forum - MOOGA
Mobile Marketing Forum - MOOGAiken Solutions - Web Space-
3K views32 slides
Robert Crawford Web Resume by
Robert Crawford Web ResumeRobert Crawford Web Resume
Robert Crawford Web Resumerkcrawf
6.1K views2 slides
Grails Overview by
Grails OverviewGrails Overview
Grails OverviewChristopher Bartling
3.6K views32 slides

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

Yakov Fain - Design Patterns a Deep Dive by 360|Conferences
Yakov Fain - Design Patterns a Deep DiveYakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep Dive
360|Conferences562 views
Fedora App Slide 2009 Hastac by Loretta Auvil
Fedora App Slide 2009 HastacFedora App Slide 2009 Hastac
Fedora App Slide 2009 Hastac
Loretta Auvil610 views
Tesi Laurea Specialistica by lando84
Tesi Laurea SpecialisticaTesi Laurea Specialistica
Tesi Laurea Specialistica
lando84335 views
Robert Crawford Web Resume by rkcrawf
Robert Crawford Web ResumeRobert Crawford Web Resume
Robert Crawford Web Resume
rkcrawf6.1K views
Roll-out of the NYU HSL Website and Drupal CMS by Chris Evjy
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
Chris Evjy1.5K views
Measuring Quality of Experience for MPEG-21-based Cross-Layer Multimedia Cont... by Alpen-Adria-Universität
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 by Yusuke Wada
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
Yusuke Wada2.2K views
The Yahoo Open Stack by Megan Eskey
The Yahoo Open StackThe Yahoo Open Stack
The Yahoo Open Stack
Megan Eskey7.4K views
Blueprint talk at Open Hackday London 2009 by Ricardo Varela
Blueprint talk at Open Hackday London 2009Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009
Ricardo Varela1.8K views
Really Simple Document Management - 2009 Update by Alfresco Software
Really Simple Document Management - 2009 UpdateReally Simple Document Management - 2009 Update
Really Simple Document Management - 2009 Update
Alfresco Software86.5K views
Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated ... by Atlassian
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 ...
Atlassian786 views
Plugins 2.0: The Overview by Atlassian
Plugins 2.0: The OverviewPlugins 2.0: The Overview
Plugins 2.0: The Overview
Atlassian584 views
Inside Picnik: How We Built Picnik (and What We Learned Along the Way) by jjhuff
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)
jjhuff8.1K views
Agilebuddy Users Guide by agilebuddy
Agilebuddy Users GuideAgilebuddy Users Guide
Agilebuddy Users Guide
agilebuddy 267 views
iPhone Development For Experienced Web Developers by lisab517
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
lisab517537 views

More from Byrne Reese

Advanced RingCentral API Use Cases by
Advanced RingCentral API Use CasesAdvanced RingCentral API Use Cases
Advanced RingCentral API Use CasesByrne Reese
260 views38 slides
Melody Designer Training by
Melody Designer TrainingMelody Designer Training
Melody Designer TrainingByrne Reese
2.9K views77 slides
Building Web Sites With Movable Type by
Building Web Sites With Movable TypeBuilding Web Sites With Movable Type
Building Web Sites With Movable TypeByrne Reese
1.5K views39 slides
Online Communities by
Online CommunitiesOnline Communities
Online CommunitiesByrne Reese
512 views67 slides
Timespeople Community Features by
Timespeople Community FeaturesTimespeople Community Features
Timespeople Community FeaturesByrne Reese
482 views17 slides
Evolution Of Open by
Evolution Of OpenEvolution Of Open
Evolution Of OpenByrne Reese
3.9K views67 slides

More from Byrne Reese(6)

Advanced RingCentral API Use Cases by Byrne Reese
Advanced RingCentral API Use CasesAdvanced RingCentral API Use Cases
Advanced RingCentral API Use Cases
Byrne Reese260 views
Melody Designer Training by Byrne Reese
Melody Designer TrainingMelody Designer Training
Melody Designer Training
Byrne Reese2.9K views
Building Web Sites With Movable Type by Byrne Reese
Building Web Sites With Movable TypeBuilding Web Sites With Movable Type
Building Web Sites With Movable Type
Byrne Reese1.5K views
Online Communities by Byrne Reese
Online CommunitiesOnline Communities
Online Communities
Byrne Reese512 views
Timespeople Community Features by Byrne Reese
Timespeople Community FeaturesTimespeople Community Features
Timespeople Community Features
Byrne Reese482 views
Evolution Of Open by Byrne Reese
Evolution Of OpenEvolution Of Open
Evolution Of Open
Byrne Reese3.9K views

Recently uploaded

NET Conf 2023 Recap by
NET Conf 2023 RecapNET Conf 2023 Recap
NET Conf 2023 RecapLee Richardson
10 views71 slides
Uni Systems for Power Platform.pptx by
Uni Systems for Power Platform.pptxUni Systems for Power Platform.pptx
Uni Systems for Power Platform.pptxUni Systems S.M.S.A.
56 views21 slides
Voice Logger - Telephony Integration Solution at Aegis by
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at AegisNirmal Sharma
39 views1 slide
Powerful Google developer tools for immediate impact! (2023-24) by
Powerful Google developer tools for immediate impact! (2023-24)Powerful Google developer tools for immediate impact! (2023-24)
Powerful Google developer tools for immediate impact! (2023-24)wesley chun
10 views38 slides
Mini-Track: Challenges to Network Automation Adoption by
Mini-Track: Challenges to Network Automation AdoptionMini-Track: Challenges to Network Automation Adoption
Mini-Track: Challenges to Network Automation AdoptionNetwork Automation Forum
13 views27 slides
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc
11 views29 slides

Recently uploaded(20)

Voice Logger - Telephony Integration Solution at Aegis by Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma39 views
Powerful Google developer tools for immediate impact! (2023-24) by wesley chun
Powerful Google developer tools for immediate impact! (2023-24)Powerful Google developer tools for immediate impact! (2023-24)
Powerful Google developer tools for immediate impact! (2023-24)
wesley chun10 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc11 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely25 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by Dr. Jimmy Schwarzkopf
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf
Case Study Copenhagen Energy and Business Central.pdf by Aitana
Case Study Copenhagen Energy and Business Central.pdfCase Study Copenhagen Energy and Business Central.pdf
Case Study Copenhagen Energy and Business Central.pdf
Aitana16 views
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2218 views

Hacking Movable Type Training - Day 1