diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c08f9ad --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +_site \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 0000000..43112b3 --- /dev/null +++ b/404.html @@ -0,0 +1,61 @@ + + + + Word of MAOO + + + + + + + + + + + + +
+
+

Word of maoo

+ +

+ + + + +

+
+ +
+

The page you requested was not found

+ +If you really think the page you are looking for should be here, feel +free to mail me + +
+ +
+ + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..a2cd023 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +blog.session.it diff --git a/README b/README deleted file mode 100644 index e69de29..0000000 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..91abcf8 --- /dev/null +++ b/_config.yml @@ -0,0 +1,6 @@ +highlighter: true +paginate: 7 +markdown: rdiscount +permalink: /:year/:month/:day/:title +gems: [jekyll-paginate] +# server: false diff --git a/_includes/disqus.html b/_includes/disqus.html new file mode 100644 index 0000000..e61f258 --- /dev/null +++ b/_includes/disqus.html @@ -0,0 +1,16 @@ +
+ + +blog comments powered by Disqus diff --git a/_includes/feeditem.xml b/_includes/feeditem.xml new file mode 100644 index 0000000..46dea77 --- /dev/null +++ b/_includes/feeditem.xml @@ -0,0 +1,7 @@ + + {{ post.title }} + + {{ post.date | date_to_xmlschema }} + http://blog.session.it{{ post.url }}/ + {{ post.content | truncatewords: 50 | strip_html | xml_escape }} + diff --git a/_includes/listitem.html b/_includes/listitem.html new file mode 100644 index 0000000..669854d --- /dev/null +++ b/_includes/listitem.html @@ -0,0 +1,9 @@ +
  • + {{ post.date | date: "%e %B %Y" }} + {{ post.title }} + + {% for c in post.categories %} + #{{ c }} + {% endfor %} + +
  • diff --git a/_includes/meta.html b/_includes/meta.html new file mode 100644 index 0000000..0a1174a --- /dev/null +++ b/_includes/meta.html @@ -0,0 +1,11 @@ +--- +--- + +{% if page.meta-robots %} + +{% endif %} +{% if page.meta-description %} + +{% endif %} + + diff --git a/_includes/post_header.html b/_includes/post_header.html new file mode 100644 index 0000000..e564f64 --- /dev/null +++ b/_includes/post_header.html @@ -0,0 +1,14 @@ +

    + {{ page.title }} +

    +
    +
    + {{ page.date | date: "%B %e, %Y" }} + {% if page.categories != empty %} + - tagged + {% for c in page.categories %} + #{{ c }} + {% endfor %} + {% endif %} +
    +
    diff --git a/_layouts/categories.html b/_layouts/categories.html new file mode 100644 index 0000000..1333ddc --- /dev/null +++ b/_layouts/categories.html @@ -0,0 +1,11 @@ +--- +layout: default +--- +
    +

    Categories

    +
    + {% for c in page.categories %} + #{{ c.title }} + {% endfor %} +
    +
    diff --git a/_layouts/category.html b/_layouts/category.html new file mode 100644 index 0000000..6ff468f --- /dev/null +++ b/_layouts/category.html @@ -0,0 +1,15 @@ +--- +layout: default +--- +
    +

    + Posts filed under #{{ page.title }} +

    +
    + +
    +
    diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..2b54a68 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,57 @@ + + + + Word of MAOO + + + + + + + + + + + + +
    +
    +

    Word of maoo

    + +

    + + + + +

    +
    + +
    + {{ content }} +
    + +
    + + + + + + + diff --git a/_layouts/feed.html b/_layouts/feed.html new file mode 100644 index 0000000..0db7864 --- /dev/null +++ b/_layouts/feed.html @@ -0,0 +1,16 @@ +--- +paginate: 10 +--- + + + Word of MAOO + + + {{ site.time | date_to_xmlschema }} + http://blog.session.it/ + + Maurizio Pillitu + + Copyright (c) 2010-2011 Maurizio Pillitu + {{ content }} + diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..81654e6 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,15 @@ +--- +layout: default +comments: true +--- +
    + {% include post_header.html %} + {% if page.primary_img %} + + {% endif %} + {{ content }} + {% if page.comments %} + {% include disqus.html %} + {% endif %} + +
    diff --git a/_plugins/categories.rb b/_plugins/categories.rb new file mode 100644 index 0000000..1052e84 --- /dev/null +++ b/_plugins/categories.rb @@ -0,0 +1,72 @@ +module Jekyll + + class CategoryIndex < Page + def initialize(site, base, dir, category) + @site = site + @base = base + @dir = dir + @name = 'index.html' + + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), 'category.html') + self.data['category'] = site.categories[category] + self.data['title'] = "#{category}" + end + end + + class CategoriesCloud < Page + def initialize(site, base, categories) + @site = site + @base = base + @categories = categories + @name = 'index.html' + @dir = 'category' + + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), 'categories.html') + self.data['categories'] = categories; + end + end + + class CategoryGenerator < Generator + safe true + + def generate(site) + if site.layouts.key? 'category' + dir = site.config['category_dir'] || 'category' + site.categories.keys.each do |category| + write_category_index(site, File.join(dir, category), category) + end + end + end + + def write_category_index(site, dir, category) + index = CategoryIndex.new(site, site.source, dir, category) + index.render(site.layouts, site.site_payload) + index.write(site.dest) + site.pages << index + end + end + + class CategoriesGenerator < Generator + safe true + + def generate(site) + cats = Array.new + site.categories.keys.each do |category| + c = Hash["title" => category, + "size" => 20 + 3*site.categories[category].length] + cats.push(c) + end + write_categories_cloud(site, cats) + end + + def write_categories_cloud(site, categories) + cloud = CategoriesCloud.new(site, site.source, categories) + cloud.render(site.layouts, site.site_payload) + cloud.write(site.dest) + site.pages << cloud + end + end + +end diff --git a/_posts/2012-05-15-mmt-maven-plugin-0.1-SNAPSHOT-released.md b/_posts/2012-05-15-mmt-maven-plugin-0.1-SNAPSHOT-released.md new file mode 100644 index 0000000..1659c89 --- /dev/null +++ b/_posts/2012-05-15-mmt-maven-plugin-0.1-SNAPSHOT-released.md @@ -0,0 +1,106 @@ +--- +title: mmt-maven-plugin 0.1-SNAPSHOT released +layout: post +primary_img: /img/post/alfresco-logo.png +categories: [alfresco, maven, amp, mmt] +meta-description: mmt-maven-plugin 0.1-SNAPSHOT released +--- + +MMT Maven Plugin +================ + +UPDATE
    +The mmt-maven-plugin have been deprecated in favour of the alfresco-maven-plugin and the [Maven Alfresco SDK](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-lifecycle-aggregator/latest/index.html) + +
    + +After a month (or so) of experiments, it was time to deploy [the first snapshot](http://maven.alfresco.com/nexus/content/repositories/snapshots/org/alfresco/maven/plugin/mmt-maven-plugin/0.1-SNAPSHOT/) of a new version of the [maven-amp-plugin](http://maven.alfresco.com/nexus/content/repositories/alfresco-docs/maven-alfresco-lifecycle/plugins/maven-amp-plugin/components.html), the **mmt-maven-plugin**. Since there is no official documentation yet, I just wanted to share with you an initial draft of the usage and goal configurations; you can start using it already and test it in your builds that are currently based on maven-amp-plugin. The plugin is currently committed as a branch of the [Maven Alfresco Archetypes Google Code project](http://code.google.com/p/maven-alfresco-archetypes), although it could be soon moved to an Alfresco internal code repository. + +In a nutshell, the MMT plugin covers all features of his predecessor, the AMP Plugin; the difference is in the code; the AMP Plugin was a rewriting of the maven-war-plugin, replacing ".war" with ".amp" and disabling some code here and there; since it was working fine no effort was ever made to improve it; on the contrary, the MMT Plugin uses the Alfresco Repository internals to perform the AMP operations, drastically lowering complexity and amount of code to maintain. + +MMT Goals +====================== + +The mmt-maven-plugin provides the following features: + +* **Packages an AMP** starting from a simple (and configurable) Maven project folder structure +* Performs **AMP to WAR overlay** by using the Alfresco Repository ModuleManagementTool and emulating the same process during Alfresco boostrap + +Packaging an AMP +======= + +* Define your POM as + + + amp + + +* Specify a module.properties file in the project's root folder, containing the properties + +
    +    module.id=${project.artifactId}
    +    module.title=${project.name}
    +    module.description=${project.description}
    +    module.version=${project.version}
    +    
    + +As you can see, the file is filtered with Maven project placeholders + +Declare the mmt-maven-plugin in your POM build section, as follows + + + + + org.alfresco.maven.plugin + mmt-maven-plugin + 0.1-SNAPSHOT + + + + +you can optionally define the following configurations to override your Maven project's structure (although not recommended) + + + ${project.build.outputDirectory} + src/main/webapp + src/main/webapp + + +AMP to WAR Overlay +======= + +To overlay an existing Alfresco WAR file, you'll need the following elements + +* Add a dependency to the Alfresco WAR webapp + + + + org.alfresco.enterprise + alfresco + 4.0.1 + war + + + +* Add the mmt-plugin configuration to run the install goal after the AMP have been packaged + + + org.alfresco.maven.plugin + mmt-maven-plugin + 0.1-SNAPSHOT + + + unpack-amps + package + + install + + + ${project.build.directory}/${project.build.finalName}.${project.packaging} + + + + + + +Please be aware that this is still an experimental work; I hope to give you some updates about this effort by the end of this/next week; meantime, any comment/feedback is indeed more than welcome. \ No newline at end of file diff --git a/_posts/2013-04-09-alfresco-assocs-with-regexp.md b/_posts/2013-04-09-alfresco-assocs-with-regexp.md new file mode 100644 index 0000000..4fef9bb --- /dev/null +++ b/_posts/2013-04-09-alfresco-assocs-with-regexp.md @@ -0,0 +1,21 @@ +--- +title: Fetching Alfresco Associations using regular expressions +layout: post +primary_img: /img/post/link-building.jpg +categories: [alfresco] +meta-description: Fetching Alfresco Associations using regular expressions +--- + + +Long time no see ha? + +I'd like to share with you (and keep track of) a simple code optimisation that allowed me write a better, cleaner and more performing Alfresco backend logic. +I've searched around some examples on how to do it, but there's not much, so here we are! + +In the first code block I am fetching all target associations from a node and - in a second stage - extract only those that I really need. + +The second code block does exactly the same, but avoiding a post-processing iteration and delivering a nice and clean 1-liner solution. + +The last block defines another Regular Expression that matches all QNames of a given namespace. You can notice that the match is done upon the fully qualified QName, using the namespace URL, not its prefix. + + \ No newline at end of file diff --git a/_posts/2013-04-10-maven-alfresco-enterprise.md b/_posts/2013-04-10-maven-alfresco-enterprise.md new file mode 100644 index 0000000..0315aca --- /dev/null +++ b/_posts/2013-04-10-maven-alfresco-enterprise.md @@ -0,0 +1,103 @@ +--- +title: Using Maven Alfresco SDK with the Enterprise edition +layout: post +primary_img: /img/post/alfresco-logo.png +categories: [alfresco, maven, sdk, build] +meta-description: Using Maven Alfresco SDK with the Enterprise edition +--- + +If you're an Alfresco aficionado, you should already know that last year we've released a new [Alfresco SDK](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-lifecycle-aggregator/latest/index.html) to make developer's life easier and to provide a solid, consistent and reliable way to manage your Alfresco (customisation) projects. + +If it's the first time you hear about this, start with [Gab's post](http://mindthegab.com/2012/11/05/maven-alfresco-sdk-1-0-is-finally-out-and-ready-for-you-to-enjoy/) to read about the project's history and all pointers. + +In both cases, you may have missed the 1.0.1 release, whose biggest improvement is to allow the SDK to work with Alfresco Enterprise 4.1.2 (and later) versions. Earlier versions are not supported at the moment. This post guides you through all the steps to build an Alfresco Enterprise customisation using the Maven SDK. + +Prerequisites +================ +In order to get at the bottom of this tutorial you need credentials (username/password) to access the [Alfresco Nexus instance](https://artifacts.alfresco.com/nexus)), where the Enterprise artifacts are hosted; use the Nexus web interface to search for dependencies, check versions and other coordinates of the artifacts you need. + +If you are an Alfresco customer and you want to request your credentials, you can follow this [internal article](https://support.alfresco.com/ics/support/default.asp?deptID=15026&task=knowledge&questionID=91) + +And Maven 3.0.x of course. + +That's it. No database nor tomcat needed. True story. + +Generate a Maven Project using the archetypes +================ +First step is to generate a Maven project; for simplicity we will use the [alfresco-amp-archetype](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-lifecycle-aggregator/latest/archetypes/alfresco-amp-archetype/index.html), although the very same steps apply for the all-in-one archetype. + + mvn archetype:generate -DarchetypeCatalog=https://artifacts.alfresco.com/nexus/content/groups/public/archetype-catalog.xml -Dfilter=org.alfresco.maven.archetype: + +The following command will ask you to define the following parameters: + +* archetype - at the time of writing there are only 2 types of archetypes available: **alfresco-allinone-archetype** (1) and **alfresco-amp-archetype** (2). Let's go with 1 +* groupId - no special rules apply, you can choose any string you want. In my case I choose it.session.alfresco +* artifactId - as above, with the difference that the artifactId will also be the name of the folder that Maven will create as a result of the current command execution. I choose session-repo-amp +* version - the SDK version to use. It is very important that you choose option #2 (1.0.1) or above, otherwise the generated project will fail during the first build. + +You will be asked to confirm all properties; type Y. + +BUILD SUCCESSFUL? Let's move on! + +Building the Maven Project using the community edition +================ +Before testing the build with the Enterprise edition, it is strongly advised to try building with the community first. + +The downside of this approach is that you will have to download all Alfresco Community dependencies first and - after that - all Alfresco Enterprise ones. If you have a slow connection, you may consider to skip this step and move to the next one; however, if you're having a hard time with the SDK (Maven sometimes can be a bitch) I advise you to test this approach. + +It is as simple as + + cd session-repo-amp && mvn integration-test -Pamp-to-war + +(Maven will download roughly 300Mb during the first build; this is probably the best time to take a break) + +Your command-line shell should end up with + + INFO::Started SelectChannelConnector@0.0.0.0:8080 + [INFO] Started Jetty Server + +Point your browser to **http://localhost:8080/session-repo-amp** and try to login using admin/admin; if everything works as expected you can move to the next section. + +Configure access to private repositories +================ +Open your **~/.m2/settings.xml** (or create one if it does not exist) and define the following **** item + + + ... + + ... + + alfresco-private-repository + your_usernmae + your_plain_password + + +If you don't like to write plain passwords in XML configuration files (like me), I strongly advise you to follow the [Maven tutorial on password encryption](http://maven.apache.org/guides/mini/guide-encryption.html), but not before running the first successful build with the Enterprise edition. Just keep it for later. + +NOTE! If you are new to Maven, I strongly advise to comment out any configurations from your **settings.xml** (at least for the first run), since mirroring delegates the entire artifact resolution to one central repository which may have been wrongly configured, leading to unresolved artifacts during the build. + +Switch your project to Enterprise +================ +Open **session-repo-amp/pom.xml** and set the following property values + + 4.1.2 + org.alfresco.enterprise + +You also need to change the repository configuration: instead of using the public Alfresco Maven repository (defined in your current pom file as alfresco-public), we need to switch to the private one. We don't need to add a new ****, since all public artifacts are also served through the private repo. + + + alfresco-private-repository + https://artifacts.alfresco.com/nexus/content/groups/private + + +Make sure that the repository matches with the one specified earlier in the **settings.xml** file + +Run it (again) +================ +As before: + + cd session-repo-amp && mvn integration-test -Pamp-to-war + +And now? +================ +Why don't you leave a message on the [discussion list](https://groups.google.com/forum/#!forum/maven-alfresco) and share your development experience with the rest of the community? Also, if you have problems with the build, that's the right place to ask for help. \ No newline at end of file diff --git a/_posts/2013-12-09-alfresco-4-ecm-implementation.md b/_posts/2013-12-09-alfresco-4-ecm-implementation.md new file mode 100644 index 0000000..bb41953 --- /dev/null +++ b/_posts/2013-12-09-alfresco-4-ecm-implementation.md @@ -0,0 +1,58 @@ +--- +title: Reviewing Alfresco 4 Enterprise Content Management Implementation +layout: post +primary_img: /img/post/alf-4-ecm-impl-book.jpg +categories: [alfresco, book, review] +meta-description: Reviewing Alfresco 4 Enterprise Content Management Implementation +--- + +This weekend I've read [Alfresco 4 Enterprise Content Management Implementation](http://www.packtpub.com/alfresco-4-enterprise-content-management-implementation/book), published by Packt on July 2013; in this review I'd like to provide some high-level description (and observations) of the most important chapters. + +The book is based on Alfresco Enterprise 4.1.4, released on April 2013; currently the latest Enterprise version released is 4.2.0, which introduces some key features mentioned in this review. + +Considering the huge amount and quality of information contained in this book, I consider it almost mandatory to have: + +* If you want to introduce Alfresco Enterprise in your company, but don't know how (yet) +* If you're going to design architectures and/or applications based on Alfresco +* If you're a devops team who's dealing with an Alfresco project but never heard of it 'til now + +### 1. Introduction to Alfresco +Probably the chapter I've enjoyed most; it introduces the direction Alfresco is taking in the evolution of ECM Open solutions: the Hybrid story, the key role of Open Standards, modern challenges of Business Automation and all other Alfresco components that map the wide landscape of the _Enterprise Collaboration_ use cases. This overwiew contains key concepts about the _*smart & simple*_ approach to ECM that Alfresco is proposing; any _Product Owner_ investing on Alfresco should have these concepts concepts clear. + +### 2. Installing Alfresco +This chapter goes through the Alfresco installation process using the Alfresco installer (one, amongst many, strategy to install Alfresco); it lists and describes the most important third-party libraries used by Alfresco and how to install/configure them. + +I'd have expected more about the new [Alfresco Maven SDK](http://docs.alfresco.com/4.2/topic/com.alfresco.enterprise.doc/concepts/dev-extensions-maven-sdk.html), which is now considered the de-facto standard for building Alfresco customisations and plugins. + +I think that - especially for Enterprise needs - a chapter about installation should also mention concepts like Automation and Provisioning, using tools like [Chef](https://github.com/maoo/chef-alfresco) and [Puppet](https://github.com/jurgenlust/puppet-alfresco), especially looking at the amount of [related](http://summit.alfresco.com/barcelona/sessions/aws-cost-effective-scalable-secure-alfresco-deployments) [speeches](http://summit.alfresco.com/barcelona/sessions/publishing-alfresco-solutions-aws-test-drive) [delivered](http://summit.alfresco.com/barcelona/sessions/enabling-test-driven-rapid-dev-continuous-delivery-alfresco-apps) [at](http://summit.alfresco.com/barcelona/sessions/alfresco-virtual-appliance) the Alfresco Summit 2013 + +### 3. Getting Started with Alfresco +I found this chapter maybe too dense, but full of very interesting info; it basically delivers + +1. How to use Alfresco as a Collaboration Suite as a first-time user (based on Alfresco Explorer interface, not Share); I'd have expected to see Alfresco Share being used instead of Alfresco Explorer, considering that the latter is an interface that Alfresco is just maintaining but not developing upon since a while (at least one year) +2. How to perform administration tasks as a first-time Alfresco Administrator (using Alfresco Explorer); with Alfresco 4.2 a [new Repository Admin Console](http://blogs.alfresco.com/wp/kevinr/2013/09/30/alfresco-repository-admin-console/) is available +3. How to perform the first Alfresco configuration/run as a sysadmin (on Linux/Windows) +4. How to shape your first Alfresco architecture as a J2EE architect (high-availability, fail-over, multi-tenancy) + +### 4. Implementing Membership and Security +A deep and detailed explaination of the Alfresco Security Model (ACLs, authorities, permissions, roles); I found particularly interesting: + +1. Authentication and Authorisation explained +3. Clear separation between configuration (out of the box features) and customisation +4. Choosing the right security model for you (including examples for sso and ldap) + +The chapter is more interesting from a business perspective rather than technical; there are some interesting import/export scripts that allow to automate data migration + +### 5. Implementing Document Management +The chapter presents the core Alfresco concepts (Spaces, Documents, Metadata, ...) using Alfresco Explorer as interface and guiding the reader through some of the mostly used features (like Versioning, Metadata editing, Transformation and Extraction, Checkout/Checkin, Categories and Tags and much much more); I'd have preferred to see Alfresco Share as user interface for this chapter. + +### 8. Implementing Workflow +I found very valuable the clear distinction between built-in and customisable Workflows; the step-by-step tutorial on how to implement a custom workflow using the Eclipse Activiti Designer is very detailed (from design to deployment) and simple to follow. + +### 9. Integrating External Applications with Alfresco +This chapter gives an overview of Alfresco built-in integrations (Office, Drupal, Facebook and some more), providing an example of custom integration using Webscripts (a very common practice due to the simplicity of Webscripts implementation). REST and CMIS API are also described in details; it's an interesting reading, mostly technical, although it can be useful to evaluate the level of integration of Alfresco with a specific external product. + +If you're interested in 4.2, you cannot miss [this great article](http://ecmarchitect.com/archives/2013/09/15/3554) of Jeff Potts explaining what's new. + +### 12. Search in Alfresco +The new Alfresco Search strategy implemented in 4 introduces many options and opportunities; this chapter provides a good overview of the Alfresco Search Service and the different (Lucene/Solr) engine configurations; it is extremely important - for any type of reader - to understand the potentials of the new search features, since it plays - in most cases - a key role in the overall platform performance. \ No newline at end of file diff --git a/_posts/2015-06-15-berkshelf-and-packer.md b/_posts/2015-06-15-berkshelf-and-packer.md new file mode 100644 index 0000000..be13d5d --- /dev/null +++ b/_posts/2015-06-15-berkshelf-and-packer.md @@ -0,0 +1,41 @@ +--- +title: Adding Berkshelf feature to Packer +layout: post +primary_img: /img/post/packer-logo.png +categories: [packer, chef, berkshelf] +meta-description: Adding Berkshelf feature to Packer +--- + +In order to use Chef ([the Berkshelf Way](https://www.youtube.com/watch?v=hYt0E84kYUI)) with [Packer](https://packer.io/), it is a common approach to define a script that wraps the invocation of Packer and runs the `berks install` (or `berks vendor`) command that resolves the Chef cookbooks that you need; an interesting discussion can be found on [Packer issue #590](https://github.com/mitchellh/packer/issues/590) + +As others, we ended up with [our "own" Packer wrapper script](https://github.com/Alfresco/packer-common), though it is hard to debug, error-prone and "hacky"; that's why we tried to enhance Packer chef-solo provisioner. + +To make the solution a bit more generic, we introduced a `pre_local_commands` parameter to the `chef-solo` Packer provisioner, allowing to run commands and resolve cookbooks (and/or databags), as in the following example: + +``` +"provisioners": [ + { + "type": "chef-solo", + "cookbook_paths": [ + "/tmp/berks-vendor" + ], + "data_bags_path": "/tmp/databags/data_bags", + "pre_local_commands" : [ + "/bin/rm -rf /tmp/databags", + "/usr/bin/git clone git@github.com:maoo/data_bags_test.git /tmp/databags", + "/bin/rm -rf /tmp/berks-vendor", + "/opt/chefdk/bin/berks vendor /tmp/berks-vendor" + ], + "run_list": ["nginx::default"] + } +``` + +[https://github.com/mitchellh/packer/compare/master...maoo:chef-solo-precommands](https://github.com/mitchellh/packer/compare/master...maoo:chef-solo-precommands) + +To test it, you can: + +- checkout and build [https://github.com/maoo/packer](https://github.com/maoo/packer) , branch `chef-solo-precommands` (follow the README) +- checkout [https://github.com/maoo/packer_pre_command_test](https://github.com/maoo/packer_pre_command_test) +- `packer build packer.json` + +If you have the same issue, you may want to test this solution and share your thoughts. diff --git a/archive.md b/archive.md new file mode 100644 index 0000000..a2a93f8 --- /dev/null +++ b/archive.md @@ -0,0 +1,15 @@ +--- +layout: default +title: "Current Posts" +permalink: /archive/ +--- +
    +

    Archive

    +
    +
      + {% for post in site.posts %} + {% include listitem.html %} + {% endfor %} +
    +
    +
    diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..a0c04a4 Binary files /dev/null and b/favicon.ico differ diff --git a/img/avatar.jpg b/img/avatar.jpg new file mode 100644 index 0000000..623063d Binary files /dev/null and b/img/avatar.jpg differ diff --git a/img/bg.jpg b/img/bg.jpg new file mode 100644 index 0000000..e8e13e3 Binary files /dev/null and b/img/bg.jpg differ diff --git a/img/github.png b/img/github.png new file mode 100644 index 0000000..c99ab23 Binary files /dev/null and b/img/github.png differ diff --git a/img/linkedin.png b/img/linkedin.png new file mode 100644 index 0000000..b70e658 Binary files /dev/null and b/img/linkedin.png differ diff --git a/img/maven-book.png b/img/maven-book.png new file mode 100644 index 0000000..6abc983 Binary files /dev/null and b/img/maven-book.png differ diff --git a/img/post/Apache-Maven-3-Cookbook.png b/img/post/Apache-Maven-3-Cookbook.png new file mode 100644 index 0000000..6abc983 Binary files /dev/null and b/img/post/Apache-Maven-3-Cookbook.png differ diff --git a/img/post/alf-4-ecm-impl-book.jpg b/img/post/alf-4-ecm-impl-book.jpg new file mode 100644 index 0000000..44cfafc Binary files /dev/null and b/img/post/alf-4-ecm-impl-book.jpg differ diff --git a/img/post/alfresco-logo.png b/img/post/alfresco-logo.png new file mode 100644 index 0000000..34ee55c Binary files /dev/null and b/img/post/alfresco-logo.png differ diff --git a/img/post/link-building.jpg b/img/post/link-building.jpg new file mode 100644 index 0000000..1f89e65 Binary files /dev/null and b/img/post/link-building.jpg differ diff --git a/img/post/mavenalfresco.jpg b/img/post/mavenalfresco.jpg new file mode 100644 index 0000000..2628049 Binary files /dev/null and b/img/post/mavenalfresco.jpg differ diff --git a/img/post/mint-alf.png b/img/post/mint-alf.png new file mode 100644 index 0000000..d9249e8 Binary files /dev/null and b/img/post/mint-alf.png differ diff --git a/img/post/packer-logo.png b/img/post/packer-logo.png new file mode 100644 index 0000000..015ae94 Binary files /dev/null and b/img/post/packer-logo.png differ diff --git a/img/rss.png b/img/rss.png new file mode 100644 index 0000000..4b6d63b Binary files /dev/null and b/img/rss.png differ diff --git a/img/social/delicious.png b/img/social/delicious.png new file mode 100644 index 0000000..88ce2ad Binary files /dev/null and b/img/social/delicious.png differ diff --git a/img/social/digg.png b/img/social/digg.png new file mode 100644 index 0000000..1f1b736 Binary files /dev/null and b/img/social/digg.png differ diff --git a/img/social/dzone.png b/img/social/dzone.png new file mode 100644 index 0000000..09b3535 Binary files /dev/null and b/img/social/dzone.png differ diff --git a/img/social/facebook.png b/img/social/facebook.png new file mode 100644 index 0000000..b7b718d Binary files /dev/null and b/img/social/facebook.png differ diff --git a/img/social/linkedin.png b/img/social/linkedin.png new file mode 100644 index 0000000..390709e Binary files /dev/null and b/img/social/linkedin.png differ diff --git a/img/social/reddit.png b/img/social/reddit.png new file mode 100644 index 0000000..ec9fce0 Binary files /dev/null and b/img/social/reddit.png differ diff --git a/img/social/stumbleupon.png b/img/social/stumbleupon.png new file mode 100644 index 0000000..d338268 Binary files /dev/null and b/img/social/stumbleupon.png differ diff --git a/img/social/technorati.png b/img/social/technorati.png new file mode 100644 index 0000000..38c7476 Binary files /dev/null and b/img/social/technorati.png differ diff --git a/img/social/twitter.png b/img/social/twitter.png new file mode 100644 index 0000000..b6fb357 Binary files /dev/null and b/img/social/twitter.png differ diff --git a/img/twitter.png b/img/twitter.png new file mode 100644 index 0000000..6cfb9c9 Binary files /dev/null and b/img/twitter.png differ diff --git a/index.md b/index.md new file mode 100644 index 0000000..2a1ae94 --- /dev/null +++ b/index.md @@ -0,0 +1,32 @@ +--- +layout: default +comments: false +--- + +{% assign post = site.posts.first %} + +
    + + +

    + {{ post.title }} +

    +
    +
    + {{ post.date | date: "%B %e, %Y" }} + {% if post.categories != empty %} + - tagged + {% for c in post.categories %} + #{{ c }} + {% endfor %} + {% endif %} +
    +
    + + + {% if post.primary_img %} + + {% endif %} + {{ post.content }} + +
    diff --git a/rss2.xml b/rss2.xml new file mode 100644 index 0000000..3aaa648 --- /dev/null +++ b/rss2.xml @@ -0,0 +1,8 @@ +--- +layout: feed +paginate: 10 +--- +{% for post in site.posts limit:20 %} +{% include feeditem.xml %} +{% endfor %} + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..1eb7923 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,27 @@ +--- +--- + + + + + http://blog.session.it/ + {{ site.time | date_to_xmlschema }} + daily + 1.0 + + + http://blog.session.it/about/ + 2011-02-07T20:59:36+00:00 + daily + 0.6 + + {% for post in site.posts limit:20 %} + + http://blog.session.it{{ post.url }}/ + {{ post.date | date_to_xmlschema }} + weekly + 0.8 + + {% endfor %} + + diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 0000000..1926cfd --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,60 @@ +.highlight .hll { background-color: #49483e } +.highlight { background: #3A3C42; color: #f8f8f2 } +.highlight .c { color: #75715e } /* Comment */ +.highlight .err { color: #960050; background-color: #1e0010 } /* Error */ +.highlight .k { color: #66d9ef } /* Keyword */ +.highlight .l { color: #ae81ff } /* Literal */ +.highlight .n { color: #f8f8f2 } /* Name */ +.highlight .o { color: #f92672 } /* Operator */ +.highlight .p { color: #f8f8f2 } /* Punctuation */ +.highlight .cm { color: #75715e } /* Comment.Multiline */ +.highlight .cp { color: #75715e } /* Comment.Preproc */ +.highlight .c1 { color: #75715e } /* Comment.Single */ +.highlight .cs { color: #75715e } /* Comment.Special */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .kc { color: #66d9ef } /* Keyword.Constant */ +.highlight .kd { color: #66d9ef } /* Keyword.Declaration */ +.highlight .kn { color: #f92672 } /* Keyword.Namespace */ +.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */ +.highlight .kr { color: #66d9ef } /* Keyword.Reserved */ +.highlight .kt { color: #66d9ef } /* Keyword.Type */ +.highlight .ld { color: #e6db74 } /* Literal.Date */ +.highlight .m { color: #ae81ff } /* Literal.Number */ +.highlight .s { color: #e6db74 } /* Literal.String */ +.highlight .na { color: #a6e22e } /* Name.Attribute */ +.highlight .nb { color: #f8f8f2 } /* Name.Builtin */ +.highlight .nc { color: #a6e22e } /* Name.Class */ +.highlight .no { color: #66d9ef } /* Name.Constant */ +.highlight .nd { color: #a6e22e } /* Name.Decorator */ +.highlight .ni { color: #f8f8f2 } /* Name.Entity */ +.highlight .ne { color: #a6e22e } /* Name.Exception */ +.highlight .nf { color: #a6e22e } /* Name.Function */ +.highlight .nl { color: #f8f8f2 } /* Name.Label */ +.highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +.highlight .nx { color: #a6e22e } /* Name.Other */ +.highlight .py { color: #f8f8f2 } /* Name.Property */ +.highlight .nt { color: #f92672 } /* Name.Tag */ +.highlight .nv { color: #f8f8f2 } /* Name.Variable */ +.highlight .ow { color: #f92672 } /* Operator.Word */ +.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +.highlight .mf { color: #ae81ff } /* Literal.Number.Float */ +.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ +.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ +.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ +.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ +.highlight .sc { color: #e6db74 } /* Literal.String.Char */ +.highlight .sd { color: #e6db74 } /* Literal.String.Doc */ +.highlight .s2 { color: #e6db74 } /* Literal.String.Double */ +.highlight .se { color: #ae81ff } /* Literal.String.Escape */ +.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ +.highlight .si { color: #e6db74 } /* Literal.String.Interpol */ +.highlight .sx { color: #e6db74 } /* Literal.String.Other */ +.highlight .sr { color: #e6db74 } /* Literal.String.Regex */ +.highlight .s1 { color: #e6db74 } /* Literal.String.Single */ +.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ +.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ +.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ +.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ +.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/stylesheets/skuro.css b/stylesheets/skuro.css new file mode 100644 index 0000000..9f80715 --- /dev/null +++ b/stylesheets/skuro.css @@ -0,0 +1,42 @@ +html { + height: 100%; +} + +footer img { + float: right; + margin-left: 55px; +} + +ribbon { + background: #C6C6C6; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cecece), color-stop(100%, #e0e0e0)); + background: -webkit-linear-gradient(#cecece, #e0e0e0); + background: -moz-linear-gradient(#cecece, #e0e0e0); + background: -o-linear-gradient(#cecece, #e0e0e0); + background: -ms-linear-gradient(#cecece, #e0e0e0); + background: linear-gradient(#cecece, #e0e0e0); + border-bottom: 1px solid #e1e1e1; + position: relative; + margin: 0px 0px 20px -23px; + padding: 0px 25px 0px 20px; + display: block; + width: 100%; + border-right: 1px solid #e1e1e1; +} + +h5.date { + margin: 0px; +} + +img.primary { + float:right; + margin: 10px; +} + +p.persona { + margin-top: 5px; +} + +blockquote.date-wrapper { + padding: 0px 0px 2px 20px; +} diff --git a/stylesheets/styles.css b/stylesheets/styles.css new file mode 100644 index 0000000..97eb48a --- /dev/null +++ b/stylesheets/styles.css @@ -0,0 +1,362 @@ +@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700); + +html { + background: url(/img/bg.jpg) no-repeat center center fixed; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +body { + padding: 50px 0; + margin: 0; + font: 14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #555; + font-weight: 300; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy82LzEygrTcTAAAAFRJREFUSIljfPDggZRf5RIGGNjUHsNATz6jXmSL1Kb2GLiAX+USBnrymRgGGDCORgFmoNAXjEbBaBSMRsFoFIxGwWgUjEbBaBSMRsFoFIxGwWgUAABYNujumib3wAAAAABJRU5ErkJggg==') fixed; +} + +.wrapper { + width: 640px; + margin: 0 auto; + background: #DEDEDE; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + -o-border-radius: 8px; + -ms-border-radius: 8px; + -khtml-border-radius: 8px; + border-radius: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; + -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; + -o-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; + box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; +} + +header, section, footer { + display: block; +} + +a { + color: #FF6600; + text-decoration: none; +} + +p { + margin: 0 0 20px; + padding: 0; +} + +strong { + color: #222; + font-weight: 700; +} + +header { + -moz-border-radius: 8px 8px 0 0; + -webkit-border-radius: 8px 8px 0 0; + -o-border-radius: 8px 8px 0 0; + -ms-border-radius: 8px 8px 0 0; + -khtml-border-radius: 8px 8px 0 0; + border-radius: 8px 8px 0 0; + background: #C6C6C6; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cecece), color-stop(100%, #e0e0e0)); + background: -webkit-linear-gradient(#cecece, #e0e0e0); + background: -moz-linear-gradient(#cecece, #e0e0e0); + background: -o-linear-gradient(#cecece, #e0e0e0); + background: -ms-linear-gradient(#cecece, #e0e0e0); + background: linear-gradient(#cecece, #e0e0e0); + border-bottom: 1px solid #e1e1e1; + position: relative; + padding: 15px 20px 0px 20px; +} +header h1 { + margin: 0; + padding: 0; + font-size: 24px; + line-height: 1.2; + color: #FF6600; + text-shadow: rgba(255, 255, 255, 0.9) 0 1px 0; +} +header.without-description h1 { + margin: 10px 0; +} +header p { + margin: 0; + color: #61778B; + width: 300px; + font-size: 13px; +} +header p.view { + display: none; + font-weight: 700; + text-shadow: rgba(255, 255, 255, 0.9) 0 1px 0; + -webkit-font-smoothing: antialiased; +} +header p.view a { + color: #06c; +} +header p.view small { + font-weight: 400; +} +header ul { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + z-index: 1; + right: 20px; + top: 20px; + height: 38px; + padding: 1px 0; + background: #5198DF; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #77b9fb), color-stop(100%, #3782cd)); + background: -webkit-linear-gradient(#77b9fb, #3782cd); + background: -moz-linear-gradient(#77b9fb, #3782cd); + background: -o-linear-gradient(#77b9fb, #3782cd); + background: -ms-linear-gradient(#77b9fb, #3782cd); + background: linear-gradient(#77b9fb, #3782cd); + border-radius: 5px; + -moz-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + -webkit-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + -o-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + width: 240px; +} +header ul:before { + content: ''; + position: absolute; + z-index: -1; + left: -5px; + top: -4px; + right: -5px; + bottom: -6px; + background: rgba(0, 0, 0, 0.1); + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + -o-border-radius: 8px; + -ms-border-radius: 8px; + -khtml-border-radius: 8px; + border-radius: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; + -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; + -o-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; + box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; +} +header ul li { + width: 79px; + float: left; + border-right: 1px solid #3A7CBE; + height: 38px; +} +header ul li + li { + width: 78px; + border-left: 1px solid #8BBEF3; +} +header ul li + li + li { + border-right: none; + width: 79px; +} +header ul a { + line-height: 1; + font-size: 11px; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + text-align: center; + font-weight: 400; + padding-top: 6px; + height: 40px; + text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0; +} +header ul a strong { + font-size: 14px; + display: block; + color: #fff; + -webkit-font-smoothing: antialiased; +} + +section { + padding: 15px 20px; + font-size: 15px; + border-top: 1px solid #fff; + background: -webkit-gradient(linear, 50% 0%, 50% 700, color-stop(0%, #fafafa), color-stop(100%, #e5e5e5)); + background: -webkit-linear-gradient(#fafafa, #e5e5e5 700px); + background: -moz-linear-gradient(#fafafa, #e5e5e5 700px); + background: -o-linear-gradient(#fafafa, #e5e5e5 700px); + background: -ms-linear-gradient(#fafafa, #e5e5e5 700px); + background: linear-gradient(#fafafa, #e5e5e5 700px); + -moz-border-radius: 0 0 8px 8px; + -webkit-border-radius: 0 0 8px 8px; + -o-border-radius: 0 0 8px 8px; + -ms-border-radius: 0 0 8px 8px; + -khtml-border-radius: 0 0 8px 8px; + border-radius: 0 0 8px 8px; + position: relative; +} + +h1, h2, h3, h4, h5, h6 { + color: #222; + padding: 0; + margin: 0 0 20px; + line-height: 1.2; +} + +p, ul, ol, table, pre, dl { + margin: 0 0 20px; +} + +h1, h2, h3 { + line-height: 1.1; +} + +h1 { + font-size: 28px; +} + +h2 { + color: #393939; +} + +h3, h4, h5, h6 { + color: #494949; +} + +blockquote { + margin: 0 -20px 20px; + padding: 15px 20px 1px 40px; + font-style: italic; + background: #ccc; + background: rgba(0, 0, 0, 0.06); + color: #222; +} + +img { + max-width:100%; +} + +code, pre { + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + color: #333; + font-size: 12px; +} + +pre { + padding: 20px; + background: #3A3C42; + color: #f8f8f2; + margin: 0 -20px 20px; + overflow-x:auto; +} +pre code { + color: #f8f8f2; +} +li pre { + margin-left: -60px; + padding-left: 60px; +} + +table { + width: 100%; + border-collapse: collapse; +} + +th, td { + text-align: left; + padding: 5px 10px; + border-bottom: 1px solid #aaa; +} + +dt { + color: #222; + font-weight: 700; +} + +th { + color: #222; +} + +small { + font-size: 11px; +} + +hr { + border: 0; + background: #aaa; + height: 1px; + margin: 0 0 20px; +} + +footer { + width: 640px; + margin: 0 auto; + padding: 20px 0 0; + color: #ccc; + overflow: hidden; +} +footer a { + color: #fff; + font-weight: bold; +} +footer p { + float: left; +} +footer p + p { + float: right; +} + +@media print, screen and (max-width: 740px) { + body { + padding: 0; + } + + .wrapper { + -moz-border-radius: 0; + -webkit-border-radius: 0; + -o-border-radius: 0; + -ms-border-radius: 0; + -khtml-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; + width: 100%; + } + + footer { + -moz-border-radius: 0; + -webkit-border-radius: 0; + -o-border-radius: 0; + -ms-border-radius: 0; + -khtml-border-radius: 0; + border-radius: 0; + padding: 20px; + width: auto; + } + footer p { + float: none; + margin: 0; + } + footer p + p { + float: none; + } +} +@media print, screen and (max-width:580px) { + header ul { + display: none; + } + + header p.view { + display: block; + } + + header p { + width: 100%; + } +} +@media print { + header p.view a small:before { + content: 'at http://github.com/'; + } +}