SlideShare a Scribd company logo
1 of 33
No Kernel
LEFT BEHIND
Why
           No Kernel              ?
          LEFT BEHIND




• Ideally all Pier installations will use the
  same Pier version so that everyone can
  benefit and contribute to the latest code.
• More testing of latest Pier code.
• More contributions to Pier add-ons.
What is a Pier kernel?
1) Holds the root
  to the tree of
 PRStructure(s)
What is a Pier kernel?
 2) Users and groups
PRKernel>>users
   ^ self propertyAt: #users ifAbsentPut: [ Set with: self adminUser ]


PRKernel>>groups
   ^ self propertyAt: #groups ifAbsentPut: [ Set with: self adminGroup ]
Why the upgrade pain?
•   Pier is a powerful CMS and allows rapid content
    creation and editing.
•   Code and content are intimately intertwined.
•   Pier’s code-base has rapidly evolved.
•   Upgrading often requires a knowledge of code
    changes and is non-trivial.
•   Export formats are often verbose, opaque and are
    dumb serializers of the state (eg xml exporter etc)
<sixx sixx.version="1.0">
	

        <sixx.object sixx.id="0" sixx.type="OrderedCollection" >
	

        	

       <sixx.object sixx.id="1" sixx.type="Dictionary" >
	

        	

       	

        <sixx.object sixx.id="2" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.id="3" sixx.name="key" sixx.type="Symbol" >contents</sixx.object>


                                                                                      Sixx export
	

        	

       	

        	

        <sixx.object sixx.id="4" sixx.name="value" sixx.type="String" >A getAndy Murray&#44; 24&#44; based in Edinburgh&#44; won the accolade for his designs which include the Hi
achievements are a craft book “Made By” which shows how to make bags&#44; belts&#44; wallets among other things from a teatowel. And his vacuum pressed furniture made through his company AndThe John Logie
awards were inaugurated to commemorate the Scottish engineer who is credited wi“It&apos;s great&#44; a big shock. I didn&apos;t believe it at first. John Logie Baird invented more than the television and I think I won
of the range of my products. I&apos;m pleased that my hard work has been recognised and it will give me greater exposure.”</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="5" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.id="6" sixx.name="key" sixx.type="Symbol" >name</sixx.object>
	

        	

       	

        	

        <sixx.object sixx.id="7" sixx.name="value" sixx.type="String" >2011-05-24</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="8" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.id="9" sixx.name="key" sixx.type="Symbol" >author</sixx.object>
	

        	

       	

        	

        <sixx.object sixx.id="10" sixx.name="value" sixx.type="String" >admin</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="11" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.id="12" sixx.name="key" sixx.type="Symbol" >uuid</sixx.object>
	

        	

       	

        	

        <sixx.object sixx.id="13" sixx.name="value" sixx.type="String" >335262787197349761</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="14" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.id="15" sixx.name="key" sixx.type="Symbol" >title</sixx.object>
	

        	

       	

        	

        <sixx.object sixx.id="16" sixx.name="value" sixx.type="String" >Young Inventor of the year&#33;</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="17" sixx.type="Association" >


                                                                                                                                                             hod
	

        	

       	

        	

        <sixx.object sixx.id="18" sixx.name="key" sixx.type="Symbol" >publication</sixx.object>



                                                                                                                                                         me t t)
	

        	

       	

        	

        <sixx.object sixx.id="19" sixx.name="value" sixx.type="TimeStamp" >24 May 2011 11:12:42</sixx.object>



                                                                                                                                                  e o ld o r m a
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="20" sixx.type="Association" >


                                                                                                                                              th
	

        	

       	

        	

        <sixx.object sixx.id="21" sixx.name="key" sixx.type="Symbol" >tags</sixx.object>



                                                                                                                                                       ue f
	

        	

       	

        	

        <sixx.object sixx.id="22" sixx.name="value" sixx.type="Array" ></sixx.object>



                                                                                                                                                o p aq
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="23" sixx.type="Association" >
	

	

	

           	

           	

           	

                     	

                     	

                     	

                                	

                                	

                                           <sixx.object sixx.id="24" sixx.name="key" sixx.type="Symbol" >comments</sixx.object>
                                           <sixx.object sixx.id="25" sixx.name="value" sixx.type="OrderedCollection" ></sixx.object>
                                </sixx.object>
                                                                                                                                              (
	

        	

       </sixx.object>
	

        	

       <sixx.object sixx.id="26" sixx.type="Dictionary" >
	

        	

       	

        <sixx.object sixx.id="27" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.name="key" sixx.idref="3" />
	

        	

       	

        	

        <sixx.object sixx.id="28" sixx.name="value" sixx.type="String" >Designer Andy Murray is promoting cutlery with a difference with his &#42;KitchenToolbox&gt;/products/KiThe
old from Glasgow has come up with a range of cutlery which can also be used as tools. He said: “People often use knives to get fuses out of plugs so I thought I would redesign cutlery for simple every day DIY tasks
&#42;continued&gt;http://www.getitmade.com/public/blog/2011-02-01/&#42;</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="29" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.name="key" sixx.idref="6" />
	

        	

       	

        	

        <sixx.object sixx.id="30" sixx.name="value" sixx.type="String" >2011-05-24-2</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="31" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.name="key" sixx.idref="9" />
	

        	

       	

        	

        <sixx.object sixx.id="32" sixx.name="value" sixx.type="String" >admin</sixx.object>
	

        	

       	

        </sixx.object>
	

        	

       	

        <sixx.object sixx.id="33" sixx.type="Association" >
	

        	

       	

        	

        <sixx.object sixx.name="key" sixx.idref="12" />
Pier-Code-Exporter
 KernelCreatorNickagercom>>welcome: kernel
      | structure |
      structure := PRPage named: 'welcome'.
      structure contents: 'Welcome - click on the links and have a look around.

 I created this site as a home for a new *blog>/blog*. I hope you''ll find something of interest within it''s confines.
 +/system/components/slideshow+'.
      structure localEnvironment: (self systemtemplatesenvironment: kernel).
      structure localStyleSheet: (self systemcomponentseventCss: kernel).
      structure addChild: (self blog: kernel).



                                                          Cont
      structure addChild: (self projects: kernel).
      structure addChild: (self links: kernel).



                                                                            ent is
      structure addChild: (self sailing: kernel).
      structure addChild: (self about: kernel).
      structure addChild: (self system: kernel).

      structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil).
      structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil).
      ^ structure                                                                                  Code
