<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Magnolia Employee Blogs</title>
    <link>http://www.magnolia-cms.com</link>
    <description>The blogs of the Magnolia Employees</description>
    <item>
      <title>Magnolia CMS in 2011 – another amazing year</title>
      <link>http://www.betterfasterbigger.com/2012/01/magnolia-cms-in-2011-another-amazing.html</link>
      <description>2011 has been another incredible year for Magnolia. From 4 people in 2006 we grew to 28 employees (plus a handful of externals) at the end of 2011. Read on for some insight into what has happened in 2011.&lt;br /&gt;&lt;br /&gt;A lot has been achieved last year even though for the first time in our history we did not release a new version of Magnolia. This is surprising on one hand; on the other it shows just how far we have come. Quite a number of maintenance releases have been published. Version 4.4.5 probably set a new record at Magnolia, with fixing nearly 100 issues. And we do have &lt;b&gt;Magnolia 4.5 in the making, which will be released at the end of February 2012&lt;/b&gt; and all things considered is possibly the biggest effort we have ever put into a single release.&lt;br /&gt;&lt;br /&gt;Two years ago we set out to change one aspect about Magnolia in particular: its documentation. Our documentation team has grown to three persons. Documentation has been a full blown success. Where 2 years ago we would get bad comments about our lack of documentation, today we get positive feedback up to the level that decisions for Magnolia are made because of the quality of documentation. The statistics do reflect this: &lt;b&gt;in the last 12 months we had a stunning 70% growth in unique visitors to our documentation site&lt;/b&gt;. During the same time, our corporate site traffic has grown by 17.5%.&lt;br /&gt;&lt;br /&gt;Business has reflected our strong position. Worldwide, &lt;b&gt;the number of license subscriptions has grown by 32% last year&lt;/b&gt;. Our expansion efforts in the USA resulted in an astounding &lt;b&gt;60% growth in license subscriptions for Magnolia Americas&lt;/b&gt;, which now holds 20% of our subscriptions worldwide.&lt;br /&gt;&lt;br /&gt;Notable &lt;a href="http://www.magnolia-cms.com/clients/case-studies.html" target="_blank"&gt;Client&lt;/a&gt; wins in 2011:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.atlassian.com/" target="_blank"&gt;Atlassian&lt;/a&gt;, USA&lt;/li&gt;&lt;li&gt;Autorité des Marchés Financiers (AMF), France&lt;/li&gt;&lt;li&gt;Basler Versicherungen, Schweiz&lt;/li&gt;&lt;li&gt;Bundesrechenzentrum GmbH (BRZ GmbH), Austria&lt;/li&gt;&lt;li&gt;Editora Meio &amp;amp; Mensagem Ltda., Brazil&lt;/li&gt;&lt;li&gt;FOXTEL Channels Group, Australia&lt;/li&gt;&lt;li&gt;Leroy Merlin España S.L.U., Spain&lt;/li&gt;&lt;li&gt;Lufthansa Systems Network Services GmbH, Germany&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mbc.net/en.html" target="_blank"&gt;MBC&lt;/a&gt;, Middle East (Dubai)&lt;/li&gt;&lt;li&gt;Michelin Brazil, Brazil&lt;/li&gt;&lt;li&gt;Scientific Learning, USA&lt;/li&gt;&lt;li&gt;Sheffield City Council, UK&lt;/li&gt;&lt;li&gt;Zumba Fitness, USA&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;(Links added where sites are already live and/or publicly visible). We now hold an &lt;b&gt;astonishing 7% of the worlds global 100 enterprises as our customers&lt;/b&gt;, and fully expect this number to grow much higher in the coming years.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Furthermore, in 2011 we have added the following new &lt;a href="http://www.magnolia-cms.com/partners.html" target="_blank"&gt;partners:&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Cross Agency&lt;/li&gt;&lt;li&gt;Fast Forward&lt;/li&gt;&lt;li&gt;Priocept&lt;/li&gt;&lt;li&gt;Serviceplan&lt;/li&gt;&lt;li&gt;T8y&lt;/li&gt;&lt;li&gt;Tribal DDB&lt;/li&gt;&lt;li&gt;Ventiv&lt;/li&gt;&lt;li&gt;VML&lt;/li&gt;&lt;/ul&gt;In terms of Facebook Likes, we have seen 57% growth and have 830 fans today. Our Linkedin group has 241 members, with nearly 70% growth last year.&lt;br /&gt;&lt;br /&gt;We held our first &lt;a href="http://www.magnolia-cms.com/resource-directory/webinars.html" target="_blank"&gt;two webinars in 2011&lt;/a&gt;, wrote 8 new &lt;a href="http://www.magnolia-cms.com/clients/case-studies.html" target="_blank"&gt;case studies&lt;/a&gt;, won a &lt;a href="http://www.magnolia-cms.com/our-company/news/press-releases/red-herring-win.html" target="_blank"&gt;Red Herring Top 100 Europe&lt;/a&gt; Award, are a sponsor of the &lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wemi" target="_blank"&gt;Web Experience Management Interoperability (WEMI) standard at OASIS &lt;/a&gt;and added an arabic landing page (&lt;a href="http://www.magnolia-cms.ae/"&gt;www.magnolia-cms.ae&lt;/a&gt;). A whopping &lt;a href="http://www.magnolia-cms.com/rssFeeds/rssaggregator/MagnoliaBlogs" target="_blank"&gt;64 (prev: 40) blogs entries have been written by Magnolians&lt;/a&gt; this year to help spread the word and our support team has solved 554 issues, 62% more than in 2010.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Our biggest goal for 2012 is the release of Magnolia 5&lt;/b&gt;. For 3.5 years we have designed and redesigned Magnolia's next UI. Last year we have seen a new phenomenon: iPads take the enterprise by storm. Apple recently stated that 93% of Fortune 500 companies either test or already deploy the iPad. This has made us change our plans for Magnolia's future UI in mid 2011, and by the end of 2011 we finally had the breakthrough in interaction design we have all been waiting for. &lt;b&gt;Magnolia 5 will be the first CMS on the market that has been designed for touch&lt;/b&gt;. This is tremendously exciting and will be a watershed event for us.&lt;br /&gt;&lt;br /&gt;All our efforts will be focused on not only delivering the product but also to be ready for the opportunities that Magnolia 5 will create for our business. Obviously we will &lt;a href="http://www.magnolia-cms.com/our-company/jobs.html" target="_blank"&gt;need to grow&lt;/a&gt;, and our growth will bring changes. We will ensure that these changes will not happen by accident, and that our growth remains manageable.&lt;br /&gt;&lt;br /&gt;Luckily &lt;b&gt;our financial position is excellent&lt;/b&gt;. Magnolia has no external obligations. We are independent in every aspect, where most competitors are either part of larger corporation (e.g. Fatwire (Oracle), Day (Adobe)) or have financial dependencies (e.g. venture capital). Others depend on services to finance their product development and in this way compete against their partners. &lt;b&gt;Magnolia &lt;/b&gt;on the other hand&lt;b&gt; has a sustainable license model that ensures a steady cash flow without competing against our partners&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;We have great plans for 2012, which will be a really busy year for all of us. As you can see from this review, we are in pole position to make 2012 a year to remember. I am looking forward to it.&lt;br /&gt;&lt;br /&gt;PS: &lt;a href="http://www.magnolia-cms.com/our-company/jobs.html" target="_blank"&gt;Join us&lt;/a&gt;. You will like it.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-8547392576742047146?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>growth</category>
      <category>magnolia</category>
      <category>cms</category>
      <category>statistics</category>
      <category>clients</category>
      <category>review</category>
      <category>magnolia_cms</category>
      <category>partner</category>
      <pubDate>Thu, 26 Jan 2012 14:39:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2012/01/magnolia-cms-in-2011-another-amazing.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2012-01-26T14:39:00Z</dc:date>
    </item>
    <item>
      <title>Picnik for collaborative screenshots</title>
      <link>http://finnotype.blogspot.com/2012/01/picnik-for-collaborative-screenshots.html</link>
      <description>&lt;b&gt;Update!&lt;/b&gt; Picnik &lt;a href="http://blog.picnik.com/2012/01/official-announcement-picnik-is-closing/"&gt;is closing on April 19, 2012&lt;/a&gt;. &amp;nbsp;This is sad news. I really liked working with the product. Please sign the&amp;nbsp;&lt;a href="http://signon.org/sign/dont-close-picnik"&gt;Don't Close Picnik petition&lt;/a&gt;! A subset of Picnik features is available in the Google+ Creative Kit but, crucially, the Photo Bucket is not. This means that the custom circles and arrows we use to annotate images are gone.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;At Magnolia, we recently started using &lt;a href="http://www.picnik.com/"&gt;Picnik&lt;/a&gt;&amp;nbsp;to annotate screenshots.&amp;nbsp;We wanted a casual but obvious way to draw the reader's attention to an image detail. In this post I explain why we chose Picnik and how it is working so far.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xtuC31XRDQw/TxVHE6fOreI/AAAAAAAAHDg/kEtomOe-hDU/s1600/AdminCentral-search-box.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-xtuC31XRDQw/TxVHE6fOreI/AAAAAAAAHDg/kEtomOe-hDU/s1600/AdminCentral-search-box.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Picnik is a photo editor that runs in the browser. You may have seen it as the embedded photo editor in Picasa Web Albums.&amp;nbsp;The requirements that drove us to a Web-based tool were:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;No OS lock-in&lt;/b&gt;. We have technical writers working on Windows 7, Vista and Mac OSX. It is difficult to find a screenshot tool that works on all those platforms. &lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt;&amp;nbsp;is awesome on the Mac but&amp;nbsp;a Windows version is&amp;nbsp;&lt;a href="http://techie-buzz.com/annoucements/skitch-now-free-for-all-users-coming-soon-to-a-all-platforms.html"&gt;still only hearsay&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Consistent annotations.&lt;/b&gt;&amp;nbsp;Annotations are the circles and arrows we add to screenshots to draw the reader's attention to whatever it is we write about. While any screenshot tool can take a plain screenshot, adding consistent annotation shapes is difficult unless everybody uses the same tool. Documentation ends up looking amateurish and poor if the shapes are not consistent.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Casual, hand-drawn look&lt;/b&gt;. We wanted a casual, edgy look. Straight lines and rectangles are difficult to see on a UI that already has lots of straight lines. They also look incredibly boring. If you annotated something on a piece of paper, you would grab a pen and circle it. &lt;i&gt;That's&lt;/i&gt; the look we wanted.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Shared storage&lt;/b&gt;. Web-based tools promise cloud storage. Why should everybody take the same screenshot when a perfectly good example exists in a shared library? Why draw your own arrows with a shaky mouse if there's a nice-looking arrow in the toolbox?&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I must emphasize that Picnik really isn't a screenshoot tool. It's a photo editor whose features are clearly geared towards processing photos. It's great for assembling favorite shots into a Christmas card but for taking a screenshot you still need a local tool, which is fine for us.&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;Picnik features we love and curse&lt;/h2&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Uploading&lt;/b&gt; an image is a snap. The image is opened in the editor immediately so no unnecessary browsing is needed.&amp;nbsp;Besides upload, you can open an image from Flickr, Facebook and several other popular services.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OO0-D5PBPA8/Tw2Oqy9mOfI/AAAAAAAAHCk/NVCOs1N196Y/s1600/upload.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-OO0-D5PBPA8/Tw2Oqy9mOfI/AAAAAAAAHCk/NVCOs1N196Y/s1600/upload.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Resizing&lt;/b&gt; to new dimensions works as expected. The quality of the reduced image is not as good as if you used Photoshop. The image is fuzzier, which can be a problem. Text in a screenshot must stay sharp and readable in smaller size too. To get around the issue, we either crop to the relevant area or keep the shot full-size. Modern browsers do a very good job at resizing in the viewport, certainly no worse than Picnik.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-AViu0-Gz5DA/Tw2aQOQ1DfI/AAAAAAAAHCs/cQR_cK6OifE/s1600/resize.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-AViu0-Gz5DA/Tw2aQOQ1DfI/AAAAAAAAHCs/cQR_cK6OifE/s1600/resize.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Canvas&lt;/b&gt; as a concept&amp;nbsp;does not exist as in Picnik. When you need more room around the image, add a border. The border can be any color and width. Make it white and you effectively have a bigger canvas.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Dsfe-nKS-bk/Tw2worzgwjI/AAAAAAAAHC0/RLTvm0mulo4/s1600/border.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Dsfe-nKS-bk/Tw2worzgwjI/AAAAAAAAHC0/RLTvm0mulo4/s1600/border.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Shapes&lt;/b&gt;. I drew a collection of annotation shapes by hand in Skitch and saved them as PNG files. Then I uploaded them into a Picasa Web Album that is visible in&amp;nbsp;the Photo Basket in Picnik. Now anybody in the team can drag-and-drop symbols onto an image. This solves the requirement that all writers use the same symbols to produce a consistent look and feel.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-sgnt1Q0IBA8/TxVyk0ak2II/AAAAAAAAHEI/qecJM9Qa3Nk/s1600/photo-basket-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-sgnt1Q0IBA8/TxVyk0ak2II/AAAAAAAAHEI/qecJM9Qa3Nk/s1600/photo-basket-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Text&lt;/b&gt;. Picnik has a huge variety of fonts to choose from. They are very hip and cool, which means they are perfect for a scary Halloween photo but not so great when you need readable text. We chose a font called &lt;i&gt;Just Me Again Down Here&lt;/i&gt; by Kimberly Geswein. It's a good compromise between hand-drawn look and readability. We matched the font size to the shape stroke width.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WHnHTDNfvxU/TxVy2TFW6rI/AAAAAAAAHEQ/_ZnZju4rY2E/s1600/text-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-WHnHTDNfvxU/TxVy2TFW6rI/AAAAAAAAHEQ/_ZnZju4rY2E/s1600/text-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Sharing&amp;nbsp;and layers&lt;/b&gt; are my biggest grievance with Picnik. I&amp;nbsp;&lt;a href="https://groups.google.com/a/googleproductforums.com/forum/#!topic/picnik/0ya28aWCebc/discussion"&gt;asked on the help forum&lt;/a&gt;&amp;nbsp;why sharing is so weird. Bottom line: edits are stored on the image owner's Picnik account and are not accessible to other users. This means that while you can save an image to a Picasa Web Album, other team members won't be able to edit it. The image is flat to them. This is a shame because picking up from where another use left would be fantastic. As for the shapes, we put them in a common Picasa account which all technical writers register in their Picnik. So at least the shapes are available to everyone.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;So there you have it. Picnik works for us now. Drop a comment if you solved similar requirements in your team with something else.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-4039063085424692306?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <category>usability</category>
      <category>technical writing</category>
      <category>design</category>
      <pubDate>Tue, 17 Jan 2012 13:13:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2012/01/picnik-for-collaborative-screenshots.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2012-01-17T13:13:00Z</dc:date>
    </item>
    <item>
      <title>Twitter-style character counter for textareas</title>
      <link>http://finnotype.blogspot.com/2011/12/twitter-style-character-counter-for.html</link>
      <description>In this post I show how to improve textarea usability with a Twitter-style character counter.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Validating form input length is a common strategy for reducing errors. So common in fact that&amp;nbsp;the&amp;nbsp;&lt;a href="http://reference.sitepoint.com/html/input/maxlength"&gt;HTML specification&lt;/a&gt;&amp;nbsp;provides&amp;nbsp;a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maxlength&lt;/span&gt; attribute&amp;nbsp;for &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;input&lt;/span&gt; fields. Starting with&amp;nbsp;&lt;a href="http://www.w3schools.com/html5/att_textarea_maxlength.asp"&gt;HTML5&lt;/a&gt;, multiline&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;textarea&lt;/span&gt; fields support the attribute too!&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;textarea id="message" rows=4 maxlength="100"&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Since it is always better to &lt;b&gt;prevent&lt;/b&gt; an error than catch one the user already made, here are two ways to improve textarea usability in &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt;, making sure the user knows how many characters are allowed.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Display the character limit&lt;/h2&gt;The obvious improvement is to display the character limit. In Magnolia CMS, you set the limit on the form field. The system saves it to a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maxLength&lt;/span&gt; property in the repository.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GQvhwWDy8vw/Tw1Owk4tElI/AAAAAAAAHBM/nhh4OCm5hTI/s1600/input-dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://1.bp.blogspot.com/-GQvhwWDy8vw/Tw1Owk4tElI/AAAAAAAAHBM/nhh4OCm5hTI/s400/input-dialog.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Render the length on the page:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copy the &lt;a href="http://svn.magnolia-cms.com/svn/community/modules/magnolia-module-form/tags/magnolia-module-form-1.3.1/src/main/resources/form/paragraphs/formEdit.ftl"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;formEdit.ftl&lt;/span&gt;&lt;/a&gt;&amp;nbsp;script which renders input controls.&lt;/li&gt;&lt;li&gt;Create folder&amp;nbsp;&lt;b&gt;Templating Kit &amp;gt; Templates&lt;/b&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/form/paragraphs&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Create a new template script&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;formEdit&lt;/span&gt; and paste the copied script into it.&lt;/li&gt;&lt;li&gt;Render the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maxLength&lt;/span&gt; property in the textarea element on line 21.&lt;/li&gt;&lt;li&gt;Render it visibly to the user:&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;${content.maxLength!'50'}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Enable the script and refresh the&amp;nbsp;&lt;a href="http://demo.magnolia-cms.com/demo-project/service/contact.html"&gt;Contact form&lt;/a&gt;&amp;nbsp;page.&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iXHV8mR8RNw/Tw12s483VWI/AAAAAAAAHCM/BP13fZqFWBU/s1600/maxlength-rendered.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iXHV8mR8RNw/Tw12s483VWI/AAAAAAAAHCM/BP13fZqFWBU/s1600/maxlength-rendered.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Twitter-style character counter&lt;/h2&gt;How does the user know they are approaching the limit? &lt;a href="http://cssglobe.com/post/7161/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas"&gt;jQuery Charcount plugin&lt;/a&gt;&amp;nbsp;adds a Twitter-style character counter. As the user types text, the plugin counts unused characters. When a limit is exceeded, the counter turns red.&lt;br /&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Start by &lt;a href="http://cssglobe.com/lab/charcount/charcount.zip"&gt;downloading&lt;/a&gt; the jQuery Charcount plugin kit:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;jQuery.js&lt;/b&gt; is the core jQuery script. Magnolia CMS already has it.&lt;/li&gt;&lt;li&gt;&lt;b&gt;charCount.js&lt;/b&gt;&amp;nbsp;counts the characters and draws the counter.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;CSS styles&lt;/b&gt;&amp;nbsp;sets the alarm color.&lt;/li&gt;&lt;li&gt;&lt;b&gt;01.html&lt;/b&gt;&amp;nbsp;is an example page.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;b&gt;Step 1: Add the Charcount script as a resource&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;b&gt;Templating Kit &amp;gt; Resources &amp;gt;&lt;/b&gt; &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/templating-kit/js/all&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Under &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;all&lt;/span&gt;, add a new JavaScript resource&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;In the &lt;b&gt;Advanced&lt;/b&gt; tab, set &lt;b&gt;Extension&lt;/b&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;js&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Paste the downloaded charCount.js script into the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt; item.&lt;/li&gt;&lt;li&gt;Change line 35 to read the textarea ID from the element:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;var available = $(obj).attr('maxlength') - count;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Step 2: Warn when 10 characters are left&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copy the document.ready function from the example&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;01.html&lt;/span&gt; file.&lt;/li&gt;&lt;li&gt;Paste it in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt; script before the closing &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;})(jQuery);&lt;/span&gt; line.&lt;/li&gt;&lt;li&gt;Change &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#message2&lt;/span&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;textarea&lt;/span&gt;. We are getting the IDs dynamically.&lt;/li&gt;&lt;li&gt;Set the warning to 10.&lt;/li&gt;&lt;/ol&gt;The end of your script should now look like this:&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; $(document).ready(function(){ &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; //custom usage&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; $("textarea").charCount({&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; warning: 10&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; counterText: 'Characters left: ' &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; }); &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;})(jQuery);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Step 3: Make the counter red on warning&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/templating-kit/themes/pop/css&lt;/span&gt;, create a new sheet &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;On the &lt;b&gt;Advanced&lt;/b&gt; tab, set &lt;b&gt;Extension&lt;/b&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;css&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Set &lt;b&gt;Model Class&lt;/b&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;info.magnolia.module.templatingkit.resources.STKResourceModel&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Paste the following style in the &lt;b&gt;Content&lt;/b&gt; box:&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.form-wrapper div span.warning {&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;color:red;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;font-weight:bold; !important&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 4: Include the new style in the theme&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;In&amp;nbsp;&lt;b&gt;Templating Kit &amp;gt; Themes &amp;gt;&lt;/b&gt; &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/pop/cssFiles&lt;/span&gt;, copy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;styles&lt;/span&gt;&amp;nbsp;to&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Set &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;link&lt;/span&gt; property to&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/resources/templating-kit/themes/pop/css/charCount.css&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Step 5: Try it!&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reload the &lt;a href="http://demo.magnolia-cms.com/demo-project/service/contact.html"&gt;Contact&lt;/a&gt; page. Now the page has a counter that starts counting back from the limit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ndG4ZzAK8OM/TxQbTFYrUSI/AAAAAAAAHDY/tZu_zyBb5YA/s1600/counter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ndG4ZzAK8OM/TxQbTFYrUSI/AAAAAAAAHDY/tZu_zyBb5YA/s1600/counter.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Type some text into the box. When 10 characters are left, the counter turns red.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" style="cursor: move;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-4682955276519059390?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>usability</category>
      <category>magnolia</category>
      <pubDate>Mon, 16 Jan 2012 14:32:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/12/twitter-style-character-counter-for.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2012-01-16T14:32:00Z</dc:date>
    </item>
    <item>
      <title>Resources: The Code for Faceted Search Navigation</title>
      <link>http://propellerhat.wordpress.com/2011/12/28/resources-the-code-for-faceted-search-navigation/</link>
      <description>In my last post, I discussed the data-capture portion of our new Resources page on our corporate site. Now I&amp;#8217;d like to get into the code for the page to show you how things are done. The main template for the page is pretty much a standard STK template: There are a couple of interesting [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=95&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>resources</category>
      <category>magnolia-cms</category>
      <pubDate>Wed, 28 Dec 2011 21:22:24 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/12/28/resources-the-code-for-faceted-search-navigation/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-12-28T21:22:24Z</dc:date>
    </item>
    <item>
      <title>Git at Magnolia</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/git-at-magnolia</link>
      <description>You might have heard or read about it, Magnolia is finally moving to Git. The main reasons for this move are the pains of merging and branching (i.e we just don&amp;#8217;t branch as much as we should because Subversion makes &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/git-at-magnolia"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>community</category>
      <category>forge</category>
      <category>Uncategorized</category>
      <category>infrastructure</category>
      <category>opinions</category>
      <pubDate>Wed, 28 Dec 2011 18:02:31 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/git-at-magnolia</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2011-12-28T18:02:31Z</dc:date>
    </item>
    <item>
      <title>CMIS support for Magnolia CMS</title>
      <link>http://tobias-mattsson-magnolia.blogspot.com/2011/12/cmis-support-for-magnolia-cms.html</link>
      <description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-AHeYqxjDbmA/TvtGx06CtQI/AAAAAAAAADI/Ww1fGP99rkQ/s1600/cmis_logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-AHeYqxjDbmA/TvtGx06CtQI/AAAAAAAAADI/Ww1fGP99rkQ/s1600/cmis_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;This autumn I've had the opportunity to work on implementing &lt;a href="http://docs.oasis-open.org/cmis/CMIS/v1.0/cmis-spec-v1.0.html"&gt;CMIS&lt;/a&gt; support in &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt;. CMIS stands for Content Management Interoperability Services and is a specification administered by &lt;a href="http://www.oasis-open.org/"&gt;OASIS&lt;/a&gt;. The goal is to improve interoperability between content management systems and it achieves this by defining a model representing the content in a repository and a set of services for accessing it. The services come in two flavors, SOAP Web Services and REST-style services using ATOM-format.&lt;br /&gt;&lt;br /&gt;The first version of Magnolia to have CMIS support will be 4.5. The scope of the first release is to expose the DMS in Magnolia over CMIS. This means that you will be able to download, manipulate and store content in Magnolia and access Magnolia content in other CMIS enabled systems.&lt;br /&gt;&lt;br /&gt;The implementation is based on &lt;a href="http://chemistry.apache.org/java/opencmis.html"&gt;OpenCMIS&lt;/a&gt;. An open source framework for implementing both server and client -side implementations. It's one of the libraries developed by &lt;a href="http://chemistry.apache.org/"&gt;Apache Chemistry&lt;/a&gt;. Of special interest to us is the server binding to JCR. OpenCMIS implements the services which delegates to a binding. We have extended the JCR binding to match the repository layout we use in Magnolia and integrated the OpenCMIS authentication mechanism to use our security model.&lt;br /&gt;&lt;br /&gt;In the process we encountered a few things we wanted to improve to make OpenCMIS adaptable to our repository layout. We developed this and contributed patches that were accepted by the active and focused team working on OpenCMIS. As a result our implementation is quite minimal and mainly consists of mapping the CMIS model onto our JCR layout. The value of OpenCMIS is impressive, an entire stack with both SOAP and REST that only needs to know how to interact with the specifics of a JCR layout.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://svn.magnolia-cms.com/view/forge/magnolia-module-cmis/trunk/"&gt;source code&lt;/a&gt; for the Magnolia CMIS Module is publicly available as always.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154125577090836535-937570309381513327?l=tobias-mattsson-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 28 Dec 2011 16:48:00 GMT</pubDate>
      <guid>http://tobias-mattsson-magnolia.blogspot.com/2011/12/cmis-support-for-magnolia-cms.html</guid>
      <dc:creator>Tobias Mattsson</dc:creator>
      <dc:date>2011-12-28T16:48:00Z</dc:date>
    </item>
    <item>
      <title>Rendering Paragraphs with AJAX, Part III: Autocomplete example</title>
      <link>http://tmiyar.blogspot.com/2011/12/rendering-paragraphs-with-ajax-part-iii.html</link>
      <description>In Rendering Paragraphs with AJAX&amp;nbsp;&lt;a href="http://tmiyar.blogspot.com/2011/10/rendering-paragraphs-with-ajax-part-i.html"&gt;Part 1&lt;/a&gt;&amp;nbsp;and &lt;a href="http://tmiyar.blogspot.com/2011/11/rendering-paragraphs-with-ajax-part-ii.html"&gt;Part 2&lt;/a&gt;&amp;nbsp;I showed basic examples of using AJAX in paragraphs in Magnolia CMS. In&amp;nbsp;this last post, I demonstrate how to create a predictive search for contacts and how to render a contact's details when it is selected.&lt;br /&gt;&lt;br /&gt;The end result looks like this, hoping it motivates you to read the whole post :-). It is a new paragraph that contains a text box. You type a contact name in the box and the paragraph starts listing matching contacts from the directory.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--8I7iHdyFw8/Tu8lcuViI6I/AAAAAAAAARU/tglN8wcjTrA/s1600/Screen+shot+2011-12-19+at+12.50.54+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--8I7iHdyFw8/Tu8lcuViI6I/AAAAAAAAARU/tglN8wcjTrA/s1600/Screen+shot+2011-12-19+at+12.50.54+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;When you select one of the contacts, a contact paragraph is rendered, displaying full contact information from the directory.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xCd5QwMC7eM/Tu8leQNdLlI/AAAAAAAAARc/8wQXj_a7ffo/s1600/Screen+shot+2011-12-19+at+12.51.52+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-xCd5QwMC7eM/Tu8leQNdLlI/AAAAAAAAARc/8wQXj_a7ffo/s1600/Screen+shot+2011-12-19+at+12.51.52+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;What is needed to achieve this? A paragraph, a model class and of course a nice &lt;a href="http://jqueryui.com/demos/autocomplete/"&gt;jQuery Autocomplete widget&lt;/a&gt;. The last bit is what makes this example so simple to create.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Paragraph script&lt;/h2&gt;The paragraph script looks like this.&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; [#assign cms=JspTaglibs["cms-taglib"]]   &lt;br /&gt; [#include "/autocomplete/paragraphs/macros/ajax.ftl"]  &lt;br /&gt; [#-- TODO This link and script MUST BE MOVED to a file into the theme --]    &lt;br /&gt; &amp;lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css"   &lt;br /&gt;    rel="stylesheet" type="text/css"/&amp;gt;  &lt;br /&gt; &amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"&amp;gt;&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt; &amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"&amp;gt;&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt; [#-- End TODO --]&lt;br /&gt; [#assign contentLink= mgnl.createLink(content)!]  &lt;br /&gt; &amp;lt;script&amp;gt;  &lt;br /&gt; jQuery(document).ready(function() {  &lt;br /&gt;    jQuery("input#autocomplete").autocomplete({  &lt;br /&gt;       source: function( request, response ) {  &lt;br /&gt;          jQuery.getJSON('${contentLink}', {term : request.term}, function(data) {  &lt;br /&gt;             response(data);  &lt;br /&gt;             });  &lt;br /&gt;          },  &lt;br /&gt;       select: function( event, ui ) {  &lt;br /&gt;          jQuery.get('${contentLink}', { uuid: ui.item.uuid},function(data) {  &lt;br /&gt;          jQuery('#ajax').html(data);  &lt;br /&gt;          });  &lt;br /&gt;          return false;  &lt;br /&gt;          }  &lt;br /&gt;       });  &lt;br /&gt;    });  &lt;br /&gt; &amp;lt;/script&amp;gt;  &lt;br /&gt; [@cms.editBar /]  &lt;br /&gt; &amp;lt;div&amp;gt;  &lt;br /&gt;    Find Contacts: &amp;lt;input id="autocomplete" /&amp;gt;  &lt;br /&gt;    &amp;lt;div id="ajax"&amp;gt;  &lt;br /&gt;    &amp;lt;/div&amp;gt;  &lt;br /&gt; &amp;lt;/div&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Note that the links to jQuery UI cannot be placed directly in the script as I have done here. The code above is just a demonstration so you can see what files are needed. See &lt;a href="http://jqueryui.com/demos/autocomplete/"&gt;jQuery Autocomplete documentation&lt;/a&gt;&amp;nbsp;for details.&lt;br /&gt;&lt;br /&gt;The paragraph script renders an input field that has an ID&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;autocomplete&lt;/span&gt;. The source for this field is a JSON object provided by the paragraph model via an AJAX call. The JSON object provides contact names starting with the string you type in the input field. When a contact is selected, a second AJAX call asks the paragraph model to render a contact paragraph using the UUID of the selected item.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Autocomplete paragraph model class&lt;/h2&gt;The paragraph model class for autocomplete looks like this.&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; public String execute() {  &lt;br /&gt;    String uuid = MgnlContext.getParameter("uuid");  &lt;br /&gt;    //first it will run the autocomplete  &lt;br /&gt;    if(StringUtils.isEmpty(uuid)) {  &lt;br /&gt;       return renderAutocomplete();  &lt;br /&gt;    } else {  &lt;br /&gt;       return renderParagraph(uuid);  &lt;br /&gt;    }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;There are two method calls in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;execute&lt;/span&gt; method:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderAutocomplete&lt;/span&gt;&amp;nbsp;returns a JSON object of contact names and UUIDs.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderParagraph&lt;/span&gt;&amp;nbsp;renders a contact paragraph for the selected UUID.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;renderAutocomplete method&lt;/h3&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderAutocomplete&lt;/span&gt; method looks for the contact information by &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;givenName&lt;/span&gt;&amp;nbsp;and then constructs a JSON object with two fields,&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;label&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;uuid&lt;/span&gt;, and sends it to the response.&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; private String renderAutocomplete() {  &lt;br /&gt;    String autocomplete = "";  &lt;br /&gt;    String repositoryId = "data";  &lt;br /&gt;    String dataType = "Contact";  &lt;br /&gt;    String propertyName = "givenName";  &lt;br /&gt;    String term = MgnlContext.getParameter("term");  &lt;br /&gt;    if(StringUtils.isNotEmpty(term)){  &lt;br /&gt;       String statement = "//element(*, "+ dataType +")[jcr:like(fn:upper-case(@"    &lt;br /&gt;          + propertyName + "),'%" + term.toUpperCase() + "%')]";  &lt;br /&gt;       Collection&amp;lt;Content&amp;gt; nodes = QueryUtil.query(repositoryId, statement , "xpath");    &lt;br /&gt;       autocomplete +="[";  &lt;br /&gt;       Iterator&amp;lt;Content&amp;gt; it = nodes.iterator();  &lt;br /&gt;       while (it.hasNext()) {  &lt;br /&gt;          Content node = it.next();  &lt;br /&gt;          autocomplete += "{ \"label\":\"" + NodeDataUtil.getString(node, propertyName)   &lt;br /&gt;          + " " + NodeDataUtil.getString(node, "familyName") + "\", \"uuid\": \"" &lt;br /&gt;          + node.getUUID() +"\"}";  &lt;br /&gt;          if(it.hasNext()) {  &lt;br /&gt;             autocomplete += ",";  &lt;br /&gt;          }   &lt;br /&gt;       }  &lt;br /&gt;       autocomplete +="]";  &lt;br /&gt;       try {  &lt;br /&gt;          MgnlContext.getWebContext().getResponse().getOutputStream().print(autocomplete);  &lt;br /&gt;          } catch (IOException e) {  &lt;br /&gt;            // TODO Auto-generated catch block  &lt;br /&gt;            e.printStackTrace();  &lt;br /&gt;       }  &lt;br /&gt;       return RenderingModel.SKIP_RENDERING;  &lt;br /&gt;    }  &lt;br /&gt; return super.execute();  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;renderParagraph method&lt;/h3&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderParagraph&lt;/span&gt; method is bit more complex because what we want to render is of type Contact. Instead of using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderParagraph&lt;/span&gt;&amp;nbsp;method from &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;MagnoliaTemplatingUtilities&lt;/span&gt;, we have to render it using&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ParagraphRendererManager&lt;/span&gt;.&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; private String renderParagraph(String uuid) {  &lt;br /&gt;    String repositoryId = "data";  &lt;br /&gt;    String paragraphName = "contact";  &lt;br /&gt;    Content ajaxContent = ContentUtil.getContentByUUID(repositoryId, uuid);  &lt;br /&gt;    if(ajaxContent != null) {  &lt;br /&gt;       try {  &lt;br /&gt;          if (ajaxContent != null &amp;amp;&amp;amp; ajaxContent.isNodeType(ItemType.CONTENTNODE.getSystemName())) {  &lt;br /&gt;             MagnoliaTemplatingUtilities.getInstance().renderParagraph(ajaxContent,   &lt;br /&gt;                MgnlContext.getWebContext().getResponse().getWriter(), paragraphName);  &lt;br /&gt;          } else if(ajaxContent != null &amp;amp;&amp;amp; !ajaxContent.isNodeType(ItemType.CONTENTNODE.getSystemName())) {  &lt;br /&gt;             //this bit of code is needed as content is not a contentnode, is a datatype from data repo.  &lt;br /&gt;             Paragraph paragraph = ParagraphManager.getInstance().getParagraphDefinition(paragraphName);  &lt;br /&gt;             ParagraphRenderer renderer = ParagraphRendererManager.getInstance().getRenderer(paragraph.getType());  &lt;br /&gt;             renderer.render(ajaxContent, (Paragraph) paragraph, MgnlContext.getWebContext().getResponse().getWriter());  &lt;br /&gt;          }  &lt;br /&gt;       } catch (RenderException e) {  &lt;br /&gt;          // TODO Auto-generated catch block  &lt;br /&gt;          e.printStackTrace();  &lt;br /&gt;       } catch (IOException e) {  &lt;br /&gt;          // TODO Auto-generated catch block  &lt;br /&gt;          e.printStackTrace();  &lt;br /&gt;       }  &lt;br /&gt;    }  &lt;br /&gt;    return RenderingModel.SKIP_RENDERING;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Contact paragraph model class&lt;/h2&gt;For the Contact paragraph, I just used the &lt;a href="http://svn.magnolia-cms.com/svn/community/modules/standard-templating-kit/tags/standard-templating-kit-1.4.5/magnolia-module-standard-templating-kit/src/main/java/info/magnolia/module/templatingkit/paragraphs/ContactModel.java"&gt;one provided by STK&lt;/a&gt; and changed the model to get the content from the UUID provided.&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; public String execute() {  &lt;br /&gt;    String uuid = MgnlContext.getParameter("uuid");  &lt;br /&gt;    if(StringUtils.isEmpty(uuid)) {  &lt;br /&gt;       uuid = getContent().getNodeData("contact").getString();  &lt;br /&gt;    }  &lt;br /&gt;    HierarchyManager hm = MgnlContext.getHierarchyManager(DataModule.getRepository());  &lt;br /&gt;    if (!StringUtils.isEmpty(uuid)) {  &lt;br /&gt;       try {  &lt;br /&gt;          contact = hm.getContentByUUID(uuid);  &lt;br /&gt;          } catch (RepositoryException e) {  &lt;br /&gt;             throw new RuntimeException(e);  &lt;br /&gt;       }  &lt;br /&gt;    }   &lt;br /&gt;    return super.execute();  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;a href="http://svn.magnolia-cms.com/svn/community/sandbox/autocomplete/trunk/"&gt;Download the code for this example&lt;/a&gt;&amp;nbsp;from the Magnolia SVN. It is just a working sample to demonstrate this functionality and might be removed at some point so better grab it quick!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-5914243326802027840?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>paragraph</category>
      <category>jquery</category>
      <category>magnolia</category>
      <category>autocompletion</category>
      <category>autocomplete</category>
      <category>ajax</category>
      <category>magnolia_cms</category>
      <pubDate>Mon, 19 Dec 2011 12:35:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/12/rendering-paragraphs-with-ajax-part-iii.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-12-19T12:35:00Z</dc:date>
    </item>
    <item>
      <title>Follow-up on Magnolia User Group in Prague</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/follow-up-on-magnolia-user-group-in-prague</link>
      <description>On November the 24th, almost 3 weeks ago, a few lucky people met in Prague, Czech Republic. The second ever Magnolia User Group meeting was held. Chances are you heard about it if you follow Magnolia posting, but please read &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/follow-up-on-magnolia-user-group-in-prague"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>community</category>
      <category>mug</category>
      <category>Uncategorized</category>
      <pubDate>Wed, 14 Dec 2011 15:41:06 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/follow-up-on-magnolia-user-group-in-prague</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2011-12-14T15:41:06Z</dc:date>
    </item>
    <item>
      <title>Rendering Paragraphs with AJAX, Part II</title>
      <link>http://tmiyar.blogspot.com/2011/11/rendering-paragraphs-with-ajax-part-ii.html</link>
      <description>In &lt;a href="http://tmiyar.blogspot.com/2011/10/rendering-paragraphs-with-ajax-part-i.html"&gt;Rendering Paragraphs with AJAX Part 1&lt;/a&gt;, I showed a basic example of an AJAX paragraph in Magnolia CMS. We loaded an paragraph via an AJAX call and rendered it on the page.&lt;br /&gt;&lt;br /&gt;Now we will see how to send parameters on the AJAX call and display changes by using the &lt;a href="http://documentation.magnolia-cms.com/reference/templating.html"&gt;model class&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For a use case, suppose you have to display a large amount of content. To make the content easier for the user to browse, you add pagination. You only want to update the paginated content when the user clicks a Previous or Next button.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You need a way to tell the server what page the user is currently on. The server can then provide the previous page or the next page. In order to do this you need a model class, a paragraph definition and a Freemarker template script (.ftl file).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Template script&lt;/h2&gt;Add the following code to your Freemarker template script:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"&gt;&amp;lt;div id="ajax"&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;[#assign pageIndex = model.pageIndex]&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;function next() {&lt;br /&gt;    jQuery.get('${ctx.contextPath}${content.@handle}.html',&amp;nbsp;&lt;br /&gt;{index: '${pageIndex}'}, &lt;br /&gt; function(data) {&lt;br /&gt;         jQuery('#ajax').html(data);&lt;br /&gt;     });  &lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;   Page: &amp;lt;span id="text"&amp;gt;${pageIndex}&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;a href="javascript:next();"&amp;gt;NEXT&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/pre&gt;The content paragraph to be rendered is inside the div element that has an ID &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ajax&lt;/span&gt;. The script assigns the value that comes from the model method call&amp;nbsp;to a variable &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pageIndex&lt;/span&gt;. In the script, an AJAX call reloads the current paragraph, passing a new parameter &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;index&lt;/span&gt; with the value we assigned earlier.&lt;br /&gt;&lt;br /&gt;In a nested div element, we write the current value of the variable on the page.&lt;br /&gt;&lt;br /&gt;On the last line, we create a NEXT link that the user can click. The click will execute the AJAX call, run the paragraph model, and return the new &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pageIndex&lt;/span&gt; value.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Model class&lt;/h2&gt;Now let's see what the model class looks like.&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public String execute() {&lt;br /&gt;        &lt;br /&gt;    String index = MgnlContext.getParameter("index");&lt;br /&gt;    if(StringUtils.isNotEmpty(index)) {&lt;br /&gt;        pageIndex = Integer.parseInt(index) +1;&lt;br /&gt;    }&lt;br /&gt;    return super.execute();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int getPageIndex() {&lt;br /&gt;    return pageIndex;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;The class has two methods:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Overridden execute method that reads the parameter we sent by clicking NEXT and adds 1 to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pageIndex&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;getPageIndex method to retrieve the value of the member variable &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pageIndex&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Paragraph definition&lt;/h2&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-NZ6kVLl_ZtI/TtY48fi0HuI/AAAAAAAAARM/RnqjjrxDgAg/s1600/Screen+shot+2011-11-30+at+3.07.14+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-NZ6kVLl_ZtI/TtY48fi0HuI/AAAAAAAAARM/RnqjjrxDgAg/s1600/Screen+shot+2011-11-30+at+3.07.14+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The rendered NEXT &amp;nbsp;button looks like this on the page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kdQOLrfXSjY/TtYqMTgsxUI/AAAAAAAAAQw/pcDc2YNG6PM/s1600/Screen%2Bshot%2B2011-11-30%2Bat%2B2.04.38%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="33" src="http://2.bp.blogspot.com/-kdQOLrfXSjY/TtYqMTgsxUI/AAAAAAAAAQw/pcDc2YNG6PM/s400/Screen%2Bshot%2B2011-11-30%2Bat%2B2.04.38%2BPM.png" width="57" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-6312377974336679933?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>dynamic</category>
      <category>paragraph</category>
      <category>magnolia</category>
      <category>parameter</category>
      <category>ajax</category>
      <category>magnolia_cms</category>
      <pubDate>Tue, 29 Nov 2011 13:50:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/11/rendering-paragraphs-with-ajax-part-ii.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-11-29T13:50:00Z</dc:date>
    </item>
    <item>
      <title>Blossom 1.2.3 &amp; Blossom Data Extension 1.0 Released</title>
      <link>http://tobias-mattsson-magnolia.blogspot.com/2011/11/blossom-123-blossom-data-extension-10.html</link>
      <description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Today I have released version 1.2.3 of &lt;a href="http://documentation.magnolia-cms.com/modules/blossom.html"&gt;Blossom&lt;/a&gt; and &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Using+Blossom+dialogs+for+types+in+Data+module"&gt;Blossom Data Extension 1.0&lt;/a&gt;, an extension for using Blossom style dialogs with the &lt;a href="http://documentation.magnolia-cms.com/modules/data.html"&gt;Magnolia Data Module&lt;/a&gt;. It introduces a new annotation @DataTypeDialogFactory which is used for creating dialogs for data module types. It has the same feature set as @DialogFactory and is used in the same way.&lt;br /&gt;&lt;br /&gt;In this release the feature set TabBuilder is expanded adding support for the multi select control, the include control and for adding any control by type. It's now also possible to get the dialog and the DialogCreationContext from the TabBuilder.&lt;br /&gt;&lt;br /&gt;This is an example of how a dialog used for the type 'category':&lt;br /&gt;&lt;pre class="brush:java"&gt;@DataTypeDialogFactory("category")&lt;br /&gt;public class CategoryDialog {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @TabFactory("Settings")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void settingsTab(TabBuilder tab) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tab.addEdit("name", "Name", "");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tab.addEdit("maxResults", "Max results", "");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To use the Data Extension you need to add it to your pom.xml&lt;br /&gt;&lt;pre class="brush:java"&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;groupId&amp;gt;info.magnolia&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;artifactId&amp;gt;magnolia-module-blossom-extension-data&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Add this line to your blossom-servlet.xml or equivalent.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&amp;lt;bean class="info.magnolia.module.blossom.extension.data.DataDialogExporter" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And if you're using classpath scanning you'll also want to add an include-filter for the new annotation.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&amp;lt;context:component-scan base-package="package-containing-dialogs" use-default-filters="false"&amp;gt;&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp; &amp;lt;context:include-filter type="annotation" expression="info.magnolia.module.blossom.extension.data.DataTypeDialogFactory"/&amp;gt;&lt;br /&gt;&amp;lt;/context:component-scan&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For more details see the &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Using+Blossom+dialogs+for+types+in+Data+module"&gt;Blossom Data Extension wiki page&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154125577090836535-327748334638380172?l=tobias-mattsson-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 22 Nov 2011 14:42:00 GMT</pubDate>
      <guid>http://tobias-mattsson-magnolia.blogspot.com/2011/11/blossom-123-blossom-data-extension-10.html</guid>
      <dc:creator>Tobias Mattsson</dc:creator>
      <dc:date>2011-11-22T14:42:00Z</dc:date>
    </item>
    <item>
      <title>Webinar - How US Navy used Blossom to integrate Spring Applications with Magnolia CMS</title>
      <link>http://tobias-mattsson-magnolia.blogspot.com/2011/11/webinar-how-us-navy-used-blossom-to.html</link>
      <description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I have some exciting news to share!&lt;br /&gt;&lt;br /&gt;As many Blossom users are already aware, Campbell Ewald used &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt; and &lt;a href="http://www.springsource.org/"&gt;Spring Framework&lt;/a&gt; for building &lt;a href="http://navy.com/"&gt;navy.com&lt;/a&gt;. On November 15th there will be a &lt;a href="http://www.magnolia-cms.com/landing/webinar-navy.html"&gt;webinar&lt;/a&gt; on how they did it and how &lt;a href="http://www.magnolia-cms.com/magnolia-cms/features/blossom-spring-cms-integration.html"&gt;Blossom&lt;/a&gt; made their app integrations straightforward. It will be hosted by Campbell Ewald's Matt Dertinger, Magnolia's Sean McMains and myself.&lt;br /&gt;&lt;br /&gt;The webinar is for Spring developers of all levels and you will learn how to develop content rich websites with Spring. It will take you through setting up your project and with examples show how Blossom solved real use cases for the navy. Matt will also show how they used it with &lt;a href="http://www.jboss.org/resteasy"&gt;RESTEasy&lt;/a&gt; and took advantage of &lt;a href="http://www.infoq.com/news/2010/03/javaee6-validation"&gt;Bean Validation&lt;/a&gt; (&lt;a href="http://jcp.org/en/jsr/detail?id=303"&gt;JSR-303&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.magnolia-cms.com/landing/webinar-navy.html"&gt;Register now&lt;/a&gt;, I've been told it's starting to fill up already.&lt;br /&gt;&lt;br /&gt;See you there!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE&lt;/b&gt;&lt;br /&gt;The &lt;a href="http://www.magnolia-cms.com/resource-directory/webinars/webinar-navy.html"&gt;webinar recording&lt;/a&gt; is now online.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154125577090836535-740518441866460826?l=tobias-mattsson-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 07 Nov 2011 15:50:00 GMT</pubDate>
      <guid>http://tobias-mattsson-magnolia.blogspot.com/2011/11/webinar-how-us-navy-used-blossom-to.html</guid>
      <dc:creator>Tobias Mattsson</dc:creator>
      <dc:date>2011-11-07T15:50:00Z</dc:date>
    </item>
    <item>
      <title>Mobilize your Magnolia &amp;#160; Final Result</title>
      <link>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/2i29n1VBrzQ/</link>
      <description>In the previous post of this series, I explained how to provide from a website running on Magnolia 4.4 a mobile website. The result was already acceptable but we found a lot of drawbacks. &amp;#160; Now, in this second sprint I will try to solve the drawbacks with &amp;#8220;easy&amp;#8221; workarounds and to provide an even [...]</description>
      <category>Mobile</category>
      <category>Magnolia</category>
      <pubDate>Wed, 02 Nov 2011 22:39:14 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/2i29n1VBrzQ/</guid>
      <dc:creator>Samuel Schmitt</dc:creator>
      <dc:date>2011-11-02T22:39:14Z</dc:date>
    </item>
    <item>
      <title>Rendering Paragraphs with AJAX, Part I</title>
      <link>http://tmiyar.blogspot.com/2011/10/rendering-paragraphs-with-ajax-part-i.html</link>
      <description>Ever wondered how to reload just some paragraphs on your page? Imagine you have pagination and you want to reload just the paginated paragraph when clicking previous/next? Is Magnolia CMS capable of this without complex coding? Yes, and on this post you will find some ways of achieving this.&lt;br /&gt;&lt;br /&gt;First thing to know is, since Magnolia CMS version 4.x paragraphs are autorenderable. What does this mean? It means you can copy the path of a paragraph, paste it in the address bar of your browser and you will see the paragraph rendered. Try the following URL from our demo site, it will render the teaser of the Article page.&lt;br /&gt;&lt;a href="http://demo.magnolia-cms.com/demo-project/main/00.html"&gt;http://demo.magnolia-cms.com/demo-project/main/00.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What can you do with this? It means you don't need to create a servlet or anything to render a paragraph dynamically on a page. Just a call to the appropriate script will let you load any paragraph on our page.&lt;br /&gt;&lt;br /&gt;Here is a sample using JQuery. Add this code into a .ftl file. You also need to create a paragraph definition and add it to be used in a template.&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function loadArticleTeaser() {&lt;br /&gt;  jQuery.get('${contextPath}/demo-project/main/00.html',function(data) {&lt;br /&gt;    jQuery('#ajax').html(data);&lt;br /&gt;  });&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;div&gt;&lt;br /&gt;&amp;lt;div id="ajax"&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="javascript:loadArticleTeaser()"&amp;gt;Load Teaser via AJAX call &amp;lt;/a&amp;gt;&lt;span class="Apple-style-span" style="font-family: 'DejaVu Sans Mono', courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px; white-space: nowrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;The JQuery call &lt;a href="http://www.blogger.com/(http://api.jquery.com/jQuery.get/)"&gt;(http://api.jquery.com/jQuery.get/)&lt;/a&gt; will get the specified URL and, on success,  will run the method that loads the result&amp;nbsp;(paragraph)&amp;nbsp;from the AJAX call into a div with ID "ajax". To run the whole thing you just need to click the "Load Teaser via AJAX call" link.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a basic sample of an AJAX paragraph. In the next post you will see how to send parameters and process them in the paragraph model class.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-5689290427440340665?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>dynamic</category>
      <category>paragraph</category>
      <category>magnolia</category>
      <category>ajax</category>
      <category>magnolia_cms</category>
      <pubDate>Thu, 27 Oct 2011 12:35:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/10/rendering-paragraphs-with-ajax-part-i.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-10-27T12:35:00Z</dc:date>
    </item>
    <item>
      <title>Don’t deploy Magnolia: deploy your project.</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/dont-deploy-magnolia-deploy-your-project</link>
      <description>In the previous episodes of this series of posts, we have built a Magnolia CMS-based project, and learnt about how to make it self-configurable. It&amp;#8217;s deployable as-is, in your container of choice, but it is not production-ready: for example, you &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/dont-deploy-magnolia-deploy-your-project"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>best practices</category>
      <category>build</category>
      <category>Uncategorized</category>
      <category>magnolia</category>
      <pubDate>Tue, 25 Oct 2011 18:37:41 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/dont-deploy-magnolia-deploy-your-project</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2011-10-25T18:37:41Z</dc:date>
    </item>
    <item>
      <title>Fun with MooWheel</title>
      <link>http://www.java.net/blog/rah003/archive/2011/10/19/fun-moowheel-0</link>
      <description>&lt;!-- 1232 | 0 --&gt;&lt;img src="/images/people/jan_haderka.jpg" border="0", align="left" /&gt;&lt;p&gt;&amp;nbsp;Did you ever tried to visualize dependencies between pages on your average website? If so, you probably know what kind of pain it can be. The relations tend to be messy and any kind of chart displaying them is not easy to read.&lt;/p&gt;
&lt;p&gt;The other night I was looking for some charting library and run across &lt;a href="http://labs.unwieldy.net/moowheel/"&gt;MooWheel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Using the Wheel for rendering the deps you get reasonably readable chart for smaller site and something colorful and nice to look at for the big ones.&lt;/p&gt;
&lt;p&gt;The only drawback I found so far is that size of generated canvas grows with the size of the site and at some point it will just not fit any screen you have around. Does anybody know of any good JS library for rescaling rendered canvas or for redirecting output of JS rendering into image?&lt;/p&gt;
&lt;p&gt;I'll probably include rendering of this chart as part of the admin UI for &lt;a href="http://documentation.magnolia-cms.com/modules/content-dependencies.html"&gt;Content Dependencies module&lt;/a&gt; of Magnolia so that you can generate such charts for any kind of Magnolia powered site.&lt;/p&gt;
&lt;p&gt;Some food for the eye:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://weblogs.java.net/sites/default/files/demo-project-w-hierarchy.jpg"&gt;&lt;img width="230" height="186" alt="" src="http://www.java.net/sites/default/files/demo-project.jpg" /&gt;&lt;img width="200" height="190" alt="" src="http://www.java.net/sites/default/files/demo-project-w-hierarchy.jpg" /&gt;&lt;img width="200" height="179" alt="" src="http://www.java.net/sites/default/files/demo-features.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoy,&lt;/p&gt;
&lt;p&gt;Jan&lt;/p&gt;&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://www.java.net/sites/default/files/demo-project.jpg"&gt;demo-project.jpg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;116.58 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class="even"&gt;&lt;td&gt;&lt;a href="http://www.java.net/sites/default/files/demo-project-w-hierarchy.jpg"&gt;demo-project-w-hierarchy.jpg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;162.44 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://www.java.net/sites/default/files/demo-features.jpg"&gt;demo-features.jpg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;125.96 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Java Enterprise</category>
      <category>Web Applications</category>
      <category>J2EE</category>
      <category>Web Development Tools</category>
      <pubDate>Thu, 20 Oct 2011 01:28:28 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2011/10/19/fun-moowheel-0</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2011-10-20T01:28:28Z</dc:date>
    </item>
    <item>
      <title>Ever heard of REDbot?</title>
      <link>http://www.java.net/blog/rah003/archive/2011/10/17/ever-heard-redbot</link>
      <description>&lt;!-- 1717 | 0 --&gt;&lt;img src="/images/people/jan_haderka.jpg" border="0", align="left" /&gt;&lt;p&gt;Somebody shown me the tool called&amp;nbsp;&lt;a href="http://redbot.org"&gt;Red Bot&lt;/a&gt; the other day. The tool will check the headers of responses sent by your server, the compression of the content during transfer, server clock as well as modification dates claimed by your content. The info it gives about each page of the site is broken in 3 sections - General, Content Negotiation and Caching.&lt;/p&gt;
&lt;p&gt;When I saw the tool, I thought it might be useful to provide this information to admin directly in Magnolia, to be able to check on each and every page while browsing the site.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-redbot/trunk"&gt;Magnolia RedBot integration module&lt;/a&gt; is what I came up with during my 20 hours long flight last week.&lt;/p&gt;
&lt;p&gt;Module let you to check the site using the REDbot, and stores the results within Magnolia, exposing them as additional column in the Website tree.&lt;/p&gt;
&lt;p&gt;Additionally it can also produce tree map from the results either in TM3 format for the &lt;a href="http://www.cs.umd.edu/hcil/treemap/"&gt;TreeMap&lt;/a&gt; browser developed by University of Maryland for the overview of your whole site or in &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/treemap.html"&gt;Google TreeMap&lt;/a&gt; format for interactive browsing of the results.&amp;nbsp;And of couse one can also browse the raw results directly in the Data Module.&lt;/p&gt;
&lt;p&gt;The results are not retrieved just-in-time, but instead to speed up the browsing and lower the load on the site, they are periodically refreshed using the scheduler.&lt;/p&gt;
&lt;p&gt;Here's few examples of how the results look like when seen via Tree browser:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.java.net/sites/default/files/redbot-treeview.jpg"&gt;&lt;img width="400" height="119" alt="" src="http://www.java.net/sites/default/files/redbot-treeview.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and via Google Tree Map:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.java.net/sites/default/files/redbot-gtreemap.jpg"&gt;&lt;img width="400" height="179" alt="" src="http://www.java.net/sites/default/files/redbot-gtreemap.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you think this might be useful for your Magnolia powered site, feel free to get the module snapshot and install it. By default it contains results of analysis ran against the demo-project so if you have instance with STK and demo-project laying somewhere around you can try that as well.&lt;/p&gt;
&lt;p&gt;If by any chance you find out you like the module and want to make it better, let me know and you can get the commit rights for it ... or you can just contribute patches as usual.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-redbot/trunk"&gt;SVN&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://nexus.magnolia-cms.com/content/repositories/magnolia.forge.releases/info/magnolia/redbot/magnolia-redbot/1.0/magnolia-redbot-1.0.jar"&gt;Binaries&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://ci.magnolia-cms.com/job/forge_magnolia-redbot/"&gt;CI&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://jira.magnolia-cms.com/browse/MREDBOT"&gt;JIRA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enjoy!&lt;br /&gt;
Jan&lt;/p&gt;&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://www.java.net/sites/default/files/redbot-treeview.jpg"&gt;redbot-treeview.jpg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;101.07 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class="even"&gt;&lt;td&gt;&lt;a href="http://www.java.net/sites/default/files/redbot-gtreemap.jpg"&gt;redbot-gtreemap.jpg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;103.35 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Java Enterprise</category>
      <category>Web Applications</category>
      <category>Blogs</category>
      <category>Web Development Tools</category>
      <pubDate>Mon, 17 Oct 2011 13:50:49 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2011/10/17/ever-heard-redbot</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2011-10-17T13:50:49Z</dc:date>
    </item>
    <item>
      <title>Mobilize your Magnolia &amp;#160; &amp;#160; First sprint</title>
      <link>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/2npHdC8SJr0/</link>
      <description>After this short introduction, we are ready to build our first mobile website with Magnolia EE. Why using the entreprise edition? I need the Extended Templating Kit module which provides multisites features (you will see later why). &amp;#160; This post is a bit technical, so if you don’t know well Magnolia CMS, I recommend you [...]</description>
      <category>Mobile</category>
      <category>Magnolia</category>
      <pubDate>Mon, 17 Oct 2011 09:04:02 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/2npHdC8SJr0/</guid>
      <dc:creator>Samuel Schmitt</dc:creator>
      <dc:date>2011-10-17T09:04:02Z</dc:date>
    </item>
    <item>
      <title>Mobilize your Magnolia</title>
      <link>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/JyTopxZoD3U/</link>
      <description>Few weeks ago I did a prototype with Magnolia EE 4.4.4 illustrating how to &amp;#8220;mobilize&amp;#8221; a website. In the upcoming posts, I will explain what I did and then you will be able to provide a mobile version of your website running on Magnolia. &amp;#160; But before starting 2 remarks: First, to understand the next [...]</description>
      <category>Mobile</category>
      <category>Magnolia</category>
      <pubDate>Sun, 09 Oct 2011 16:34:41 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/JyTopxZoD3U/</guid>
      <dc:creator>Samuel Schmitt</dc:creator>
      <dc:date>2011-10-09T16:34:41Z</dc:date>
    </item>
    <item>
      <title>Hi everyone, take a seat&amp;#8230; It&amp;#8217;s my first blog post!!</title>
      <link>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/-y_vGqn-TZ4/</link>
      <description>Finally my website is updated with this new blog section. First I really would like to thanks my girlfriend, she followed my &amp;#8220;requirements&amp;#8221; and did a great design, I would like to link to her website but this one is not done yet, even not planned (maybe one of my next projects). But for sure, [...]</description>
      <category>None</category>
      <pubDate>Tue, 27 Sep 2011 19:46:57 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/sam-blog-follow-my-thoughts/~3/-y_vGqn-TZ4/</guid>
      <dc:creator>Samuel Schmitt</dc:creator>
      <dc:date>2011-09-27T19:46:57Z</dc:date>
    </item>
    <item>
      <title>Resources: Capturing Data for Faceted Search in Magnolia</title>
      <link>http://propellerhat.wordpress.com/2011/09/27/resources/</link>
      <description>As you Magnolia-watchers have doubtless noticed, there&amp;#8217;s a new section on the Magnolia corporate website: Resources, a faceted search directory of media assets that are available through our site. The new page makes it easy to plow through a ton of available content to find what you want to see, and we&amp;#8217;re pretty proud of [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=80&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>resources</category>
      <category>magnolia-cms</category>
      <pubDate>Tue, 27 Sep 2011 15:38:27 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/09/27/resources/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-09-27T15:38:27Z</dc:date>
    </item>
    <item>
      <title>Tips &amp; Tricks: Make activation comment mandatory</title>
      <link>http://tmiyar.blogspot.com/2011/09/tips-tricks-make-activation-comment.html</link>
      <description>With this tip, you can make everybody to write a comment when they send an activation request, though I cannot guarantee that comment would be meaningful!&lt;br /&gt;&lt;br /&gt;Step 1. Set property required=true in activation dialog.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KUlIoR8le_E/ToGd1PsW5OI/AAAAAAAAAQg/dUD5M-x2_iE/s1600/Screen+shot+2011-09-27+at+11.50.16+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="294" src="http://3.bp.blogspot.com/-KUlIoR8le_E/ToGd1PsW5OI/AAAAAAAAAQg/dUD5M-x2_iE/s320/Screen+shot+2011-09-27+at+11.50.16+AM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Step 2. Add the following code to the saveOnClick property of the dialog.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;if(document.getElementById('comment').value != '')&amp;nbsp; {window.close();opener.mgnl.workflow.WorkflowWebsiteTree.submitActivation($('mgnlFormMain'));} else {alert('Must write a comment for activation.');}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MmnYn8RK-e8/ToGd4r07iFI/AAAAAAAAAQk/sGXKw94nnzg/s1600/Screen+shot+2011-09-27+at+11.52.12+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://3.bp.blogspot.com/-MmnYn8RK-e8/ToGd4r07iFI/AAAAAAAAAQk/sGXKw94nnzg/s400/Screen+shot+2011-09-27+at+11.52.12+AM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-8332499131470018542?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>activation</category>
      <category>comment</category>
      <category>magnolia</category>
      <category>magnolia_cms</category>
      <category>dialog</category>
      <pubDate>Tue, 27 Sep 2011 10:32:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/09/tips-tricks-make-activation-comment.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-09-27T10:32:00Z</dc:date>
    </item>
    <item>
      <title>Don’t configure Magnolia: let your projects configure it.</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/dont-configure-magnolia-let-your-projects-configure-it</link>
      <description>In the previous installment of this series of posts, we have created a new Magnolia-based project, including a reproducible build. We have a webapp that can be started in an IDE, or outside of it. You might remember we added &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/dont-configure-magnolia-let-your-projects-configure-it"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>best practices</category>
      <category>build</category>
      <category>Uncategorized</category>
      <category>magnolia</category>
      <pubDate>Mon, 12 Sep 2011 16:30:15 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/dont-configure-magnolia-let-your-projects-configure-it</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2011-09-12T16:30:15Z</dc:date>
    </item>
    <item>
      <title>Don’t build Magnolia: build your projects.</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/dont-build-magnolia-build-your-projects</link>
      <description>This is the first of a series of posts, where I will attempt to consolidate a set of practices for creating, building and deploying Magnolia projects. Why, you ask ? Over time, Magnolia has grown into a fairly complex, but &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/dont-build-magnolia-build-your-projects"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>best practices</category>
      <category>build</category>
      <category>Uncategorized</category>
      <category>magnolia</category>
      <pubDate>Mon, 05 Sep 2011 09:56:41 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/dont-build-magnolia-build-your-projects</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2011-09-05T09:56:41Z</dc:date>
    </item>
    <item>
      <title>Creating site navigation from data nodes</title>
      <link>http://tmiyar.blogspot.com/2011/08/creating-site-navigation-from-data.html</link>
      <description>&lt;div&gt;This solution has been implemented for &lt;a href="http://svn.magnolia-cms.com/view/forge/magnolia-shop/"&gt;Magnolia Shop Module&lt;/a&gt; (contributed by &lt;a href="http://www.fastforward.ch/"&gt;fastforward&lt;/a&gt;). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The aim is to create menu navigation based on nodes in the data repository. The navigation should be displayed on an existing site as section navigation. This way, when you navigate to the section, product categories defined in data repository will be used as items in the vertical menu. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/-MoOWhjC84ZM/Tl3bj6TOiiI/AAAAAAAAAP8/y-s-1iqcsx4/s1600/Screen%2Bshot%2B2011-08-31%2Bat%2B8.53.21%2BAM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5646910917784275490" src="http://1.bp.blogspot.com/-MoOWhjC84ZM/Tl3bj6TOiiI/AAAAAAAAAP8/y-s-1iqcsx4/s400/Screen%2Bshot%2B2011-08-31%2Bat%2B8.53.21%2BAM.png" style="cursor: hand; cursor: pointer; display: block; height: 222px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;Note that the breadcrumb is also updated with the product categories.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Assuming  we know how the default navigation works in STK, we do the following:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Create customized navigation classes. One class will provide the navigation model and the second will define the navigation item that provides us with the item title and URL.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;See &lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-shop/tags/magnolia-shop-product-categories-in-data-26102011/src/main/java/info/magnolia/module/shop/navigation/ProductCategoryNavigationModel.java?view=log"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ProductCategoryNavigationModel&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-shop/tags/magnolia-shop-product-categories-in-data-26102011/src/main/java/info/magnolia/module/shop/navigation/ProductCategoryNavigationItem.java?view=log"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ProductCategoryNavigationItem&lt;/span&gt;&lt;/a&gt; as examples. The &lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-shop/tags/magnolia-shop-product-categories-in-data-26102011/src/main/java/info/magnolia/module/shop/navigation/ProductCategoryNavigationModel.java?view=log"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;getItems&lt;/span&gt;&lt;/a&gt; method returns the relevant nodes from the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;data&lt;/span&gt; repository. Constructor parameters for both classes depend on what you need for your implementation. In this particular case the parameter is specific to the shop, the shop name, so that we can create a correct link from the data repository.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol start="2"&gt;&lt;li&gt;Create a template model class that instantiates the customized navigation and assigns the model class to our template. Doing it this way, you keep the default navigation for all site content that is not part of the shop.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;See &lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-shop/tags/magnolia-shop-product-categories-in-data-26102011/src/main/java/info/magnolia/module/shop/templates/ShopSingletonParagraphTemplateModel.java?view=log"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ShopSingletonParagraphTemplateModel&lt;/span&gt;&lt;/a&gt; where the navigation is instantiated.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;pre&gt;public ProductCategoryNavigationModel getProductCategoryNavigation() {return new ProductCategoryNavigationModel(getCurrentShop());}&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;As we are also customizing the breadcrumb, look at the getBreadcrumb method as well where items from the data repository are appended.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Once we have the model class ready, we add it to our template configuration&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-3hia3IWOxB4/Tl3eNmzZ3MI/AAAAAAAAAQU/pczo-zQLucQ/s1600/Screen%2Bshot%2B2011-08-31%2Bat%2B9.08.55%2BAM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5646913833128287426" src="http://3.bp.blogspot.com/-3hia3IWOxB4/Tl3eNmzZ3MI/AAAAAAAAAQU/pczo-zQLucQ/s360/Screen%2Bshot%2B2011-08-31%2Bat%2B9.08.55%2BAM.png" style="cursor: hand; cursor: pointer; display: block; height: 32px; margin: 0px auto 10px; text-align: center; width: 360px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol start="3"&gt;&lt;li&gt;Freemarker templates.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;We optionally need a new &lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-shop/tags/magnolia-shop-product-categories-in-data-26102011/src/main/resources/shop/templates/global/verticalNavigation.ftl?view=log"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;verticalNavigation.ftl&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;The only change in vertical navigation is to call our custom navigation that we created with a new name:&lt;/div&gt;&lt;div&gt;&lt;pre&gt;[@renderNavigation navigation=model.productCategoryNavigation /]&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;And we set the template file in the site configuration of our custom template definition:&lt;/div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-QwO9UafRgU0/Tl3fx-oVFCI/AAAAAAAAAQc/J29TKuHtqo4/s1600/Screen%2Bshot%2B2011-08-31%2Bat%2B9.15.40%2BAM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5646915557511205922" src="http://4.bp.blogspot.com/-QwO9UafRgU0/Tl3fx-oVFCI/AAAAAAAAAQc/J29TKuHtqo4/s400/Screen%2Bshot%2B2011-08-31%2Bat%2B9.15.40%2BAM.png" style="cursor: hand; cursor: pointer; display: block; height: 128px; margin: 0px auto 10px; text-align: center; width: 362px;" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-2357299846073843374?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>data</category>
      <category>custom</category>
      <category>magnolia</category>
      <category>repository</category>
      <category>navigation</category>
      <category>magnolia_cms</category>
      <category>templates</category>
      <pubDate>Mon, 29 Aug 2011 09:34:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/08/creating-site-navigation-from-data.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-08-29T09:34:00Z</dc:date>
    </item>
    <item>
      <title>Three Ring Circus: Making Content, Code, and Configuration Work Together</title>
      <link>http://propellerhat.wordpress.com/2011/08/24/three-ring-circus-making-content-code-and-configuration-work-together/</link>
      <description>Since I started working at Magnolia, I&amp;#8217;ve been asked one question over and over, more than any other: &amp;#8220;Can I please have some money?&amp;#8221; This is because I&amp;#8217;m a father. The next most common question I&amp;#8217;ve been asked, however, is this: &amp;#8220;I have content authors writing content on my production system. I have developers creating [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=72&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>magnolia-cms</category>
      <category>modules</category>
      <category>best-practices</category>
      <pubDate>Wed, 24 Aug 2011 14:39:26 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/08/24/three-ring-circus-making-content-code-and-configuration-work-together/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-08-24T14:39:26Z</dc:date>
    </item>
    <item>
      <title>Opening the door to semantic search in Magnolia</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/opening-the-door-to-semantic-search-in-magnolia</link>
      <description>In the past couple of months, by pure coincidence, we have been in contact with two independent companies providing semantic search services. Less coincidentally, customers have been asking for semantic search features in Magnolia for months. Trending topic ? Yeah, &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/opening-the-door-to-semantic-search-in-magnolia"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>magnolia</category>
      <category>modules</category>
      <category>Uncategorized</category>
      <category>search</category>
      <category>semantic</category>
      <pubDate>Thu, 18 Aug 2011 17:49:34 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/opening-the-door-to-semantic-search-in-magnolia</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2011-08-18T17:49:34Z</dc:date>
    </item>
    <item>
      <title>Adding extra styles files to an existing theme</title>
      <link>http://tmiyar.blogspot.com/2011/07/adding-extra-styles-files-to-existing.html</link>
      <description>The question raised when creating a new module: how can I add the styles files of my module to the pop theme?&lt;br /&gt;&lt;br /&gt;This guide shows how to add the installation task and how to bootstrap the content, but if you don't want to code anything, at the end of the blog there is an explanation on how to do it directly on the author instance:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/i&gt;, Create the new styles file i.e. myextrastyles.css&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Step 2&lt;/i&gt;&lt;/b&gt;, Put the file in the module resources folder following STK theme structure, src/main/resources and the path shown in the following screenshoot:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-N50YhgBw6Y8/ThxKGC5f7MI/AAAAAAAAANk/mvrg_Dkn078/s1600/Screen%2Bshot%2B2011-07-12%2Bat%2B10.38.48%2BAM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5628455102023986370" src="http://2.bp.blogspot.com/-N50YhgBw6Y8/ThxKGC5f7MI/AAAAAAAAANk/mvrg_Dkn078/s320/Screen%2Bshot%2B2011-07-12%2Bat%2B10.38.48%2BAM.png" style="cursor: hand; cursor: pointer; display: block; height: 120px; margin: 0px auto 10px; text-align: center; width: 300px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Step 3&lt;/i&gt;&lt;/b&gt;, Add an installation task on your module versionhandler.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;protected List getExtraInstallTasks(InstallContext installContext) {&lt;br /&gt;final List installTasks = new ArrayList();&lt;br /&gt;installTasks.addAll(super.getExtraInstallTasks(installContext));&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;installTasks.add(new InstallResourcesTask("/templating-kit/themes/pop/css/mystyles.css", &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;   "processedCss", STKResourceModel.class.getName()));&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Step 4&lt;/i&gt;&lt;/b&gt;, Update the theme configuration. In order for the theme to find the new style file, the file has to be configured in the theme configuration.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-MJpwEU57d1E/Th1HIjcvpPI/AAAAAAAAAO0/QO97_FvkDKc/s1600/Screen%2Bshot%2B2011-07-13%2Bat%2B9.07.37%2BAM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5628733321563317490" src="http://1.bp.blogspot.com/-MJpwEU57d1E/Th1HIjcvpPI/AAAAAAAAAO0/QO97_FvkDKc/s400/Screen%2Bshot%2B2011-07-13%2Bat%2B9.07.37%2BAM.png" style="cursor: hand; cursor: pointer; display: block; height: 142px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Step 5&lt;/i&gt;&lt;/b&gt;, Export the configuration of our file shown in Step 4. Once exported you can place the file (config.modules.standard-templating-kit.config.themes.pop.cssFiles.myextrastyles.xml)&lt;br /&gt;in the bootstrap folder of your module.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE&lt;/span&gt;: All this can be achieved without any code, you just need to set the file in the theme configuration (Step 4) and upload this new styles file into the resources workspace.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-75YBNEncfpQ/Th1D3KCwh1I/AAAAAAAAAOU/L_qiylchD04/s1600/Screen%2Bshot%2B2011-07-13%2Bat%2B9.05.23%2BAM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5628729724150777682" src="http://4.bp.blogspot.com/-75YBNEncfpQ/Th1D3KCwh1I/AAAAAAAAAOU/L_qiylchD04/s400/Screen%2Bshot%2B2011-07-13%2Bat%2B9.05.23%2BAM.png" style="cursor: hand; cursor: pointer; display: block; height: 307px; margin: 0px auto 10px; text-align: center; width: 333px;" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-2918972332590481923?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>theme</category>
      <category>magnolia_cms</category>
      <category>magnolia</category>
      <category>styles</category>
      <category>css</category>
      <pubDate>Tue, 12 Jul 2011 13:16:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/07/adding-extra-styles-files-to-existing.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-07-12T13:16:00Z</dc:date>
    </item>
    <item>
      <title>"Open Source" a differentiator no more</title>
      <link>http://www.betterfasterbigger.com/2011/06/open-source-differentiator-no-more.html</link>
      <description>&lt;div&gt;&lt;div&gt;There is an interesting discussion around a &lt;a href="http://blogs.the451group.com/opensource/2011/06/27/the-decline-of-open-source-as-an-identifying-differentiator/"&gt;recent blog post by Matt Aslett&lt;/a&gt; of the 451 group. (they do churn out great articles, don't they?). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Matt notes that "Open Source" as a differentiator is being dropped by more and more commercial open source projects, and backs it up with some anecdotal evidence. This of course caught my interest, as I have been discussing this topic internally at least for the last two years… and we made the decision to change the communication, and currently work on defining a new tagline (away from "Simple Open Source Content Management"). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So yes, the trend is clearly there. Open Source is neither a primary value proposition nor a primary differentiator (anymore, if it ever was). Simply put, just because software is open source doesn't mean it works for you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You would not differentiate your product as "the closed source alternative to X", would you? So why the other way round?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a product and business models mature, realities change. When Magnolia CMS started with an "Enterprise Open Source" business model in 2006, this model was in its absolute infancy. It worked for Red Hat, but that was about it. We regularly had to educate prospects about the viability of our business model, not always successfully so. (For those interested, Magnolia CMS has been growing 50% per year since 2006).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today "vendor-driver Open Source" or "Commercial Open Source" or "Enterprise Open Source" have become mainstream. It has become clear that the oversight, direction and long-term view of a vendor has benefits for an Open-Source project, and for these benefits to materialize, a revenue stream that finances the product is essential. This in turn has lead to companies looking at Open Source no longer as "Free (of cost) Software" but as "Software with a lower TCO and higher flexibility".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once you realize this change in customer perception, dropping open source as a differentiator or value proposition is only the logical next step.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For Magnolia CMS, this will mean we'll focus more on communicating primary business values to our customers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having a strong community to share your &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Home"&gt;knowledge&lt;/a&gt;,  ideas and gripes, as well as &lt;a href="http://forum.magnolia-cms.com/forum.html"&gt;ask for or provide help&lt;/a&gt; will make a great difference in how enjoyable your daily work with a product like Magnolia CMS is. And &lt;a href="http://forge.magnolia-cms.com/"&gt;sharing or learning from extensions&lt;/a&gt; that others provide certainly is a big part of an Open Source community.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Being able to understand and quickly adapt the code of a product that needs to be integrated and adapted to custom needs as much as a Content Management System does, is incredibly beneficial for any company.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;But the fact that Magnolia's source code is open should be the deciding factor only once all other things are equal.  In our daily interactions with customers we learned that for them, Magnolia is foremost a great product (and great company), and only then Open Source.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-362765669494915698?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>commercial</category>
      <category>economy of free</category>
      <category>magnolia</category>
      <category>magnolia_cms</category>
      <category>positioning</category>
      <category>open-source</category>
      <category>marketing</category>
      <pubDate>Wed, 29 Jun 2011 07:46:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2011/06/open-source-differentiator-no-more.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2011-06-29T07:46:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia CMS, Red Herring Award and entrepreneurship</title>
      <link>http://www.betterfasterbigger.com/2011/06/magnolia-cms-red-herring-award-and.html</link>
      <description>&lt;a href="http://1.bp.blogspot.com/-8230digpkIE/TeXkDdogS3I/AAAAAAAADqs/Q_iguSVFeB0/s1600/Europe_Winner.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 319px;" src="http://1.bp.blogspot.com/-8230digpkIE/TeXkDdogS3I/AAAAAAAADqs/Q_iguSVFeB0/s320/Europe_Winner.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5613143258732448626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;When I first came across &lt;a href="http://www.redherring.com/"&gt;Red Herring&lt;/a&gt;, it must have been the late 90's or early in the new millennium, I thought this is a very interesting magazine. And when I saw companies being listed as a Red Herring 100 winner, I was hoping to one day be amongst them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fast forward to 2011, and &lt;a href="http://www.herring100.com/RHE/2011/top100.html"&gt;Magnolia has reached that milestone&lt;/a&gt;. Will this change everything? Hardly. Earth will still rotate around the sun (unless you are a creationist, in which case it probably is the other way round); and all the world will not suddenly flock to Magnolia's website to try out our content management system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But. And here is the "but": when you start out to build a business, you (hopefully) do so with a good reason (why are you doing this?) and dreams (what do you want to achieve?). And while your dream my be to write &lt;a href="http://www.magnolia-cms.com/"&gt;the best content management system on the planet&lt;/a&gt;, there are smaller, more tangible aspirations, which are often inspired by what you see elsewhere. The Red Herring award was such an aspiration, and that is why Magnolia (and myself) have reached another milestone.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For entrepreneurs, hitting such milestones is a confirmation that they are on the right track, that their aspirations can be fulfilled and their dreams eventually become reality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For future entrepreneurs I hope you have your own dreams and aspirations, no matter how big or small, and that they too may come true for you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And should the Red Herring Award be one of your aspirations, I encourage you to aim for it. Alex, founder of Red Herring, is certainly an interesting person to meet, modest but with great experience. He likes to give advise and simultaneously  tells you that 90% of the advise anybody will give you is not going to help you. And meeting fellow entrepreneurs, people with ideas, ambitions, success or failure under their belt, certainly is a thing to aim for.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here is one piece of advise you can take or leave: next time there is a Red Herring Award, apply for it. And even if you don't, or don't make it to the finalists, much less the winners, go there. The event is open for technology entrepreneurs, and if you are open to meet like-minded people, to exchange ideas or just learn about what others are up to, the Red Herring event is an excellent venue.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-8431508160534459942?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>red herring</category>
      <category>entrepreneurship</category>
      <category>magnolia</category>
      <pubDate>Wed, 01 Jun 2011 07:01:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2011/06/magnolia-cms-red-herring-award-and.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2011-06-01T07:01:00Z</dc:date>
    </item>
    <item>
      <title>Top 5 Reasons I’m Looking Forward to Magnolia 5</title>
      <link>http://propellerhat.wordpress.com/2011/05/24/top-5-reasons-im-looking-forward-to-magnolia-5/</link>
      <description>I&amp;#8217;ve been working with Magnolia for a number of years now, and have seen it evolve from a great idea without much meat on its bones to a rich, flexible CMS that can be used for a huge variety of tasks. Even in its current mature state, however, there are areas that can still be [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=60&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>magnolia5</category>
      <category>magnolia-cms</category>
      <pubDate>Tue, 24 May 2011 19:30:24 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/05/24/top-5-reasons-im-looking-forward-to-magnolia-5/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-05-24T19:30:24Z</dc:date>
    </item>
    <item>
      <title>Open Source 2011 Survey sees flexibility as driver</title>
      <link>http://www.betterfasterbigger.com/2011/05/open-source-2011-survey-sees.html</link>
      <description>The Open Source 2011 Survey (answered by 455 participants, 60% non-vendors) has lead to some interesting results.&lt;br /&gt;&lt;br /&gt;I would like to highlight the question "what makes open source software (OSS) attractive". Here are the three main drivers that make OSS attractive from a customer's perspective:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Freedom from Vendor lock-in&lt;/li&gt;&lt;li&gt;Lower costs&lt;/li&gt;&lt;li&gt;Flexibility&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;"lower costs" no longer dominates the list like it has in the past 3 years. This year "freedom from vendor lock-in" is the number one attraction of open-source software. And it is the first time that "flexibility" is in the top three.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For Magnolia that plays right into our value proposition:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;no vendor lock in&lt;/b&gt;, since our customers have access to the source code, can choose between a large network of implementation partners, and we support open standards so it is easy to move on should you want to (incidentally, our customers prefer to stay with Magnolia once they have experienced the difference great software can make to their business results and staff's happiness)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Lower costs&lt;/b&gt; has moved down from the top spot, and it should. Magnolia competes on value, not (licensing) price. Which doesn't mean we don't provide an excellent deal – &lt;a href="http://www.magnolia-cms.com/stk"&gt;Magnolia's Standard Templating Kit will significantly reduce your total cost of ownership&lt;/a&gt;, and no matter what we charge for Magnolia, the STK benefits alone outweigh the price.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Flexibility&lt;/b&gt; – a &lt;a href="http://www.magnolia-cms.com/landing/cms-review-evaluation.html"&gt;recent independent analyst report has found Magnolia CMS to be the most flexible CMS system on the market&lt;/a&gt; (free download after registration). This is no coincidence. We know that every customer has different needs, and we know that the web is evolving faster than I can type this blog. It is only natural we ensure Magnolia CMS can easily be adapted to every whim of your marketing boss, integrate with every legacy backend that is powered by electricity and incorporate the latest fad printed in glossy magazines typically read by your CEO in trans-atlantic business class flights.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If you want to learn more about the Open Source 2011 Survey results, the 451 group has a report you can &lt;a href="http://www.the451group.com/apply/apply.php?apply_page_id=676&amp;amp;tag="&gt;download from their website&lt;/a&gt; (registration necessary)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-3881992998862209368?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>tco</category>
      <category>open-source</category>
      <category>magnolia</category>
      <category>flexibility</category>
      <category>vendor-lock-in</category>
      <category>stk</category>
      <pubDate>Wed, 18 May 2011 09:15:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2011/05/open-source-2011-survey-sees.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2011-05-18T09:15:00Z</dc:date>
    </item>
    <item>
      <title>Twitter and Spring Social in Magnolia</title>
      <link>http://tobias-mattsson-magnolia.blogspot.com/2011/05/twitter-and-spring-social-in-magnolia.html</link>
      <description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: right;"&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-svWPQJOZIUk/TbsfbbeS8DI/AAAAAAAAABs/Ktj4w3x8d2c/s1600/twitter.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-svWPQJOZIUk/TbsfbbeS8DI/AAAAAAAAABs/Ktj4w3x8d2c/s320/twitter.jpg" width="172" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Tweets on 'summer' embedded in a page.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Integrations with social networks are everywhere. All the big social sites offer javascript widgets that you can easily drop into your pages and display things like recent tweets, facebook likes and so on. Though recently there's been some voices raised saying that these widgets sometimes don't blend nicely with the design of the rest of site. I've seen this especially on cms blogs reviewing high profile sites as they launch or relaunch with new designs.&lt;br /&gt;&lt;br /&gt;So, last weekend I decided to find out how much work it would take to display a Twitter search using &lt;a href="http://www.springsource.org/spring-social"&gt;Spring Social&lt;/a&gt; with &lt;a href="http://documentation.magnolia-cms.com/modules/blossom.html"&gt;Blossom&lt;/a&gt;, the Spring integration for &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt;. Magnolia calls reusable components that you can snap into a page paragraphs. I wanted a paragraph that an author could add to any page to show relevant tweets about its topic. The author supplies the search query and the maximum number of  tweets to display.On the right is the end result.&lt;br /&gt;&lt;br /&gt;Twitter provides a RESTful API that can return JSON or ATOM. There's a lot of functionality in there and most of it requires OAuth authentication. For this example we'll do a simple search which doesn't require authentication. Spring Social offers an OAuth implementation that is compatible with Twitter and seems to be minimal effort to use. A twitter search using the API is done with a request like &lt;a href="http://search.twitter.com/search.json?q=summer"&gt;http://search.twitter.com/search.json?q=summer&lt;/a&gt;. Spring Social uses &lt;a href="http://blog.springsource.com/2009/03/27/rest-in-spring-3-resttemplate/"&gt;RestTemplate&lt;/a&gt; and parses the response using &lt;a href="http://jackson.codehaus.org/"&gt;Jackson&lt;/a&gt; to return plain java objects representing the tweets.&lt;br /&gt;&lt;br /&gt;Since &lt;a href="http://documentation.magnolia-cms.com/modules/blossom.html"&gt;Blossom&lt;/a&gt; is an extension of &lt;a href="http://static.springsource.org/spring/docs/current/reference/mvc.html"&gt;Spring Web MVC&lt;/a&gt; that lets Spring controllers be embedded into the content of a page the twitter search paragraph is implemented as a controller. The interface provided to the author to enable filling in the search query and the maximum number of tweets is provided by Magnolia using dialogs. By adding methods in our controller and annotating them Magnolia will call them when the dialog is to be displayed and for validation when its submitted. The view for displaying the tweets is a JSP.&lt;br /&gt;&lt;br /&gt;In the source below you'll see that &lt;a href="http://www.springsource.org/spring-social"&gt;Spring Social&lt;/a&gt; makes things really easy since it will request the Twitter API and return the tweets with just one line of code.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;@Controller&lt;br /&gt;@Paragraph("Twitter")&lt;br /&gt;public class TwitterParagraph {&lt;br /&gt;&lt;br /&gt;  @RequestMapping("/twitter")&lt;br /&gt;  public String twitter(ModelMap model, Content content) {&lt;br /&gt;&lt;br /&gt;    String query = content.getNodeData("query").getString();&lt;br /&gt;    int maxResults = Integer.parseInt(content.getNodeData("maxResults").getString());&lt;br /&gt;&lt;br /&gt;    TwitterTemplate twitterTemplate = new TwitterTemplate();&lt;br /&gt;    SearchResults searchResults = twitterTemplate.searchOperations().search(query, 1, maxResults);&lt;br /&gt;&lt;br /&gt;    List&amp;lt;Tweet&amp;gt; tweets = searchResults.getTweets();&lt;br /&gt;    model.put("query", query);&lt;br /&gt;    model.put("tweets", tweets.subList(0, Math.min(tweets.size(), maxResults)));&lt;br /&gt;&lt;br /&gt;    return "twitter";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @TabFactory("Settings")&lt;br /&gt;  public void settingsTab(TabBuilder tab) {&lt;br /&gt;    tab.addEdit("query", "Query", "Search phrase on Twitter");&lt;br /&gt;    tab.addEdit("maxResults", "Max results", "Number of tweets to display at most");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @TabValidator("Settings")&lt;br /&gt;  public void validateSettings(DialogTab tab) {&lt;br /&gt;    if (!StringUtils.hasText(tab.getSub("query").getValue()))&lt;br /&gt;      AlertUtil.setMessage("Query must not be empty");&lt;br /&gt;    if (!NumberUtil.isPositiveInteger(tab.getSub("maxResults").getValue()))&lt;br /&gt;      AlertUtil.setMessage("Max results must be a positive number");&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;If you haven't used Magnolia or Blossom before this screenshot might be helpful to see what the dialog presented to the author looks like. The methods annotated with @TabFactory and @TabValidator are used to provide the user interface and validate the input.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-BMXvsUay9ZA/Tbss7EbIgwI/AAAAAAAAABw/KinCYaqJaF0/s1600/paragraph.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-BMXvsUay9ZA/Tbss7EbIgwI/AAAAAAAAABw/KinCYaqJaF0/s1600/paragraph.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And here's the source for the view. &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;h2&amp;gt;Twitter&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;Recently about &amp;lt;a href="http://twitter.com/search/${query}"&amp;gt;${query}&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;ul class="tweets"&amp;gt;&lt;br /&gt;&amp;lt;c:forEach items="${tweets}" var="tweet"&amp;gt;&lt;br /&gt;    &amp;lt;li&amp;gt;&lt;br /&gt;        &amp;lt;div&amp;gt;${tweet.text}&amp;lt;/div&amp;gt;&lt;br /&gt;        &amp;lt;div class="signature"&amp;gt;&lt;br /&gt;            &amp;lt;img src="${tweet.profileImageUrl}"/&amp;gt;&lt;br /&gt;            &amp;lt;a href="https://twitter.com/${tweet.fromUser}"&amp;gt;${tweet.fromUser}&amp;lt;/a&amp;gt;&lt;br /&gt;            &amp;lt;div class="date"&amp;gt;&amp;lt;fmt:formatDate value="${tweet.createdAt}" pattern="d MMM HH:mm"/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;            &amp;lt;div style="clear:both;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;        &amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/c:forEach&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So how much work was it? I think I spent less than an hour setting it up and writing the java code, followed by a couple of hours on the view and css to get it decent enough to show in a blog post ;-)&lt;br /&gt;&lt;br /&gt;To try it out you need to add their milestone repository since Spring Social has still to reach its 1.0 release. Here's the maven snippets you'll need.&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;repository&amp;gt;&lt;br /&gt;  &amp;lt;id&amp;gt;org.springframework.maven.milestone&amp;lt;/id&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;Spring Maven Milestone Repository&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;url&amp;gt;http://maven.springframework.org/milestone&amp;lt;/url&amp;gt;&lt;br /&gt;  &amp;lt;snapshots&amp;gt;&lt;br /&gt;    &amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;  &amp;lt;/snapshots&amp;gt;&lt;br /&gt;&amp;lt;/repository&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;org.springframework.social&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;spring-social-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;1.0.0.M3&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;org.springframework.social&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;spring-social-twitter&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;1.0.0.M3&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154125577090836535-8605369946009805843?l=tobias-mattsson-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 08 May 2011 19:40:00 GMT</pubDate>
      <guid>http://tobias-mattsson-magnolia.blogspot.com/2011/05/twitter-and-spring-social-in-magnolia.html</guid>
      <dc:creator>Tobias Mattsson</dc:creator>
      <dc:date>2011-05-08T19:40:00Z</dc:date>
    </item>
    <item>
      <title>Pushing Magnolia: Creating a Command</title>
      <link>http://propellerhat.wordpress.com/2011/05/02/pushing-magnolia-creating-a-command/</link>
      <description>When Magnolia CMS is set up normally, it generates content on a page-by-page basis as it&amp;#8217;s requested. The HTML is never written out to the filesystem, but is generated on the fly by the app and then cached in memory. This &amp;#8220;pull&amp;#8221; approach has a number of advantages: content is only rendered when it&amp;#8217;s actually [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=42&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>magnolia-cms</category>
      <pubDate>Mon, 02 May 2011 19:17:02 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/05/02/pushing-magnolia-creating-a-command/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-05-02T19:17:02Z</dc:date>
    </item>
    <item>
      <title>Magnolia Apache Solr integration</title>
      <link>http://igorstravinskij.blogspot.com/2011/04/magnolia-apache-solr-integration.html</link>
      <description>Last week  I finally released the &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+Apache+Solr+integration"&gt;magnolia-solr-module&lt;/a&gt; on &lt;a href="http://forge.magnolia-cms.com/"&gt;Magnolia's Forge&lt;/a&gt;. The module aims at bringing &lt;a href="http://lucene.apache.org/solr/"&gt;Apache Solr&lt;/a&gt; outstanding search features into &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia&lt;/a&gt;. For those who don't know Solr: &lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, dynamic clustering, database integration, rich document (e.g., Word, PDF) handling, and geospatial search. Solr is highly scalable, providing distributed search and index replication, and it powers the search and navigation features of many of the world's largest internet sites." &lt;/i&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;div&gt;Solr is used by some of the largest companies in the world such as apple, ebay, zappos, gettyimages and salesforce, to name just a few. Recently &lt;a href="http://guardian.co.uk/"&gt;The Guardian&lt;/a&gt; (which has the second highest readership of any on-line news site after the New York Times) has chosen Solr &lt;a href="http://www.infoq.com/articles/guardian_scala"&gt;for its content API&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;The reason for integrating Magnolia and Solr is a very simple one: have the best open source tool for a given task do the job. In my case, I like to manage and publish contents with Magnolia CMS (of course, I am biased towards Magnolia ;)) and its easy to use, intuitive interface, and then index and search those contents with Solr. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+Apache+Solr+integration"&gt;step-by-step tutorial&lt;/a&gt; accompanying the module I explain how to achieve this.  There I also explain how to customize the module in case its default behavior does not suit your needs. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, if you need &lt;i&gt;blazing fast&lt;/i&gt; search for your Magnolia-based website, give the module a go and enjoy Magnolia+Solr integration!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-3541909901482853764?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <pubDate>Tue, 19 Apr 2011 20:07:00 GMT</pubDate>
      <guid>http://igorstravinskij.blogspot.com/2011/04/magnolia-apache-solr-integration.html</guid>
      <dc:creator>Federico Grilli</dc:creator>
      <dc:date>2011-04-19T20:07:00Z</dc:date>
    </item>
    <item>
      <title>Oh no, I've become creative</title>
      <link>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/aqBhOvvS4dc/oh-no-ive-become-creative.html</link>
      <description>&lt;img alt="" height="400" src="data:image/jpeg;base64,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" width="300" /&gt;&lt;br /&gt;
Seen in Amsterdam in the&amp;nbsp;&lt;a href="http://www.dezwijger.nl/"&gt;Parkhuis de Zwijger&lt;/a&gt;, a platform fostering creativity and innovation. I found this especially funny, since a conference on online B2B marketing took place at the time I took this picture - plenty of folks in suits around me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7077221096228251291-9213069603880145575?l=ma-ui.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RevisitingTheMagnoliaUi/~4/aqBhOvvS4dc" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 18 Apr 2011 14:41:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/aqBhOvvS4dc/oh-no-ive-become-creative.html</guid>
      <dc:creator>noreply@blogger.com (Andreas Weder)</dc:creator>
      <dc:date>2011-04-18T14:41:00Z</dc:date>
    </item>
    <item>
      <title>The 10 most important features of a CMS</title>
      <link>http://www.betterfasterbigger.com/2011/04/10-most-important-features-of-cms.html</link>
      <description>In a recent blog post entitled "&lt;a href="http://opensourcecms.pro/news-reviews/features-impacting-open-source-cms-selection/"&gt;Features Impacting Open Source CMS Selection&lt;/a&gt; " we learn that  3,365 people answered the question: “When selecting a CMS, how important are the following features?" as part of the latest Water &amp;amp; Stone report on open source content management systems.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;79.7% of the participants in the survey were from small to medium-sized businesses (less than 100 employees, so the answers might not translate directly to Magnolia EE customers who are typically a tad larger (e.g. EADS, Johnson &amp;amp; Johnson, Unilver and the US Navy). Still, there are many Magnolia Community Edition users that fit the bill, and so let's have a look of how Magnolia stacks up on the 10 most important features a CMS should have.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Flexible User Permissions – nearly 70% of respondents think this is very important. So does Magnolia, of course, which not only allows you to create ACL's Groups and Roles but also supports external authorization and authentication via LDAP and NTLM. All content in Magnolia is stored in a JCR-170 repository, which means all content is protected through access control.&lt;/li&gt;&lt;li&gt;Open API – covered: read the &lt;a href="http://nexus.magnolia-cms.com/content/sites/magnolia.public.sites/ref/4.4.1/apidocs/index.html"&gt;Magnolia API&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Search Engine Optimization – Magnolia and especially its best-practise Templating Kit (STK) got this aspect covered extensively, starting from friendly URLs to support for the Sitemap protocol.  We even have written a 30-page &lt;a href="http://www.magnolia-cms.com/magnolia-cms/tech-briefs/seo.html"&gt;Magnolia SEO tech brief&lt;/a&gt; describing how to apply search engine optimization (SEO) to enterprise websites by employing best practices together with the built-in tools in Magnolia CMS.&lt;/li&gt;&lt;li&gt;Content Tagging – since Magnolia 4.1 we allow you to categorize content using Magnolia's Content Categorization module. Watch the &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/previous-versions/magnolia-4-1.html"&gt;video showing you Magnolia's content categorization&lt;/a&gt; (this feature is shown starting at 9:09 minutes). There is also a &lt;a href="http://store.magnolia-cms.com/module-list/openmind/tagcloud.html"&gt;community modules for tag clouds&lt;/a&gt; that takes a different approach.&lt;/li&gt;&lt;li&gt;Configurable Workflow – well covered thanks to our integration of a third-party workflow module. &lt;a href="http://documentation.magnolia-cms.com/technical-guide/workflow.html"&gt;Workflow is documented&lt;/a&gt; on our official documentation page. WHile most people get along well wit Magnolia's out-of-the-box 4-eye-workflow, there are nearly no limits to what the underlying engine can do.&lt;/li&gt;&lt;li&gt;Content Versioning – yes, Magnolia CMS creates versions of content and &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/diff.html"&gt;includes a diff view&lt;/a&gt; to see the differences between them. &lt;/li&gt;&lt;li&gt;Social Media Integration – provided via Frisbee, a Magnolia module that provides &lt;ul&gt;&lt;li&gt;Google Map (v3) integration (single and multiple markers)&lt;/li&gt;&lt;li&gt;Flickr Slideshow, with custom query builder (tags, full-text search, author based search..)&lt;/li&gt;&lt;li&gt;Facebook integration (SDK, iLike, meta tags, reading values from page properties)&lt;/li&gt;&lt;li&gt;ShareThis and AddThis integration&lt;/li&gt;&lt;li&gt;Twitter integration (last tweets, tweet this, retweet)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Multi-Lingual Support – coming from Switzerland, we breathe multi-lingual. For an example, see &lt;a href="http://www.singstar.com/country-selector.html"&gt;Sony's Singstar site&lt;/a&gt;. Magnolia CMS also allows you to &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/previous-versions/magnolia-4-3/multi-language-cms.html"&gt;export content into a translation-office friendly XML&lt;/a&gt; file to externalize content translation.&lt;/li&gt;&lt;li&gt;Multi-Site Management – read the case study how &lt;a href="http://www.magnolia-cms.com/clients/case-studies/texas-state-university.html"&gt;Texas State University is running 300 sites on Magnolia CMS&lt;/a&gt;. Magnolia's best-practise Templating Kit provides &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/previous-versions/magnolia-4-3/enterprise-multi-site-cms.html"&gt;multi-site support in the Enterprise Edition&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;Mobile Publishing – Magnolia CMS has always been output-format agnostic, and while we currently ship no demo templates to show how content could look differently on mobile devices (a rather trivial exercise), &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/previous-versions/magnolia-4-0.html"&gt;Magnolia's STK demo shows how content is rearranged based on available screen estate&lt;/a&gt; (example starts at 5:30). Also, you may be interested to learn that Texas State University has an excellent &lt;a href="http://propellerhat.wordpress.com/category/magnolia-cms/"&gt;Magnolia-powered iPhone&lt;/a&gt; app for their students; and recently voters in Switzerland very able to view voting results via a Magnolia-powered iPhone app.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Well, this concludes my little roundup of how Magnolia CMS supports the features Water &amp;amp; Stone's asked readers to rate in their survey. I think these are quite interesting, but note that readers had to rate these preselected 10 features, so it could be that some features are even more important (they just weren't on the list). &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia recently won what is very likely the biggest Open Source CMS license deal on the planet. The feature that made the customer decide for Magnolia in the end? The fact that &lt;a href="http://www.magnolia-cms.com/magnolia-cms/tech-briefs/performance.html"&gt;Magnolia didn't crash under high load&lt;/a&gt;, unlike the last remaining (closed-source) competitor on their short list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And what about ease-of-use? &lt;blockquote&gt;"We chose Magnolia CMS because it is easy to use for both our staff and our users." - Silke Radlherr, Team Leader, SWM&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;To learn how Magnolia's ease-of-use helped a $7B Utility Build its Brand on the Web, read our &lt;a href="http://www.magnolia-cms.com/clients/case-studies/swm.html"&gt;case study about SWM&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And to read what our users think about Magnolia, &lt;a href="http://www.magnolia-cms.com/clients/testimonials.html"&gt;read the testimonials&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-1546099970381512572?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>ease-of-use</category>
      <category>SEO</category>
      <category>magnolia</category>
      <category>social networks</category>
      <category>magnolia_cms</category>
      <category>top-10-cms-features</category>
      <pubDate>Mon, 18 Apr 2011 09:12:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2011/04/10-most-important-features-of-cms.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2011-04-18T09:12:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia Conference Call for Papers &amp; registration open</title>
      <link>http://www.betterfasterbigger.com/2011/04/magnolia-conference-call-for-papers.html</link>
      <description>&lt;a href="http://1.bp.blogspot.com/-ZLtUUnbwYig/Tab1rbzzNkI/AAAAAAAADqQ/XUjh3ni8c0k/s1600/small_conf11_banner_register_1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 174px;" src="http://1.bp.blogspot.com/-ZLtUUnbwYig/Tab1rbzzNkI/AAAAAAAADqQ/XUjh3ni8c0k/s400/small_conf11_banner_register_1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5595429713602623042" /&gt;&lt;/a&gt;&lt;br /&gt;We have launched the new &lt;a href="http://www.magnolia-cms.com/conference"&gt;Magnolia Conference&lt;/a&gt; site, and are now accepting proposals for presentations. This is the third time we do the Magnolia Conference and judging the success of the last two, you don't want to miss it. As in the last two years, we'll start with a partner day on Wednesday September 7th, followed by the public part of the conference on 8th &amp;amp; 9th.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This year we'd like to hear more from our &lt;a href="http://www.magnolia-cms.com/clients/references.html"&gt;ever growing list of successful customer projects&lt;/a&gt;, and I fully expect that the business track will be packed with cool stuff and interesting case studies. The technical track will certainly be surprising as well - last year we have seen presentations about Spring integration, Konakart integration, Ruby on Rails integration to name but a few. Also Joonas of Vaadin fame did show you what makes the &lt;a href="http://vaadin.com/"&gt;Vaadin GUI framework&lt;/a&gt; so attractive. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Speaking of which, this year's conference will finally see Magnolia 5 and its new Vaadin-powered GUI. This will of course be the biggest reason to join, and I for one look forward to sharing the excitement with you. If you haven't done so already, be sure to check out our &lt;a href="http://wiki.magnolia-cms.com/display/MAGNOLIA5/Home"&gt;Magnolia 5 space on the community wiki&lt;/a&gt;, where you can track our ideas and comment on them.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;If you care for a glimpse of what the conference is like, check out the &lt;a href="http://www.magnolia-cms.com/community/magnolia-conference/archive/2010/coverage/videos.html"&gt;2010 Magnolia Conference archive&lt;/a&gt;. JBoss's community Manager Mark Newton calls this&lt;blockquote&gt;one of the best Java CMS events I've been to&lt;/blockquote&gt;&lt;div&gt;which is a really nice way of saying that you'll enjoy your stay.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you &lt;a href="http://www.magnolia-cms.com/community/magnolia-conference/program/register.html"&gt;register&lt;/a&gt; before the end of April you pay half the price of registering in September, so if you know you want to come, don't hold back. We also plan to offer developer workshops regarding Magnolia 5, details to follow. Workshops will cost extra, and be limited in availability. As a thank you for you early birds, conference ticket holders will get notified first.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So now, either register or &lt;a href="http://www.magnolia-cms.com/community/magnolia-conference/program/call-for-papers.html"&gt;submit a proposal for a presentation&lt;/a&gt; - in either case we'll be happy to see you at the &lt;a href="http://www.magnolia-cms.com/conference"&gt;Magnolia Conference 2011&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-7205545103270624293?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>conference</category>
      <category>magnolia_cms</category>
      <category>magnolia</category>
      <pubDate>Thu, 14 Apr 2011 13:20:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2011/04/magnolia-conference-call-for-papers.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2011-04-14T13:20:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia CMS 5.0 - Milestone 3</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2011/04/magnolia-cms-50-milestone-3.html</link>
      <description>The new UI architecture and framework is built! Finally we have a solid fundament and feel that we are on the right path. We urged to have a more final AdminCentral though, but decided not to rush into anything and didn't want to build upon something half-baked. As a result we can now present an extraordinary customizable and pluggable UI.&lt;br /&gt;&lt;br /&gt;Watch our technical video featuring a short demo of the milestone 3, some architecture slides and a sample customization module:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://blip.tv/file/5013725"&gt;&lt;img border="0" height="212" src="http://4.bp.blogspot.com/-AuaRY61L2os/TaW5ohf6RlI/AAAAAAAAADc/Ux2wX60A7Gs/s320/Screen%2Bshot%2B2011-04-13%2Bat%2B16.55.07.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the next milestone we will focus on the page editing and templating. Naturally we will also catchup on the AdminCentral and dialogs to round over the impression.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-3338011379723730814?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 13 Apr 2011 15:00:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2011/04/magnolia-cms-50-milestone-3.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2011-04-13T15:00:00Z</dc:date>
    </item>
    <item>
      <title>Coupons with Imaging module</title>
      <link>http://finnotype.blogspot.com/2011/04/coupons-with-imaging-module.html</link>
      <description>In this post I show you how to create coupons using the &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html"&gt;Magnolia Imaging module&lt;/a&gt;. I start with a background image and overlay the special promotion text. Campaign specific details are managed in the Data module while static text is configured in the Imaging module.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Let's start by registering an &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Imagegenerator"&gt;image generator&lt;/a&gt;. For this purpose I use the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ImageOperationChain&lt;/span&gt; generator since it allows me to execute multiple image operations one after the other. My image operation chain will be called &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;coupon&lt;/span&gt; and it outputs PNG files.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iqRybtjwpg8/TZsHRmWmUDI/AAAAAAAAGZI/Eu6zXD0fcSE/s1600/coupon-1-generator.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iqRybtjwpg8/TZsHRmWmUDI/AAAAAAAAGZI/Eu6zXD0fcSE/s1600/coupon-1-generator.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The first image operation in the chain, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;loadImage&lt;/span&gt;, loads a background graphic. I am using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Loadingimagefromclasspath"&gt;ClassPathImageLoader&lt;/a&gt;&lt;/span&gt; class which can retrieve an image from the classpath. (You can also load from &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#LoadinganimagefromDMSworkspace"&gt;DMS&lt;/a&gt;, &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Loadinganimagefromwebsiteworkspace"&gt;website &lt;/a&gt;or &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#LoadinganimagefromURL"&gt;external URL&lt;/a&gt;.) By default, a Magnolia webapp's classpath includes any JARs in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/WEB-INF/lib&lt;/span&gt; and any classes and resources in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/WEB-INF/classes&lt;/span&gt;. I copied my background graphic into the latter and named it &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;coupon.png&lt;/span&gt;. Here's the operation configuration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PZRtZefbtpM/TZsLsNUTycI/AAAAAAAAGZM/OzMMXRGP2bs/s1600/operation-loadImage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-PZRtZefbtpM/TZsLsNUTycI/AAAAAAAAGZM/OzMMXRGP2bs/s1600/operation-loadImage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When I request the image I need to pass an existing page in the URL. This is how the parameter provider factory works. I can see the image at &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://&amp;lt;host&amp;gt;/&amp;lt;instance&amp;gt;/.imaging/coupon/website.png&lt;/span&gt;. This is a Christmas coupon with some red lights and space for text below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-I7FyqHCsU3o/TZrrmJrqmQI/AAAAAAAAGY0/EeGXpYv1GpY/s1600/coupon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-I7FyqHCsU3o/TZrrmJrqmQI/AAAAAAAAGY0/EeGXpYv1GpY/s1600/coupon.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Campaign management in Data module&lt;/h2&gt;For managing the campaigns I created a custom data type in the &lt;a href="http://documentation.magnolia-cms.com/modules/data.html"&gt;Data module&lt;/a&gt;. The campaign entry dialog allows editors to enter a discount percentage, product and validity period. I entered a Christmas campaign that offers 25% discount on a single in-store product.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-pDX-NXKCrOk/TZsNyy8XPwI/AAAAAAAAGZQ/ydDeV2Zxyic/s1600/dialog-campaign.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-pDX-NXKCrOk/TZsNyy8XPwI/AAAAAAAAGZQ/ydDeV2Zxyic/s1600/dialog-campaign.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The Data module stores the information in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;data&lt;/span&gt; workspace. The discount percentage, for example, is stored in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/campaign/Christmas/percentage&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Text overlay&lt;/h2&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;TextFromNode&lt;/span&gt; class can retrieve content from any workspace and overlay it on top of the image. In the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;percentage&lt;/span&gt; operation I fetch the discount percentage from the Data module. I need to pass the workspace name and path in the request URL, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://&amp;lt;host&amp;gt;/&amp;lt;instance&amp;gt;/.imaging/coupon/data/campaign/Christmas.png&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;percentSymbol&lt;/span&gt; operation overlays the % symbol using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;FixedText&lt;/span&gt; class. The symbol is given in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;text&lt;/span&gt; property. This works fine for static strings that don't change often. See &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Textoverlay"&gt;Text overlay&lt;/a&gt; to learn about the nodes and valid values.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Yth4gEKuHY4/TZsYLK5EdRI/AAAAAAAAGZU/9oqxB-3_CdI/s1600/operation-percentage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Yth4gEKuHY4/TZsYLK5EdRI/AAAAAAAAGZU/9oqxB-3_CdI/s1600/operation-percentage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I added the text "off" also as fixed text and requested the image. Here's what is looks like at this point.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kyy6N4WGNnk/TZsZybyBk9I/AAAAAAAAGZY/-5tNNIcm56o/s1600/coupon-3-percentage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-kyy6N4WGNnk/TZsZybyBk9I/AAAAAAAAGZY/-5tNNIcm56o/s1600/coupon-3-percentage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Adding the product description, validity period and legal disclaimers works in a similar fashion. Changing typeface, font size and positioning I was able to make the design more interesting. Here's the final result.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When the next campaign kicks in, all you need to do is ask your graphic designer for a new background image and create a campaign data item in the Data module.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-C_2E_r2Cm08/TZtn4zeFVYI/AAAAAAAAGZc/VGxiOAbzEMc/s1600/Winter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-C_2E_r2Cm08/TZtn4zeFVYI/AAAAAAAAGZc/VGxiOAbzEMc/s1600/Winter.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Background image credit: &lt;a href="http://www.flickr.com/photos/macalicious/2094567877/"&gt;George Deputee&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/juliancolton/5360064817/"&gt;Juliancolton2 &lt;/a&gt;on Flickr.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7071480644012847057?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <pubDate>Tue, 05 Apr 2011 19:30:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/04/coupons-with-imaging-module.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-04-05T19:30:00Z</dc:date>
    </item>
    <item>
      <title>Controlling AdminCentral access</title>
      <link>http://finnotype.blogspot.com/2011/03/controlling-admincentral-access.html</link>
      <description>AdminCentral is a Magnolia CMS user interface where administrators and editors work. In this post I show how to configure menu permissions for a custom user role.&lt;br /&gt;&lt;br /&gt;AdminCentral provides menus for common tasks. When you click a menu, workable items are displayed on the right.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_0bFzyM0mvs/TZQl7WILoqI/AAAAAAAAGYc/uY_Q-T-tNL8/s1600/AC-menus-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-_0bFzyM0mvs/TZQl7WILoqI/AAAAAAAAGYc/uY_Q-T-tNL8/s1600/AC-menus-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;You can hide menus and move them around to promote often-used items or deny permission to items that users should not be able to access. Magnolia CMS ships with typical roles such as superuser, editor and publisher. While a superuser can see everything, editors only see items that are relevant to their job.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;h2&gt;Permissions for custom roles&lt;/h2&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Suppose your organization has a very specialized editor role,&amp;nbsp;Category Editor,&amp;nbsp;who is responsible for maintaining a&amp;nbsp;taxonomy of categories. Categories are tags that help site visitors find related, interesting content.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Categories are managed in a custom data type under the &lt;b&gt;Data&lt;/b&gt; menu.&amp;nbsp;The&amp;nbsp;&lt;a href="http://demoauthor.magnolia-cms.com/.magnolia/pages/adminCentral.html"&gt;demo-project website&lt;/a&gt;&amp;nbsp;has&amp;nbsp;an example taxonomy consisting of categories such as Culture, Family and Finance. The Category Editor needs access to the &lt;b&gt;Data &amp;gt; Category&lt;/b&gt; menu only.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-usRrumOi8vI/TZQmE6ytWSI/AAAAAAAAGYg/5u8MHfQ1x8M/s1600/Category-menu-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-usRrumOi8vI/TZQmE6ytWSI/AAAAAAAAGYg/5u8MHfQ1x8M/s1600/Category-menu-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;You can approach setting permissions for this role in two ways:&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Top down&lt;/b&gt;: Start with a more powerful editor role and remove permissions until only the ability to edit categories is left.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Bottom up&lt;/b&gt;: Start with zero permissions and keep adding until the Category Editor can do their job.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Magnolia CMS ships with a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; role that provides many basic permissions common to all users. It's a good starting point so let's choose the first option: top down.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;Create category-editor role&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;Create new role &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;category-editor&lt;/span&gt;&amp;nbsp;and new&amp;nbsp;user &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;jsmith&lt;/span&gt;.&amp;nbsp;Assign roles &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;category-editor&lt;/span&gt;&amp;nbsp;to user &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;jsmith&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now open another browser instance and sign in as &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;jsmith&lt;/span&gt;. You should see three menus: &lt;b&gt;Website&lt;/b&gt;, &lt;b&gt;Documents &lt;/b&gt;and &lt;b&gt;Data&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CM__Gdlx7bQ/TZQnhFfz8TI/AAAAAAAAGYo/krsHprUSC6o/s1600/Category-too-many-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-CM__Gdlx7bQ/TZQnhFfz8TI/AAAAAAAAGYo/krsHprUSC6o/s1600/Category-too-many-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The Category Editor doesn't need the first two menus or the &lt;b&gt;Contact&lt;/b&gt; submenu so let's remove them.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Hide menus&lt;/h2&gt;Edit the&amp;nbsp;&lt;a href="http://documentation.magnolia-cms.com/administration/security/accesscontrollists.html"&gt;access control lists (ACL)&lt;/a&gt;&amp;nbsp;attached to the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;category-editor&lt;/span&gt; role. Deny access to the following nodes in the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;config&lt;/span&gt;&amp;nbsp;workspace:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/config/menu/website$&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/config/menu/dms$&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/config/menu/data/Contact$&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; role already grants access to the same nodes so you need to make the deny rules "win". If a user has multiple ACLs through role and group assignment that specifically list the requested resource, the ACL with the &lt;b&gt;longest pattern&lt;/b&gt; determines the permission. The order of the rules is not considered. This is a critical point. Use the &lt;a href="http://documentation.magnolia-cms.com/administration/security/accesscontrollists.html#Markingtheendofapath"&gt;dollar sign ($) to mark the end of the path&lt;/a&gt;, which makes the deny rule longer.&lt;br /&gt;&lt;br /&gt;Here's what the Category Editor sees after the ACLs have been applied. Menus are now perfect but the editor cannot edit the data items. Categories have a crossed-out pen icon to indicate this.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ug--ZsQXCn8/TZQmqr6pTMI/AAAAAAAAGYk/xPU0Pl5BIRs/s1600/Category-uneditable-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ug--ZsQXCn8/TZQmqr6pTMI/AAAAAAAAGYk/xPU0Pl5BIRs/s1600/Category-uneditable-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Grant access to data&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;Add an ACL in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;data&lt;/span&gt; workspace that grants Read/Write permission to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/categorization&lt;/span&gt; node. Now the items are editable.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XDcE_HL74Bw/TZQpC0w1vsI/AAAAAAAAGYs/PF4tt2d4rAg/s1600/Category-editable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-XDcE_HL74Bw/TZQpC0w1vsI/AAAAAAAAGYs/PF4tt2d4rAg/s1600/Category-editable.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Lock the backdoor!&lt;/h2&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Menus are not the only way to access content in AdminCentral. They just provide convenient access to often-used items. If you are restricting access per security, not just for convenience, make sure you lock down the content too:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Workspaces&lt;/b&gt; store the actual content. Make sure that any role you choose as a basis does not grant access to a workspace that users should not be able to access. In our example the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; role does not grant any unnecessary workspace permissions. You can control workspace access with an ACL. Select the workspace from the &lt;a href="http://documentation.magnolia-cms.com/administration/security/accesscontrollists.html#ACLstructure"&gt;controlled space dropdown&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Trees&lt;/b&gt; are customized views into specific data.&amp;nbsp;Users can view trees with a direct URL if they know the name of the tree, for example &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://[host]/[instance]/.magnolia&lt;span class="Apple-style-span" style="color: #3d85c6;"&gt;/trees/website&lt;/span&gt;&lt;/span&gt;. Each module can register its own trees. Look in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/trees&lt;/span&gt;&amp;nbsp;to get an idea. As long as you restrict permissions to workspaces correctly, trees will honor the permissions. &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Pages&lt;/b&gt; provide specialized tools such as exporting, importing and querying.&amp;nbsp;Users can access pages with a direct URL too:&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://[host]/[instance]/.magnolia&lt;span class="Apple-style-span" style="color: #3d85c6;"&gt;/pages/jcrUtils&lt;/span&gt;&lt;/span&gt;. Like in trees, content cannot be accessed through pages as long as the workspace is locked down.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7216073080802532120?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>taxonomy</category>
      <category>magnolia</category>
      <pubDate>Thu, 31 Mar 2011 08:14:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/03/controlling-admincentral-access.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-03-31T08:14:00Z</dc:date>
    </item>
    <item>
      <title>Find pages using any paragraph in Magnolia</title>
      <link>http://www.java.net/blog/rah003/archive/2011/03/23/find-pages-using-any-paragraph-magnolia-0</link>
      <description>&lt;!--  | 0 --&gt;&lt;p&gt;Somebody once said that the best ideas are the most simple ones.&lt;/p&gt;
&lt;p&gt;Here comes one I had this morning when asked for example of page using this or that paragraph in Magnolia:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;
select * from nt:base where mgnl:template = 'stkTeaser'
&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Login to Admin Central, go to the JCR Queries, set target repository to website, limit result types to &lt;strong&gt;&lt;code&gt;mgnl:content&lt;/code&gt;&lt;/strong&gt; and type in the query above.
Of course, also replace the "stkTeaser" with what ever paragraph you are looking for and you are done. The result will list all the pages using given paragraph.&lt;/p&gt;

&lt;p&gt;The one problem you might run into is that you actually don't know the name of the paragraph. Again the query comes handy here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;
select * from nt:base where jcr:path like '/modules/%/paragraphs/%' and type is not null
&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this case set repository to "config" and limit results to "mgnl:contentNode" type.&lt;/p&gt;</description>
      <category>Open Source</category>
      <category>Web Applications</category>
      <category>Blogs</category>
      <pubDate>Wed, 23 Mar 2011 08:41:24 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2011/03/23/find-pages-using-any-paragraph-magnolia-0</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2011-03-23T08:41:24Z</dc:date>
    </item>
    <item>
      <title>Spring Web MVC with Content</title>
      <link>http://tobias-mattsson-magnolia.blogspot.com/2011/03/spring-web-mvc-with-content.html</link>
      <description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The idea that sparked me writing the &lt;a href="http://documentation.magnolia-cms.com/modules/blossom.html"&gt;Blossom Module&lt;/a&gt; for &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt; was to bring the CMS and especially the content into &lt;a href="http://static.springsource.org/spring/docs/current/reference/mvc.html"&gt;Spring Web MVC&lt;/a&gt; not the other way around. Controllers should be the building blocks when composing pages. The latest version 1.2.2 brings a small but significant piece to the puzzle. By adding a custom &lt;a href="http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/web/bind/support/WebArgumentResolver.html"&gt;WebArgumentResolver&lt;/a&gt; you can add content objects to the argument list in annotated handler methods.&lt;br /&gt;&lt;br /&gt;This is an example of a paragraph that displays a contact form where the author that created the page specified which office will be receiving the filled in form. The office is fetched from a database and passed to the view where details such as its address are displayed.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;@RequestMapping("/contactForm")&lt;br /&gt;public String contactForm(ModelMap model, Content page, Content paragraph) {&lt;br /&gt;    model.put("office", officeDao.getOfficeById(paragraph.getNodeData("office").getString()));&lt;br /&gt;    return "contactForm";&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;To enable it you need to add the BlossomWebArgumentResolver to your AnnotationMethodHandlerAdapter.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&amp;lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&amp;gt;&lt;br /&gt;  &amp;lt;property name="customArgumentResolver"&amp;gt;&lt;br /&gt;    &amp;lt;bean class="info.magnolia.module.blossom.web.BlossomWebArgumentResolver" /&amp;gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;BlossomWebArgumentResolver provides support for a few more arguments that is handy to have handed directly to your handler method. They are: AggregationState, WebContext, Context, User and MgnlUser.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154125577090836535-1593558304493074087?l=tobias-mattsson-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 21 Mar 2011 16:39:00 GMT</pubDate>
      <guid>http://tobias-mattsson-magnolia.blogspot.com/2011/03/spring-web-mvc-with-content.html</guid>
      <dc:creator>Tobias Mattsson</dc:creator>
      <dc:date>2011-03-21T16:39:00Z</dc:date>
    </item>
    <item>
      <title>Category cloud with images</title>
      <link>http://finnotype.blogspot.com/2011/03/category-cloud-with-images.html</link>
      <description>This post was inspired by &lt;a href="http://old.nabble.com/Category-cloud-with-image-td31154527.html"&gt;Amit Patel's question&lt;/a&gt;&amp;nbsp;on how to add images in a Magnolia category cloud. Thanks Amit!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What is a tag cloud?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Tags are words or short phrases that describe content such as articles or photos.&amp;nbsp;A tag cloud is a weighted lists of those tags displayed as a group where popular tags are given more visual weight than less popular tags. The visual weight is accomplished by making popular tags larger or bolder.&lt;br /&gt;&lt;br /&gt;Here's a tag cloud from&amp;nbsp;&lt;a href="http://www.flickr.com/photos/tags/"&gt;Flickr&lt;/a&gt;&amp;nbsp;with&amp;nbsp;tags that people use on their&amp;nbsp;photos.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-fF1J5g5sGoo/TYMRAXX59rI/AAAAAAAAGVU/82HAMGHeZHw/s1600/flickr-1-1-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh6.googleusercontent.com/-fF1J5g5sGoo/TYMRAXX59rI/AAAAAAAAGVU/82HAMGHeZHw/s1600/flickr-1-1-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Another cloud with&amp;nbsp;trending Twitter topics.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-YZ7a4pHTGhY/TYMRQ60eh7I/AAAAAAAAGVY/TGfwSxT8tC8/s1600/twitter+trend+cloud-1-1-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-YZ7a4pHTGhY/TYMRQ60eh7I/AAAAAAAAGVY/TGfwSxT8tC8/s1600/twitter+trend+cloud-1-1-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Magnolia category cloud&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Magnolia's category cloud paragraph has the same principle. Articles on a website are tagged with categories to make it easier to find related content. Categories can be displayed in a cloud just like tags. The Magnolia category cloud is an editorial paragraph rather than compiled automatically from popularity statistics. This means that editors can set the weights to promote categories that are hot to give a boost to active campaigns or new content, for example.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-Kg3NIOHjz7s/TYMReZaUXBI/AAAAAAAAGVc/NBh_TodX1IU/s1600/mgnl+cloud-1-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-Kg3NIOHjz7s/TYMReZaUXBI/AAAAAAAAGVc/NBh_TodX1IU/s1600/mgnl+cloud-1-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Add an image control to Category dialog&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The quickest way to add images to each category is to&amp;nbsp;copy the photo upload mechanism from the Contacts data type. Both Contacts and Categories are managed in the Data module so repurposing elements is a snap.&lt;br /&gt;&lt;br /&gt;Add an image control in Category dialog:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;b&gt;Data &amp;gt; Config (Dialogs)&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Copy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/data/dialogs/contact/personalTab/photo&lt;/span&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/data/dialogs/category/mainTab&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Rename the copied node to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;icon&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Change the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;label&lt;/span&gt; to "Icon".&lt;/li&gt;&lt;/ol&gt;Now you can add images. Get some nifty icons from the Web and add them to your categories.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-PWIz2GopVyc/TYMHgHsOw5I/AAAAAAAAGVM/836_u3MxDBk/s1600/editing-finance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="https://lh6.googleusercontent.com/-PWIz2GopVyc/TYMHgHsOw5I/AAAAAAAAGVM/836_u3MxDBk/s320/editing-finance.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Render images next to category labels&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Edit the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;categoryCloud.ftl&lt;/span&gt; paragraph script. It's in the Categorization module JAR. You can also test this out by creating a script in &lt;b&gt;Templating Kit &amp;gt; Templates&lt;/b&gt;&amp;nbsp;and referencing it from the paragraph definition instead.&lt;/li&gt;&lt;li&gt;Assign images to categories.&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml;toolbar:false;first-line:12;highlight:19"&gt;[#-- Assigns: Macro for Item iteration --]&lt;br /&gt;[#macro assignItemValues item]&lt;br /&gt;    [#-- Assigns: Get Content from List Item--]&lt;br /&gt;    [#assign itemName = item.@name]&lt;br /&gt;    [#assign itemDisplayName = item.displayName!itemName]&lt;br /&gt;    [#assign itemLevel = item.level]&lt;br /&gt;    [#assign itemLink = model.getCategoryLink(itemName)!]&lt;br /&gt;    [#assign itemIcon = item.icon!]&lt;br /&gt;[/#macro]&lt;/pre&gt;&lt;ol start="3"&gt;&lt;li&gt;Render the icons.&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml;toolbar:false;first-line:35;highlight:[36,37,38]"&gt;&amp;lt;li class="${itemLevel}"&amp;gt;&lt;br /&gt;  [#if item.icon?exists]&lt;br /&gt;    &amp;lt;img src="${stk.createImageLink(itemIcon)}" /&amp;gt;&lt;br /&gt;  [/#if]&lt;br /&gt;    &amp;lt;a href="${itemLink}" &amp;gt;${itemDisplayName}&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;/pre&gt;&lt;br /&gt;To finish off, add a category cloud paragraph on the page and admire your handywork!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-ezoiOqpkcis/TYMR0fwEZZI/AAAAAAAAGVg/1THcedgm4Co/s1600/cloud+with+images.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-ezoiOqpkcis/TYMR0fwEZZI/AAAAAAAAGVg/1THcedgm4Co/s1600/cloud+with+images.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-6240605082020526932?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>taxonomy</category>
      <category>magnolia</category>
      <pubDate>Fri, 18 Mar 2011 08:11:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/03/category-cloud-with-images.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-03-18T08:11:00Z</dc:date>
    </item>
    <item>
      <title>@Hackergarten</title>
      <link>http://dlipp.blogspot.com/2011/03/hackergarten.html</link>
      <description>Yesterday (late) evening there was the Magnolia Night at&amp;nbsp;&lt;a href="http://hackergarten.net/"&gt;Hackergarten&lt;/a&gt;. Next to our host&amp;nbsp;&lt;a href="http://hamletdarcy.blogspot.com/"&gt;Hamlet D'Arcy&lt;/a&gt;&amp;nbsp;and 4 Magnolia fellows, there was 7 attendees from various companies.&amp;nbsp;After a short introduction to the product&amp;nbsp;we quickly choose the topics for the night.&lt;br /&gt;&lt;br /&gt;We ended up splitting into two groups. Mine was trying to dig into the recently created OpenSocial Container module and especially attacking the &lt;a href="http://jira.magnolia-cms.com/browse/MGNLOPENSOCIAL-5"&gt;currently missing&lt;/a&gt;&amp;nbsp;OAuth integration&amp;nbsp;there.&lt;br /&gt;&lt;br /&gt;I have to admit we did not get something to run (in contrast to the other group) but this was not really surprising considering the fact that all group members (except me) had never before worked with Magnolia nor had knowledge about OpenSocial. Next to some deeper insights into &lt;a href="http://oauth.net/"&gt;OAuth&lt;/a&gt;&amp;nbsp;we had a lot of nice conversations and were discussing many Magnolia and/or OpenSocial related aspects.&lt;br /&gt;Considering that most of as had already worked some 8+ hours before and that Basler Fasnacht was still going on outside this is quite an outcome I'd say ;-)&lt;br /&gt;&lt;br /&gt;Especially striking: again it turned out that the &lt;i&gt;social&lt;/i&gt;&amp;nbsp;in OpenSocial doesn't really help to convince people that this is something extremely useful for &lt;i&gt;less social&lt;/i&gt; use cases. That's why I added a short intro to our module's&amp;nbsp;&lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+OpenSocial+Container"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Wiki page&lt;/span&gt;&lt;/a&gt;&amp;nbsp;especially pointing out that there's a whole bunch of big companies using it for there &lt;i&gt;less social&lt;/i&gt; apps.&lt;br /&gt;&lt;br /&gt;To summarize I can say it was a great evening and I got to know a bunch of cool hackers. I bet the others liked it as well...&lt;br /&gt;&lt;br /&gt;Thx a lot Hamlet for&amp;nbsp;hosting the whole event and providing food &amp;amp; beer!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7606216893605183312-2251734086942088736?l=dlipp.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 17 Mar 2011 13:11:00 GMT</pubDate>
      <guid>http://dlipp.blogspot.com/2011/03/hackergarten.html</guid>
      <dc:creator>Daniel Lipp</dc:creator>
      <dc:date>2011-03-17T13:11:00Z</dc:date>
    </item>
    <item>
      <title>Using Magnolia for Mobile Content</title>
      <link>http://propellerhat.wordpress.com/2011/03/10/using-magnolia-for-mobile-content/</link>
      <description>When we started work on version 2.0 of the Texas State Mobile app for the iPhone, the biggest new feature that the Marketing department wanted to see was a &amp;#8220;What&amp;#8217;s New&amp;#8221; screen. Their idea was that they could use it to accomodate all of the folks who wanted a presence in the mobile app, but [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=17&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>magnolia-cms</category>
      <category>mobile</category>
      <category>iphone</category>
      <pubDate>Thu, 10 Mar 2011 17:08:55 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/03/10/using-magnolia-for-mobile-content/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-03-10T17:08:55Z</dc:date>
    </item>
    <item>
      <title>Adding Flickr images to Magnolia CMS</title>
      <link>http://tmiyar.blogspot.com/2011/03/adding-custom-dynamic-asset-handler.html</link>
      <description>This is a step-by-step guide on how to create your custom DAM and plug it into Magnolia CMS. Will allow you to add images from external services like Flickr, as well as adding images from other servers using their url (It comes with a forge module!)&lt;br /&gt;&lt;br /&gt;This is a sample handle for external image/video urls, very basic as it does not add the imaging support for now.&lt;br /&gt;&lt;br /&gt;* Requirements - Standard Templating Kit Module&lt;br /&gt;&lt;br /&gt;1. The Asset&lt;br /&gt;&lt;br /&gt;We need to create our own Asset class that will implement the interface &lt;a href="http://nexus.magnolia-cms.com/content/sites/magnolia.public.sites/modules/magnolia-module-standard-templating-kit/1.4.2/standard-templating-kit-parent/magnolia-module-standard-templating-kit/apidocs/info/magnolia/module/templatingkit/dam/Asset.html"&gt;Asset&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If we want to have exact same behavior  as in STK/ETK we will need to find a way to store 'meta data' (caption, description) of our assets, we could use the data module for that matter.&lt;br /&gt;&lt;br /&gt;In this sample we wont store any metadata for the images, nor use the imaging support.&lt;br /&gt;&lt;br /&gt;That leaves us with just one method to implement 'getLink' and this will be the value stored when we open the dialog to select an image.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public String getLink() throws DAMException {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;return link;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Creation of link is on the class constructor, as easy as this&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;link = nodeData.getString();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. The handler.&lt;br /&gt;&lt;br /&gt;Should extend class &lt;a href="http://nexus.magnolia-cms.com/content/sites/magnolia.public.sites/modules/magnolia-module-standard-templating-kit/1.4.2/standard-templating-kit-parent/magnolia-module-standard-templating-kit/apidocs/info/magnolia/module/templatingkit/dam/handlers/AbstractHandler.html"&gt;AbstractHandler&lt;/a&gt; . We will extend from AbstractHandler that has the methods to read the configuration, that leaves us with two methods to implement as needed: getAsset and getAssetByKey. In this case we implement getAsset to return an instance of our Asset.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;final String name = getNodeDataName(node, nodeDataPrefix); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Important thing to note here is that we need to get the name of the nodeData that has the url of our image. When you set an image using the dam controls, you name your node as i.e. 'myimage' and on saving you will get a nodeData with the name you gave plus the name of the dam control used. To make it simpler a call to the method &lt;a href="http://nexus.magnolia-cms.com/content/sites/magnolia.public.sites/modules/magnolia-module-standard-templating-kit/1.4.2/standard-templating-kit-parent/magnolia-module-standard-templating-kit/apidocs/info/magnolia/module/templatingkit/dam/handlers/AbstractHandler.html#getNodeDataName(info.magnolia.cms.core.Content,%20java.lang.String)"&gt;getNodeDataName&lt;/a&gt; will give you the real name with which your node has been saved. In this sample it will contain the exact url of our image, no need of further processing.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;final NodeData nodeData = node.getNodeData(name);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This line above gets the node data, now with the right name.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;return new UrlAsset(nodeData);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is where we return our asset.&lt;br /&gt;&lt;br /&gt;3. The controls (configuration).&lt;br /&gt;&lt;br /&gt;Need to add the configuration for this external dam. For that we create a new node under our site configuration. There we put the handler we are going to use and the control/s in which we will store the image information. See image:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-QTQAlwmqc88/TYNi3VfUf0I/AAAAAAAAANM/EZIWQUDwcBI/s1600/Screen%2Bshot%2B2011-03-18%2Bat%2B2.46.40%2BPM.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5585416665670385474" src="http://3.bp.blogspot.com/-QTQAlwmqc88/TYNi3VfUf0I/AAAAAAAAANM/EZIWQUDwcBI/s200/Screen%2Bshot%2B2011-03-18%2Bat%2B2.46.40%2BPM.png" style="cursor: hand; cursor: pointer; height: 105px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And to finish this post there is a module in Magnolia forge &lt;a href="http://svn.magnolia-cms.com/svn/forge/magnolia-module-urldam/trunk/"&gt;magnolia-module-urldam&lt;/a&gt;  with the code to add an external dam handler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-2657371581088642431?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>asset</category>
      <category>dam</category>
      <category>magnolia</category>
      <category>Flickr</category>
      <category>magnolia_cms</category>
      <category>url</category>
      <category>images</category>
      <pubDate>Thu, 10 Mar 2011 14:39:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2011/03/adding-custom-dynamic-asset-handler.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2011-03-10T14:39:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia Module OpenSocial Container is out</title>
      <link>http://dlipp.blogspot.com/2011/03/magnolia-module-opensocial-container-is.html</link>
      <description>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;About one month ago I was writing about a PoC having the aim to integrate existing webapps into Magnolia-powered websites by bringing OpenSocial to the Magnolia world. This PoC could successfully be finished a couple of days ago.&amp;nbsp;&lt;/span&gt;All envolved developers as well as the project owners were really happy as - thanx to the power of OpenSocial and Magnolia CMS - all requirements could be fulfilled. In order to do so&amp;nbsp;we only had to dive into OpenSocial and write few lines of java, javascript and freemarker. This was enough to construct the Magnolia OpenSocial Module and transform the gwt-based webapps into first class gadgets.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The requirements were:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 18px;"&gt;&lt;i&gt;be lightweight&lt;/i&gt;:&amp;nbsp;&lt;/span&gt;We just store a gadget title and its URL in magnolia. To be able to do so we just need a magnolia instance with the new module installed.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 18px;"&gt;&lt;i&gt;preserve the existing web-apps as far as possible&lt;/i&gt;:&amp;nbsp;&lt;/span&gt;Having understood how the mechanism works, it only took about 2 hours per app to convert into a gadget.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 18px;"&gt;&lt;i&gt;allow to render different views for each app (minimized, maximized)&lt;/i&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;We just used the &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;home&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; and the &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;canvas&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; view as defined by OpenSocial. The js files of Apache Shindig already supported them - the gwt-apps came with two corresponding views that could be mapped to the ones of OpenSocial.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 18px;"&gt;&lt;i&gt;allow communication between the apps&lt;/i&gt;:&amp;nbsp;&lt;/span&gt;OpenSocial pubsub mechanism is also provided with Apache Shindig so we only had to activate the feature.&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Of course many deliverables of the PoC are very customer specific. The good news is that the new OpenSocial module is not - and it'll be available to you in a few hours...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I created a short screencast to show were we currently are:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: auto;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span id="goog_41681891"&gt;&lt;/span&gt;&lt;span id="goog_41681892"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/HjyK_uY6Daw/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/HjyK_uY6Daw?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/HjyK_uY6Daw?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Seeing separate gadgets being rendered within magnolia was already quite impressive. When we put in the converted GWT-Apps at the customer's side, OpenSocial revealed its real power:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Styles of the container and of all the gadgets were aligned so it really looked like an enterprise portal. On top - using the pubsub feature - gadgets can easily interact with each other. I'd be really surprised if we'll not see lots of Magnolia empowered websites hosting gadgets within the next few months.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Me I'll jump back to Magnolia 5.0 development now, but will keep an eye (or more) on the new module - you probably should do so as well...&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7606216893605183312-1135903987122940711?l=dlipp.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>Magnolia CMS OpenSocial</category>
      <pubDate>Mon, 07 Mar 2011 08:16:00 GMT</pubDate>
      <guid>http://dlipp.blogspot.com/2011/03/magnolia-module-opensocial-container-is.html</guid>
      <dc:creator>Daniel Lipp</dc:creator>
      <dc:date>2011-03-07T08:16:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia CMS 5.0 - Architecture manifests</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2011/03/magnolia-50-architecture-manifests.html</link>
      <description>After few weeks of Magnolia 5.0 development and again focussing on the UI architecture, I have finally assembled slides and diagrams to give insights into our doing. Some of the concepts are very drafty but most of them are already reflected in the latest codebase. When we deliver the milestone 3 end of march, we hope that the base architecture will be set in stone ;-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-cms-50-architecture" title="Magnolia CMS 5.0 - Architecture"&gt;Magnolia CMS 5.0 - Architecture&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-cms-50-architecture"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-3U5UhEfoXYs/TZ7yYob26FI/AAAAAAAAADU/YyngSuKaCNw/s320/Screen+shot+2011-04-08+at+13.31.36.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-cms-50-overview" title="Magnolia CMS 5.0 - Overview"&gt;Magnolia CMS 5.0 - Overview&lt;/a&gt;&lt;br /&gt;An other high level presentation describing our goals and plans can be found here:&lt;br /&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-cms-50-overview"&gt;&lt;img border="0" height="242" src="http://1.bp.blogspot.com/-PoUP46jUQ8w/TZ7ybrtkmqI/AAAAAAAAADY/VOvZ7x-hTB4/s320/Screen+shot+2011-04-08+at+13.31.56.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-6507436962218921618?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 03 Mar 2011 08:52:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2011/03/magnolia-50-architecture-manifests.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2011-03-03T08:52:00Z</dc:date>
    </item>
    <item>
      <title>Upgrades with Magnolia</title>
      <link>http://propellerhat.wordpress.com/2011/02/23/upgrades-with-magnolia/</link>
      <description>During my stint at Texas State University, we adopted Magnolia CMS around 2007 after a disastrous two-year dalliance with another enterprise system. Since we wanted to be as responsive as possible to our users&amp;#8217; varied (and often changing) needs while still keeping our CMS reasonably stable, we decided to do once-a-month releases to fix bugs and incorporate new [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=propellerhat.wordpress.com&amp;#38;blog=20423027&amp;#38;post=4&amp;#38;subd=propellerhat&amp;#38;ref=&amp;#38;feed=1" width="1" height="1" /&gt;</description>
      <category>updates</category>
      <category>magnolia-cms</category>
      <pubDate>Wed, 23 Feb 2011 18:26:05 GMT</pubDate>
      <guid>http://propellerhat.wordpress.com/2011/02/23/upgrades-with-magnolia/</guid>
      <dc:creator>Sean McMains</dc:creator>
      <dc:date>2011-02-23T18:26:05Z</dc:date>
    </item>
    <item>
      <title>An ode to refactoring</title>
      <link>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/_EsRy_lsrZc/ode-to-refactoring.html</link>
      <description>If you're a user experience professional or just interested in the field and have read books (e.g. &lt;a href="http://www.amazon.com/Project-Guide-Design-experience-designers/dp/0321607376"&gt;this one&lt;/a&gt;) on how to best design the user experience of an app or site, you know that there are many ways to design, fix and extend a user interface. Most of us work iteratively, repeating the same steps over and over again, taking in additional requirements and tasks along the way, until we've reached our goals - or the project deadline.&lt;br /&gt;
&lt;br /&gt;
My work on Magnolia 5 actually has several, concrete goals, which i tried to summarize &lt;a href="http://wiki.magnolia-cms.com/display/UX/Goals"&gt;on this wiki page&lt;/a&gt; of the &lt;a href="http://wiki.magnolia-cms.com/display/UX/Magnolia+5.0"&gt;M5 UX space&lt;/a&gt;, but the overall character of my main task is clear:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;We want an evolution and no revolution of Magnolia's user interface. &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I'm taking great care to build on what is already here, especially if it comes to &lt;b&gt;AdminCentral&lt;/b&gt;. The administrative interface of Magnolia has both been successful and is a &lt;b&gt;visual landmark&lt;/b&gt; - its green background, the lights indicating activation success or failure and, in general, its usage patterns both simple and effective at the same time have shaped everybody's first impression of Magnolia substantially. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-GKjp3UehQEk/TVUQZ7DRvXI/AAAAAAAAAEg/zDQqvATOSJc/s1600/AdminCentral.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-GKjp3UehQEk/TVUQZ7DRvXI/AAAAAAAAAEg/zDQqvATOSJc/s400/AdminCentral.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
As a developer, while I enjoyed building a new app, &lt;b&gt;I always also enjoyed reworking an existing code base&lt;/b&gt;. Take what's working. Try to fix what's broken. If you can't fix it, come up with something new or different that plays well the existing pieces. &lt;b&gt;&lt;a href="http://refactoringmanifesto.org/"&gt;I love to refactor code&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Refactoring code is very demanding, if your code has no or the wrong structure. You can only move in very small steps, if there are no or only broken tests. Since nobody is willing to wait until you've finished your changes, part of the task is to keep things running while you work. It takes a significant amount of time to reshape existing code, if - how a boss of mine put it once - &lt;i&gt;the acre hasn't been dug over frequently&lt;/i&gt;. Refactoring is part of development, at any time, under any circumstances. You can't always start new. You don't want to simply rewrite pieces, partly because that would also mean loosing many insights gained so far and repeating the same errors. &lt;br /&gt;
&lt;br /&gt;
But once the mist has disappeared, &lt;b&gt;structure appears, concepts become clear&lt;/b&gt;, refactoring becomes something enjoyable, your code shines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Refactoring is cool&lt;/b&gt;. It is kind of like &lt;a href="http://www.youtube.com/watch?v=GXsVAy_nz8w"&gt;renovating a bridge&lt;/a&gt; without being able to &lt;a href="http://www.ebp.ch/unternehmen/publikationen/filme/zeitraffer/regensbergbruecke"&gt;close it down for traffic&lt;/a&gt;. Building an &lt;a href="http://www.bahnonline.ch/wp/wp-content/uploads/2008/03/1004_01.jpg"&gt;underground train station&lt;/a&gt; &lt;a href="http://www.poyry.ch/_cgidata/mhsnews/verkehr_d/images/12299566821938170408.jpg"&gt;without interrupting service&lt;/a&gt;. Reconstruction work at a major place in a city with &lt;a href="http://www.stadt-zuerich.ch/ted/de/index/taz/bauen/sommerbaustelle_escher-wyss-platz/videos/Depot.html"&gt;only slightly rerouted traffic&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
So that's what I do: &lt;b&gt;I refactor AdminCentral&lt;/b&gt;. It's demanding, it's passionate, it's adventurous. And boy, it's such a cool job.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;More about old new AdminCentral in the next couple of weeks.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7077221096228251291-4217720579445909779?l=ma-ui.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RevisitingTheMagnoliaUi/~4/_EsRy_lsrZc" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 11 Feb 2011 10:48:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/_EsRy_lsrZc/ode-to-refactoring.html</guid>
      <dc:creator>noreply@blogger.com (Andreas Weder)</dc:creator>
      <dc:date>2011-02-11T10:48:00Z</dc:date>
    </item>
    <item>
      <title>Raising the Bar in CMS Usability with Vaadin</title>
      <link>http://www.betterfasterbigger.com/2011/02/raising-bar-in-cms-usability-with.html</link>
      <description>We want our next major release to provide the very best administration interface for Web-based content management on the market.&lt;br /&gt;&lt;br /&gt;Go ahead. Read that again.&lt;br /&gt;&lt;br /&gt;Yes, we really do believe Magnolia 5’s GUI will be better than any other web based CMS on the market. That is a strong aspiration, agreed, but then again it’s been Magnolia’s core aim from day one: “Simplicity on an Enterprise Scale” for us means a CMS that is intuitive to use and works well for enterprise use cases. We have shown &lt;a href="http://www.magnolia-cms.com/clients/case-studies.html"&gt;Magnolia CMS can cover enterprise use cases&lt;/a&gt;. Now its time to deliver on the usability part.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Setting a goal means adjusting focus. Magnolia 5’s focus is on user experience.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Magnolia 5’s usability shall amaze content authors with a high-usability interface not just when using a desktop browser, but also on an iPad and other mobile devices with a touch screen. With such high goals, you better choose a very good toolkit for building Magnolia’s new Graphical User Interface (GUI).&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://www.magnolia-cms.com/community/conference/2010.html"&gt;Magnolia Conference 2010&lt;/a&gt;, &lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-50-genuine"&gt;Philipp &lt;/a&gt;and &lt;a href="http://www.slideshare.net/DanielLipp/mgnl5whyvaadin"&gt;Daniel &lt;/a&gt;talked about Magnolia 5.0, and specifically about how we were evaluating &lt;a href="http://vaadin.com/"&gt;Vaadin&lt;/a&gt; as our framework for the next-gen AdminCentral (our administration interface) in Magnolia 5.0. After a lot of debate (both internally and with the community) and some proof of concept development, we finally decided to stop tinkering and take the decision to go with Vaadin as our toolkit of choice for the Magnolia 5.0 GUI.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Show Me the Veggies!&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://blip.tv/play/hpYGgfmuOQA%2Em4v" type="application/x-shockwave-flash" width="410" height="258" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;If you'd like to see the Vaadin/Magnolia synergy in action, take a look at above video. This is a proof of concept. Things will look completely different with the final Magnolia 5.0, but it shows that Vaadin is able to work for the things we have in mind. It also shows a nice idea about building a graphical dialog editor.&lt;br /&gt;&lt;h2&gt;Consistent User Experience Across All Input Devices&lt;/h2&gt;Magnolia's tagline is "simple open source content management" and we take this to heart. We want content authors (and developers) to be delighted with every aspect of Magnolia. Very simply, Vaadin helps us meet this goal because the people that build Vaadin share our philosophy. &lt;b&gt;They really care about the user interface&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Out of the box, Vaadin comes with some great-looking UI components, which certainly helps for first impressions. And not only that, but it lets you put them together into a slick and intuitive interface without leaving behind a trail of messy code. However, shiny widgets alone don’t make a good user interface. With Andreas, &lt;a href="http://ma-ui.blogspot.com/"&gt;Magnolia has a dedicated and experienced user interaction designer on its team &lt;/a&gt;who completely shares our vision of how things should work. Andreas has worked for months defining basic interaction patterns and hammering out how an interface must work to support not only mouse but also keyboard and touch as input devices for &lt;a href="http://wiki.magnolia-cms.com/display/UX/Focusing%2C+selecting+and+opening+items"&gt;common Magnolia operations&lt;/a&gt;. So the next time you hit the down arrow on your keyboard to navigate down through the AdminCentral tree, it will actually work!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vaadin.com/directory#addon/vaadin-touchkit"&gt;Touch support&lt;/a&gt; means Magnolia’s administration interface will work on an iPad and other mobile devices requiring touch support. It also means that Magnolia 5’s AdminCentral will likely be completely accessible, a feature often requested by governments but hardly found in any existing CMS.&lt;br /&gt;&lt;br /&gt;One benefit of how we will utilize Vaadin, using shared components and pure Java packaging, is that the overall user interface will be much more consistent, regardless of whether a module comes from Magnolia's core developers or from an external contributor. This means shorter learning curves and more &lt;a href="http://shinyhappyusers.org/"&gt;shiny, happy users&lt;/a&gt;.&lt;br /&gt;&lt;h2&gt;Standardization and High Security&lt;/h2&gt;If you’re a Magnolia developer, you probably already know that our current AdminCentral client is tightly coupled to server-side architecture, and we use a custom JavaScript library to handle AJAX requests in the client. We never set out to conquer the world with our GUI libraries, but back when we started, there was no alternative to writing our own. With Magnolia 5.0 we finally have the chance to switch to an existing, established, well-proven, documented and (externally!) maintained library instead of having to work with our own. This allows us to focus on stronger traits, like building great user interfaces instead of fixing browser incompatibilities in GUI widgets. And it allows everybody else to use a library they can use across many other projects.&lt;br /&gt;&lt;br /&gt;Standardization is a good thing and Magnolia has used existing code and supported standards wherever there was a match with our needs. The GUI library really is the last major part of Magnolia that was non-standard, simply because what we need did not yet exist.&lt;br /&gt;&lt;br /&gt;Besides using a standard GUI library, one of our original technical goals for Magnolia 5.0 were to decouple AdminCentral from the server. Alas, our research made it clear that still no GUI framework exists today that fulfills all requirements at once. Vaadin comes with built-in listeners and data binding for its UI components, and it's already tested to work on major browsers, so it covers a lot of what we need. The framework is server-side, which brings a lot of benefits for every developer working with it, but it also means the coupling between client and server is not quite as loose as we originally envisioned it. Still, there is a lot to like about it:&lt;ul&gt;&lt;li&gt;Rich widget framework&lt;/li&gt;&lt;li&gt;Out-of-the-box theming&lt;/li&gt;&lt;li&gt;Java developer friendly&lt;ul&gt;  &lt;li&gt;Close to Swing&lt;/li&gt;  &lt;li&gt;GWT based (Java -&gt; Javascript)&lt;/li&gt;  &lt;li&gt;Can integrate any GWT-components&lt;/li&gt;  &lt;li&gt;Rare GWT-compiles (compared to plain GWT)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Testing with pure JUnit&lt;/li&gt;&lt;li&gt;Apache License&lt;/li&gt;&lt;li&gt;Well documented&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-line-of-argument.html"&gt;As Philipp discussed some time ago&lt;/a&gt;, Vaadin uses server-side events, which could impact performance, an issue that is particularly critical if you wish to provide a snappy user interface on the web. While we've seen that a server-side framework in itself doesn’t imply worse performance than a pure GWT approach (an alternative we considered), we will need to invest more effort on that end to achieve what we want. On the positive side, running an entirely server-side architecture makes the system more secure, and Vaadin's &lt;a href="http://vaadin.com/book/-/page/uidl.html"&gt;JSON-based UIDL&lt;/a&gt; allows for future extensibility. Vaadin is helping us kill multiple birds with one stone here: we're reducing server load, increasing security, future-proofing our work and creating a better user experience at the same time.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Open Source and Community Support&lt;/h2&gt;Like Magnolia, Vaadin is &lt;a href="http://vaadin.com/license"&gt;an open source project&lt;/a&gt;, and it already has a strong community base, &lt;a href="http://vaadin.com/book"&gt;excellent documentation&lt;/a&gt; and a dedicated team of developers who are improving it on a daily basis. Vaadin UI components are all written in Java and so, if you know Java, you can extend them, share them with the Magnolia community, and build cool stuff on top of them. That is one major reason we like it: with Vaadin, you don’t have to be a JavaScript wizard to build great applications for the web browser. And let’s face it, if you were, you’d be working for &lt;a href="http://www.google.com/intl/en/jobs/search/index.html#q=javascript"&gt;them&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For those of us who like to be home at least occasionally, Java is a fantastic choice to build applications, and Magnolia 5 with Vaadin will make it easier than ever to build extensions for Magnolia and help the Magnolia community grow, because now, you can also go wild on the front-end.&lt;br /&gt;&lt;h2&gt;The best GUI Tool for Our Needs&lt;/h2&gt;We've been trying out Vaadin about &lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-odyssey.html"&gt;eight months&lt;/a&gt; ago and while many challenges have been overcome for the original proof of concept, the real work still lies ahead of us. In our review and testing, we found that Vaadin consistently scored at or near the top in criteria such as productivity, security, theming, collaboration and community backing. With Magnolia 5 GUI development starting in earnest, we’ll soon have much more to say in terms of real-world experience. Ultimately, there is no silver bullet. Just like when you have to choose a Content Management System.&lt;br /&gt;&lt;h2&gt;Learn More about Vaadin and Magnolia 5.0&lt;/h2&gt;If you’d like to learn more about Magnolia 5.0, you can see &lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/2010/09/unconference-2010-magnolia-50-and.html"&gt;presentations about our Magnolia 5.0 roadmap&lt;/a&gt; from the community day at Magnolia Conference 2010. Then, check out &lt;a href="http://wiki.magnolia-cms.com/display/MAGNOLIA5/Home"&gt;the Magnolia 5.0 wiki pages&lt;/a&gt;. Learn more about Vaadin in this &lt;a href="http://www.magnolia-cms.com/community/conference/2010/program/presentation-day/vaadin.html"&gt;presentation by Joonas Lehtinen&lt;/a&gt;, also from Magnolia Conference 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-7360864628862017784?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>gwt</category>
      <category>cms</category>
      <category>VAADIN</category>
      <category>java</category>
      <category>java cms</category>
      <category>javascript</category>
      <category>magnolia_cms</category>
      <category>future</category>
      <category>magnolia</category>
      <category>GUI</category>
      <category>enterprise cms</category>
      <category>usability</category>
      <category>content management system</category>
      <pubDate>Wed, 09 Feb 2011 09:37:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2011/02/raising-bar-in-cms-usability-with.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2011-02-09T09:37:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia getting (even more) open &amp; social</title>
      <link>http://dlipp.blogspot.com/2011/02/magnolia-getting-even-more-open-social.html</link>
      <description>Recently, we were asked to integrate several existing web-apps (mainly GWT-based) into one Magnolia empowered website to build something like an enterprise portal.&lt;br /&gt;&lt;br /&gt;Among others, the integration should&lt;br /&gt;- be lightweight&lt;br /&gt;- preserve the existing web-apps as far as possible&lt;br /&gt;- allow to render different views for each app (minimized, maximized)&lt;br /&gt;- allow communication between the apps&lt;br /&gt;&lt;br /&gt;First decision was whether to go for a client-side integration (iFrames &amp;amp; more) or a server-side one like the Java Portlet specifications (JSR 168 and 286). It was quickly agreed to choose client-side because these are more lightweight by nature and reuse of the existing web-apps (especially the GUIs) should be straightforward.&lt;br /&gt;&lt;br /&gt;So the next question was the classical &lt;i&gt;make or "buy"&lt;/i&gt;. Should a proprietary portal be developed, or is there anything existing that could fulfill our needs? Further analysis revealed that &lt;a href="http://www.opensocial.org/"&gt;OpenSocial&lt;/a&gt; - the emerging standard for client-side, lightweight web-app integration and it's reference implementation &lt;a href="http://shindig.apache.org/"&gt;Apache Shindig&lt;/a&gt;&amp;nbsp;offer almost everything we were looking for - for free! So everybody agreed to opt for this approach.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://linkedin.files.wordpress.com/2009/11/shindig-open-social.png?w=338&amp;amp;h=215" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://linkedin.files.wordpress.com/2009/11/shindig-open-social.png?w=338&amp;amp;h=215" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Some people might ask why a standard originally developed for satisfying the demands of social network sites should be a good match for a lightweight enterprise portal. Well, it's because OpenSocial offers much more and can hence be a good match for various enterprise usages. In addition that's precisely the direction it is envolving to (&lt;a href="http://www.opensocial.org/page/enterprise-opensocial"&gt;see enterpise-opensocial&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;By using OpenSocial/Shindig we get&lt;br /&gt;- a well established standard (would take a lot of time to define yourself)&lt;br /&gt;- gadget-to-gadget and gadget-to-container communication&lt;br /&gt;- an easy way to reuse GWT-based web-apps as they can easily be transformed into OpenSocial gadgets&lt;br /&gt;&lt;div style="margin: 0px;"&gt;- a sophisticated security mechanism (OAuth)&lt;/div&gt;- and more...&lt;br /&gt;&lt;br /&gt;That's what I call a &lt;i&gt;jumpstart&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;We took the default approach to dig into OpenSocial by installing &lt;a href="http://repo1.maven.org/maven2/org/apache/shindig/shindig-server/2.0.2/shindig-server-2.0.2.war"&gt;Shindig v2.0.2&lt;/a&gt; as ROOT.war in Tomcat. I was really impressed when playing around with the samples. On the other side, trying to change the context path or the used port quickly stopped our container from working properly :-(&lt;br /&gt;&lt;br /&gt;Plain Shindig wasn't our main focus so we then started creating an OpenSocial container within Magnolia encapsulated in a regular OpenSocial-Container module referencing Apache Shindig. Actually, this is somehow similar to what quite a few other companies did in the last 1-3 years. Here we quickly encountered similar problems as described above.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 0px;"&gt;As we could not find good documentation on how to configure Shindig the right way and especially on how to create a OpenSocial container based on Shindig we started looking into the sources. There, Shindig revealed a well defined and understandable structure, so we're now realizing what issues are to be solved next and can hence steadily progress. In the meantime I stumbled over a &lt;a href="http://www.slideshare.net/plindner/empowering-the-social-web-with-apache-shindig"&gt;Slideshare-presentation&lt;/a&gt; of one of the major contributors of Apache Shindig. Especially slide 30-40 helped me a lot in understanding what we have to do...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Although still being in a proof of concept, we already have the strong feeling that this will become a &amp;nbsp;very valuable extension to the Magnolia ecosystem.&lt;br /&gt;&lt;br /&gt;So stay tuned - I'll keep you up to date!&lt;br /&gt;&lt;br /&gt;Ps.: blogger itself is &lt;a href="http://code.google.com/apis/blogger/docs/gadgets/gadgets_for_blogger.html"&gt;based on OpenSocial&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7606216893605183312-6659813908302255175?l=dlipp.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 03 Feb 2011 08:59:00 GMT</pubDate>
      <guid>http://dlipp.blogspot.com/2011/02/magnolia-getting-even-more-open-social.html</guid>
      <dc:creator>Daniel Lipp</dc:creator>
      <dc:date>2011-02-03T08:59:00Z</dc:date>
    </item>
    <item>
      <title>Link popularity</title>
      <link>http://finnotype.blogspot.com/2011/02/link-popularity.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at increasing your site's link popularity.&lt;br /&gt;&lt;br /&gt;Search engines place strong emphasis on your site’s link popularity. Links from external sites, especially highly ranked ones, increase your site's rank. The more links targeting your site from external sources the better.&lt;br /&gt;&lt;br /&gt;There are countless ways to build links and a comprehensive discussion on this is beyond the scope of this paper. Some ways that Magnolia can help to build incoming links are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;By developing a blog on an external domain to promote your main site. The Templating Kit allows you to &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/previous-versions/magnolia-4-3/enterprise-multi-site-cms.html"&gt;manage multiple sites in a single instance&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A forthcoming &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+Twigs+Module"&gt;social media module&lt;/a&gt; will facilitate effortless integration with social media networks that have become a must for success on the Web.&lt;/li&gt;&lt;li&gt;Social bookmarking provided in many Magnolia templates.&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html"&gt;Friendly URLs&lt;/a&gt; make creating external links intuitive and easy to create.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8487692715383779947?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Wed, 02 Feb 2011 11:18:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/02/link-popularity.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-02-02T11:18:00Z</dc:date>
    </item>
    <item>
      <title>Keywords in page titles and meta elements</title>
      <link>http://finnotype.blogspot.com/2011/02/keywords-in-page-titles-and-meta.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at inserting keywords in page titles and meta elements.&lt;br /&gt;&lt;br /&gt;Page titles are an extremely important SEO factor. Search engines give titles considerable algorithmic weight and use them as headings on search results. Titles should include keywords and, where appropriate, your company name for branding purposes:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;title&amp;gt;Magnolia - Finance, Insurance &amp;amp; Banking&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Description meta elements on the other hand do not add much to page relevance, but should not be neglected:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;meta name="description" content="Magnolia's largest group of Enterprise Edition customers is from the..."&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Their content often appears below the title in search results:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_973hkdpdddm_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="47" src="https://docs.google.com/File?id=dgdxt33q_973hkdpdddm_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The relevance of keywords stipulated in the keyword tag once had great impact, but this is no longer true. Actual page content is now far more relevant. Still, a keyword tag should be included:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;meta name="keywords" content="Finance, Insurance, Banking"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Magnolia produces the title element from the page title automatically, so this aspect is never overlooked. Inserting keywords and descriptions is done in the page info dialog:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1031fr8jh5xd_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="https://docs.google.com/File?id=dgdxt33q_1031fr8jh5xd_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;These fields can be made mandatory with a simple configuration change in AdminCentral. If an editor fails to provide the description, page abstract is used automatically as a fallback. Authors don't need to fill the field to be SEO compliant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-764723442421270307?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Tue, 01 Feb 2011 09:40:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/02/keywords-in-page-titles-and-meta.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-02-01T09:40:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia and ModeShape</title>
      <link>http://www.java.net/blog/rah003/archive/2011/01/29/magnolia-and-modeshape</link>
      <description>&lt;!--  | 14 --&gt;
&lt;!--break--&gt;
&lt;p&gt;&amp;nbsp;It had been a while since we started to test Magnolia with ModeShape. It took few changes in the code here and there and it would not have happened if not for a big help from the JBoss folk.&lt;/p&gt;
&lt;p&gt;There were multiple obstacles we had to deal with. But as of Magnolia 4.4.2 and ModeShape 2.4.0 the things seem to be finally ready and you can &lt;a href="http://nexus.magnolia-cms.com/content/repositories/magnolia.public.releases/info/magnolia/magnolia-modeshape-webapp/1.0.1/magnolia-modeshape-webapp-1.0.1.war"&gt;download&lt;/a&gt; Magnolia configured to run with ModeShape as backing repository. By default it comes preconfigured with HSQLDB as a backing database, but there are also config files for running repo with MySQL or in-memory. If you feel adventurous, there is also guide on &lt;a href="http://docs.jboss.org/modeshape/latest/manuals/reference/html/infinispan-connector.html"&gt;how to setup modeshape to be backed by the InfiniSpan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With &lt;a href="http://nexus.magnolia-cms.com/content/repositories/magnolia.public.releases/info/magnolia/magnolia-modeshape-webapp/1.0.1/magnolia-modeshape-webapp-1.0.1.war"&gt;this release&lt;/a&gt; you should be able to get working Magnolia installation with Modeshape and use it as a base for your own setup. This release should be considered experimental and not used in production systems. And as an experimental release there are still some rough edged that need to be taken care of:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;the performance using same backend db is lower compared to same setup with JackRabbit. Performance improvements are planned for the ModeShape 2.5 release.&lt;/li&gt;
    &lt;li&gt;Sometimes after restart it is not possible to log in, this might be also accompanied with the stacktrace in the logs about missing anonymous user account. Usually it is enough to restart the instance to fix it.&lt;/li&gt;
    &lt;li&gt;Also when shutting down the webapp, it might happen that ModeShape fails to close the sessions with registered observers. In such a care killing the process should make it stop without any side effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also if you find out anything else not working in this release, please &lt;a href="http://jira.magnolia-cms.com"&gt;report it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks.&lt;/p&gt;</description>
      <category>Java Enterprise</category>
      <category>Open Source</category>
      <category>Blogs</category>
      <category>Web Applications</category>
      <pubDate>Sat, 29 Jan 2011 12:33:38 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2011/01/29/magnolia-and-modeshape</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2011-01-29T12:33:38Z</dc:date>
    </item>
    <item>
      <title>Optimizing images</title>
      <link>http://finnotype.blogspot.com/2011/01/optimizing-images.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at optimizing images.&lt;br /&gt;&lt;br /&gt;Great images enhance your site visually and enhance SEO rankings, provided they are properly optimized. Google and other search engines offer image-specific searches. A high rank in these searches increases your visibility. Search engines cannot read the content of images, and therefore must rely on accompanying text and tags.&lt;br /&gt;&lt;br /&gt;Best practices include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Image &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;alt&lt;/span&gt; attributes with a short description of the image, for example.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Keyword-rich image file names. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yellow-roses.jpg&lt;/span&gt; is far more descriptive and relevant than &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;img003.jpg&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Size and quality optimized for quick loading. Crisp, sharp images look better in thumbnails displayed in search results, and are more likely to be linked to by other webmasters.&lt;/li&gt;&lt;li&gt;Captions that aptly describe the image assist vision-impaired users.&lt;/li&gt;&lt;li&gt;Width and height specified in the element. Many browsers render a page before images are downloaded. When dimensions are provided, other page elements wrap around them correctly, improving the initial user experience.&lt;/li&gt;&lt;/ul&gt;Images can be stored in Magnolia's built-in document management system or uploaded at editing time. When the DMS is used, a two-phase failsafe mechanism ensures that alt tags, appropriate file names, and captions are included:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;At upload time, details such as image source, copyright, subject line and size are captured. The fields provided for this purpose in the DMS are based on the &lt;a href="http://dublincore.org/"&gt;Dublin Core Metadata Standard&lt;/a&gt;. If the original file name contains spaces, Magnolia replaces them with hyphens. In the event that an editor fails to include the information requested in the dialog, the source and subject-line are used as fallback.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1030hk4kxsfz_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="https://docs.google.com/File?id=dgdxt33q_1030hk4kxsfz_b" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When inserting an image to a page, the information read from the DMS can be changed once again. If the fields are configured as mandatory, an editor cannot insert an image without providing suitable alt attribute and caption. This enforces best practice compliance.&lt;/li&gt;&lt;/ol&gt;As a result, the page template renders crawler-accessible HTML code:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_969hc34ssd2_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="https://docs.google.com/File?id=dgdxt33q_969hc34ssd2_b" width="478" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Magnolia Imaging module ensures that high-quality, web-optimized images are used uniformly throughout the site. The module generates multiple variants from a single source image, resulting in considerable time-savings for editors. Sizing and cropping happens automatically, based on CSS rules. Built-in filters that scale and crop images can also be used for effects such as text overlays, which allow crawlers to read image text. It is possible to configure a standard output format and resolution for all images, and control the behavior of images in each area of a template.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-3123267825148904020?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Fri, 28 Jan 2011 08:48:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/optimizing-images.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-28T08:48:00Z</dc:date>
    </item>
    <item>
      <title>Redirecting traffic</title>
      <link>http://finnotype.blogspot.com/2011/01/redirecting-traffic.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at redirecting traffic.&lt;br /&gt;&lt;br /&gt;Redirecting is the practice of sending requests to alternative destinations. Typical reasons to redirect are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pages have moved due to site re-organization but search engines and users still have the old URLs in their indexes and bookmarks. Without redirection traffic going to the moved pages is lost to 404 errors.&lt;/li&gt;&lt;li&gt;Identical URLs serving the same content lead to duplicate content issues as crawlers mistake each URL for a separate site. This is known as the "canonical URL issue" in SEO parlance. It is not uncommon to have &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;example.com&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com&lt;/span&gt;, and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;example.com/index.html&lt;/span&gt; deliver the same content. Sometimes there is a valid need to display the same content on multiple pages.&lt;/li&gt;&lt;/ul&gt;These factors adversely affect SEO but they can be corrected by redirecting the incoming request to an alternative URL. There are several ways to redirect, but the only search engine friendly way is a 301 permanent redirect, which ensures that your hard-earned page rank is transferred to the new location. Contrast this with a temporary 302 redirect which is disastrous for SEO as page rank is not applied towards the new location.&lt;br /&gt;&lt;br /&gt;Redirects are typically cumbersome to implement on a Web server. Responsibility over Web server configuration often falls to another team and is out of reach for authors and editors, even for technical CMS team members. Fortunately, Magnolia allows you to configure redirects directly in AdminCentral.&lt;br /&gt;&lt;br /&gt;A permanent 301 redirect is easy to do with virtual URI mapping. The request can be redirected to the same domain or another one. For example, when visitors request &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;winter2010.com&lt;/span&gt;, you can redirect them to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;example.com/marketing/campaigns/winter2010&lt;/span&gt;, the actual location of the content. Short addresses are easier to market and remember.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_990f464vnd3_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="103" src="https://docs.google.com/File?id=dgdxt33q_990f464vnd3_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In addition, the Templating Kit includes a Redirect template that allows authors to set up a redirect page and define where the incoming request should go. Both internal and external pages can be identified as redirection targets:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1029ft9fzbhj_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="https://docs.google.com/File?id=dgdxt33q_1029ft9fzbhj_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you read more about the &lt;a href="http://www.seomoz.org/blog/canonical-url-tag-the-most-important-advancement-in-seo-practices-since-sitemaps"&gt;canonical URL issue&lt;/a&gt; on SEO blogs you will come across the "canonical URL tag". It is a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;link&lt;/span&gt; element in the page HTML head that tells crawlers that the page is actually a copy of the page given in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;href&lt;/span&gt; attribute, and that page rank should be attributed to that page instead.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;link rel="canonical" href="http://www.example.com" /&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;The canonical URL is almost the same as 301 redirect in terms of SEO with the following exceptions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;301 redirect redirects all traffic (crawlers and visitors). The canonical meta element is just for crawlers.&lt;/li&gt;&lt;li&gt;301 is a stronger signal that multiple pages have a single, canonical source.&lt;/li&gt;&lt;li&gt;301 can redirect traffic to another domain, while still counting existing page rank towards the new location.&lt;/li&gt;&lt;li&gt;Canonical URL is sometimes favored over 301 because you don't need to ask developers to implement it. But as seen above, this is not an issue in Magnolia since editors can do their own virtual URI mapping in AdminCentral.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7393464055394431372?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Wed, 26 Jan 2011 08:17:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/redirecting-traffic.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-26T08:17:00Z</dc:date>
    </item>
    <item>
      <title>Categorizing content</title>
      <link>http://finnotype.blogspot.com/2011/01/categorizing-content.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at categorizing content.&lt;br /&gt;&lt;br /&gt;Usability and SEO go hand-in-hand. Categorizing content allows visitors to find related and similar content with ease. Logical, keyword-rich categories provide intuitive navigation of a large collection of content. Categorization offers a range of opportunities to improve internal linking, visibility, and keyword density. Common uses of categories are tag clouds, and links to overview and landing pages.&lt;br /&gt;&lt;br /&gt;Although content tagging is an effective technique, tag clouds in particular have been abused. Bloggers saw them as a keyword-stuffing opportunity, and search engines have developed techniques to combat this trend.&lt;br /&gt;&lt;br /&gt;Magnolia allows you to create custom categorization taxonomies. You can tag articles with categories to support browsing of related content. This feature can be extended and adapted to suit your needs.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1019cfgjv8hr_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="https://docs.google.com/File?id=dgdxt33q_1019cfgjv8hr_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;By default, you can categorize any page based on the Article template. Categories are displayed as related links in the article header:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1021c2jjk3f4_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="https://docs.google.com/File?id=dgdxt33q_1021c2jjk3f4_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Magnolia provides an editorial Category Cloud which allows editors to assign weights to categories. The more weight a category has, the bigger it shows in the cloud:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1023d2f7bhf6_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="https://docs.google.com/File?id=dgdxt33q_1023d2f7bhf6_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The Category Overview template lists all articles within a category and suggests related categories:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1024fxrffrhq_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="https://docs.google.com/File?id=dgdxt33q_1024fxrffrhq_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8219950030092895245?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Mon, 24 Jan 2011 08:40:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/categorizing-content.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-24T08:40:00Z</dc:date>
    </item>
    <item>
      <title>Preventing broken links</title>
      <link>http://finnotype.blogspot.com/2011/01/preventing-broken-links.html</link>
      <description>This post belongs to a series about &lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt; (SEO) with Magnolia CMS. Today we look at preventing broken links.&lt;br /&gt;&lt;br /&gt;Broken links can lower your site's rankings. Google mentions this specifically in its &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=35769"&gt;SEO guidelines&lt;/a&gt;. Broken links are also a source of irritation for users.&lt;br /&gt;&lt;br /&gt;While you have little control over changes to external links, you can inadvertently break internal links in a variety of ways, such as when changing site structure or deleting content that has incoming links.&lt;br /&gt;&lt;br /&gt;A process should be in place to regularly validate all links on a site.&lt;br /&gt;&lt;br /&gt;Magnolia has safeguards to prevent broken links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A hierarchical content store ensures that there are no orphaned pages that have no incoming links. All pages belong to a hierarchy, and each page has at least one incoming link - from its parent.&lt;/li&gt;&lt;li&gt;Each page has a unique content ID for use as an internal link target. Dialogs provide a user-friendly browser for locating the target. Authors don't need to know the unique ID.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1033c6jv7fcw_b" imageanchor="1"&gt;&lt;img border="0" height="310" src="https://docs.google.com/File?id=dgdxt33q_1033c6jv7fcw_b" style="margin: 1em 0px 1em 0px;" width="400" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The unique ID stays the same even when the target page is moved or renamed. This allows for flexible site reorganization without breaking the links. The same mechanism is used when linking to documents in the document management system (DMS). Internal links to non-existing pages and documents will not be rendered, avoiding broken links.&lt;/li&gt;&lt;li&gt;A reference view lists any incoming and outgoing links. A message on shows dependent content on deletion and deactivation.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_993d8bbnsgq_b" imageanchor="1"&gt;&lt;img border="0" height="266" src="https://docs.google.com/File?id=dgdxt33q_993d8bbnsgq_b" style="margin: 1em 0px 1em 0px;" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A custom 404 "not found" page can be displayed for broken incoming links. You can provide helpful alternatives such as sitemap tree or a search box to find the desired content:&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1018d6vv4xf3_b" imageanchor="1"&gt;&lt;img border="0" height="171" src="https://docs.google.com/File?id=dgdxt33q_1018d6vv4xf3_b" style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Magnolia does not check for outgoing broken links but third party link checker tools for this purpose exist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-355096469880562040?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Fri, 21 Jan 2011 09:41:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/preventing-broken-links.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-21T09:41:00Z</dc:date>
    </item>
    <item>
      <title>HTML links</title>
      <link>http://finnotype.blogspot.com/2011/01/html-links.html</link>
      <description>This post belongs to a series about &lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt; (SEO) with Magnolia CMS. Today we look at inserting HTML links.&lt;br /&gt;&lt;br /&gt;Navigation links should be rendered as HTML to make them easy for crawlers to read. Search engines take the anchor text of a link into consideration when indexing it. Graphics and Flash objects, used by many designers to control look and feel, normally cannot be crawled. Alternative text descriptions should be provided. Use of uncrawlable elements also hinders users who do not have the required browser plug-ins.&lt;br /&gt;&lt;br /&gt;Since the navigation system is a site-wide collection of links to topics, links should be consistent throughout the site. Navigation is also a perfect opportunity to include descriptive keywords.&lt;br /&gt;&lt;br /&gt;The Magnolia Templating Kit offers four navigation structures out-of-the-box: horizontal, vertical, breadcrumbs, and meta-navigation. All of them render links as HTML. Consistent navigation is enforced throughout the site using the same template.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_985jx9nwmhr_b" imageanchor="1"&gt;&lt;img border="0" height="345" src="https://docs.google.com/File?id=dgdxt33q_985jx9nwmhr_b" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-5667647608737475591?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Wed, 19 Jan 2011 15:42:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/html-links.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-19T15:42:00Z</dc:date>
    </item>
    <item>
      <title>Shallow site architecture</title>
      <link>http://finnotype.blogspot.com/2011/01/shallow-site-architecture.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at providing a shallow site architecture.&lt;br /&gt;&lt;br /&gt;Site architecture is critical to SEO. Many sites grow organically and their architecture becomes a maze-like, illogical complex. A clear structure provides both the user and web crawler with a positive navigational experience.&lt;br /&gt;&lt;br /&gt;As a rule of thumb, the flatter the structure, the better. The higher a page appears in the site structure, the more likely it will be ranked high by a crawler. Crawlers seem to determine the depth of a page by the number of directories present in the URL, giving more relevance, for example, to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/books/art&lt;/span&gt; than to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/books/bestsellers/hardcover/art&lt;/span&gt;. A one or two layer limit is recommended, but for larger sites this is not always feasible.&lt;br /&gt;&lt;br /&gt;It is also important to maintain consistency throughout your site. All pages should follow the same format, and once established, you should endeavor to stick to the URL guidelines. Where possible, avoid the use of sub-domains as crawlers may view them as separate from your main domain.&lt;br /&gt;&lt;br /&gt;Magnolia stores content in a hierarchical content repository. Editors see the hierarchy as a tree where each page belongs to a branch and has a parent node:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1028cgzdwjgk_b" imageanchor="1"&gt;&lt;img border="0" height="200" src="https://docs.google.com/File?id=dgdxt33q_1028cgzdwjgk_b" width="482" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Organizing a site as a hierarchy enforces consistent structure. Pages and branches can be rearranged via drag-and-drop.&lt;br /&gt;&lt;br /&gt;Magnolia allows you to manage an unlimited number of sites in AdminCentral. Each site has its own site tree, to keep the hierarchy shallow. You can map unique domain names to each site, creating microsites for campaigns, for example. To a crawler, these appear either as unique sites (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.winter2010.com&lt;/span&gt;) or as parts of your domain (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;winter2010.example.com&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Sometimes it is difficult to avoid deeper structures. For example, you may want to create a campaign inside your main site at &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/example/marketing/campaigns/winter2010&lt;/span&gt;. Adhering to the shallow hierarchy principle is possible even in this case. Magnolia allows you to shorten the URL with URI mapping. Visitors and crawlers access the campaign site at &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com/winter2010&lt;/span&gt; while the content is served from the true location deeper in the hierarchy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-1273659886456265953?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Mon, 17 Jan 2011 13:18:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/shallow-site-architecture.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-17T13:18:00Z</dc:date>
    </item>
    <item>
      <title>Search-engine friendly URLs</title>
      <link>http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at creating search-engine friendly URLs.&lt;br /&gt;&lt;br /&gt;URLs are an important SEO element for search engines as well as users. Search engines are more likely to index static, short, clean URLs. Users appreciate their readability too. While most crawlers can follow dynamically generated URLs, there is evidence that when dynamic parameters are appended to a URL, the crawler only follows them to sites considered to have high importance. Request parameters should be avoided in the URL, as the crawler may view several URLs pointing to the same content as duplicates, lowering page rank.&lt;br /&gt;&lt;br /&gt;Good&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com/books/hardcover&lt;/span&gt;&lt;/blockquote&gt;Bad&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com?p=72&amp;amp;s=0&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Page URLs should:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Include important keywords, as keywords are highlighted in search results. Most SEO experts agree that including them in a URL is important. Keywords also increase the likelihood of a visitor clicking through to your site.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1002ftht3jz3_b" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="96" src="https://docs.google.com/File?id=dgdxt33q_1002ftht3jz3_b" width="400" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Have short, case-insensitive words, separated with hyphens.&lt;/li&gt;&lt;li&gt;Be descriptive of page content. Both from the SEO and usability perspectives, an obvious URL is a good URL. URLs get pasted, shared and written down, so the more obvious the content, the better.&lt;/li&gt;&lt;li&gt;Avoid the use of meaningless numbers and extraneous information.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Magnolia produces clean, human-readable URLs by default. Dynamically generated URLs are converted to crawler-friendly static ones. Request parameters are not appended to URLs.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_983fg5569ds_b" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="https://docs.google.com/File?id=dgdxt33q_983fg5569ds_b" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Some systems append session IDs to a URL. A session is typically needed when a user logs in. A user's shopping cart is an example of content that would be stored in a session. Appending session IDs to URLs is a security issue. A URL that contains an ID cannot be copied without the risk of inadvertently handing the session to another user.&lt;br /&gt;&lt;br /&gt;Good&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com/cart&lt;/span&gt;&lt;/blockquote&gt;Bad&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com/cart?jsessionid=undn2i50l4&lt;/span&gt;&lt;/blockquote&gt;Magnolia is session-less until the user logs in. At that point, a session ID is stored in a cookie instead of appending it to the URL. This avoids the duplicate content issue and makes URLs safe to copy and share.&lt;br /&gt;&lt;br /&gt;When creating internal links, Magnolia uses the title of the target page as anchor text by default. The title typically includes the most relevant keywords about the target page.&lt;br /&gt;&lt;br /&gt;Minimizing length and trailing slashes will make URLs easier to copy and paste, and fully visible in search results. A Magnolia URL is equally valid, regardless of whether you include an .html suffix or slash:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.magnolia-cms.com/clients/references&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.magnolia-cms.com/clients/references.html&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.magnolia-cms.com/clients/references/&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2269160341264916236?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Fri, 14 Jan 2011 08:30:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-14T08:30:00Z</dc:date>
    </item>
    <item>
      <title>Restricting crawler access</title>
      <link>http://finnotype.blogspot.com/2011/01/restricting-crawler-access.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at restricting crawler access.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;While SEO is mostly about about enticing that crawlers to your content, there are some pages you may not want them to access. These include administrative, password protected, and paid access pages.&lt;/div&gt;&lt;br /&gt;A robots.txt file restricts crawler access on a site-wide basis. The file is typically placed in the root directory of your site. All legitimate crawlers it check fro the presence of a robots.txt file, and respect the directives it contains. Even if you do not want to restrict access, it is advisable to include a robots.txt file because the absence of one has been known to produce a 404 error, resulting in none of your pages being crawled. This can also be the case if the file is not constructed correctly. Specific crawlers can also be denied access by entering their names or IP addresses in the file.&lt;br /&gt;&lt;br /&gt;The following example instructs all crawlers to keep out of the private and temp directories and denies access to a specified crawler.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;User-agent: BadBot # replace 'BadBot' with the actual user-agent of the bot&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Disallow: /private/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Disallow: /temp/&lt;/span&gt;&lt;/blockquote&gt;It is also possible to exclude individual pages with a robots meta element in the page HTML header.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;title&amp;gt;...&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Relevant values for the robots meta element are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;NOINDEX prevents the page from being included in the index.&lt;/li&gt;&lt;li&gt;NOFOLLOW prevents the crawler from following any links on the page. Note that this is different from the link-level rel attribute which prevents the crawler from following an individual link. For anti-spam reasons, it is generally better to use the rel attribute with value NOFOLLOW for individual links.&lt;/li&gt;&lt;li&gt;NOARCHIVE instructs the crawler not to keep the page in the engine's public index. With Google, this prevents a cached copy of the page from being available in search results.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_996httw5cgf_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="https://docs.google.com/File?id=dgdxt33q_996httw5cgf_b" width="461" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Preventing crawlers from following undesirable links can help combat automated spam. This method is endorsed by all major engines. Adding a rel="nofollow" attribute to a link allows control on an individual link basis. It can be used to reference external content while not endorsing it, and overcomes the necessity to exclude the crawler from all links on a page.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;a href="http://www.badsite.com" rel="nofollow"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;You can use all the above access restriction methods in Magnolia:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Editing a robots.txt file is vastly simplified in that Magnolia produces clean, human-readable URLs such as http://www.magnolia-cms.com/support-and-services.&lt;/li&gt;&lt;li&gt;At a single-page level, templates set the robots meta element in the HTML header to "all" by default, allowing full crawler access. Options to change this behavior can be offered to editors with minimal configuration directly in AdminCentral. Customization would involve adding a field in the Page Info dialog definition and a minor tweak to the paragraph template.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_981h2bkctcs_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="325" src="https://docs.google.com/File?id=dgdxt33q_981h2bkctcs_b" width="478" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-9146442047456933002?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Wed, 12 Jan 2011 09:38:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/restricting-crawler-access.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-12T09:38:00Z</dc:date>
    </item>
    <item>
      <title>Sitemaps</title>
      <link>http://finnotype.blogspot.com/2011/01/sitemaps.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at creating an XML sitemap.&lt;br /&gt;&lt;br /&gt;While most crawlers will find your site on their own, best practice is to keep them informed by providing an XML sitemap that lists your site's URLs. The document includes additional metadata about each page, such as when it was last updated, how often it changes, and its relative importance to other pages on your site.&lt;br /&gt;&lt;br /&gt;The Sitemaps XML protocol (&lt;a href="http://sitemaps.org/"&gt;sitemaps.org&lt;/a&gt;) is supported by all major search engines. You should include a reference to your sitemap's location in a robots.txt file.&lt;br /&gt;&lt;br /&gt;Magnolia's Google Sitemap module generates your sitemap XML document automatically. It finds all the pages on your site and allows you to easily set priority and change frequency in the user interface. No XML editing is necessary. Default values are provided should you prefer to tweak just the critical pages.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1040wx9tctfx_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="https://docs.google.com/File?id=dgdxt33q_1040wx9tctfx_b" width="459" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The generated XML is compliant with the Sitemaps protocol so that it is ready for submission. If you manage multiple sites in the same Magnolia instance, you have the option to create a separate sitemap for each site.&lt;br /&gt;&lt;br /&gt;Magnolia's Sitemap template is an additional component, unrelated to the XML sitemap. It allows you to include a sitemap page on your site without coding or configuration. It serves as a further navigational element, by offering an overview of content. This feature follows SEO best practices by assuring that each page is accessible by at least one static text link.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_10034bdsctg8_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/File?id=dgdxt33q_10034bdsctg8_b" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2800764093422257212?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Mon, 10 Jan 2011 18:46:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/sitemaps.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-10T18:46:00Z</dc:date>
    </item>
    <item>
      <title>W3C compliant code</title>
      <link>http://finnotype.blogspot.com/2011/01/w3c-compliant-code.html</link>
      <description>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt; (SEO) with Magnolia CMS. Today we look at creating W3C compliant code.&lt;br /&gt;&lt;br /&gt;In order to crawl and index a website, a search engine has to be able to read and interpret its code. A page coded in compliance with standards developed by the World Wide Web Consortium (&lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt;) is simpler for search engines to parse.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.w3.org/TR/"&gt;standards page at W3C&lt;/a&gt; lists more than 100 specifications, ranging from accessibility to XSLT. While this can seem overwhelming, four of the standards are key:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Valid code (HTML, XML, XHTML)&lt;/li&gt;&lt;li&gt;Semantically correct code&lt;/li&gt;&lt;li&gt;CSS&lt;/li&gt;&lt;li&gt;DOM and ECMAScript&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Valid code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The Magnolia Templating Kit is a best-practice framework that produces valid XHTML. The templates can be used to build compelling websites quickly and efficiently without the need for technical expertise.&lt;br /&gt;&lt;br /&gt;The use of XHTML markup is declared with a DOCTYPE element, as you can see in the source code of any page created using a Magnolia template.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img alt="" border="0" height="351" id="BLOGGER_PHOTO_ID_5558279575967019874" src="http://2.bp.blogspot.com/_loiRKg420pQ/TSL500fSs2I/AAAAAAAAGEA/rZOMFQR8_ys/s400/valid-code.png" style="display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;" width="480" /&gt;&lt;/div&gt;&lt;br /&gt;The page validates against the Document Type Definition (DTD) declared in the same element. The structure of a Magnolia page conforms to the document type by having an html element with the XHTML namespace declared, a head element including the title element, and a body element. All elements and attribute names are written in lower case and attribute values are enclosed in quotes. All non-empty elements (e.g. &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;p&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;li&lt;/span&gt;) are properly terminated with a closing tag. All empty elements (e.g. &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;br&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;hr&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;img&lt;/span&gt;) are properly terminated with a trailing slash (&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Semantically correct code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Semantic markup describes the meaning of a page in terms of content, rather than the design.&lt;br /&gt;&lt;br /&gt;In Magnolia templates, heading elements (&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;h1&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;h2&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;h3&lt;/span&gt; etc.) are used in the correct order without skipping levels, lists are used to list items, and tables are only used to present tabular data, not to create page layouts. Try removing CSS, JavaScript and images from your code. Is the code still understandable? Does it make sense to a reader? If yes, then it is semantically good code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CSS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Cascading Style Sheets change the appearance of page elements by assigning styles to them. A style sheet gives a consistent appearance to an entire site. Semantic XHTML and CSS can improve your rankings, as it leads to better crawling, faster website response, and better accessibility and usability, which gives you higher conversions and increases your linking chances.&lt;br /&gt;&lt;br /&gt;The look and feel of a Magnolia-based website is controlled by a single CSS file. Since the XHTML structure is designed to be styled with CSS, appearances can be changed without touching templates. Designers working with CSS don't necessarily need to know anything about Magnolia in order to create a compatible site design. They can start with the static HTML prototype that ships with the system, pick an HTML structure that is a close match to their original design, and then modify it further.&lt;br /&gt;&lt;br /&gt;Magnolia CSS includes some browser-specific properties such as &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-moz-border-radius&lt;/span&gt; that are not part of the official CSS specification. Such properties are not used in areas critical to usability and fall back to standard properties gracefully.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DOM and ECMAScript&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Document Object Model (DOM) provides a scripting language such as ECMAScript, the standardized version of JavaScript, easy access to the structure, content and presentation. DOM is future proof; it will allow any scripting language interact with the document. As long as you site has useful content, JavaScript code will plays virtually no role in SEO optimization. The only thing that matters is where the code resides.&lt;br /&gt;&lt;br /&gt;Magnolia uses jQuery, the most popular JavaScript library. jQuery is a cross-browser library designed to simplify client-side scripting of HTML. It supports DOM element selection, traversal and modification. The entire library is stored in single external JavaScript file rather than embedded in the page HTML. An external file saves bandwidth by reducing page length, yielding faster downloads.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1037dzxkdrg8_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/File?id=dgdxt33q_1037dzxkdrg8_b" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-435584536227992978?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Thu, 06 Jan 2011 09:50:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/w3c-compliant-code.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-06T09:50:00Z</dc:date>
    </item>
    <item>
      <title>Search Engine Optimization</title>
      <link>http://finnotype.blogspot.com/2011/01/search-engine-optimization.html</link>
      <description>&lt;div&gt;This is the first post in a series on search engine optimization (SEO). I will be looking at key SEO factors identified by the &lt;a href="http://seomoz.org/"&gt;SEOmoz.org&lt;/a&gt; consulting group and pitting them against &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt;, a Web content management system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This series should be interesting to online marketers, people employing web communications, and anyone looking to increase their site rank. &lt;a href="http://www.magnolia-cms.com/magnolia-cms/tech-briefs/seo.html"&gt;Download all posts in a single PDF.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What is SEO?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The purpose of SEO is to enhance the volume and quality of traffic directed to a website via search engine results. Search engines aim to provide users with the most relevant results, while webmasters attempt to tweak their sites in order to move it up in the rankings and attract profitable, organic traffic. SEO began in the early 1990s, and quickly degenerated into a tug of war between search engines and webmasters. For each new weighting factor introduced by the engines, crafty webmasters invented means to circumvent it. As a result, many undeserving sites achieved high rank at the expense of great sites providing valuable information. The Web became cluttered with content designed to satisfy the engines as opposed to users.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today, SEO is practiced in a more cooperative environment in which search engines provide advice to webmasters. The engines will probably never fully disclose the algorithms that drive their crawlers, but the fundamentals of SEO are firmly established.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google is the dominant player, with more than 80% of the search market, followed by Bing, Yahoo, AOL and Ask, according to the findings of &lt;a href="http://www.statowl.com/"&gt;statowl.com&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1016fm967gfn_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="https://docs.google.com/File?id=dgdxt33q_1016fm967gfn_b" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Coming up next&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In subsequent posts I will cover the following SEO best practices:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/w3c-compliant-code.html"&gt;W3C compliant code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/sitemaps.html"&gt;Sitemaps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/restricting-crawler-access.html"&gt;Restricting crawler access&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html"&gt;Search-engine friendly URLs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/shallow-site-architecture.html"&gt;Shallow site architecture&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/html-links.html"&gt;HTML links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/preventing-broken-links.html"&gt;Preventing broken links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/categorizing-content.html"&gt;Categorizing content&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/redirecting-traffic.html"&gt;Redirecting traffic&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/optimizing-images.html"&gt;Optimizing images&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/managing-multi-language-and-multi.html"&gt;Managing multi-language and multi-regional sites&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/02/keywords-in-page-titles-and-meta.html"&gt;Keywords in page titles and meta elements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/02/link-popularity.html"&gt;Link popularity&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-5228575978044899793?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>search engine optimization</category>
      <category>seo</category>
      <category>magnolia</category>
      <pubDate>Tue, 04 Jan 2011 15:44:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2011/01/search-engine-optimization.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2011-01-04T15:44:00Z</dc:date>
    </item>
    <item>
      <title>M&amp;M - Magnolia and ModeShape</title>
      <link>http://www.java.net/blog/rah003/archive/2011/01/03/mm-magnolia-and-modeshape</link>
      <description>&lt;!--  | 14 --&gt;
&lt;!--break--&gt;
&lt;p&gt;End of the last year and beginning of this I've spent trying to get Magnolia work with ModeShape. There were issues with both of the apps. On one end, Magnolia had issues with the Modeshape session data refresh strategy, on the other one, Modeshape was sometimes stricter then JCR spec required it to be when it came to queries. All of those were elementary issues that were relatively easy to overcome and I got Magnolia on ModeShape running and working fine.&lt;/p&gt;
&lt;p&gt;The next task was to create a bundled webapp so that anyone who wants to try this combo can just grab it and run. Again, this was easily achieved ... few exclusions in poms necessary, but apart from that smooth ride.&lt;/p&gt;
&lt;p&gt;Last but not least task before the release was to choose persistence configuration. During my testing, I was happy to use in-memory persistence which of course meant I had to re-install on restart, but was also pleasantly fast.&lt;/p&gt;
&lt;p&gt;The default bundle of Magnolia with JackRabbit as a repository comes with Derby to make configuration as simple as posssible (of course for production use you will reconfigure the DB to something else, but to get you quickly started, Derby is small, fast and seamless to get running in the embedded mode).&lt;/p&gt;
&lt;p&gt;Obviously, I choose to do the same for ModeShape, but unfortunately, current version of ModeShape doesn't run on Derby (see MODE-XYZ and HHH-3434 for details). Having failed to use Derby I moved on to the next embedded DB - HSQLDB. There i ran into an unexpected issue. I could get the configuration that would perform well, but would not persist data, or I could get the configuration that would persist, but performance would be awful. It was all about the configuration string. Using &lt;em&gt;jdbc:hsqldb:mem:...&lt;/em&gt; made DB perform well, but would not persist any data. Using &lt;em&gt;jdbc:hsqldb:file:...&lt;/em&gt; or just &lt;em&gt;jdbc:hsqldb:...&lt;/em&gt; would persist the data, but would be terribly slow. :(&lt;/p&gt;
&lt;p&gt;The next I moved on the H2 DB, but run into same issue as with the HSQLDB - either fast or persistent. Somehow I don't think that this feature is specific to the DB implementation, but has to do something with the hibernate configuration. Searching Hibernate docu, however didn't reveal any obvious solution to the problem.&lt;/p&gt;
&lt;p&gt;And just so you know I'm not exaggerating when I claim that the DB is slow - with Derby &amp;amp; JackRabbit, I get Magnolia CE + STK installed in few minutes. In-memory ModeShape config takes about 2 minutes, however HSQLDB or H2 &amp;amp; ModeShape, it takes about 1.5 hour.&lt;/p&gt;
&lt;p&gt;So at the moment I'm stuck in trying to make out some working configuration that doesn't require external DB and yet is still persistent. For those interested, &lt;a href="http://svn.magnolia-cms.com/svn/community/modules/magnolia-modeshape-webapp/trunk/src/main/webapp/WEB-INF/config/repo-conf/modeshape-bundle-hsqldb-author.xml"&gt;here's&lt;/a&gt; the config file used to run against HSQLDB, the one for other databases is nearly identical, barring the different dialects, connection strings and drivers.&lt;/p&gt;
&lt;p&gt;Latest updates:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Using MySQL the installation runs for about 10-15 minutes, so it is much better then other DBs, but still few times slower then same config with JackRabbit.&lt;/li&gt;
    &lt;li&gt;Other people confirmed in IRC (#modeshape @ freenode) performance issues with importing middle to large amounts of data.&lt;/li&gt;
    &lt;li&gt;I somehow suspect that my issues have something to do with the fact that Magnolia keeps multiple sessions open and performs refresh on change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java Enterprise</category>
      <category>Open Source</category>
      <category>Blogs</category>
      <category>Web Applications</category>
      <category>Performance</category>
      <category>Programming</category>
      <pubDate>Mon, 03 Jan 2011 13:27:16 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2011/01/03/mm-magnolia-and-modeshape</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2011-01-03T13:27:16Z</dc:date>
    </item>
    <item>
      <title>Blossom 1.2 released</title>
      <link>http://tobias-mattsson-magnolia.blogspot.com/2010/12/blossom-12-released.html</link>
      <description>Magnolia Blossom 1.2 has just been released. &lt;br /&gt;&lt;br /&gt;This release brings a bunch of new features and fixes two important bugs. A new sample is also available, its a webapp project that requires nothing more than a plain maven installation to start up.&lt;br /&gt;&lt;br /&gt;The biggest new feature is spring integration in content2bean bringing dependency injection and AOP. This can&amp;nbsp; be used directly from your spring xml files to load beans from the repository. When changes are made in the repository the bean will be transparently reloaded. This allows for easy reconfiguration of a running application.&lt;br /&gt;&lt;br /&gt;The new annotation @InitSaveHandler allows you to customize the savehandler to use for saving a dialog.&lt;br /&gt;&lt;br /&gt;There's also a few additions that make writing controllers even easier. For instance you can get the Content object passed directly to your handler method and you can return redirects by returning the uuid prefixed with the name of the repository. As an example; return "website:" + content.getUUID(); would return a redirect to a page.&lt;br /&gt;&lt;br /&gt;The sample is available in our subversion repository. Check out the &lt;a href="http://svn.magnolia-cms.com/svn/community/modules/blossom/samples/trunk/"&gt;sources&lt;/a&gt; and run mvn jetty:run-war to start it up. Consult the &lt;a href="http://documentation.magnolia-cms.com/modules/blossom.html"&gt;reference documentation&lt;/a&gt; for more details.&lt;br /&gt;&lt;br /&gt;Cheers and merry X-mas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154125577090836535-6091291834061966773?l=tobias-mattsson-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 23 Dec 2010 11:56:00 GMT</pubDate>
      <guid>http://tobias-mattsson-magnolia.blogspot.com/2010/12/blossom-12-released.html</guid>
      <dc:creator>Tobias Mattsson</dc:creator>
      <dc:date>2010-12-23T11:56:00Z</dc:date>
    </item>
    <item>
      <title>Add some Balsamiq to your mockups</title>
      <link>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/PZkj_8P8qxY/add-some-balsamiq-to-your-mockups.html</link>
      <description>I've been creating mockups intensively over the last couple of weeks. I've used &lt;a href="http://balsamiq.com/products/mockups"&gt;Balsamiq Mockups&lt;/a&gt; for all of them. This is an &lt;a href="http://www.adobe.com/de/products/air/"&gt;Air&lt;/a&gt;-based tool which provides for rapid and easy creation of mockups for all kinds of applications, web and mobile apps.&lt;br /&gt;
&lt;br /&gt;
It's a great tool. I'm sure you've heard about it already, since this product just hit a sweet spot. Mockups allows to quickly add elements from a pre-existing library of UI components. You can configure their most vital aspects using toolboxes and you fill in content using simple text areas supporting a wiki-like syntax. Components quickly snap to a grid and align themselves with their siblings.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img alt="Sketching with Balsamiq Mockups" height="442" src="http://i1085.photobucket.com/albums/j439/weder-magnolia/Animated%20gifs%20for%20blog/sketching_with_mockups.gif" /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
Sketching with Balsamiq Mockups &lt;/div&gt;
&lt;br /&gt;
The app is a breeze to use. It has hit a sweet spot, &lt;b&gt;because creating
 mockups is about sketching and the quality of sketching lies in quickly
 drawing something with coarse precision, but just enough detail. &lt;/b&gt;When
 you sketch, you don't care about exact measures, but you want to make 
sure that UI elements are aligned properly so that the implicit order and 
grouping you define can be easily grasped. If this is the case, your 
ideas are understood and thus sell better.&lt;br /&gt;
&lt;br /&gt;
In the latest version of Mockups, Balsamiq have added a powerful new feature called symbols. You can now create your own library of custom components and add them to your mockups. You may override aspects such as colors, text and the position of sub elements in every symbol instance. More than that: if you change your symbol, your changes are being propagated to your mockup next time you open it. Mockups even does a good job in preserving your overrides.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object height="292" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ATh-V_RvIB8&amp;hl=en_US&amp;feature=player_embedded&amp;version=3"&gt;

&lt;/param&gt;
&lt;param name="allowFullScreen" value="true"&gt;

&lt;/param&gt;
&lt;param name="allowScriptAccess" value="always"&gt;

&lt;/param&gt;
&lt;embed src="http://www.youtube.com/v/ATh-V_RvIB8&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="480" height="292"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
The Symbols feature demonstrated&lt;/div&gt;
&lt;br /&gt;
Symbols is a great time saver, but also a well designed extension to the existing concepts, which, at the same time, allows you to bundle your components, pre-existing components and actual mockups in a natural way.&lt;br /&gt;
&lt;br /&gt;
I'm using Mockups for actual interface design and sometimes visualise concepts with it as well. Now, I thought at the beginning that I could use a larger list of pre-defined icons. More UI components. More features. But I've found that most of the time, the simplicity and restrictions of the app helped me focus on the actual work at hand. After all, my work is about designing interfaces, not graphics or web design. And if something is really missing, &lt;a href="http://mockupstogo.net/"&gt;a corresponding site with additional mockups&lt;/a&gt; and Photoshop are there to fill the gap.&lt;br /&gt;
&lt;br /&gt;
Oh, and it comes in various plug-in flavors. We use the Confluence plug-in to directly place mockups&amp;nbsp; &lt;a href="http://wiki.magnolia-cms.com/display/UX/Home"&gt;inside our wiki pages&lt;/a&gt;. A click and I edit the mockups from within the page - unfortunately without the Symbols feature for now, but &lt;a href="http://community.balsamiq.com/balsamiq/topics/is_the_new_symbols_functionality_going_to_be_extended_to_the_confluence_plugin"&gt;we can expect this to be retrofitted rather sooner than later&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you don't know Balsamiq Mockups, &lt;a href="http://builds.balsamiq.com/b/mockups-web-demo/"&gt;give it a spin and see for yourself&lt;/a&gt;. Trust me: you'll get used to the sketchy look. And your customers as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7077221096228251291-3165936394395965592?l=ma-ui.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RevisitingTheMagnoliaUi/~4/PZkj_8P8qxY" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 14 Dec 2010 10:49:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/PZkj_8P8qxY/add-some-balsamiq-to-your-mockups.html</guid>
      <dc:creator>noreply@blogger.com (Andreas Weder)</dc:creator>
      <dc:date>2010-12-14T10:49:00Z</dc:date>
    </item>
    <item>
      <title>Groovyness - the agile paragraphs</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/12/groovyness-agile-paragraphs.html</link>
      <description>Back on track. After releasing Magnolia CMS 4.4 my mindset moves back to Magnolia 5.0. While playing around with groovy to merge the changes from the 4.4 branch back to the trunk I came up with a idea which I would like to share and get some feedback from you. &lt;br /&gt;&lt;br /&gt;Using a groovy builder (DSL) we could make the paragraph definition very concise&lt;br /&gt;&lt;ul&gt;&lt;li&gt;include the dialog definition in the paragraph definition&lt;/li&gt;&lt;li&gt;add a closure for rendering the content&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://pastebin.com/94x5EnzJ" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="243" src="http://3.bp.blogspot.com/_HNP6vzxrd9A/TP-xgalF-zI/AAAAAAAAADA/BEspe6mecDo/s320/Screen+shot+2010-12-08+at+17.15.40.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;example: text and image paragraph&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;What we get:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;no configuration (update, ...)&lt;/li&gt;&lt;li&gt;a single concise definition (all in one place)&lt;/li&gt;&lt;li&gt;agile&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Note: this will not replace any other ways of defining paragraphs or dialogs its just a groovy alternative. But since we allow pragmatic registration of dialogs, paragraph, ... in Magnolia 5.0 such an implementation should be rather trivial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-963511871515009833?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 08 Dec 2010 16:37:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/12/groovyness-agile-paragraphs.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-12-08T16:37:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia 4.4 is released !</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/magnolia-4-4-is-released</link>
      <description>Good news: Magnolia CMS 4.4 has just been released! If you&amp;#8217;re here, you&amp;#8217;ve probably already seen the official announcements, be it in the newsletter, the user-list, the forum, Facebook, or even press releases, so you know all about the new &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/magnolia-4-4-is-released"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>magnolia</category>
      <category>release</category>
      <category>Uncategorized</category>
      <pubDate>Wed, 01 Dec 2010 16:24:35 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/magnolia-4-4-is-released</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2010-12-01T16:24:35Z</dc:date>
    </item>
    <item>
      <title>Groovy Secret Santa</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/groovy-secret-santa</link>
      <description>Just had a little bit of fun coding this: import org.apache.commons.mail.SimpleEmail def persons = new File('/Users/gjoseph/Desktop/magnolia-secret-santa-people.txt').readLines('UTF-8').collect { def data = (it =~ /^(\p{L}+) (\p{L}+) $/) return [ f: data[0][1], l: data[0][2], e: data[0][3] ] } def santas = persons.clone() Collections.shuffle(persons) &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/groovy-secret-santa"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>code</category>
      <category>fun</category>
      <category>Uncategorized</category>
      <pubDate>Thu, 11 Nov 2010 11:14:01 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/groovy-secret-santa</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2010-11-11T11:14:01Z</dc:date>
    </item>
    <item>
      <title>Region Editing vs. The Cloud of Bars [Updated]</title>
      <link>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/NImiXmz64Q0/region-editing-vs-cloud-of-bars.html</link>
      <description>&lt;b&gt;[Update&lt;/b&gt;: Region Editing has been renamed to Area Editing - the wiki page describing the concept has moved to&amp;nbsp;&lt;a href="http://wiki.magnolia-cms.com/display/UX/Area+Editing"&gt;here&lt;/a&gt;.]&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_cnZezNEO0NY/TNqzCmVRnSI/AAAAAAAAABU/S17czOxNFEE/s400/PageEditing%2B-%2Boverview.png" width="384" /&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Did that image look familiar to you?&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
This is how a page using an article template typically looks like. For each major area of the page, represented by a paragraph containing other paragraphs (a &lt;i&gt;collection paragraph&lt;/i&gt;), you'll find an edit bar and a new bar. The two are not visually connected. For every sub paragraph of any such area, there's one additional edit bar. You end up with what I call the &lt;b&gt;Cloud of Bars&lt;/b&gt;.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
I've been working on page editing lately and have come up with a concept I call &lt;b&gt;Region Editing&lt;/b&gt;. It's probably nothing new. The idea is to hide most bars when you actually don't need them, while still showing the top-level bars to make the page structure apparent immediately. The same page looks like this when using region editing:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_cnZezNEO0NY/TNq3YRV_SkI/AAAAAAAAABc/7YZAzU6xZak/s1600/2+RegionEditing+-+overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="343" src="http://2.bp.blogspot.com/_cnZezNEO0NY/TNq3YRV_SkI/AAAAAAAAABc/7YZAzU6xZak/s400/2+RegionEditing+-+overview.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
The page structure is clear - even if you imagine there'd be no grey backgrounds -, there's fewer bars and the preview has already improved quite some while you're still editing the page.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
I've written &lt;a href="http://wiki.magnolia-cms.com/display/UX/Area+Editing"&gt;a page on region editing&lt;/a&gt; in the &lt;a href="http://wiki.magnolia-cms.com/display/UX/Home"&gt;User Experience wiki space&lt;/a&gt;. It describes what I'd like Magnolia to do for me (the &lt;i&gt;Story&lt;/i&gt;), then talks more about the actual flows and requirements (the &lt;i&gt;Desired Behaviour&lt;/i&gt;), and, most interesting probably, it sports a number of &lt;i&gt;Mockups&lt;/i&gt; illustrating how I imagine this to look like and which are based on both the story and the behaviour description.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;Please have a look and let me know what you think&lt;/b&gt; - leave a comment or start a discussion in the &lt;a href="http://forum.magnolia-cms.com/forum/threads.html?forumId=e3c5a629-58ab-4c2b-9c0c-1f3dd403a903&amp;amp;page=1"&gt;"Development" forum on the Magnolia Forge&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7077221096228251291-8978579457419861056?l=ma-ui.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RevisitingTheMagnoliaUi/~4/NImiXmz64Q0" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 10 Nov 2010 15:32:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/NImiXmz64Q0/region-editing-vs-cloud-of-bars.html</guid>
      <dc:creator>noreply@blogger.com (Andreas Weder)</dc:creator>
      <dc:date>2010-11-10T15:32:00Z</dc:date>
    </item>
    <item>
      <title>Wait, why don’t you know about our Forum yet ?</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/wait-why-dont-you-know-about-our-forum-yet</link>
      <description>4 months ago, I was whining about the fact that I couldn&amp;#8217;t find a good-enough forum software. In the background, we always wanted to improve our own forum; there were many shortcomings and the task seemed daunting. Well, that was without &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/wait-why-dont-you-know-about-our-forum-yet"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>forum</category>
      <category>magnolia</category>
      <category>Uncategorized</category>
      <pubDate>Wed, 27 Oct 2010 11:35:22 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/wait-why-dont-you-know-about-our-forum-yet</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2010-10-27T11:35:22Z</dc:date>
    </item>
    <item>
      <title>Magnolia 4.4 brings staged deletion of pages</title>
      <link>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/4i2_wLrKrOY/magnolia-44-will-bring-staged-deletion.html</link>
      <description>"I can work on a site first and without worry, then publish the changes when I'm ready, but a page is deleted immediately? With no way to undo this?" I bet you've heard this before, especially when you've taught somehow how to publish content with Magnolia.&lt;br /&gt;
&lt;br /&gt;
The next minor release of the Magnolia CS will sport a first shot at a long-awaited UX improvement, the &lt;b&gt;staged deletion of pages&lt;/b&gt;. Starting from 4.4, a page is no longer immediately deleted and immediately removed from a subscribed instance, but instead is marked as "deleted" first, then removed during activation. So if you've configured a work flow on your systems, &lt;b&gt;a reviewer may actually reject or accept the deletion&lt;/b&gt;, and if you're running without work flows, then you can still undo a deletion by restoring the previous version of the page before activating the change.  &lt;br /&gt;
&lt;br /&gt;
It's not yet optimal, I think, but it's a good start. &lt;b&gt;A trash would be nice to have&lt;/b&gt;, a simpler way to not-delete a page marked as "deleted" and even a way to undo an entire deletion. There are some technical restrictions currently, which won't allow us to go down the full path, but I'm sure this already will make most of you happier.&lt;br /&gt;
&lt;br /&gt;
Expect more improvements on page deletion in M5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7077221096228251291-2224000707912526054?l=ma-ui.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RevisitingTheMagnoliaUi/~4/4i2_wLrKrOY" height="1" width="1"/&gt;</description>
      <category>magnolia5 magnolia4 new-features</category>
      <pubDate>Tue, 26 Oct 2010 16:00:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/4i2_wLrKrOY/magnolia-44-will-bring-staged-deletion.html</guid>
      <dc:creator>noreply@blogger.com (Andreas Weder)</dc:creator>
      <dc:date>2010-10-26T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Welcome to MaUI</title>
      <link>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/kFFqyOIleCQ/welcome-to-maui.html</link>
      <description>&lt;a href="http://1.bp.blogspot.com/_cnZezNEO0NY/TMcJ661ZTjI/AAAAAAAAAAw/KtDnD6swNFE/s1600/UXnow.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_cnZezNEO0NY/TMcJ661ZTjI/AAAAAAAAAAw/KtDnD6swNFE/s1600/UXnow.png" /&gt;&lt;/a&gt;Hi Magnolians, and welcome to my new blog focussing on the design and the development of the next generation user interface of the Magnolia product line.&lt;br /&gt;
&lt;br /&gt;
I've joined Magnolia in October this year and will be responsible for shaping the user experience of our products, in particular the Magnolia CMS. While my dev team mates are busy working on the 4.4 release, I'm mainly focussing on Magnolia 5, or M5, in short. As you know, we plan to overhaul the user interface in the next big release. Since the time frame is ambitious, the first flows and mockups have to be discussed and ready for implementation in a few weeks already.&lt;br /&gt;
&lt;br /&gt;
Magnolia's company culture is often described as open and communicative. I've felt that from day one - from the way ideas are discussed internally, from how concepts are readily published on freely accessible pages on the wiki, to the pleasantly creative atmosphere of our work place. I'm excited to work with a great team on a great product. I've started this blog as an attempt to keep up this spirit of openness and to keep you all posted on what's going on on the UX side of things.&lt;br /&gt;
&lt;br /&gt;
Magnolia (or obinary, how the company was called back then) has made a big impact a few years ago by providing an easy-to-use CMS on top of state-of-the-art JCR and Java technology. It has been an excellent choice for a Java-based content management system from day one - and it still is. I've first got to know the product with release 2.1, if I remember correctly, and have developed several webs with it since then. So I do know all its good sides, but have also seen some of its darker areas. And while the interface was top-notch back in 2004, development on it has stalled somewhat. That's why my position was created and that's why improving the user experience is one of the main goals for Magnolia 5.&lt;br /&gt;
&lt;br /&gt;
I'm looking forward hearing from you, through comments, feedback, emails or even the issue queue. Also make sure, you make your voice heard in the &lt;a href="http://forum.magnolia-cms.com/forum.html"&gt;community forums of the Magnolia Forge&lt;/a&gt;, because now is the time to request new UI features or improvements to existing functionality. I'd like to know what you like about Magnolia and where you see room for improvement.&lt;br /&gt;
&lt;br /&gt;
Thanks for participating - or just following this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7077221096228251291-7939805331081584040?l=ma-ui.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RevisitingTheMagnoliaUi/~4/kFFqyOIleCQ" height="1" width="1"/&gt;</description>
      <category>forge magnolia5 magnolia4</category>
      <pubDate>Tue, 26 Oct 2010 15:52:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/RevisitingTheMagnoliaUi/~3/kFFqyOIleCQ/welcome-to-maui.html</guid>
      <dc:creator>noreply@blogger.com (Andreas Weder)</dc:creator>
      <dc:date>2010-10-26T15:52:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia CMS 4.4 - Milestone 1</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/10/magnolia-cms-44-milestone-1.html</link>
      <description>The team has finished its &lt;a href="http://mind42.com/pub/mindmap?mid=2e89be76-d196-4cbe-b296-b6e3678f866c"&gt;first sprint&lt;/a&gt; of Magnolia 4.4 development. As you might know, we aim to deliver some acutely missed enterprise features with this release.&lt;br /&gt;&lt;br /&gt;If you want to see some of the features in action please have a look at the video done by Federico:&lt;br /&gt;&lt;br /&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" height="286" src="http://blip.tv/play/hpYGgoXzewA%2Em4v" type="application/x-shockwave-flash" width="410"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Features we have implemented in the first sprint:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Diff view (EE)&lt;/b&gt;. We have implemented a visual diff based on the rendered HTML output.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Translation export/import (EE)&lt;/b&gt;. Export and import of translatable text to and from CSV files. The export uses the dialog configuration to determine what should be exported and what not.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Soft locking (EE)&lt;/b&gt;. Show a warning message if other users have a page open in the edit mode.&lt;/li&gt;&lt;li&gt;&lt;b&gt;ModeShape support&lt;/b&gt;. Magnolia can now be backed with the JBoss JCR repository implementation.&lt;/li&gt;&lt;li&gt;&lt;b&gt;FCKEditor update&lt;/b&gt;. We updated to 2.6.6. The most interesting feature in this version is a SpellChecker.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Early paragraph execution&lt;/b&gt;. Paragraphs sometimes want to execute logic before the page rendering starts. This is needed to perform operations like forward and redirect. This is now possible due to a new filter which executes the model in an early phase. This enables us to build multi-step forms (see next sprint).&lt;/li&gt;&lt;/ul&gt;In the &lt;a href="http://mind42.com/pub/mindmap?mid=cc73d805-ea2e-4129-a28b-dc7043c8218a"&gt;second sprint&lt;/a&gt;, which will be the last one, we will mainly work on:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;De-coupling deletion and de-activation&lt;/b&gt;. The immediate de-activation of content on deletion was always problematic. We have worked out a &lt;a href="http://wiki.magnolia-cms.com/display/DEV/Concept+-+Uncoupling+deletion+and+de-activation"&gt;concept&lt;/a&gt; and are about to solve the issue.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Reference view (EE)&lt;/b&gt;. A page which lists content that references a page and content the page references. This can be used to build a warning message on deletion and to show dependent content in the workflow dialog.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Multi-step forms (CE/STK)&lt;/b&gt;. Enhancement of the form builder so that one can build wizard-like multi-step forms. Each step is created as a sub-page. Each step validates and the status is kept in the session. The &lt;a href="http://wiki.magnolia-cms.com/display/DEV/Concept+Multi-step+forms"&gt;concept&lt;/a&gt; is based on the new early paragraph execution.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Finally we want to thank &lt;a href="http://www.aperto.de/"&gt;Aperto&lt;/a&gt; (diff view), &lt;a href="http://www.mediacatalyst.com/"&gt;MediaCatalyst&lt;/a&gt;/Sony Europe (translation export/import) and &lt;a href="http://www.fastforward.ch/"&gt;fastforward&lt;/a&gt; (FCKEditor update) for their substantial contributions.&lt;br /&gt;&lt;br /&gt;You can download the bundles from our Maven/Nexus repository. Be aware of the fact that those releases are definitely not meant to be used in production.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://nexus.magnolia-cms.com/index.html#nexus-search;gav~info.magnolia~magnolia-tomcat-bundle~4.4-m1~~"&gt;CE bundle - 4.4 M1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nexus.magnolia-cms.com/index.html#nexus-search;gav~info.magnolia~magnolia-enterprise-bundle~4.4-m1~~"&gt;EE bundle - 4.4 M1&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-5610262804152721220?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 21 Oct 2010 10:25:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/10/magnolia-cms-44-milestone-1.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-10-21T10:25:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia Tech Briefs</title>
      <link>http://finnotype.blogspot.com/2010/10/magnolia-tech-briefs.html</link>
      <description>We started publishing a new type of document this week: Tech Briefs. These are short technical articles on trends and hot topics we get asked about a lot. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The series starts with two Tech Briefs:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/tech-briefs/performance.html"&gt;&lt;b&gt;Performance and high availability&lt;/b&gt;&lt;/a&gt;. By good performance we understand the capability of a system to serve multiple simultaneous requests in reasonable time under heavy load. High availability refers to the degree of operational continuity in a system. In this brief we examine a Magnolia setup that focuses on performance.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/tech-briefs/cloud.html"&gt;&lt;b&gt;Cloud&lt;/b&gt;&lt;/a&gt;. Cloud computing is a hot trend. In a cloud, infrastructure services are provided like a utility - think water or electricity. CMS administrators benefit from simplicity as they no longer need to know all the details of the underlying technology. Can Magnolia run in a cloud?&lt;/li&gt;&lt;/ul&gt;The briefs are also available as PDF. Print and read on your way home.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-447764543384776435?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <pubDate>Mon, 18 Oct 2010 09:56:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2010/10/magnolia-tech-briefs.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2010-10-18T09:56:00Z</dc:date>
    </item>
    <item>
      <title>Sit, roll and start flow! Commands in Magnolia CMS</title>
      <link>http://finnotype.blogspot.com/2010/10/sit-roll-and-start-flow-commanding.html</link>
      <description>Commands are custom actions executed at pre-defined trigger points. Magnolia CMS uses them to send email, flush cache, take backups, import and export data and many other common duties.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A command can perform virtually any task you can write in Java like &lt;a href="http://www.java.net/blog/rah003/archive/2010/02/21/tweet-magnolia-tweet"&gt;send a Tweet&lt;/a&gt; or &lt;a href="http://www.flickr.com/services/api/upload.api.html"&gt;upload a photo to Flickr&lt;/a&gt;. You are not limited to features inside the CMS itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's how commands work. A command&lt;i&gt; definition&lt;/i&gt; makes the command available to the system. Below is a definition for the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;deactivate&lt;/span&gt; command. Its purpose is to pull a web page down from the public instance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;max-width:480px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TLwN7YXVI9I/AAAAAAAAF_E/Cy0xIB3GoiE/s1600/deactivate.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5529309756307874770" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see, the command definition has just one property, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class&lt;/span&gt;, which identifies the Java class that should be executed when the command is called (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-admininterface/src/main/java/info/magnolia/module/admininterface/commands/DeactivationCommand.java"&gt;DeactivationCommand&lt;/a&gt;&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Its counterpart command &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;activate&lt;/span&gt; is a bit more complicated:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;max-width:480px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TLwODjlADOI/AAAAAAAAF_M/bbuzaatPmkU/s1600/activate.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5529309896756956386" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;activate&lt;/span&gt; is actually a chain of three commands: &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;version&lt;/span&gt; creates a new version of the page.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;startFlow&lt;/span&gt; starts an activation workflow.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;alert&lt;/span&gt; sends a workflow notification to the recipient's Magnolia inbox.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;When you call the parent command the children are executed one-by-one from top down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Command definitions can contain other properties besides &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class&lt;/span&gt;. The &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;startFlow&lt;/span&gt; command has a property &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;workflowName&lt;/span&gt; which identifies the workflow that should be launched. Defining properties rather than hard coding them gives content editors more flexibility. Editors can replace the default approval workflow with a custom one by simply assigning it to the activate command, without having to touch code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To find more examples of command definitions, sign into the &lt;a href="http://demoauthor.magnolia-cms.com/"&gt;demo&lt;/a&gt; (u/p: superuser/superuser) and execute this JCR query in the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;config&lt;/span&gt; repository in &lt;b&gt;AdminCentral &gt; Tools &gt; JCR Queries&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;select * from nt:base where jcr:path like '%/commands/%'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;You will find the corresponding Java business logic in the SVN repository:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-admininterface/src/main/java/info/magnolia/module/admininterface/commands/ActivationCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ActivationCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-admininterface/src/main/java/info/magnolia/module/admininterface/commands/VersionCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;VersionCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-workflow/src/main/java/info/magnolia/module/workflow/commands/ActivationFlowCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ActivationFlowCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/modules/magnolia-module-data/trunk/src/main/java/info/magnolia/module/data/commands/ImportCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ImportCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See also: &lt;a href="http://documentation.magnolia-cms.com/reference/commands.html"&gt;Commands&lt;/a&gt; in official documentation&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-636083364257144046?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <pubDate>Mon, 18 Oct 2010 07:29:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2010/10/sit-roll-and-start-flow-commanding.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2010-10-18T07:29:00Z</dc:date>
    </item>
    <item>
      <title>Vanity URLs with Magnolia CMS</title>
      <link>http://finnotype.blogspot.com/2010/10/vanity-urls-with-magnolia-cms.html</link>
      <description>&lt;div&gt;Vanity URLs are short, easy to remember Web addresses used for campaigns, microsites and landing pages. They are a key Internet marketing tool. In this post I whip out my vanity cane, clip on my &lt;a href="http://en.wikipedia.org/wiki/Grill_(jewelry)"&gt;grill&lt;/a&gt; and show you how to get vain with Magnolia CMS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A vanity URL typically contains a word or phrase that describes a specific target such as a campaign slogan. When a user visits the vanity URL they are redirected to the actual target site. The URL can be constructed using a:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;trailing path: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.shell.com/&lt;b&gt;eco-marathon&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;domain prefix: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;experience&lt;/b&gt;.virgin-atlantic.com&lt;/span&gt;&lt;/li&gt;&lt;li&gt;domain suffix: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.amazon.&lt;b&gt;de&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;entirely unique domain name: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;mynavyfuture.com&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;The URL is often reproduced in print ads, hoping that the short and snappy look makes it easier to remember.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia CMS provides two approaches to creating vanity URLs:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1) Virtual URI mapping&lt;/b&gt; is used to create path-based vanity URLs. In this mechanism a trailing path is mapped to an actual page. In the configuration example below, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.example.com/winter2010&lt;/span&gt; is forwarded to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.example.com/marketing/campaigns/winter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;  &lt;/div&gt;&lt;img style="cursor:pointer; cursor:hand;border:1px solid #cccccc;" src="http://3.bp.blogspot.com/_loiRKg420pQ/TK2CIrYhldI/AAAAAAAAF-I/FPAb1EpKtsk/s1600/virtualurimapping.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5525215403449619922" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can choose from three types of redirecting actions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;forward&lt;/span&gt; hides the true target URL from the visitor. The typed URL remains in the address bar.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;redirect&lt;/span&gt; displays the true target URL in the address bar.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;permanent&lt;/span&gt; 301 redirect is a &lt;a href="http://www.webconfs.com/how-to-redirect-a-webpage.php"&gt;search engine friendly&lt;/a&gt; option.&lt;div&gt;  &lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2) &lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/magnolia-4-3/enterprise-multi-site-cms.html"&gt;Multi-site support&lt;/a&gt;&lt;/b&gt; is used to create domain name based vanity URLs. This feature is available in Enterprise Edition Pro. It allows you to map complete domains, domain prefixes and suffixes to a site.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the example below, a user who enters &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.example.com&lt;/span&gt; is redirected to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.example.com/marketing/campaigns/winter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/TK2DvioTObI/AAAAAAAAF-Y/o3o9NbIadRA/s1600/domain+prefix-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;border:1px solid #cccccc;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TK2DvioTObI/AAAAAAAAF-Y/o3o9NbIadRA/s1600/domain+prefix-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5525217170626394546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unique domain names can be configured in a similar fashion. In the example below, both &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;example.com&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com&lt;/span&gt; point to the same site. However, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com&lt;/span&gt; is mapped to a special campaign section of the site. A user who enters &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com&lt;/span&gt; is redirected to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com/marketing/campaigns/winter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/TK2CfTGpZiI/AAAAAAAAF-Q/LRy1TXQMw4k/s1600/unique+domain.png"&gt;&lt;img style="cursor:pointer; cursor:hand;border:1px solid #cccccc;" src="http://2.bp.blogspot.com/_loiRKg420pQ/TK2CfTGpZiI/AAAAAAAAF-Q/LRy1TXQMw4k/s1600/unique+domain.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5525215792069174818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#990000;"&gt;&lt;b&gt;Note!&lt;/b&gt;&lt;/span&gt; You must register domain names with a domain registrar first. Then make sure that DNS entries for the domain names you map point to the server hosting your Magnolia instance. Domain mapping in Magnolia AdminCentral alone is not enough.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-607797179155505539?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <pubDate>Thu, 07 Oct 2010 07:18:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2010/10/vanity-urls-with-magnolia-cms.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2010-10-07T07:18:00Z</dc:date>
    </item>
    <item>
      <title>Unconference 2010 - Magnolia 5.0 and Roadmap</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/09/unconference-2010-magnolia-50-and.html</link>
      <description>This year's &lt;a href="http://www.magnolia-cms.com/home/community/conference.html"&gt;Magnolia conference&lt;/a&gt; was a very great and inspiring event. At the community day we had few presentations related to Magnolia 5.0 which's slides we like to share with you:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:410px" id="__ss_5268702"&gt;&lt;strong s410tyle="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-50-three-perspectives" title="Magnolia 5.0   - Three perspectives"&gt;Magnolia 5.0   - Three perspectives&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;A brief overview about where we stand and what we plan to achieve if Magnolia 5.0. You are missing the demo, but well ... there is still some valuable info in it.&lt;br /&gt;&lt;object id="__sse5268702" width="410" height="342"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=magnolia5-0-threeeperspectives-100923100135-phpapp01&amp;stripped_title=magnolia-50-three-perspectives&amp;userName=pbaerfuss" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5268702" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=magnolia5-0-threeeperspectives-100923100135-phpapp01&amp;stripped_title=magnolia-50-three-perspectives&amp;userName=pbaerfuss" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="410" height="342"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width:410px" id="__ss_1977414"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-50-genuine" title="Magnolia 5.0 &amp;#39;GenUIne&amp;#39;"&gt;Magnolia 5.0 &amp;#39;GenUIne&amp;#39;&lt;/a&gt;&lt;/strong&gt;This is the presentation as given at the conference 2009 for those interested in the background. &lt;br /&gt;&lt;object id="__sse1977414" width="410" height="342"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=genuine-090910060718-phpapp02&amp;rel=0&amp;stripped_title=magnolia-50-genuine&amp;userName=pbaerfuss" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse1977414" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=genuine-090910060718-phpapp02&amp;rel=0&amp;stripped_title=magnolia-50-genuine&amp;userName=pbaerfuss" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="410" height="342"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width:410px" id="__ss_5237937"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/DanielLipp/mgnl5whyvaadin" title="Magnolia 5.0 - Why Vaadin"&gt;Magnolia 5.0 - Why Vaadin&lt;/a&gt;&lt;/strong&gt;My colleague Daniel Lipp talked about why we have chosen for Vaadin.&lt;br /&gt;&lt;object id="__sse5237937" width="410" height="342"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mgnl5whyvaadin-100920023159-phpapp02&amp;stripped_title=mgnl5whyvaadin&amp;userName=DanielLipp" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5237937" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mgnl5whyvaadin-100920023159-phpapp02&amp;stripped_title=mgnl5whyvaadin&amp;userName=DanielLipp" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="410" height="342"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width:410px" id="__ss_5269366"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/jcr-and-content-api" title="Magnolia 5.0 - JCR 2.0 and Content API"&gt;Magnolia 5.0 - JCR 2.0 and Content API&lt;/a&gt;&lt;/strong&gt;Some insights about what JCR 2.0 means for us and how we can improve the current Content API and gain performance.&lt;br /&gt;&lt;object id="__sse5269366" width="410" height="342"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jcrandcontentapi-100923111417-phpapp02&amp;rel=0&amp;stripped_title=jcr-and-content-api&amp;userName=pbaerfuss" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5269366" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jcrandcontentapi-100923111417-phpapp02&amp;rel=0&amp;stripped_title=jcr-and-content-api&amp;userName=pbaerfuss" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="410" height="342"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width:410px" id="__ss_5268972"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/pbaerfuss/magnolia-roadmap-beyond-50" title="Magnolia Roadmap - Beyond 5.0"&gt;Magnolia Roadmap - Beyond 5.0&lt;/a&gt;&lt;/strong&gt;About Magnolia 4.4 and STK 2.0.&lt;br /&gt;&lt;object id="__sse5268972" width="410" height="342"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=roadmap-100923103154-phpapp01&amp;stripped_title=magnolia-roadmap-beyond-50&amp;userName=pbaerfuss" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5268972" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=roadmap-100923103154-phpapp01&amp;stripped_title=magnolia-roadmap-beyond-50&amp;userName=pbaerfuss" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="410" height="342"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-1762197803015815665?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 24 Sep 2010 08:49:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/09/unconference-2010-magnolia-50-and.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-09-24T08:49:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia at JavaOne</title>
      <link>http://www.java.net/blog/rah003/archive/2010/09/21/magnolia-javaone</link>
      <description>&lt;!--  | 0 --&gt;&lt;p&gt;For anybody interested, we are giving a talk about repositories and content management in general on Thursday 12:30 at Hilton SF, Yosemite B. Session ID is&amp;nbsp;S314239.&lt;/p&gt;
&lt;p&gt;Feel free to drop by and ask also for Magnolia related questions should you have any. We have reserved some time also after the presentation should there be the need.&lt;/p&gt;</description>
      <category>J2EE</category>
      <category>Java Enterprise</category>
      <category>Blogs</category>
      <category>JavaOne</category>
      <category>Web Applications</category>
      <pubDate>Tue, 21 Sep 2010 14:41:51 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2010/09/21/magnolia-javaone</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2010-09-21T14:41:51Z</dc:date>
    </item>
    <item>
      <title>SwingX 1.6.2 released</title>
      <link>http://www.java.net/blog/rah003/archive/2010/09/21/swingx-162-released</link>
      <description>&lt;!--  | 0 --&gt;&lt;p&gt;As it became almost a tradition we have rolled out next SwingX release just before the SwingLabs BOF at JavaOne last night.&lt;/p&gt;
&lt;p&gt;You can get the release from &lt;a href="http://swinglabs.org/downloads.jsp"&gt;our website&lt;/a&gt;, or directly from the &lt;a href="https://swingx.dev.java.net/servlets/ProjectDocumentList?folderID=12399&amp;amp;expandFolder=12399&amp;amp;folderID=6868"&gt;java.net&lt;/a&gt;&amp;nbsp;or also from the &lt;a href="http://repo1.maven.org/maven2/org/swinglabs/swingx-core/1.6.2-2/"&gt;maven central repo&lt;/a&gt;. Please note that the artifactID has changed from swingx to swingx-core due to changes in the structure of the project.&lt;/p&gt;
&lt;p&gt;Thanks a lot to all who contributed to this release with both the bug reports and the fixes.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;</description>
      <category>GUI</category>
      <category>J2SE</category>
      <category>Blogs</category>
      <category>Java Desktop</category>
      <pubDate>Tue, 21 Sep 2010 14:34:18 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2010/09/21/swingx-162-released</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2010-09-21T14:34:18Z</dc:date>
    </item>
    <item>
      <title>Why Vaadin - proof of concept</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-proof-of-concept.html</link>
      <description>Now, three weeks after deciding for Vaadin, we have finished the very first prototype.&lt;br /&gt;&lt;br /&gt;To complete the current sprint we have released the result as the &lt;a href="http://nexus.magnolia-cms.com/service/local/artifact/maven/redirect?r=magnolia.public.releases&amp;amp;g=info.magnolia&amp;amp;a=magnolia-empty-webapp&amp;amp;v=5.0-m1&amp;amp;e=war"&gt;first milestone&lt;/a&gt;. We created a short video to demonstrate the current status so you don’t need to install it yourself. Please be aware that we have not focused on things like user experience design and theming. We just wanted to implement a mini AdminCentral and prove that Vaadin works for us.&lt;br /&gt;&lt;br /&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" height="258" src="http://blip.tv/play/hpYGgfmuOQA%2Em4v" type="application/x-shockwave-flash" width="410"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://blip.tv/file/4066576"&gt;Video&lt;/a&gt;: by Federico Grilli&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: if you use the current milestone release you will have to point your browser to /AdminCentral/ as otherwise the old AdminCentral will be served. We will switch that as soon the new UI is functional enough.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Our experience&lt;/b&gt;&lt;br /&gt;We had a quick start and were able to implement things like the tree view, accordion menu and dialogs very quickly. So Vaadin definitely fits our team and will fit other Java oriented teams well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Extensibility&lt;/b&gt;&lt;br /&gt;It is the ultimate goal to make the new AdminCentral extensible so that everybody can contribute rich modules and paragraphs to the system easily. As expected the server side characteristic of Vaadin helped a lot and allowed us the improve the wiring of the components:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Provider interfaces for the various elements (dialog field, accordion menu actions, ..)&lt;/li&gt;&lt;li&gt;No dependency on the Content API&lt;/li&gt;&lt;li&gt;DSL/Builder APIs can be build easily (not yet done)&lt;/li&gt;&lt;li&gt;All is instantiated/configured by Content2Bean&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;History support&lt;/b&gt;&lt;br /&gt;We still need to improve things but the accordion menu already supports history, and if you switch the tree views (website -&amp;gt; config -&amp;gt; website) you will see that the state of the former selection is kept. We also want the complete status (selected page) to be “bookmarkable”.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Page editing&lt;/b&gt;&lt;br /&gt;It was the goal to prove that we can embed a Vaadin application into an existing web page and that we can inject Vaadin components like the edit bars or dialogs. This worked, and since the client side coding is done in GWT, we did not need to leave the Java world. As always, once you leave the well-treaded path you have to overcome obstacles but we learned a lot, found traction and finally succeeded.&lt;br /&gt;&lt;br /&gt;Now that the basics are done, we will have to optimize the initial loading time. The produced script is definitely not small (170k) and has to be cached. Setting the correct response headers will do its job. We also plan to add the edit bars already in the GWT entry point and only bind them later to the server side components. It might be that we even move bigger parts of the code to the client side, but since this is GWT backed code, it is not different from what we had to do in the "Plain GWT" approach.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Next steps&lt;/b&gt;&lt;br /&gt;Many things were done and decided quickly so we need to finalize and clean up in the next sprint (the last before the &lt;a href="http://www.magnolia-cms.com/home/community/conference.html"&gt;conference&lt;/a&gt;). Therefore, we will improve the naming and streamline the architecture a bit.&lt;br /&gt;&lt;br /&gt;Now that we can build the dialogs by code we want to show that it is feasible to write a nice dialog editor. How fancy is that!&lt;br /&gt;&lt;br /&gt;Looking forward to discuss/argue at our &lt;a href="http://www.magnolia-cms.com/home/community/conference.html"&gt;conference&lt;/a&gt; ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-8856488947863053314?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 31 Aug 2010 15:20:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-proof-of-concept.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-08-31T15:20:00Z</dc:date>
    </item>
    <item>
      <title>Why Vaadin - line of argument</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-line-of-argument.html</link>
      <description>While I told in my &lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-odyssey.html"&gt;former post&lt;/a&gt; how it came that we left the GWT/ExtGWT couple behind us and finally deciding for Vaadin, I want to elaborate why we think Vaadin is the best option.&lt;br /&gt;&lt;br /&gt;First I will explain how Vaadin helps us to solve some of the crucial problems and why it is so effective to build the new AdminCentral with it. Afterward I will response to some valid concerns raised by the Magnolia CMS community.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Benefits&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Server side execution&lt;/span&gt;&lt;br /&gt;Executing UI events on the server is controversial - more on that later - but it has tremendous benefits.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Reflection can be used. &lt;/b&gt;While GWT code can't use reflection server side code can. This is for instance very helpful when we transform dialog definitions into real dialogs.&lt;b&gt; &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Security respected. &lt;/b&gt;At any time we can use ACLs to define what should be possible in the UI.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Less web services. &lt;/b&gt;The UI is build on the server, but rendered on the client. So there is no need to define additional services for receiving dialog and tree descriptors.&lt;br /&gt;We just have to expose the content related stateless REST services. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Agility. &lt;/b&gt;With GWT it is difficult to support agility as you cannot change the final code without compiling it. With Vaadin we can for instance use our powerful Groovy support.  &lt;/li&gt;&lt;li&gt;&lt;b&gt;Magnolia API. &lt;/b&gt;Full Magnolia API can be used and no DTOs are needed.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Testing. &lt;/b&gt;All code can be tested with normal junit test cases. Even the UI code. The server side widget is linked to the client side widget by annotation.&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Efficiency&lt;/span&gt;&lt;br /&gt;We are a small team and efficiency matters, as time-to-market is crucial.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Collaboration. &lt;/b&gt;The two communities and the backing companies are looking forward to support this collaboration and to help each other to make this successful.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Documentation.&lt;/b&gt; Vaadin's &lt;b&gt;documentation&lt;/b&gt; is just great. The &lt;a href="http://vaadin.com/book"&gt;Book of Vaadin&lt;/a&gt;, which is freely available, makes it easy to get started.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Compilation&lt;/b&gt;. No GWT compilation is needed unless a new client side widget has to be written which should be rarely the case once AdminCentral is rolled out. Composite widgets are not requiring any GWT coding.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Theming.  &lt;/b&gt;As many other things theming is a service provided by Vaadin. Once we decided for a design it will be easy to implement a Vaadin version.&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Third party and custom modules&lt;/span&gt;&lt;br /&gt;It will be much easier to adapt the AdminCentral and plugin module specific UI than if we had chosen for GWT. Firstly one hasn't to perform GWT compilations and secondly reflection/injection will be used to plugin into the AdminCentral.&lt;br /&gt;It is the ultimate goal to make the AdminCentral extendable and usable for more generic content management related use-cases.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Performance Concerns&lt;/span&gt;&lt;br /&gt;After the decision was made the community raised concerns about the performance of such a solution. Originally I shared this concerns but want to explain why I think they are not justified or at least don't neutralize the benefits.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Factor in the scenario&lt;/span&gt;&lt;br /&gt;We are going to develop the AdminCentral and not the next generation gmail application. The AdminCentral is the backend and is typically used intranets.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Number of Requests&lt;/span&gt;&lt;br /&gt;The server side event handling will lead to more requests and will add the network latency to most of the user interactions. This sounds dramatic in the beginning but is it really true? Let's have a closer look.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario A) Ask for data (GWT) =  send event (Vaadin)&lt;/b&gt;&lt;br /&gt;Most of the user interactions will result in a request to the server. The only difference is the reason for sending it. While GWT will ask for the data to show or send some data, Vaadin will send the event information.&lt;br /&gt;Examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;creating a page&lt;/li&gt;&lt;li&gt; moving a page in the tree&lt;/li&gt;&lt;li&gt; open dialog&lt;/li&gt;&lt;li&gt; click save button&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Scenario&amp;nbsp;&lt;/b&gt;&lt;/span&gt;B) One request to rule them all&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;Note that any client side UI will also request data from the server. So it is actually not unlikely that a client which uses stateless REST services will send more requests to assemble the data its needing.&lt;br /&gt;&lt;br /&gt;A typical use-case is opening a dialog for paragraph editing which needs additional information to fill a table or read information from a page we are linking to.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;GWT&lt;/i&gt; (2 - 3 requests):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;event -&amp;gt; execute open-dialog action&lt;/li&gt;&lt;li&gt;ask the server for the dialog to open and its descriptor (might be cacheable, but not necessary due to some complex rules like paragaph to dialog mappings, ..) &lt;/li&gt;&lt;li&gt;populate the dialog -&amp;gt; request to fetch the data details&lt;/li&gt;&lt;li&gt;we need some sub-nodes to fill in a table -&amp;gt; request to fetch the data&lt;/li&gt;&lt;/ol&gt;&lt;i&gt;Vaadin&lt;/i&gt; (1 request):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;event -&amp;gt; immediate request to server&lt;/li&gt;&lt;li&gt;event handler builds the dialog (this is fast as no rendering is involved)&lt;/li&gt;&lt;li&gt;some data is read. Reading additional information as meta data and sub-nodes are at hand&lt;/li&gt;&lt;li&gt;bind the data to the dialog&lt;/li&gt;&lt;li&gt;Vaading sends back a JSON representation of the UI changes&lt;/li&gt;&lt;li&gt;client side rendering engine applies the changes&lt;/li&gt;&lt;/ol&gt;Here we actually save requests by Vaadin's roundtrip approach.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario&amp;nbsp;&lt;/b&gt;&lt;b&gt;C) Visibility changes - Vaadin says not No to client side events&lt;/b&gt;&lt;br /&gt;In other use-cases as clicking on a tab or navigating in menus none of the frameworks sends events to the server. In both cases it is client side code which toggles the visibility.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;While we surely expect to have more requests, we don't think that we talk about doubling the numbers of request. In fact I believe that we will not see an increase bigger than about 10-20 %.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Responsiveness of the Demos&lt;/span&gt;&lt;br /&gt;Some stated rightly that the ExtGWT examples are snappier. In my opinion this is due to the fact that the examples just don't use server side services to read the data. But is this a realistic scenario? How often will you perform user interactions without having to read or send data?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Example: Sorting in the table&lt;/i&gt;&lt;br /&gt;Client side sorting is a nice thing to do, but normally you will request the data on demand (paging). How will you sort the data which you have not received yet?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Optimize where you expect the biggest performance gain&lt;/span&gt;&lt;br /&gt;While we can discuss for a very long time about the client performance I think that an end user will judge the overall performance including search, filtering of data, ...&lt;br /&gt;&lt;br /&gt;And here we can do much on the server side. I prefer to invest time on that end than to optimize the very last bit and byte sent over the wire.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Content API&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;return iterators not collections (same as JCR)&lt;/li&gt;&lt;li&gt;don't apply the security checks, delegate that to JCR (possible since JCR 2.0)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;JCR / Content Structure&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mixin for metadata instead of using a sub-nodes&lt;/li&gt;&lt;li&gt;versioning friendly structure: extra node to separate paragraphs and subpages&lt;/li&gt;&lt;li&gt;use more and proper node types: searching, ..&lt;/li&gt;&lt;/ul&gt;I am very sure that the resulting responsiveness will benefit much more from this kind of improvements.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Proof of concept&lt;/span&gt;&lt;br /&gt;As for now we have decided for Vaadin but still we are just entering a proof of concept phase in which we want to proof that Vaadin is really the better choice. Here are the scenarios we explicitly test.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Page Editing&lt;/b&gt;&lt;br /&gt;Here we expect some GWT coding. It is sufficient if the dialogs and toolbox can be Vaadin components.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;show that we can inject behavior into existing HTML: add edit button which opens edit dialog&lt;/li&gt;&lt;li&gt;mouse over: show paragraph information on mouse over&lt;/li&gt;&lt;li&gt;inline editing: proof that inline editing will work&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Tree Grid&lt;/b&gt;&lt;br /&gt;Vaadin is working on the tree grid. If we find some shortcomings they will most likely help to improve it.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;move: drag and drop&lt;/li&gt;&lt;li&gt;context menu: per node type&lt;/li&gt;&lt;li&gt;editable row&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Paragraph&lt;/b&gt;&lt;br /&gt;If we use a technology to build the new AdminCentral we want to ensure that it can be used to write more complex paragraphs as well. As an example I take the page commenting. Each page has a commenting paragraph. The scenario is different as it must work for high traffic websites too.&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;initial form should not create a session (the page should be served by the cache)&lt;/li&gt;&lt;li&gt;coexistence: two independent Vaadin paragraphs&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;We really think Vaadin has great potential and deserves its chance. Still we are new to that technology and will have to verify that our assumptions are right.&lt;br /&gt;&lt;br /&gt;We won't rush into anything&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-2716336478937520496?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 11 Aug 2010 15:09:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-line-of-argument.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-08-11T15:09:00Z</dc:date>
    </item>
    <item>
      <title>Why Vaadin - the Odyssey</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-odyssey.html</link>
      <description>Before I write why we have chosen Vaadin I have to wrap up how it came that we queried our first choice: GWT/ExtGWT.&lt;br /&gt;After the first two Magnolia 5.0 sprints we realized that we have to reconsider our initial decision. We still liked the GWT approach but also faced some challenges which justified such a step.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;All in one compilation. &lt;/b&gt;To optimize the resulting JavaScript code GWT removes unused methods and shortens the names. While this produces minimal and fast code, the outcome is unpredictable and prevents method calls from one module to the another unless they were compiled in the same step. In Magnolia CMS you will install additional modules or update them at run time. This requires a recompilation of the whole AdminCentral unless other tricks are applied.&lt;br /&gt;We planned to re-compile on demand but this conflicts with the exhausting compilation time. Delivering non-optimized JavaScript was also considered. And finally we opted to expose some methods by using gwt-exporter but this would reduce the interoperability of modules. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Compilation  time&lt;/b&gt;. The GWT compilation time increases with the number of inherited modules (ExtGWT is quite heavy) and the produced permutations (browser, languages). If we want to support 5 browsers and 10 languages this multiplies compilation time by 50. At this point the compilation already took 2 minutes on a local computer and 12 minutes on our Hudson server.&lt;br /&gt;This is not so relevant while developing due to the fantastic &lt;i&gt;development mode&lt;/i&gt; but&lt;i&gt; &lt;/i&gt;it contradicts our concept of executing a compilation on Magnolia module installation/update. Possible workarounds are: use a draft compilation first or compile permutation on demand but it seems like a mine field.&lt;/li&gt;&lt;li&gt;&lt;b&gt;MVP pattern. &lt;/b&gt;As recommended we wanted to apply the MVP pattern but ExtGWT has its own concept of handling events and this conflicts with the proposed approach by Google. The goal is that the presenter layer can be tested with normal JUnit test cases without extending GWTTestCase which runs a browser under the hood and is terribly slow. We could wrap the ExtGWT components but this won't lead to a slim architecture design and to billion of interfaces.&lt;/li&gt;&lt;/ul&gt;So we dropped ExtGWT and designed a &lt;i&gt;plain GWT&lt;/i&gt; approach:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use gwt-exporter to expose a plugin mechanism&lt;/li&gt;&lt;li&gt;Use GWT 2.1 which brings a new MVP framework (at the time milestone 2 release)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write our own widgets or write a wrapper for few components&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It is not surprising that we brought the &lt;i&gt;ExtJs/Javascript&lt;/i&gt; approach back on the table at that point. Once this happened the &lt;i&gt;Vaadin&lt;/i&gt; supporters realized their chance and raised their hands. While I never liked the server side part of &lt;i&gt;Vaadin &lt;/i&gt;and excluded it from earlier evaluation phases for that reason, I was desperate enough to reconsider that decision ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We launched a &lt;a href="http://wiki.magnolia-cms.com/display/MAGNOLIA5/Architecture+Survey"&gt;survey&lt;/a&gt; and filled a &lt;a href="http://wiki.magnolia-cms.com/display/MAGNOLIA5/Architecture+-+Decision+Table"&gt;decision table&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wiki.magnolia-cms.com/display/MAGNOLIA5/Architecture+Survey"&gt;&lt;b&gt;Survey&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;None of the approaches won the survey but the Vaadin community got attracted and this lead to same phone calls with Joonas Lehtinen, the CEO of IT Mill - the company behind Vaadin. So we realized that there is potential for collaboration for the two communities and companies.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_HNP6vzxrd9A/TGJXt4q1veI/AAAAAAAAACI/W3dDmFjkrnY/s1600/survey+result.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5504058140417965538" src="http://1.bp.blogspot.com/_HNP6vzxrd9A/TGJXt4q1veI/AAAAAAAAACI/W3dDmFjkrnY/s320/survey+result.png" style="cursor: pointer; display: block; height: 110px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;a href="http://wiki.magnolia-cms.com/display/MAGNOLIA5/Architecture+-+Decision+Table"&gt;Decision Table&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;We dropped the &lt;i&gt;ExtJs/Javascript&lt;/i&gt; for the simple reason that we didn't have enough motivation and knowledge to go for it. Some think we are lame but have you ever tried to make a cool product with an unmotivated team which in addition lacks the skills to fulfill the task? I hope not.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; While Vaadin got the most points (39 points), GWT &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(29 points)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; was not yet dismissed as the decision table was only meant to give us an overview and we have not weighted the criteria.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;So we ended up with having the two valuable options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Plain GWT&lt;/li&gt;&lt;li&gt;Vaadin&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Team Voting&lt;/span&gt;&lt;br /&gt;At the end we had a final voting in the team. The result was 4 against 2 in favor of &lt;span style="font-style: italic;"&gt;Vaadin&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So that was it: Vaadin&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Reasoning&lt;/span&gt;&lt;br /&gt;In the &lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-line-of-argument.html"&gt;next blog post&lt;/a&gt; - following today - I will explain why Vaadin was the prize winner and how it solves some of the bigger problems we faced with the plain GWT approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-7569478114120845702?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>Magnolia 5.0 GWT Vaadin</category>
      <pubDate>Wed, 11 Aug 2010 08:42:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/08/why-vaadin-odyssey.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-08-11T08:42:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia CMS Technical Guide now online</title>
      <link>http://finnotype.blogspot.com/2010/07/magnolia-cms-technical-guide-now-online.html</link>
      <description>I started writing a white paper on Magnolia CMS architecture couple of months ago. I initially targeted analysts and CTOs, thinking 10 pages would be optimal. After reviewing drafts with &lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/"&gt;Philipp&lt;/a&gt; we felt we had to cover more topics and match architectural features to business benefits. The paper turned into a book!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://documentation.magnolia-cms.com/technical-guide.html"&gt;Magnolia CMS Technical Guide&lt;/a&gt; has new architecture diagrams that make complex topics such as the templating mechanism and clustering easier to understand. I also talk about why we chose the JCR Java Content Repository, explain the module system and show internationalization examples.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia partners can download a PDF from the secure &lt;a href="http://www.magnolia-cms.com/home/our-company/partners/partner-login.html"&gt;partner site&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;width: 399px; height: 237px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TFKC2B-kbYI/AAAAAAAAF1Q/XIlum9njjb0/s400/cluster.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5499601959728213378" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-1956985066510375454?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>content management</category>
      <category>magnolia</category>
      <pubDate>Fri, 30 Jul 2010 07:21:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2010/07/magnolia-cms-technical-guide-now-online.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2010-07-30T07:21:00Z</dc:date>
    </item>
    <item>
      <title>Day to be acquired by Adobe - implications?</title>
      <link>http://www.betterfasterbigger.com/2010/07/day-to-be-acquired-by-adobe.html</link>
      <description>&lt;div&gt;Today, Adobe announced to buy &lt;a href="http://www.day.com/"&gt;Day Software&lt;/a&gt;, another WCM manufacturer based in Basel, Switzerland, who uses the same &lt;a href="http://jcp.org/en/jsr/summary?id=170"&gt;technology foundation&lt;/a&gt; as Magnolia. As an initiator of the JCR standard and main contributor to &lt;a href="http://jackrabbit.apache.org/"&gt;Jackrabbit&lt;/a&gt; (the JCR reference implementation), Day is certainly important for the JCR ecosystem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's have a look at the possible implications of the deal for &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adobe bought Omniture not even a year ago for 1.2B$, which was/is the leader in web analytics. With Day's CQ (their CMS), Adobe now has the final part in their portfolio to create, analyze and publish content. (I couldn't find out yet what part "Adobe Publish" plays. Seems to be an SaaS platform, so probably not competing with CQ.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With Adobe, Day can now enter the US market, something that was difficult until now (even if they are no longer Day). &lt;b&gt;Adobe buying Day further validates the JSR-170 standard&lt;/b&gt;, makes Magnolia's technology stack better known and more attractive for potential buyers. &lt;b&gt;Interest in Magnolia will rise along.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adobe might well underplay the repository part and the visibility of JCR might decline in turn. We typically do not sell Magnolia because of JCR (although it does happen), and once we have a prospect, saying that he gets the same repository technology he would buy from Adobe will certainly be soothing any worries. Good for Magnolia again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the technology side, Adobe will either strengthen JCR and keep Day's CTO and JCR brainchild David Nüscheler, or David will leave to pursue his vision regarding repository technology elsewhere. David will get a lot of $ out of the deal, so he will have little reason to work in a direction he doesn't like if the alternative is to spend the rest of his life on his own island watching whales make love in sunset.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In either case, it should not mean too much worry for repository implementations. Even if Day under its new owner stops contributing to Jackrabbit, &lt;a href="http://www.jboss.com/"&gt;JBoss&lt;/a&gt; just launched &lt;a href="http://jboss.org/modeshape"&gt;ModeShape&lt;/a&gt; (tested extensively using the best test app they could get - Magnolia CMS). Good thing &lt;b&gt;Magnolia is independent of the underlying repository implementation&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The business aspects&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adobe is building huge integrated application suites and I bet that &lt;b&gt;CQ will not become cheaper&lt;/b&gt; by being part of that. On the contrary, Adobe aims to provide value through an integrated publishing chain for the customer (creation, analytics, publishing) and will monetize that value.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adobe buying Day brings &lt;b&gt;insecurity to the current Day prospects&lt;/b&gt; (and clients) and will result in &lt;b&gt;more prospects leaning towards Magnolia&lt;/b&gt;. In addition, many people don't want to talk to the likes of Adobe because they rightly fear that Adobe will sell them every product in their portfolio, even if all they ask for is a WCM.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The market will split between those seeking an expensive integrated application suite (Adobe Livecycle) and those seeking a powerful and focussed WCM product that is easy to use, extend and integrate with their business needs (Magnolia CMS).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Summary&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adobe buying Day will be &lt;b&gt;good for Magnolia&lt;/b&gt; and Magnolia customers; it will &lt;b&gt;most likely not be good for Day customers&lt;/b&gt; (the aim of a takeover rarely correlates with the goals of the existing customer base, otherwise the existing customers would have bought something else). Thanks to Adobe buying Day, Magnolia's technology stack will gain more credibility, and &lt;b&gt;with clients like the US Navy (navy.com), EADS.com, Sony Playstation and many other multi-nationals in its portfolio, it is easy to see that Magnolia CMS is a very credible alternative to becoming dependent on a single integrated product suite delivered by a rather closed-sourced billion $ company.&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-758834594543597925?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>jboss</category>
      <category>modeshape</category>
      <category>day software</category>
      <category>magnolia</category>
      <category>jsr-170</category>
      <category>adobe</category>
      <category>omniture</category>
      <category>cq</category>
      <pubDate>Wed, 28 Jul 2010 11:30:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/07/day-to-be-acquired-by-adobe.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-07-28T11:30:00Z</dc:date>
    </item>
    <item>
      <title>Still looking for “the” perfect forum software</title>
      <link>http://dev.magnolia-cms.com/~gjoseph/still-looking-for-the-perfect-forum-software</link>
      <description>Since a couple of weeks, I&amp;#8217;ve been looking, on-and-off, for &amp;#8220;the&amp;#8221; perfect forum software. The Magnolia community needs a (new, better) platform. At the moment, we&amp;#8217;re relying on a wiki (good for draft documents, not so much for discussions), an &amp;#8230; &lt;a href="http://dev.magnolia-cms.com/~gjoseph/still-looking-for-the-perfect-forum-software"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <category>Uncategorized</category>
      <pubDate>Mon, 14 Jun 2010 17:58:31 GMT</pubDate>
      <guid>http://dev.magnolia-cms.com/~gjoseph/still-looking-for-the-perfect-forum-software</guid>
      <dc:creator>Grégory Joseph</dc:creator>
      <dc:date>2010-06-14T17:58:31Z</dc:date>
    </item>
    <item>
      <title>JavaOne updates</title>
      <link>http://www.java.net/blog/rah003/archive/2010/05/11/javaone-updates</link>
      <description>&lt;!--  | 0 --&gt;&lt;p&gt;&amp;nbsp;Two talks at JavaOne this year:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;S313580 - &amp;quot;Swinglabs Dev Update&amp;quot; with &lt;a href="http://java.net/blogs/kschaefe"&gt;Karl&lt;/a&gt; and &lt;a href="http://www.java.net/blogs/alexfromsun/"&gt;Alex&lt;/a&gt; ... I hope guys will do most of the talking :D&lt;/li&gt;
    &lt;li&gt;S314239 - &amp;quot;Building Content Management solutions based on Java Content Repository&amp;quot; together with &lt;a href="http://dev.magnolia-cms.com/~gjoseph/index.html"&gt;Greg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BTW for those wondering what is happening with the&amp;nbsp;&lt;a href="http://swinglabs.org"&gt;swinglabs.org&lt;/a&gt;, server have been recently moved around yet again. It is now in so secure location that I can't even access it anymore and server is also not able to reach outside to java.net to retrieve content from svn and/or existing releases binaries.&lt;/p&gt;
&lt;p&gt;It's all kind of sad, but I hope the access issues can be solved out soon and server will be back. If not I'll try to setup another build server and mirror of the site in some alternative location.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>J2SE</category>
      <category>Java Desktop</category>
      <category>Blogs</category>
      <category>Web Applications</category>
      <category>Java Enterprise</category>
      <category>JavaOne</category>
      <pubDate>Tue, 11 May 2010 08:14:00 GMT</pubDate>
      <guid>http://www.java.net/blog/rah003/archive/2010/05/11/javaone-updates</guid>
      <dc:creator>rah003</dc:creator>
      <dc:date>2010-05-11T08:14:00Z</dc:date>
    </item>
    <item>
      <title>Osborn's Checklist</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/04/osborns-checklist.html</link>
      <description>The second method we applied during our Magnolia 5.0 kick-off session is a pearl of a creativity technic. The method is simple but will produce useful outcome in many scenarios.&lt;br /&gt;&lt;br /&gt;Following the checklist as found at :&lt;br /&gt;- http://www.ifm.eng.cam.ac.uk/ctm/idm/tools/concept/osborn.html&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellpadding="6"&gt;&lt;tbody&gt; &lt;/tbody&gt;&lt;tbody&gt; &lt;/tbody&gt;&lt;tbody&gt; &lt;/tbody&gt;&lt;tbody&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Other uses&lt;/td&gt;   &lt;td valign="top"&gt;New ways to use as is? Other uses if modified?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Adapt&lt;/td&gt;   &lt;td valign="top"&gt;What else is like this? What other idea does&lt;br /&gt;   this suggest? Does past offer parallel? What could I copy? Whom could&lt;br /&gt;   I emulate?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Modify&lt;/td&gt;   &lt;td valign="top"&gt;New twist? Change meaning, colour, motion,&lt;br /&gt;   odour, taste, form, shape? Other changes?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Magnify&lt;/td&gt;   &lt;td valign="top"&gt;What to add? More time? Greater frequency?&lt;br /&gt;   Stronger? Higher? Larger? Longer? Thicker? Heavier? Extra value? Plus&lt;br /&gt;   ingredient? Duplicate? Multiply? Exaggerate?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Minify&lt;/td&gt;   &lt;td valign="top"&gt;What to subtract? Smaller? Condensed?&lt;br /&gt;   Miniature? Lower? Shorter? Narrower? Lighter? Omit? Streamline? Split&lt;br /&gt;   up? Understate? Less frequent?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Substitute&lt;/td&gt;   &lt;td valign="top"&gt;Who else instead? What else instead? Other&lt;br /&gt;   ingredient? Other material? Other process? Other power? Other place?&lt;br /&gt;   Other approach? Other tone of voice? Other time?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Rearrange&lt;/td&gt;   &lt;td valign="top"&gt;Interchange components? Other pattern? Other&lt;br /&gt;   layout? Other sequence? Transpose cause and effect? Change place?&lt;br /&gt;   Change schedule? Earlier? Later?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Reverse&lt;/td&gt;   &lt;td valign="top"&gt;Transpose positive and negative? How about&lt;br /&gt;   opposites? Turn it backward, upside down, inside out? Reverse roles?&lt;br /&gt;   Change shoes? Turn tables? Turn other cheek?&lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td valign="top"&gt;Combine&lt;/td&gt;   &lt;td valign="top"&gt;How about a blend, an alloy, an assortment, an&lt;br /&gt;   ensemble? Combine units?&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;I admit that this technic fits best situations in which you have to overwork an already existing something - like in our case a CMS ;-) It is less useful if you start from scratch. But this is why I find this method so great. Then isn't it more often the case that you rather overwork something than that you start from scratch? And unfortunately one uses creative technics mostly when starting a project but less once you are in the process of maintaining it! But this is the correct moment to use a technic like this, because you will systematically over-think the current solution and will improve it.&lt;br /&gt;&lt;br /&gt;I also like the method, because it can be used with any team and it is easy to convince others to use this method: common lets verify it against this checklist!&lt;br /&gt;&lt;br /&gt;To often we just focus about features to add but forget that we could change things or even remove components to make it better.&lt;br /&gt;&lt;br /&gt;Other uses? Modify? Magnify? Minify? Rearrange? Reverse? Combine?&lt;br /&gt;&lt;br /&gt;So easy is that!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-3919114046655309227?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 27 Apr 2010 12:42:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/04/osborns-checklist.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-04-27T12:42:00Z</dc:date>
    </item>
    <item>
      <title>Using Magnolia's inplace-templating for hot-fixes</title>
      <link>http://www.betterfasterbigger.com/2010/04/using-magnolias-inplace-templating-for.html</link>
      <description>I just realized that we forgot to provide a mechanism for the Google-Site-verification meta-tag when we migrated our corporate homepage to Magnolia 4.2 two months ago. For those not acquainted with the subject-matter: this is a way to prove to some third-party service you actually own the site (as in "have the right to modify content"). There are various ways to do so, but the fastest and least intrusive is to add a meta-tag to your html-head section like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;meta name="google-site-verification"&lt;br /&gt;content="eGPInzT6lx6Kff8Hb2T3SCvUmnjVWeBg76G_y7PXxBk"&gt;&lt;/pre&gt;Now, in previous versions of Magnolia that would mean I have to grab a developer, explain what I need and hope she finds time for my request within her tight schedule. Even if she wouldn't be overly busy, starting up a development environment (IDE), checking out the project sources, adding the needed functionality, testing, and then deploying to a live instance (which more likely than not involves someone from operations, too) would be a matter of least an hour, but more likely a week would go by before you see the change in production – plus it is definitely not worth the effort for such a small and single change.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, after this somewhat long introduction to the issue at hand, Magnolia has a solution that is simple enough for me to use. It is the "inplace-templating" module, which we install by default with Magnolia STK (but STK is independent). It simply allows to edit Freemarker templates directly in the browser, and then enable and activate them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are the simple steps:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. find the main template in the Templating Kit menu:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_W30bQac4R1s/S9bez_K20lI/AAAAAAAADos/apcksmcp4fw/s1600/Screen+shot+2010-04-27+at+2.55.15+PM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 369px; height: 400px;" src="http://2.bp.blogspot.com/_W30bQac4R1s/S9bez_K20lI/AAAAAAAADos/apcksmcp4fw/s400/Screen+shot+2010-04-27+at+2.55.15+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5464800182572339794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;2. Open the editor and add the missing meta-data field&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_W30bQac4R1s/S9bfIboJtcI/AAAAAAAADo0/bL_ULPm8yp4/s1600/Screen+shot+2010-04-27+at+2.55.04+PM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 385px;" src="http://3.bp.blogspot.com/_W30bQac4R1s/S9bfIboJtcI/AAAAAAAADo0/bL_ULPm8yp4/s400/Screen+shot+2010-04-27+at+2.55.04+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5464800533808788930" /&gt;&lt;/a&gt;3. Check enable template (see above screenshot)&lt;div&gt;4. Activate the template&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W30bQac4R1s/S9bfbwgBpMI/AAAAAAAADo8/TM7eLKJf2o0/s1600/Screen+shot+2010-04-27+at+2.57.56+PM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 251px; height: 300px;" src="http://1.bp.blogspot.com/_W30bQac4R1s/S9bfbwgBpMI/AAAAAAAADo8/TM7eLKJf2o0/s400/Screen+shot+2010-04-27+at+2.57.56+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5464800865829364930" /&gt;&lt;/a&gt;&lt;div&gt;Done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can check the site's html source to see the change:&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_W30bQac4R1s/S9bfzGZ2WoI/AAAAAAAADpE/GHY1k44K9Dw/s1600/Screen+shot+2010-04-27+at+2.59.17+PM.png" style="text-decoration: none;"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 74px;" src="http://3.bp.blogspot.com/_W30bQac4R1s/S9bfzGZ2WoI/AAAAAAAADpE/GHY1k44K9Dw/s400/Screen+shot+2010-04-27+at+2.59.17+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5464801266846030466" /&gt;&lt;/a&gt;&lt;div&gt;So not only is it really trivial to adapt your templates on the fly (BTW, you can also map the templates repository to your filesystem via WebDAV and use your favorite text-editor to change the templates); the real benefit is that you can use this mechanism to do urgent hot-fixes without involvement of anybody else.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once things work as expected, simply notify your developer and she will roll the hot-fix into the next regular release. This way, nothing gets lost, and the whole process is highly efficient.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-7620091022255046547?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>hot-fix</category>
      <category>inplace-templating</category>
      <category>magnolia</category>
      <category>google-site-verification</category>
      <category>stk</category>
      <pubDate>Tue, 27 Apr 2010 12:37:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/04/using-magnolias-inplace-templating-for.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-04-27T12:37:00Z</dc:date>
    </item>
    <item>
      <title>Inverse Brainstorming</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/04/inverse-brainstorming.html</link>
      <description>We made our Magnolia 5.0 kick-off session to define what 5.0 is all about. In this session we opened our mindset and used creativity instruments to approach Magnolia 5.0 in a less technical way.&lt;br /&gt;&lt;br /&gt;If found this very inspiring and would like to present the two technics we used.&lt;br /&gt;&lt;br /&gt;Lets start with the i&lt;span&gt;nverse brainstorming&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sometimes it is hard to find good solutions or new meaningful features. This is especially the case if one sticks to the very same topic for quite a while. What to do? We used a destructive variation of the good old brainstorming.&lt;br /&gt;&lt;br /&gt;One simply inverses the question and hence we tried to find ways how to make things worse.&lt;br /&gt;&lt;br /&gt;Some of our favorites?&lt;br /&gt;- direct xml editing, upload with FTP&lt;br /&gt;- support IE6 ;-)&lt;br /&gt;- rewrite the JCR layer&lt;br /&gt;- more editions&lt;br /&gt;- drop CE&lt;br /&gt;- develop it offshore&lt;br /&gt;- write less tests&lt;br /&gt;- don't use any libraries&lt;br /&gt;&lt;br /&gt;Oh yes, that is fun, but in the analysis we saw how meaningful this statements are. It helped us to realize how easy it is to diverge from what we really should do. It is also surprising how some of the items could have been raised  in a common positive barnstorming session but probably for the wrong reason.&lt;br /&gt;&lt;br /&gt;With this method one can definitely trigger real thinking.&lt;br /&gt;&lt;br /&gt;Try it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-6789190141021822253?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>5.0</category>
      <category>magnolia</category>
      <pubDate>Tue, 27 Apr 2010 12:08:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/04/inverse-brainstorming.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-04-27T12:08:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia's Standard Templating Kit reduces project risk</title>
      <link>http://www.betterfasterbigger.com/2010/04/magnolias-standard-templating-kit.html</link>
      <description>&lt;div&gt;Today, basic web content management functionality has become a commodity readily available in a thousand shades. Where does Magnolia CMS provide value not available elsewhere? It depends on your specific use-case. To some people, Magnolia's usability is key. Others need Magnolia's flexibility, the ability to easily integrate and adapt to any business requirements or Magnolia's outstanding scalability.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, no matter what your use-case is, to provide value, your website will typically be custom-built on top of what any "commodity CMS" provides. And it is here that Magnolia CMS provides unique benefits not found anywhere else, as you'll see in a minute.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With version 4, Magnolia CMS has introduced a ton of functionality for the front-end (publishing side) of content management. The "&lt;a href="http://www.magnolia-cms.com/stk"&gt;Standard Templating Kit&lt;/a&gt;" is a powerful framework to create your own custom sites. It provides:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;core logic to make custom templating easier and more powerful than ever before&lt;/li&gt;&lt;li&gt;support for accessibility, SEO, multi-site and multi-language content&lt;/li&gt;&lt;li&gt;about 50 production-ready content types ("paragraphs")&lt;/li&gt;&lt;li&gt;nearly 20 production-ready  page templates based on typical use cases (e.g. home page, section, article, event, news etc.)&lt;/li&gt;&lt;li&gt;a configuration framework that allows you to extend, replace or customize any aspect of STK&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;To showcase its functionality, a complete production-quality website is provided as an example that can be easily adapted to your needs and provides an excellent starting point to define your requirements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As should be clear from the above list, the STK provides significant value in itself. Consider the following graph. It compares the functionality provided by a demo site, a kick-start-kit or Magnolia's Standard Templating Kit (STK):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W30bQac4R1s/S8hdHmXMevI/AAAAAAAADoU/HHYfzsiDrwQ/s1600/STK+functionality.png"&gt;&lt;img src="http://1.bp.blogspot.com/_W30bQac4R1s/S8hdHmXMevI/AAAAAAAADoU/HHYfzsiDrwQ/s400/STK+functionality.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5460716933325028082" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 268px; "&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;We know that the STK provides you with a significant head start, because so much of what you need is already provided. The next graph shows the effort remaining to build your custom website given the previous examples:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_W30bQac4R1s/S8iMANWEZSI/AAAAAAAADoc/LLohnN9iNFM/s1600/STK+effort.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://3.bp.blogspot.com/_W30bQac4R1s/S8iMANWEZSI/AAAAAAAADoc/LLohnN9iNFM/s400/STK+effort.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5460768483396838690"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Compared to other options, the Standard Templating Kit significantly reduces the effort to build your custom website. Less effort generally means you will be faster, but more importantly, it means your &lt;b&gt;project will be much more predictable&lt;/b&gt;. You have less unknowns. And for project managers, "unknowns" means project risk.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_W30bQac4R1s/S8iM94CInrI/AAAAAAAADok/CGAurljid5E/s1600/STK+risk.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_W30bQac4R1s/S8iM94CInrI/AAAAAAAADok/CGAurljid5E/s400/STK+risk.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5460769542827974322"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is why ultimately, Magnolia's Standard Templating Kit greatly reduces the likelihood of a CMS project failure.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To learn more, head over to the &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS website&lt;/a&gt;, &lt;a href="http://www.magnolia-cms.com/stk"&gt;read about STK features&lt;/a&gt;  or &lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/evaluation/screencasts.html"&gt;watch the videos highlighting Magnolia functionality&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-7092714841196652610?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>cms</category>
      <category>risk</category>
      <category>magnolia</category>
      <category>stk</category>
      <category>project-management</category>
      <pubDate>Tue, 20 Apr 2010 12:27:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/04/magnolias-standard-templating-kit.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-04-20T12:27:00Z</dc:date>
    </item>
    <item>
      <title>Rendering Engine and Context</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/03/rendering-engine-and-context.html</link>
      <description>In the fresh baked Magnolia 4.3 we introduced the rendering engine. Why? Well all started when I supervised the creation of some new architecture diagrams. My colleague is a technical writer, a good one, but still I had a hard time to explain the rendering process and potential integration scenarios. &lt;div&gt;At some point, lacking other explanations, I introduced the rendering engine which finally helped us to visualize the system. A backbox, a centralized thing responsible for taking a content and producing HTML results.&lt;br /&gt;&lt;br /&gt;Here are the two diagrams (existing long before any line of code)&lt;br /&gt;&lt;br /&gt;A) Request processing&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HNP6vzxrd9A/S6eqXoQAe2I/AAAAAAAAABY/qumkI0A6F0k/s1600-h/Request+processing.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 208px;" src="http://4.bp.blogspot.com/_HNP6vzxrd9A/S6eqXoQAe2I/AAAAAAAAABY/qumkI0A6F0k/s400/Request+processing.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5451513196873546594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;B) Rendering Engine&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HNP6vzxrd9A/S6euqT_knsI/AAAAAAAAABw/MeRTE7-C67A/s1600-h/Rendering+engine-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://3.bp.blogspot.com/_HNP6vzxrd9A/S6euqT_knsI/AAAAAAAAABw/MeRTE7-C67A/s400/Rendering+engine-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5451517915899928258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More and more I started to use that inexistent thing. Finally when the gate keeper already started to close the gate I wrote two concept pages about how to implement that thing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wiki.magnolia-cms.com/display/DEV/Concept+-+Rendering+Engine"&gt;Rendering Rngine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.magnolia-cms.com/display/DEV/Concept+-+Rendering+Context"&gt;Rendering Context&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;For Magnolia 4.3 we just introduced the rendering engine but not yet the rendering context which, once introduce too, will make all that really powerful. The context will provide things like: writer, outputstream, link transformer, parameters ... and will make the rendering completely independent of the request processing.&lt;/div&gt;&lt;br /&gt;Funny is, that when I went back to my coworker and informed him that I implemented the rendering engine, he was only surprised that it didn't exist before ;-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-3382276812352298949?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 22 Mar 2010 17:22:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/03/rendering-engine-and-context.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-03-22T17:22:00Z</dc:date>
    </item>
    <item>
      <title>Growing the Community with the Magnolia Store</title>
      <link>http://www.betterfasterbigger.com/2010/03/growing-community-with-magnolia-store.html</link>
      <description>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W30bQac4R1s/S5UNtgQ70OI/AAAAAAAADoM/-6-uQlPbIHA/s1600-h/all-module-layout.jpg"&gt;&lt;/a&gt;&lt;div&gt;One of our goals for 2010 is to grow the Magnolia community significantly. We aim to do this on various levels, e.g.: &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;by providing better infrastructure&lt;/li&gt;&lt;li&gt;adding new communication channels, &lt;/li&gt;&lt;li&gt;improve the product&lt;/li&gt;&lt;li&gt;…and making what has been achieved more visible&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The following new development definitely relates to last point in the list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;With 4.3 Magnolia CMS will sport yet another new feature – the Magnolia Store. The store will allow Magnolia users to check which modules are installed locally, download newer versions of these, download additional modules and view what is happening in the larger Magnolia community. Below is a first wireframe.&lt;div&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/_W30bQac4R1s/S5UKk81IcXI/AAAAAAAADoE/wnShAoHKKME/s400/modulestore.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5446270954295030130" /&gt;&lt;br /&gt;One of the reasons we want to provide this feature directly in AdminCentral is that today, the information which modules are available is maintained in too many places – at Magnolia itself, we list modules on the wiki as well as in the official documentation site. It would also be nice to have that info on the corporate site. Then some of the info is stored directly inside the module descriptors. Finally, contributors typically maintain that info on their own websites as well.&lt;br /&gt;&lt;br /&gt;The results is a duplication of effort, maintenance hell, and most importantly it is difficult for users to find out about available modules. Today, the store looks as follows:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/_W30bQac4R1s/S5UNtgQ70OI/AAAAAAAADoM/-6-uQlPbIHA/s400/all-module-layout.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5446274399780720866" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 225px; " /&gt;&lt;/span&gt;The Magnolia Store has been developed together with OpenMind (as you can see, the community is already hard at work) and will initially be hosted and maintained by Magnolia. It is implemented using Magnolia CMS. One of the ideas is that anybody who submits modules for the store will be able to get an RSS feed that allows him to to embed only his contributions on his own site.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Being server-side, we will be able to extend and modify the store's contents even after it is released. It will also allow us to track which modules are most interesting and add features like rating or commenting. Most of all, it should make the available modules more visible and motivate community members to contribute existing Magnolia modules.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Besides showing available modules, the store will also act as yet another communication channel, this time directly with the community. We will use it to announce available training sessions, new blog posts or anything else that the community might be interested in.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eventually we will also directly support commercial usage of the store; for instance to sell modules or training. Right now, our main goal is to show you which modules are already available and provide a platform for our community to show their custom Magnolia extensions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We are looking forward to see you join in and add your contributions!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-1409971170033332397?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <pubDate>Mon, 08 Mar 2010 14:27:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/03/growing-community-with-magnolia-store.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-03-08T14:27:00Z</dc:date>
    </item>
    <item>
      <title>From HTML to XML and beyond!</title>
      <link>http://tmiyar.blogspot.com/2010/02/from-html-to-xml-and-beyond.html</link>
      <description>What happens if you need to deliver same content but in different format? Sure you don't want to duplicate content. Well Magnolia CMS provides a feature that with little work lets you deliver same content in any format you need, it could be xml, or even html but optimized for newsletters.&lt;br /&gt;&lt;br /&gt;How to do this? You need to select a template definition and add sub templates like in the image below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vxmdCE2p3O0/S4aASkZ7KLI/AAAAAAAAALk/Yy-5_4vksN0/s1600-h/Picture+15.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 118px;" src="http://2.bp.blogspot.com/_vxmdCE2p3O0/S4aASkZ7KLI/AAAAAAAAALk/Yy-5_4vksN0/s320/Picture+15.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5442178256222234802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This sample is using Magnolia CMS version 3.6 (feature also available for 4.x) with just one sub template defined that will render as xml when I request the page as url.xml and rendered as html when requested as url.html.&lt;br /&gt;&lt;br /&gt;Because at the moment, sub templates do not work for paragraphs, in the template file that generates the xml content we will have to iterate through the paragraphs.&lt;br /&gt;&lt;br /&gt;In my sample I used jsp, so I iterated main collection within a scriplet, by first getting the active page and then its children:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Content actPage = Resource.getActivePage(request);&lt;br /&gt;if(actPage.hasContent("mainColumnParagraphs")) {&lt;br /&gt; //some code&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When using freemarker there is no need to use java:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[#list content.main?children as para]&lt;br /&gt; [#assign paragraphContent=para]&lt;br /&gt; [#if para.metaData.template='mgnlTextBox']&lt;br /&gt;   [#include "textBox.ftl" ]&lt;br /&gt; [/#if]&lt;br /&gt;[/#list]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of my use cases was to generate a newsletter template for the web and a simpler one that would be supported by the mail clients.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-7264888008963081793?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>subtemplate</category>
      <category>xml</category>
      <category>magnolia</category>
      <category>magnolia_cms</category>
      <category>templates</category>
      <pubDate>Thu, 25 Feb 2010 13:38:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2010/02/from-html-to-xml-and-beyond.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2010-02-25T13:38:00Z</dc:date>
    </item>
    <item>
      <title>RFP answer sharing</title>
      <link>http://finnotype.blogspot.com/2010/02/rfp-answer-sharing.html</link>
      <description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/S5UPTWswj2I/AAAAAAAAFlw/1MtU7wrmvmg/s1600-h/RFPExample2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 223px; height: 207px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/S5UPTWswj2I/AAAAAAAAFlw/1MtU7wrmvmg/s320/RFPExample2.png" alt="" id="BLOGGER_PHOTO_ID_5446276149559725922" border="0" /&gt;&lt;/a&gt;Responding to &lt;span style="font-style: italic;"&gt;requests for proposal&lt;/span&gt; is hard work. An RFP is like a questionnaire. A prospective client looks for a solution to a particular problem and sends a request to several companies to find the best match.&lt;br /&gt;&lt;br /&gt;The RFP document contains product requirements, problem scenarios, questions about your company's ability to deliver a system in time and on budget, and inquiries about support options.&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia&lt;/a&gt; we respond to quite a few RFPs. Writing comprehensive answers takes time and in-depth knowledge. The answers are out there but finding them at a moment's notice...well that's the hard part. Our partners who implement Magnolia Web content management around the globe face the same challenge. So we decided to give them a hand.&lt;br /&gt;&lt;br /&gt;I collected answers from past RFPs into a single knowledge base. I edited them for reuse and shared them with our partners on Google Docs. Partners can access the knowledge base over the web and copy text directly into their responses. Full-text Google search helps find content quickly. I further grouped answers in a particular subject area such as &lt;span&gt;"w&lt;/span&gt;&lt;span&gt;orkflow&lt;/span&gt;" together. This speeds the writing effort further since questions are bundled together the same way.&lt;br /&gt;&lt;br /&gt;To keep the content fresh and reliable, I go through it after each Magnolia release, write about new features, and weed out any phased-out content.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.magnolia-cms.com/home/partners/program.html"&gt;Want to become a Magnolia partner&lt;/a&gt; and grow with us?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2495109017586565650?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>google docs</category>
      <category>magnolia</category>
      <pubDate>Thu, 25 Feb 2010 11:59:00 GMT</pubDate>
      <guid>http://finnotype.blogspot.com/2010/02/rfp-answer-sharing.html</guid>
      <dc:creator>Antti Hietala</dc:creator>
      <dc:date>2010-02-25T11:59:00Z</dc:date>
    </item>
    <item>
      <title>Auto generate paragraphs</title>
      <link>http://tmiyar.blogspot.com/2010/02/auto-generate-paragraphs.html</link>
      <description>By default Magnolia CMS STK comes with a mechanism to auto generate paragraphs in main and extras areas. This is very useful when you have the need of a paragraph to be present in all pages using some template. That paragraph could be modifiable or not and could be initialized with some default parameters or not.&lt;br /&gt;&lt;br /&gt;If we have a look at the class SingletonParagraphTemplateModel, we can see that in the execute method has two method calls, one to generate a single paragraph in the main area (see stkSiteMap template) and the other one to generate any number of paragraphs in the extras area.&lt;br /&gt;&lt;br /&gt;See below the template configuration for the main area auto generated sitemap paragraph&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vxmdCE2p3O0/S4ZKvWQ2UzI/AAAAAAAAALM/zk84qQ1Hgpg/s1600-h/Picture+13.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 131px;" src="http://4.bp.blogspot.com/_vxmdCE2p3O0/S4ZKvWQ2UzI/AAAAAAAAALM/zk84qQ1Hgpg/s320/Picture+13.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5442119377014379314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nice thing is that you can extend this class or implement your own to generate any paragraph in any area of the page.&lt;br /&gt;&lt;br /&gt;Below is the template configuration for the extras area auto generated paragraphs.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vxmdCE2p3O0/S4ZMcJnb7wI/AAAAAAAAALc/gWyq97Ee4iY/s1600-h/Picture+14.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 131px;" src="http://4.bp.blogspot.com/_vxmdCE2p3O0/S4ZMcJnb7wI/AAAAAAAAALc/gWyq97Ee4iY/s320/Picture+14.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5442121246225198850" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2158598821071141596-8802375208709635327?l=tmiyar.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>auto generate</category>
      <category>magnolia_cms</category>
      <category>magnolia</category>
      <category>stk</category>
      <category>singleton</category>
      <pubDate>Thu, 25 Feb 2010 09:02:00 GMT</pubDate>
      <guid>http://tmiyar.blogspot.com/2010/02/auto-generate-paragraphs.html</guid>
      <dc:creator>Teresa Miyar</dc:creator>
      <dc:date>2010-02-25T09:02:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia Groovy module 1.0-m2 video</title>
      <link>http://igorstravinskij.blogspot.com/2010/02/magnolia-groovy-module-10-m2-video.html</link>
      <description>The Magnolia Groovy module 1.0 Milestone 2 has just been &lt;a href="http://sourceforge.net/projects/magnolia/files/"&gt;released&lt;/a&gt;. Briefly, what it does is adding first-class &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; support into &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia's CMS&lt;/a&gt; at a deeper, system-wide level, allowing for managing Groovy classes and scripts directly within Magnolia's AdminCentral. The really innovative feature is the ability to plug in at runtime (almost) whatever piece of the CMS with a Groovy counterpart - &lt;b&gt;no need for deployments and stopping/starting the servlet container&lt;/b&gt;. Of course, some common sense is highly recommended here and, though in theory possible, I would not endorse to rewrite and replace everything with Groovy, especially classes performing time-critical tasks. At least, not until Groovy will have become as fast as, if not faster than, Java ;-), which the guys working at &lt;a href="http://groovy.dzone.com/articles/how-come-groovy-overperform"&gt;Groovy++&lt;/a&gt; seem trying to achieve. The &lt;a href="http://blip.tv/file/3256250"&gt;video here&lt;/a&gt; will show this and other new features, such as easy hierarchy JCR navigation through nodes and attributes simply by using &lt;i&gt;. (dot)&lt;/i&gt; notation (something similar to what Groovy does with XML with its XmlSlurper).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9064250334544215589-7986595792166807919?l=igorstravinskij.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>groovy</category>
      <category>magnolia</category>
      <pubDate>Tue, 23 Feb 2010 09:47:00 GMT</pubDate>
      <guid>http://igorstravinskij.blogspot.com/2010/02/magnolia-groovy-module-10-m2-video.html</guid>
      <dc:creator>Federico Grilli</dc:creator>
      <dc:date>2010-02-23T09:47:00Z</dc:date>
    </item>
    <item>
      <title>I18n authoring support on stage (Magnolia 4.3)</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/02/i18n-authoring-support-on-stage.html</link>
      <description>Done! The i18n support for authoring is implemented and part of the Magnolia 4.3 milestone 2 release . Again I have created a video to quickly demonstrate how stuff works.&lt;div&gt;&lt;ul&gt;&lt;li&gt;enabling i18n authoring&lt;/li&gt;&lt;li&gt;adapting a dialog&lt;/li&gt;&lt;li&gt;i18n &amp;amp; multi site support&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="265"&gt;&lt;param name="movie" value="http://www.youtube.com/v/fYoiffRmlZg&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/fYoiffRmlZg&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I decided to add another interface configured at /server/i18n/authoring which is responsible to render the language chooser and which will adapt dialogs based on the i18n configuration. Hence it is possible to have your own implementations which could add extra tabs or duplicate the fields. If you are interested:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;interface: &lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/tags/magnolia-4.3-m2/magnolia-gui/src/main/java/info/magnolia/cms/gui/i18n/I18nAuthoringSupport.java?view=markup"&gt;I18nAuthoringSupport&lt;/a&gt;&lt;/li&gt;&lt;li&gt;default implementation: &lt;span class="Apple-style-span"   style="font-family:Monaco, serif;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:11px;"&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia, serif;font-size:16px;"&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/tags/magnolia-4.3-m2/magnolia-gui/src/main/java/info/magnolia/cms/gui/i18n/DefautlI18nAuthoringSupport.java?revision=32009&amp;amp;view=markup"&gt;DefautlI18nAuthoringSupport&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-481857387079139?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>4.3</category>
      <category>i18n</category>
      <category>magnolia</category>
      <pubDate>Thu, 18 Feb 2010 10:21:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/02/i18n-authoring-support-on-stage.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-02-18T10:21:00Z</dc:date>
    </item>
    <item>
      <title>Oracle, Sun &amp; Java</title>
      <link>http://www.betterfasterbigger.com/2010/02/oracle-sun-java.html</link>
      <description>&lt;div&gt;Magnolia CMS is running on the Java platform. &lt;a href="http://en.wikipedia.org/wiki/Java_(software_platform)"&gt;According to Wikipedia&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;Java refers to a number of proprietary computer software products and specifications from Sun Microsystems, a subsidiary of Oracle Corporation, that together provide a system for developing application software and deploying it in a cross-platform environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones on the low end, to enterprise servers and supercomputers on the high end. Java is used in mobile phones, Web servers and enterprise applications…&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Now that the deal between Oracle and Sun is through, it is interesting to see what this deal could mean for Java, and in turn for Magnolia CMS. As stated above, Java is used anywhere, but most interesting for us it is used on enterprise servers and for enterprise applications. Now, if anybody on the planet can claim to be "enterprise", it's got to be Oracle. It is a safe bet that Oracle will be very interested to keep Java healthy, for various reasons:&lt;div&gt;&lt;ol&gt;&lt;li&gt;many of Oracles enterprise applications are written in Java&lt;/li&gt;&lt;li&gt;many of Oracles customers run server software written in Java&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;In the last couple of years there was a lot of discussion about Open Source Java. Whatever the outcome there, as much as Oracle means enterprise, Oracle means proprietary. It is unlikely that Oracle turns into a major driver of Open-Source Java or Open-Source in general. That might be regrettable, but doesn't mean anything worse than Java has been under SUN, which until recently was not interested in Open-Source Java either.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unlike SUN, Oracle makes heaps of money and can afford to drive Java further to increase its value chain and fend off the likes of Microsoft, who with their own proprietary .net platform are the only real alternative for the enterprise business Oracle is interested in.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What it means for anything Java that is non-enterprise is anyones guess, but that is of little concern for us, as Magnolia is running on a server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So (enterprise) Java will be stronger with Oracle, and I for one am happy that a solid and strong company like Oracle is brewing our Java now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-8085532666770349821?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>java</category>
      <category>sun</category>
      <category>magnolia</category>
      <category>open-source</category>
      <category>oracle</category>
      <pubDate>Tue, 16 Feb 2010 11:36:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/02/oracle-sun-java.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-02-16T11:36:00Z</dc:date>
    </item>
    <item>
      <title>i18n support in dialogs (Magnolia 4.3)</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/01/i18n-support-in-dialogs-magnolia-43.html</link>
      <description>Multi language support by maintaining a separate hierarchy per language has been supported since ever. In Magnolia 3.5 we added &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Introduction+to+I18nContentSupport"&gt;i18n suppor&lt;/a&gt;t for multiple language sites allowing to have a single hierarchy. But we were still missing a nice built-in support for entering 18n data in the dialogs.&lt;br /&gt;&lt;br /&gt;Till now the developer was forced to create a field per language (title_de, title_fr, ..). The positive thing about that was that one was able to place the fields as one pleased, by either putting them together in one place or having extra tabs per language. But the drawback of that was, that one had to add this fields per language and that once you wanted support more than 4 languages you had trouble to place the fields in a sensible way.&lt;br /&gt;&lt;br /&gt;For instance it would be a nightmare to use STK in such a scenario as one had to adapt all the dialogs manually.&lt;br /&gt;&lt;br /&gt;So we decided to improve that for 4.3. You will now mark a dialog field as i18n aware by adding an i18n nodedata to its definition. The dialog will then render the dialog accordingly based on the current language.&lt;br /&gt;&lt;br /&gt;First we wanted to have the language chooser in the dialog but failed to find a solution which is nice and also not to complicated to implement (we will rewrite the UI for 5.0). So we came to the conclusion that selecting the language in the main bar of the page makes much more sense. The edit/new bar will then pass the current content language to the dialog. The dialog looks then 100% the same as in a single language scenario but is i18n aware in the way that it renames the field as marked to be i18n aware to the correct name: title_de, title_fr, …&lt;br /&gt;&lt;br /&gt;Beside we will also support per site i18n configuration, so that one can work with quite complex scenarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-1030701296161889062?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia i18n</category>
      <pubDate>Mon, 08 Feb 2010 18:00:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/01/i18n-support-in-dialogs-magnolia-43.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-02-08T18:00:00Z</dc:date>
    </item>
    <item>
      <title>Groovy.times{Magnolia}</title>
      <link>http://www.betterfasterbigger.com/2010/02/groovytimesmagnolia.html</link>
      <description>&lt;a href="http://www.forbes.com/2010/02/01/computer-programming-java-technology-business-intelligence-groovy.html"&gt;Forbes has published an interesting article&lt;/a&gt; about CTO's favorite choices of programming languages. Its author Dan Woods argues that Groovy combines the best of Lisp, Ruby and Python, but in addition:&lt;blockquote&gt;"From an operations perspective, Groovy is deployed like Java, so data center staff that can handle Java won't be surprised by Groovy."&lt;/blockquote&gt;&lt;div&gt;Dan ends his article with the words&lt;br /&gt;&lt;blockquote&gt;"… if you are starting from scratch on an advanced Web site, it will be hard to do better than Groovy"&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Of course, we at Magnolia CMS could not agree more. Magnolia is written in Java and provides a fantastic framework to build web sites efficiently. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, developing and deploying apps in an enterprise environment like the Java platform involves a certain effort. Typically, a developer uses an IDE (Integrated Development Environment) in which code is written, compiled, deployed to a test server and tested. This cycle is well defined and has massive benefits in the Enterprise world. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now as &lt;a href="http://directwebremoting.org/blog/joe/2006/08/02/reducing_the_edit_compile_test_cycle.html"&gt;Joe Walker rightly notes&lt;/a&gt;:&lt;blockquote&gt;"There's a fairly obvious link between developer productivity and the edit/compile/test cycle. One of the big things wrong with Enterprise Java is that you swap the edit/compile/test cycle for an edit/compile/deploy/test cycle and one of the things right about PHP is that edit/compile/test is just edit/test."&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;When you quickly wish to try out something new, build a prototype or add a feature for a demo, a more agile framework would be considerably more fun for the developer, could save a lot of time and lead to a better result. More agile means that the edit-compile-deploy-test cycle needs to be simplified. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter full Groovy support in Magnolia. With the next release (4.3, out in March) we will introduce full-blown support for Groovy, which allows for a much more agile approach to implementing new functionality for your web site, while retaining the full power, scalability and security of the java-stack.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;With Groovy you can add new functionality at runtime without a edit-compile-deploy-test cycle. The edit-compile-deploy-test cycle is reduced to edit-test like in PHP. This really cuts down on the time it needs to try out some stuff, build ad-hoc functionality or prototypes/demos. It will also be extremely helpful when building import scripts or run reports.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;View Greg's video of what we have achieved with &lt;a href="http://www.youtube.com/watch?v=OTdAYS7hwfE"&gt;Groovy support in Magnolia&lt;/a&gt; so far.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-4549621794212651816?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>agile</category>
      <category>development</category>
      <category>magnolia</category>
      <category>script</category>
      <category>groovy</category>
      <pubDate>Wed, 03 Feb 2010 13:57:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/02/groovytimesmagnolia.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-02-03T13:57:00Z</dc:date>
    </item>
    <item>
      <title>Getting serious</title>
      <link>http://www.betterfasterbigger.com/2010/02/getting-serious.html</link>
      <description>Magnolia today announced the &lt;a href="http://www.magnolia-cms.com/home/news/press-releases/alfresco-sales-manager-joins-magnolia.html"&gt;appointment of Andrew King as the new Head of Business Development for Magnolia Americas&lt;/a&gt;. Andrew is coming to us from competing Alfresco, and as such he brings with him excellent industry knowledge, &lt;b&gt;and&lt;/b&gt; he gets Open Source. Combining his expertise with the outstanding product that Magnolia CMS really is leads to excellent motivation on all sides, and we look forward to &lt;a href="http://www.magnolia-cms.com/home/customers.html"&gt;make many more customers happy&lt;/a&gt; than we already did.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am really excited about Magnolia making headway into the US. After all, I personally founded Magnolia Americas in summer 2007 and spend considerably time there laying the foundation of our success. With Andrew, we hired a "native" who understands the US market and has worked with European companies before. This will be of great benefit for our clients as well as our partner channel in the USA. Developing the latter is Andrew's first priority, in line with our corporate strategy of growing with our partners. Our non-compete partner strategy should be a strong incentive for potential partners in the USA, and we look forward to partner with some excellent companies in the USA.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Having Andrew on board is certainly a milestone for our US business. Expect more good news to come!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-4995463780835351702?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <category>americas</category>
      <category>usa</category>
      <pubDate>Tue, 02 Feb 2010 16:13:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/02/getting-serious.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-02-02T16:13:00Z</dc:date>
    </item>
    <item>
      <title>Configuration Inheritance (Magnolia 4.3)</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2010/02/configuration-inheritance-magnolia-43.html</link>
      <description>&lt;div&gt;&lt;div&gt;While developing the mutlisite support we realized once more how helpful it would be if one were able to inherit configurations instead of copying them. After some thoughts I came to the conclution that it might be rather simple to support this by implementing an other content wrapper which merges the content under the hood.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The wrapper checks the existence of a nodedata named 'extends' which can define a absolut or relative path to an other node.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can see a demonstration in the following short video: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;object width="320" height="265"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aIbmFqGZH7M&amp;hl=en_US&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aIbmFqGZH7M&amp;hl=en_US&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;First I had to &lt;a href="http://jira.magnolia-cms.com/browse/MAGNOLIA-3015"&gt;re-factor/improve the content API&lt;/a&gt; to make that wrapper extendable in a easier way. Then I have just created some tests and added the implementation. Once this was done I just searched the two places where I have to wrap the passed configuration before processing:&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;content2bean (used to build filters, modules, templates and various other components, ..)&lt;/li&gt;&lt;li&gt;dialog manager (responsible to transform a configuration into a dialog)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The merge is then performed as follows (taken from the javadoc):&lt;ul&gt;  &lt;li&gt;node datas are merged and values are overwritten&lt;/li&gt;  &lt;li&gt;sub content nodes are merged, the original order is guaranteed, new nodes are added at the end of the list&lt;/li&gt;&lt;/ul&gt;The mechanism supports multiple inheritances as such:&lt;ul&gt;  &lt;li&gt;the node the current node inherits from can again extend a node&lt;/li&gt;  &lt;li&gt;nodes laying deeper in the hierarchy can extend an other node&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-4832302501810022117?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 02 Feb 2010 08:50:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2010/02/configuration-inheritance-magnolia-43.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2010-02-02T08:50:00Z</dc:date>
    </item>
    <item>
      <title>ModeShape - a unified content bus for Magnolia?</title>
      <link>http://www.betterfasterbigger.com/2010/01/modeshape-unified-content-bus-for.html</link>
      <description>While Oracle is working on delivering everything you might ever need from a single vendor, the real world is a mess. Always has been, always will be. (Reminder: politics has to do with people, not technology).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The real world means that you have a lot of information hubs (call them silo's if they are proprietary and provide no open API to access their content). Content Management Systems like &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt; have provided a very open architecture to access these hubs, in part because Magnolia is running on the Java platform, which has been built for such integration, and in part because Magnolia's design is so open. However, each such integration still means the developer needs to understand the target API, a fact that quickly becomes expensive.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wouldn't it be much nicer if the developer could just ignore the fact how and where data is coming from, and simply use JSR-170 to access it?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter &lt;a href="http://www.jboss.org/modeshape.html"&gt;ModeShape&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;ModeShape (formerly "JBoss DNA") is a &lt;a href="http://jcp.org/en/jsr/detail?id=170"&gt;JCR&lt;/a&gt; implementation that provides access to content stored in many different kinds of systems. A ModeShape repository isn't yet another silo of isolated information, but rather it's a JCR view of the information you already have in your environment: files systems, databases, other repositories, services, applications, etc.&lt;br /&gt;&lt;br /&gt;To your applications, ModeShape looks and behaves like a regular JCR repository. Using the standard JCR API, applications can search, navigate, version, and listen for changes in the content. But under the covers, ModeShape gets its content by federating multiple back-end systems (like databases, services, other repositories, etc.), allowing those systems to continue "owning" the information while ensuring the unified repository stays up-to-date and in sync.&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;So, if all goes well, ModeShape will provide a seamless extension of our existing content repository architecture. Instead of e.g. creating a new workspace and importing data from a third party system, you could just use ModeShape and add a connector to said system. If you are lucky, such a connector already exists. ModeShape is LGPL and as such I hope that it will gain wide adoption as a transparent wrapper for JackRabbit. Used in this way (provided the performance hit is small), nothing changes from the perspective of Magnolia (or the developer) but eventually, it will simplify content integration on the JSR-170 level, something that would definitely be a boost to the importance of the specification.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And with some luck, the world will be less messy even for those that don't shell out for Larry's vision of one provider for all things IT.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-4067378430551719234?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>jcr</category>
      <category>modeshape</category>
      <category>magnolia</category>
      <category>unified-content</category>
      <category>jboss</category>
      <category>jsr-170</category>
      <category>repository</category>
      <pubDate>Wed, 27 Jan 2010 11:10:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2010/01/modeshape-unified-content-bus-for.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2010-01-27T11:10:00Z</dc:date>
    </item>
    <item>
      <title>Happy Old Year, Happy New Year for Magnolia CMS</title>
      <link>http://www.betterfasterbigger.com/2009/12/happy-old-year-happy-new-year-for.html</link>
      <description>&lt;span class="Apple-style-span" style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); "&gt;We are happy to say that 2009 has been the best year ever in Magnolia's corporate history. We are entering 2010 in a very strong position. We have a great team, a great product, great customers and our financial position is strong. Our license revenue has increased more than 60% for the third year in a row and has now reached about 75% of total revenue, clearly in line with our strategy to leave services to our partners and focus on product development, sales, marketing and education.&lt;br /&gt;&lt;br /&gt;On the documentation front, the realization that documentation is as important as the product has resulted in significant more investment into documentation. While unfortunately, some of it has not yet left a visible trace, documentation has significantly improved in many areas. Most importantly, we have just added a full-time technical writer to our team and fully expect our vision for the documentation become a reality in 2010 (some pretty exciting ideas - stay tuned!)&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:'lucida grande', tahoma, verdana, arial, sans-serif;font-size:100%;color:#333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); "&gt;In addition, 2 more new positions will be filled in January, making Magnolia bigger and stronger than ever. So expect great things form us in 2010 - and we expect great things from you! We have seen growing community activity, many cool modules have been developed and the Magnolia Conference was a personal highlight in my life. Thank you for your continued support!&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;So Happy New Year to all of you. We are looking forward to a fantastic 2010 together with you! &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-7208084531653336682?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>documentation</category>
      <category>community</category>
      <category>magnolia</category>
      <pubDate>Thu, 31 Dec 2009 16:46:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/12/happy-old-year-happy-new-year-for.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2009-12-31T16:46:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia Conference Keynote</title>
      <link>http://www.betterfasterbigger.com/2009/09/mconf-keynote-640x3601.html</link>
      <description>&lt;center&gt;               &lt;script type="text/javascript" src="http://blip.tv/scripts/pokkariPlayer.js?ver=2009070701"&gt;&lt;/script&gt;     &lt;script type="text/javascript" src="http://blip.tv/syndication/write_player?skin=js&amp;amp;posts_id=2684492&amp;amp;source=3&amp;amp;autoplay=true&amp;amp;file_type=flv&amp;amp;player_width=&amp;amp;player_height="&gt;&lt;/script&gt;     &lt;div id="blip_movie_content_2684492"&gt;     &lt;a rel="enclosure" href="http://blip.tv/file/get/Magnoliacms-MCONFKEYNOTE640x3601254.flv" onclick="play_blip_movie_2684492(); return false;"&gt;&lt;img title="Click to play" alt="Video thumbnail. Click to play" src="http://blip.tv/file/get/Magnoliacms-MCONFKEYNOTE640x3601254.flv.jpg" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel="enclosure" href="http://blip.tv/file/get/Magnoliacms-MCONFKEYNOTE640x3601254.flv" onclick="play_blip_movie_2684492(); return false;"&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class="blip_description"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-4552282260096984153?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <category>mconf</category>
      <pubDate>Wed, 30 Sep 2009 19:41:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/09/mconf-keynote-640x3601.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2009-09-30T19:41:00Z</dc:date>
    </item>
    <item>
      <title>STK Book</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/09/stk-book.html</link>
      <description>Some weeks ago I have put down as much information in as little time as possible. The result can be found in the &lt;a href="http://wiki.magnolia-cms.com/display/DEV/STK+Book"&gt;STK Book&lt;/a&gt;. It is for the moment the far best entry point for anybody trying to work with the STK. I also think that this pages contain some information valuable for those who are already familiar with the main concepts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-4673302579236214863?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 17 Sep 2009 09:25:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/09/stk-book.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-09-17T09:25:00Z</dc:date>
    </item>
    <item>
      <title>Dynamic Redirects</title>
      <link>http://www.betterfasterbigger.com/2009/08/dynamic-redirects.html</link>
      <description>&lt;div style="text-align: left;"&gt;Have you been in the situation where you want to shorten URL's in your communication? For instance, it is time for a new Magnolia newsletter, the 8th one in our series. Our newsletters are located at http://www.magnolia-cms.com/home/news/newsletters/newsletter-8.html - not exactly brilliant from a communications perspective.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia allows you to add VirtualURIRedirects, and I have written about their usefulness before in the context of site restructuring.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For our newsletter, we typically add an entry in the configuration like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_W30bQac4R1s/SoGFwS2xA8I/AAAAAAAADmw/K1e1NKpcE0U/s400/Picture+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5368719295544099778" style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 400px; height: 68px; " /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_W30bQac4R1s/SoGFwb6POoI/AAAAAAAADm4/OgCcgJIjZmM/s1600-h/Picture+3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;In other words, we add a static entry that forwards www.magnolia-cms.com/nl8 to our newsletter location deep within the site hierarchy, and makes it much easier to send out links or twitter about it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far so good, but today saw the 8th time I needed to add such an entry; and what is worse, I realized that we forgot the redirect for our 7th newsletter (which was sent out while I was on holidays, and the person doing the job did not know he had to add it).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Time to dig a little deeper into Magnolia, and avoid future work and worries!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since sometime in Magnolia 3, you can use regular expressions in the VirtualURIMapping  configuration. Here is what you need to do&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;copy an existing configuration&lt;/li&gt;&lt;li&gt;instead of the default class (aptly named "DefaultVirtualURIMapping") use the class RegexpVirtualURIMapping&lt;/li&gt;&lt;li&gt;define your match ("fromURI"), in our case "/nl([0-9]+)$" which means any URI starting with /nl followed by digits and nothing more (the $ means end of line). The parenthesis denote the dynamic part, which we need to determine the correct destination in the last step:&lt;/li&gt;&lt;li&gt;define your target ("toURI"), in our case the newsletter page deep within the hierarchy, with an added twist: we dynamically add our match to the page name, i.e. "newsletter-$1.html". In this case $1 means replace "$1" with whatever was matched in step 3 between the parenthesis. (And yes, you can have more than one set of parenthesis and reference the matches with $1, $2 etc). &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The resulting entry should look as follows, and all you need to do now is activate your configuration and enjoy!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_W30bQac4R1s/SoGFwb6POoI/AAAAAAAADm4/OgCcgJIjZmM/s1600-h/Picture+3.png" style="text-decoration: none;"&gt;&lt;img src="http://4.bp.blogspot.com/_W30bQac4R1s/SoGFwb6POoI/AAAAAAAADm4/OgCcgJIjZmM/s400/Picture+3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5368719297974581890" style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 400px; height: 65px; " /&gt;&lt;/a&gt;&lt;br /&gt;As you can imagine, this is also great for search-engine optimized landing pages.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-95879115918915090?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>virtual uri mapping</category>
      <category>SEO</category>
      <category>magnolia</category>
      <category>magnolia-cms.com</category>
      <pubDate>Tue, 11 Aug 2009 14:48:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/08/dynamic-redirects.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2009-08-11T14:48:00Z</dc:date>
    </item>
    <item>
      <title>STK 1.1, next level</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/04/stk-11-next-level.html</link>
      <description>We improved STK based on projects and feedback given in workshops and I can say it is a major step forward. Doing that we added several new essential features and the concept planted in 1.0 are now building the fundamentals and are now applied more concisely.&lt;br /&gt;&lt;br /&gt;Following some of the most prominent new features.&lt;br /&gt;- fancy teasers / stages (caroussel, ..)&lt;br /&gt;- new / events overview (calendar, ..)&lt;br /&gt;- commenting&lt;br /&gt;- categorization&lt;br /&gt;- faq&lt;br /&gt;- glossary&lt;br /&gt;&lt;br /&gt;We will release in about 2 weeks a first beta or even a release candidate. For those who are most interested can download the &lt;a href="http://repo.magnolia-cms.com/m2/info/magnolia/magnolia-standard-templating-kit-bundle/1.1-m4/magnolia-standard-templating-kit-bundle-1.1-m4-bundle.zip"&gt;milstone 4 version&lt;/a&gt; which we actually already use successfully in one of our projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-6327990989096954102?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 02 Apr 2009 09:18:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/04/stk-11-next-level.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-04-02T09:18:00Z</dc:date>
    </item>
    <item>
      <title>2009 NBVP Future of Open Source results</title>
      <link>http://www.betterfasterbigger.com/2009/03/2009-nbvp-future-of-open-source-results.html</link>
      <description>The North Bridge Venture Partners 2009 Future of Open Source survey results have been published.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fascinating for me is slide 13, which shows how the decision criteria for open source have changed from 2008 to 2009. Number one is lower TCO (unchanged). Access to code, which was #2 last year, has dropped to 5th rank in 2009. Now, "Superior Security" is ranked second, up from 7th place in 2008. Third rank is unchanged "Freedom from vendor lock-in" and new this year is 4th rank: "Better quality software".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So open source software is perceived as &lt;b&gt;cheaper, better and more secure than proprietary alternatives&lt;/b&gt;. Sounds like a pretty good position to be in for any Open Source vendor.&lt;/div&gt;&lt;div&gt;&lt;img style="visibility:hidden;width:0px;height:0px;" border="0" width="0" height="0" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMzgxNDM2MzkwMzEmcHQ9MTIzODE*NDEyNDU1NSZwPTEwMTkxJmQ9Jmc9MiZ*PSZvPTY3Y2VjMDA5MzQ5YTQ4NTA4ZGM3N2EzZjYwODQ5MDU5.gif" /&gt;&lt;div style="width:425px;text-align:left" id="__ss_1191223"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/bhouse/2009-nbvp-future-of-open-source-results?type=powerpoint" title="2009 NBVP Future of Open Source results"&gt;2009 NBVP Future of Open Source results&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2009nbvpkeynotepanel-3-6share-090324123023-phpapp02&amp;amp;stripped_title=2009-nbvp-future-of-open-source-results"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2009nbvpkeynotepanel-3-6share-090324123023-phpapp02&amp;amp;stripped_title=2009-nbvp-future-of-open-source-results" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/bhouse"&gt;bhouse&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-4330545400799130728?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>open-source</category>
      <category>magnolia</category>
      <pubDate>Fri, 27 Mar 2009 08:55:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/03/2009-nbvp-future-of-open-source-results.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2009-03-27T08:55:00Z</dc:date>
    </item>
    <item>
      <title>The CMS Vendor meme - a.k.a. CMS vendor reality check</title>
      <link>http://www.betterfasterbigger.com/2009/03/cms-vendor-meme.html</link>
      <description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W30bQac4R1s/Sb_ZSqVBIpI/AAAAAAAADmo/RsfUOBVG_M8/s1600-h/vendor+challenge+score.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 259px; height: 239px;" src="http://1.bp.blogspot.com/_W30bQac4R1s/Sb_ZSqVBIpI/AAAAAAAADmo/RsfUOBVG_M8/s400/vendor+challenge+score.jpg" alt="" id="BLOGGER_PHOTO_ID_5314204999943791250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We have been &lt;a href="http://dev.day.com/microsling/content/blogs/main/cmsvendormeme.html"&gt;challenged by Day&lt;/a&gt; to participate in the CMS Vendor Meme. To repeat:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The rules&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;A CMS vendor is challenged to honestly answer all items on the "&lt;a href="http://www.cmswatch.com/Trends/1518-A-reality-checklist-for-vendors?source=RSS"&gt;Reality checklist for vendors&lt;/a&gt;" suggested by CMSWatch's Kas Thomas (aka the "we-get-it checklist for vendors").&lt;/li&gt;&lt;li&gt;If possible the vendor has supply screenshots, links or other means to make it easy to verify the answers.&lt;/li&gt;&lt;li&gt;The answers also need to be supplied in a short form of one to three stars (denoting "no", "sort-of", "yes").&lt;/li&gt;&lt;li&gt;Answering all questions on his blog allows the vendor tag some other WCMS vendors.&lt;/li&gt;&lt;li&gt;A tagged vendor should provide a link back to the blog that tagged him.&lt;/li&gt;&lt;/ul&gt;So here we go:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Our software comes with an installer program - Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, download the EE trial and you can choose between various bundles meeting your needs, including an installer. All files are installed in a single folder, no additional software except Java is needed. To uninstall either use the uninstaller installed by the installer, or simply remove the folder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Installing or uninstalling our software does not require a reboot of your machine &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No restart required. Why are you asking?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. You can choose your locale and language at install time, and never have to see English again after that - &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can chose the installer language, but the default locale when you start up Magnolia is English. You can change that in the user preferences for each user separately, so if you have a globally distributed team speaking 15 different languages, no sweat.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Eval versions of the latest edition(s) of our software are always available for download from the company website &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not only eval versions, but even completely functional versions are available from Magnolia - a free trial of a complete Enterprise Edition or a completely free Open-Source Community Edition is available for immediate download.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Our WCM software comes with a fully templated "sample web site" and sample workflows, which work out-of-the-box &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Oh yes. And not only is it a sample site, it is a a production-ready, search-engine-optimized, accessible site that works on any browser. CSS driven. XHTML. State of the art.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_W30bQac4R1s/Sb_MvHDhuRI/AAAAAAAADmY/FLmddwh99WY/s1600-h/Magnolia-STK-home-page-338.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 338px; height: 261px;" src="http://3.bp.blogspot.com/_W30bQac4R1s/Sb_MvHDhuRI/AAAAAAAADmY/FLmddwh99WY/s400/Magnolia-STK-home-page-338.jpg" alt="" id="BLOGGER_PHOTO_ID_5314191195040233746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. We ship a tutorial - &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We provide all documentation online, &lt;a href="http://documentation.magnolia-cms.com/usermanual.html"&gt;including a 300 page user manual&lt;/a&gt;. No registration required.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7. You can raise a support issue via a button, link, or menu command in our administrative interface &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yep, link to our issue-tracker is right in AdminCentral.&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///Users/bkraft/Desktop/magnolia%20admincentral%20links.jpg" alt="" /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W30bQac4R1s/Sb_Q_HWHvCI/AAAAAAAADmg/6RLSYaEFYPo/s1600-h/magnolia+admincentral+links.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 56px;" src="http://1.bp.blogspot.com/_W30bQac4R1s/Sb_Q_HWHvCI/AAAAAAAADmg/6RLSYaEFYPo/s400/magnolia+admincentral+links.jpg" alt="" id="BLOGGER_PHOTO_ID_5314195868042640418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;8. All help files and documentation for the product are laid down as part of the install &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Sort of&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All &lt;a href="http://documentation.magnolia-cms.com/"&gt;Magnolia documentation is online.&lt;/a&gt; Link is right in AdminCentral (see above). As a side-note, I don't think it is a great idea to deliver documentation directly with the product, because it bloats the download and is outdated before it is read.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9. We run our entire company website using the latest version of our own WCMproducts &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Sort of&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nearly. Unlike Day, we did not have three years time to release our latest generation of software, and since we just released Magnolia 4.0 last week, I am afraid we did not have time to upgrade our site yet. We'll do it as soon as we have managed to call back all those prospects that inquire about us these days.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10. Our salespeople understand how our products work- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Salespeople? That's a bit last century, no? But the people you talk to know how Magnolia works, because the people you talk to are the people who developed it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;11. Our software does what we say it does &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course. We tend to say less and let the software speak for itself though.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;12. We don't charge extra for our SDK&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; - Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course not. We don't even charge for the software unless you want our supported Enterprise Edition.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;13. Our licensing model is simple enough for a 5-year-old to understand &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can get one version for free. You get a better, supported version for 12k $ per server per year. Simple enough for a five year old.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;14. We have one price sheet for all customers &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, and &lt;a href="http://www.magnolia-cms.com/home/products/pricing.html"&gt;Magnolia prices are published on the web.&lt;/a&gt; We do give discounts to non-profits and educational clients, though.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;15. Our top executives are on Skype, Twitter, or some similar channel, and: Feel free to contact them directly at any time &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;- Yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CEO Pascal Mangold: &lt;a href="http://twitter.com/pascalmangold"&gt;Twitter&lt;/a&gt;&lt;br /&gt;CTO Boris Kraft: &lt;a href="http://twitter.com/bkraft"&gt;Twitter&lt;/a&gt;&lt;br /&gt;... and we are always happy to talk to you on the phone or in person.&lt;br /&gt;&lt;br /&gt;And we are tagging:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jahia.com/"&gt;Jahia&lt;/a&gt;, &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt;, &lt;a href="http://www.opencms.org/"&gt;OpenCMS&lt;/a&gt;, &lt;a href="http://www.onehippo.com/"&gt;Hippo&lt;/a&gt;, &lt;a href="http://ez.no/"&gt;EZ&lt;/a&gt;, &lt;a href="http://www.coremedia.com/"&gt;Core Media&lt;/a&gt;, &lt;a href="http://dotcms.org/"&gt;dotCMS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-6753341847910276641?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>comparison</category>
      <category>cmswatch</category>
      <category>magnolia</category>
      <category>magnolia-cms.com</category>
      <category>9c56d0fcf93175d70e1c9b9d188167cf</category>
      <category>realitycheck</category>
      <pubDate>Tue, 17 Mar 2009 15:36:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/03/cms-vendor-meme.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2009-03-17T15:36:00Z</dc:date>
    </item>
    <item>
      <title>Do you ever buy bottled water?</title>
      <link>http://www.betterfasterbigger.com/2009/03/do-you-ever-buy-bottled-water.html</link>
      <description>Mark de Visser recently &lt;a target="_blank" href="http://weblog.infoworld.com/openresource/archives/2009/03/what_do_we_know.html"&gt;posted&lt;/a&gt; about Open Source pricing, asking "Is there a formula for what open source software should cost?".&lt;br /&gt;&lt;br /&gt;I don't think there is - or should be - a formula for what Open Source software should cost compared to proprietary software. Foremost, there is rarely an exact proprietary equivalent to an Open-Source offering. Even if there was, the product itself is only part of what you buy. And even within the proprietary world, prices often vary widely for similar products. (Did you ever buy bottled water?)&lt;br /&gt;&lt;br /&gt;But I agree that pricing should be straightforward and transparent in general. At Magnolia we originally tried per-user pricing but it quickly turned out to be too complicated, too many questions asked ("what exactly counts as a user"). We have had a per server pricing for the last 2.5 years and we have always published our prices on the web, easy to locate. This way, we minimize our effort, which is a big part of what Open-Source distribution is all about. We focus on the product, not on sales.&lt;br /&gt;&lt;br /&gt;Now, this cost reduction can either be propagated to our clients through lower prices or through better software. I don't think the purchase price should be the first reason why you should look at Open Source. If you pay 1000 USD for a car that can only turn left, would you consider that a good deal? Thought so. So the real  driver should be value, and the value proposition of Open Source is rather different from the value proposition of closed-source, proprietary software.&lt;br /&gt;&lt;br /&gt;The real value of Open-Source is in the its openness, which for true Open-Source products goes far beyond source code availability. Some ideas:&lt;br /&gt;&lt;br /&gt;If your IT team is working with an Open-Source product, they will have more interesting and more satisfying work to do and they will learn things that are actually useful for many years to come, as Open-Source products tend to be based on standards. The result is not only cost savings down the road (because your in-house-team can and wants to do more themselves), but also a generally better implementation because you have a motivated team close to the client. Finally, your IT staff turnover is reduced, which further improves your ROI. &lt;br /&gt;&lt;br /&gt;So if you pay 20% or 120% for Open-Source compared to a proprietary product has little to do with the value you get. In fact, I would argue that Open-Source provides more value, which is exactly why Magnolia is Open-Source software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-6869153285412089353?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>value</category>
      <category>open-source</category>
      <category>magnolia</category>
      <category>benefit</category>
      <category>pricing</category>
      <category>cost</category>
      <pubDate>Tue, 03 Mar 2009 09:16:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/03/do-you-ever-buy-bottled-water.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2009-03-03T09:16:00Z</dc:date>
    </item>
    <item>
      <title>Personalization in Magnolia for the Van Lanschot web site</title>
      <link>http://www.betterfasterbigger.com/2009/02/personalization-in-magnolia-for-van.html</link>
      <description>&lt;span style="font-style:italic;"&gt;(by guest author Edgar Vonk, software architect at Amsterdam-based full service internet agency &lt;a target="_blank" href="http://www.info.nl/"&gt;Info.nl&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As described in the &lt;a target="_blank" href="http://www.magnolia-cms.com/home/customers/case-studies/van-lanschot.html"&gt;case study on the Magnolia web site&lt;/a&gt; Info.nl has recently created a new corporate and marketing web site for Van Lanschot Bankiers, the oldest independent bank in The Netherlands.&lt;br /&gt;&lt;br /&gt;In this blog post we will shed some light on the technical realization of the personalization functionality that is part of this (Dutch) web site. The post will not cover details on the concept behind this functionality nor aspects concerning privacy.&lt;br /&gt;&lt;br /&gt;The concept is based on Info.nl's model of &lt;a target="_blank" href="http://www.virtualwarmth.com/"&gt;Virtual Warmth&lt;/a&gt; where an online dialogue is sought with the potential client (prospect). The prospect can enter some details on his (or her) financial situation. The web site then displays topics (often concerning financial products) that are related to the prospect's situation. Also, any topics that are visited by the prospect during the active session are tracked and stored as part of the prospect's session. This way a 'personal file' is created on the fly:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_RBP92CQFU8w/SaaYtr81ixI/AAAAAAAAAYo/BHYT4GjiqCA/s1600-h/dossier.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 340px; height: 286px;" src="http://4.bp.blogspot.com/_RBP92CQFU8w/SaaYtr81ixI/AAAAAAAAAYo/BHYT4GjiqCA/s400/dossier.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5307097121562135314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Magnolia Enterprise&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Info.nl has chosen Magnolia as its open source Java CMS of choice, which has resulted in Info.nl being a Magnolia implementation partner. In this case Magnolia Enterprise was chosen because of the extra features, guarantees and support that come with this edition. Info.nl deemed Magnolia Enterprise a good choice for the Van Lanschot case because of the openness of the product, the reliance on open standards, the extensibility (by means of custom modules) and the intuitive user interface.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tracking visited topics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The visitor (prospect) is always anonymous. No personal data is stored by the system; hence there is no authentication mechanism. For each prospect a HTTP session is created in which the personal file is stored. Each time a topic is visited the ID (a JCR UUID) of this topic is stored in the personal file in 'last seen' order. Care is taken that topics are not stored twice. This online dialogue is implemented as a single-page-interface using AJAX technology. To realize this functionality a custom Magnolia Filter was written that was set to intercept all topic 'pages' using a virtual URI mapping. The screenshot below shows the filter in the Magnolia filter chain:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RBP92CQFU8w/SaajjMlGDnI/AAAAAAAAAYw/B9EJsMrvG9A/s1600-h/filters.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 344px;" src="http://3.bp.blogspot.com/_RBP92CQFU8w/SaajjMlGDnI/AAAAAAAAAYw/B9EJsMrvG9A/s400/filters.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5307109035970268786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In our JSP templates the personal file data is then read from the HTTP session in order to show the list of topics visited by the prospect.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Storage and retrieval of the personal file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The prospect can also choose to save his personal file for later use. The prospect then receives an e-mail with a unique (machine-generated) link back to the stored personal file. The persistent storage of the file is implemented in a Magnolia Page (the Controller in the MVC pattern):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_RBP92CQFU8w/SaakPeAfsCI/AAAAAAAAAY4/sLhyJcgpruk/s1600-h/pageuri.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://1.bp.blogspot.com/_RBP92CQFU8w/SaakPeAfsCI/AAAAAAAAAY4/sLhyJcgpruk/s400/pageuri.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5307109796562841634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using a virtual URI mapping this Page is activated upon a storage request. The visited topics are stored in the form of a comma separated list of unique IDs (taken from the current HTTP session of the prospect).&lt;br /&gt;&lt;br /&gt;Retrieval of the personal file is done using the unique link that was sent in the e-mail. The associated page retrieves the corresponding personal file from the database and places this data in the current HTTP session. The web site then shows an overview page where the visitor can quickly navigate to any topics that were visited in his previous session.&lt;br /&gt;&lt;br /&gt;During this process no sensitive data is stored that could be traced back to the visitor. The stored personal file does not contain any details about the visitor; the e-mail address and name of the prospect are not stored outside of the session.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;User generated data and Magnolia&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The hosting infrastructure consists of one Magnolia authoring and two Magnolia public instances. We thought about storing the personal files in the JCR repository (Jackrabbit) but decided on a simple custom database in the end. The reason why we chose this option is that using the JCR it would have been tricky to make sure that this 'user generated content' would be available to both public instances as well as to the authoring instance. A separate database that is shared by all three instances was easy to implement. I would be interested to hear from readers if they feel that JCR storage could have been a good option too, using Jackrabbit clustering as a way to synchronize this data across the Magnolia instances.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Result&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Magnolia has turned out to be a good CMS for the realization of the new Van Lanschot Bankiers web site. Extending the product with custom functionality part of which was described in this blog post turned out to be relatively easy. This is due to the low learning curve of Magnolia, the openness and extensibility of the product and the reliance on open standards. And thanks to the intuitive interface of Magnolia the content editors of Van Lanschot have no problem in maintaining this dynamic web site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-5506905574275268755?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>personalization</category>
      <category>usergeneratedcontent</category>
      <category>magnolia</category>
      <category>vanlanschot</category>
      <pubDate>Thu, 26 Feb 2009 12:50:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2009/02/personalization-in-magnolia-for-van.html</guid>
      <dc:creator>Bananeman</dc:creator>
      <dc:date>2009-02-26T12:50:00Z</dc:date>
    </item>
    <item>
      <title>STK: HTML and CSS structure</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/stk-html-and-css-structure.html</link>
      <description>I have copied a page which describes the &lt;a href="http://wiki.magnolia-cms.com/display/DEV/HTML+and+CSS+concept"&gt;HTML and CSS concepts&lt;/a&gt; behind the STK.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is mainly important for designers working on new themes.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-5637235950753117820?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 17 Feb 2009 15:01:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/stk-html-and-css-structure.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-17T15:01:00Z</dc:date>
    </item>
    <item>
      <title>The base: content 2 bean</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/base-content-2-bean.html</link>
      <description>&lt;div&gt;Wolf asked me to elaborate a bit on all the billions of options you can configure in the template definitions (and site configuration). Before I start to do so I would like to point all to a new documentation page we have added to the documentation about &lt;a href="http://documentation.magnolia-cms.com/reference/configuration.html"&gt;generic configuration mechanism&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The essential chapter is the one about &lt;a href="http://documentation.magnolia-cms.com/reference/configuration.html#Content2Bean"&gt;content 2 bean&lt;/a&gt; which describes how the configuration is transformed to java beans. The key point is, that if you want to know what you can configure you have to look at the java bean's code (resp. javadoc). This is also the mechanism which is used to setup up the module bean based on the configuration under &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/modules/mymodule/config&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a next step I will start to list most important properties of a STK template.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-5195045008043084616?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>4.0</category>
      <category>documentation</category>
      <pubDate>Tue, 17 Feb 2009 08:37:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/base-content-2-bean.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-17T08:37:00Z</dc:date>
    </item>
    <item>
      <title>Release Notes</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/release-notes.html</link>
      <description>Gregory finally published the &lt;a href="http://documentation.magnolia-cms.com/releases/4-0.html"&gt;release notes&lt;/a&gt; which contains all relevant information about changes (see also the sub pages summarizing API changes &amp;amp; cleanup ).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a template developer you should especially read the &lt;a href="http://documentation.magnolia-cms.com/releases/4-0/templating.html"&gt;new templating features&lt;/a&gt; page.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-7437176672349359993?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>4.0</category>
      <category>documentation</category>
      <pubDate>Thu, 12 Feb 2009 08:31:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/release-notes.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-12T08:31:00Z</dc:date>
    </item>
    <item>
      <title>What is a Theme</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/what-is-theme.html</link>
      <description>Philippe asked me to explain what a theme is. So I did on a new&lt;a href="http://wiki.magnolia.info/display/DEV/Themes"&gt; theme page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-4518907691405382969?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 10 Feb 2009 13:16:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/what-is-theme.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-10T13:16:00Z</dc:date>
    </item>
    <item>
      <title>STK: Themes</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/stk-themes.html</link>
      <description>In STK 1.0 we started to support themes. By default we deliver the theme-pop. I added a quick note about &lt;a href="http://wiki.magnolia-cms.com/display/DEV/Standard+Templating+Kit#StandardTemplatingKit-Themes"&gt;how to create a custom theme&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In the later run this definitely deserves an extra page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-7027609666171469133?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 10 Feb 2009 09:57:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/stk-themes.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-10T09:57:00Z</dc:date>
    </item>
    <item>
      <title>FreeMarker: STK's template language</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/freemarker-stk-template-language.html</link>
      <description>There were controversy debates about the fact that we use FreeMarker as the main template language in STK.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I have put some answers I have given on the user list to the main &lt;a href="http://wiki.magnolia-cms.com/display/DEV/Standard+Templating+Kit"&gt;STK documentation&lt;/a&gt; page and wrote a Magnolia oriented &lt;a href="http://wiki.magnolia-cms.com/display/DEV/Standard+Templating+Kit"&gt;FreeMarker primer.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-4985920298120191772?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 10 Feb 2009 09:45:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/freemarker-stk-template-language.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-10T09:45:00Z</dc:date>
    </item>
    <item>
      <title>Introduction to Standard Templating Kit</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/introduction-to-standard-templating-kit.html</link>
      <description>Many days passed into the land since I have posted the last time. But now I think it is time to become a bit noisier ;-) I will try to assemble useful information about magnolia 4.0 and the new STK (Standard Templating Kit)&lt;br /&gt;&lt;br /&gt;Doing so I will keep the interested audience informed on this blog. So don't hesitate to depose questions here.&lt;br /&gt;&lt;br /&gt;One of the first things I plan to do is to make a kind of kick off screen cast.&lt;br /&gt;&lt;br /&gt;So lets go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-663542032606422173?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 10 Feb 2009 08:32:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2009/02/introduction-to-standard-templating-kit.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2009-02-10T08:32:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia 4.0: Supersonic Templating</title>
      <link>http://www.betterfasterbigger.com/2008/12/magnolia-40-supersonic-templating.html</link>
      <description>I am happy to tell you that we just hit our 5th anniversary, and times at Magnolia are truly exciting. We have had a phenomenal year 2008, and we have every reason to believe that 2009 will be even more successful for us – not despite, but because of the economic downturn.&lt;br /&gt;&lt;br /&gt;Right now, everyone is trying to cut costs, and Open-Source has an excellent value proposition. Magnolia has reached a level of maturity that is probably well beyond many of our future client's existing infrastructure. Magnolia's list of clients is extensive and leaves no doubt that Magnolia can be used in many different and demanding settings. Any way you look at it, Magnolia could not be in a better position. I have written about many factors coming together in favor of Open-Source business in general and Magnolia in particular in my blog entry titled "&lt;a href="http://betterfasterbigger.blogspot.com/2008/11/perfect-storm.html"&gt;The Perfect Storm&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;So at Magnolia, we are happy, but not complacent. We like what we do, and we work hard to improve Magnolia. Our recent work has been on two fronts - the first one is Magnolia On Air, which we have launched to great acclaim at Gilbane last week. We will talk about Magnolia On Air at length in the coming weeks.&lt;br /&gt;&lt;br /&gt;The other front is Magnolia 4.0, in which we introduce what I like to call "Supersonic Templating" – because you can create custom, feature-rich, and pixel-perfect websites faster than you can fly from Paris to New York.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;A short intermission about templates in Magnolia&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;Templates are used to generate output from Magnolia-managed content. Magnolia allows you to tie together an interface to manage data with a publication mechanism. A template provides the smarts to publish anything. Typically, publication is to the web as HTML, but templates can also be used to publish to other channels and other formats – PDF or RSS are two other common formats that come to mind in the context of web content management.&lt;br /&gt;&lt;br /&gt;So while templates typically define the look &amp;amp; feel of a web-site, they also provide functionality. For instance, a template can be used to pull data from a third system (e.g. the "content" stored in Magnolia could be the connection and query information to an external database. The template would then use that information to query the database and render the output).&lt;br /&gt;&lt;br /&gt;As you can see, templating is quite fundamental to Magnolia. Hence, it only makes sense to further improve the way you define templates and to provide examples of what can be done with Magnolia.&lt;br /&gt;&lt;br /&gt;              ~~~~~~~~~~~~~&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;So what is Supersonic Templating?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;First and foremost we have added fully-fledged Freemarker support to write templates. Freemarker is a templating language that provides many benefits over JSP (which we'll always and fully support). For instance, it has no dependency on the servlet API. This allows as to do many things we could not (or not easily) do with JSP's. For a start, Freemarker allows us to store templates in the repository. This handily allows us to put templates under version and access control, activate them and use workflow on templates.&lt;div&gt;&lt;br /&gt;The fact that Freemarker doesn't depend on Java means that you can write templates without knowing any Java at all. Freemarker simplifies the templates considerably. Jan has shown a typical example where the new Freemarker template is one-third of the size of our previous JSP template. It makes it easy to distinguish HTML markup from Freemarker code. The new Freemarker support will make it extremely easy for newcomers to get started with Magnolia and allow veterans to reduce their maintenance effort significantly.&lt;br /&gt;&lt;br /&gt;There are many other benefits templating in Freemarker brings to Magnolia, which is why we believe it will be the templating language of choice for many new Magnolia sites.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Introducing the Standard Templating Kit&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;In addition, Magnolia 4.0 introduces a "Standard Templating Kit" (STK). Unlike our previously shipped "Sample Module", this is a complete, out-of-the-box website that can and should be used in production. It provides "templating best practice" and an extensive set of ready-made functionality that can easily be extended without changing the STK templates themselves. This is achieved through a new concept of configurable templates.&lt;br /&gt;&lt;br /&gt;The STK renders accessible and 100% CSS-driven HTML. The STK templates and other resources (CSS, JavaScript) are stored in the repository. To allow access to these resources for Magnolia newcomers, we have added a module called "In-Place templating" which makes the Freemarker templates available through a simple web interface. This allows anybody to quickly see how things are done and perform simple changes on the templates themselves right in the browser.&lt;br /&gt;&lt;br /&gt;Even better, we are working on providing WebDAV access to the template repository (probably in 4.1), which allows you to simply map a drive to the Magnolia template repository and use standard client html editors to edit the templates and the css. In other words, it gets very very sweet.&lt;br /&gt;&lt;br /&gt;We are fully aware that in complex integration environments, templates will be part of a custom module, under SVN version control, built using maven or other build tools and deployed using the Magnolia packager module. But I believe that these new, easy-access templating mechanisms will bring many new users to the Magnolia platform and increase Magnolia's visibility in the CMS space.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;New form module&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Magnolia 4.0 also provides a new form module that adds new form fields, validation and form processors (e.g. to store the form data in a database). Form fields now have assignable keys that can be used to retrieve values, for instance to send customized confirmation mails using the new Mail module.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;New mail module&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The new Mail module allows you to send any Magnolia page as inline-HTML and to use Freemarker in mail templates. This makes it very easy to provide news-letter-style functionality.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Other goodies&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Along the way we have added other goodies – we make various objects available to templating in JSP and Freemarker. This includes the current content, a model, paragraph and template definition object. Configurable paragraphs allow you to hide complexity that you previously added to user-facing content-editing dialogs. In other words, Magnolia will be even more user friendly because anything that doen't have to be in a user-dialog can be put somewhere else.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Sites&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We also introduce the explicit notion of a "Site". You can configure multiple sites and assign a configuration to a content tree. Not only does this significantly improve support for multi-site installations, it also makes it simple to switch the layout of a site with the click of a button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Final words&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;As you can see, Magnolia 4.0 will have a lot to offer. Most of the above features have already been implemented in the first preview version, available for &lt;a href="http://files.magnolia.info/4.0-m1/"&gt;download here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Standard preview disclaimer: the preview is buggy and things *will* change or might not make it into the final product at all.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Before we release 4.0 at the end of January 2009, we will add more templates and define the final packaging. Later in 2009 we plan to provide more support for Web 2.0 / community functionality, add the WebDAV support mentioned above and start implementing &lt;a href="http://vivian.steller.info/blog/entry/introduction_to_genuine"&gt;GenUIne&lt;/a&gt;, the new Magnolia 5.0 architecture. As you can see, we will be busy.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-2626523754172688190?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>supersonic-templating</category>
      <category>magnolia</category>
      <pubDate>Thu, 11 Dec 2008 16:37:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2008/12/magnolia-40-supersonic-templating.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2008-12-11T16:37:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia On Air reactions</title>
      <link>http://www.betterfasterbigger.com/2008/12/magnolia-on-air-reactions.html</link>
      <description>We have launched Magnolia On Air, our new broadcast content management system, at Gilbane last week. The reaction has been extremely positive. We were mentioned at Gilbane during a presentation by Forrester as a showcase for Open Source systems that provide Digital Asset Management. I have given various interviews, which was a great experience. We have had some serious interest from TV stations and a very large international non-profit organization.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the interviews was with Eileen Mullan of EContent, who has &lt;a href="http://www.econtentmag.com/Articles/News/News-Item/Helping-Broadcasters-Bloom-with-Magnolia-a-CMS-for-the-Broadcasting-Media-51844.htm"&gt;published her article&lt;/a&gt; about Magnolia On Air.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;CMSWire has written a &lt;a href="http://www.cmswire.com/cms/web-cms/magnolia-releases-cms-for-broadcast-media-003653.php"&gt;great article&lt;/a&gt;:  "the real television (even with the benefits of OnDemand and TiVo) is struggling to keep its little antennae above water. But Magnolia On Air, the new Broadcast Content Management system from Magnolia, may be just what it needs to stay afloat". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia On Air is a collaboration between Magnolia and Futurelab, who brings extensive technological and vertical business knowhow to the solution. Right now we have finalized the first project for RTSI, the Swiss Italian Radio &amp;amp; TV Channel, who will replace their existing site with OnAir in spring. This means we have a fully working system, many components of which are tried and proven. The value of OnAir is in the combination and integration of the components and the marketing focus on the broadcasting industry.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am sure we will be able to publish more details once RTSI goes live with OnAir, but it is already clear that the new power Magnolia On Air provides for the multi-media division of a broadcaster will speed up time to publish massively and reduce costs to do so significantly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is the first collaboration that results in significant value-add to our open-source platform Magnolia. We have received interest for many more such collaborations and it is well possible that this will be a major business driver in the coming years.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-9152238112688794757?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>magnolia</category>
      <category>gilbane</category>
      <category>onair</category>
      <category>broadcast</category>
      <category>open-source</category>
      <category>broadcast-content-management</category>
      <pubDate>Tue, 09 Dec 2008 15:12:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2008/12/magnolia-on-air-reactions.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2008-12-09T15:12:00Z</dc:date>
    </item>
    <item>
      <title>The perfect storm</title>
      <link>http://www.betterfasterbigger.com/2008/11/perfect-storm.html</link>
      <description>Magnolia has been available as a java-based, free, simple-to-use Open-Source Content Management System for five years this month. We are in an amazing position right now - Magnolia is a great brand, a great and stable product, we have built a great team, we have an &lt;a href="http://www.magnolia-cms.com/home/customers.html"&gt;amazing client list&lt;/a&gt;, we are seriously cash-flow positive while most of our competition is either burning venture or making losses &lt;b&gt;and we have two amazing products in the pipeline&lt;/b&gt;. We are in a position of strength in a massively overcrowded marketplace that will see many competitors vanish in the very near future.&lt;br /&gt;&lt;br /&gt;And while the markets tumble and companies struggle to stay alive, there is a very real possibility that &lt;b&gt;Magnolia will fit the bill&lt;/b&gt; for those companies that need to update their web infrastructure. Not only is it cheaper (or free if you choose the GPL'd variant), it is also following a completely different philosophy: Magnolia's focus from the beginning was &lt;b&gt;ease-of-use&lt;/b&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's face it, the demands of knowledge workers have changed dramatically. IBM still tries to use a database driven web model as the basis for their web site deployments (and in doing so, cripples Magnolia in its projects to a text editor). How much longer will they get away with this in a world where anyone can sign up for free to create blogs like this one, or complete websites without involving a battalion of consultants?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some wake up to this new reality. Today, if I read press announcements of our competitors, they read what we announced 5 years ago. "Easy for administrators, developers and users". "Joy-of-use". "Simplicity". Yes, but a press release is no substitute for the real thing, which is why these companies directly drive their clients and prospects to us.&lt;br /&gt;&lt;br /&gt;Yes, requirements in a multinational corporation can be massively complex, but that doesn't mean you need to torture users with your outdated content management processes or unusable user interfaces. It means you have to take &lt;a href="http://wiki.magnolia-cms.com/display/DEV/Genuine+Blog+Posts"&gt;usability serious&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In today's climate, many of our competitors will be unable to sustain their outdated business model which is based on promises and good relations. The number of competitor's senior sales representatives applying for a job at Magnolia has reached a level of one per week. But guess what: our clients don't need senior sales representatives. They visit our website, download Magnolia, talk to our evaluation team to understand how they can make Magnolia fit their needs and if they are satisfied with the result, they become our clients with a simple email or fax message stating the number of licenses they wish to obtain. Did you see the need for a sales guy in this process? Neither did I. So "no sales" is the motto of the day.&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since Magnolia has minimized the cost of sales, it can invest more in development (hence our ability to innovate through tough times) and it can invest more in marketing. The next step our closed-source competition will do is cut down on marketing expenses. This directly enables us to reach a higher visibility with less marketing effort.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;So the closed-source competition is loosing money, losing senior sales guys, (have to) maintain an old code base to somehow keep their clients happy (and increasingly fail to do so), and has to minimize their cost of operations (you don't believe that any of these companies will invest into anything in these times) to stop losses. Thus, they go down the death spiral ever faster. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having dismissed Open-Source as an unmaintainable business model, they failed to seize the opportunity of building more with less. Now they lay off excellent developers (*). Thanks again. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For us, this is the &lt;b&gt;perfect storm&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17778258-2080931784818915226?l=www.betterfasterbigger.com' alt='' /&gt;&lt;/div&gt;</description>
      <category>competition</category>
      <category>open-source</category>
      <category>magnolia</category>
      <category>economy</category>
      <pubDate>Fri, 21 Nov 2008 18:57:00 GMT</pubDate>
      <guid>http://www.betterfasterbigger.com/2008/11/perfect-storm.html</guid>
      <dc:creator>Boris Kraft</dc:creator>
      <dc:date>2008-11-21T18:57:00Z</dc:date>
    </item>
    <item>
      <title>Magnolia 3.6</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2008/05/magnolia-36.html</link>
      <description>Some of you might wonder what we are currently working on for the upcoming Magnolia 3.6 release. There are four enhancements which I will highlight in this blog entry:&lt;br /&gt;- Performance&lt;br /&gt;- Caching (API &amp;amp; Strategies)&lt;br /&gt;- Backup / Migration&lt;br /&gt;- Transactional Activation&lt;br /&gt;&lt;br /&gt;In essence, Magnolia 3.6 will ease maintenance, boost performance and strengthen the robustness or our content management system in production environments.&lt;br /&gt;&lt;br /&gt;Performance:&lt;br /&gt;When talking about performance improvements, I mean significant improvements which are mainly beneficial for authors who create and manage content within Magnolia. Magnolia 3.6 will be up to 10 times faster for example when creating paragraphs, activating content, managing revisions, importing content, and more.&lt;br /&gt;&lt;br /&gt;These improvements are mainly possible because we reduced the usage of mix:versionable (&lt;a href="http://jira.magnolia.info/browse/MAGNOLIA-2086"&gt;MAGNOLIA-2086&lt;/a&gt;).Additionally, we were also able to solve the memory related issues (&lt;a href="http://jira.magnolia.info/browse/MAGNOLIA-1998"&gt;MAGNOLIA-1998&lt;/a&gt;, &lt;a href="http://jira.magnolia.info/browse/MAGNOLIA-2099"&gt;MAGNOLIA-2099&lt;/a&gt;) and have already back ported the solution to Magnolia 3.5.&lt;br /&gt;&lt;br /&gt;Caching:&lt;br /&gt;We already finished development of a new and better API from scratch for Magnolia 3.6 which allows granular custom flushing and caching strategies. The new cache system allows to implement individual cache solutions which optimally meet the load patterns of a website to ensure high availability of every single content element. The default implementation is built on top of &lt;a href="http://ehcache.sourceforge.net"&gt;ehcache&lt;/a&gt;. The enterprise edition of Magnolia 3.6 will include pre-defined caching solutions  that will substantially increase the number of requests served by Magnolia when hitting a cached page, the mechanism being that pages will be cached in the background before the existing cache for visited pages is being flushed. The solution also ensures that only one request truggers the caching process if multiple requests ask for the same not yet cached content.&lt;br /&gt;&lt;br /&gt;Backup:&lt;br /&gt;We wrote a backup facility which allows to restore revisions of content as well. This was not possible before, because only the latest version of a page has been imported in releases prior to Magnolia 3.6. Under the hood, the new backup happens in a persistence independent manner, which was not possible with jcr imports before.  The new backup feature  will be a nice tool for migrations from one persistence to another. This would be needed if you change the database or wish to profit from the new bundled persistence provided by jackrabbit 1.4).&lt;br /&gt;&lt;br /&gt;Transactional Activation:&lt;br /&gt;In former Magnolia versions there was no mechanism guaranteeing that newly created or updated content is being propagated to all public instances (so called “subscribers”) in a staging environment. In Magnolia 3.6, such content gets ether published to all public instances or not at all due to the new transactional activation functionality.&lt;br /&gt;The content will be sent to each public instance at the same time so that the single publishing request does not get cumulated any more as in previous Magnolia releases. The transactional activation feature of Magnolia 3.6 makes sure that changes are only committed and published effectively once the content reached all subscriber instances successfully.&lt;br /&gt;&lt;br /&gt;I am eager to explore this version in production :-)&lt;br /&gt;&lt;br /&gt;If you would like to read more about the technical details of the upcoming Magnolia 3.6 release, visit the &lt;a href="http://wiki.magnolia.info/display/DEV/Home"&gt;Magnolia Development Wiki&lt;/a&gt;. This is the place where we have today started to make our internal concepts, roadmaps and backlog available publicly. Please note the comment functionality at the bottom of each Wiki page – you are invited to add information or leave a question there.&lt;br /&gt;&lt;br /&gt;Just in case you don't have an  account for our Wiki yet, feel free to &lt;a href="http://jira.magnolia.info/secure/Signup%21default.jspa"&gt;register&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-8114666516811732605?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 14 May 2008 17:09:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2008/05/magnolia-36.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2008-05-14T17:09:00Z</dc:date>
    </item>
    <item>
      <title>Memory Fix, Backport to 3.5</title>
      <link>http://philipp-baerfuss-magnolia.blogspot.com/2008/05/memory-fix-backport-to-35.html</link>
      <description>OK a backport to 3.5 was possible and the tests were successful. We will release a 3.5.5 containing this changes.&lt;br /&gt;&lt;br /&gt;Further improvements, like having a mbean to reinitialize the system sessions, will be done for 3.6. I will now compare the two strategies to make a final decision what we make the default:&lt;br /&gt;a) JCRSessionPerThreadSystemContext (would be saver as the sessions are not shared)&lt;br /&gt;b) SingleJCRSessionSystemContext (used in current tests)&lt;br /&gt;&lt;br /&gt;The main issue with a) was that the observation stops when you close a session so I had to add a hack to check for active observations and prevent closing in that case. But I would still prefer a) as  each thread has its own session (thread save, sessions are alway up to date)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/596632623243995219-2040008994200311170?l=philipp-baerfuss-magnolia.blogspot.com' alt='' /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 09 May 2008 11:44:00 GMT</pubDate>
      <guid>http://philipp-baerfuss-magnolia.blogspot.com/2008/05/memory-fix-backport-to-35.html</guid>
      <dc:creator>Philipp Bärfuss</dc:creator>
      <dc:date>2008-05-09T11:44:00Z</dc:date>
    </item>
  </channel>
</rss>


