SlideShare uma empresa Scribd logo
THE CONTENT MANAGER LOVES THE TREE
MAXIMILIAN BERGHOFF - 13.06.2017 - PHP USERGROUP JUTLAND
Maximilian Berghoff
@ElectricMaxxx
github.com/electricmaxxx
Maximilian.Berghoff@may ower.de
May ower GmbH - Würzburg
TREE
HIERARCHICAL STRUCTURED DATA
Business Need: Editable text blocks  
Scenario: Create text blocks  
  Given a content manager 
  When he creates an arbritrary text block  
  Then then the user of the website would see it  
Scenario: Edit text blocks  
  Given a content manager 
  When he edits text block 
  Then then the user of the website would see the change  
    
Business Need: Editable text blocks  
Scenario: Create text blocks  
  Given a content manager 
  When he creates a specific text block  
  And defines a position 
  Then then the user would see it at this  position 
Scenario: Edit text blocks  
  Given a content manager 
  When he edits text block or its  position 
  Then then the user would see the in  position and content 
    
POSITION IN EINER APP
on a Page
Content
Menü (Label)
on a Page of a speci c URL
Business Need: Editable text blocks  
Scenario: Create text blocks  
  Given a content manager 
  When he creates a specific text block  
  And defines a position among the content of the page  
  Then then the user of the website would see it  
Scenario: Edit text blocks  
  Given a content manager 
  When he moves the text block among the content of a page  
  Then then the user would see the in position and content  
    
Business Need: Editable text blocks  
Scenario: Create text blocks  
  Given a content manager 
  When he creates a specific text block  
  And defines a position among the content of the page 
  Then then the user of the website would see it  
Scenario: Edit text blocks  
  Given a content manager 
  When he moves the text block  among the content of a page 
  Then then the user would see the in position and content  
    
POSITIONING IN THE CONTENT
Visual
Queue (Ein Block nach dem anderen)
Structure
<!DOCTYPE html> 
<html lang="en"> 
<head>
    <meta charset="UTF­8">  
    <title>Tree Example</title>  
</head>
<body>
    <div class="navigation">  
    </div> 
    <div class="content">  
    </div> 
    <div class="footer"></div>  
</body>
</html>
    
/content/header/content-block-1
/content/header/content-block-2
/content/main/content-block-3
/content/main/content-block-4
/content/footer/content-block-5
/content/footer/content-block-6
Business Need: Editable text blocks  
Scenario: Create text blocks  
  Given a content manager 
  When he creates a specific text block  
  And defines a position as a content path of the page 
  Then then the user of the website would see it  
Scenario: Edit text blocks  
  Given a content manager 
  When he moves the text block  
  And defines a new content path  
  Then then the user would see the in position and content  
    
THEORY
HIERARCHICAL STRUCTURED DATA IN RDBMS
ADJACENCY LIST
id parent_id name
1 NULL home
2 1 header
3 2 content-block-1
4 2 content-block-2
INSERT NODE
INSERT INTO content (parent_id, name) VALUES (2, content­block­7);  
id parent_id name
1 NULL home
2 1 header
3 2 content-block-1
4 2 content-block-2
5 2 content-block-7
MOVE NODE (SUBTREE)
UPDATE content set parent_id = 1 where id = 5;  
id parent_id name
1 NULL home
2 1 header
3 2 content-block-1
4 2 content-block-2
5 1 content-block-7
PATH ENUMERATION
id path name
1 1/ home
2 1/2/ header
3 1/2/3/ content-block-1
4 1/2/4/ content-block-2
NESTED SET
id left right name
1 1 8 home
2 2 7 header
3 3 6 content-block-1
4 4 5 content-block-2
NESTED SET - ADD
id left right name
1 1 12 home
2 2 7 header
3 3 6 content-block-1
4 4 5 content-block-2
5 8 11 main
6 9 10 content-block-3
NESTED SET - MOVE (DELETE + ADD)
id left right name
1 1 12 home
2 2 5 header
3 3 4 content-block-1
4 8 9 content-block-2
5 6 11 main
6 7 10 content-block-3
CLOSURE TABLE
CONTENT TABLE
id name
1 home
2 header
3 content-block-1
4 content-block-2
CLOSURE TABLE
MANY-TO-MANY
ancestor descendant
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
4 4
EXPERIMENT
LETS TRY TO USE DIRECTORIES
OPERATIONS
create a node (Folder, File)
Update Properties - i.e. the content
move a node
delete a node
get a node
CONSTRAINTS
a node has a name
a node has a path
a node has properties - i.e. content
a node can have children
UNIVERSAL INTERFACE
JCR - CONTENT REPOSITORY FOR JAVA WORLD
Describes De nition of Workspace, Session, Node and
Properties
Current Spec: 283
Persisting content as in XML
CONTENT REPOSITORY
Database for digital content
Management to search/query, add, move, delete content
hierarchical structure
Import/Export
Versioning
Locking
WHAT ABOUT PHP?
PHPCR
Porting of JCR into PHP
Interface
Implementations:
Jackrabit
Doctrine-DBAL
WORKSPACE
CR consists of one or more workspaces
Each Workspace contains an acyclic graph (tree) of items
Edges de ne parent child relation
SESSION
Connection by a user through credentials to a speci c
workspace
Possibility for Access Control for that user
Contains a complete Representation of the workspace
        $factoryclass = 'JackalopeRepositoryFactoryJackrabbit';  
        $parameters = [ 
            'jackalope.jackrabbit_uri' => ' ' 
        ]; 
        $factory = new $factoryclass();  
        $repository = $factory­>getRepository($parameters);  
        $credentials = new PHPCRSimpleCredentials('admin', 'admin');  
        $session = $repository­>login($credentials, 'default');  
    