KernelCreatorNickagercom>>blogScreencastcreatinganewinstancebasedonpreconfiguredAMI: kernel
     | structure |
     structure := PBPost named: 'Screencast-creating-a-new-instance-based-on-pre-configured-AMI'.
     structure title: 'Screencast: Create a new EC2 instance from a preconfigured Seaside/Gemstone AMI'.
     structure tags: {'Gemstone'. 'EC2'. 'screencast'}.
     structure author: 'Nick Ager'.
     structure publication: (TimeStamp year: 2011 month: 1 day: 2 hour: 15 minute: 52 second: 51).
     structure contents: 'Here''s a screencast to accompany my blog post on *deploying your Seaside application for free using
Amazon EC2 and Gemstone>/blog/Create-a-free-Gemstone-server-in-the-cloud-in-10-minutes*:




                                                                   nt
{{{<iframe src="http://player.vimeo.com/video/18375790" width="640" height="480" frameborder="0"></iframe><p><a href="http://




                                                               nte
vimeo.com/18375790">watch on Vimeo</a></p>}}}'.




                                                             Co
    structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil).



                                                          is
    structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil).




                                      de
    ^ structure




                                    Co
Pier-Code-Exporter


  Makes upgrading old
   Pier installations
       possible
Pier-Code-Exporter


  Reduce the pain of
   future upgrades
Exporting code benefits
  The exporter uses it’s knowledge of Pier
 to export in a readable format eg:
   PRDocument(s) are exported as wiki-strings
   rather than serialisations of the document AST
  The output can be edited and manipulated
 - it’s just code.
  You can check-in your exported kernel
 into your favourite VCS.
Status
Pharo and Gemstone
Works for Pier1, Pier 2 and Pier 3 kernels
 Used to upgrade active Pier 1 and Pier 2
sites.
Not currently implemented as a Kernel
Persistency mechanism
Procedure

1. Install Pier-Exporter-Code
2. Export and test the exported Kernel
3. Export a Pier 3 kernel
4. Install Pier 3 and exported kernel
Installing Code Exporter
                   Pier 1 - (Seaside 2.8)

    Add the following repository in Monticello browser:

    MCHttpRepository
      location: 'http://source.lukas-renggli.ch/pier3addons'
      user: ''
      password: ''
                                                                               e2 .8!
    Load the following packages:
                                                                        ea s id
                                                                ri nS


     Pier-Exporter-Seaside28-Code
     Pier-Exporter-Code                               oG o fe
                                                  n
Installing Code Exporter
         Pier 2 - (Seaside 3.0)


Gofer it
  renggli: 'pier3addons';
  package: 'Pier-Exporter-Code';
  load.
Installing Code Exporter - Pier 3
   (Seaside 3.0 and Magritte 3)

Gofer it
  renggli: 'pier3addons';
  package: 'Pier-Exporter-Code';
  load.

Gofer it
  renggli: 'pier3addons';
  package: 'Pier-Exporter-Pier3-Code';
  load.
Installing Code Exporter - Pier 3
 (Seaside 3.0 and Magritte 3) #2

                                                             it h Me t ac e l l o
                                     a l te r n a t i ve w
Gofer it
   renggli: 'pier3addons';
   package: 'ConfigurationOfPier3AddOns';
   load.

ConfigurationOfPier3AddOns project stableVersion load:'Code-Exporter-Pier3'
Two export methods
Export Pier 1 or Pier 2 kernel:
PRKernelCodeExporter exportAsPier1or2Kernel: 'pier'.



Export Pier 3 kernel:
 PRKernelCodeExporter exportAsPier3Kernel: 'nasite'.



                                        r na me
                           sp at ch e
                      di
Pier 1 or 2
NickagercomKernelCreator>>systemcomponentsblogarchive: kernel
   | structure |
   structure := PRComponent named: 'blogarchive'.
   structure title: 'Blog Archive'.
   structure componentClass: PBPostArchive.
   structure write: 10 using: PBPostArchive descriptionMaxItems.
   structure write: true using: PBPostArchive descriptionShowCount.

   structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com'
ifNone: nil).
   structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil).
   ^ structure



Pier 3
NickagercomKernelCreator>>systemcomponentsblogarchive: kernel
   | structure |
   structure := PRComponent named: 'blogarchive'.
   structure title: 'Blog Archive'.
   structure prototypeInstance: (PBPostArchive new
       maxItems: 10;
       showCount: true;
       yourself).

   structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com'
ifNone: nil).
   structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil).
   ^ structure
Pier 1 or 2
NickagercomKernelCreator>>systemcomponentsblogarchive: kernel
   | structure |
   structure := PRComponent named: 'blogarchive'.
   structure title: 'Blog Archive'.
      structure componentClass: PBPostArchive.
   structure componentClass: PBPostArchive.
      structure write: 10 using: PBPostArchive descriptionMaxItems.
   structure write: 10 true using: PBPostArchive descriptionShowCount.
      structure write: using: PBPostArchive descriptionMaxItems.
   structure write: true using: PBPostArchive descriptionShowCount.

   structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com'
ifNone: nil).
   structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil).
   ^ structure



Pier 3
NickagercomKernelCreator>>systemcomponentsblogarchive: kernel
   | structure |
   structure := PRComponent named: 'blogarchive'.
   structure title: 'Blog Archive'.
   structure prototypeInstance: (PBPostArchive new
       maxItems: 10; prototypeInstance: (PBPostArchive new
            structure
       showCount: true; 10;
               maxItems:
               showCount: true;
       yourself).
               yourself).
                                          P ie r userNamed: 'nick.ager@gmail.com'
   structure securityDecoration owner: (kernel
                                                  3 us e s pro t o t y p e
                                  i n s t a n c egroupNamed:RC ifNone: nil).
   structure securityDecoration group: (kernel s f o r P 'admin'po
ifNone: nil).

   ^ structure
                                                                o m n e n t (s )
Test export #1

PRKernelCodeExporter exportAsPier1or2Kernel: 'pier'.



                                    re p l ac e w i t h
                                 di sp a tch e r n ame
Test export #2
 Remove existing kernels:


 PRKernel reset.


          backup
           first!
Test export #3
  Remove existing application:


PRAdmin unregister: 'pier'.



               re p l ac e w i t h
            di sp atc  h e r n ame
Test export #4
Create kernel and register application
        using exported code:

PRKernelCreatorForPier register.


            exporter generates a class named:
                  PRKernelCreatorForXXXX
            in category:
                'Pier-Exported-Code'
Test export #5
        Test kernel:


http://localhost:8080/pier
Export a Pier 3 kernel
• Export Pier 3 kernel:
   PRKernelCodeExporter exportAsPier3Kernel: 'pier'.



• Add a package to Monticello named:
  'Pier-Exported-Code'



• Save package into a repository using
  Monticello browser
Install Pier 3
             (with addons)
Into a fresh Pharo image install Pier with:

  Gofer it
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfPier3AddOns';
    load.

  ConfigurationOfPier3AddOns load
Upgrade demo
What has changed
      since the Pier 1
•   Verbatim markup
•   Requirement for a menu component has vanished.
•   Pier-Book has deprecated: BOChapter, BOPart,
    BOSection, BOSubsection

•   Pier 3 introduces Pier-Admin
•   Not all plug-ins have been ported.
•   Take care if you’ve derived from PRPierFrame or
    PRContentsWidget or PRKernel
Status
All tests green on Pharo and Gemstone.
Multibyte strings are exported in a readable
fashion.
PRDistribution & PRKernelDistributionBase
kernels works
Upgraded Pier 1 - piercms.com site
Upgraded Pier 2 (Gemstone) nickager.com
site.
Upgrading roadmap
•   Make sure you have good backups.
•   Install the export code - relevant for your Kernel
•   Try exporting in the same format and regenerate the kernel.
•   Generate a Pier 3 kernel.
•   Load Pier 3 (how to load Pier3....)
•   Modify markup - such as new Verbatim markup
•   Are all the plugins you used ported to Pier3?
•   Edit the template (environment) to remove site editing tools
    now replaced by Pier-Admin