http://localhost:8080
        $factoryclass = 'JackalopeRepositoryFactoryJackrabbit';  
        $parameters = [ 
            'jackalope.jackrabbit_uri' => ' ' 
        ]; 
        $factory = new $factoryclass();  
        $repository = $factory­>getRepository($parameters);  
        $credentials = new PHPCRSimpleCredentials('admin', 'admin');  
        $session = $repository­>login($credentials, 'default');  
    
http://localhost:8080
        $factoryclass = 'JackalopeRepositoryFactoryJackrabbit';  
        $parameters = [ 
            'jackalope.jackrabbit_uri' => ' ' 
        ]; 
        $factory = new $factoryclass();  
        $repository = $factory­>getRepository($parameters);  
        $credentials = new PHPCRSimpleCredentials('admin', 'admin');  
        $session = $repository­>login($credentials, 'default');  
    
http://localhost:8080
        $factoryclass = 'JackalopeRepositoryFactoryJackrabbit';  
        $parameters = [ 
            'jackalope.jackrabbit_uri' => ' ' 
        ]; 
        $factory = new $factoryclass();  
        $repository = $factory­>getRepository($parameters);  
        $credentials = new PHPCRSimpleCredentials('admin', 'admin');  
        $session = $repository­>login($credentials, 'default');  
    
http://localhost:8080
        $root = $session­>getRootNode();  
        $node = $root­>addNode('test', 'nt:unstructured');  
        $node­>setProperty('prop', 'value');  
        $session­>save();  
        $node = $session­>getNode('/test');  
        echo $node­>getPropertyValue('prop'); // outputs "value"  
    
        $root = $session­>getRootNode();  
        $node = $root­>addNode('test', 'nt:unstructured');  
        $node­>setProperty('prop', 'value');  
        $session­>save();  
        $node = $session­>getNode('/test');  
        echo $node­>getPropertyValue('prop'); // outputs "value"  
    
        $root = $session­>getRootNode();  
        $node = $root­>addNode('test', 'nt:unstructured');  
        $node­>setProperty('prop', 'value');  
        $session­>save();  
        $node = $session­>getNode('/test');  
        echo $node­>getPropertyValue('prop');  
         // outputs "value"  
    
        $workspace = $session­>getWorkspace();  
        $queryManager = $workspace­>getQueryManager();  
        $sql = "SELECT * FROM [nt:unstructured]  
            WHERE [nt:unstructured].[title] = 'Test'  
            ORDER BY [nt:unstructured].content";  
        $query = $queryManager­>createQuery($sql, 'JCR­SQL2');  
        $query­>setLimit(10); // limit number of results to be returned  
        $query­>setOffset(1); // set an offset to skip first n results  
        $queryResult = $query­>execute();  
        foreach ($queryResult­>getNodes() as $path => $node) {  
            echo $node­>getName();  
        } 
    
QUERYMANAGER
Ordering
Fulltext search
JOINs
Casting
DOCTRINE PHPCR
Doctrine Component
Doctrine Bundle - For Symfony Integration
SYMFONY CMF
WHEN?
hierarchical structured data
CMS features (content, menu, route)
Products and variants
WHEN NOT?
Relational data
Lots of references
CONCLUSION
QUESTIONS?
Ask Now!
Twitter: @ElectricMaxxx
Mail: Maximilian.Berghoff@may ower.de
LINKS
Website - PHPCR
Website - CMF
Documentation - PHPCR
JCR SPEC 283
THANK YOU!