Why upgrade
• Use the latest Seaside versions with access
  to jQuery and all the associated plug-ins.
• Pier-Admin
• Many bugs fixed
• Blogs with social sharing widgets.
• ....
Next steps

• Does this work for you? War-stories
• Use the refactoring infrastructure to ease
  migration pain? eg Book refactoring
• Use Metacello and code-exporter to be
  able to recreate your site.
Further information
• Pier CMS site
  http://piercms.com

• Pier Admin screen-cast:  
  http://vimeo.com/32749535

• An introduction to Magritte 3:  
  http://vimeo.com/37032840

• Magritte/Pier mail list:
  <smallwiki@iam.unibe.ch>

More Related Content

What's hot

Organizing Code with JavascriptMVC
Organizing Code with JavascriptMVCOrganizing Code with JavascriptMVC
Organizing Code with JavascriptMVCThomas Reynolds
 
Hi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab PresentationHi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab Presentationplindner
 
Practical Experience Building JavaFX Rich Clients
Practical Experience Building JavaFX Rich ClientsPractical Experience Building JavaFX Rich Clients
Practical Experience Building JavaFX Rich ClientsRichard Bair
 
Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)jeresig
 
JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)jeresig
 
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드영욱 김
 
Drupalcamp gent - Node access
Drupalcamp gent - Node accessDrupalcamp gent - Node access
Drupalcamp gent - Node accessJasper Knops
 
Node Access in Drupal 7 (and Drupal 8)
Node Access in Drupal 7 (and Drupal 8)Node Access in Drupal 7 (and Drupal 8)
Node Access in Drupal 7 (and Drupal 8)nyccamp
 
DOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript FrameworkDOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript FrameworkMatthew McCullough
 
Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiquePrésentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiqueDenis Voituron
 
Introduction to jQuery (Ajax Exp 2006)
Introduction to jQuery (Ajax Exp 2006)Introduction to jQuery (Ajax Exp 2006)
Introduction to jQuery (Ajax Exp 2006)jeresig
 
Achilles presentation
Achilles presentationAchilles presentation
Achilles presentationDuyhai Doan
 
Nestoria new design
Nestoria new designNestoria new design
Nestoria new designlokku
 
jQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and BlingjQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and BlingDoug Neiner
 
The Ring programming language version 1.8 book - Part 49 of 202
The Ring programming language version 1.8 book - Part 49 of 202The Ring programming language version 1.8 book - Part 49 of 202
The Ring programming language version 1.8 book - Part 49 of 202Mahmoud Samir Fayed
 

What's hot (20)

Organizing Code with JavascriptMVC
Organizing Code with JavascriptMVCOrganizing Code with JavascriptMVC
Organizing Code with JavascriptMVC
 
Jquery
JqueryJquery
Jquery
 
Hi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab PresentationHi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab Presentation
 
Ushahidi
UshahidiUshahidi
Ushahidi
 
Autopsy Of A Widget
Autopsy Of A WidgetAutopsy Of A Widget
Autopsy Of A Widget
 
Practical Experience Building JavaFX Rich Clients
Practical Experience Building JavaFX Rich ClientsPractical Experience Building JavaFX Rich Clients
Practical Experience Building JavaFX Rich Clients
 
Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)
 
JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)
 
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
 
Drupalcamp gent - Node access
Drupalcamp gent - Node accessDrupalcamp gent - Node access
Drupalcamp gent - Node access
 
Node Access in Drupal 7 (and Drupal 8)
Node Access in Drupal 7 (and Drupal 8)Node Access in Drupal 7 (and Drupal 8)
Node Access in Drupal 7 (and Drupal 8)
 
DOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript FrameworkDOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript Framework
 
Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiquePrésentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
 
Introduction to jQuery (Ajax Exp 2006)
Introduction to jQuery (Ajax Exp 2006)Introduction to jQuery (Ajax Exp 2006)
Introduction to jQuery (Ajax Exp 2006)
 
Achilles presentation
Achilles presentationAchilles presentation
Achilles presentation
 
Nestoria new design
Nestoria new designNestoria new design
Nestoria new design
 
jQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and BlingjQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and Bling
 
The Ring programming language version 1.8 book - Part 49 of 202
The Ring programming language version 1.8 book - Part 49 of 202The Ring programming language version 1.8 book - Part 49 of 202
The Ring programming language version 1.8 book - Part 49 of 202
 
Collections.compare(() -> JDK; Apache; Eclipse, Guava...});
Collections.compare(() -> JDK; Apache; Eclipse, Guava...});Collections.compare(() -> JDK; Apache; Eclipse, Guava...});
Collections.compare(() -> JDK; Apache; Eclipse, Guava...});
 
Get supportedsitesjson
Get supportedsitesjsonGet supportedsitesjson
Get supportedsitesjson
 

Similar to Pier - no kernel left behind

SharePointfest Denver - A jQuery Primer for SharePoint
SharePointfest Denver -  A jQuery Primer for SharePointSharePointfest Denver -  A jQuery Primer for SharePoint
SharePointfest Denver - A jQuery Primer for SharePointMarc D Anderson
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone InteractivityEric Steele
 
Iniciando com jquery
Iniciando com jqueryIniciando com jquery
Iniciando com jqueryDanilo Sousa
 
20190118_NetadashiMeetup#8_React2019
20190118_NetadashiMeetup#8_React201920190118_NetadashiMeetup#8_React2019
20190118_NetadashiMeetup#8_React2019Makoto Mori
 
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...Ayes Chinmay
 
Barcamp Auckland Rails3 presentation
Barcamp Auckland Rails3 presentationBarcamp Auckland Rails3 presentation
Barcamp Auckland Rails3 presentationSociable
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the WorldJonathan Snook
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2James Pearce
 
実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会Hayashi Yuichi
 
The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009Chris Chabot
 
Odoo - Create themes for website
Odoo - Create themes for websiteOdoo - Create themes for website
Odoo - Create themes for websiteOdoo
 
Caffeinated Style Sheets
Caffeinated Style SheetsCaffeinated Style Sheets
Caffeinated Style SheetsTommy Hodgins
 
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8netmind
 
Creating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JSCreating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JSAkshay Mathur
 
BEM. What you can borrow from Yandex frontend dev
BEM. What you can borrow from Yandex frontend devBEM. What you can borrow from Yandex frontend dev
BEM. What you can borrow from Yandex frontend devVarya Stepanova
 
An Event Apart Seattle - New CSS Layout Meets the Real World
An Event Apart Seattle - New CSS Layout Meets the Real WorldAn Event Apart Seattle - New CSS Layout Meets the Real World
An Event Apart Seattle - New CSS Layout Meets the Real WorldRachel Andrew
 
Back to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDBBack to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDBMongoDB
 

Similar to Pier - no kernel left behind (20)

SharePointfest Denver - A jQuery Primer for SharePoint
SharePointfest Denver -  A jQuery Primer for SharePointSharePointfest Denver -  A jQuery Primer for SharePoint
SharePointfest Denver - A jQuery Primer for SharePoint
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
 
Iniciando com jquery
Iniciando com jqueryIniciando com jquery
Iniciando com jquery
 
20190118_NetadashiMeetup#8_React2019
20190118_NetadashiMeetup#8_React201920190118_NetadashiMeetup#8_React2019
20190118_NetadashiMeetup#8_React2019
 
Jquery 5
Jquery 5Jquery 5
Jquery 5
 
MongoDB
MongoDBMongoDB
MongoDB
 
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
 
Barcamp Auckland Rails3 presentation
Barcamp Auckland Rails3 presentationBarcamp Auckland Rails3 presentation
Barcamp Auckland Rails3 presentation
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the World
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
 
実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会
 
#JavaFX.forReal()
#JavaFX.forReal()#JavaFX.forReal()
#JavaFX.forReal()
 
The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009
 
Odoo - Create themes for website
Odoo - Create themes for websiteOdoo - Create themes for website
Odoo - Create themes for website
 
Caffeinated Style Sheets
Caffeinated Style SheetsCaffeinated Style Sheets
Caffeinated Style Sheets
 
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
netmind - Primer Contacto con el Desarrollo de Aplicaciones para Windows 8
 
Creating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JSCreating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JS
 
BEM. What you can borrow from Yandex frontend dev
BEM. What you can borrow from Yandex frontend devBEM. What you can borrow from Yandex frontend dev
BEM. What you can borrow from Yandex frontend dev
 
An Event Apart Seattle - New CSS Layout Meets the Real World
An Event Apart Seattle - New CSS Layout Meets the Real WorldAn Event Apart Seattle - New CSS Layout Meets the Real World
An Event Apart Seattle - New CSS Layout Meets the Real World
 
Back to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDBBack to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDB
 

Recently uploaded

Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Recently uploaded (20)

Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