Mais conteúdo relacionado

Semelhante a The content manager loves the tree

Approaches to mobile site development
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site development
Erik Mitchell
 
Impact 2014 - IIB - selecting the right transformation option
Impact 2014 -  IIB - selecting the right transformation optionImpact 2014 -  IIB - selecting the right transformation option
Impact 2014 - IIB - selecting the right transformation option
Andrew Coleman
 
Developing a Struts & Tiles application using WebSphere Studio
Developing a Struts & Tiles application using WebSphere StudioDeveloping a Struts & Tiles application using WebSphere Studio
Developing a Struts & Tiles application using WebSphere Studio
elliando dias
 
FED presentation
FED presentationFED presentation
FED presentation
ClausDue
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repository
nobby
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
Jason Noble
 
CUST-3 Document Management with Share
CUST-3 Document Management with ShareCUST-3 Document Management with Share
CUST-3 Document Management with Share
Alfresco Software
 
Using MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content RepositoryUsing MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content Repository
MongoDB
 
AJS UNIT-1 2021-converted.pdf
AJS UNIT-1 2021-converted.pdfAJS UNIT-1 2021-converted.pdf
AJS UNIT-1 2021-converted.pdf
SreeVani74
 
Building services using windows azure
Building services using windows azureBuilding services using windows azure
Building services using windows azure
Suliman AlBattat
 
In-Fisherman.com - Building an Enterprise Level Drupal Site
In-Fisherman.com - Building an Enterprise Level Drupal SiteIn-Fisherman.com - Building an Enterprise Level Drupal Site
In-Fisherman.com - Building an Enterprise Level Drupal Site
Mediacurrent
 
Drupal 8 meets to symphony
Drupal 8 meets to symphonyDrupal 8 meets to symphony
Drupal 8 meets to symphony
Brahampal Singh
 
Obevo Javasig.pptx
Obevo Javasig.pptxObevo Javasig.pptx
Obevo Javasig.pptx
LadduAnanu
 
L0043 - Interfacing to Eclipse Standard Views
L0043 - Interfacing to Eclipse Standard ViewsL0043 - Interfacing to Eclipse Standard Views
L0043 - Interfacing to Eclipse Standard Views
Tonny Madsen
 
Angular - Chapter 6 - Firebase Integration
Angular - Chapter 6 - Firebase IntegrationAngular - Chapter 6 - Firebase Integration
Angular - Chapter 6 - Firebase Integration
WebStackAcademy
 
Ufo Ship for AWS ECS
Ufo Ship for AWS ECSUfo Ship for AWS ECS
Ufo Ship for AWS ECS
Tung Nguyen
 
one|content : joomla on steroids
one|content : joomla on steroidsone|content : joomla on steroids
one|content : joomla on steroids
Paul Delbar
 
Intro to Core Data
Intro to Core DataIntro to Core Data
Intro to Core Data
Make School
 
JSF 2.0 Preview
JSF 2.0 PreviewJSF 2.0 Preview
JSF 2.0 Preview
Skills Matter
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
Mahmoud Tolba
 

Semelhante a The content manager loves the tree (20)

Approaches to mobile site development
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site development
 
Impact 2014 - IIB - selecting the right transformation option
Impact 2014 -  IIB - selecting the right transformation optionImpact 2014 -  IIB - selecting the right transformation option
Impact 2014 - IIB - selecting the right transformation option
 
Developing a Struts & Tiles application using WebSphere Studio
Developing a Struts & Tiles application using WebSphere StudioDeveloping a Struts & Tiles application using WebSphere Studio
Developing a Struts & Tiles application using WebSphere Studio
 
FED presentation
FED presentationFED presentation
FED presentation
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repository
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
 
CUST-3 Document Management with Share
CUST-3 Document Management with ShareCUST-3 Document Management with Share
CUST-3 Document Management with Share
 
Using MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content RepositoryUsing MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content Repository
 
AJS UNIT-1 2021-converted.pdf
AJS UNIT-1 2021-converted.pdfAJS UNIT-1 2021-converted.pdf
AJS UNIT-1 2021-converted.pdf
 
Building services using windows azure
Building services using windows azureBuilding services using windows azure
Building services using windows azure
 
In-Fisherman.com - Building an Enterprise Level Drupal Site
In-Fisherman.com - Building an Enterprise Level Drupal SiteIn-Fisherman.com - Building an Enterprise Level Drupal Site
In-Fisherman.com - Building an Enterprise Level Drupal Site
 
Drupal 8 meets to symphony
Drupal 8 meets to symphonyDrupal 8 meets to symphony
Drupal 8 meets to symphony
 
Obevo Javasig.pptx
Obevo Javasig.pptxObevo Javasig.pptx
Obevo Javasig.pptx
 
L0043 - Interfacing to Eclipse Standard Views
L0043 - Interfacing to Eclipse Standard ViewsL0043 - Interfacing to Eclipse Standard Views
L0043 - Interfacing to Eclipse Standard Views
 
Angular - Chapter 6 - Firebase Integration
Angular - Chapter 6 - Firebase IntegrationAngular - Chapter 6 - Firebase Integration
Angular - Chapter 6 - Firebase Integration
 
Ufo Ship for AWS ECS
Ufo Ship for AWS ECSUfo Ship for AWS ECS
Ufo Ship for AWS ECS
 
one|content : joomla on steroids
one|content : joomla on steroidsone|content : joomla on steroids
one|content : joomla on steroids
 
Intro to Core Data
Intro to Core DataIntro to Core Data
Intro to Core Data
 
JSF 2.0 Preview
JSF 2.0 PreviewJSF 2.0 Preview
JSF 2.0 Preview
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 

Mais de Maximilian Berghoff

Sustainability in der deploy pipeline
Sustainability in der deploy pipelineSustainability in der deploy pipeline
Sustainability in der deploy pipeline
Maximilian Berghoff
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
Maximilian Berghoff
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
Maximilian Berghoff
 
Natural language understanding meets php php ruhr 2018
Natural language understanding meets php   php ruhr 2018Natural language understanding meets php   php ruhr 2018
Natural language understanding meets php php ruhr 2018
Maximilian Berghoff
 
NLU meets PHP
NLU meets PHPNLU meets PHP
NLU meets PHP
Maximilian Berghoff
 
Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019
Maximilian Berghoff
 
Search engine optimization for symfony developers
Search engine optimization for symfony developersSearch engine optimization for symfony developers
Search engine optimization for symfony developers
Maximilian Berghoff
 
Introduction into FrOSCon PHP Track
Introduction into FrOSCon PHP TrackIntroduction into FrOSCon PHP Track
Introduction into FrOSCon PHP Track
Maximilian Berghoff
 
Angular Workshop FrOSCon 2018
Angular Workshop  FrOSCon 2018Angular Workshop  FrOSCon 2018
Angular Workshop FrOSCon 2018
Maximilian Berghoff
 
API Plattform - A Backend in Minutes
API Plattform - A Backend in MinutesAPI Plattform - A Backend in Minutes
API Plattform - A Backend in Minutes
Maximilian Berghoff
 
Aspects Of Code Quality meetup
Aspects Of Code Quality   meetupAspects Of Code Quality   meetup
Aspects Of Code Quality meetup
Maximilian Berghoff
 
Reactive Javascript - FrOSCon - 2016
Reactive Javascript - FrOSCon - 2016Reactive Javascript - FrOSCon - 2016
Reactive Javascript - FrOSCon - 2016
Maximilian Berghoff
 
Extending a symfony application by cms features
Extending a symfony application by cms featuresExtending a symfony application by cms features
Extending a symfony application by cms features
Maximilian Berghoff
 
Concepts of Code Quality
Concepts of Code QualityConcepts of Code Quality
Concepts of Code Quality
Maximilian Berghoff
 
Mit dem API ins CMS
Mit dem API ins CMSMit dem API ins CMS
Mit dem API ins CMS
Maximilian Berghoff
 
Reactive java script mit rxjs basta! 2016
Reactive java script mit rxjs   basta! 2016Reactive java script mit rxjs   basta! 2016
Reactive java script mit rxjs basta! 2016
Maximilian Berghoff
 
Eine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweiternEine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweitern
Maximilian Berghoff
 
RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23
Maximilian Berghoff
 
RESTing on HTTP
RESTing on HTTPRESTing on HTTP
RESTing on HTTP
Maximilian Berghoff
 
Symfony-CMF/SeoBundle - unKonf
Symfony-CMF/SeoBundle - unKonfSymfony-CMF/SeoBundle - unKonf
Symfony-CMF/SeoBundle - unKonf
Maximilian Berghoff
 

Mais de Maximilian Berghoff (20)

Sustainability in der deploy pipeline
Sustainability in der deploy pipelineSustainability in der deploy pipeline
Sustainability in der deploy pipeline
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
 
Natural language understanding meets php php ruhr 2018
Natural language understanding meets php   php ruhr 2018Natural language understanding meets php   php ruhr 2018
Natural language understanding meets php php ruhr 2018
 