Pier - no kernel left behind

  • 2. Why No Kernel ? LEFT BEHIND • Ideally all Pier installations will use the same Pier version so that everyone can benefit and contribute to the latest code. • More testing of latest Pier code. • More contributions to Pier add-ons.
  • 3. What is a Pier kernel? 1) Holds the root to the tree of PRStructure(s)
  • 4. What is a Pier kernel? 2) Users and groups PRKernel>>users ^ self propertyAt: #users ifAbsentPut: [ Set with: self adminUser ] PRKernel>>groups ^ self propertyAt: #groups ifAbsentPut: [ Set with: self adminGroup ]
  • 5. Why the upgrade pain? • Pier is a powerful CMS and allows rapid content creation and editing. • Code and content are intimately intertwined. • Pier’s code-base has rapidly evolved. • Upgrading often requires a knowledge of code changes and is non-trivial. • Export formats are often verbose, opaque and are dumb serializers of the state (eg xml exporter etc)
  • 6. <sixx sixx.version="1.0"> <sixx.object sixx.id="0" sixx.type="OrderedCollection" > <sixx.object sixx.id="1" sixx.type="Dictionary" > <sixx.object sixx.id="2" sixx.type="Association" > <sixx.object sixx.id="3" sixx.name="key" sixx.type="Symbol" >contents</sixx.object> Sixx export <sixx.object sixx.id="4" sixx.name="value" sixx.type="String" >A getAndy Murray&#44; 24&#44; based in Edinburgh&#44; won the accolade for his designs which include the Hi achievements are a craft book “Made By” which shows how to make bags&#44; belts&#44; wallets among other things from a teatowel. And his vacuum pressed furniture made through his company AndThe John Logie awards were inaugurated to commemorate the Scottish engineer who is credited wi“It&apos;s great&#44; a big shock. I didn&apos;t believe it at first. John Logie Baird invented more than the television and I think I won of the range of my products. I&apos;m pleased that my hard work has been recognised and it will give me greater exposure.”</sixx.object> </sixx.object> <sixx.object sixx.id="5" sixx.type="Association" > <sixx.object sixx.id="6" sixx.name="key" sixx.type="Symbol" >name</sixx.object> <sixx.object sixx.id="7" sixx.name="value" sixx.type="String" >2011-05-24</sixx.object> </sixx.object> <sixx.object sixx.id="8" sixx.type="Association" > <sixx.object sixx.id="9" sixx.name="key" sixx.type="Symbol" >author</sixx.object> <sixx.object sixx.id="10" sixx.name="value" sixx.type="String" >admin</sixx.object> </sixx.object> <sixx.object sixx.id="11" sixx.type="Association" > <sixx.object sixx.id="12" sixx.name="key" sixx.type="Symbol" >uuid</sixx.object> <sixx.object sixx.id="13" sixx.name="value" sixx.type="String" >335262787197349761</sixx.object> </sixx.object> <sixx.object sixx.id="14" sixx.type="Association" > <sixx.object sixx.id="15" sixx.name="key" sixx.type="Symbol" >title</sixx.object> <sixx.object sixx.id="16" sixx.name="value" sixx.type="String" >Young Inventor of the year&#33;</sixx.object> </sixx.object> <sixx.object sixx.id="17" sixx.type="Association" > hod <sixx.object sixx.id="18" sixx.name="key" sixx.type="Symbol" >publication</sixx.object> me t t) <sixx.object sixx.id="19" sixx.name="value" sixx.type="TimeStamp" >24 May 2011 11:12:42</sixx.object> e o ld o r m a </sixx.object> <sixx.object sixx.id="20" sixx.type="Association" > th <sixx.object sixx.id="21" sixx.name="key" sixx.type="Symbol" >tags</sixx.object> ue f <sixx.object sixx.id="22" sixx.name="value" sixx.type="Array" ></sixx.object> o p aq </sixx.object> <sixx.object sixx.id="23" sixx.type="Association" > <sixx.object sixx.id="24" sixx.name="key" sixx.type="Symbol" >comments</sixx.object> <sixx.object sixx.id="25" sixx.name="value" sixx.type="OrderedCollection" ></sixx.object> </sixx.object> ( </sixx.object> <sixx.object sixx.id="26" sixx.type="Dictionary" > <sixx.object sixx.id="27" sixx.type="Association" > <sixx.object sixx.name="key" sixx.idref="3" /> <sixx.object sixx.id="28" sixx.name="value" sixx.type="String" >Designer Andy Murray is promoting cutlery with a difference with his &#42;KitchenToolbox&gt;/products/KiThe old from Glasgow has come up with a range of cutlery which can also be used as tools. He said: “People often use knives to get fuses out of plugs so I thought I would redesign cutlery for simple every day DIY tasks &#42;continued&gt;http://www.getitmade.com/public/blog/2011-02-01/&#42;</sixx.object> </sixx.object> <sixx.object sixx.id="29" sixx.type="Association" > <sixx.object sixx.name="key" sixx.idref="6" /> <sixx.object sixx.id="30" sixx.name="value" sixx.type="String" >2011-05-24-2</sixx.object> </sixx.object> <sixx.object sixx.id="31" sixx.type="Association" > <sixx.object sixx.name="key" sixx.idref="9" /> <sixx.object sixx.id="32" sixx.name="value" sixx.type="String" >admin</sixx.object> </sixx.object> <sixx.object sixx.id="33" sixx.type="Association" > <sixx.object sixx.name="key" sixx.idref="12" />
  • 7. Pier-Code-Exporter KernelCreatorNickagercom>>welcome: kernel | structure | structure := PRPage named: 'welcome'. structure contents: 'Welcome - click on the links and have a look around. I created this site as a home for a new *blog>/blog*. I hope you''ll find something of interest within it''s confines. +/system/components/slideshow+'. structure localEnvironment: (self systemtemplatesenvironment: kernel). structure localStyleSheet: (self systemcomponentseventCss: kernel). structure addChild: (self blog: kernel). Cont structure addChild: (self projects: kernel). structure addChild: (self links: kernel). ent is structure addChild: (self sailing: kernel). structure addChild: (self about: kernel). structure addChild: (self system: kernel). structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil). structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil). ^ structure Code KernelCreatorNickagercom>>blogScreencastcreatinganewinstancebasedonpreconfiguredAMI: kernel | structure | structure := PBPost named: 'Screencast-creating-a-new-instance-based-on-pre-configured-AMI'. structure title: 'Screencast: Create a new EC2 instance from a preconfigured Seaside/Gemstone AMI'. structure tags: {'Gemstone'. 'EC2'. 'screencast'}. structure author: 'Nick Ager'. structure publication: (TimeStamp year: 2011 month: 1 day: 2 hour: 15 minute: 52 second: 51). structure contents: 'Here''s a screencast to accompany my blog post on *deploying your Seaside application for free using Amazon EC2 and Gemstone>/blog/Create-a-free-Gemstone-server-in-the-cloud-in-10-minutes*: nt {{{<iframe src="http://player.vimeo.com/video/18375790" width="640" height="480" frameborder="0"></iframe><p><a href="http:// nte vimeo.com/18375790">watch on Vimeo</a></p>}}}'. Co structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil). is structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil). de ^ structure Co
  • 8. Pier-Code-Exporter Makes upgrading old Pier installations possible
  • 9. Pier-Code-Exporter Reduce the pain of future upgrades
  • 10. Exporting code benefits The exporter uses it’s knowledge of Pier to export in a readable format eg: PRDocument(s) are exported as wiki-strings rather than serialisations of the document AST The output can be edited and manipulated - it’s just code. You can check-in your exported kernel into your favourite VCS.
  • 11. Status Pharo and Gemstone Works for Pier1, Pier 2 and Pier 3 kernels Used to upgrade active Pier 1 and Pier 2 sites. Not currently implemented as a Kernel Persistency mechanism
  • 12. Procedure 1. Install Pier-Exporter-Code 2. Export and test the exported Kernel 3. Export a Pier 3 kernel 4. Install Pier 3 and exported kernel
  • 13. Installing Code Exporter Pier 1 - (Seaside 2.8) Add the following repository in Monticello browser: MCHttpRepository location: 'http://source.lukas-renggli.ch/pier3addons' user: '' password: '' e2 .8! Load the following packages: ea s id ri nS Pier-Exporter-Seaside28-Code Pier-Exporter-Code oG o fe n
  • 14. Installing Code Exporter Pier 2 - (Seaside 3.0) Gofer it renggli: 'pier3addons'; package: 'Pier-Exporter-Code'; load.
  • 15. Installing Code Exporter - Pier 3 (Seaside 3.0 and Magritte 3) Gofer it renggli: 'pier3addons'; package: 'Pier-Exporter-Code'; load. Gofer it renggli: 'pier3addons'; package: 'Pier-Exporter-Pier3-Code'; load.
  • 16. Installing Code Exporter - Pier 3 (Seaside 3.0 and Magritte 3) #2 it h Me t ac e l l o a l te r n a t i ve w Gofer it renggli: 'pier3addons'; package: 'ConfigurationOfPier3AddOns'; load. ConfigurationOfPier3AddOns project stableVersion load:'Code-Exporter-Pier3'
  • 17. Two export methods Export Pier 1 or Pier 2 kernel: PRKernelCodeExporter exportAsPier1or2Kernel: 'pier'. Export Pier 3 kernel: PRKernelCodeExporter exportAsPier3Kernel: 'nasite'. r na me sp at ch e di
  • 18. Pier 1 or 2 NickagercomKernelCreator>>systemcomponentsblogarchive: kernel | structure | structure := PRComponent named: 'blogarchive'. structure title: 'Blog Archive'. structure componentClass: PBPostArchive. structure write: 10 using: PBPostArchive descriptionMaxItems. structure write: true using: PBPostArchive descriptionShowCount. structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil). structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil). ^ structure Pier 3 NickagercomKernelCreator>>systemcomponentsblogarchive: kernel | structure | structure := PRComponent named: 'blogarchive'. structure title: 'Blog Archive'. structure prototypeInstance: (PBPostArchive new maxItems: 10; showCount: true; yourself). structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil). structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil). ^ structure
  • 19. Pier 1 or 2 NickagercomKernelCreator>>systemcomponentsblogarchive: kernel | structure | structure := PRComponent named: 'blogarchive'. structure title: 'Blog Archive'. structure componentClass: PBPostArchive. structure componentClass: PBPostArchive. structure write: 10 using: PBPostArchive descriptionMaxItems. structure write: 10 true using: PBPostArchive descriptionShowCount. structure write: using: PBPostArchive descriptionMaxItems. structure write: true using: PBPostArchive descriptionShowCount. structure securityDecoration owner: (kernel userNamed: 'nick.ager@gmail.com' ifNone: nil). structure securityDecoration group: (kernel groupNamed: 'admin' ifNone: nil). ^ structure Pier 3 NickagercomKernelCreator>>systemcomponentsblogarchive: kernel | structure | structure := PRComponent named: 'blogarchive'. structure title: 'Blog Archive'. structure prototypeInstance: (PBPostArchive new maxItems: 10; prototypeInstance: (PBPostArchive new structure showCount: true; 10; maxItems: showCount: true; yourself). yourself). P ie r userNamed: 'nick.ager@gmail.com' structure securityDecoration owner: (kernel 3 us e s pro t o t y p e i n s t a n c egroupNamed:RC ifNone: nil). structure securityDecoration group: (kernel s f o r P 'admin'po ifNone: nil). ^ structure o m n e n t (s )
  • 20. Test export #1 PRKernelCodeExporter exportAsPier1or2Kernel: 'pier'. re p l ac e w i t h di sp a tch e r n ame
  • 21. Test export #2 Remove existing kernels: PRKernel reset. backup first!
  • 22. Test export #3 Remove existing application: PRAdmin unregister: 'pier'. re p l ac e w i t h di sp atc h e r n ame
  • 23. Test export #4 Create kernel and register application using exported code: PRKernelCreatorForPier register. exporter generates a class named: PRKernelCreatorForXXXX in category: 'Pier-Exported-Code'
  • 24. Test export #5 Test kernel: http://localhost:8080/pier
  • 25. Export a Pier 3 kernel • Export Pier 3 kernel: PRKernelCodeExporter exportAsPier3Kernel: 'pier'. • Add a package to Monticello named: 'Pier-Exported-Code' • Save package into a repository using Monticello browser
  • 26. Install Pier 3 (with addons) Into a fresh Pharo image install Pier with: Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfPier3AddOns'; load. ConfigurationOfPier3AddOns load
  • 28. What has changed since the Pier 1 • Verbatim markup • Requirement for a menu component has vanished. • Pier-Book has deprecated: BOChapter, BOPart, BOSection, BOSubsection • Pier 3 introduces Pier-Admin • Not all plug-ins have been ported. • Take care if you’ve derived from PRPierFrame or PRContentsWidget or PRKernel
  • 29. Status All tests green on Pharo and Gemstone. Multibyte strings are exported in a readable fashion. PRDistribution & PRKernelDistributionBase kernels works Upgraded Pier 1 - piercms.com site Upgraded Pier 2 (Gemstone) nickager.com site.
  • 30. Upgrading roadmap • Make sure you have good backups. • Install the export code - relevant for your Kernel • Try exporting in the same format and regenerate the kernel. • Generate a Pier 3 kernel. • Load Pier 3 (how to load Pier3....) • Modify markup - such as new Verbatim markup • Are all the plugins you used ported to Pier3? • Edit the template (environment) to remove site editing tools now replaced by Pier-Admin
  • 31. Why upgrade • Use the latest Seaside versions with access to jQuery and all the associated plug-ins. • Pier-Admin • Many bugs fixed • Blogs with social sharing widgets. • ....
  • 32. Next steps • Does this work for you? War-stories • Use the refactoring infrastructure to ease migration pain? eg Book refactoring • Use Metacello and code-exporter to be able to recreate your site.
  • 33. Further information • Pier CMS site http://piercms.com • Pier Admin screen-cast:   http://vimeo.com/32749535 • An introduction to Magritte 3:   http://vimeo.com/37032840 • Magritte/Pier mail list: <smallwiki@iam.unibe.ch>

Editor's Notes

  1. \n
  2. Pier is a CMS so it&amp;#x2019;s designed to create content\n
  3. \n
  4. \n
  5. \n
  6. \n
  7. Because the exporter is designed specifically for Pier it can create readable code.\nDifficulty with SIXX format or other opaque formats is if an error occurs it&amp;#x2019;s difficult to understand the context in which\nthe failure has occured plus it&amp;#x2019;s impossible to edit or make sense of the format.\n
  8. \n
  9. \n
  10. \n
  11. could imagine it exporting the kernel.st everytime something changed.\n
  12. \n
  13. Pier 1 doesn&amp;#x2019;t even have Gofer - so you&amp;#x2019;ll have to add the repository to Monticello browser yourself.\nthere&amp;#x2019;s some compatibility package I had to load (Grease etc). The load order is important - need to load the compatibility package before the export - I tried a Metacello configuration but didn&amp;#x2019;t work in such old images.\n
  14. Again Metacello config causes problems tries to update too much.\n
  15. I separated code that was only present in the latest release into it&amp;#x2019;s own package.\n
  16. For code that is only present in the latest Pier release.\n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n