NLU meets PHP
NLU meets PHPNLU meets PHP
NLU meets PHP
 
Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019
 
Search engine optimization for symfony developers
Search engine optimization for symfony developersSearch engine optimization for symfony developers
Search engine optimization for symfony developers
 
Introduction into FrOSCon PHP Track
Introduction into FrOSCon PHP TrackIntroduction into FrOSCon PHP Track
Introduction into FrOSCon PHP Track
 
Angular Workshop FrOSCon 2018
Angular Workshop  FrOSCon 2018Angular Workshop  FrOSCon 2018
Angular Workshop FrOSCon 2018
 
API Plattform - A Backend in Minutes
API Plattform - A Backend in MinutesAPI Plattform - A Backend in Minutes
API Plattform - A Backend in Minutes
 
Aspects Of Code Quality meetup
Aspects Of Code Quality   meetupAspects Of Code Quality   meetup
Aspects Of Code Quality meetup
 
Reactive Javascript - FrOSCon - 2016
Reactive Javascript - FrOSCon - 2016Reactive Javascript - FrOSCon - 2016
Reactive Javascript - FrOSCon - 2016
 
Extending a symfony application by cms features
Extending a symfony application by cms featuresExtending a symfony application by cms features
Extending a symfony application by cms features
 
Concepts of Code Quality
Concepts of Code QualityConcepts of Code Quality
Concepts of Code Quality
 
Mit dem API ins CMS
Mit dem API ins CMSMit dem API ins CMS
Mit dem API ins CMS
 
Reactive java script mit rxjs basta! 2016
Reactive java script mit rxjs   basta! 2016Reactive java script mit rxjs   basta! 2016
Reactive java script mit rxjs basta! 2016
 
Eine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweiternEine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweitern
 
RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23
 
RESTing on HTTP
RESTing on HTTPRESTing on HTTP
RESTing on HTTP
 
Symfony-CMF/SeoBundle - unKonf
Symfony-CMF/SeoBundle - unKonfSymfony-CMF/SeoBundle - unKonf
Symfony-CMF/SeoBundle - unKonf
 

Último

一比一原版(USYD毕业证)悉尼大学毕业证如何办理
一比一原版(USYD毕业证)悉尼大学毕业证如何办理一比一原版(USYD毕业证)悉尼大学毕业证如何办理
一比一原版(USYD毕业证)悉尼大学毕业证如何办理
k4ncd0z
 
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalmanuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
wolfsoftcompanyco
 
Bengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal BrandingBengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal Branding
Tarandeep Singh
 
HijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process HollowingHijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process Hollowing
Donato Onofri
 
办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理
办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理
办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理
uehowe
 
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
uehowe
 
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
xjq03c34
 
Should Repositories Participate in the Fediverse?
Should Repositories Participate in the Fediverse?Should Repositories Participate in the Fediverse?
Should Repositories Participate in the Fediverse?
Paul Walk
 
Discover the benefits of outsourcing SEO to India
Discover the benefits of outsourcing SEO to IndiaDiscover the benefits of outsourcing SEO to India
Discover the benefits of outsourcing SEO to India
davidjhones387
 
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
uehowe
 
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
3a0sd7z3
 
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
ysasp1
 
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
3a0sd7z3
 
Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!
Toptal Tech
 
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
rtunex8r
 
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
fovkoyb
 

Último (16)

一比一原版(USYD毕业证)悉尼大学毕业证如何办理
一比一原版(USYD毕业证)悉尼大学毕业证如何办理一比一原版(USYD毕业证)悉尼大学毕业证如何办理
一比一原版(USYD毕业证)悉尼大学毕业证如何办理
 
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalmanuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
 
Bengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal BrandingBengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal Branding
 
HijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process HollowingHijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process Hollowing
 
办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理
办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理
办理毕业证(NYU毕业证)纽约大学毕业证成绩单官方原版办理
 
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
办理毕业证(UPenn毕业证)宾夕法尼亚大学毕业证成绩单快速办理
 
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
办理新西兰奥克兰大学毕业证学位证书范本原版一模一样
 
Should Repositories Participate in the Fediverse?
Should Repositories Participate in the Fediverse?Should Repositories Participate in the Fediverse?
Should Repositories Participate in the Fediverse?
 
Discover the benefits of outsourcing SEO to India
Discover the benefits of outsourcing SEO to IndiaDiscover the benefits of outsourcing SEO to India
Discover the benefits of outsourcing SEO to India
 
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
 
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
 
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
 
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
 
Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!
 
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
 
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
 

The content manager loves the tree